Repository: flex-falcon Updated Branches: refs/heads/develop 1186a121c -> 7a6ec7227
FLEX-35050 introduce error reporting in Externc Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/7a6ec722 Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/7a6ec722 Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/7a6ec722 Branch: refs/heads/develop Commit: 7a6ec7227cebe3a9a36618dad2bb79f7482e701a Parents: 1186a12 Author: Alex Harui <[email protected]> Authored: Fri Nov 18 09:50:51 2016 -0800 Committer: Alex Harui <[email protected]> Committed: Fri Nov 18 09:51:27 2016 -0800 ---------------------------------------------------------------------- .../org/apache/flex/compiler/clients/EXTERNC.java | 8 ++++++-- .../externals/reference/ClassReference.java | 15 ++++++++++++++- .../codegen/externals/ExternalsTestBase.java | 3 +++ .../codegen/externals/TestExternChrome.java | 18 +++++++++++++++++- 4 files changed, 40 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7a6ec722/compiler-jx/src/main/java/org/apache/flex/compiler/clients/EXTERNC.java ---------------------------------------------------------------------- diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/clients/EXTERNC.java b/compiler-jx/src/main/java/org/apache/flex/compiler/clients/EXTERNC.java index ed96162..8124817 100644 --- a/compiler-jx/src/main/java/org/apache/flex/compiler/clients/EXTERNC.java +++ b/compiler-jx/src/main/java/org/apache/flex/compiler/clients/EXTERNC.java @@ -56,6 +56,7 @@ public class EXTERNC implements FlexTool final int code; } + public static Set<ICompilerProblem> problems; protected Configurator projectConfigurator; private ExternCConfiguration configuration; private ReferenceModel model; @@ -137,7 +138,7 @@ public class EXTERNC implements FlexTool final EXTERNC compiler = new EXTERNC(); compiler.configure(args); - final Set<ICompilerProblem> problems = new HashSet<ICompilerProblem>(); + problems = new HashSet<ICompilerProblem>(); final int exitCode = compiler.mainNoExit(args, problems, true); long endTime = System.nanoTime(); @@ -149,7 +150,7 @@ public class EXTERNC implements FlexTool public int mainNoExit(final String[] args, Set<ICompilerProblem> problems, Boolean printProblems) { - int exitCode = -1; + int exitCode = 0; try { @@ -167,6 +168,9 @@ public class EXTERNC implements FlexTool { if (printProblems) { + for (ICompilerProblem problem : problems) + System.out.println(problem.toString() + " " + problem.getSourcePath() + " " + problem.getLine()); + exitCode = ExitCode.FAILED_WITH_PROBLEMS.code; } } } http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7a6ec722/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/externals/reference/ClassReference.java ---------------------------------------------------------------------- diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/externals/reference/ClassReference.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/externals/reference/ClassReference.java index 469a5df..f59c8bc 100644 --- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/externals/reference/ClassReference.java +++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/externals/reference/ClassReference.java @@ -28,8 +28,11 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.apache.flex.compiler.clients.EXTERNC; import org.apache.flex.compiler.internal.codegen.externals.utils.DebugLogUtils; import org.apache.flex.compiler.internal.codegen.externals.utils.JSTypeUtils; +import org.apache.flex.compiler.internal.tree.as.IdentifierNode; +import org.apache.flex.compiler.problems.UnresolvedClassReferenceProblem; import com.google.javascript.rhino.JSDocInfo; import com.google.javascript.rhino.JSDocInfoBuilder; @@ -528,7 +531,17 @@ public class ClassReference extends BaseReference { JSType jsType = getModel().evaluate(jsTypeExpression); String interfaceName = jsType.toAnnotationString(); - result.add(getModel().getClassReference(interfaceName)); + ClassReference interfaceReference = getModel().getClassReference(interfaceName); + if (interfaceReference != null) + result.add(interfaceReference); + else + { + IdentifierNode node = new IdentifierNode(interfaceName); + node.setSourcePath(this.getNode().getStaticSourceFile().toString()); + node.setLine(this.getNode().getLineno()); + UnresolvedClassReferenceProblem problem = new UnresolvedClassReferenceProblem(node, interfaceName); + EXTERNC.problems.add(problem); + } } return result; } http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7a6ec722/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/externals/ExternalsTestBase.java ---------------------------------------------------------------------- diff --git a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/externals/ExternalsTestBase.java b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/externals/ExternalsTestBase.java index c1526c0..078534b 100644 --- a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/externals/ExternalsTestBase.java +++ b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/externals/ExternalsTestBase.java @@ -23,11 +23,13 @@ import static org.junit.Assert.assertTrue; import java.io.File; import java.io.IOException; +import java.util.HashSet; import org.apache.flex.compiler.clients.EXTERNC; import org.apache.flex.compiler.clients.ExternCConfiguration; import org.apache.flex.compiler.internal.codegen.externals.reference.MethodReference; import org.apache.flex.compiler.internal.codegen.externals.reference.ReferenceModel; +import org.apache.flex.compiler.problems.ICompilerProblem; import org.apache.flex.utils.TestAdapterFactory; import org.junit.After; import org.junit.Assert; @@ -52,6 +54,7 @@ public abstract class ExternalsTestBase config = new ExternCConfiguration(); configure(config); client = new EXTERNC(config); + EXTERNC.problems = new HashSet<ICompilerProblem>(); model = client.getModel(); } http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7a6ec722/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/externals/TestExternChrome.java ---------------------------------------------------------------------- diff --git a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/externals/TestExternChrome.java b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/externals/TestExternChrome.java index e79889d..bd3f39f 100644 --- a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/externals/TestExternChrome.java +++ b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/externals/TestExternChrome.java @@ -25,8 +25,10 @@ import static org.junit.Assert.assertTrue; import java.io.IOException; +import org.apache.flex.compiler.clients.EXTERNC; import org.apache.flex.compiler.clients.ExternCConfiguration; import org.apache.flex.compiler.internal.codegen.externals.reference.ClassReference; +import org.apache.flex.compiler.problems.ICompilerProblem; import org.junit.Test; import com.google.javascript.jscomp.Result; @@ -39,6 +41,12 @@ public class TestExternChrome extends ExternalsTestBase client.cleanOutput(); Result result = compile(); assertTrue(result.success); + if (EXTERNC.problems.size() > 0) + { + for (ICompilerProblem problem : EXTERNC.problems) + System.out.println(problem.toString() + " " + problem.getSourcePath() + " " + problem.getLine()); + } + assertEquals(0, EXTERNC.problems.size()); String[] classes = { "chrome", @@ -60,7 +68,7 @@ public class TestExternChrome extends ExternalsTestBase "ChromeLoadTimes", "ChromeCsiInfo" }; - assertEquals(248, model.getClasses().size()); + assertEquals(285, model.getClasses().size()); for (String className : classes) { assertTrue(model.hasClass(className)); @@ -75,6 +83,12 @@ public class TestExternChrome extends ExternalsTestBase client.cleanOutput(); Result result = compile(); assertTrue(result.success); + if (EXTERNC.problems.size() > 0) + { + for (ICompilerProblem problem : EXTERNC.problems) + System.out.println(problem.toString() + " " + problem.getSourcePath() + " " + problem.getLine()); + } + assertEquals(0, EXTERNC.problems.size()); // Port ClassReference Port = model.getClassReference("Port"); @@ -148,6 +162,8 @@ public class TestExternChrome extends ExternalsTestBase config.setASRoot(ExternalsTestUtils.AS_ROOT_DIR); String coreRoot = ExternalsTestUtils.EXTERNAL_JS_DIR.getAbsolutePath(); + config.addExternal(coreRoot + "/es3.js"); + config.addExternal(coreRoot + "/es6.js"); config.addExternal(coreRoot + "/browser/chrome.js"); config.addExternal(coreRoot + "/browser/html5.js"); config.addExternal(coreRoot + "/browser/ie_dom.js");
