Repository: flex-falcon Updated Branches: refs/heads/develop bb8b743a0 -> 4f532fc86
Added test and implementation for qualified @enum declaration. Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/4f532fc8 Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/4f532fc8 Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/4f532fc8 Branch: refs/heads/develop Commit: 4f532fc8688b9e756e8ca74780d6d6c4a3fd621e Parents: bb8b743 Author: Michael Schmalle <[email protected]> Authored: Sun Jun 14 13:55:48 2015 -0400 Committer: Michael Schmalle <[email protected]> Committed: Sun Jun 14 13:55:48 2015 -0400 ---------------------------------------------------------------------- .../codegen/externals/TestAnnotationEnum.java | 19 +++++++++++++++ .../externals_unit_tests/annotation_enum.js | 13 ++++++++++ .../externals/pass/CollectTypesPass.java | 13 +++++++--- .../externals/pass/NamespaceResolutionPass.java | 6 +++++ .../externals/reference/ClassReference.java | 25 +++++++++++++++++++- 5 files changed, 72 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/4f532fc8/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/externals/TestAnnotationEnum.java ---------------------------------------------------------------------- diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/externals/TestAnnotationEnum.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/externals/TestAnnotationEnum.java index c43cd8b..97286db 100644 --- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/externals/TestAnnotationEnum.java +++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/externals/TestAnnotationEnum.java @@ -19,6 +19,7 @@ package org.apache.flex.compiler.internal.codegen.externals; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; @@ -57,6 +58,24 @@ public class TestAnnotationEnum extends ExternalsTestBase //String emit2 = client.getEmitter().emit(FontFaceSetLoadStatus); } + @Test + public void test_qualified_enum() throws IOException + { + compile("annotation_enum.js"); + + ClassReference QualifiedEnum = model.getClassReference("foo.bar.baz.QualifiedEnum"); + assertNotNull(QualifiedEnum); + assertEquals("foo.bar.baz.QualifiedEnum", + QualifiedEnum.getQualifiedName()); + assertEquals("foo.bar.baz", QualifiedEnum.getPackageName()); + assertEquals("QualifiedEnum", QualifiedEnum.getBaseName()); + + assertTrue(QualifiedEnum.hasStaticField("One")); + assertTrue(QualifiedEnum.hasStaticField("Two")); + + //String emit1 = client.getEmitter().emit(QualifiedEnum); + } + @Override protected void configure(ExternCConfiguration config) throws IOException { http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/4f532fc8/compiler.jx.tests/test-files/externals_unit_tests/annotation_enum.js ---------------------------------------------------------------------- diff --git a/compiler.jx.tests/test-files/externals_unit_tests/annotation_enum.js b/compiler.jx.tests/test-files/externals_unit_tests/annotation_enum.js index bc9276c..1b578cd 100644 --- a/compiler.jx.tests/test-files/externals_unit_tests/annotation_enum.js +++ b/compiler.jx.tests/test-files/externals_unit_tests/annotation_enum.js @@ -37,7 +37,20 @@ var FontFaceSetLoadStatus = { FOO_LOADING: 'loading' }; +/** @const */ +var foo = {}; +/** @const */ +foo.bar = {}; +/** @const */ +foo.bar.baz = {}; +/** + * @enum + */ +foo.bar.baz.QualifiedEnum = { + One: '1', + Two: '2' +}; http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/4f532fc8/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/pass/CollectTypesPass.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/pass/CollectTypesPass.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/pass/CollectTypesPass.java index c17dacc..8ddde76 100644 --- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/pass/CollectTypesPass.java +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/pass/CollectTypesPass.java @@ -122,9 +122,16 @@ public class CollectTypesPass extends AbstractCompilerPass Node subFirst = first.getFirstChild(); if (subFirst != null && subFirst.isObjectLit()) { - //System.out.println(first.getFirstChild().toStringTree()); - //log("Encountered namespace [" + first.getQualifiedName() + "]"); - model.addNamespace(child, first.getQualifiedName()); + if (comment.hasEnumParameterType()) + { + + } + else + { + //System.out.println(first.getFirstChild().toStringTree()); + //log("Encountered namespace [" + first.getQualifiedName() + "]"); + model.addNamespace(child, first.getQualifiedName()); + } } else if (subFirst != null && subFirst.isFunction()) { http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/4f532fc8/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/pass/NamespaceResolutionPass.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/pass/NamespaceResolutionPass.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/pass/NamespaceResolutionPass.java index 1ccd3c4..8f5cd95 100644 --- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/pass/NamespaceResolutionPass.java +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/pass/NamespaceResolutionPass.java @@ -101,6 +101,12 @@ public class NamespaceResolutionPass extends AbstractCompilerPass model.addClass(first, firstAssignChild.getQualifiedName()); } + else if (comment.hasEnumParameterType()) + { + err(first); + model.addEnum(first, + firstAssignChild.getQualifiedName()); + } else { err("Unhandled expression result:"); http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/4f532fc8/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ClassReference.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ClassReference.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ClassReference.java index ff96fe6..d99c0de 100644 --- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ClassReference.java +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ClassReference.java @@ -137,6 +137,8 @@ public class ClassReference extends BaseReference if (comment.hasEnumParameterType()) { /* + var Foo = { ... + VAR 35 [jsdoc_info: JSDocInfo] NAME FontFaceSetLoadStatus OBJECTLIT @@ -144,12 +146,33 @@ public class ClassReference extends BaseReference STRING loaded STRING_KEY LOADING STRING loading + + Or.. + + foo.bar.baz.QualifiedEnum = { ... + + ASSIGN 50 [jsdoc_info: JSDocInfo] + GETPROP + GETPROP + ... + STRING QualifiedEnum + OBJECTLIT 50 */ + JSTypeExpression enumParameterType = comment.getEnumParameterType(); String overrideStringType = TypeUtils.transformType(getModel().evaluate( enumParameterType).toAnnotationString()); - Node objLit = node.getFirstChild().getFirstChild(); + Node objLit = null; + if (node.isVar()) + { + objLit = node.getFirstChild().getFirstChild(); + } + else if (node.isAssign()) + { + objLit = node.getLastChild(); + } + for (Node stringKey : objLit.children()) { if (stringKey.isStringKey())
