From 170e86417bb854ba9c613214d99b8cf02b344f31 Mon Sep 17 00:00:00 2001 From: bsorrentino Date: Sat, 19 May 2018 00:00:10 +0200 Subject: [PATCH 01/13] move to next dev version --- archetype/pom.xml | 2 +- core/pom.xml | 2 +- pom.xml | 2 +- processor/pom.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/archetype/pom.xml b/archetype/pom.xml index b150b05..9102949 100644 --- a/archetype/pom.xml +++ b/archetype/pom.xml @@ -5,7 +5,7 @@ org.bsc.processor java2ts-processor-parent - 1.0-rc1 + 1.0.0-SNAPSHOT java2ts-processor-archetype java2ts-processor::archetype - ${project.version} diff --git a/core/pom.xml b/core/pom.xml index d2db4df..92ec124 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -3,7 +3,7 @@ org.bsc.processor java2ts-processor-parent - 1.0-rc1 + 1.0.0-SNAPSHOT java2ts-processor-core java2ts-processor::core - ${project.version} diff --git a/pom.xml b/pom.xml index 04b56cd..45f62a0 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 org.bsc.processor java2ts-processor-parent - 1.0-rc1 + 1.0.0-SNAPSHOT pom java2ts-processor::parent - ${project.version} diff --git a/processor/pom.xml b/processor/pom.xml index badb585..ff29a59 100644 --- a/processor/pom.xml +++ b/processor/pom.xml @@ -7,7 +7,7 @@ org.bsc.processor java2ts-processor-parent - 1.0-rc1 + 1.0.0-SNAPSHOT From e69e29eb38aff0b69b2a7ac0b3fd865acb197ea0 Mon Sep 17 00:00:00 2001 From: bsorrentino Date: Mon, 21 May 2018 21:53:50 +0200 Subject: [PATCH 02/13] add functional management --- .../java/org/bsc/java2typescript/TSType.java | 41 +++++++++++++++---- .../org/bsc/processor/annotation/Type.java | 5 ++- 2 files changed, 35 insertions(+), 11 deletions(-) diff --git a/core/src/main/java/org/bsc/java2typescript/TSType.java b/core/src/main/java/org/bsc/java2typescript/TSType.java index 231deea..47dfcfb 100644 --- a/core/src/main/java/org/bsc/java2typescript/TSType.java +++ b/core/src/main/java/org/bsc/java2typescript/TSType.java @@ -21,6 +21,7 @@ public class TSType extends HashMap { private static final String VALUE = "value"; private static final String EXPORT = "export"; private static final String NAMESPACE = "namespace"; + private static final String FUNCTIONAL = "functional"; protected TSType() { super(3); @@ -53,6 +54,7 @@ public static TSType from(Class cl) { }; } + /** * * @return @@ -73,8 +75,8 @@ public boolean isExport() { * * @return */ - public TSType setExport(boolean exports) { - super.put(EXPORT, exports); + public TSType setExport(boolean value) { + super.put(EXPORT, value); return this; } @@ -95,6 +97,34 @@ public String getAlias() { return (String) super.get(ALIAS); } + /** + * + * @return + */ + public boolean isFunctionalInterface() { + + + if( !getValue().isInterface()) return false; + if( getValue().isAnnotationPresent(FunctionalInterface.class)) return true; + + //return Arrays.stream(c.getDeclaredMethods()) + // .filter( m -> Modifier.isAbstract(m.getModifiers()) ) + // .count() == 1; + + return (Boolean)super.getOrDefault( FUNCTIONAL, false); + } + + /** + * + */ + public TSType setFunctionalInterface( boolean value ) { + + super.put(FUNCTIONAL, value); + return this; + + } + + private String getMemberSimpleTypeName() { return format( "%s$%s", getValue().getDeclaringClass().getSimpleName(), getValue().getSimpleName()); @@ -134,13 +164,6 @@ public final String getNamespace() { return (String) super.getOrDefault(NAMESPACE, getValue().getPackage().getName()); } - /** - * - * @return - */ - public boolean isFunctionalInterface() { - return TypescriptConverter.isFunctionalInterface( getValue() ); - } /** * * @param type diff --git a/processor/src/main/java/org/bsc/processor/annotation/Type.java b/processor/src/main/java/org/bsc/processor/annotation/Type.java index 7cc357c..1e80756 100644 --- a/processor/src/main/java/org/bsc/processor/annotation/Type.java +++ b/processor/src/main/java/org/bsc/processor/annotation/Type.java @@ -9,6 +9,7 @@ @Target( {ElementType.ANNOTATION_TYPE} ) public @interface Type { Class value(); - boolean export() default false ; - String alias() default ""; + boolean export() default false ; + String alias() default ""; + boolean functional() default false; } From e451c033628ab0312c0987797ac19b608d271ce2 Mon Sep 17 00:00:00 2001 From: bsorrentino Date: Mon, 21 May 2018 21:56:39 +0200 Subject: [PATCH 03/13] improve logging + fix wildcardtype issue + new functional model --- .../java2typescript/TypescriptConverter.java | 54 ++++++-------- .../bsc/java2typescript/ConverterTest.java | 72 +++++++++++++++++-- 2 files changed, 89 insertions(+), 37 deletions(-) diff --git a/core/src/main/java/org/bsc/java2typescript/TypescriptConverter.java b/core/src/main/java/org/bsc/java2typescript/TypescriptConverter.java index 1fbfc9a..5828658 100644 --- a/core/src/main/java/org/bsc/java2typescript/TypescriptConverter.java +++ b/core/src/main/java/org/bsc/java2typescript/TypescriptConverter.java @@ -72,18 +72,6 @@ protected final static void debug( String fmt, Object ...args ) { System.out.println( format( fmt, args)); } - - /** - * - * @param type - * @return - */ - public static final String processFunctionalInterface( TSType type ) { - Objects.requireNonNull(type, "argument 'type' is not defined!"); - - return null; - } - /** * * @param p @@ -123,17 +111,6 @@ static boolean isFactoryMethod( Method m ) { return (isStatic(m) && m.getReturnType().equals(m.getDeclaringClass())); } - - /** - * - * @return - */ - public static boolean isFunctionalInterface( final Class c ) { - if( !c.isInterface()) return false; - if( c.isAnnotationPresent(FunctionalInterface.class)) return true; - - return Arrays.stream(c.getDeclaredMethods()).filter( m -> Modifier.isAbstract(m.getModifiers()) ).count() == 1; - } /** * @@ -205,6 +182,7 @@ public static String convertJavaToTS( Objects.requireNonNull(declaringType, "declaringType argument is null!"); Objects.requireNonNull(declaredTypeMap, "declaredTypeMap argument is null!"); + log( "PROCESSING MEMEBER: [%s]", declaringMember.getName()); /** * */ @@ -247,6 +225,7 @@ public static String convertJavaToTS( final Type[] typeArgs = pType.getActualTypeArguments(); for( Type t : typeArgs ) { + log( "TypeArgs [%s]", t.getTypeName()); if( t instanceof ParameterizedType ) { @@ -256,8 +235,8 @@ public static String convertJavaToTS( declaredTypeMap, packageResolution, onTypeMismatch); - log( "Parameterized Type %s - %s", t.getTypeName(), typeName ); result = result.replace( t.getTypeName(), typeName); + log( "Parameterized Type\n\t%s\n\t%s\n\t%s", t.getTypeName(), typeName, result ); } else if( t instanceof TypeVariable ) { @@ -281,7 +260,6 @@ else if( t instanceof TypeVariable ) { continue; } else if( t instanceof Class ) { - log( "class: %s", t.getTypeName() ); final String name = convertJavaToTS( (Class)t, declaringType, declaredTypeMap, packageResolution, onTypeMismatch); @@ -290,14 +268,16 @@ else if( t instanceof Class ) { .replace(t.getTypeName(), name) .replace( "/*@*/", commented ) ; - } + log( "Class Type\n\t%s\n\t%s", t.getTypeName(), result ); + } else if( t instanceof WildcardType ) { + final WildcardType wt = (WildcardType) t; final Type[] lb = wt.getLowerBounds(); final Type[] ub = wt.getUpperBounds(); - - log( "Wildcard Type : %s lb:%d up:%d", wt.getTypeName(), lb.length, ub.length ); + + log( "Wildcard Type: \n\t%s\n\tlb:%d\n\tup:%d", wt.getTypeName(), lb.length, ub.length ); if( lb.length <= 1 && ub.length==1) { final Type tt = (lb.length==1) ? lb[0] : ub[0]; @@ -312,6 +292,7 @@ else if( t instanceof WildcardType ) { result = result.replace( wt.getTypeName(), s); if( tt instanceof ParameterizedType ) { + // FIX ISSUE #7 result = result.replace( "? extends ", "" ); @@ -321,13 +302,20 @@ else if( t instanceof WildcardType ) { { final Class clazz = (Class) (((ParameterizedType)tt).getRawType()); - final String typeName = wt.getTypeName().replace( clazz.getName(), clazz.getSimpleName()); + final String typeName = wt.getTypeName() + //.replace( clazz.getName(), clazz.getSimpleName()) + .replace( "? extends ", "" ) + ; result = result.replace( typeName, s); + } + } + log( "Wildcard Type(1):\n\t%s\n\t%s\n\t%s", t.getTypeName(), s, result ); } else { result = result.replace(wt.getTypeName(), format( "any/*%s*/", wt)); + log( "Wildcard Type(2)\n\t%s\n\t%s", t.getTypeName(), result ); } } else if( t instanceof GenericArrayType ) { @@ -358,8 +346,10 @@ else if( type instanceof TypeVariable ) { return type.getTypeName(); } else if( type instanceof Class ) { - log( "class: %s", type.getTypeName() ); - return convertJavaToTS( (Class)type, declaringType, declaredTypeMap, packageResolution, onTypeMismatch); + final String result = convertJavaToTS( (Class)type, declaringType, declaredTypeMap, packageResolution, onTypeMismatch); + log( "class:\n\t%s\n\t%s", type.getTypeName(), result ); + return result; + } else if( type instanceof WildcardType ) { throw new IllegalArgumentException( "type 'WildcardType' is a not supported yet!"); @@ -516,7 +506,7 @@ public String processStatic( TSType type, java.util.Map declared //Append class property ctx.append("\treadonly class:any;\n"); - if( isFunctionalInterface( type.getValue() ) ) { + if( type.isFunctionalInterface() ) { final java.util.Set TypeVarSet = new java.util.HashSet<>(5); final String tstype = convertJavaToTS( type.getValue(), diff --git a/core/src/test/java/org/bsc/java2typescript/ConverterTest.java b/core/src/test/java/org/bsc/java2typescript/ConverterTest.java index cc07d67..9576538 100644 --- a/core/src/test/java/org/bsc/java2typescript/ConverterTest.java +++ b/core/src/test/java/org/bsc/java2typescript/ConverterTest.java @@ -4,13 +4,19 @@ import static org.hamcrest.core.IsEqual.equalTo; +import java.lang.reflect.Method; +import java.util.Map; import java.util.function.Consumer; +import java.util.function.Function; +import org.hamcrest.core.IsEqual; +import org.hamcrest.core.IsNull; import org.junit.Assert; import org.junit.Test; public class ConverterTest extends AbstractConverterTest { + @FunctionalInterface interface Action { default void m1() {}; @@ -23,15 +29,71 @@ interface Action2 { void apply(); } + + interface TestBean { + + void method1( Map.Entry> p1 ); + void method2( Function> p1 ); + } + + @Test + public void testMethod1() throws Exception { + final Class type = TestBean.class; + + + { + final Method m = type.getMethod("method1", java.util.Map.Entry.class); + final String result = + converter.getMethodParametersAndReturnDecl( m, + TSType.from(type), + declaredTypeMap( TSType.from(Map.Entry.class), TSType.from(java.util.List.class)), + true) ; + + Assert.assertThat( result, IsNull.notNullValue()); + Assert.assertThat( result, IsEqual.equalTo("( p1:java.util.Map$Entry> ):void")); + } + + + } + @Test + public void testMethod2() throws Exception { + final Class type = TestBean.class; + + + { + final Method m = type.getMethod("method2", Function.class); + final String result = + converter.getMethodParametersAndReturnDecl( m, + TSType.from(type), + declaredTypeMap( TSType.from(Function.class), TSType.from(java.util.List.class)), + true) ; + + Assert.assertThat( result, IsNull.notNullValue()); + Assert.assertThat( result, IsEqual.equalTo("( p1:java.util.function.Function> ):void")); + } + + } + @Test public void functionalInterfaceTest() { - Assert.assertThat(TypescriptConverter.isFunctionalInterface(java.lang.Runnable.class) , equalTo(true)); - Assert.assertThat(TypescriptConverter.isFunctionalInterface(Consumer.class) , equalTo(true)); - Assert.assertThat(TypescriptConverter.isFunctionalInterface(Action.class) , equalTo(true)); - Assert.assertThat(TypescriptConverter.isFunctionalInterface(Action.class), equalTo(true)); - Assert.assertThat(TypescriptConverter.isFunctionalInterface(Action2.class) , equalTo(false)); + Assert.assertThat(TSType.from(java.lang.Runnable.class).isFunctionalInterface() , equalTo(true)); + { + TSType t = TSType.from(Consumer.class); + Assert.assertThat(t.isFunctionalInterface() , equalTo(true)); + t.setFunctionalInterface(false); + Assert.assertThat(t.isFunctionalInterface() , equalTo(true)); + + } + Assert.assertThat(TSType.from(Action.class).isFunctionalInterface() , equalTo(true)); + { + TSType t = TSType.from(Action2.class); + Assert.assertThat(t.isFunctionalInterface() , equalTo(false)); + t.setFunctionalInterface(true); + Assert.assertThat(t.isFunctionalInterface() , equalTo(true)); + } + } } From 9c89d896ae67606608281d4b4f68a662d1ebd79b Mon Sep 17 00:00:00 2001 From: bsorrentino Date: Mon, 21 May 2018 23:43:02 +0200 Subject: [PATCH 04/13] update readme --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 31c17fc..46a9e74 100644 --- a/README.md +++ b/README.md @@ -73,7 +73,8 @@ Name | Mandatory | Type | Description --- | --- | --- | --- **value** | Yes | Class | Full Qualified Name of Java class **alias** | No | String | Assign a new name to exported class in typescript -**export** | No | boolean | if **true**, other than typescript declaration adds definition in file *`-types.ts`. **It is need for instantiable classes, in order to use `new` operator or factory method(s)** +**export** | No | boolean | If **true**, other than typescript declaration adds definition in file *`-types.ts`. **It is need for instantiable classes, in order to use `new` operator or factory method(s)** +**functional** | No | boolean | If **true** other than typescript declaration adds a **particular** definition. Valid only for interfaces that have one abstract method and haven't `@FunctionalInterface` annotation **Example** ```Java @@ -96,6 +97,8 @@ Name | Mandatory | Type | Description @Type(value=java.net.URI.class, export=true), @Type(java.net.URL.class), + @Type(java.lang.Runnable.class, functional=true) + }) package org.mypackage; ``` From 8de3fd2a7f52f8f7921227bc121fe323fb5c20f4 Mon Sep 17 00:00:00 2001 From: bsorrentino Date: Mon, 21 May 2018 23:43:31 +0200 Subject: [PATCH 05/13] add check for functional interface --- .../java/org/bsc/java2typescript/TSType.java | 40 +++++++------------ 1 file changed, 15 insertions(+), 25 deletions(-) diff --git a/core/src/main/java/org/bsc/java2typescript/TSType.java b/core/src/main/java/org/bsc/java2typescript/TSType.java index 47dfcfb..89ae059 100644 --- a/core/src/main/java/org/bsc/java2typescript/TSType.java +++ b/core/src/main/java/org/bsc/java2typescript/TSType.java @@ -9,6 +9,8 @@ import java.util.stream.Collectors; import java.util.stream.Stream; import static java.lang.String.format; +import java.util.Arrays; + /** * * @author softphone @@ -27,25 +29,6 @@ protected TSType() { super(3); } - public static TSType from(Class cl, boolean exports) { - return new TSType() { - { - put(VALUE, cl); - put(EXPORT, exports); - } - }; - } - - public static TSType from(Class cl, String alias, boolean exports) { - return new TSType() { - { - put(VALUE, cl); - put(EXPORT, exports); - put(ALIAS, alias); - } - }; - } - public static TSType from(Class cl) { return new TSType() { { @@ -54,7 +37,6 @@ public static TSType from(Class cl) { }; } - /** * * @return @@ -97,6 +79,15 @@ public String getAlias() { return (String) super.get(ALIAS); } + /** + * + * @return + */ + public TSType setAlias( String value ) { + super.put(ALIAS,value); + return this; + } + /** * * @return @@ -107,11 +98,10 @@ public boolean isFunctionalInterface() { if( !getValue().isInterface()) return false; if( getValue().isAnnotationPresent(FunctionalInterface.class)) return true; - //return Arrays.stream(c.getDeclaredMethods()) - // .filter( m -> Modifier.isAbstract(m.getModifiers()) ) - // .count() == 1; - - return (Boolean)super.getOrDefault( FUNCTIONAL, false); + return (Boolean)super.getOrDefault( FUNCTIONAL, false) && + Arrays.stream(getValue().getDeclaredMethods()) + .filter( m -> Modifier.isAbstract(m.getModifiers()) ) + .count() == 1; } /** From 950bf6cb43a6d985d990c9703e7d1a6d081dbbce Mon Sep 17 00:00:00 2001 From: bsorrentino Date: Mon, 21 May 2018 23:43:52 +0200 Subject: [PATCH 06/13] update processor --- .../bsc/processor/TypescriptProcessor.java | 34 +++++++++---------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/processor/src/main/java/org/bsc/processor/TypescriptProcessor.java b/processor/src/main/java/org/bsc/processor/TypescriptProcessor.java index 288d164..2f2d7af 100644 --- a/processor/src/main/java/org/bsc/processor/TypescriptProcessor.java +++ b/processor/src/main/java/org/bsc/processor/TypescriptProcessor.java @@ -38,31 +38,29 @@ public class TypescriptProcessor extends AbstractProcessorEx { final static String ENDL = ";\n"; static final List REQUIRED_TYPES = Arrays.asList( - TSType.from(java.lang.String.class,true), - TSType.from(java.lang.Iterable.class,true), + TSType.from(java.lang.String.class).setExport(true), + TSType.from(java.lang.Iterable.class).setExport(true), // TSType.from(java.util.Collection.class), - TSType.from(java.util.Collections.class, true), + TSType.from(java.util.Collections.class).setExport(true), TSType.from(java.util.List.class), TSType.from(java.util.Set.class), TSType.from(java.util.Map.class), - TSType.from(java.util.stream.Stream.class, true), - TSType.from(java.util.stream.Collectors.class,true), - TSType.from(java.util.Optional.class, true), + TSType.from(java.util.stream.Stream.class).setExport(true), + TSType.from(java.util.stream.Collectors.class).setExport(true), + TSType.from(java.util.Optional.class).setExport(true), TSType.from(java.lang.Comparable.class), - TSType.from(java.util.function.Function.class, "Func", false), - TSType.from(java.util.function.BiFunction.class, "BiFunction", false), - TSType.from(java.util.function.Consumer.class, "Consumer", false), - TSType.from(java.util.function.BiConsumer.class, "BiConsumer", false), - TSType.from(java.util.function.UnaryOperator.class, "UnaryOperator", false), - TSType.from(java.util.function.BinaryOperator.class, "BinaryOperator", false), - TSType.from(java.util.function.Supplier.class, "Supplier", false), - TSType.from(java.util.function.Predicate.class, "Predicate", false), - TSType.from(java.util.function.BiPredicate.class, "BiPredicate", false), - TSType.from(java.lang.Runnable.class, "Runnable", false) + TSType.from(java.util.function.Function.class).setAlias("Func"), + TSType.from(java.util.function.BiFunction.class).setAlias("BiFunction"), + TSType.from(java.util.function.Consumer.class).setAlias( "Consumer"), + TSType.from(java.util.function.BiConsumer.class).setAlias("BiConsumer"), + TSType.from(java.util.function.UnaryOperator.class).setAlias("UnaryOperator"), + TSType.from(java.util.function.BinaryOperator.class).setAlias("BinaryOperator"), + TSType.from(java.util.function.Supplier.class).setAlias("Supplier"), + TSType.from(java.util.function.Predicate.class).setAlias("Predicate"), + TSType.from(java.util.function.BiPredicate.class).setAlias("BiPredicate"), + TSType.from(java.lang.Runnable.class).setAlias("Runnable") - - ); /** From 77899f47b24986e72b784ccfe38368c81055c554 Mon Sep 17 00:00:00 2001 From: bsorrentino Date: Mon, 21 May 2018 23:43:57 +0200 Subject: [PATCH 07/13] update tests --- .../org/bsc/java2typescript/ConverterTest.java | 2 +- .../org/bsc/java2typescript/ProcessorTest.java | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/core/src/test/java/org/bsc/java2typescript/ConverterTest.java b/core/src/test/java/org/bsc/java2typescript/ConverterTest.java index 9576538..a5b1641 100644 --- a/core/src/test/java/org/bsc/java2typescript/ConverterTest.java +++ b/core/src/test/java/org/bsc/java2typescript/ConverterTest.java @@ -91,7 +91,7 @@ public void functionalInterfaceTest() { TSType t = TSType.from(Action2.class); Assert.assertThat(t.isFunctionalInterface() , equalTo(false)); t.setFunctionalInterface(true); - Assert.assertThat(t.isFunctionalInterface() , equalTo(true)); + Assert.assertThat(t.isFunctionalInterface() , equalTo(false)); } } diff --git a/core/src/test/java/org/bsc/java2typescript/ProcessorTest.java b/core/src/test/java/org/bsc/java2typescript/ProcessorTest.java index 224070f..eb81db2 100644 --- a/core/src/test/java/org/bsc/java2typescript/ProcessorTest.java +++ b/core/src/test/java/org/bsc/java2typescript/ProcessorTest.java @@ -38,7 +38,7 @@ public void testWildcardType() throws Exception { final Method m = type.getValue().getMethod("merge", BiConsumer.class ); final String result = converter.getMethodParametersAndReturnDecl( m, type, - declaredTypeMap( TSType.from(String.class), TSType.from(Sample2.class), TSType.from(BiConsumer.class, "BiConsumer", false)), + declaredTypeMap( TSType.from(String.class), TSType.from(Sample2.class), TSType.from(BiConsumer.class).setExport(false).setAlias("BiConsumer")), true) ; Assert.assertThat( result, IsNull.notNullValue()); @@ -48,7 +48,7 @@ public void testWildcardType() throws Exception { final Method m = type.getValue().getMethod("concatMap", Function.class ); final String result = converter.getMethodParametersAndReturnDecl( m, type, - declaredTypeMap( TSType.from(String.class), TSType.from(Sample2.class), TSType.from(Function.class, "Func", false)), + declaredTypeMap( TSType.from(String.class), TSType.from(Sample2.class), TSType.from(Function.class).setExport(false).setAlias("Func")), true) ; Assert.assertThat( result, IsNull.notNullValue()); @@ -66,7 +66,7 @@ public void testFunctionalInterface() throws Exception { final Type pType = m.getGenericParameterTypes()[0]; final String result = TypescriptConverter.convertJavaToTS(pType, m, type, - declaredTypeMap( TSType.from(String.class), TSType.from(java.util.function.Function.class, "Func", false)), + declaredTypeMap( TSType.from(String.class), TSType.from(java.util.function.Function.class).setAlias("Func").setExport(false)), true, Optional.empty()); Assert.assertThat( result, IsNull.notNullValue()); @@ -78,7 +78,7 @@ public void testFunctionalInterface() throws Exception { final Method m = type.getValue().getMethod("transform", java.util.function.Function.class ); final String result = converter.getMethodParametersAndReturnDecl( m, type, - declaredTypeMap( TSType.from(String.class), TSType.from(java.util.function.Function.class, "Func", false)), + declaredTypeMap( TSType.from(String.class), TSType.from(java.util.function.Function.class).setAlias("Func").setExport(false)), true) ; Assert.assertThat( result, IsNull.notNullValue()); @@ -88,7 +88,7 @@ public void testFunctionalInterface() throws Exception { final Method m = type.getValue().getMethod("creator", java.util.concurrent.Callable.class ); final String result = converter.getMethodParametersAndReturnDecl( m, type, - declaredTypeMap( TSType.from(String.class), TSType.from(java.util.concurrent.Callable.class, "Supplier", false)), + declaredTypeMap( TSType.from(String.class), TSType.from(java.util.concurrent.Callable.class).setExport(false).setAlias("Supplier")), true) ; Assert.assertThat( result, IsNull.notNullValue()); @@ -120,7 +120,7 @@ public void testAlias() throws Exception { final Type rType = m.getGenericReturnType(); final String result = TypescriptConverter.convertJavaToTS(rType, m, TSType.from(type), - declaredTypeMap( TSType.from(String.class), TSType.from(java.util.List.class, "List", true) ), + declaredTypeMap( TSType.from(String.class), TSType.from(java.util.List.class).setExport(false).setAlias("List") ), true, Optional.empty()); Assert.assertThat( result, IsNull.notNullValue()); @@ -131,7 +131,7 @@ public void testAlias() throws Exception { final String result = converter.getMethodParametersAndReturnDecl( m, TSType.from(type), - declaredTypeMap( TSType.from(String.class), TSType.from(java.util.List.class, "List", true) ), + declaredTypeMap( TSType.from(String.class), TSType.from(java.util.List.class).setExport(false).setAlias("List") ), true) ; Assert.assertThat( result, IsNull.notNullValue()); @@ -201,7 +201,7 @@ public void testSample1() throws Exception { final Type rType = m.getGenericReturnType(); final String result = TypescriptConverter.convertJavaToTS(rType, m, TSType.from(type), - declaredTypeMap( TSType.from(java.util.function.BiPredicate.class, "BiPredicate",false) ), + declaredTypeMap( TSType.from(java.util.function.BiPredicate.class).setExport(false).setAlias("BiPredicate") ), true, Optional.of(addTypeVar)); Assert.assertThat( result, IsNull.notNullValue()); @@ -288,7 +288,7 @@ public void testSample1() throws Exception { final Type pType = m.getParameters()[0].getParameterizedType(); final String rresult = TypescriptConverter.convertJavaToTS(pType, m, TSType.from(type), - declaredTypeMap( TSType.from(Sample2.class), TSType.from(Consumer.class, "Consumer", false)), + declaredTypeMap( TSType.from(Sample2.class), TSType.from(Consumer.class).setExport(false).setAlias("Consumer")), true, Optional.empty()); Assert.assertThat( rresult, IsNull.notNullValue()); From 52f6edd8e09c6895df877f0c9dd6ab8fb70fcf4f Mon Sep 17 00:00:00 2001 From: bsorrentino Date: Wed, 23 May 2018 14:04:59 +0200 Subject: [PATCH 08/13] update archetype --- .../src/main/java/package-info.java | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/archetype/src/main/resources/archetype-resources/src/main/java/package-info.java b/archetype/src/main/resources/archetype-resources/src/main/java/package-info.java index 1b09ec6..bcd1994 100644 --- a/archetype/src/main/resources/archetype-resources/src/main/java/package-info.java +++ b/archetype/src/main/resources/archetype-resources/src/main/java/package-info.java @@ -1,12 +1,22 @@ - @Java2TS(declare = { - @Type(value=java.util.Arrays.class, export=true), - + @Java2TS(declare = { + // Declare class(s) + @Type(java.nio.file.Path.class), + @Type(value=java.net.URI.class, export=true), + @Type(java.net.URL.class), + + // Utility Class(s) + @Type(value=java.nio.file.Paths.class, export=true), + @Type(value=java.util.Arrays.class, export=true), @Type(value=java.nio.file.Files.class, export=true), - @Type(java.nio.file.Path.class), - @Type(value=java.nio.file.Paths.class, export=true), - @Type(value=java.net.URI.class, export=true), - @Type(java.net.URL.class) + // Member Class(s) + @Type(value=java.util.Map.Entry.class), + + // Native functional Interface(s) + @Type(value=java.lang.Callable.class), + + // Declare as Functional Interface + }) From c67365d49ff2f69364c81d64d1b5eb57365005e9 Mon Sep 17 00:00:00 2001 From: bsorrentino Date: Wed, 23 May 2018 14:15:39 +0200 Subject: [PATCH 09/13] refactoring: funtionalInterface() -> functional() --- .../java/org/bsc/java2typescript/TSType.java | 5 +++-- .../java2typescript/TypescriptConverter.java | 4 ++-- .../bsc/java2typescript/ConverterTest.java | 16 ++++++++-------- .../bsc/processor/TypescriptProcessor.java | 19 ++++++++++++------- 4 files changed, 25 insertions(+), 19 deletions(-) diff --git a/core/src/main/java/org/bsc/java2typescript/TSType.java b/core/src/main/java/org/bsc/java2typescript/TSType.java index 89ae059..1727eb4 100644 --- a/core/src/main/java/org/bsc/java2typescript/TSType.java +++ b/core/src/main/java/org/bsc/java2typescript/TSType.java @@ -89,10 +89,11 @@ public TSType setAlias( String value ) { } /** + * Test is functional interface * * @return */ - public boolean isFunctionalInterface() { + public boolean isFunctional() { if( !getValue().isInterface()) return false; @@ -107,7 +108,7 @@ public boolean isFunctionalInterface() { /** * */ - public TSType setFunctionalInterface( boolean value ) { + public TSType setFunctional( boolean value ) { super.put(FUNCTIONAL, value); return this; diff --git a/core/src/main/java/org/bsc/java2typescript/TypescriptConverter.java b/core/src/main/java/org/bsc/java2typescript/TypescriptConverter.java index 5828658..fe03e92 100644 --- a/core/src/main/java/org/bsc/java2typescript/TypescriptConverter.java +++ b/core/src/main/java/org/bsc/java2typescript/TypescriptConverter.java @@ -506,7 +506,7 @@ public String processStatic( TSType type, java.util.Map declared //Append class property ctx.append("\treadonly class:any;\n"); - if( type.isFunctionalInterface() ) { + if( type.isFunctional() ) { final java.util.Set TypeVarSet = new java.util.HashSet<>(5); final String tstype = convertJavaToTS( type.getValue(), @@ -918,7 +918,7 @@ public String processClass( int level, TSType tstype, java.util.Map Modifier.isAbstract(m.getModifiers()) ) diff --git a/core/src/test/java/org/bsc/java2typescript/ConverterTest.java b/core/src/test/java/org/bsc/java2typescript/ConverterTest.java index a5b1641..b0b7857 100644 --- a/core/src/test/java/org/bsc/java2typescript/ConverterTest.java +++ b/core/src/test/java/org/bsc/java2typescript/ConverterTest.java @@ -78,20 +78,20 @@ public void testMethod2() throws Exception { public void functionalInterfaceTest() { - Assert.assertThat(TSType.from(java.lang.Runnable.class).isFunctionalInterface() , equalTo(true)); + Assert.assertThat(TSType.from(java.lang.Runnable.class).isFunctional() , equalTo(true)); { TSType t = TSType.from(Consumer.class); - Assert.assertThat(t.isFunctionalInterface() , equalTo(true)); - t.setFunctionalInterface(false); - Assert.assertThat(t.isFunctionalInterface() , equalTo(true)); + Assert.assertThat(t.isFunctional() , equalTo(true)); + t.setFunctional(false); + Assert.assertThat(t.isFunctional() , equalTo(true)); } - Assert.assertThat(TSType.from(Action.class).isFunctionalInterface() , equalTo(true)); + Assert.assertThat(TSType.from(Action.class).isFunctional() , equalTo(true)); { TSType t = TSType.from(Action2.class); - Assert.assertThat(t.isFunctionalInterface() , equalTo(false)); - t.setFunctionalInterface(true); - Assert.assertThat(t.isFunctionalInterface() , equalTo(false)); + Assert.assertThat(t.isFunctional() , equalTo(false)); + t.setFunctional(true); + Assert.assertThat(t.isFunctional() , equalTo(false)); } } diff --git a/processor/src/main/java/org/bsc/processor/TypescriptProcessor.java b/processor/src/main/java/org/bsc/processor/TypescriptProcessor.java index 2f2d7af..8c4f3e7 100644 --- a/processor/src/main/java/org/bsc/processor/TypescriptProcessor.java +++ b/processor/src/main/java/org/bsc/processor/TypescriptProcessor.java @@ -40,16 +40,19 @@ public class TypescriptProcessor extends AbstractProcessorEx { static final List REQUIRED_TYPES = Arrays.asList( TSType.from(java.lang.String.class).setExport(true), TSType.from(java.lang.Iterable.class).setExport(true), -// TSType.from(java.util.Collection.class), - TSType.from(java.util.Collections.class).setExport(true), + TSType.from(java.util.Iterator.class), + TSType.from(java.util.Collection.class), TSType.from(java.util.List.class), TSType.from(java.util.Set.class), TSType.from(java.util.Map.class), - TSType.from(java.util.stream.Stream.class).setExport(true), - TSType.from(java.util.stream.Collectors.class).setExport(true), TSType.from(java.util.Optional.class).setExport(true), - - TSType.from(java.lang.Comparable.class), + TSType.from(java.util.stream.Stream.class).setExport(true), + + // Utility class(s) + TSType.from(java.util.stream.Collectors.class).setExport(true), + TSType.from(java.util.Collections.class).setExport(true), + + // Native functional interface(s) TSType.from(java.util.function.Function.class).setAlias("Func"), TSType.from(java.util.function.BiFunction.class).setAlias("BiFunction"), TSType.from(java.util.function.Consumer.class).setAlias( "Consumer"), @@ -59,8 +62,10 @@ public class TypescriptProcessor extends AbstractProcessorEx { TSType.from(java.util.function.Supplier.class).setAlias("Supplier"), TSType.from(java.util.function.Predicate.class).setAlias("Predicate"), TSType.from(java.util.function.BiPredicate.class).setAlias("BiPredicate"), - TSType.from(java.lang.Runnable.class).setAlias("Runnable") + TSType.from(java.lang.Runnable.class), + TSType.from(java.lang.Comparable.class) + // Declare Functional Interface(s) ); /** From 886e2251d916d1f285b734e38848aa009e3ab653 Mon Sep 17 00:00:00 2001 From: bsorrentino Date: Wed, 23 May 2018 14:15:49 +0200 Subject: [PATCH 10/13] update sample --- sample/app.js | 4 +-- .../org/bsc/java2ts/jdk8/package-info.java | 3 +- sample/src/main/ts/stream.ts | 36 +++++++++++++++++++ 3 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 sample/src/main/ts/stream.ts diff --git a/sample/app.js b/sample/app.js index 215c48f..ecbb835 100644 --- a/sample/app.js +++ b/sample/app.js @@ -10,7 +10,7 @@ require.paths = [ "target/ts/target" ]; -java.lang.System.setProperty( "jvm-npm.debug", "true"); +java.lang.System.setProperty( "jvm-npm.debug", "false"); // PLOYFILL @@ -21,4 +21,4 @@ print( "args", $ARG.length ); var process = { argv:$ARG, env:{TERM:'color'} } ; var exports = {}; -load('target/ts/src/main/ts/main.js'); +load('target/ts/src/main/ts/stream.js'); diff --git a/sample/src/main/java/org/bsc/java2ts/jdk8/package-info.java b/sample/src/main/java/org/bsc/java2ts/jdk8/package-info.java index 3c8f535..cba1478 100644 --- a/sample/src/main/java/org/bsc/java2ts/jdk8/package-info.java +++ b/sample/src/main/java/org/bsc/java2ts/jdk8/package-info.java @@ -6,6 +6,7 @@ @Java2TS(declare = { @Type(java.lang.System.class), + @Type(value=java.util.Collection.class), @Type(value=java.util.List.class), @Type(value=java.util.Arrays.class, export=true), @@ -13,7 +14,7 @@ @Type(java.nio.file.Path.class), @Type(java.nio.file.Paths.class), @Type(java.nio.file.AccessMode.class), - + @Type(java.util.stream.Collector.class), @Type(value=java.net.URI.class, export=true), @Type(java.net.URL.class), diff --git a/sample/src/main/ts/stream.ts b/sample/src/main/ts/stream.ts new file mode 100644 index 0000000..114dbd9 --- /dev/null +++ b/sample/src/main/ts/stream.ts @@ -0,0 +1,36 @@ + +import { + Arrays, + Stream, + Collectors + +} from "ts/jdk8-types"; + + +let list = Arrays.asList( "A", "B", "C" ); + +Stream.of( 4, 10, 9, 7, 34, 100 ) + .filter( n => n%2==0 ) + .map( p => p/2 ) + .reduce( (b,c:any) => b + c ) + .ifPresent( v => print("LIST ELEMENT", v) ) + +type element = [ number, string]; + +let r = Stream.of( [4, "Pari"], [10, "Pari"], [9, "Dispari"], [7,"Dispari"], [34, "Pari"], [100,"Pari"], [34, "Pari"] ) + .collect( Collectors.groupingBy( ( [v,k] ) => v ) ) + .values() + .stream() + .flatMap( list => list.stream().map( ([v,k]) => v ).distinct() ) + .forEach( v => print(v) ) + +//print(r); + +let s = list.stream() + .filter( c => c.charAt(0)!="B") + //.parallel() + .collect( Collectors.joining(",")); + + +print("COMPLETE", s); + From 7aedf974176ff38bfbd7c96a437b337731082978 Mon Sep 17 00:00:00 2001 From: bsorrentino Date: Wed, 23 May 2018 18:48:50 +0200 Subject: [PATCH 11/13] set Iterable class functional --- .../src/main/java/org/bsc/processor/TypescriptProcessor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/processor/src/main/java/org/bsc/processor/TypescriptProcessor.java b/processor/src/main/java/org/bsc/processor/TypescriptProcessor.java index 8c4f3e7..02d9a35 100644 --- a/processor/src/main/java/org/bsc/processor/TypescriptProcessor.java +++ b/processor/src/main/java/org/bsc/processor/TypescriptProcessor.java @@ -39,7 +39,7 @@ public class TypescriptProcessor extends AbstractProcessorEx { static final List REQUIRED_TYPES = Arrays.asList( TSType.from(java.lang.String.class).setExport(true), - TSType.from(java.lang.Iterable.class).setExport(true), + TSType.from(java.lang.Iterable.class).setExport(true).setFunctional(true), TSType.from(java.util.Iterator.class), TSType.from(java.util.Collection.class), TSType.from(java.util.List.class), From 3d24c473c89b891b130e779846154791a0e6c2d1 Mon Sep 17 00:00:00 2001 From: bsorrentino Date: Tue, 5 Jun 2018 21:14:47 +0200 Subject: [PATCH 12/13] update gitignore --- processor/.gitignore | 1 + sample/.gitignore | 1 + 2 files changed, 2 insertions(+) create mode 100644 processor/.gitignore diff --git a/processor/.gitignore b/processor/.gitignore new file mode 100644 index 0000000..c71ea97 --- /dev/null +++ b/processor/.gitignore @@ -0,0 +1 @@ +/.apt_generated/ diff --git a/sample/.gitignore b/sample/.gitignore index c2658d7..1a97adf 100644 --- a/sample/.gitignore +++ b/sample/.gitignore @@ -1 +1,2 @@ node_modules/ +/.apt_generated/ From 3ac27632061d28029b803255516c4aa3ada5579f Mon Sep 17 00:00:00 2001 From: bsorrentino Date: Tue, 5 Jun 2018 21:18:13 +0200 Subject: [PATCH 13/13] update version for release --- README.md | 2 +- archetype/pom.xml | 2 +- core/pom.xml | 2 +- pom.xml | 2 +- processor/pom.xml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 46a9e74..d50d559 100644 --- a/README.md +++ b/README.md @@ -149,5 +149,5 @@ The easier way to start your **Typescript on JVM** project is using the provided >mvn archetype:generate \ >-DarchetypeGroupId=org.bsc.processor \ >-DarchetypeArtifactId=java2ts-processor-archetype \ ->-DarchetypeVersion=1.0-rc1 +>-DarchetypeVersion=1.0.0 >``` diff --git a/archetype/pom.xml b/archetype/pom.xml index 9102949..4c773a9 100644 --- a/archetype/pom.xml +++ b/archetype/pom.xml @@ -5,7 +5,7 @@ org.bsc.processor java2ts-processor-parent - 1.0.0-SNAPSHOT + 1.0.0 java2ts-processor-archetype java2ts-processor::archetype - ${project.version} diff --git a/core/pom.xml b/core/pom.xml index 92ec124..0fee28f 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -3,7 +3,7 @@ org.bsc.processor java2ts-processor-parent - 1.0.0-SNAPSHOT + 1.0.0 java2ts-processor-core java2ts-processor::core - ${project.version} diff --git a/pom.xml b/pom.xml index 45f62a0..2c693fc 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 org.bsc.processor java2ts-processor-parent - 1.0.0-SNAPSHOT + 1.0.0 pom java2ts-processor::parent - ${project.version} diff --git a/processor/pom.xml b/processor/pom.xml index ff29a59..22062f1 100644 --- a/processor/pom.xml +++ b/processor/pom.xml @@ -7,7 +7,7 @@ org.bsc.processor java2ts-processor-parent - 1.0.0-SNAPSHOT + 1.0.0