compiler.jx: added support for functions and variables in packages, and functions and variables after package (similar to internal classes)
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/56060782 Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/56060782 Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/56060782 Branch: refs/heads/develop Commit: 5606078243b62fd965bf83f6e39993140d01de76 Parents: 8a7bdc6 Author: Josh Tynjala <[email protected]> Authored: Mon Jan 11 11:54:37 2016 -0800 Committer: Josh Tynjala <[email protected]> Committed: Mon Jan 11 11:54:37 2016 -0800 ---------------------------------------------------------------------- .../internal/codegen/as/ASBlockWalker.java | 20 ++++++------ .../codegen/js/flexjs/JSFlexJSEmitter.java | 10 ++++++ .../codegen/js/jx/PackageHeaderEmitter.java | 33 ++++++++++++++++++-- 3 files changed, 49 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/56060782/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASBlockWalker.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASBlockWalker.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASBlockWalker.java index fec44cc..b405bb0 100644 --- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASBlockWalker.java +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASBlockWalker.java @@ -190,7 +190,9 @@ public class ASBlockWalker implements IASBlockVisitor, IASBlockWalker if (pnode != null && (pnode instanceof IPackageNode || pnode instanceof IInterfaceNode || - pnode instanceof IClassNode)) + pnode instanceof IClassNode || + pnode instanceof IFunctionNode || + pnode instanceof IVariableNode)) { walk(pnode); @@ -238,11 +240,9 @@ public class ASBlockWalker implements IASBlockVisitor, IASBlockWalker public void visitVariable(IVariableNode node) { debug("visitVariable()"); - if (SemanticUtils.isPackageDefinition(node.getDefinition())) - { - //TODO: emit package-level variable - } - else if (SemanticUtils.isMemberDefinition(node.getDefinition())) + if (SemanticUtils.isPackageDefinition(node.getDefinition()) || + SemanticUtils.isMemberDefinition(node.getDefinition()) || + node.getParent() instanceof IFileNode) { emitter.emitField(node); } @@ -256,11 +256,9 @@ public class ASBlockWalker implements IASBlockVisitor, IASBlockWalker public void visitFunction(IFunctionNode node) { debug("visitFunction()"); - if (SemanticUtils.isPackageDefinition(node.getDefinition())) - { - //TODO: emit package-level function - } - else if (DefinitionUtils.isMemberDefinition(node.getDefinition())) + if (SemanticUtils.isPackageDefinition(node.getDefinition()) || + DefinitionUtils.isMemberDefinition(node.getDefinition()) || + node.getParent() instanceof IFileNode) { emitter.emitMethod(node); } http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/56060782/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java index a101a4c..1de63fe 100644 --- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java @@ -342,6 +342,16 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter String className = ((IInterfaceNode)pnode).getQualifiedName(); getModel().getInternalClasses().put(className, mainClassName + "." + className); } + else if (pnode instanceof IFunctionNode) + { + String className = ((IFunctionNode)pnode).getQualifiedName(); + getModel().getInternalClasses().put(className, mainClassName + "." + className); + } + else if (pnode instanceof IVariableNode) + { + String className = ((IVariableNode)pnode).getQualifiedName(); + getModel().getInternalClasses().put(className, mainClassName + "." + className); + } } packageHeaderEmitter.emit(definition); http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/56060782/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java index d0e161b..21d3c01 100644 --- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java @@ -27,8 +27,10 @@ import java.util.List; import org.apache.flex.compiler.asdoc.flexjs.ASDocComment; import org.apache.flex.compiler.codegen.ISubEmitter; import org.apache.flex.compiler.codegen.js.IJSEmitter; +import org.apache.flex.compiler.definitions.IFunctionDefinition; import org.apache.flex.compiler.definitions.IPackageDefinition; import org.apache.flex.compiler.definitions.ITypeDefinition; +import org.apache.flex.compiler.definitions.IVariableDefinition; import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens; import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter; import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter; @@ -61,8 +63,33 @@ public class PackageHeaderEmitter extends JSSubEmitter implements IASScope containedScope = definition.getContainedScope(); ITypeDefinition type = EmitterUtils.findType(containedScope .getAllLocalDefinitions()); - if (type == null) + String qname = null; + if (type != null) + { + qname = type.getQualifiedName(); + } + if (qname == null) + { + IFunctionDefinition fn = EmitterUtils.findFunction(containedScope + .getAllLocalDefinitions()); + if(fn != null) + { + qname = fn.getQualifiedName(); + } + } + if (qname == null) + { + IVariableDefinition variable = EmitterUtils.findVariable(containedScope + .getAllLocalDefinitions()); + if(variable != null) + { + qname = variable.getQualifiedName(); + } + } + if (qname == null) + { return; + } FlexJSProject project = (FlexJSProject) getProject(); List<File> sourcePaths = project.getSourcePath(); @@ -77,7 +104,7 @@ public class PackageHeaderEmitter extends JSSubEmitter implements writeNewline("/**"); writeNewline(" * Generated by Apache Flex Cross-Compiler from " + sourceName); - writeNewline(" * " + type.getQualifiedName()); + writeNewline(" * " + qname); writeNewline(" *"); writeNewline(" * @fileoverview"); writeNewline(" *"); @@ -91,7 +118,7 @@ public class PackageHeaderEmitter extends JSSubEmitter implements write(JSGoogEmitterTokens.GOOG_PROVIDE); write(ASEmitterTokens.PAREN_OPEN); write(ASEmitterTokens.SINGLE_QUOTE); - write(getEmitter().formatQualifiedName(type.getQualifiedName())); + write(getEmitter().formatQualifiedName(qname)); write(ASEmitterTokens.SINGLE_QUOTE); write(ASEmitterTokens.PAREN_CLOSE); writeNewline(ASEmitterTokens.SEMICOLON);
