Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
bsorrentino committed Feb 25, 2017
1 parent 399375b commit 713e76c
Show file tree
Hide file tree
Showing 8 changed files with 187 additions and 6 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/test/target/
11 changes: 11 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
<groupId>org.bsc.processor</groupId>
<artifactId>java2ts-processor</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>java2ts-processor - ${project.version}</name>
<build>
<finalName>java2ts-processor</finalName>
</build>
Expand All @@ -27,6 +28,11 @@
<groupId>edu.washington.cs.types.jsr308</groupId>
<artifactId>jsr308-compiler</artifactId>
</dependency>
<dependency>
<groupId>org.kohsuke.metainf-services</groupId>
<artifactId>metainf-services</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
Expand All @@ -40,6 +46,11 @@
<artifactId>jsr308-compiler</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>org.kohsuke.metainf-services</groupId>
<artifactId>metainf-services</artifactId>
<version>1.7</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
2 changes: 2 additions & 0 deletions src/main/java/org/bsc/processor/AbstractProcessorEx.java
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,8 @@ protected FileObject getSourceOutputFile( Filer filer,

@Override
public final boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
info( "PROCESSOR START");

if (roundEnv.processingOver())
return false;

Expand Down
30 changes: 30 additions & 0 deletions src/main/java/org/bsc/processor/Tuple2.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.bsc.processor;

/**
*
* @author softphone
*/
public class Tuple2<T0,T1> {
final T0 $0;
final T1 $1;

public Tuple2(T0 $0, T1 $1) {
this.$0 = $0;
this.$1 = $1;
}

@Override
public String toString() {
return String.format("%s{$0=%s,$1=%s }",
getClass().getSimpleName(),
String.valueOf($0),
String.valueOf($1)
);
}

}
82 changes: 76 additions & 6 deletions src/main/java/org/bsc/processor/TypescriptProcessor.java
Original file line number Diff line number Diff line change
@@ -1,31 +1,101 @@
package org.bsc.processor;

import io.reactivex.Observable;
import io.reactivex.functions.Function;
import java.beans.BeanInfo;
import java.beans.FeatureDescriptor;
import java.beans.IntrospectionException;
import java.beans.MethodDescriptor;
import java.beans.PropertyDescriptor;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import javax.annotation.processing.RoundEnvironment;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.processing.Processor;
import javax.annotation.processing.SupportedAnnotationTypes;
import javax.annotation.processing.SupportedSourceVersion;
import javax.lang.model.SourceVersion;
import javax.lang.model.element.AnnotationValue;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.TypeElement;
import javax.lang.model.type.DeclaredType;
import org.kohsuke.MetaInfServices;

/**
*
* @author bsoorentino
*/
@SupportedSourceVersion(SourceVersion.RELEASE_8)
@SupportedAnnotationTypes("org.bsc.processor.*")
//@SupportedOptions({ "TS.outdir" })
@MetaInfServices(Processor.class)
public class TypescriptProcessor extends AbstractProcessorEx {


/**
*
* @param processingContext
* @return
*/
@Override
public boolean process( Context processingContext ) {


rxEnumerateDeclaredPackageAndClass( processingContext )
.toMap( (clazz) -> clazz.getName() )
.flatMapObservable( (declaredClasses) ->
Observable.fromIterable(declaredClasses.values())
.map( (clazz) -> new Tuple2( java.beans.Introspector.getBeanInfo(clazz), declaredClasses )))
.doOnNext( this::processClass )
.subscribe( (clazz) -> info( "class [%s]", clazz ) )
;
return true;
}

private void processClass( final Tuple2<BeanInfo, java.util.Map<String, Class<?>>> t ) {

final Class<?> type = t.$0.getBeanDescriptor().getBeanClass();

info( "class %s", type.getName());

info( String.format( "properties:") );
Arrays.asList(t.$0.getPropertyDescriptors()).stream().forEach( (pd) -> {

info( String.format( "\t%s:%s", pd.getName(), convertJavaToTS(pd.getPropertyType(), t.$1)));
});

info( String.format( "methods:"));
Arrays.asList(type.getDeclaredMethods()).stream().forEach( (md) -> {

final Class<?> returnType = md.getReturnType();
info( String.format( "\t%s():%s", md.getName(), convertJavaToTS(returnType, t.$1)));

});

/*
Arrays.asList(t.$0.getMethodDescriptors()).stream().forEach( (md) -> {
final Class<?> returnType = md.getMethod().getReturnType();
info( String.format( "\t%s():%s", md.getName(), convertJavaToTS(returnType, t.$1)));
});
*/
}


private String convertJavaToTS( Class<?> type, java.util.Map<String, Class<?>> declaredClassMap ) {

//info( "java type [%s]", type );
if( type==Void.class || type.equals(Void.TYPE) ) return "void";
if( type.isAssignableFrom(Boolean.class) || type.equals(Boolean.TYPE) ) return type.isPrimitive() ? "boolean" : "boolean" ;
if( type.isAssignableFrom(Integer.class) || type.equals(Integer.TYPE)) return type.isPrimitive() ? "number" : "number" ;
if( type.isAssignableFrom(String.class) ) return "string";

if( declaredClassMap.containsKey(type.getName()) ) {
return type.getSimpleName();
}

return "any";

}


private Observable<Class<?>> rxEnumerateDeclaredPackageAndClass( final Context processingContext ) {

Expand All @@ -45,7 +115,7 @@ private Observable<Class<?>> rxEnumerateDeclaredPackageAndClass( final Context p
.ofType(DeclaredType.class)
.doOnNext((dt) -> info( "DeclaredType [%s]",dt) )
.onExceptionResumeNext(Observable.empty())
.map((DeclaredType dt) -> {
.map((DeclaredType dt) -> {
try {
return Class.forName(dt.toString());
} catch (ClassNotFoundException e1) {
Expand Down
14 changes: 14 additions & 0 deletions src/main/java/org/bsc/processor/annotation/Java2TS.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package org.bsc.processor.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;


@Retention(RetentionPolicy.SOURCE)
@Target( {ElementType.TYPE, ElementType.PACKAGE} )
public @interface Java2TS {

Class<?>[] declare() default {};
}
40 changes: 40 additions & 0 deletions test/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.test</groupId>
<artifactId>java2ts-processor-test</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>java2ts-processor::test - ${project.version}</name>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
<dependency>
<groupId>org.bsc.processor</groupId>
<artifactId>java2ts-processor</artifactId>
<version>${project.version}</version>
</dependency>

</dependencies>

<build>
<finalName>java2ts-processor-test</finalName>
<plugins>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>

</plugins>
</build>
</project>
13 changes: 13 additions & 0 deletions test/src/main/java/org/test/package-info.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
@Java2TS(declare = {
java.beans.Beans.class,
java.sql.Connection.class
})
package org.test;

import org.bsc.processor.annotation.Java2TS;

0 comments on commit 713e76c

Please sign in to comment.