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/04/07 19:55:32 UTC

[1/2] git commit: [flex-falcon] [refs/heads/develop] - changes to get XML in the requires

Repository: flex-falcon
Updated Branches:
  refs/heads/develop 88a9bc28c -> bdc933e4c


changes to get XML in the requires


Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/6c6584da
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/6c6584da
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/6c6584da

Branch: refs/heads/develop
Commit: 6c6584da5be8ab5c4df0012110479b4d7d336a8b
Parents: 88a9bc2
Author: Alex Harui <ah...@apache.org>
Authored: Thu Apr 7 10:39:28 2016 -0700
Committer: Alex Harui <ah...@apache.org>
Committed: Thu Apr 7 10:42:59 2016 -0700

----------------------------------------------------------------------
 .../js/flexjs/TestFlexJSGlobalClasses.java      |  1 +
 .../codegen/js/flexjs/TestFlexJSProject.java    | 15 +++
 .../flex/compiler/internal/test/TestBase.java   | 98 ++++++++++++++------
 .../flexjs/projects/interfaces/Test_result.js   |  1 +
 .../flexjs/projects/super/Base_result.js        |  1 +
 .../flexjs/projects/xml_requires/XMLRequire.as  | 30 ++++++
 .../projects/xml_requires/XMLRequire_result.js  | 74 +++++++++++++++
 .../codegen/js/jx/PackageHeaderEmitter.java     |  2 +-
 .../mxml/flexjs/MXMLFlexJSPublisher.java        | 71 ++++++++++++++
 .../internal/projects/FlexJSProject.java        |  5 +
 compiler.tests/.classpath                       |  1 +
 11 files changed, 270 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
index df663af..32f28f5 100644
--- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
+++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
@@ -27,6 +27,7 @@ import org.apache.flex.compiler.internal.projects.FlexJSProject;
 import org.apache.flex.compiler.internal.tree.as.VariableNode;
 import org.apache.flex.compiler.tree.as.IASNode;
 import org.apache.flex.compiler.tree.as.IBinaryOperatorNode;
+import org.apache.flex.compiler.tree.as.IFileNode;
 import org.apache.flex.compiler.tree.as.IForLoopNode;
 import org.apache.flex.compiler.tree.as.IFunctionCallNode;
 import org.apache.flex.compiler.tree.as.IFunctionNode;

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
index fec0d2f..c057f92 100644
--- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
+++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
@@ -131,6 +131,21 @@ public class TestFlexJSProject extends TestGoogProject
     }
 
     @Test
+    public void test_XMLRequires()
+    {
+        String testDirPath = projectDirPath + "/xml_requires";
+
+        String fileName = "XMLRequire";
+
+        sourcePath = new File(TestAdapterFactory.getTestAdapter().getUnitTestBaseDir(),
+                projectDirPath + "/xml_requires").getPath();
+
+        List<String> compiledFileNames = compileProject(fileName, testDirPath);
+
+        assertProjectOut(compiledFileNames, testDirPath);
+    }
+
+    @Test
     public void test_Overrides()
     {
         String testDirPath = projectDirPath + "/overrides";

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
index 186f690..d8d6e36 100644
--- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
+++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
@@ -40,6 +40,7 @@ import java.util.List;
 import org.apache.flex.compiler.codegen.as.IASEmitter;
 import org.apache.flex.compiler.codegen.mxml.IMXMLEmitter;
 import org.apache.flex.compiler.config.Configurator;
+import org.apache.flex.compiler.constants.IASLanguageConstants;
 import org.apache.flex.compiler.driver.IBackend;
 import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.as.ASFilterWriter;
@@ -350,7 +351,7 @@ public class TestBase implements ITestBase
 			qname = mainCU.getQualifiedNames().get(0);
 	        final File outputClassFile = getOutputClassFile(qname
 	                + "_output", outputRootDir);
-	        appendLanguage(outputClassFile.getAbsolutePath(), qname);
+	        appendLanguageAndXML(outputClassFile.getAbsolutePath(), qname);
 		} catch (InterruptedException e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
@@ -374,34 +375,75 @@ public class TestBase implements ITestBase
 		fw.close();
 	}
     
-    private void appendLanguage(String path, String projectName)
-	throws IOException
-	{
-		StringBuilder appendString = new StringBuilder();
-		appendString.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
-		appendString.append(ASEmitterTokens.PAREN_OPEN.getToken());
-		appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
-		appendString.append(JSFlexJSEmitterTokens.LANGUAGE_QNAME.getToken());
-		appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
-		appendString.append(ASEmitterTokens.PAREN_CLOSE.getToken());
-		appendString.append(ASEmitterTokens.SEMICOLON.getToken());
-		
-	    String fileData = readCode(new File(path));
-	    int reqidx = fileData.indexOf(appendString.toString());
-
+    private void appendLanguageAndXML(String path, String projectName) throws IOException
+    {
+        StringBuilder appendString = new StringBuilder();
+        appendString.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
+        appendString.append(ASEmitterTokens.PAREN_OPEN.getToken());
+        appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+        appendString.append(JSFlexJSEmitterTokens.LANGUAGE_QNAME.getToken());
+        appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+        appendString.append(ASEmitterTokens.PAREN_CLOSE.getToken());
+        appendString.append(ASEmitterTokens.SEMICOLON.getToken());
+        appendString.append("\n");
+
+        String fileData = readCode(new File(path));
+        int reqidx = fileData.indexOf(appendString.toString());
 	    if (reqidx == -1 && project instanceof FlexJSProject && ((FlexJSProject)project).needLanguage)
-	    {
-	    	reqidx = fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
-	    	if (reqidx == -1)
-	    		reqidx = fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
-	    	reqidx = fileData.indexOf(";", reqidx);
-		    String after = fileData.substring(reqidx + 1);
-		    String before = fileData.substring(0, reqidx + 1);
-		    String s = before + "\n" + appendString.toString() + after;
-		    writeFile(path, s, false);
-	    }
-	}
-	
+        {
+	    	boolean afterProvide = false;
+            reqidx = fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
+            if (reqidx == -1)
+            {
+            	afterProvide = true;
+                reqidx = fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
+            }
+            reqidx = fileData.indexOf(";", reqidx);
+            String after = fileData.substring(reqidx + 1);
+            String before = fileData.substring(0, reqidx + 1);
+            if (afterProvide)
+            	before += "\n";
+            String s = before + "\n" + appendString.toString() + after;
+            writeFile(path, s, false);
+        }
+        
+        StringBuilder appendStringXML = new StringBuilder();
+        appendStringXML.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
+        appendStringXML.append(ASEmitterTokens.PAREN_OPEN.getToken());
+        appendStringXML.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+        appendStringXML.append(IASLanguageConstants.XML);
+        appendStringXML.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+        appendStringXML.append(ASEmitterTokens.PAREN_CLOSE.getToken());
+        appendStringXML.append(ASEmitterTokens.SEMICOLON.getToken());
+        appendStringXML.append("\n");
+
+        if (project instanceof FlexJSProject && ((FlexJSProject)project).needXML)
+        {
+	        fileData = readCode(new File(path));
+	        reqidx = fileData.indexOf(appendStringXML.toString());
+	        if (reqidx == -1)
+	        {
+		    	boolean afterProvide = false;
+	            reqidx = fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
+	            if (reqidx == -1)
+	            {
+	            	afterProvide = true;
+	                reqidx = fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
+	            }
+	            reqidx = fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
+	            if (reqidx == -1)
+	                reqidx = fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
+	            reqidx = fileData.indexOf(";", reqidx);
+	            String after = fileData.substring(reqidx + 1);
+	            String before = fileData.substring(0, reqidx + 1);
+	            if (afterProvide)
+	            	before += "\n";
+	            String s = before + "\n" + appendStringXML.toString() + after;
+	            writeFile(path, s, false);
+	        }
+        }
+    }
+
 	protected String readCode(File file)
 	{
 	    String code = "";

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js b/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
index 42ab0f4..92bb29f 100644
--- a/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
+++ b/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
@@ -29,6 +29,7 @@ goog.require('org.apache.flex.utils.Language');
 
 
 
+
 /**
  * @constructor
  * @extends {classes.A}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js b/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
index 1306674..db3ade9 100644
--- a/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
+++ b/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
@@ -26,6 +26,7 @@ goog.require('org.apache.flex.utils.Language');
 
 
 
+
 /**
  * @constructor
  * @extends {Super}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire.as
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire.as b/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire.as
new file mode 100644
index 0000000..4a997c9
--- /dev/null
+++ b/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire.as
@@ -0,0 +1,30 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package
+{
+	
+	public class XMLRequire
+	{
+		public function XMLRequire() 
+        {
+            var myXML:XML = <node />;		
+        }		
+	}
+	
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire_result.js
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire_result.js b/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire_result.js
new file mode 100644
index 0000000..d6affbe
--- /dev/null
+++ b/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire_result.js
@@ -0,0 +1,74 @@
+/**
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * XMLRequire
+ *
+ * @fileoverview
+ *
+ * @suppress {checkTypes|accessControls}
+ */
+
+goog.provide('XMLRequire');
+
+goog.require('XML');
+
+
+
+
+
+/**
+ * @constructor
+ */
+XMLRequire = function() {
+  var /** @type {XML} */ myXML = new XML( '<node />') ;
+};
+
+
+/**
+ * Metadata
+ *
+ * @type {Object.<string, Array.<Object>>}
+ */
+XMLRequire.prototype.FLEXJS_CLASS_INFO = { names: [{ name: 'XMLRequire', qName: 'XMLRequire'}] };
+
+
+/**
+ * Prevent renaming of class. Needed for reflection.
+ */
+goog.exportSymbol('XMLRequire', XMLRequire);
+
+
+
+/**
+ * Reflection
+ *
+ * @return {Object.<string, Function>}
+ */
+XMLRequire.prototype.FLEXJS_REFLECTION_INFO = function () {
+  return {
+    variables: function () {
+      return {
+      };
+    },
+    accessors: function () {
+      return {
+      };
+    },
+    methods: function () {
+      return {
+        'XMLRequire': { type: '', declaredBy: 'XMLRequire'}
+      };
+    }
+  };
+};

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
index 48acf5b..d47c6dc 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
@@ -208,7 +208,7 @@ public class PackageHeaderEmitter extends JSSubEmitter implements
 
                 if (NativeUtils.isNative(imp))
                 {
-                	if (!(imp.equals("QName") || imp.equals("Namespace")))
+                	if (!(imp.equals("QName") || imp.equals("Namespace") || imp.equals("XML") || imp.equals("XMLList")))
                 		continue;                	
                 }
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
index 347e01c..4dcc1be 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
@@ -42,6 +42,7 @@ import org.apache.commons.io.filefilter.RegexFileFilter;
 import org.apache.flex.compiler.clients.problems.ProblemQuery;
 import org.apache.flex.compiler.codegen.js.IJSPublisher;
 import org.apache.flex.compiler.config.Configuration;
+import org.apache.flex.compiler.constants.IASLanguageConstants;
 import org.apache.flex.compiler.css.ICSSPropertyValue;
 import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.JSSharedData;
@@ -278,6 +279,7 @@ public class MXMLFlexJSPublisher extends JSGoogPublisher implements IJSPublisher
 
         appendExportSymbol(projectIntermediateJSFilePath, projectName);
         appendEncodedCSS(projectIntermediateJSFilePath, projectName);
+        appendLanguageAndXML(projectIntermediateJSFilePath, projectName);
 
         // if (!subsetGoog)
         // {
@@ -525,6 +527,75 @@ public class MXMLFlexJSPublisher extends JSGoogPublisher implements IJSPublisher
         }
     }
 
+    private void appendLanguageAndXML(String path, String projectName) throws IOException
+    {
+        StringBuilder appendString = new StringBuilder();
+        appendString.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
+        appendString.append(ASEmitterTokens.PAREN_OPEN.getToken());
+        appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+        appendString.append(JSFlexJSEmitterTokens.LANGUAGE_QNAME.getToken());
+        appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+        appendString.append(ASEmitterTokens.PAREN_CLOSE.getToken());
+        appendString.append(ASEmitterTokens.SEMICOLON.getToken());
+        appendString.append("\n");
+
+        String fileData = readCode(new File(path));
+        int reqidx = fileData.indexOf(appendString.toString());
+        if (reqidx == -1 && project.needLanguage)
+        {
+	    	boolean afterProvide = false;
+            reqidx = fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
+            if (reqidx == -1)
+            {
+            	afterProvide = true;
+                reqidx = fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
+            }
+            reqidx = fileData.indexOf(";", reqidx);
+            String after = fileData.substring(reqidx + 1);
+            String before = fileData.substring(0, reqidx + 1);
+            if (afterProvide)
+            	before += "\n";
+            String s = before + "\n" + appendString.toString() + after;
+            writeFile(path, s, false);
+        }
+        
+        StringBuilder appendStringXML = new StringBuilder();
+        appendStringXML.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
+        appendStringXML.append(ASEmitterTokens.PAREN_OPEN.getToken());
+        appendStringXML.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+        appendStringXML.append(IASLanguageConstants.XML);
+        appendStringXML.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+        appendStringXML.append(ASEmitterTokens.PAREN_CLOSE.getToken());
+        appendStringXML.append(ASEmitterTokens.SEMICOLON.getToken());
+        appendStringXML.append("\n");
+
+        if (project.needXML)
+        {
+	        fileData = readCode(new File(path));
+	        reqidx = fileData.indexOf(appendStringXML.toString());
+	        if (reqidx == -1)
+	        {
+		    	boolean afterProvide = false;
+	            reqidx = fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
+	            if (reqidx == -1)
+	            {
+	            	afterProvide = true;
+	                reqidx = fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
+	            }
+	            reqidx = fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
+	            if (reqidx == -1)
+	                reqidx = fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
+	            reqidx = fileData.indexOf(";", reqidx);
+	            String after = fileData.substring(reqidx + 1);
+	            String before = fileData.substring(0, reqidx + 1);
+	            if (afterProvide)
+	            	before += "\n";
+	            String s = before + "\n" + appendStringXML.toString() + after;
+	            writeFile(path, s, false);
+	        }
+        }
+    }
+
     protected String readCode(File file)
     {
         String code = "";

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java b/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
index a1098a7..67869ab 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
@@ -101,7 +101,11 @@ public class FlexJSProject extends FlexProject
                     }
                 }
                 else if (!isExternalLinkage(to) || qname.equals("Namespace"))
+                {
+                	if (qname.equals("XML"))
+                		needXML = true;
                     reqs.put(qname, dt);
+                }
             }
         }
         else
@@ -134,6 +138,7 @@ public class FlexJSProject extends FlexProject
 
     public boolean needLanguage;
     public boolean needCSS;
+    public boolean needXML;
     
     private LinkageChecker linkageChecker;
     private ITargetSettings ts;

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.tests/.classpath
----------------------------------------------------------------------
diff --git a/compiler.tests/.classpath b/compiler.tests/.classpath
index c8aaecc..7508ebe 100644
--- a/compiler.tests/.classpath
+++ b/compiler.tests/.classpath
@@ -9,5 +9,6 @@
 	<classpathentry kind="lib" path="/compiler/lib/commons-io.jar"/>
 	<classpathentry kind="src" path="/compiler"/>
 	<classpathentry kind="lib" path="/compiler/lib/guava.jar"/>
+	<classpathentry kind="lib" path="/compiler.tests/lib/commons-compress-1.10.jar"/>
 	<classpathentry kind="output" path="classes"/>
 </classpath>


Re: [1/2] git commit: [flex-falcon] [refs/heads/develop] - changes to get XML in the requires

Posted by Josh Tynjala <jo...@gmail.com>.
I agree. It doesn't seem correct to place the flag at the project level. I
want to see that coupling go away. I was thinking about adding some new
methods to JSEmitter and JSSubEmitter (maybe something like
setNeedLanguage() and setNeedXML()), that would set flags on the emitter
instead. The emitter isn't reused across multiple files, so that seems like
a better way to handle it.

I have more I need to do for source maps, so I'm going to focus on that for
a bit. I'll leave a note on this thread if I start working on that
refactoring.

- Josh



On Thu, Apr 7, 2016 at 10:44 PM, Alex Harui <ah...@adobe.com> wrote:

> Thanks Josh.
>
> It occurs to me that someday we may want to tweak the implementation
> again.  I think there is a danger to using a Project level flag to set
> output on a per-file basis, and I think we should be able to use the
> project dependency map instead of a string search to determine if XML is
> really being used in a file.  Let me know if you want to take a shot at the
> tweak, otherwise I will try to find time.  My main short term goal was to
> unblock Harbs so I'm not too worried about the current code.
>
> -Alex
>
> From: Josh Tynjala <jo...@gmail.com>
> Date: Thursday, April 7, 2016 at 4:39 PM
> To: Alex Harui <ah...@adobe.com>
> Cc: "dev@flex.apache.org" <de...@flex.apache.org>
>
> Subject: Re: [1/2] git commit: [flex-falcon] [refs/heads/develop] -
> changes to get XML in the requires
>
> No problem! It's done.
>
> - Josh
>
> On Thu, Apr 7, 2016 at 11:49 AM, Alex Harui <ah...@adobe.com> wrote:
>
>> Ok. I won't have time to rework it until this evening.  If you have time
>> to do it sooner that is fine too.
>>
>>
>> Sent from my LG G3, an AT&T 4G LTE smartphone
>>
>>
>> ------ Original message------
>>
>> *From: *Josh Tynjala
>>
>> *Date: *Thu, Apr 7, 2016 11:36 AM
>>
>> *To: *dev@flex.apache.org;
>>
>> *Subject:*Re: [1/2] git commit: [flex-falcon] [refs/heads/develop] -
>> changes to get XML in the requires
>>
>>
>> Hey Alex,
>>
>> The require for Language does not need to be appended in
>> MXMLFlexJSPublisher anymore. I moved it into the postProcess() step of
>> JSFlexJSEmitter. The reason I did this is because inserting an extra line
>> near the top of the file, after the file had already been written, broke
>> its source map. Everything was off by one line. In the emitter, it's still
>> possible to adjust the source maps to account for that extra line before
>> the file gets written.
>>
>> Ideally, the require for XML would be part of the emitter's postProcess()
>> too, for the same reason.
>>
>> - Josh
>>
>> On Thu, Apr 7, 2016 at 10:55 AM, <ah...@apache.org> wrote:
>>
>> > Repository: flex-falcon
>> > Updated Branches:
>> >   refs/heads/develop 88a9bc28c -> bdc933e4c
>> >
>> >
>> > changes to get XML in the requires
>> >
>> >
>> > Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
>> > Commit:
>> http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/6c6584da
>> > Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/6c6584da
>> > Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/6c6584da
>> >
>> > Branch: refs/heads/develop
>> > Commit: 6c6584da5be8ab5c4df0012110479b4d7d336a8b
>> > Parents: 88a9bc2
>> > Author: Alex Harui <ah...@apache.org>
>> > Authored: Thu Apr 7 10:39:28 2016 -0700
>> > Committer: Alex Harui <ah...@apache.org>
>> > Committed: Thu Apr 7 10:42:59 2016 -0700
>> >
>> > ----------------------------------------------------------------------
>> >  .../js/flexjs/TestFlexJSGlobalClasses.java      |  1 +
>> >  .../codegen/js/flexjs/TestFlexJSProject.java    | 15 +++
>> >  .../flex/compiler/internal/test/TestBase.java   | 98
>> ++++++++++++++------
>> >  .../flexjs/projects/interfaces/Test_result.js   |  1 +
>> >  .../flexjs/projects/super/Base_result.js        |  1 +
>> >  .../flexjs/projects/xml_requires/XMLRequire.as  | 30 ++++++
>> >  .../projects/xml_requires/XMLRequire_result.js  | 74 +++++++++++++++
>> >  .../codegen/js/jx/PackageHeaderEmitter.java     |  2 +-
>> >  .../mxml/flexjs/MXMLFlexJSPublisher.java        | 71 ++++++++++++++
>> >  .../internal/projects/FlexJSProject.java        |  5 +
>> >  compiler.tests/.classpath                       |  1 +
>> >  11 files changed, 270 insertions(+), 29 deletions(-)
>> > ----------------------------------------------------------------------
>> >
>> >
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
>> > ----------------------------------------------------------------------
>> > diff --git
>> >
>> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
>> >
>> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
>> > index df663af..32f28f5 100644
>> > ---
>> >
>> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
>> > +++
>> >
>> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
>> > @@ -27,6 +27,7 @@ import
>> > org.apache.flex.compiler.internal.projects.FlexJSProject;
>> >  import org.apache.flex.compiler.internal.tree.as.VariableNode;
>> >  import org.apache.flex.compiler.tree.as.IASNode;
>> >  import org.apache.flex.compiler.tree.as.IBinaryOperatorNode;
>> > +import org.apache.flex.compiler.tree.as.IFileNode;
>> >  import org.apache.flex.compiler.tree.as.IForLoopNode;
>> >  import org.apache.flex.compiler.tree.as.IFunctionCallNode;
>> >  import org.apache.flex.compiler.tree.as.IFunctionNode;
>> >
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
>> > ----------------------------------------------------------------------
>> > diff --git
>> >
>> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
>> >
>> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
>> > index fec0d2f..c057f92 100644
>> > ---
>> >
>> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
>> > +++
>> >
>> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
>> > @@ -131,6 +131,21 @@ public class TestFlexJSProject extends
>> TestGoogProject
>> >      }
>> >
>> >      @Test
>> > +    public void test_XMLRequires()
>> > +    {
>> > +        String testDirPath = projectDirPath + "/xml_requires";
>> > +
>> > +        String fileName = "XMLRequire";
>> > +
>> > +        sourcePath = new
>> > File(TestAdapterFactory.getTestAdapter().getUnitTestBaseDir(),
>> > +                projectDirPath + "/xml_requires").getPath();
>> > +
>> > +        List<String> compiledFileNames = compileProject(fileName,
>> > testDirPath);
>> > +
>> > +        assertProjectOut(compiledFileNames, testDirPath);
>> > +    }
>> > +
>> > +    @Test
>> >      public void test_Overrides()
>> >      {
>> >          String testDirPath = projectDirPath + "/overrides";
>> >
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
>> > ----------------------------------------------------------------------
>> > diff --git
>> >
>> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
>> >
>> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
>> > index 186f690..d8d6e36 100644
>> > ---
>> >
>> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
>> > +++
>> >
>> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
>> > @@ -40,6 +40,7 @@ import java.util.List;
>> >  import org.apache.flex.compiler.codegen.as.IASEmitter;
>> >  import org.apache.flex.compiler.codegen.mxml.IMXMLEmitter;
>> >  import org.apache.flex.compiler.config.Configurator;
>> > +import org.apache.flex.compiler.constants.IASLanguageConstants;
>> >  import org.apache.flex.compiler.driver.IBackend;
>> >  import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
>> >  import org.apache.flex.compiler.internal.codegen.as.ASFilterWriter;
>> > @@ -350,7 +351,7 @@ public class TestBase implements ITestBase
>> >                         qname = mainCU.getQualifiedNames().get(0);
>> >                 final File outputClassFile = getOutputClassFile(qname
>> >                         + "_output", outputRootDir);
>> > -               appendLanguage(outputClassFile.getAbsolutePath(),
>> qname);
>> > +               appendLanguageAndXML(outputClassFile.getAbsolutePath(),
>> > qname);
>> >                 } catch (InterruptedException e) {
>> >                         // TODO Auto-generated catch block
>> >                         e.printStackTrace();
>> > @@ -374,34 +375,75 @@ public class TestBase implements ITestBase
>> >                 fw.close();
>> >         }
>> >
>> > -    private void appendLanguage(String path, String projectName)
>> > -       throws IOException
>> > -       {
>> > -               StringBuilder appendString = new StringBuilder();
>> > -
>> >  appendString.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
>> > -
>> appendString.append(ASEmitterTokens.PAREN_OPEN.getToken());
>> > -
>> >  appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
>> > -
>> >  appendString.append(JSFlexJSEmitterTokens.LANGUAGE_QNAME.getToken());
>> > -
>> >  appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
>> > -
>> >  appendString.append(ASEmitterTokens.PAREN_CLOSE.getToken());
>> > -
>> appendString.append(ASEmitterTokens.SEMICOLON.getToken());
>> > -
>> > -           String fileData = readCode(new File(path));
>> > -           int reqidx = fileData.indexOf(appendString.toString());
>> > -
>> > +    private void appendLanguageAndXML(String path, String projectName)
>> > throws IOException
>> > +    {
>> > +        StringBuilder appendString = new StringBuilder();
>> > +
>> appendString.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
>> > +        appendString.append(ASEmitterTokens.PAREN_OPEN.getToken());
>> > +        appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
>> > +
>> > appendString.append(JSFlexJSEmitterTokens.LANGUAGE_QNAME.getToken());
>> > +        appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
>> > +        appendString.append(ASEmitterTokens.PAREN_CLOSE.getToken());
>> > +        appendString.append(ASEmitterTokens.SEMICOLON.getToken());
>> > +        appendString.append("\n");
>> > +
>> > +        String fileData = readCode(new File(path));
>> > +        int reqidx = fileData.indexOf(appendString.toString());
>> >             if (reqidx == -1 && project instanceof FlexJSProject &&
>> > ((FlexJSProject)project).needLanguage)
>> > -           {
>> > -               reqidx =
>> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
>> > -               if (reqidx == -1)
>> > -                       reqidx =
>> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
>> > -               reqidx = fileData.indexOf(";", reqidx);
>> > -                   String after = fileData.substring(reqidx + 1);
>> > -                   String before = fileData.substring(0, reqidx + 1);
>> > -                   String s = before + "\n" + appendString.toString() +
>> > after;
>> > -                   writeFile(path, s, false);
>> > -           }
>> > -       }
>> > -
>> > +        {
>> > +               boolean afterProvide = false;
>> > +            reqidx =
>> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
>> > +            if (reqidx == -1)
>> > +            {
>> > +               afterProvide = true;
>> > +                reqidx =
>> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
>> > +            }
>> > +            reqidx = fileData.indexOf(";", reqidx);
>> > +            String after = fileData.substring(reqidx + 1);
>> > +            String before = fileData.substring(0, reqidx + 1);
>> > +            if (afterProvide)
>> > +               before += "\n";
>> > +            String s = before + "\n" + appendString.toString() + after;
>> > +            writeFile(path, s, false);
>> > +        }
>> > +
>> > +        StringBuilder appendStringXML = new StringBuilder();
>> > +
>> > appendStringXML.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
>> > +        appendStringXML.append(ASEmitterTokens.PAREN_OPEN.getToken());
>> > +
>> appendStringXML.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
>> > +        appendStringXML.append(IASLanguageConstants.XML);
>> > +
>> appendStringXML.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
>> > +        appendStringXML.append(ASEmitterTokens.PAREN_CLOSE.getToken());
>> > +        appendStringXML.append(ASEmitterTokens.SEMICOLON.getToken());
>> > +        appendStringXML.append("\n");
>> > +
>> > +        if (project instanceof FlexJSProject &&
>> > ((FlexJSProject)project).needXML)
>> > +        {
>> > +               fileData = readCode(new File(path));
>> > +               reqidx = fileData.indexOf(appendStringXML.toString());
>> > +               if (reqidx == -1)
>> > +               {
>> > +                       boolean afterProvide = false;
>> > +                   reqidx =
>> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
>> > +                   if (reqidx == -1)
>> > +                   {
>> > +                       afterProvide = true;
>> > +                       reqidx =
>> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
>> > +                   }
>> > +                   reqidx =
>> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
>> > +                   if (reqidx == -1)
>> > +                       reqidx =
>> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
>> > +                   reqidx = fileData.indexOf(";", reqidx);
>> > +                   String after = fileData.substring(reqidx + 1);
>> > +                   String before = fileData.substring(0, reqidx + 1);
>> > +                   if (afterProvide)
>> > +                       before += "\n";
>> > +                   String s = before + "\n" +
>> appendStringXML.toString()
>> > + after;
>> > +                   writeFile(path, s, false);
>> > +               }
>> > +        }
>> > +    }
>> > +
>> >         protected String readCode(File file)
>> >         {
>> >             String code = "";
>> >
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
>> > ----------------------------------------------------------------------
>> > diff --git
>> > a/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
>> > b/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
>> > index 42ab0f4..92bb29f 100644
>> > ---
>> > a/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
>> > +++
>> > b/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
>> > @@ -29,6 +29,7 @@ goog.require('org.apache.flex.utils.Language');
>> >
>> >
>> >
>> > +
>> >  /**
>> >   * @constructor
>> >   * @extends {classes.A}
>> >
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
>> > ----------------------------------------------------------------------
>> > diff --git
>> > a/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
>> > b/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
>> > index 1306674..db3ade9 100644
>> > --- a/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
>> > +++ b/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
>> > @@ -26,6 +26,7 @@ goog.require('org.apache.flex.utils.Language');
>> >
>> >
>> >
>> > +
>> >  /**
>> >   * @constructor
>> >   * @extends {Super}
>> >
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire.as
>> > ----------------------------------------------------------------------
>> > diff --git
>> >
>> a/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire.as
>> >
>> b/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire.as
>> > new file mode 100644
>> > index 0000000..4a997c9
>> > --- /dev/null
>> > +++
>> >
>> b/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire.as
>> > @@ -0,0 +1,30 @@
>> >
>> >
>> +////////////////////////////////////////////////////////////////////////////////
>> > +//
>> > +//  Licensed to the Apache Software Foundation (ASF) under one or more
>> > +//  contributor license agreements.  See the NOTICE file distributed
>> with
>> > +//  this work for additional information regarding copyright ownership.
>> > +//  The ASF licenses this file to You under the Apache License, Version
>> > 2.0
>> > +//  (the "License"); you may not use this file except in compliance
>> with
>> > +//  the License.  You may obtain a copy of the License at
>> > +//
>> > +//      http://www.apache.org/licenses/LICENSE-2.0
>> > +//
>> > +//  Unless required by applicable law or agreed to in writing, software
>> > +//  distributed under the License is distributed on an "AS IS" BASIS,
>> > +//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> > implied.
>> > +//  See the License for the specific language governing permissions and
>> > +//  limitations under the License.
>> > +//
>> >
>> >
>> +////////////////////////////////////////////////////////////////////////////////
>> > +package
>> > +{
>> > +
>> > +       public class XMLRequire
>> > +       {
>> > +               public function XMLRequire()
>> > +        {
>> > +            var myXML:XML = <node />;
>> > +        }
>> > +       }
>> > +
>> > +}
>> > \ No newline at end of file
>> >
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire_result.js
>> > ----------------------------------------------------------------------
>> > diff --git
>> >
>> a/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire_result.js
>> >
>> b/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire_result.js
>> > new file mode 100644
>> > index 0000000..d6affbe
>> > --- /dev/null
>> > +++
>> >
>> b/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire_result.js
>> > @@ -0,0 +1,74 @@
>> > +/**
>> > + * Licensed under the Apache License, Version 2.0 (the "License");
>> > + * you may not use this file except in compliance with the License.
>> > + * You may obtain a copy of the License at
>> > + *
>> > + *     http://www.apache.org/licenses/LICENSE-2.0
>> > + *
>> > + * Unless required by applicable law or agreed to in writing, software
>> > + * distributed under the License is distributed on an "AS IS" BASIS,
>> > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> > implied.
>> > + * See the License for the specific language governing permissions and
>> > + * limitations under the License.
>> > + */
>> > +/**
>> > + * XMLRequire
>> > + *
>> > + * @fileoverview
>> > + *
>> > + * @suppress {checkTypes|accessControls}
>> > + */
>> > +
>> > +goog.provide('XMLRequire');
>> > +
>> > +goog.require('XML');
>> > +
>> > +
>> > +
>> > +
>> > +
>> > +/**
>> > + * @constructor
>> > + */
>> > +XMLRequire = function() {
>> > +  var /** @type {XML} */ myXML = new XML( '<node />') ;
>> > +};
>> > +
>> > +
>> > +/**
>> > + * Metadata
>> > + *
>> > + * @type {Object.<string, Array.<Object>>}
>> > + */
>> > +XMLRequire.prototype.FLEXJS_CLASS_INFO = { names: [{ name:
>> 'XMLRequire',
>> > qName: 'XMLRequire'}] };
>> > +
>> > +
>> > +/**
>> > + * Prevent renaming of class. Needed for reflection.
>> > + */
>> > +goog.exportSymbol('XMLRequire', XMLRequire);
>> > +
>> > +
>> > +
>> > +/**
>> > + * Reflection
>> > + *
>> > + * @return {Object.<string, Function>}
>> > + */
>> > +XMLRequire.prototype.FLEXJS_REFLECTION_INFO = function () {
>> > +  return {
>> > +    variables: function () {
>> > +      return {
>> > +      };
>> > +    },
>> > +    accessors: function () {
>> > +      return {
>> > +      };
>> > +    },
>> > +    methods: function () {
>> > +      return {
>> > +        'XMLRequire': { type: '', declaredBy: 'XMLRequire'}
>> > +      };
>> > +    }
>> > +  };
>> > +};
>> >
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
>> > ----------------------------------------------------------------------
>> > diff --git
>> >
>> a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
>> >
>> b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
>> > index 48acf5b..d47c6dc 100644
>> > ---
>> >
>> a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
>> > +++
>> >
>> b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
>> > @@ -208,7 +208,7 @@ public class PackageHeaderEmitter extends
>> JSSubEmitter
>> > implements
>> >
>> >                  if (NativeUtils.isNative(imp))
>> >                  {
>> > -                       if (!(imp.equals("QName") ||
>> > imp.equals("Namespace")))
>> > +                       if (!(imp.equals("QName") ||
>> > imp.equals("Namespace") || imp.equals("XML") || imp.equals("XMLList")))
>> >                                 continue;
>> >                  }
>> >
>> >
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
>> > ----------------------------------------------------------------------
>> > diff --git
>> >
>> a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
>> >
>> b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
>> > index 347e01c..4dcc1be 100644
>> > ---
>> >
>> a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
>> > +++
>> >
>> b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
>> > @@ -42,6 +42,7 @@ import
>> org.apache.commons.io.filefilter.RegexFileFilter;
>> >  import org.apache.flex.compiler.clients.problems.ProblemQuery;
>> >  import org.apache.flex.compiler.codegen.js.IJSPublisher;
>> >  import org.apache.flex.compiler.config.Configuration;
>> > +import org.apache.flex.compiler.constants.IASLanguageConstants;
>> >  import org.apache.flex.compiler.css.ICSSPropertyValue;
>> >  import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
>> >  import org.apache.flex.compiler.internal.codegen.js.JSSharedData;
>> > @@ -278,6 +279,7 @@ public class MXMLFlexJSPublisher extends
>> > JSGoogPublisher implements IJSPublisher
>> >
>> >          appendExportSymbol(projectIntermediateJSFilePath, projectName);
>> >          appendEncodedCSS(projectIntermediateJSFilePath, projectName);
>> > +        appendLanguageAndXML(projectIntermediateJSFilePath,
>> projectName);
>> >
>> >          // if (!subsetGoog)
>> >          // {
>> > @@ -525,6 +527,75 @@ public class MXMLFlexJSPublisher extends
>> > JSGoogPublisher implements IJSPublisher
>> >          }
>> >      }
>> >
>> > +    private void appendLanguageAndXML(String path, String projectName)
>> > throws IOException
>> > +    {
>> > +        StringBuilder appendString = new StringBuilder();
>> > +
>> appendString.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
>> > +        appendString.append(ASEmitterTokens.PAREN_OPEN.getToken());
>> > +        appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
>> > +
>> > appendString.append(JSFlexJSEmitterTokens.LANGUAGE_QNAME.getToken());
>> > +        appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
>> > +        appendString.append(ASEmitterTokens.PAREN_CLOSE.getToken());
>> > +        appendString.append(ASEmitterTokens.SEMICOLON.getToken());
>> > +        appendString.append("\n");
>> > +
>> > +        String fileData = readCode(new File(path));
>> > +        int reqidx = fileData.indexOf(appendString.toString());
>> > +        if (reqidx == -1 && project.needLanguage)
>> > +        {
>> > +               boolean afterProvide = false;
>> > +            reqidx =
>> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
>> > +            if (reqidx == -1)
>> > +            {
>> > +               afterProvide = true;
>> > +                reqidx =
>> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
>> > +            }
>> > +            reqidx = fileData.indexOf(";", reqidx);
>> > +            String after = fileData.substring(reqidx + 1);
>> > +            String before = fileData.substring(0, reqidx + 1);
>> > +            if (afterProvide)
>> > +               before += "\n";
>> > +            String s = before + "\n" + appendString.toString() + after;
>> > +            writeFile(path, s, false);
>> > +        }
>> > +
>> > +        StringBuilder appendStringXML = new StringBuilder();
>> > +
>> > appendStringXML.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
>> > +        appendStringXML.append(ASEmitterTokens.PAREN_OPEN.getToken());
>> > +
>> appendStringXML.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
>> > +        appendStringXML.append(IASLanguageConstants.XML);
>> > +
>> appendStringXML.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
>> > +        appendStringXML.append(ASEmitterTokens.PAREN_CLOSE.getToken());
>> > +        appendStringXML.append(ASEmitterTokens.SEMICOLON.getToken());
>> > +        appendStringXML.append("\n");
>> > +
>> > +        if (project.needXML)
>> > +        {
>> > +               fileData = readCode(new File(path));
>> > +               reqidx = fileData.indexOf(appendStringXML.toString());
>> > +               if (reqidx == -1)
>> > +               {
>> > +                       boolean afterProvide = false;
>> > +                   reqidx =
>> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
>> > +                   if (reqidx == -1)
>> > +                   {
>> > +                       afterProvide = true;
>> > +                       reqidx =
>> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
>> > +                   }
>> > +                   reqidx =
>> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
>> > +                   if (reqidx == -1)
>> > +                       reqidx =
>> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
>> > +                   reqidx = fileData.indexOf(";", reqidx);
>> > +                   String after = fileData.substring(reqidx + 1);
>> > +                   String before = fileData.substring(0, reqidx + 1);
>> > +                   if (afterProvide)
>> > +                       before += "\n";
>> > +                   String s = before + "\n" +
>> appendStringXML.toString()
>> > + after;
>> > +                   writeFile(path, s, false);
>> > +               }
>> > +        }
>> > +    }
>> > +
>> >      protected String readCode(File file)
>> >      {
>> >          String code = "";
>> >
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
>> > ----------------------------------------------------------------------
>> > diff --git
>> >
>> a/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
>> >
>> b/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
>> > index a1098a7..67869ab 100644
>> > ---
>> >
>> a/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
>> > +++
>> >
>> b/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
>> > @@ -101,7 +101,11 @@ public class FlexJSProject extends FlexProject
>> >                      }
>> >                  }
>> >                  else if (!isExternalLinkage(to) ||
>> > qname.equals("Namespace"))
>> > +                {
>> > +                       if (qname.equals("XML"))
>> > +                               needXML = true;
>> >                      reqs.put(qname, dt);
>> > +                }
>> >              }
>> >          }
>> >          else
>> > @@ -134,6 +138,7 @@ public class FlexJSProject extends FlexProject
>> >
>> >      public boolean needLanguage;
>> >      public boolean needCSS;
>> > +    public boolean needXML;
>> >
>> >      private LinkageChecker linkageChecker;
>> >      private ITargetSettings ts;
>> >
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.tests/.classpath
>> > ----------------------------------------------------------------------
>> > diff --git a/compiler.tests/.classpath b/compiler.tests/.classpath
>> > index c8aaecc..7508ebe 100644
>> > --- a/compiler.tests/.classpath
>> > +++ b/compiler.tests/.classpath
>> > @@ -9,5 +9,6 @@
>> >         <classpathentry kind="lib" path="/compiler/lib/commons-io.jar"/>
>> >         <classpathentry kind="src" path="/compiler"/>
>> >         <classpathentry kind="lib" path="/compiler/lib/guava.jar"/>
>> > +       <classpathentry kind="lib"
>> > path="/compiler.tests/lib/commons-compress-1.10.jar"/>
>> >         <classpathentry kind="output" path="classes"/>
>> >  </classpath>
>> >
>> >
>>
>
>

Re: [1/2] git commit: [flex-falcon] [refs/heads/develop] - changes to get XML in the requires

Posted by Alex Harui <ah...@adobe.com>.
Thanks Josh.

It occurs to me that someday we may want to tweak the implementation again.  I think there is a danger to using a Project level flag to set output on a per-file basis, and I think we should be able to use the project dependency map instead of a string search to determine if XML is really being used in a file.  Let me know if you want to take a shot at the tweak, otherwise I will try to find time.  My main short term goal was to unblock Harbs so I'm not too worried about the current code.

-Alex

From: Josh Tynjala <jo...@gmail.com>>
Date: Thursday, April 7, 2016 at 4:39 PM
To: Alex Harui <ah...@adobe.com>>
Cc: "dev@flex.apache.org<ma...@flex.apache.org>" <de...@flex.apache.org>>
Subject: Re: [1/2] git commit: [flex-falcon] [refs/heads/develop] - changes to get XML in the requires

No problem! It's done.

- Josh

On Thu, Apr 7, 2016 at 11:49 AM, Alex Harui <ah...@adobe.com>> wrote:

Ok. I won't have time to rework it until this evening.  If you have time to do it sooner that is fine too.


Sent from my LG G3, an AT&T 4G LTE smartphone


------ Original message------

From: Josh Tynjala

Date: Thu, Apr 7, 2016 11:36 AM

To: dev@flex.apache.org<ma...@flex.apache.org>;

Subject:Re: [1/2] git commit: [flex-falcon] [refs/heads/develop] - changes to get XML in the requires


Hey Alex,

The require for Language does not need to be appended in
MXMLFlexJSPublisher anymore. I moved it into the postProcess() step of
JSFlexJSEmitter. The reason I did this is because inserting an extra line
near the top of the file, after the file had already been written, broke
its source map. Everything was off by one line. In the emitter, it's still
possible to adjust the source maps to account for that extra line before
the file gets written.

Ideally, the require for XML would be part of the emitter's postProcess()
too, for the same reason.

- Josh

On Thu, Apr 7, 2016 at 10:55 AM, <ah...@apache.org>> wrote:

> Repository: flex-falcon
> Updated Branches:
>   refs/heads/develop 88a9bc28c -> bdc933e4c
>
>
> changes to get XML in the requires
>
>
> Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
> Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/6c6584da
> Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/6c6584da
> Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/6c6584da
>
> Branch: refs/heads/develop
> Commit: 6c6584da5be8ab5c4df0012110479b4d7d336a8b
> Parents: 88a9bc2
> Author: Alex Harui <ah...@apache.org>>
> Authored: Thu Apr 7 10:39:28 2016 -0700
> Committer: Alex Harui <ah...@apache.org>>
> Committed: Thu Apr 7 10:42:59 2016 -0700
>
> ----------------------------------------------------------------------
>  .../js/flexjs/TestFlexJSGlobalClasses.java      |  1 +
>  .../codegen/js/flexjs/TestFlexJSProject.java    | 15 +++
>  .../flex/compiler/internal/test/TestBase.java   | 98 ++++++++++++++------
>  .../flexjs/projects/interfaces/Test_result.js   |  1 +
>  .../flexjs/projects/super/Base_result.js        |  1 +
>  .../flexjs/projects/xml_requires/XMLRequire.as  | 30 ++++++
>  .../projects/xml_requires/XMLRequire_result.js  | 74 +++++++++++++++
>  .../codegen/js/jx/PackageHeaderEmitter.java     |  2 +-
>  .../mxml/flexjs/MXMLFlexJSPublisher.java        | 71 ++++++++++++++
>  .../internal/projects/FlexJSProject.java        |  5 +
>  compiler.tests/.classpath                       |  1 +
>  11 files changed, 270 insertions(+), 29 deletions(-)
> ----------------------------------------------------------------------
>
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
> ----------------------------------------------------------------------
> diff --git
> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
> index df663af..32f28f5 100644
> ---
> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
> +++
> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
> @@ -27,6 +27,7 @@ import
> org.apache.flex.compiler.internal.projects.FlexJSProject;
>  import org.apache.flex.compiler.internal.tree.as.VariableNode;
>  import org.apache.flex.compiler.tree.as.IASNode;
>  import org.apache.flex.compiler.tree.as.IBinaryOperatorNode;
> +import org.apache.flex.compiler.tree.as.IFileNode;
>  import org.apache.flex.compiler.tree.as.IForLoopNode;
>  import org.apache.flex.compiler.tree.as.IFunctionCallNode;
>  import org.apache.flex.compiler.tree.as.IFunctionNode;
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
> ----------------------------------------------------------------------
> diff --git
> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
> index fec0d2f..c057f92 100644
> ---
> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
> +++
> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
> @@ -131,6 +131,21 @@ public class TestFlexJSProject extends TestGoogProject
>      }
>
>      @Test
> +    public void test_XMLRequires()
> +    {
> +        String testDirPath = projectDirPath + "/xml_requires";
> +
> +        String fileName = "XMLRequire";
> +
> +        sourcePath = new
> File(TestAdapterFactory.getTestAdapter().getUnitTestBaseDir(),
> +                projectDirPath + "/xml_requires").getPath();
> +
> +        List<String> compiledFileNames = compileProject(fileName,
> testDirPath);
> +
> +        assertProjectOut(compiledFileNames, testDirPath);
> +    }
> +
> +    @Test
>      public void test_Overrides()
>      {
>          String testDirPath = projectDirPath + "/overrides";
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
> ----------------------------------------------------------------------
> diff --git
> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
> index 186f690..d8d6e36 100644
> ---
> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
> +++
> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
> @@ -40,6 +40,7 @@ import java.util.List;
>  import org.apache.flex.compiler.codegen.as.IASEmitter;
>  import org.apache.flex.compiler.codegen.mxml.IMXMLEmitter;
>  import org.apache.flex.compiler.config.Configurator;
> +import org.apache.flex.compiler.constants.IASLanguageConstants;
>  import org.apache.flex.compiler.driver.IBackend;
>  import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
>  import org.apache.flex.compiler.internal.codegen.as.ASFilterWriter;
> @@ -350,7 +351,7 @@ public class TestBase implements ITestBase
>                         qname = mainCU.getQualifiedNames().get(0);
>                 final File outputClassFile = getOutputClassFile(qname
>                         + "_output", outputRootDir);
> -               appendLanguage(outputClassFile.getAbsolutePath(), qname);
> +               appendLanguageAndXML(outputClassFile.getAbsolutePath(),
> qname);
>                 } catch (InterruptedException e) {
>                         // TODO Auto-generated catch block
>                         e.printStackTrace();
> @@ -374,34 +375,75 @@ public class TestBase implements ITestBase
>                 fw.close();
>         }
>
> -    private void appendLanguage(String path, String projectName)
> -       throws IOException
> -       {
> -               StringBuilder appendString = new StringBuilder();
> -
>  appendString.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> -               appendString.append(ASEmitterTokens.PAREN_OPEN.getToken());
> -
>  appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> -
>  appendString.append(JSFlexJSEmitterTokens.LANGUAGE_QNAME.getToken());
> -
>  appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> -
>  appendString.append(ASEmitterTokens.PAREN_CLOSE.getToken());
> -               appendString.append(ASEmitterTokens.SEMICOLON.getToken());
> -
> -           String fileData = readCode(new File(path));
> -           int reqidx = fileData.indexOf(appendString.toString());
> -
> +    private void appendLanguageAndXML(String path, String projectName)
> throws IOException
> +    {
> +        StringBuilder appendString = new StringBuilder();
> +        appendString.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> +        appendString.append(ASEmitterTokens.PAREN_OPEN.getToken());
> +        appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> +
> appendString.append(JSFlexJSEmitterTokens.LANGUAGE_QNAME.getToken());
> +        appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> +        appendString.append(ASEmitterTokens.PAREN_CLOSE.getToken());
> +        appendString.append(ASEmitterTokens.SEMICOLON.getToken());
> +        appendString.append("\n");
> +
> +        String fileData = readCode(new File(path));
> +        int reqidx = fileData.indexOf(appendString.toString());
>             if (reqidx == -1 && project instanceof FlexJSProject &&
> ((FlexJSProject)project).needLanguage)
> -           {
> -               reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> -               if (reqidx == -1)
> -                       reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
> -               reqidx = fileData.indexOf(";", reqidx);
> -                   String after = fileData.substring(reqidx + 1);
> -                   String before = fileData.substring(0, reqidx + 1);
> -                   String s = before + "\n" + appendString.toString() +
> after;
> -                   writeFile(path, s, false);
> -           }
> -       }
> -
> +        {
> +               boolean afterProvide = false;
> +            reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> +            if (reqidx == -1)
> +            {
> +               afterProvide = true;
> +                reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
> +            }
> +            reqidx = fileData.indexOf(";", reqidx);
> +            String after = fileData.substring(reqidx + 1);
> +            String before = fileData.substring(0, reqidx + 1);
> +            if (afterProvide)
> +               before += "\n";
> +            String s = before + "\n" + appendString.toString() + after;
> +            writeFile(path, s, false);
> +        }
> +
> +        StringBuilder appendStringXML = new StringBuilder();
> +
> appendStringXML.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> +        appendStringXML.append(ASEmitterTokens.PAREN_OPEN.getToken());
> +        appendStringXML.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> +        appendStringXML.append(IASLanguageConstants.XML);
> +        appendStringXML.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> +        appendStringXML.append(ASEmitterTokens.PAREN_CLOSE.getToken());
> +        appendStringXML.append(ASEmitterTokens.SEMICOLON.getToken());
> +        appendStringXML.append("\n");
> +
> +        if (project instanceof FlexJSProject &&
> ((FlexJSProject)project).needXML)
> +        {
> +               fileData = readCode(new File(path));
> +               reqidx = fileData.indexOf(appendStringXML.toString());
> +               if (reqidx == -1)
> +               {
> +                       boolean afterProvide = false;
> +                   reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> +                   if (reqidx == -1)
> +                   {
> +                       afterProvide = true;
> +                       reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
> +                   }
> +                   reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> +                   if (reqidx == -1)
> +                       reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
> +                   reqidx = fileData.indexOf(";", reqidx);
> +                   String after = fileData.substring(reqidx + 1);
> +                   String before = fileData.substring(0, reqidx + 1);
> +                   if (afterProvide)
> +                       before += "\n";
> +                   String s = before + "\n" + appendStringXML.toString()
> + after;
> +                   writeFile(path, s, false);
> +               }
> +        }
> +    }
> +
>         protected String readCode(File file)
>         {
>             String code = "";
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
> ----------------------------------------------------------------------
> diff --git
> a/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
> b/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
> index 42ab0f4..92bb29f 100644
> ---
> a/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
> +++
> b/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
> @@ -29,6 +29,7 @@ goog.require('org.apache.flex.utils.Language');
>
>
>
> +
>  /**
>   * @constructor
>   * @extends {classes.A}
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
> ----------------------------------------------------------------------
> diff --git
> a/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
> b/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
> index 1306674..db3ade9 100644
> --- a/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
> +++ b/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
> @@ -26,6 +26,7 @@ goog.require('org.apache.flex.utils.Language');
>
>
>
> +
>  /**
>   * @constructor
>   * @extends {Super}
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire.as
> ----------------------------------------------------------------------
> diff --git
> a/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire.as
> b/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire.as
> new file mode 100644
> index 0000000..4a997c9
> --- /dev/null
> +++
> b/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire.as
> @@ -0,0 +1,30 @@
>
> +////////////////////////////////////////////////////////////////////////////////
> +//
> +//  Licensed to the Apache Software Foundation (ASF) under one or more
> +//  contributor license agreements.  See the NOTICE file distributed with
> +//  this work for additional information regarding copyright ownership.
> +//  The ASF licenses this file to You under the Apache License, Version
> 2.0
> +//  (the "License"); you may not use this file except in compliance with
> +//  the License.  You may obtain a copy of the License at
> +//
> +//      http://www.apache.org/licenses/LICENSE-2.0
> +//
> +//  Unless required by applicable law or agreed to in writing, software
> +//  distributed under the License is distributed on an "AS IS" BASIS,
> +//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> +//  See the License for the specific language governing permissions and
> +//  limitations under the License.
> +//
>
> +////////////////////////////////////////////////////////////////////////////////
> +package
> +{
> +
> +       public class XMLRequire
> +       {
> +               public function XMLRequire()
> +        {
> +            var myXML:XML = <node />;
> +        }
> +       }
> +
> +}
> \ No newline at end of file
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire_result.js
> ----------------------------------------------------------------------
> diff --git
> a/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire_result.js
> b/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire_result.js
> new file mode 100644
> index 0000000..d6affbe
> --- /dev/null
> +++
> b/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire_result.js
> @@ -0,0 +1,74 @@
> +/**
> + * Licensed under the Apache License, Version 2.0 (the "License");
> + * you may not use this file except in compliance with the License.
> + * You may obtain a copy of the License at
> + *
> + *     http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + */
> +/**
> + * XMLRequire
> + *
> + * @fileoverview
> + *
> + * @suppress {checkTypes|accessControls}
> + */
> +
> +goog.provide('XMLRequire');
> +
> +goog.require('XML');
> +
> +
> +
> +
> +
> +/**
> + * @constructor
> + */
> +XMLRequire = function() {
> +  var /** @type {XML} */ myXML = new XML( '<node />') ;
> +};
> +
> +
> +/**
> + * Metadata
> + *
> + * @type {Object.<string, Array.<Object>>}
> + */
> +XMLRequire.prototype.FLEXJS_CLASS_INFO = { names: [{ name: 'XMLRequire',
> qName: 'XMLRequire'}] };
> +
> +
> +/**
> + * Prevent renaming of class. Needed for reflection.
> + */
> +goog.exportSymbol('XMLRequire', XMLRequire);
> +
> +
> +
> +/**
> + * Reflection
> + *
> + * @return {Object.<string, Function>}
> + */
> +XMLRequire.prototype.FLEXJS_REFLECTION_INFO = function () {
> +  return {
> +    variables: function () {
> +      return {
> +      };
> +    },
> +    accessors: function () {
> +      return {
> +      };
> +    },
> +    methods: function () {
> +      return {
> +        'XMLRequire': { type: '', declaredBy: 'XMLRequire'}
> +      };
> +    }
> +  };
> +};
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
> ----------------------------------------------------------------------
> diff --git
> a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
> b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
> index 48acf5b..d47c6dc 100644
> ---
> a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
> +++
> b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
> @@ -208,7 +208,7 @@ public class PackageHeaderEmitter extends JSSubEmitter
> implements
>
>                  if (NativeUtils.isNative(imp))
>                  {
> -                       if (!(imp.equals("QName") ||
> imp.equals("Namespace")))
> +                       if (!(imp.equals("QName") ||
> imp.equals("Namespace") || imp.equals("XML") || imp.equals("XMLList")))
>                                 continue;
>                  }
>
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
> ----------------------------------------------------------------------
> diff --git
> a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
> b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
> index 347e01c..4dcc1be 100644
> ---
> a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
> +++
> b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
> @@ -42,6 +42,7 @@ import org.apache.commons.io.filefilter.RegexFileFilter;
>  import org.apache.flex.compiler.clients.problems.ProblemQuery;
>  import org.apache.flex.compiler.codegen.js.IJSPublisher;
>  import org.apache.flex.compiler.config.Configuration;
> +import org.apache.flex.compiler.constants.IASLanguageConstants;
>  import org.apache.flex.compiler.css.ICSSPropertyValue;
>  import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
>  import org.apache.flex.compiler.internal.codegen.js.JSSharedData;
> @@ -278,6 +279,7 @@ public class MXMLFlexJSPublisher extends
> JSGoogPublisher implements IJSPublisher
>
>          appendExportSymbol(projectIntermediateJSFilePath, projectName);
>          appendEncodedCSS(projectIntermediateJSFilePath, projectName);
> +        appendLanguageAndXML(projectIntermediateJSFilePath, projectName);
>
>          // if (!subsetGoog)
>          // {
> @@ -525,6 +527,75 @@ public class MXMLFlexJSPublisher extends
> JSGoogPublisher implements IJSPublisher
>          }
>      }
>
> +    private void appendLanguageAndXML(String path, String projectName)
> throws IOException
> +    {
> +        StringBuilder appendString = new StringBuilder();
> +        appendString.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> +        appendString.append(ASEmitterTokens.PAREN_OPEN.getToken());
> +        appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> +
> appendString.append(JSFlexJSEmitterTokens.LANGUAGE_QNAME.getToken());
> +        appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> +        appendString.append(ASEmitterTokens.PAREN_CLOSE.getToken());
> +        appendString.append(ASEmitterTokens.SEMICOLON.getToken());
> +        appendString.append("\n");
> +
> +        String fileData = readCode(new File(path));
> +        int reqidx = fileData.indexOf(appendString.toString());
> +        if (reqidx == -1 && project.needLanguage)
> +        {
> +               boolean afterProvide = false;
> +            reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> +            if (reqidx == -1)
> +            {
> +               afterProvide = true;
> +                reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
> +            }
> +            reqidx = fileData.indexOf(";", reqidx);
> +            String after = fileData.substring(reqidx + 1);
> +            String before = fileData.substring(0, reqidx + 1);
> +            if (afterProvide)
> +               before += "\n";
> +            String s = before + "\n" + appendString.toString() + after;
> +            writeFile(path, s, false);
> +        }
> +
> +        StringBuilder appendStringXML = new StringBuilder();
> +
> appendStringXML.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> +        appendStringXML.append(ASEmitterTokens.PAREN_OPEN.getToken());
> +        appendStringXML.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> +        appendStringXML.append(IASLanguageConstants.XML);
> +        appendStringXML.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> +        appendStringXML.append(ASEmitterTokens.PAREN_CLOSE.getToken());
> +        appendStringXML.append(ASEmitterTokens.SEMICOLON.getToken());
> +        appendStringXML.append("\n");
> +
> +        if (project.needXML)
> +        {
> +               fileData = readCode(new File(path));
> +               reqidx = fileData.indexOf(appendStringXML.toString());
> +               if (reqidx == -1)
> +               {
> +                       boolean afterProvide = false;
> +                   reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> +                   if (reqidx == -1)
> +                   {
> +                       afterProvide = true;
> +                       reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
> +                   }
> +                   reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> +                   if (reqidx == -1)
> +                       reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
> +                   reqidx = fileData.indexOf(";", reqidx);
> +                   String after = fileData.substring(reqidx + 1);
> +                   String before = fileData.substring(0, reqidx + 1);
> +                   if (afterProvide)
> +                       before += "\n";
> +                   String s = before + "\n" + appendStringXML.toString()
> + after;
> +                   writeFile(path, s, false);
> +               }
> +        }
> +    }
> +
>      protected String readCode(File file)
>      {
>          String code = "";
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
> ----------------------------------------------------------------------
> diff --git
> a/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
> b/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
> index a1098a7..67869ab 100644
> ---
> a/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
> +++
> b/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
> @@ -101,7 +101,11 @@ public class FlexJSProject extends FlexProject
>                      }
>                  }
>                  else if (!isExternalLinkage(to) ||
> qname.equals("Namespace"))
> +                {
> +                       if (qname.equals("XML"))
> +                               needXML = true;
>                      reqs.put(qname, dt);
> +                }
>              }
>          }
>          else
> @@ -134,6 +138,7 @@ public class FlexJSProject extends FlexProject
>
>      public boolean needLanguage;
>      public boolean needCSS;
> +    public boolean needXML;
>
>      private LinkageChecker linkageChecker;
>      private ITargetSettings ts;
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.tests/.classpath
> ----------------------------------------------------------------------
> diff --git a/compiler.tests/.classpath b/compiler.tests/.classpath
> index c8aaecc..7508ebe 100644
> --- a/compiler.tests/.classpath
> +++ b/compiler.tests/.classpath
> @@ -9,5 +9,6 @@
>         <classpathentry kind="lib" path="/compiler/lib/commons-io.jar"/>
>         <classpathentry kind="src" path="/compiler"/>
>         <classpathentry kind="lib" path="/compiler/lib/guava.jar"/>
> +       <classpathentry kind="lib"
> path="/compiler.tests/lib/commons-compress-1.10.jar"/>
>         <classpathentry kind="output" path="classes"/>
>  </classpath>
>
>


Re: [1/2] git commit: [flex-falcon] [refs/heads/develop] - changes to get XML in the requires

Posted by Josh Tynjala <jo...@gmail.com>.
No problem! It's done.

- Josh

On Thu, Apr 7, 2016 at 11:49 AM, Alex Harui <ah...@adobe.com> wrote:

> Ok. I won't have time to rework it until this evening.  If you have time
> to do it sooner that is fine too.
>
>
> Sent from my LG G3, an AT&T 4G LTE smartphone
>
>
> ------ Original message------
>
> *From: *Josh Tynjala
>
> *Date: *Thu, Apr 7, 2016 11:36 AM
>
> *To: *dev@flex.apache.org;
>
> *Subject:*Re: [1/2] git commit: [flex-falcon] [refs/heads/develop] -
> changes to get XML in the requires
>
>
> Hey Alex,
>
> The require for Language does not need to be appended in
> MXMLFlexJSPublisher anymore. I moved it into the postProcess() step of
> JSFlexJSEmitter. The reason I did this is because inserting an extra line
> near the top of the file, after the file had already been written, broke
> its source map. Everything was off by one line. In the emitter, it's still
> possible to adjust the source maps to account for that extra line before
> the file gets written.
>
> Ideally, the require for XML would be part of the emitter's postProcess()
> too, for the same reason.
>
> - Josh
>
> On Thu, Apr 7, 2016 at 10:55 AM, <ah...@apache.org> wrote:
>
> > Repository: flex-falcon
> > Updated Branches:
> >   refs/heads/develop 88a9bc28c -> bdc933e4c
> >
> >
> > changes to get XML in the requires
> >
> >
> > Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
> > Commit:
> http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/6c6584da
> > Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/6c6584da
> > Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/6c6584da
> >
> > Branch: refs/heads/develop
> > Commit: 6c6584da5be8ab5c4df0012110479b4d7d336a8b
> > Parents: 88a9bc2
> > Author: Alex Harui <ah...@apache.org>
> > Authored: Thu Apr 7 10:39:28 2016 -0700
> > Committer: Alex Harui <ah...@apache.org>
> > Committed: Thu Apr 7 10:42:59 2016 -0700
> >
> > ----------------------------------------------------------------------
> >  .../js/flexjs/TestFlexJSGlobalClasses.java      |  1 +
> >  .../codegen/js/flexjs/TestFlexJSProject.java    | 15 +++
> >  .../flex/compiler/internal/test/TestBase.java   | 98
> ++++++++++++++------
> >  .../flexjs/projects/interfaces/Test_result.js   |  1 +
> >  .../flexjs/projects/super/Base_result.js        |  1 +
> >  .../flexjs/projects/xml_requires/XMLRequire.as  | 30 ++++++
> >  .../projects/xml_requires/XMLRequire_result.js  | 74 +++++++++++++++
> >  .../codegen/js/jx/PackageHeaderEmitter.java     |  2 +-
> >  .../mxml/flexjs/MXMLFlexJSPublisher.java        | 71 ++++++++++++++
> >  .../internal/projects/FlexJSProject.java        |  5 +
> >  compiler.tests/.classpath                       |  1 +
> >  11 files changed, 270 insertions(+), 29 deletions(-)
> > ----------------------------------------------------------------------
> >
> >
> >
> >
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
> > ----------------------------------------------------------------------
> > diff --git
> >
> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
> >
> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
> > index df663af..32f28f5 100644
> > ---
> >
> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
> > +++
> >
> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
> > @@ -27,6 +27,7 @@ import
> > org.apache.flex.compiler.internal.projects.FlexJSProject;
> >  import org.apache.flex.compiler.internal.tree.as.VariableNode;
> >  import org.apache.flex.compiler.tree.as.IASNode;
> >  import org.apache.flex.compiler.tree.as.IBinaryOperatorNode;
> > +import org.apache.flex.compiler.tree.as.IFileNode;
> >  import org.apache.flex.compiler.tree.as.IForLoopNode;
> >  import org.apache.flex.compiler.tree.as.IFunctionCallNode;
> >  import org.apache.flex.compiler.tree.as.IFunctionNode;
> >
> >
> >
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
> > ----------------------------------------------------------------------
> > diff --git
> >
> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
> >
> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
> > index fec0d2f..c057f92 100644
> > ---
> >
> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
> > +++
> >
> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
> > @@ -131,6 +131,21 @@ public class TestFlexJSProject extends
> TestGoogProject
> >      }
> >
> >      @Test
> > +    public void test_XMLRequires()
> > +    {
> > +        String testDirPath = projectDirPath + "/xml_requires";
> > +
> > +        String fileName = "XMLRequire";
> > +
> > +        sourcePath = new
> > File(TestAdapterFactory.getTestAdapter().getUnitTestBaseDir(),
> > +                projectDirPath + "/xml_requires").getPath();
> > +
> > +        List<String> compiledFileNames = compileProject(fileName,
> > testDirPath);
> > +
> > +        assertProjectOut(compiledFileNames, testDirPath);
> > +    }
> > +
> > +    @Test
> >      public void test_Overrides()
> >      {
> >          String testDirPath = projectDirPath + "/overrides";
> >
> >
> >
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
> > ----------------------------------------------------------------------
> > diff --git
> >
> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
> >
> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
> > index 186f690..d8d6e36 100644
> > ---
> >
> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
> > +++
> >
> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
> > @@ -40,6 +40,7 @@ import java.util.List;
> >  import org.apache.flex.compiler.codegen.as.IASEmitter;
> >  import org.apache.flex.compiler.codegen.mxml.IMXMLEmitter;
> >  import org.apache.flex.compiler.config.Configurator;
> > +import org.apache.flex.compiler.constants.IASLanguageConstants;
> >  import org.apache.flex.compiler.driver.IBackend;
> >  import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
> >  import org.apache.flex.compiler.internal.codegen.as.ASFilterWriter;
> > @@ -350,7 +351,7 @@ public class TestBase implements ITestBase
> >                         qname = mainCU.getQualifiedNames().get(0);
> >                 final File outputClassFile = getOutputClassFile(qname
> >                         + "_output", outputRootDir);
> > -               appendLanguage(outputClassFile.getAbsolutePath(), qname);
> > +               appendLanguageAndXML(outputClassFile.getAbsolutePath(),
> > qname);
> >                 } catch (InterruptedException e) {
> >                         // TODO Auto-generated catch block
> >                         e.printStackTrace();
> > @@ -374,34 +375,75 @@ public class TestBase implements ITestBase
> >                 fw.close();
> >         }
> >
> > -    private void appendLanguage(String path, String projectName)
> > -       throws IOException
> > -       {
> > -               StringBuilder appendString = new StringBuilder();
> > -
> >  appendString.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> > -
> appendString.append(ASEmitterTokens.PAREN_OPEN.getToken());
> > -
> >  appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> > -
> >  appendString.append(JSFlexJSEmitterTokens.LANGUAGE_QNAME.getToken());
> > -
> >  appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> > -
> >  appendString.append(ASEmitterTokens.PAREN_CLOSE.getToken());
> > -
> appendString.append(ASEmitterTokens.SEMICOLON.getToken());
> > -
> > -           String fileData = readCode(new File(path));
> > -           int reqidx = fileData.indexOf(appendString.toString());
> > -
> > +    private void appendLanguageAndXML(String path, String projectName)
> > throws IOException
> > +    {
> > +        StringBuilder appendString = new StringBuilder();
> > +
> appendString.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> > +        appendString.append(ASEmitterTokens.PAREN_OPEN.getToken());
> > +        appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> > +
> > appendString.append(JSFlexJSEmitterTokens.LANGUAGE_QNAME.getToken());
> > +        appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> > +        appendString.append(ASEmitterTokens.PAREN_CLOSE.getToken());
> > +        appendString.append(ASEmitterTokens.SEMICOLON.getToken());
> > +        appendString.append("\n");
> > +
> > +        String fileData = readCode(new File(path));
> > +        int reqidx = fileData.indexOf(appendString.toString());
> >             if (reqidx == -1 && project instanceof FlexJSProject &&
> > ((FlexJSProject)project).needLanguage)
> > -           {
> > -               reqidx =
> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> > -               if (reqidx == -1)
> > -                       reqidx =
> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
> > -               reqidx = fileData.indexOf(";", reqidx);
> > -                   String after = fileData.substring(reqidx + 1);
> > -                   String before = fileData.substring(0, reqidx + 1);
> > -                   String s = before + "\n" + appendString.toString() +
> > after;
> > -                   writeFile(path, s, false);
> > -           }
> > -       }
> > -
> > +        {
> > +               boolean afterProvide = false;
> > +            reqidx =
> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> > +            if (reqidx == -1)
> > +            {
> > +               afterProvide = true;
> > +                reqidx =
> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
> > +            }
> > +            reqidx = fileData.indexOf(";", reqidx);
> > +            String after = fileData.substring(reqidx + 1);
> > +            String before = fileData.substring(0, reqidx + 1);
> > +            if (afterProvide)
> > +               before += "\n";
> > +            String s = before + "\n" + appendString.toString() + after;
> > +            writeFile(path, s, false);
> > +        }
> > +
> > +        StringBuilder appendStringXML = new StringBuilder();
> > +
> > appendStringXML.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> > +        appendStringXML.append(ASEmitterTokens.PAREN_OPEN.getToken());
> > +        appendStringXML.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> > +        appendStringXML.append(IASLanguageConstants.XML);
> > +        appendStringXML.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> > +        appendStringXML.append(ASEmitterTokens.PAREN_CLOSE.getToken());
> > +        appendStringXML.append(ASEmitterTokens.SEMICOLON.getToken());
> > +        appendStringXML.append("\n");
> > +
> > +        if (project instanceof FlexJSProject &&
> > ((FlexJSProject)project).needXML)
> > +        {
> > +               fileData = readCode(new File(path));
> > +               reqidx = fileData.indexOf(appendStringXML.toString());
> > +               if (reqidx == -1)
> > +               {
> > +                       boolean afterProvide = false;
> > +                   reqidx =
> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> > +                   if (reqidx == -1)
> > +                   {
> > +                       afterProvide = true;
> > +                       reqidx =
> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
> > +                   }
> > +                   reqidx =
> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> > +                   if (reqidx == -1)
> > +                       reqidx =
> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
> > +                   reqidx = fileData.indexOf(";", reqidx);
> > +                   String after = fileData.substring(reqidx + 1);
> > +                   String before = fileData.substring(0, reqidx + 1);
> > +                   if (afterProvide)
> > +                       before += "\n";
> > +                   String s = before + "\n" + appendStringXML.toString()
> > + after;
> > +                   writeFile(path, s, false);
> > +               }
> > +        }
> > +    }
> > +
> >         protected String readCode(File file)
> >         {
> >             String code = "";
> >
> >
> >
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
> > ----------------------------------------------------------------------
> > diff --git
> > a/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
> > b/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
> > index 42ab0f4..92bb29f 100644
> > ---
> > a/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
> > +++
> > b/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
> > @@ -29,6 +29,7 @@ goog.require('org.apache.flex.utils.Language');
> >
> >
> >
> > +
> >  /**
> >   * @constructor
> >   * @extends {classes.A}
> >
> >
> >
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
> > ----------------------------------------------------------------------
> > diff --git
> > a/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
> > b/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
> > index 1306674..db3ade9 100644
> > --- a/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
> > +++ b/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
> > @@ -26,6 +26,7 @@ goog.require('org.apache.flex.utils.Language');
> >
> >
> >
> > +
> >  /**
> >   * @constructor
> >   * @extends {Super}
> >
> >
> >
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire.as
> > ----------------------------------------------------------------------
> > diff --git
> > a/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire.as
> > b/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire.as
> > new file mode 100644
> > index 0000000..4a997c9
> > --- /dev/null
> > +++
> > b/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire.as
> > @@ -0,0 +1,30 @@
> >
> >
> +////////////////////////////////////////////////////////////////////////////////
> > +//
> > +//  Licensed to the Apache Software Foundation (ASF) under one or more
> > +//  contributor license agreements.  See the NOTICE file distributed
> with
> > +//  this work for additional information regarding copyright ownership.
> > +//  The ASF licenses this file to You under the Apache License, Version
> > 2.0
> > +//  (the "License"); you may not use this file except in compliance with
> > +//  the License.  You may obtain a copy of the License at
> > +//
> > +//      http://www.apache.org/licenses/LICENSE-2.0
> > +//
> > +//  Unless required by applicable law or agreed to in writing, software
> > +//  distributed under the License is distributed on an "AS IS" BASIS,
> > +//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> > implied.
> > +//  See the License for the specific language governing permissions and
> > +//  limitations under the License.
> > +//
> >
> >
> +////////////////////////////////////////////////////////////////////////////////
> > +package
> > +{
> > +
> > +       public class XMLRequire
> > +       {
> > +               public function XMLRequire()
> > +        {
> > +            var myXML:XML = <node />;
> > +        }
> > +       }
> > +
> > +}
> > \ No newline at end of file
> >
> >
> >
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire_result.js
> > ----------------------------------------------------------------------
> > diff --git
> >
> a/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire_result.js
> >
> b/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire_result.js
> > new file mode 100644
> > index 0000000..d6affbe
> > --- /dev/null
> > +++
> >
> b/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire_result.js
> > @@ -0,0 +1,74 @@
> > +/**
> > + * Licensed under the Apache License, Version 2.0 (the "License");
> > + * you may not use this file except in compliance with the License.
> > + * You may obtain a copy of the License at
> > + *
> > + *     http://www.apache.org/licenses/LICENSE-2.0
> > + *
> > + * Unless required by applicable law or agreed to in writing, software
> > + * distributed under the License is distributed on an "AS IS" BASIS,
> > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> > implied.
> > + * See the License for the specific language governing permissions and
> > + * limitations under the License.
> > + */
> > +/**
> > + * XMLRequire
> > + *
> > + * @fileoverview
> > + *
> > + * @suppress {checkTypes|accessControls}
> > + */
> > +
> > +goog.provide('XMLRequire');
> > +
> > +goog.require('XML');
> > +
> > +
> > +
> > +
> > +
> > +/**
> > + * @constructor
> > + */
> > +XMLRequire = function() {
> > +  var /** @type {XML} */ myXML = new XML( '<node />') ;
> > +};
> > +
> > +
> > +/**
> > + * Metadata
> > + *
> > + * @type {Object.<string, Array.<Object>>}
> > + */
> > +XMLRequire.prototype.FLEXJS_CLASS_INFO = { names: [{ name: 'XMLRequire',
> > qName: 'XMLRequire'}] };
> > +
> > +
> > +/**
> > + * Prevent renaming of class. Needed for reflection.
> > + */
> > +goog.exportSymbol('XMLRequire', XMLRequire);
> > +
> > +
> > +
> > +/**
> > + * Reflection
> > + *
> > + * @return {Object.<string, Function>}
> > + */
> > +XMLRequire.prototype.FLEXJS_REFLECTION_INFO = function () {
> > +  return {
> > +    variables: function () {
> > +      return {
> > +      };
> > +    },
> > +    accessors: function () {
> > +      return {
> > +      };
> > +    },
> > +    methods: function () {
> > +      return {
> > +        'XMLRequire': { type: '', declaredBy: 'XMLRequire'}
> > +      };
> > +    }
> > +  };
> > +};
> >
> >
> >
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
> > ----------------------------------------------------------------------
> > diff --git
> >
> a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
> >
> b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
> > index 48acf5b..d47c6dc 100644
> > ---
> >
> a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
> > +++
> >
> b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
> > @@ -208,7 +208,7 @@ public class PackageHeaderEmitter extends
> JSSubEmitter
> > implements
> >
> >                  if (NativeUtils.isNative(imp))
> >                  {
> > -                       if (!(imp.equals("QName") ||
> > imp.equals("Namespace")))
> > +                       if (!(imp.equals("QName") ||
> > imp.equals("Namespace") || imp.equals("XML") || imp.equals("XMLList")))
> >                                 continue;
> >                  }
> >
> >
> >
> >
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
> > ----------------------------------------------------------------------
> > diff --git
> >
> a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
> >
> b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
> > index 347e01c..4dcc1be 100644
> > ---
> >
> a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
> > +++
> >
> b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
> > @@ -42,6 +42,7 @@ import
> org.apache.commons.io.filefilter.RegexFileFilter;
> >  import org.apache.flex.compiler.clients.problems.ProblemQuery;
> >  import org.apache.flex.compiler.codegen.js.IJSPublisher;
> >  import org.apache.flex.compiler.config.Configuration;
> > +import org.apache.flex.compiler.constants.IASLanguageConstants;
> >  import org.apache.flex.compiler.css.ICSSPropertyValue;
> >  import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
> >  import org.apache.flex.compiler.internal.codegen.js.JSSharedData;
> > @@ -278,6 +279,7 @@ public class MXMLFlexJSPublisher extends
> > JSGoogPublisher implements IJSPublisher
> >
> >          appendExportSymbol(projectIntermediateJSFilePath, projectName);
> >          appendEncodedCSS(projectIntermediateJSFilePath, projectName);
> > +        appendLanguageAndXML(projectIntermediateJSFilePath,
> projectName);
> >
> >          // if (!subsetGoog)
> >          // {
> > @@ -525,6 +527,75 @@ public class MXMLFlexJSPublisher extends
> > JSGoogPublisher implements IJSPublisher
> >          }
> >      }
> >
> > +    private void appendLanguageAndXML(String path, String projectName)
> > throws IOException
> > +    {
> > +        StringBuilder appendString = new StringBuilder();
> > +
> appendString.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> > +        appendString.append(ASEmitterTokens.PAREN_OPEN.getToken());
> > +        appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> > +
> > appendString.append(JSFlexJSEmitterTokens.LANGUAGE_QNAME.getToken());
> > +        appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> > +        appendString.append(ASEmitterTokens.PAREN_CLOSE.getToken());
> > +        appendString.append(ASEmitterTokens.SEMICOLON.getToken());
> > +        appendString.append("\n");
> > +
> > +        String fileData = readCode(new File(path));
> > +        int reqidx = fileData.indexOf(appendString.toString());
> > +        if (reqidx == -1 && project.needLanguage)
> > +        {
> > +               boolean afterProvide = false;
> > +            reqidx =
> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> > +            if (reqidx == -1)
> > +            {
> > +               afterProvide = true;
> > +                reqidx =
> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
> > +            }
> > +            reqidx = fileData.indexOf(";", reqidx);
> > +            String after = fileData.substring(reqidx + 1);
> > +            String before = fileData.substring(0, reqidx + 1);
> > +            if (afterProvide)
> > +               before += "\n";
> > +            String s = before + "\n" + appendString.toString() + after;
> > +            writeFile(path, s, false);
> > +        }
> > +
> > +        StringBuilder appendStringXML = new StringBuilder();
> > +
> > appendStringXML.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> > +        appendStringXML.append(ASEmitterTokens.PAREN_OPEN.getToken());
> > +        appendStringXML.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> > +        appendStringXML.append(IASLanguageConstants.XML);
> > +        appendStringXML.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> > +        appendStringXML.append(ASEmitterTokens.PAREN_CLOSE.getToken());
> > +        appendStringXML.append(ASEmitterTokens.SEMICOLON.getToken());
> > +        appendStringXML.append("\n");
> > +
> > +        if (project.needXML)
> > +        {
> > +               fileData = readCode(new File(path));
> > +               reqidx = fileData.indexOf(appendStringXML.toString());
> > +               if (reqidx == -1)
> > +               {
> > +                       boolean afterProvide = false;
> > +                   reqidx =
> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> > +                   if (reqidx == -1)
> > +                   {
> > +                       afterProvide = true;
> > +                       reqidx =
> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
> > +                   }
> > +                   reqidx =
> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> > +                   if (reqidx == -1)
> > +                       reqidx =
> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
> > +                   reqidx = fileData.indexOf(";", reqidx);
> > +                   String after = fileData.substring(reqidx + 1);
> > +                   String before = fileData.substring(0, reqidx + 1);
> > +                   if (afterProvide)
> > +                       before += "\n";
> > +                   String s = before + "\n" + appendStringXML.toString()
> > + after;
> > +                   writeFile(path, s, false);
> > +               }
> > +        }
> > +    }
> > +
> >      protected String readCode(File file)
> >      {
> >          String code = "";
> >
> >
> >
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
> > ----------------------------------------------------------------------
> > diff --git
> >
> a/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
> >
> b/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
> > index a1098a7..67869ab 100644
> > ---
> >
> a/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
> > +++
> >
> b/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
> > @@ -101,7 +101,11 @@ public class FlexJSProject extends FlexProject
> >                      }
> >                  }
> >                  else if (!isExternalLinkage(to) ||
> > qname.equals("Namespace"))
> > +                {
> > +                       if (qname.equals("XML"))
> > +                               needXML = true;
> >                      reqs.put(qname, dt);
> > +                }
> >              }
> >          }
> >          else
> > @@ -134,6 +138,7 @@ public class FlexJSProject extends FlexProject
> >
> >      public boolean needLanguage;
> >      public boolean needCSS;
> > +    public boolean needXML;
> >
> >      private LinkageChecker linkageChecker;
> >      private ITargetSettings ts;
> >
> >
> >
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.tests/.classpath
> > ----------------------------------------------------------------------
> > diff --git a/compiler.tests/.classpath b/compiler.tests/.classpath
> > index c8aaecc..7508ebe 100644
> > --- a/compiler.tests/.classpath
> > +++ b/compiler.tests/.classpath
> > @@ -9,5 +9,6 @@
> >         <classpathentry kind="lib" path="/compiler/lib/commons-io.jar"/>
> >         <classpathentry kind="src" path="/compiler"/>
> >         <classpathentry kind="lib" path="/compiler/lib/guava.jar"/>
> > +       <classpathentry kind="lib"
> > path="/compiler.tests/lib/commons-compress-1.10.jar"/>
> >         <classpathentry kind="output" path="classes"/>
> >  </classpath>
> >
> >
>

Re: [1/2] git commit: [flex-falcon] [refs/heads/develop] - changes to get XML in the requires

Posted by Alex Harui <ah...@adobe.com>.
Ok. I won't have time to rework it until this evening.  If you have time to do it sooner that is fine too.


Sent from my LG G3, an AT&T 4G LTE smartphone


------ Original message------

From: Josh Tynjala

Date: Thu, Apr 7, 2016 11:36 AM

To: dev@flex.apache.org;

Subject:Re: [1/2] git commit: [flex-falcon] [refs/heads/develop] - changes to get XML in the requires


Hey Alex,

The require for Language does not need to be appended in
MXMLFlexJSPublisher anymore. I moved it into the postProcess() step of
JSFlexJSEmitter. The reason I did this is because inserting an extra line
near the top of the file, after the file had already been written, broke
its source map. Everything was off by one line. In the emitter, it's still
possible to adjust the source maps to account for that extra line before
the file gets written.

Ideally, the require for XML would be part of the emitter's postProcess()
too, for the same reason.

- Josh

On Thu, Apr 7, 2016 at 10:55 AM, <ah...@apache.org> wrote:

> Repository: flex-falcon
> Updated Branches:
>   refs/heads/develop 88a9bc28c -> bdc933e4c
>
>
> changes to get XML in the requires
>
>
> Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
> Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/6c6584da
> Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/6c6584da
> Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/6c6584da
>
> Branch: refs/heads/develop
> Commit: 6c6584da5be8ab5c4df0012110479b4d7d336a8b
> Parents: 88a9bc2
> Author: Alex Harui <ah...@apache.org>
> Authored: Thu Apr 7 10:39:28 2016 -0700
> Committer: Alex Harui <ah...@apache.org>
> Committed: Thu Apr 7 10:42:59 2016 -0700
>
> ----------------------------------------------------------------------
>  .../js/flexjs/TestFlexJSGlobalClasses.java      |  1 +
>  .../codegen/js/flexjs/TestFlexJSProject.java    | 15 +++
>  .../flex/compiler/internal/test/TestBase.java   | 98 ++++++++++++++------
>  .../flexjs/projects/interfaces/Test_result.js   |  1 +
>  .../flexjs/projects/super/Base_result.js        |  1 +
>  .../flexjs/projects/xml_requires/XMLRequire.as  | 30 ++++++
>  .../projects/xml_requires/XMLRequire_result.js  | 74 +++++++++++++++
>  .../codegen/js/jx/PackageHeaderEmitter.java     |  2 +-
>  .../mxml/flexjs/MXMLFlexJSPublisher.java        | 71 ++++++++++++++
>  .../internal/projects/FlexJSProject.java        |  5 +
>  compiler.tests/.classpath                       |  1 +
>  11 files changed, 270 insertions(+), 29 deletions(-)
> ----------------------------------------------------------------------
>
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
> ----------------------------------------------------------------------
> diff --git
> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
> index df663af..32f28f5 100644
> ---
> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
> +++
> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
> @@ -27,6 +27,7 @@ import
> org.apache.flex.compiler.internal.projects.FlexJSProject;
>  import org.apache.flex.compiler.internal.tree.as.VariableNode;
>  import org.apache.flex.compiler.tree.as.IASNode;
>  import org.apache.flex.compiler.tree.as.IBinaryOperatorNode;
> +import org.apache.flex.compiler.tree.as.IFileNode;
>  import org.apache.flex.compiler.tree.as.IForLoopNode;
>  import org.apache.flex.compiler.tree.as.IFunctionCallNode;
>  import org.apache.flex.compiler.tree.as.IFunctionNode;
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
> ----------------------------------------------------------------------
> diff --git
> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
> index fec0d2f..c057f92 100644
> ---
> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
> +++
> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
> @@ -131,6 +131,21 @@ public class TestFlexJSProject extends TestGoogProject
>      }
>
>      @Test
> +    public void test_XMLRequires()
> +    {
> +        String testDirPath = projectDirPath + "/xml_requires";
> +
> +        String fileName = "XMLRequire";
> +
> +        sourcePath = new
> File(TestAdapterFactory.getTestAdapter().getUnitTestBaseDir(),
> +                projectDirPath + "/xml_requires").getPath();
> +
> +        List<String> compiledFileNames = compileProject(fileName,
> testDirPath);
> +
> +        assertProjectOut(compiledFileNames, testDirPath);
> +    }
> +
> +    @Test
>      public void test_Overrides()
>      {
>          String testDirPath = projectDirPath + "/overrides";
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
> ----------------------------------------------------------------------
> diff --git
> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
> index 186f690..d8d6e36 100644
> ---
> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
> +++
> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
> @@ -40,6 +40,7 @@ import java.util.List;
>  import org.apache.flex.compiler.codegen.as.IASEmitter;
>  import org.apache.flex.compiler.codegen.mxml.IMXMLEmitter;
>  import org.apache.flex.compiler.config.Configurator;
> +import org.apache.flex.compiler.constants.IASLanguageConstants;
>  import org.apache.flex.compiler.driver.IBackend;
>  import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
>  import org.apache.flex.compiler.internal.codegen.as.ASFilterWriter;
> @@ -350,7 +351,7 @@ public class TestBase implements ITestBase
>                         qname = mainCU.getQualifiedNames().get(0);
>                 final File outputClassFile = getOutputClassFile(qname
>                         + "_output", outputRootDir);
> -               appendLanguage(outputClassFile.getAbsolutePath(), qname);
> +               appendLanguageAndXML(outputClassFile.getAbsolutePath(),
> qname);
>                 } catch (InterruptedException e) {
>                         // TODO Auto-generated catch block
>                         e.printStackTrace();
> @@ -374,34 +375,75 @@ public class TestBase implements ITestBase
>                 fw.close();
>         }
>
> -    private void appendLanguage(String path, String projectName)
> -       throws IOException
> -       {
> -               StringBuilder appendString = new StringBuilder();
> -
>  appendString.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> -               appendString.append(ASEmitterTokens.PAREN_OPEN.getToken());
> -
>  appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> -
>  appendString.append(JSFlexJSEmitterTokens.LANGUAGE_QNAME.getToken());
> -
>  appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> -
>  appendString.append(ASEmitterTokens.PAREN_CLOSE.getToken());
> -               appendString.append(ASEmitterTokens.SEMICOLON.getToken());
> -
> -           String fileData = readCode(new File(path));
> -           int reqidx = fileData.indexOf(appendString.toString());
> -
> +    private void appendLanguageAndXML(String path, String projectName)
> throws IOException
> +    {
> +        StringBuilder appendString = new StringBuilder();
> +        appendString.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> +        appendString.append(ASEmitterTokens.PAREN_OPEN.getToken());
> +        appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> +
> appendString.append(JSFlexJSEmitterTokens.LANGUAGE_QNAME.getToken());
> +        appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> +        appendString.append(ASEmitterTokens.PAREN_CLOSE.getToken());
> +        appendString.append(ASEmitterTokens.SEMICOLON.getToken());
> +        appendString.append("\n");
> +
> +        String fileData = readCode(new File(path));
> +        int reqidx = fileData.indexOf(appendString.toString());
>             if (reqidx == -1 && project instanceof FlexJSProject &&
> ((FlexJSProject)project).needLanguage)
> -           {
> -               reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> -               if (reqidx == -1)
> -                       reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
> -               reqidx = fileData.indexOf(";", reqidx);
> -                   String after = fileData.substring(reqidx + 1);
> -                   String before = fileData.substring(0, reqidx + 1);
> -                   String s = before + "\n" + appendString.toString() +
> after;
> -                   writeFile(path, s, false);
> -           }
> -       }
> -
> +        {
> +               boolean afterProvide = false;
> +            reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> +            if (reqidx == -1)
> +            {
> +               afterProvide = true;
> +                reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
> +            }
> +            reqidx = fileData.indexOf(";", reqidx);
> +            String after = fileData.substring(reqidx + 1);
> +            String before = fileData.substring(0, reqidx + 1);
> +            if (afterProvide)
> +               before += "\n";
> +            String s = before + "\n" + appendString.toString() + after;
> +            writeFile(path, s, false);
> +        }
> +
> +        StringBuilder appendStringXML = new StringBuilder();
> +
> appendStringXML.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> +        appendStringXML.append(ASEmitterTokens.PAREN_OPEN.getToken());
> +        appendStringXML.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> +        appendStringXML.append(IASLanguageConstants.XML);
> +        appendStringXML.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> +        appendStringXML.append(ASEmitterTokens.PAREN_CLOSE.getToken());
> +        appendStringXML.append(ASEmitterTokens.SEMICOLON.getToken());
> +        appendStringXML.append("\n");
> +
> +        if (project instanceof FlexJSProject &&
> ((FlexJSProject)project).needXML)
> +        {
> +               fileData = readCode(new File(path));
> +               reqidx = fileData.indexOf(appendStringXML.toString());
> +               if (reqidx == -1)
> +               {
> +                       boolean afterProvide = false;
> +                   reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> +                   if (reqidx == -1)
> +                   {
> +                       afterProvide = true;
> +                       reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
> +                   }
> +                   reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> +                   if (reqidx == -1)
> +                       reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
> +                   reqidx = fileData.indexOf(";", reqidx);
> +                   String after = fileData.substring(reqidx + 1);
> +                   String before = fileData.substring(0, reqidx + 1);
> +                   if (afterProvide)
> +                       before += "\n";
> +                   String s = before + "\n" + appendStringXML.toString()
> + after;
> +                   writeFile(path, s, false);
> +               }
> +        }
> +    }
> +
>         protected String readCode(File file)
>         {
>             String code = "";
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
> ----------------------------------------------------------------------
> diff --git
> a/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
> b/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
> index 42ab0f4..92bb29f 100644
> ---
> a/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
> +++
> b/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
> @@ -29,6 +29,7 @@ goog.require('org.apache.flex.utils.Language');
>
>
>
> +
>  /**
>   * @constructor
>   * @extends {classes.A}
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
> ----------------------------------------------------------------------
> diff --git
> a/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
> b/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
> index 1306674..db3ade9 100644
> --- a/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
> +++ b/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
> @@ -26,6 +26,7 @@ goog.require('org.apache.flex.utils.Language');
>
>
>
> +
>  /**
>   * @constructor
>   * @extends {Super}
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire.as
> ----------------------------------------------------------------------
> diff --git
> a/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire.as
> b/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire.as
> new file mode 100644
> index 0000000..4a997c9
> --- /dev/null
> +++
> b/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire.as
> @@ -0,0 +1,30 @@
>
> +////////////////////////////////////////////////////////////////////////////////
> +//
> +//  Licensed to the Apache Software Foundation (ASF) under one or more
> +//  contributor license agreements.  See the NOTICE file distributed with
> +//  this work for additional information regarding copyright ownership.
> +//  The ASF licenses this file to You under the Apache License, Version
> 2.0
> +//  (the "License"); you may not use this file except in compliance with
> +//  the License.  You may obtain a copy of the License at
> +//
> +//      http://www.apache.org/licenses/LICENSE-2.0
> +//
> +//  Unless required by applicable law or agreed to in writing, software
> +//  distributed under the License is distributed on an "AS IS" BASIS,
> +//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> +//  See the License for the specific language governing permissions and
> +//  limitations under the License.
> +//
>
> +////////////////////////////////////////////////////////////////////////////////
> +package
> +{
> +
> +       public class XMLRequire
> +       {
> +               public function XMLRequire()
> +        {
> +            var myXML:XML = <node />;
> +        }
> +       }
> +
> +}
> \ No newline at end of file
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire_result.js
> ----------------------------------------------------------------------
> diff --git
> a/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire_result.js
> b/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire_result.js
> new file mode 100644
> index 0000000..d6affbe
> --- /dev/null
> +++
> b/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire_result.js
> @@ -0,0 +1,74 @@
> +/**
> + * Licensed under the Apache License, Version 2.0 (the "License");
> + * you may not use this file except in compliance with the License.
> + * You may obtain a copy of the License at
> + *
> + *     http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + */
> +/**
> + * XMLRequire
> + *
> + * @fileoverview
> + *
> + * @suppress {checkTypes|accessControls}
> + */
> +
> +goog.provide('XMLRequire');
> +
> +goog.require('XML');
> +
> +
> +
> +
> +
> +/**
> + * @constructor
> + */
> +XMLRequire = function() {
> +  var /** @type {XML} */ myXML = new XML( '<node />') ;
> +};
> +
> +
> +/**
> + * Metadata
> + *
> + * @type {Object.<string, Array.<Object>>}
> + */
> +XMLRequire.prototype.FLEXJS_CLASS_INFO = { names: [{ name: 'XMLRequire',
> qName: 'XMLRequire'}] };
> +
> +
> +/**
> + * Prevent renaming of class. Needed for reflection.
> + */
> +goog.exportSymbol('XMLRequire', XMLRequire);
> +
> +
> +
> +/**
> + * Reflection
> + *
> + * @return {Object.<string, Function>}
> + */
> +XMLRequire.prototype.FLEXJS_REFLECTION_INFO = function () {
> +  return {
> +    variables: function () {
> +      return {
> +      };
> +    },
> +    accessors: function () {
> +      return {
> +      };
> +    },
> +    methods: function () {
> +      return {
> +        'XMLRequire': { type: '', declaredBy: 'XMLRequire'}
> +      };
> +    }
> +  };
> +};
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
> ----------------------------------------------------------------------
> diff --git
> a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
> b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
> index 48acf5b..d47c6dc 100644
> ---
> a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
> +++
> b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
> @@ -208,7 +208,7 @@ public class PackageHeaderEmitter extends JSSubEmitter
> implements
>
>                  if (NativeUtils.isNative(imp))
>                  {
> -                       if (!(imp.equals("QName") ||
> imp.equals("Namespace")))
> +                       if (!(imp.equals("QName") ||
> imp.equals("Namespace") || imp.equals("XML") || imp.equals("XMLList")))
>                                 continue;
>                  }
>
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
> ----------------------------------------------------------------------
> diff --git
> a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
> b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
> index 347e01c..4dcc1be 100644
> ---
> a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
> +++
> b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
> @@ -42,6 +42,7 @@ import org.apache.commons.io.filefilter.RegexFileFilter;
>  import org.apache.flex.compiler.clients.problems.ProblemQuery;
>  import org.apache.flex.compiler.codegen.js.IJSPublisher;
>  import org.apache.flex.compiler.config.Configuration;
> +import org.apache.flex.compiler.constants.IASLanguageConstants;
>  import org.apache.flex.compiler.css.ICSSPropertyValue;
>  import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
>  import org.apache.flex.compiler.internal.codegen.js.JSSharedData;
> @@ -278,6 +279,7 @@ public class MXMLFlexJSPublisher extends
> JSGoogPublisher implements IJSPublisher
>
>          appendExportSymbol(projectIntermediateJSFilePath, projectName);
>          appendEncodedCSS(projectIntermediateJSFilePath, projectName);
> +        appendLanguageAndXML(projectIntermediateJSFilePath, projectName);
>
>          // if (!subsetGoog)
>          // {
> @@ -525,6 +527,75 @@ public class MXMLFlexJSPublisher extends
> JSGoogPublisher implements IJSPublisher
>          }
>      }
>
> +    private void appendLanguageAndXML(String path, String projectName)
> throws IOException
> +    {
> +        StringBuilder appendString = new StringBuilder();
> +        appendString.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> +        appendString.append(ASEmitterTokens.PAREN_OPEN.getToken());
> +        appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> +
> appendString.append(JSFlexJSEmitterTokens.LANGUAGE_QNAME.getToken());
> +        appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> +        appendString.append(ASEmitterTokens.PAREN_CLOSE.getToken());
> +        appendString.append(ASEmitterTokens.SEMICOLON.getToken());
> +        appendString.append("\n");
> +
> +        String fileData = readCode(new File(path));
> +        int reqidx = fileData.indexOf(appendString.toString());
> +        if (reqidx == -1 && project.needLanguage)
> +        {
> +               boolean afterProvide = false;
> +            reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> +            if (reqidx == -1)
> +            {
> +               afterProvide = true;
> +                reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
> +            }
> +            reqidx = fileData.indexOf(";", reqidx);
> +            String after = fileData.substring(reqidx + 1);
> +            String before = fileData.substring(0, reqidx + 1);
> +            if (afterProvide)
> +               before += "\n";
> +            String s = before + "\n" + appendString.toString() + after;
> +            writeFile(path, s, false);
> +        }
> +
> +        StringBuilder appendStringXML = new StringBuilder();
> +
> appendStringXML.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> +        appendStringXML.append(ASEmitterTokens.PAREN_OPEN.getToken());
> +        appendStringXML.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> +        appendStringXML.append(IASLanguageConstants.XML);
> +        appendStringXML.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> +        appendStringXML.append(ASEmitterTokens.PAREN_CLOSE.getToken());
> +        appendStringXML.append(ASEmitterTokens.SEMICOLON.getToken());
> +        appendStringXML.append("\n");
> +
> +        if (project.needXML)
> +        {
> +               fileData = readCode(new File(path));
> +               reqidx = fileData.indexOf(appendStringXML.toString());
> +               if (reqidx == -1)
> +               {
> +                       boolean afterProvide = false;
> +                   reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> +                   if (reqidx == -1)
> +                   {
> +                       afterProvide = true;
> +                       reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
> +                   }
> +                   reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> +                   if (reqidx == -1)
> +                       reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
> +                   reqidx = fileData.indexOf(";", reqidx);
> +                   String after = fileData.substring(reqidx + 1);
> +                   String before = fileData.substring(0, reqidx + 1);
> +                   if (afterProvide)
> +                       before += "\n";
> +                   String s = before + "\n" + appendStringXML.toString()
> + after;
> +                   writeFile(path, s, false);
> +               }
> +        }
> +    }
> +
>      protected String readCode(File file)
>      {
>          String code = "";
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
> ----------------------------------------------------------------------
> diff --git
> a/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
> b/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
> index a1098a7..67869ab 100644
> ---
> a/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
> +++
> b/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
> @@ -101,7 +101,11 @@ public class FlexJSProject extends FlexProject
>                      }
>                  }
>                  else if (!isExternalLinkage(to) ||
> qname.equals("Namespace"))
> +                {
> +                       if (qname.equals("XML"))
> +                               needXML = true;
>                      reqs.put(qname, dt);
> +                }
>              }
>          }
>          else
> @@ -134,6 +138,7 @@ public class FlexJSProject extends FlexProject
>
>      public boolean needLanguage;
>      public boolean needCSS;
> +    public boolean needXML;
>
>      private LinkageChecker linkageChecker;
>      private ITargetSettings ts;
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.tests/.classpath
> ----------------------------------------------------------------------
> diff --git a/compiler.tests/.classpath b/compiler.tests/.classpath
> index c8aaecc..7508ebe 100644
> --- a/compiler.tests/.classpath
> +++ b/compiler.tests/.classpath
> @@ -9,5 +9,6 @@
>         <classpathentry kind="lib" path="/compiler/lib/commons-io.jar"/>
>         <classpathentry kind="src" path="/compiler"/>
>         <classpathentry kind="lib" path="/compiler/lib/guava.jar"/>
> +       <classpathentry kind="lib"
> path="/compiler.tests/lib/commons-compress-1.10.jar"/>
>         <classpathentry kind="output" path="classes"/>
>  </classpath>
>
>

Re: [1/2] git commit: [flex-falcon] [refs/heads/develop] - changes to get XML in the requires

Posted by Josh Tynjala <jo...@gmail.com>.
Hey Alex,

The require for Language does not need to be appended in
MXMLFlexJSPublisher anymore. I moved it into the postProcess() step of
JSFlexJSEmitter. The reason I did this is because inserting an extra line
near the top of the file, after the file had already been written, broke
its source map. Everything was off by one line. In the emitter, it's still
possible to adjust the source maps to account for that extra line before
the file gets written.

Ideally, the require for XML would be part of the emitter's postProcess()
too, for the same reason.

- Josh

On Thu, Apr 7, 2016 at 10:55 AM, <ah...@apache.org> wrote:

> Repository: flex-falcon
> Updated Branches:
>   refs/heads/develop 88a9bc28c -> bdc933e4c
>
>
> changes to get XML in the requires
>
>
> Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
> Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/6c6584da
> Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/6c6584da
> Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/6c6584da
>
> Branch: refs/heads/develop
> Commit: 6c6584da5be8ab5c4df0012110479b4d7d336a8b
> Parents: 88a9bc2
> Author: Alex Harui <ah...@apache.org>
> Authored: Thu Apr 7 10:39:28 2016 -0700
> Committer: Alex Harui <ah...@apache.org>
> Committed: Thu Apr 7 10:42:59 2016 -0700
>
> ----------------------------------------------------------------------
>  .../js/flexjs/TestFlexJSGlobalClasses.java      |  1 +
>  .../codegen/js/flexjs/TestFlexJSProject.java    | 15 +++
>  .../flex/compiler/internal/test/TestBase.java   | 98 ++++++++++++++------
>  .../flexjs/projects/interfaces/Test_result.js   |  1 +
>  .../flexjs/projects/super/Base_result.js        |  1 +
>  .../flexjs/projects/xml_requires/XMLRequire.as  | 30 ++++++
>  .../projects/xml_requires/XMLRequire_result.js  | 74 +++++++++++++++
>  .../codegen/js/jx/PackageHeaderEmitter.java     |  2 +-
>  .../mxml/flexjs/MXMLFlexJSPublisher.java        | 71 ++++++++++++++
>  .../internal/projects/FlexJSProject.java        |  5 +
>  compiler.tests/.classpath                       |  1 +
>  11 files changed, 270 insertions(+), 29 deletions(-)
> ----------------------------------------------------------------------
>
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
> ----------------------------------------------------------------------
> diff --git
> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
> index df663af..32f28f5 100644
> ---
> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
> +++
> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
> @@ -27,6 +27,7 @@ import
> org.apache.flex.compiler.internal.projects.FlexJSProject;
>  import org.apache.flex.compiler.internal.tree.as.VariableNode;
>  import org.apache.flex.compiler.tree.as.IASNode;
>  import org.apache.flex.compiler.tree.as.IBinaryOperatorNode;
> +import org.apache.flex.compiler.tree.as.IFileNode;
>  import org.apache.flex.compiler.tree.as.IForLoopNode;
>  import org.apache.flex.compiler.tree.as.IFunctionCallNode;
>  import org.apache.flex.compiler.tree.as.IFunctionNode;
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
> ----------------------------------------------------------------------
> diff --git
> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
> index fec0d2f..c057f92 100644
> ---
> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
> +++
> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
> @@ -131,6 +131,21 @@ public class TestFlexJSProject extends TestGoogProject
>      }
>
>      @Test
> +    public void test_XMLRequires()
> +    {
> +        String testDirPath = projectDirPath + "/xml_requires";
> +
> +        String fileName = "XMLRequire";
> +
> +        sourcePath = new
> File(TestAdapterFactory.getTestAdapter().getUnitTestBaseDir(),
> +                projectDirPath + "/xml_requires").getPath();
> +
> +        List<String> compiledFileNames = compileProject(fileName,
> testDirPath);
> +
> +        assertProjectOut(compiledFileNames, testDirPath);
> +    }
> +
> +    @Test
>      public void test_Overrides()
>      {
>          String testDirPath = projectDirPath + "/overrides";
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
> ----------------------------------------------------------------------
> diff --git
> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
> index 186f690..d8d6e36 100644
> ---
> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
> +++
> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
> @@ -40,6 +40,7 @@ import java.util.List;
>  import org.apache.flex.compiler.codegen.as.IASEmitter;
>  import org.apache.flex.compiler.codegen.mxml.IMXMLEmitter;
>  import org.apache.flex.compiler.config.Configurator;
> +import org.apache.flex.compiler.constants.IASLanguageConstants;
>  import org.apache.flex.compiler.driver.IBackend;
>  import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
>  import org.apache.flex.compiler.internal.codegen.as.ASFilterWriter;
> @@ -350,7 +351,7 @@ public class TestBase implements ITestBase
>                         qname = mainCU.getQualifiedNames().get(0);
>                 final File outputClassFile = getOutputClassFile(qname
>                         + "_output", outputRootDir);
> -               appendLanguage(outputClassFile.getAbsolutePath(), qname);
> +               appendLanguageAndXML(outputClassFile.getAbsolutePath(),
> qname);
>                 } catch (InterruptedException e) {
>                         // TODO Auto-generated catch block
>                         e.printStackTrace();
> @@ -374,34 +375,75 @@ public class TestBase implements ITestBase
>                 fw.close();
>         }
>
> -    private void appendLanguage(String path, String projectName)
> -       throws IOException
> -       {
> -               StringBuilder appendString = new StringBuilder();
> -
>  appendString.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> -               appendString.append(ASEmitterTokens.PAREN_OPEN.getToken());
> -
>  appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> -
>  appendString.append(JSFlexJSEmitterTokens.LANGUAGE_QNAME.getToken());
> -
>  appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> -
>  appendString.append(ASEmitterTokens.PAREN_CLOSE.getToken());
> -               appendString.append(ASEmitterTokens.SEMICOLON.getToken());
> -
> -           String fileData = readCode(new File(path));
> -           int reqidx = fileData.indexOf(appendString.toString());
> -
> +    private void appendLanguageAndXML(String path, String projectName)
> throws IOException
> +    {
> +        StringBuilder appendString = new StringBuilder();
> +        appendString.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> +        appendString.append(ASEmitterTokens.PAREN_OPEN.getToken());
> +        appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> +
> appendString.append(JSFlexJSEmitterTokens.LANGUAGE_QNAME.getToken());
> +        appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> +        appendString.append(ASEmitterTokens.PAREN_CLOSE.getToken());
> +        appendString.append(ASEmitterTokens.SEMICOLON.getToken());
> +        appendString.append("\n");
> +
> +        String fileData = readCode(new File(path));
> +        int reqidx = fileData.indexOf(appendString.toString());
>             if (reqidx == -1 && project instanceof FlexJSProject &&
> ((FlexJSProject)project).needLanguage)
> -           {
> -               reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> -               if (reqidx == -1)
> -                       reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
> -               reqidx = fileData.indexOf(";", reqidx);
> -                   String after = fileData.substring(reqidx + 1);
> -                   String before = fileData.substring(0, reqidx + 1);
> -                   String s = before + "\n" + appendString.toString() +
> after;
> -                   writeFile(path, s, false);
> -           }
> -       }
> -
> +        {
> +               boolean afterProvide = false;
> +            reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> +            if (reqidx == -1)
> +            {
> +               afterProvide = true;
> +                reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
> +            }
> +            reqidx = fileData.indexOf(";", reqidx);
> +            String after = fileData.substring(reqidx + 1);
> +            String before = fileData.substring(0, reqidx + 1);
> +            if (afterProvide)
> +               before += "\n";
> +            String s = before + "\n" + appendString.toString() + after;
> +            writeFile(path, s, false);
> +        }
> +
> +        StringBuilder appendStringXML = new StringBuilder();
> +
> appendStringXML.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> +        appendStringXML.append(ASEmitterTokens.PAREN_OPEN.getToken());
> +        appendStringXML.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> +        appendStringXML.append(IASLanguageConstants.XML);
> +        appendStringXML.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> +        appendStringXML.append(ASEmitterTokens.PAREN_CLOSE.getToken());
> +        appendStringXML.append(ASEmitterTokens.SEMICOLON.getToken());
> +        appendStringXML.append("\n");
> +
> +        if (project instanceof FlexJSProject &&
> ((FlexJSProject)project).needXML)
> +        {
> +               fileData = readCode(new File(path));
> +               reqidx = fileData.indexOf(appendStringXML.toString());
> +               if (reqidx == -1)
> +               {
> +                       boolean afterProvide = false;
> +                   reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> +                   if (reqidx == -1)
> +                   {
> +                       afterProvide = true;
> +                       reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
> +                   }
> +                   reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> +                   if (reqidx == -1)
> +                       reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
> +                   reqidx = fileData.indexOf(";", reqidx);
> +                   String after = fileData.substring(reqidx + 1);
> +                   String before = fileData.substring(0, reqidx + 1);
> +                   if (afterProvide)
> +                       before += "\n";
> +                   String s = before + "\n" + appendStringXML.toString()
> + after;
> +                   writeFile(path, s, false);
> +               }
> +        }
> +    }
> +
>         protected String readCode(File file)
>         {
>             String code = "";
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
> ----------------------------------------------------------------------
> diff --git
> a/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
> b/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
> index 42ab0f4..92bb29f 100644
> ---
> a/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
> +++
> b/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
> @@ -29,6 +29,7 @@ goog.require('org.apache.flex.utils.Language');
>
>
>
> +
>  /**
>   * @constructor
>   * @extends {classes.A}
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
> ----------------------------------------------------------------------
> diff --git
> a/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
> b/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
> index 1306674..db3ade9 100644
> --- a/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
> +++ b/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
> @@ -26,6 +26,7 @@ goog.require('org.apache.flex.utils.Language');
>
>
>
> +
>  /**
>   * @constructor
>   * @extends {Super}
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire.as
> ----------------------------------------------------------------------
> diff --git
> a/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire.as
> b/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire.as
> new file mode 100644
> index 0000000..4a997c9
> --- /dev/null
> +++
> b/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire.as
> @@ -0,0 +1,30 @@
>
> +////////////////////////////////////////////////////////////////////////////////
> +//
> +//  Licensed to the Apache Software Foundation (ASF) under one or more
> +//  contributor license agreements.  See the NOTICE file distributed with
> +//  this work for additional information regarding copyright ownership.
> +//  The ASF licenses this file to You under the Apache License, Version
> 2.0
> +//  (the "License"); you may not use this file except in compliance with
> +//  the License.  You may obtain a copy of the License at
> +//
> +//      http://www.apache.org/licenses/LICENSE-2.0
> +//
> +//  Unless required by applicable law or agreed to in writing, software
> +//  distributed under the License is distributed on an "AS IS" BASIS,
> +//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> +//  See the License for the specific language governing permissions and
> +//  limitations under the License.
> +//
>
> +////////////////////////////////////////////////////////////////////////////////
> +package
> +{
> +
> +       public class XMLRequire
> +       {
> +               public function XMLRequire()
> +        {
> +            var myXML:XML = <node />;
> +        }
> +       }
> +
> +}
> \ No newline at end of file
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire_result.js
> ----------------------------------------------------------------------
> diff --git
> a/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire_result.js
> b/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire_result.js
> new file mode 100644
> index 0000000..d6affbe
> --- /dev/null
> +++
> b/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire_result.js
> @@ -0,0 +1,74 @@
> +/**
> + * Licensed under the Apache License, Version 2.0 (the "License");
> + * you may not use this file except in compliance with the License.
> + * You may obtain a copy of the License at
> + *
> + *     http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + */
> +/**
> + * XMLRequire
> + *
> + * @fileoverview
> + *
> + * @suppress {checkTypes|accessControls}
> + */
> +
> +goog.provide('XMLRequire');
> +
> +goog.require('XML');
> +
> +
> +
> +
> +
> +/**
> + * @constructor
> + */
> +XMLRequire = function() {
> +  var /** @type {XML} */ myXML = new XML( '<node />') ;
> +};
> +
> +
> +/**
> + * Metadata
> + *
> + * @type {Object.<string, Array.<Object>>}
> + */
> +XMLRequire.prototype.FLEXJS_CLASS_INFO = { names: [{ name: 'XMLRequire',
> qName: 'XMLRequire'}] };
> +
> +
> +/**
> + * Prevent renaming of class. Needed for reflection.
> + */
> +goog.exportSymbol('XMLRequire', XMLRequire);
> +
> +
> +
> +/**
> + * Reflection
> + *
> + * @return {Object.<string, Function>}
> + */
> +XMLRequire.prototype.FLEXJS_REFLECTION_INFO = function () {
> +  return {
> +    variables: function () {
> +      return {
> +      };
> +    },
> +    accessors: function () {
> +      return {
> +      };
> +    },
> +    methods: function () {
> +      return {
> +        'XMLRequire': { type: '', declaredBy: 'XMLRequire'}
> +      };
> +    }
> +  };
> +};
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
> ----------------------------------------------------------------------
> diff --git
> a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
> b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
> index 48acf5b..d47c6dc 100644
> ---
> a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
> +++
> b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
> @@ -208,7 +208,7 @@ public class PackageHeaderEmitter extends JSSubEmitter
> implements
>
>                  if (NativeUtils.isNative(imp))
>                  {
> -                       if (!(imp.equals("QName") ||
> imp.equals("Namespace")))
> +                       if (!(imp.equals("QName") ||
> imp.equals("Namespace") || imp.equals("XML") || imp.equals("XMLList")))
>                                 continue;
>                  }
>
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
> ----------------------------------------------------------------------
> diff --git
> a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
> b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
> index 347e01c..4dcc1be 100644
> ---
> a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
> +++
> b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
> @@ -42,6 +42,7 @@ import org.apache.commons.io.filefilter.RegexFileFilter;
>  import org.apache.flex.compiler.clients.problems.ProblemQuery;
>  import org.apache.flex.compiler.codegen.js.IJSPublisher;
>  import org.apache.flex.compiler.config.Configuration;
> +import org.apache.flex.compiler.constants.IASLanguageConstants;
>  import org.apache.flex.compiler.css.ICSSPropertyValue;
>  import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
>  import org.apache.flex.compiler.internal.codegen.js.JSSharedData;
> @@ -278,6 +279,7 @@ public class MXMLFlexJSPublisher extends
> JSGoogPublisher implements IJSPublisher
>
>          appendExportSymbol(projectIntermediateJSFilePath, projectName);
>          appendEncodedCSS(projectIntermediateJSFilePath, projectName);
> +        appendLanguageAndXML(projectIntermediateJSFilePath, projectName);
>
>          // if (!subsetGoog)
>          // {
> @@ -525,6 +527,75 @@ public class MXMLFlexJSPublisher extends
> JSGoogPublisher implements IJSPublisher
>          }
>      }
>
> +    private void appendLanguageAndXML(String path, String projectName)
> throws IOException
> +    {
> +        StringBuilder appendString = new StringBuilder();
> +        appendString.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> +        appendString.append(ASEmitterTokens.PAREN_OPEN.getToken());
> +        appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> +
> appendString.append(JSFlexJSEmitterTokens.LANGUAGE_QNAME.getToken());
> +        appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> +        appendString.append(ASEmitterTokens.PAREN_CLOSE.getToken());
> +        appendString.append(ASEmitterTokens.SEMICOLON.getToken());
> +        appendString.append("\n");
> +
> +        String fileData = readCode(new File(path));
> +        int reqidx = fileData.indexOf(appendString.toString());
> +        if (reqidx == -1 && project.needLanguage)
> +        {
> +               boolean afterProvide = false;
> +            reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> +            if (reqidx == -1)
> +            {
> +               afterProvide = true;
> +                reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
> +            }
> +            reqidx = fileData.indexOf(";", reqidx);
> +            String after = fileData.substring(reqidx + 1);
> +            String before = fileData.substring(0, reqidx + 1);
> +            if (afterProvide)
> +               before += "\n";
> +            String s = before + "\n" + appendString.toString() + after;
> +            writeFile(path, s, false);
> +        }
> +
> +        StringBuilder appendStringXML = new StringBuilder();
> +
> appendStringXML.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> +        appendStringXML.append(ASEmitterTokens.PAREN_OPEN.getToken());
> +        appendStringXML.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> +        appendStringXML.append(IASLanguageConstants.XML);
> +        appendStringXML.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
> +        appendStringXML.append(ASEmitterTokens.PAREN_CLOSE.getToken());
> +        appendStringXML.append(ASEmitterTokens.SEMICOLON.getToken());
> +        appendStringXML.append("\n");
> +
> +        if (project.needXML)
> +        {
> +               fileData = readCode(new File(path));
> +               reqidx = fileData.indexOf(appendStringXML.toString());
> +               if (reqidx == -1)
> +               {
> +                       boolean afterProvide = false;
> +                   reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> +                   if (reqidx == -1)
> +                   {
> +                       afterProvide = true;
> +                       reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
> +                   }
> +                   reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
> +                   if (reqidx == -1)
> +                       reqidx =
> fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
> +                   reqidx = fileData.indexOf(";", reqidx);
> +                   String after = fileData.substring(reqidx + 1);
> +                   String before = fileData.substring(0, reqidx + 1);
> +                   if (afterProvide)
> +                       before += "\n";
> +                   String s = before + "\n" + appendStringXML.toString()
> + after;
> +                   writeFile(path, s, false);
> +               }
> +        }
> +    }
> +
>      protected String readCode(File file)
>      {
>          String code = "";
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
> ----------------------------------------------------------------------
> diff --git
> a/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
> b/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
> index a1098a7..67869ab 100644
> ---
> a/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
> +++
> b/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
> @@ -101,7 +101,11 @@ public class FlexJSProject extends FlexProject
>                      }
>                  }
>                  else if (!isExternalLinkage(to) ||
> qname.equals("Namespace"))
> +                {
> +                       if (qname.equals("XML"))
> +                               needXML = true;
>                      reqs.put(qname, dt);
> +                }
>              }
>          }
>          else
> @@ -134,6 +138,7 @@ public class FlexJSProject extends FlexProject
>
>      public boolean needLanguage;
>      public boolean needCSS;
> +    public boolean needXML;
>
>      private LinkageChecker linkageChecker;
>      private ITargetSettings ts;
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.tests/.classpath
> ----------------------------------------------------------------------
> diff --git a/compiler.tests/.classpath b/compiler.tests/.classpath
> index c8aaecc..7508ebe 100644
> --- a/compiler.tests/.classpath
> +++ b/compiler.tests/.classpath
> @@ -9,5 +9,6 @@
>         <classpathentry kind="lib" path="/compiler/lib/commons-io.jar"/>
>         <classpathentry kind="src" path="/compiler"/>
>         <classpathentry kind="lib" path="/compiler/lib/guava.jar"/>
> +       <classpathentry kind="lib"
> path="/compiler.tests/lib/commons-compress-1.10.jar"/>
>         <classpathentry kind="output" path="classes"/>
>  </classpath>
>
>

[2/2] git commit: [flex-falcon] [refs/heads/develop] - fix up tests

Posted by ah...@apache.org.
fix up tests


Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/bdc933e4
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/bdc933e4
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/bdc933e4

Branch: refs/heads/develop
Commit: bdc933e4c22be00a90790d38dace8abe80271a88
Parents: 6c6584d
Author: Alex Harui <ah...@apache.org>
Authored: Thu Apr 7 10:55:27 2016 -0700
Committer: Alex Harui <ah...@apache.org>
Committed: Thu Apr 7 10:55:27 2016 -0700

----------------------------------------------------------------------
 .../test-files/flexjs/projects/interfaces/Test_result.js            | 1 -
 compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js   | 1 -
 2 files changed, 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/bdc933e4/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js b/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
index 92bb29f..42ab0f4 100644
--- a/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
+++ b/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
@@ -29,7 +29,6 @@ goog.require('org.apache.flex.utils.Language');
 
 
 
-
 /**
  * @constructor
  * @extends {classes.A}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/bdc933e4/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js b/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
index db3ade9..1306674 100644
--- a/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
+++ b/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
@@ -26,7 +26,6 @@ goog.require('org.apache.flex.utils.Language');
 
 
 
-
 /**
  * @constructor
  * @extends {Super}