You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by jo...@apache.org on 2017/03/21 23:11:22 UTC
[45/50] git commit: [flex-falcon] [refs/heads/master] - add test for
this circular scenario
add test for this circular scenario
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/51ddb858
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/51ddb858
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/51ddb858
Branch: refs/heads/master
Commit: 51ddb8580e867c2d2a21d7aebe386a279e72c6f4
Parents: 65ef0d9
Author: Alex Harui <ah...@apache.org>
Authored: Tue Mar 14 23:29:57 2017 -0700
Committer: Alex Harui <ah...@apache.org>
Committed: Tue Mar 14 23:29:57 2017 -0700
----------------------------------------------------------------------
.../codegen/js/flexjs/TestFlexJSProject.java | 17 +++++
.../codegen/js/goog/TestGoogProject.java | 35 +++++++++
.../flex/compiler/internal/test/TestBase.java | 49 ++++++++++++
.../org/apache/flex/utils/EnvProperties.java | 8 ++
.../flexjs/projects/circular_proto/A.as | 35 +++++++++
.../flexjs/projects/circular_proto/A_result.js | 74 ++++++++++++++++++
.../flexjs/projects/circular_proto/B.as | 39 ++++++++++
.../flexjs/projects/circular_proto/B_result.js | 78 +++++++++++++++++++
.../flexjs/projects/circular_proto/C.as | 38 ++++++++++
.../flexjs/projects/circular_proto/C_result.js | 80 ++++++++++++++++++++
.../flexjs/projects/circular_proto/D.as | 37 +++++++++
.../flexjs/projects/circular_proto/D_result.js | 80 ++++++++++++++++++++
.../flexjs/projects/circular_proto/E.as | 38 ++++++++++
.../flexjs/projects/circular_proto/E_result.js | 76 +++++++++++++++++++
.../flexjs/projects/circular_proto/F.as | 36 +++++++++
.../flexjs/projects/circular_proto/F_result.js | 80 ++++++++++++++++++++
.../projects/circular_proto/index_result.html | 42 ++++++++++
17 files changed, 842 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/51ddb858/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
index dbdb67c..fa184b9 100644
--- a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
+++ b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
@@ -131,6 +131,23 @@ public class TestFlexJSProject extends TestGoogProject
}
@Test
+ public void test_IsItCircularProto()
+ {
+ String testDirPath = projectDirPath + "/circular_proto";
+
+ String fileName = "A.as";
+
+ sourcePath = new File(TestAdapterFactory.getTestAdapter().getUnitTestBaseDir(),
+ projectDirPath + "/circular_proto").getPath();
+
+ int exitCode = compileAndPublishProject(testDirPath, "circular_proto", fileName);
+
+ assertThat(exitCode, is(0));
+
+ assertPublishedProjectOut(testDirPath, "circular_proto");
+ }
+
+ @Test
public void test_XMLRequires()
{
String testDirPath = projectDirPath + "/xml_requires";
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/51ddb858/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/goog/TestGoogProject.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/goog/TestGoogProject.java b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/goog/TestGoogProject.java
index f9be0d7..6d70fa0 100644
--- a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/goog/TestGoogProject.java
+++ b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/goog/TestGoogProject.java
@@ -19,6 +19,10 @@
package org.apache.flex.compiler.internal.codegen.js.goog;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.filefilter.FileFileFilter;
+import org.apache.commons.io.filefilter.FileFilterUtils;
+import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.flex.compiler.driver.IBackend;
import org.apache.flex.compiler.internal.driver.js.goog.GoogBackend;
import org.apache.flex.compiler.internal.test.ASTestBase;
@@ -26,6 +30,7 @@ import org.apache.flex.utils.TestAdapterFactory;
import org.junit.Test;
import java.io.File;
+import java.util.Collection;
import java.util.List;
import static org.hamcrest.core.Is.is;
@@ -98,4 +103,34 @@ public class TestGoogProject extends ASTestBase
}
}
+ protected void assertPublishedProjectOut(String projectFolderPath,
+ String projectName)
+ {
+ String outputFolderName = tempDir + "/" + projectName + "/bin/js-debug";
+ IOFileFilter jsFilter = FileFilterUtils.and(FileFileFilter.FILE,
+ FileFilterUtils.suffixFileFilter("js"));
+ IOFileFilter htmlFilter = FileFilterUtils.and(FileFileFilter.FILE,
+ FileFilterUtils.suffixFileFilter("html"));
+ IOFileFilter resultsFilter = FileFilterUtils.or(jsFilter, htmlFilter);
+ File outputFolder = new File(outputFolderName);
+ File projectFolder = new File(TestAdapterFactory.getTestAdapter().getUnitTestBaseDir(), projectFolderPath);
+ projectFolderPath = projectFolder.getAbsolutePath();
+ Collection<File> files = FileUtils.listFiles(projectFolder, resultsFilter, null);
+ for (File resultFile : files)
+ {
+ String compiledFilePath = resultFile.getAbsolutePath();
+ if (compiledFilePath.startsWith(projectFolderPath))
+ compiledFilePath = compiledFilePath.substring(projectFolderPath.length());
+ compiledFilePath = compiledFilePath.replace("_result", "");
+ File compiledFile = new File(outputFolder, compiledFilePath);
+ String compiledResult = readCodeFile(compiledFile);
+
+ String expectedResult = readCodeFile(resultFile);
+ /*if (!compiledResult.equals(expectedResult)) {
+ System.out.println("expected\n"+expectedResult);
+ System.out.println("got\n"+compiledResult);
+ }*/
+ assertThat(compiledResult, is(expectedResult));
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/51ddb858/compiler-jx/src/test/java/org/apache/flex/compiler/internal/test/TestBase.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/test/TestBase.java b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/test/TestBase.java
index ab18cbd..fce0907 100644
--- a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/test/TestBase.java
+++ b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/test/TestBase.java
@@ -27,6 +27,7 @@ import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
+import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
@@ -37,6 +38,11 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.filefilter.FileFileFilter;
+import org.apache.commons.io.filefilter.FileFilterUtils;
+import org.apache.commons.io.filefilter.IOFileFilter;
+import org.apache.flex.compiler.clients.MXMLJSC;
import org.apache.flex.compiler.codegen.as.IASEmitter;
import org.apache.flex.compiler.codegen.mxml.IMXMLEmitter;
import org.apache.flex.compiler.config.Configurator;
@@ -743,6 +749,20 @@ public class TestBase implements ITestBase
}
}
}
+ else if (line.contains("<!--") && isResult)
+ {
+ // eat opening comment which should be apache header
+ while (line != null)
+ {
+ line = in.readLine();
+ if (line.contains("-->"))
+ {
+ line = in.readLine();
+ break;
+ }
+ }
+ }
+
while (line != null)
{
code += line + "\n";
@@ -783,4 +803,33 @@ public class TestBase implements ITestBase
return null;
}
+ protected int compileAndPublishProject(String projectFolderPath,
+ String projectName, String mainFileName)
+ {
+ String sourceFolderName = tempDir + "/" + projectName + "/src";
+ IOFileFilter asFilter = FileFilterUtils.and(FileFileFilter.FILE,
+ FileFilterUtils.suffixFileFilter(".as"));
+ File sourceFolder = new File(sourceFolderName);
+ File projectFolder = new File(TestAdapterFactory.getTestAdapter().getUnitTestBaseDir(), projectFolderPath);
+ try {
+ FileUtils.copyDirectory(projectFolder, sourceFolder, asFilter);
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ int numArgs = 3;
+ if (env.GOOG != null) numArgs++;
+ String[] args = new String[numArgs];
+ File mainFile = new File(sourceFolder, mainFileName);
+ //args[0] = "-compiler.targets=JS";
+ int index = 0;
+ args[index++] = "-external-library-path=" + env.ASJS + "/js/libs/js.swc";
+ args[index++] = "-remove-circulars";
+ if (env.GOOG != null)
+ args[index++] = "-closure-lib=" + env.GOOG;
+ args[index++] = mainFile.getAbsolutePath();
+ int exitCode = MXMLJSC.staticMainNoExit(args);
+ return exitCode;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/51ddb858/compiler-jx/src/test/java/org/apache/flex/utils/EnvProperties.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/java/org/apache/flex/utils/EnvProperties.java b/compiler-jx/src/test/java/org/apache/flex/utils/EnvProperties.java
index ea75057..ee2c3f3 100644
--- a/compiler-jx/src/test/java/org/apache/flex/utils/EnvProperties.java
+++ b/compiler-jx/src/test/java/org/apache/flex/utils/EnvProperties.java
@@ -70,6 +70,11 @@ public class EnvProperties {
*/
public String FPVER;
+ /**
+ * GOOG_HOME
+ */
+ public String GOOG;
+
private static EnvProperties env;
@@ -144,6 +149,9 @@ public class EnvProperties {
if (ASJS == null)
ASJS = FilenameNormalization.normalize("../../../../flex-asjs");
System.out.println("environment property - ASJS_HOME = " + ASJS);
+
+ GOOG = p.getProperty(prefix + "GOOG_HOME", System.getenv("GOOG_HOME"));
+
}
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/51ddb858/compiler-jx/src/test/resources/flexjs/projects/circular_proto/A.as
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/resources/flexjs/projects/circular_proto/A.as b/compiler-jx/src/test/resources/flexjs/projects/circular_proto/A.as
new file mode 100644
index 0000000..09c4156
--- /dev/null
+++ b/compiler-jx/src/test/resources/flexjs/projects/circular_proto/A.as
@@ -0,0 +1,35 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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 A
+ {
+ public function A()
+ {
+ }
+
+ private function test():void {
+ var bar:int = E.a(false);
+ }
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/51ddb858/compiler-jx/src/test/resources/flexjs/projects/circular_proto/A_result.js
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/resources/flexjs/projects/circular_proto/A_result.js b/compiler-jx/src/test/resources/flexjs/projects/circular_proto/A_result.js
new file mode 100644
index 0000000..8fd88dd
--- /dev/null
+++ b/compiler-jx/src/test/resources/flexjs/projects/circular_proto/A_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.
+ */
+/**
+ * Generated by Apache Flex Cross-Compiler from A.as
+ * A
+ *
+ * @fileoverview
+ *
+ * @suppress {checkTypes|accessControls}
+ */
+
+goog.provide('A');
+
+goog.require('E');
+
+
+
+/**
+ * @constructor
+ */
+A = function() {
+};
+
+
+/**
+ * @private
+ */
+A.prototype.test = function() {
+ var /** @type {number} */ bar = E.a(false);
+};
+
+
+/**
+ * Metadata
+ *
+ * @type {Object.<string, Array.<Object>>}
+ */
+A.prototype.FLEXJS_CLASS_INFO = { names: [{ name: 'A', qName: 'A', kind: 'class' }] };
+
+
+/**
+ * Prevent renaming of class. Needed for reflection.
+ */
+goog.exportSymbol('A', A);
+
+
+
+/**
+ * Reflection
+ *
+ * @return {Object.<string, Function>}
+ */
+A.prototype.FLEXJS_REFLECTION_INFO = function () {
+ return {
+ variables: function () {return {};},
+ accessors: function () {return {};},
+ methods: function () {
+ return {
+ 'A': { type: '', declaredBy: 'A'}
+ };
+ }
+ };
+};
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/51ddb858/compiler-jx/src/test/resources/flexjs/projects/circular_proto/B.as
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/resources/flexjs/projects/circular_proto/B.as b/compiler-jx/src/test/resources/flexjs/projects/circular_proto/B.as
new file mode 100644
index 0000000..fac9035
--- /dev/null
+++ b/compiler-jx/src/test/resources/flexjs/projects/circular_proto/B.as
@@ -0,0 +1,39 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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
+{
+ /**
+ * FlowComposerBase
+ */
+ public class B
+ {
+
+ public function B()
+ {
+
+ }
+
+ public static function a(b:Boolean):int{
+ if (b)
+ return E.a(false);
+ return 0;
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/51ddb858/compiler-jx/src/test/resources/flexjs/projects/circular_proto/B_result.js
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/resources/flexjs/projects/circular_proto/B_result.js b/compiler-jx/src/test/resources/flexjs/projects/circular_proto/B_result.js
new file mode 100644
index 0000000..ff881d1
--- /dev/null
+++ b/compiler-jx/src/test/resources/flexjs/projects/circular_proto/B_result.js
@@ -0,0 +1,78 @@
+/**
+ * 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.
+ */
+/**
+ * Generated by Apache Flex Cross-Compiler from B.as
+ * B
+ *
+ * @fileoverview
+ *
+ * @suppress {missingRequire|checkTypes|accessControls}
+ */
+
+goog.provide('B');
+
+
+
+
+/**
+ * @constructor
+ */
+B = function() {
+};
+
+
+/**
+ * @export
+ * @param {boolean} b
+ * @return {number}
+ */
+B.a = function(b) {
+ if (b)
+ return E.a(false);
+ return 0;
+};
+
+
+/**
+ * Metadata
+ *
+ * @type {Object.<string, Array.<Object>>}
+ */
+B.prototype.FLEXJS_CLASS_INFO = { names: [{ name: 'B', qName: 'B', kind: 'class' }] };
+
+
+/**
+ * Prevent renaming of class. Needed for reflection.
+ */
+goog.exportSymbol('B', B);
+
+
+
+/**
+ * Reflection
+ *
+ * @return {Object.<string, Function>}
+ */
+B.prototype.FLEXJS_REFLECTION_INFO = function () {
+ return {
+ variables: function () {return {};},
+ accessors: function () {return {};},
+ methods: function () {
+ return {
+ 'B': { type: '', declaredBy: 'B'},
+ '|a': { type: 'int', declaredBy: 'B', parameters: function () { return [ { index: 1, type: 'Boolean', optional: false } ]; }}
+ };
+ }
+ };
+};
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/51ddb858/compiler-jx/src/test/resources/flexjs/projects/circular_proto/C.as
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/resources/flexjs/projects/circular_proto/C.as b/compiler-jx/src/test/resources/flexjs/projects/circular_proto/C.as
new file mode 100644
index 0000000..f75cc04
--- /dev/null
+++ b/compiler-jx/src/test/resources/flexjs/projects/circular_proto/C.as
@@ -0,0 +1,38 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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
+{
+ /**
+ StandardFlowComposer extends FlowComposerBase
+ */
+ public class C extends B
+ {
+
+ public function C()
+ {
+
+ }
+
+ public static function a(b:Boolean):int{
+ // FactoryComposer
+ return F.a(false);
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/51ddb858/compiler-jx/src/test/resources/flexjs/projects/circular_proto/C_result.js
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/resources/flexjs/projects/circular_proto/C_result.js b/compiler-jx/src/test/resources/flexjs/projects/circular_proto/C_result.js
new file mode 100644
index 0000000..9dece88
--- /dev/null
+++ b/compiler-jx/src/test/resources/flexjs/projects/circular_proto/C_result.js
@@ -0,0 +1,80 @@
+/**
+ * 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.
+ */
+/**
+ * Generated by Apache Flex Cross-Compiler from C.as
+ * C
+ *
+ * @fileoverview
+ *
+ * @suppress {missingRequire|checkTypes|accessControls}
+ */
+
+goog.provide('C');
+
+goog.require('B');
+
+
+
+/**
+ * @constructor
+ * @extends {B}
+ */
+C = function() {
+ C.base(this, 'constructor');
+};
+goog.inherits(C, B);
+
+
+/**
+ * @export
+ * @param {boolean} b
+ * @return {number}
+ */
+C.a = function(b) {
+ return F.a(false);
+};
+
+
+/**
+ * Metadata
+ *
+ * @type {Object.<string, Array.<Object>>}
+ */
+C.prototype.FLEXJS_CLASS_INFO = { names: [{ name: 'C', qName: 'C', kind: 'class' }] };
+
+
+/**
+ * Prevent renaming of class. Needed for reflection.
+ */
+goog.exportSymbol('C', C);
+
+
+
+/**
+ * Reflection
+ *
+ * @return {Object.<string, Function>}
+ */
+C.prototype.FLEXJS_REFLECTION_INFO = function () {
+ return {
+ variables: function () {return {};},
+ accessors: function () {return {};},
+ methods: function () {
+ return {
+ 'C': { type: '', declaredBy: 'C'},
+ '|a': { type: 'int', declaredBy: 'C', parameters: function () { return [ { index: 1, type: 'Boolean', optional: false } ]; }}
+ };
+ }
+ };
+};
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/51ddb858/compiler-jx/src/test/resources/flexjs/projects/circular_proto/D.as
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/resources/flexjs/projects/circular_proto/D.as b/compiler-jx/src/test/resources/flexjs/projects/circular_proto/D.as
new file mode 100644
index 0000000..fd2f01e
--- /dev/null
+++ b/compiler-jx/src/test/resources/flexjs/projects/circular_proto/D.as
@@ -0,0 +1,37 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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
+{
+ /**
+ * FactoryComposer extends StandardFlowComposer
+ */
+ public class D extends C
+ {
+
+ public function D()
+ {
+
+ }
+
+ public static function a(b:Boolean):int {
+ return 0;
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/51ddb858/compiler-jx/src/test/resources/flexjs/projects/circular_proto/D_result.js
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/resources/flexjs/projects/circular_proto/D_result.js b/compiler-jx/src/test/resources/flexjs/projects/circular_proto/D_result.js
new file mode 100644
index 0000000..3dcbe6f
--- /dev/null
+++ b/compiler-jx/src/test/resources/flexjs/projects/circular_proto/D_result.js
@@ -0,0 +1,80 @@
+/**
+ * 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.
+ */
+/**
+ * Generated by Apache Flex Cross-Compiler from D.as
+ * D
+ *
+ * @fileoverview
+ *
+ * @suppress {checkTypes|accessControls}
+ */
+
+goog.provide('D');
+
+goog.require('C');
+
+
+
+/**
+ * @constructor
+ * @extends {C}
+ */
+D = function() {
+ D.base(this, 'constructor');
+};
+goog.inherits(D, C);
+
+
+/**
+ * @export
+ * @param {boolean} b
+ * @return {number}
+ */
+D.a = function(b) {
+ return 0;
+};
+
+
+/**
+ * Metadata
+ *
+ * @type {Object.<string, Array.<Object>>}
+ */
+D.prototype.FLEXJS_CLASS_INFO = { names: [{ name: 'D', qName: 'D', kind: 'class' }] };
+
+
+/**
+ * Prevent renaming of class. Needed for reflection.
+ */
+goog.exportSymbol('D', D);
+
+
+
+/**
+ * Reflection
+ *
+ * @return {Object.<string, Function>}
+ */
+D.prototype.FLEXJS_REFLECTION_INFO = function () {
+ return {
+ variables: function () {return {};},
+ accessors: function () {return {};},
+ methods: function () {
+ return {
+ 'D': { type: '', declaredBy: 'D'},
+ '|a': { type: 'int', declaredBy: 'D', parameters: function () { return [ { index: 1, type: 'Boolean', optional: false } ]; }}
+ };
+ }
+ };
+};
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/51ddb858/compiler-jx/src/test/resources/flexjs/projects/circular_proto/E.as
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/resources/flexjs/projects/circular_proto/E.as b/compiler-jx/src/test/resources/flexjs/projects/circular_proto/E.as
new file mode 100644
index 0000000..dfae20b
--- /dev/null
+++ b/compiler-jx/src/test/resources/flexjs/projects/circular_proto/E.as
@@ -0,0 +1,38 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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
+{
+ /**
+ * Configuration
+ */
+ public class E
+ {
+
+ public function E()
+ {
+
+ }
+
+ public static function a(b:Boolean):int {
+ // StandardFlowComposer
+ return C.a(false);
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/51ddb858/compiler-jx/src/test/resources/flexjs/projects/circular_proto/E_result.js
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/resources/flexjs/projects/circular_proto/E_result.js b/compiler-jx/src/test/resources/flexjs/projects/circular_proto/E_result.js
new file mode 100644
index 0000000..ccf81c0
--- /dev/null
+++ b/compiler-jx/src/test/resources/flexjs/projects/circular_proto/E_result.js
@@ -0,0 +1,76 @@
+/**
+ * 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.
+ */
+/**
+ * Generated by Apache Flex Cross-Compiler from E.as
+ * E
+ *
+ * @fileoverview
+ *
+ * @suppress {missingRequire|checkTypes|accessControls}
+ */
+
+goog.provide('E');
+
+
+
+
+/**
+ * @constructor
+ */
+E = function() {
+};
+
+
+/**
+ * @export
+ * @param {boolean} b
+ * @return {number}
+ */
+E.a = function(b) {
+ return C.a(false);
+};
+
+
+/**
+ * Metadata
+ *
+ * @type {Object.<string, Array.<Object>>}
+ */
+E.prototype.FLEXJS_CLASS_INFO = { names: [{ name: 'E', qName: 'E', kind: 'class' }] };
+
+
+/**
+ * Prevent renaming of class. Needed for reflection.
+ */
+goog.exportSymbol('E', E);
+
+
+
+/**
+ * Reflection
+ *
+ * @return {Object.<string, Function>}
+ */
+E.prototype.FLEXJS_REFLECTION_INFO = function () {
+ return {
+ variables: function () {return {};},
+ accessors: function () {return {};},
+ methods: function () {
+ return {
+ 'E': { type: '', declaredBy: 'E'},
+ '|a': { type: 'int', declaredBy: 'E', parameters: function () { return [ { index: 1, type: 'Boolean', optional: false } ]; }}
+ };
+ }
+ };
+};
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/51ddb858/compiler-jx/src/test/resources/flexjs/projects/circular_proto/F.as
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/resources/flexjs/projects/circular_proto/F.as b/compiler-jx/src/test/resources/flexjs/projects/circular_proto/F.as
new file mode 100644
index 0000000..350cf84
--- /dev/null
+++ b/compiler-jx/src/test/resources/flexjs/projects/circular_proto/F.as
@@ -0,0 +1,36 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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 F extends D
+ {
+
+ public function F()
+ {
+
+ }
+
+ public static function a(b:Boolean):int {
+ return D.a(false);
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/51ddb858/compiler-jx/src/test/resources/flexjs/projects/circular_proto/F_result.js
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/resources/flexjs/projects/circular_proto/F_result.js b/compiler-jx/src/test/resources/flexjs/projects/circular_proto/F_result.js
new file mode 100644
index 0000000..96d9530
--- /dev/null
+++ b/compiler-jx/src/test/resources/flexjs/projects/circular_proto/F_result.js
@@ -0,0 +1,80 @@
+/**
+ * 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.
+ */
+/**
+ * Generated by Apache Flex Cross-Compiler from F.as
+ * F
+ *
+ * @fileoverview
+ *
+ * @suppress {checkTypes|accessControls}
+ */
+
+goog.provide('F');
+
+goog.require('D');
+
+
+
+/**
+ * @constructor
+ * @extends {D}
+ */
+F = function() {
+ F.base(this, 'constructor');
+};
+goog.inherits(F, D);
+
+
+/**
+ * @export
+ * @param {boolean} b
+ * @return {number}
+ */
+F.a = function(b) {
+ return D.a(false);
+};
+
+
+/**
+ * Metadata
+ *
+ * @type {Object.<string, Array.<Object>>}
+ */
+F.prototype.FLEXJS_CLASS_INFO = { names: [{ name: 'F', qName: 'F', kind: 'class' }] };
+
+
+/**
+ * Prevent renaming of class. Needed for reflection.
+ */
+goog.exportSymbol('F', F);
+
+
+
+/**
+ * Reflection
+ *
+ * @return {Object.<string, Function>}
+ */
+F.prototype.FLEXJS_REFLECTION_INFO = function () {
+ return {
+ variables: function () {return {};},
+ accessors: function () {return {};},
+ methods: function () {
+ return {
+ 'F': { type: '', declaredBy: 'F'},
+ '|a': { type: 'int', declaredBy: 'F', parameters: function () { return [ { index: 1, type: 'Boolean', optional: false } ]; }}
+ };
+ }
+ };
+};
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/51ddb858/compiler-jx/src/test/resources/flexjs/projects/circular_proto/index_result.html
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/resources/flexjs/projects/circular_proto/index_result.html b/compiler-jx/src/test/resources/flexjs/projects/circular_proto/index_result.html
new file mode 100644
index 0000000..80c7d8e
--- /dev/null
+++ b/compiler-jx/src/test/resources/flexjs/projects/circular_proto/index_result.html
@@ -0,0 +1,42 @@
+<!--
+
+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.
+
+-->
+<!DOCTYPE html>
+<html>
+<head>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <link rel="stylesheet" type="text/css" href="A.css">
+ <script type="text/javascript" src="./library/closure/goog/base.js"></script>
+ <script type="text/javascript">
+// generated by FalconJX
+goog.addDependency('../../../A.js', ['A'], ['E']);
+goog.addDependency('../../../E.js', ['E'], ['C']);
+goog.addDependency('../../../F.js', ['F'], ['D']);
+goog.addDependency('../../../D.js', ['D'], ['C']);
+goog.addDependency('../../../C.js', ['C'], ['B', 'F']);
+goog.addDependency('../../../B.js', ['B'], []);
+ goog.require("A");
+ </script>
+</head>
+<body>
+ <script type="text/javascript">
+ new A().start();
+ </script>
+</body>
+</html>
\ No newline at end of file