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())

Reply via email to