From 8041fba8b21df5e2a514221d108dfcae245c8110 Mon Sep 17 00:00:00 2001 From: lgrignon Date: Sat, 4 Feb 2017 17:36:45 +0100 Subject: [PATCH] integrated PR https://github.com/cincheo/jsweet/pull/217 fixing https://github.com/cincheo/jsweet/issues/216 --- transpiler/build.xml | 2 +- .../typescript/Java2TypeScriptAdapter.java | 7 ++++--- .../org/jsweet/test/transpiler/SyntaxTests.java | 2 +- .../java/source/syntax/LambdasWithInterfaces.java | 13 +++++++++++++ 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/transpiler/build.xml b/transpiler/build.xml index b8aaf815..be39293e 100644 --- a/transpiler/build.xml +++ b/transpiler/build.xml @@ -7,7 +7,7 @@ - + installing local tools.jar in local maven: ${lib.path} Java home: ${env.JAVA_HOME} diff --git a/transpiler/src/main/java/org/jsweet/transpiler/typescript/Java2TypeScriptAdapter.java b/transpiler/src/main/java/org/jsweet/transpiler/typescript/Java2TypeScriptAdapter.java index e9fca60b..53923c80 100644 --- a/transpiler/src/main/java/org/jsweet/transpiler/typescript/Java2TypeScriptAdapter.java +++ b/transpiler/src/main/java/org/jsweet/transpiler/typescript/Java2TypeScriptAdapter.java @@ -1559,9 +1559,10 @@ public class Java2TypeScriptAdapter extends AbstractPri if (assignedType.tsym.isInterface() && !context.isFunctionalType(assignedType.tsym)) { JCLambda lambda = (JCLambda) expression; MethodSymbol method = (MethodSymbol) assignedType.tsym.getEnclosedElements().get(0); - print("(() => { " + VAR_DECL_KEYWORD + " f = function() { this." + method.getSimpleName() + " = ") - .print(lambda); - print("}; return new f(); })()"); + print("(() => { "); + print(VAR_DECL_KEYWORD + " v = ").print(lambda).print(";"); + print(VAR_DECL_KEYWORD + " f = function() { this." + method.getSimpleName() + " = v; };"); + print("return new f(); })()"); return true; } } else if (expression instanceof JCNewClass) { diff --git a/transpiler/src/test/java/org/jsweet/test/transpiler/SyntaxTests.java b/transpiler/src/test/java/org/jsweet/test/transpiler/SyntaxTests.java index 2d10778c..471dbdf1 100644 --- a/transpiler/src/test/java/org/jsweet/test/transpiler/SyntaxTests.java +++ b/transpiler/src/test/java/org/jsweet/test/transpiler/SyntaxTests.java @@ -206,7 +206,7 @@ public class SyntaxTests extends AbstractTest { public void testLambdasWithInterfaces() { eval((logHandler, r) -> { Assert.assertEquals("There should be no errors", 0, logHandler.reportedProblems.size()); - assertEquals("ok1,ok2,ok3,ok4", r.get("trace")); + assertEquals("ok1,ok2,ok3,ok4,ok5", r.get("trace")); }, getSourceFile(LambdasWithInterfaces.class)); } diff --git a/transpiler/src/test/java/source/syntax/LambdasWithInterfaces.java b/transpiler/src/test/java/source/syntax/LambdasWithInterfaces.java index cd60e288..f81d2a2f 100644 --- a/transpiler/src/test/java/source/syntax/LambdasWithInterfaces.java +++ b/transpiler/src/test/java/source/syntax/LambdasWithInterfaces.java @@ -8,6 +8,8 @@ public class LambdasWithInterfaces { static Array trace = new Array(); + private final String result = "ok5"; + public static void main(String[] args) { new LambdasWithInterfaces().handler(new ANonFunctionalInterface2() { @@ -25,6 +27,9 @@ public class LambdasWithInterfaces { new LambdasWithInterfaces().handler4(() -> { trace.push("ok4"); }); + + new LambdasWithInterfaces().test5(); + $export("trace", trace.join(",")); } @@ -40,6 +45,10 @@ public class LambdasWithInterfaces { i.m(); } + public void test5() { + ClosureOverFieldInterface5 i = () -> trace.push(result); + i.m(); + } } interface ANonFunctionalInterface2 { @@ -54,3 +63,7 @@ interface AFunctionalInterface3 { interface AFunctionalInterface4 { void m(); } + +interface ClosureOverFieldInterface5 { + void m(); +} \ No newline at end of file