I haven't done thorough research, but I think this change is causing the
last remaining failure in the Falcon build.  The failing case is
org.apache.flex.compiler.internal.codegen.js.vf2js.TestVF2JSFile.testVersio
n in compiler.jx.tests.  The test case is dealing with an variable defined
in an included file which has means the parent of the variable node will
be a file node and look a lot like a file-level definition when it isn't.

-Alex

On 1/11/16, 11:54 AM, "joshtynj...@apache.org" <joshtynj...@apache.org>
wrote:

>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 <joshtynj...@apache.org>
>Authored: Mon Jan 11 11:54:37 2016 -0800
>Committer: Josh Tynjala <joshtynj...@apache.org>
>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/ASBlockWalk
>er.java 
>b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASBlockWalk
>er.java
>index fec44cc..b405bb0 100644
>--- 
>a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASBlockWalk
>er.java
>+++ 
>b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASBlockWalk
>er.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/JSFl
>exJSEmitter.java 
>b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFl
>exJSEmitter.java
>index a101a4c..1de63fe 100644
>--- 
>a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFl
>exJSEmitter.java
>+++ 
>b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFl
>exJSEmitter.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/PackageHeaderEmitte
>r.java
>----------------------------------------------------------------------
>diff --git 
>a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageH
>eaderEmitter.java 
>b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageH
>eaderEmitter.java
>index d0e161b..21d3c01 100644
>--- 
>a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageH
>eaderEmitter.java
>+++ 
>b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageH
>eaderEmitter.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