FieldEmitter, MethodEmitter: can handle package-level and internal fields and methods
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/4faab6be Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/4faab6be Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/4faab6be Branch: refs/heads/develop Commit: 4faab6be81030b5e650b53d8149e0509d2e27141 Parents: 2450d14 Author: Josh Tynjala <[email protected]> Authored: Mon Jan 11 11:52:06 2016 -0800 Committer: Josh Tynjala <[email protected]> Committed: Mon Jan 11 11:52:06 2016 -0800 ---------------------------------------------------------------------- .../internal/codegen/js/jx/FieldEmitter.java | 32 ++++++++++++------ .../internal/codegen/js/jx/MethodEmitter.java | 35 ++++++++++++++------ 2 files changed, 46 insertions(+), 21 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/4faab6be/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java index f7b2c1a..3c80d83 100644 --- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java @@ -25,6 +25,7 @@ import org.apache.flex.compiler.codegen.js.goog.IJSGoogDocEmitter; import org.apache.flex.compiler.common.ASModifier; import org.apache.flex.compiler.common.ModifiersSet; import org.apache.flex.compiler.definitions.IDefinition; +import org.apache.flex.compiler.definitions.IVariableDefinition; import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens; import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens; import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter; @@ -63,20 +64,29 @@ public class FieldEmitter extends JSSubEmitter implements IDefinition ndef = node.getDefinition(); - ModifiersSet modifierSet = ndef.getModifiers(); String root = ""; - if (modifierSet != null && !modifierSet.hasModifier(ASModifier.STATIC)) + IVariableDefinition.VariableClassification classification = node.getVariableClassification(); + if (classification == IVariableDefinition.VariableClassification.PACKAGE_MEMBER || + classification == IVariableDefinition.VariableClassification.FILE_MEMBER) { - root = JSEmitterTokens.PROTOTYPE.getToken(); - root += ASEmitterTokens.MEMBER_ACCESS.getToken(); + write(getEmitter().formatQualifiedName(node.getQualifiedName())); + } + else + { + ModifiersSet modifierSet = ndef.getModifiers(); + if (modifierSet != null && !modifierSet.hasModifier(ASModifier.STATIC)) + { + root = JSEmitterTokens.PROTOTYPE.getToken(); + root += ASEmitterTokens.MEMBER_ACCESS.getToken(); + } + + if (definition == null) + definition = ndef.getContainingScope().getDefinition(); + + write(getEmitter().formatQualifiedName(definition.getQualifiedName()) + + ASEmitterTokens.MEMBER_ACCESS.getToken() + root + + node.getName()); } - - if (definition == null) - definition = ndef.getContainingScope().getDefinition(); - - write(getEmitter().formatQualifiedName(definition.getQualifiedName()) - + ASEmitterTokens.MEMBER_ACCESS.getToken() + root - + node.getName()); if (node.getNodeID() == ASTNodeID.BindableVariableID) { http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/4faab6be/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MethodEmitter.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MethodEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MethodEmitter.java index 7383859..086fcc0 100644 --- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MethodEmitter.java +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MethodEmitter.java @@ -24,6 +24,8 @@ import java.util.ArrayList; import org.apache.flex.compiler.codegen.ISubEmitter; import org.apache.flex.compiler.codegen.js.IJSEmitter; import org.apache.flex.compiler.common.ASModifier; +import org.apache.flex.compiler.definitions.IFunctionDefinition; +import org.apache.flex.compiler.definitions.ITypeDefinition; import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens; import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens; import org.apache.flex.compiler.internal.codegen.js.JSSessionModel; @@ -60,24 +62,37 @@ public class MethodEmitter extends JSSubEmitter implements boolean isConstructor = node.isConstructor(); - String qname = EmitterUtils.getTypeDefinition(node).getQualifiedName(); - if (qname != null && !qname.equals("")) + String qname = null; + IFunctionDefinition.FunctionClassification classification = fn.getFunctionClassification(); + if(classification == IFunctionDefinition.FunctionClassification.FILE_MEMBER || + classification == IFunctionDefinition.FunctionClassification.PACKAGE_MEMBER) { - write(fjs.formatQualifiedName(qname)); - if (!isConstructor) + write(fjs.formatQualifiedName(fn.getQualifiedName())); + } + else + { + ITypeDefinition typeDef = EmitterUtils.getTypeDefinition(node); + if (typeDef != null) { - write(ASEmitterTokens.MEMBER_ACCESS); - if (!fn.hasModifier(ASModifier.STATIC)) + qname = typeDef.getQualifiedName(); + } + if (qname != null && !qname.equals("")) + { + write(fjs.formatQualifiedName(qname)); + if (!isConstructor) { - write(JSEmitterTokens.PROTOTYPE); write(ASEmitterTokens.MEMBER_ACCESS); + if (!fn.hasModifier(ASModifier.STATIC)) + { + write(JSEmitterTokens.PROTOTYPE); + write(ASEmitterTokens.MEMBER_ACCESS); + } } } + if (!isConstructor) + fjs.emitMemberName(node); } - if (!isConstructor) - fjs.emitMemberName(node); - write(ASEmitterTokens.SPACE); writeToken(ASEmitterTokens.EQUAL); write(ASEmitterTokens.FUNCTION);
