You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2016/11/18 17:52:35 UTC

git commit: [flex-falcon] [refs/heads/develop] - FLEX-35050 introduce error reporting in Externc

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 <ah...@apache.org>
Authored: Fri Nov 18 09:50:51 2016 -0800
Committer: Alex Harui <ah...@apache.org>
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");