[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" +
