[BUGFIX] Changed reflection data output to support static and instance members 
with the same name.
Note: This changes requires a corresponding change in the Reflection framework 
classes to support the output format change.


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

Branch: refs/heads/master
Commit: e1fbc8b55677261d4bad448380b891ab9da1a745
Parents: 82a0704
Author: greg-dove <[email protected]>
Authored: Sat Feb 25 16:03:00 2017 +1300
Committer: greg-dove <[email protected]>
Committed: Sat Feb 25 16:03:00 2017 +1300

----------------------------------------------------------------------
 .../codegen/js/jx/PackageFooterEmitter.java     |  39 +++++--
 .../codegen/mxml/flexjs/MXMLFlexJSEmitter.java  | 117 ++++++++++---------
 .../codegen/js/flexjs/TestFlexJSPackage.java    |   4 +-
 3 files changed, 93 insertions(+), 67 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/e1fbc8b5/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/PackageFooterEmitter.java
----------------------------------------------------------------------
diff --git 
a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/PackageFooterEmitter.java
 
b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/PackageFooterEmitter.java
index d2f53c5..65b69d1 100644
--- 
a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/PackageFooterEmitter.java
+++ 
b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/PackageFooterEmitter.java
@@ -367,12 +367,15 @@ public class PackageFooterEmitter extends JSSubEmitter 
implements
                        accessorData.add(staticEventDispatcher);
                }
         
-           HashMap<String, AccessorData> accessorMap = new HashMap<String, 
AccessorData>();
+           HashMap<String, AccessorData> instanceAccessorMap = new 
HashMap<String, AccessorData>();
+               HashMap<String, AccessorData> staticAccessorMap = new 
HashMap<String, AccessorData>();
         for (IDefinitionNode dnode : dnodes)
         {
             ModifiersSet modifierSet = dnode.getDefinition().getModifiers();
             boolean isStatic = (modifierSet != null && modifierSet
                     .hasModifier(ASModifier.STATIC));
+
+                       HashMap<String, AccessorData> accessorMap = isStatic ? 
staticAccessorMap : instanceAccessorMap;
             if ((dnode.getNodeID() == ASTNodeID.GetterID ||
                        dnode.getNodeID() == ASTNodeID.SetterID))
             {
@@ -589,6 +592,10 @@ public class PackageFooterEmitter extends JSSubEmitter 
implements
                                        count++;
                                        // varname: { type: typename
                                        write(ASEmitterTokens.SINGLE_QUOTE);
+                                       //prefix static var names with |
+                                       if (var.isStatic) {
+                                           write("|");
+                    }
                                        write(var.name);
                                        write(ASEmitterTokens.SINGLE_QUOTE);
                                        writeToken(ASEmitterTokens.COLON);
@@ -598,9 +605,9 @@ public class PackageFooterEmitter extends JSSubEmitter 
implements
                                        write(ASEmitterTokens.SINGLE_QUOTE);
                                        write(var.type);
                                        write(ASEmitterTokens.SINGLE_QUOTE);
-                                       if (var.isStatic) {
-                                               writeIsStatic();
-                                       }
+                               //      if (var.isStatic) {
+                               //              writeIsStatic();
+                               //      }
                                        IMetaTagNode[] tags = var.metaData;
                                        if (tags != null) {
                                                
writeToken(ASEmitterTokens.COMMA);
@@ -650,6 +657,10 @@ public class PackageFooterEmitter extends JSSubEmitter 
implements
                                count++;
                                // accessorname: { type: typename
                                write(ASEmitterTokens.SINGLE_QUOTE);
+                               //prefix static accessor names with |
+                               if (accessor.isStatic) {
+                                       write("|");
+                               }
                                write(accessor.name);
                                write(ASEmitterTokens.SINGLE_QUOTE);
                                writeToken(ASEmitterTokens.COLON);
@@ -659,9 +670,9 @@ public class PackageFooterEmitter extends JSSubEmitter 
implements
                                write(ASEmitterTokens.SINGLE_QUOTE);
                                write(accessor.type);
                                write(ASEmitterTokens.SINGLE_QUOTE);
-                               if (accessor.isStatic) {
-                                       writeIsStatic();
-                               }
+                       //      if (accessor.isStatic) {
+                       //              writeIsStatic();
+                       //      }
                                writeToken(ASEmitterTokens.COMMA);
                                write("access");
                                writeToken(ASEmitterTokens.COLON);
@@ -723,6 +734,10 @@ public class PackageFooterEmitter extends JSSubEmitter 
implements
                                count++;
                                // methodname: { type: typename
                                write(ASEmitterTokens.SINGLE_QUOTE);
+                               //prefix static method names with |
+                               if (method.isStatic) {
+                                       write("|");
+                               }
                                write(method.name);
                                write(ASEmitterTokens.SINGLE_QUOTE);
                                writeToken(ASEmitterTokens.COLON);
@@ -732,9 +747,9 @@ public class PackageFooterEmitter extends JSSubEmitter 
implements
                                write(ASEmitterTokens.SINGLE_QUOTE);
                                write(method.type);
                                write(ASEmitterTokens.SINGLE_QUOTE);
-                               if (method.isStatic) {
-                                       writeIsStatic();
-                               }
+                       //      if (method.isStatic) {
+                       //              writeIsStatic();
+                       //      }
                                writeToken(ASEmitterTokens.COMMA);
                                write("declaredBy");
                                writeToken(ASEmitterTokens.COLON);
@@ -801,12 +816,12 @@ public class PackageFooterEmitter extends JSSubEmitter 
implements
                writeToken(ASEmitterTokens.SQUARE_CLOSE);
        }
 
-       private void writeIsStatic() {
+       /*private void writeIsStatic() {
                writeToken(ASEmitterTokens.COMMA);
                write("isStatic");
                writeToken(ASEmitterTokens.COLON);
                writeToken(ASEmitterTokens.TRUE);
-       }
+       }*/
 
        private void writeEmptyContent(Boolean appendComma, Boolean 
includeNewline) {
                //return {};

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/e1fbc8b5/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
----------------------------------------------------------------------
diff --git 
a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
 
b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
index 2379a62..21aef44 100644
--- 
a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
+++ 
b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
@@ -717,59 +717,11 @@ public class MXMLFlexJSEmitter extends MXMLEmitter 
implements
 
         ArrayList<PackageFooterEmitter.AccessorData> accessorData = new 
ArrayList<PackageFooterEmitter.AccessorData>();
         HashMap<String, PropertyNodes> accessors = 
asEmitter.getModel().getPropertyMap();
-        for (String propName : accessors.keySet())
-        {
-               PropertyNodes p = accessors.get(propName);
-
-               IFunctionNode accessorNode = p.getter;
-               if (accessorNode == null)
-                       accessorNode = p.setter;
-            String ns = accessorNode.getNamespace();
-            if (ns == IASKeywordConstants.PUBLIC)
-            {
-               PackageFooterEmitter.AccessorData data = 
asEmitter.packageFooterEmitter.new AccessorData();
-               accessorData.add(data);
-               data.name = accessorNode.getName();
-
-                data.isStatic = accessorNode.hasModifier(ASModifier.STATIC);
-               if (p.getter != null)
-               {
-                     data.type = 
p.getter.getReturnTypeNode().resolveType(fjs).getQualifiedName();
-                     if (p.setter !=null) {
-                         data.access = "readwrite";
-                     } else data.access = "readonly";
-                }
-               else
-                {
-                     data.type = 
p.setter.getVariableTypeNode().resolveType(fjs).getQualifiedName();
-                     data.access = "writeonly";
-                }
-
-                   data.declaredBy = (cdef.getQualifiedName());
-                   IMetaTagsNode metaData = accessorNode.getMetaTags();
-                   if (metaData != null)
-                   {
-                       IMetaTagNode[] tags = metaData.getAllTags();
-                       if (tags.length > 0)
-                       {
-                               data.metaData = tags;
-                               /* accessors don't need exportProp since they 
are referenced via the defineProp data structure
-                               for (IMetaTagNode tag : tags)
-                               {
-                                       String tagName =  tag.getTagName();
-                                       if (exportMetadata.contains(tagName))
-                                       {
-                                               if (data.isStatic)
-                                                       
exportSymbols.add(data.name);
-                                               else
-                                               exportProperties.add(data.name);
-                                       }
-                               }
-                                       */
-                       }
-                   }
-            }
-        }
+        //instance accessors
+        collectAccessors(accessors,accessorData,cdef);
+        accessors = asEmitter.getModel().getStaticPropertyMap();
+        //static accessors
+        collectAccessors(accessors,accessorData,cdef);
 
         //additional bindables
         HashMap<String, BindableVarInfo> bindableVars = 
asEmitter.getModel().getBindableVars();
@@ -899,6 +851,65 @@ public class MXMLFlexJSEmitter extends MXMLEmitter 
implements
                 exportSymbols);
     }
 
+    private void collectAccessors(HashMap<String, PropertyNodes> accessors, 
ArrayList<PackageFooterEmitter.AccessorData> accessorData,IClassDefinition cdef 
) {
+        JSFlexJSEmitter asEmitter = (JSFlexJSEmitter)((IMXMLBlockWalker) 
getMXMLWalker()).getASEmitter();
+        FlexJSProject fjs = (FlexJSProject) getMXMLWalker().getProject();
+
+        for (String propName : accessors.keySet())
+        {
+            PropertyNodes p = accessors.get(propName);
+
+            IFunctionNode accessorNode = p.getter;
+            if (accessorNode == null)
+                accessorNode = p.setter;
+            String ns = accessorNode.getNamespace();
+            if (ns == IASKeywordConstants.PUBLIC)
+            {
+                PackageFooterEmitter.AccessorData data = 
asEmitter.packageFooterEmitter.new AccessorData();
+                accessorData.add(data);
+                data.name = accessorNode.getName();
+
+                data.isStatic = accessorNode.hasModifier(ASModifier.STATIC);
+                if (p.getter != null)
+                {
+                    data.type = 
p.getter.getReturnTypeNode().resolveType(fjs).getQualifiedName();
+                    if (p.setter !=null) {
+                        data.access = "readwrite";
+                    } else data.access = "readonly";
+                }
+                else
+                {
+                    data.type = 
p.setter.getVariableTypeNode().resolveType(fjs).getQualifiedName();
+                    data.access = "writeonly";
+                }
+
+                data.declaredBy = (cdef.getQualifiedName());
+                IMetaTagsNode metaData = accessorNode.getMetaTags();
+                if (metaData != null)
+                {
+                    IMetaTagNode[] tags = metaData.getAllTags();
+                    if (tags.length > 0)
+                    {
+                        data.metaData = tags;
+                               /* accessors don't need exportProp since they 
are referenced via the defineProp data structure
+                               for (IMetaTagNode tag : tags)
+                               {
+                                       String tagName =  tag.getTagName();
+                                       if (exportMetadata.contains(tagName))
+                                       {
+                                               if (data.isStatic)
+                                                       
exportSymbols.add(data.name);
+                                               else
+                                               exportProperties.add(data.name);
+                                       }
+                               }
+                                       */
+                    }
+                }
+            }
+        }
+    }
+
     
//--------------------------------------------------------------------------
 
     protected void emitPropertyDecls()

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/e1fbc8b5/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSPackage.java
----------------------------------------------------------------------
diff --git 
a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSPackage.java
 
b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSPackage.java
index 0215e25..9e94828 100644
--- 
a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSPackage.java
+++ 
b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSPackage.java
@@ -790,14 +790,14 @@ public class TestFlexJSPackage extends TestGoogPackage
                        "  return {\n" +
                                "    variables: function () {\n" +
                                "      return {\n" +
-                               "        'someString': { type: 'String', 
isStatic: true }\n" +
+                               "        '|someString': { type: 'String'}\n" +
                                "      };\n" +
                                "    },\n" +
                                "    accessors: function () {return {};},\n" +
                        "    methods: function () {\n" +
                        "      return {\n" +
                        "        'InternalClass': { type: '', declaredBy: 
'foo.bar.baz.A.InternalClass'},\n" +
-                               "        'someStaticFunction': { type: 
'String', isStatic: true , declaredBy: 'foo.bar.baz.A.InternalClass'},\n" +
+                               "        '|someStaticFunction': { type: 
'String', declaredBy: 'foo.bar.baz.A.InternalClass'},\n" +
                        "        'someMethod': { type: 'String', declaredBy: 
'foo.bar.baz.A.InternalClass'}\n" +
                        "      };\n" +
                        "    }\n" +

Reply via email to