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