Flex:FalconJx
- From this commit and previous, Class and Interface now produce valid AS3 source code with members.
- The basic framework will now produce a package, class, interface, constant, field, accessor, method, constructor, blocks, statements and expressions

git-svn-id: https://svn.apache.org/repos/asf/incubator/flex/whiteboard@1425164 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/driver/TestInterface.java b/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/driver/TestInterface.java
index e576e70..c7298c0 100644
--- a/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/driver/TestInterface.java
+++ b/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/driver/TestInterface.java
@@ -66,7 +66,43 @@
         visitor.visitInterface(node);
         assertOut("public interface IA extends foo.bar.IB, baz.goo.IC, foo.ID {\n}");
     }
-    
+
+    @Test
+    public void testAccessors()
+    {
+        IInterfaceNode node = getInterfaceNode("public interface IA {"
+                + "function get foo1():Object;"
+                + "function set foo1(value:Object):void;}");
+        visitor.visitInterface(node);
+        assertOut("public interface IA {\n\tfunction get foo1():Object;\n\t"
+                + "function set foo1(value:Object):void;\n}");
+    }
+
+    @Test
+    public void testMethods()
+    {
+        IInterfaceNode node = getInterfaceNode("public interface IA {"
+                + "function foo1():Object;"
+                + "function foo1(value:Object):void;}");
+        visitor.visitInterface(node);
+        assertOut("public interface IA {\n\tfunction foo1():Object;\n\t"
+                + "function foo1(value:Object):void;\n}");
+    }
+
+    @Test
+    public void testAccessorsMethods()
+    {
+        IInterfaceNode node = getInterfaceNode("public interface IA {"
+                + "function get foo1():Object;"
+                + "function set foo1(value:Object):void;"
+                + "function baz1():Object;"
+                + "function baz2(value:Object):void;}");
+        visitor.visitInterface(node);
+        assertOut("public interface IA {\n\tfunction get foo1():Object;"
+                + "\n\tfunction set foo1(value:Object):void;\n\tfunction baz1()"
+                + ":Object;\n\tfunction baz2(value:Object):void;\n}");
+    }
+
     protected IInterfaceNode getInterfaceNode(String code)
     {
         String source = "package {" + code + "}";
diff --git a/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASEmitter.java b/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASEmitter.java
index 04bf928..a894135 100644
--- a/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASEmitter.java
+++ b/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASEmitter.java
@@ -34,6 +34,7 @@
 import org.apache.flex.compiler.internal.tree.as.FunctionNode;
 import org.apache.flex.compiler.internal.tree.as.FunctionObjectNode;
 import org.apache.flex.compiler.problems.ICompilerProblem;
+import org.apache.flex.compiler.tree.ASTNodeID;
 import org.apache.flex.compiler.tree.as.IASNode;
 import org.apache.flex.compiler.tree.as.IAccessorNode;
 import org.apache.flex.compiler.tree.as.IDefinitionNode;
@@ -272,7 +273,11 @@
         emitMemberName(node);
         emitParamters(node.getParameterNodes());
         emitType(node.getReturnTypeNode());
-        emitMethodScope(node.getScopedNode());
+        if (node.getParent().getParent().getNodeID() == ASTNodeID.ClassID)
+        {
+            emitMethodScope(node.getScopedNode());
+        }
+
         // the client such as IASBlockWalker is responsible for the 
         // semi-colon and newline handling
     }
@@ -315,7 +320,7 @@
     //--------------------------------------------------------------------------
     // 
     //--------------------------------------------------------------------------
-    
+
     protected void emitNamespace2(IDefinitionNode node)
     {
         String namespace = node.getNamespace();
@@ -325,7 +330,7 @@
             write(" ");
         }
     }
-    
+
     protected void emitNamespace(IDefinition definition)
     {
         // namespace (public, protected, private, foo_bar)
diff --git a/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/ASBlockWalker.java b/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/ASBlockWalker.java
index d75548f..0caa59b 100644
--- a/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/ASBlockWalker.java
+++ b/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/ASBlockWalker.java
@@ -423,9 +423,15 @@
             emitter.write("\n");
 
             // TODO (mschmalle) Check to see if the node order is the order of member parsed
+            final int len = members.length;
+            int i = 0;
             for (IDefinitionNode mnode : members)
             {
                 walk(mnode);
+                emitter.write(";");
+                if (i < len - 1)
+                    emitter.write("\n");
+                i++;
             }
 
             emitter.indentPop();
@@ -472,6 +478,11 @@
             emitter.emitMethod(node);
             return; // TEMP
         }
+        else if (node.getParent().getParent().getNodeID() == ASTNodeID.InterfaceID)
+        {
+            emitter.emitMethod(node);
+            return; // TEMP
+        }
     }
 
     @Override