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

Reply via email to