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 2012/12/21 21:34:28 UTC
svn commit: r1425130 - in /incubator/flex/whiteboard/mschmalle/falconjx:
compiler.jx.tests/src/org/apache/flex/js/internal/driver/TestClass.java
compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/ASBlockWalker.java
Author: mschmalle
Date: Fri Dec 21 20:34:28 2012
New Revision: 1425130
URL: http://svn.apache.org/viewvc?rev=1425130&view=rev
Log:
Flex:FalconJx
- Class member(constant, field, accessor, constructor, method) production with newlines and semi-colons
Modified:
incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/driver/TestClass.java
incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/ASBlockWalker.java
Modified: incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/driver/TestClass.java
URL: http://svn.apache.org/viewvc/incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/driver/TestClass.java?rev=1425130&r1=1425129&r2=1425130&view=diff
==============================================================================
--- incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/driver/TestClass.java (original)
+++ incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/driver/TestClass.java Fri Dec 21 20:34:28 2012
@@ -50,7 +50,7 @@ public class TestClass extends TestWalke
visitor.visitClass(node);
assertOut("internal class A {\n}");
}
-
+
@Test
public void testSimpleFinal()
{
@@ -114,7 +114,90 @@ public class TestClass extends TestWalke
visitor.visitClass(node);
assertOut("public class A extends goo.B implements foo.bar.IA, goo.foo.IB, baz.boo.IC {\n}");
}
+
+ @Test
+ public void testConstructor()
+ {
+ IClassNode node = getClassNode("public class A {public function A(){super('foo', 42);}}");
+ visitor.visitClass(node);
+ assertOut("public class A {\n\tpublic function A() {\n\t\tsuper('foo', 42);\n\t}\n}");
+ }
+
+ @Test
+ public void testFields()
+ {
+ IClassNode node = getClassNode("public class A {public var a:Object;protected var b:String; "
+ + "private var c:int; internal var d:uint; var e:Number}");
+ visitor.visitClass(node);
+ assertOut("public class A {\n\tpublic var a:Object;\n\tprotected var b:String;"
+ + "\n\tprivate var c:int;\n\tvar d:uint;\n\tvar e:Number;\n}");
+ }
+
+ @Test
+ public void testConstants()
+ {
+ IClassNode node = getClassNode("public class A {" +
+ "public static const A:int = 42;" +
+ "protected static const B:Number = 42;" +
+ "private static const C:Number = 42;" +
+ "foo_bar static const C:String = 'me' + 'you';");
+ visitor.visitClass(node);
+ assertOut("public class A {\n\tpublic static const A:int = 42;\n\t" +
+ "protected static const B:Number = 42;\n\tprivate static const " +
+ "C:Number = 42;\n\tfoo_bar static const C:String = 'me' + 'you';\n}");
+ }
+ @Test
+ public void testAccessors()
+ {
+ IClassNode node = getClassNode("public class A {"
+ + "public function get foo1():Object{return null;}"
+ + "public function set foo1(value:Object):void{}"
+ + "protected function get foo2():Object{return null;}"
+ + "protected function set foo2(value:Object):void{}"
+ + "private function get foo3():Object{return null;}"
+ + "private function set foo3(value:Object):void{}"
+ + "internal function get foo5():Object{return null;}"
+ + "internal function set foo5(value:Object):void{}"
+ + "foo_bar function get foo6():Object{return null;}"
+ + "foo_bar function set foo6(value:Object):void{}" + "}");
+ visitor.visitClass(node);
+ assertOut("public class A {\n\tpublic function get foo1():Object {"
+ + "\n\t\treturn null;\n\t}\n\tpublic function set foo1(value:Object)"
+ + ":void {\n\t}\n\tprotected function get foo2():Object {\n\t\treturn "
+ + "null;\n\t}\n\tprotected function set foo2(value:Object):void "
+ + "{\n\t}\n\tprivate function get foo3():Object {\n\t\treturn null;"
+ + "\n\t}\n\tprivate function set foo3(value:Object):void {\n\t}\n\t"
+ + "function get foo5():Object {\n\t\treturn null;\n\t}\n\tfunction set "
+ + "foo5(value:Object):void {\n\t}\n\tfoo_bar function get foo6():Object "
+ + "{\n\t\treturn null;\n\t}\n\tfoo_bar function set "
+ + "foo6(value:Object):void {\n\t}\n}");
+ }
+
+ @Test
+ public void testMethods()
+ {
+ IClassNode node = getClassNode("public class A {"
+ + "public function foo1():Object{return null;}"
+ + "public final function foo1a():Object{return null;}"
+ + "override public function foo1b():Object{return super.foo1b();}"
+ + "protected function foo2(value:Object):void{}"
+ + "private function foo3(value:Object):void{}"
+ + "internal function foo5(value:Object):void{}"
+ + "foo_bar function foo6(value:Object):void{}"
+ + "public static function foo7(value:Object):void{}"
+ + "foo_bar static function foo7(value:Object):void{}" + "}");
+ visitor.visitClass(node);
+ assertOut("public class A {\n\tpublic function foo1():Object {\n\t\treturn "
+ + "null;\n\t}\n\tpublic final function foo1a():Object {\n\t\treturn "
+ + "null;\n\t}\n\tpublic override function foo1b():Object {\n\t\treturn "
+ + "super.foo1b();\n\t}\n\tprotected function foo2(value:Object):void "
+ + "{\n\t}\n\tprivate function foo3(value:Object):void {\n\t}\n\tfunction "
+ + "foo5(value:Object):void {\n\t}\n\tfoo_bar function foo6(value:Object"
+ + "):void {\n\t}\n\tpublic static function foo7(value:Object):void {\n\t}"
+ + "\n\tfoo_bar static function foo7(value:Object):void {\n\t}\n}");
+ }
+
protected IClassNode getClassNode(String code)
{
String source = "package {" + code + "}";
Modified: incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/ASBlockWalker.java
URL: http://svn.apache.org/viewvc/incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/ASBlockWalker.java?rev=1425130&r1=1425129&r2=1425130&view=diff
==============================================================================
--- incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/ASBlockWalker.java (original)
+++ incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/ASBlockWalker.java Fri Dec 21 20:34:28 2012
@@ -338,18 +338,38 @@ public class ASBlockWalker implements IA
{
emitter.indentPush();
emitter.write("\n");
-
+
// there is always an implicit constructor if not explicit
currentConstructor = getConstructor(members);
if (currentConstructor == null)
{
// TODO (mschmalle) handle null constructor
}
-
+
// 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);
+ if (mnode.getNodeID() == ASTNodeID.VariableID)
+ {
+ emitter.write(";");
+ if (i < len - 1)
+ emitter.write("\n");
+ }
+ else if (mnode.getNodeID() == ASTNodeID.FunctionID)
+ {
+ if (i < len - 1)
+ emitter.write("\n");
+ }
+ else if (mnode.getNodeID() == ASTNodeID.GetterID
+ || mnode.getNodeID() == ASTNodeID.SetterID)
+ {
+ if (i < len - 1)
+ emitter.write("\n");
+ }
+ i++;
}
emitter.indentPop();
@@ -367,15 +387,15 @@ public class ASBlockWalker implements IA
{
debug("visitInterface()");
typeDefinition = node.getDefinition();
-
+
emitter.write(node.getNamespace());
emitter.write(" ");
-
+
emitter.write("interface");
emitter.write(" ");
walk(node.getNameExpressionNode());
emitter.write(" ");
-
+
IExpressionNode[] inodes = node.getExtendedInterfaceNodes();
final int ilen = inodes.length;
if (ilen != 0)
@@ -393,15 +413,15 @@ public class ASBlockWalker implements IA
}
emitter.write(" ");
}
-
+
emitter.write("{");
-
+
final IDefinitionNode[] members = node.getAllMemberDefinitionNodes();
if (members.length > 0)
{
emitter.indentPush();
emitter.write("\n");
-
+
// TODO (mschmalle) Check to see if the node order is the order of member parsed
for (IDefinitionNode mnode : members)
{
@@ -410,10 +430,10 @@ public class ASBlockWalker implements IA
emitter.indentPop();
}
-
+
emitter.write("\n");
emitter.write("}");
-
+
typeDefinition = null;
}
@@ -521,9 +541,9 @@ public class ASBlockWalker implements IA
{
if (inContext(TraverseContext.SUPER_ARGUMENTS))
{
- emitter.write("this");
- if (nodes.length > 0)
- emitter.write(", ");
+ //emitter.write("this");
+ //if (nodes.length > 0)
+ // emitter.write(", ");
}
int len = nodes.length;