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 <[email protected]> Authored: Thu Apr 7 10:39:28 2016 -0700 Committer: Alex Harui <[email protected]> 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>
