You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ms...@apache.org on 2013/01/11 00:24:25 UTC

svn commit: r1431728 - in /flex/whiteboard/mschmalle/falconjx: compiler.jx.tests/src/org/apache/flex/compiler/internal/as/codegen/ compiler.jx/src/org/apache/flex/compiler/as/codegen/ compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/

Author: mschmalle
Date: Thu Jan 10 23:24:25 2013
New Revision: 1431728

URL: http://svn.apache.org/viewvc?rev=1431728&view=rev
Log:
Flex:FalconJx:
- Added Class namespace member tests, put emitNamepsace() in the IASEmitter API

Modified:
    flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/compiler/internal/as/codegen/TestFieldMembers.java
    flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/as/codegen/IASEmitter.java
    flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASBlockWalker.java
    flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASEmitter.java

Modified: flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/compiler/internal/as/codegen/TestFieldMembers.java
URL: http://svn.apache.org/viewvc/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/compiler/internal/as/codegen/TestFieldMembers.java?rev=1431728&r1=1431727&r2=1431728&view=diff
==============================================================================
--- flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/compiler/internal/as/codegen/TestFieldMembers.java (original)
+++ flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/compiler/internal/as/codegen/TestFieldMembers.java Thu Jan 10 23:24:25 2013
@@ -19,6 +19,8 @@
 
 package org.apache.flex.compiler.internal.as.codegen;
 
+import org.apache.flex.compiler.tree.as.IFileNode;
+import org.apache.flex.compiler.tree.as.INamespaceNode;
 import org.apache.flex.compiler.tree.as.IVariableNode;
 import org.junit.Test;
 
@@ -162,4 +164,41 @@ public class TestFieldMembers extends Te
         visitor.visitVariable(node);
         assertOut("mx_internal static const foo:int = 420");
     }
+    
+    //--------------------------------------------------------------------------
+    // Namespace
+    //--------------------------------------------------------------------------
+
+    @Test
+    public void testNamespace()
+    {
+        INamespaceNode node = getNamespace("namespace ns = \"http://whatever\";");
+        visitor.visitNamespace(node);
+        assertOut("namespace ns = \"http://whatever\"");
+    }
+
+    @Test
+    public void testNamespace_public()
+    {
+        INamespaceNode node = getNamespace("public namespace ns = \"http://whatever\";");
+        visitor.visitNamespace(node);
+        assertOut("public namespace ns = \"http://whatever\"");
+    }
+
+    @Test
+    public void testNamespace_protected()
+    {
+        INamespaceNode node = getNamespace("protected namespace ns = \"http://whatever\";");
+        visitor.visitNamespace(node);
+        assertOut("protected namespace ns = \"http://whatever\"");
+    }
+    
+    protected INamespaceNode getNamespace(String code)
+    {
+        String source = "package {public class A {" + code + "}}";
+        IFileNode node = getFileNode(source);
+        INamespaceNode child = (INamespaceNode) findFirstDescendantOfType(node,
+                INamespaceNode.class);
+        return child;
+    }
 }

Modified: flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/as/codegen/IASEmitter.java
URL: http://svn.apache.org/viewvc/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/as/codegen/IASEmitter.java?rev=1431728&r1=1431727&r2=1431728&view=diff
==============================================================================
--- flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/as/codegen/IASEmitter.java (original)
+++ flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/as/codegen/IASEmitter.java Thu Jan 10 23:24:25 2013
@@ -28,6 +28,7 @@ import org.apache.flex.compiler.tree.as.
 import org.apache.flex.compiler.tree.as.IFunctionNode;
 import org.apache.flex.compiler.tree.as.IGetterNode;
 import org.apache.flex.compiler.tree.as.IInterfaceNode;
+import org.apache.flex.compiler.tree.as.INamespaceNode;
 import org.apache.flex.compiler.tree.as.IPackageNode;
 import org.apache.flex.compiler.tree.as.IParameterNode;
 import org.apache.flex.compiler.tree.as.ISetterNode;
@@ -50,7 +51,7 @@ public interface IASEmitter
     IDocEmitter getDocEmitter();
 
     void setDocEmitter(IDocEmitter value);
-    
+
     /**
      * Writes a string to the writer.
      * 
@@ -155,6 +156,13 @@ public interface IASEmitter
     void emitSetAccessor(ISetterNode node);
 
     void emitParameter(IParameterNode node);
+    
+    /**
+     * Emit a namespace member.
+     * 
+     * @param node The {@link INamespaceNode} class member.
+     */
+    void emitNamespace(INamespaceNode node);
 
     //--------------------------------------------------------------------------
     // Expressions

Modified: flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASBlockWalker.java
URL: http://svn.apache.org/viewvc/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASBlockWalker.java?rev=1431728&r1=1431727&r2=1431728&view=diff
==============================================================================
--- flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASBlockWalker.java (original)
+++ flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASBlockWalker.java Thu Jan 10 23:24:25 2013
@@ -26,7 +26,6 @@ import org.apache.flex.compiler.as.codeg
 import org.apache.flex.compiler.definitions.IClassDefinition;
 import org.apache.flex.compiler.definitions.IDefinition;
 import org.apache.flex.compiler.definitions.IInterfaceDefinition;
-import org.apache.flex.compiler.internal.definitions.ClassDefinition;
 import org.apache.flex.compiler.internal.semantics.SemanticUtils;
 import org.apache.flex.compiler.internal.tree.as.BaseLiteralContainerNode;
 import org.apache.flex.compiler.internal.tree.as.ContainerNode;
@@ -258,7 +257,7 @@ public class ASBlockWalker implements IA
     public void visitNamespace(INamespaceNode node)
     {
         debug("visitNamespace()");
-        // TODO (mschmalle) visitNamespace()
+        emitter.emitNamespace(node);
     }
 
     @Override

Modified: flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASEmitter.java
URL: http://svn.apache.org/viewvc/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASEmitter.java?rev=1431728&r1=1431727&r2=1431728&view=diff
==============================================================================
--- flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASEmitter.java (original)
+++ flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASEmitter.java Thu Jan 10 23:24:25 2013
@@ -31,7 +31,6 @@ import org.apache.flex.compiler.constant
 import org.apache.flex.compiler.definitions.IDefinition;
 import org.apache.flex.compiler.definitions.IFunctionDefinition;
 import org.apache.flex.compiler.definitions.IVariableDefinition;
-import org.apache.flex.compiler.definitions.references.INamespaceReference;
 import org.apache.flex.compiler.internal.tree.as.ChainedVariableNode;
 import org.apache.flex.compiler.internal.tree.as.FunctionNode;
 import org.apache.flex.compiler.internal.tree.as.FunctionObjectNode;
@@ -47,6 +46,7 @@ import org.apache.flex.compiler.tree.as.
 import org.apache.flex.compiler.tree.as.IGetterNode;
 import org.apache.flex.compiler.tree.as.IInterfaceNode;
 import org.apache.flex.compiler.tree.as.IKeywordNode;
+import org.apache.flex.compiler.tree.as.INamespaceNode;
 import org.apache.flex.compiler.tree.as.IPackageNode;
 import org.apache.flex.compiler.tree.as.IParameterNode;
 import org.apache.flex.compiler.tree.as.IScopedNode;
@@ -435,7 +435,7 @@ public class ASEmitter implements IASEmi
 
         if (!(node instanceof ChainedVariableNode))
         {
-            emitNamespace2(node);
+            emitNamespaceIdentifier(node);
             emitModifiers(definition);
             emitMemberKeyword(node);
         }
@@ -499,7 +499,7 @@ public class ASEmitter implements IASEmi
 
         IFunctionDefinition definition = node.getDefinition();
 
-        emitNamespace2(node);
+        emitNamespaceIdentifier(node);
         emitModifiers(definition);
         emitMemberKeyword(node);
 
@@ -563,25 +563,30 @@ public class ASEmitter implements IASEmi
     // 
     //--------------------------------------------------------------------------
 
-    protected void emitNamespace2(IDefinitionNode node)
+    @Override
+    public void emitNamespace(INamespaceNode node)
     {
-        String namespace = node.getNamespace();
-        if (namespace != null && !namespace.equals(IASKeywordConstants.INTERNAL))
-        {
-            write(namespace);
-            write(SPACE);
-        }
+        emitNamespaceIdentifier(node);
+        writeToken(IASKeywordConstants.NAMESPACE);
+        write(SPACE);
+        emitMemberName(node);
+        write(SPACE);
+        write("=");
+        write(SPACE);
+        getWalker().walk(node.getNamespaceURINode());
     }
 
-    protected void emitNamespace(IDefinition definition)
+    //--------------------------------------------------------------------------
+    // 
+    //--------------------------------------------------------------------------
+
+    protected void emitNamespaceIdentifier(IDefinitionNode node)
     {
-        // namespace (public, protected, private, foo_bar)
-        // TODO (mschmalle) figure out what to do if there is an explicit internal
-        // right now if it's internal, code not produced (implied)
-        if (!definition.isInternal())
+        String namespace = node.getNamespace();
+        if (namespace != null
+                && !namespace.equals(IASKeywordConstants.INTERNAL))
         {
-            INamespaceReference reference = definition.getNamespaceReference();
-            write(reference.getBaseName());
+            write(namespace);
             write(SPACE);
         }
     }
@@ -738,4 +743,5 @@ public class ASEmitter implements IASEmi
         write(SPACE);
         getWalker().walk(node.getRightOperandNode());
     }
+
 }