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 19:54:14 UTC
svn commit: r1425084 - 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 18:54:14 2012
New Revision: 1425084
URL: http://svn.apache.org/viewvc?rev=1425084&view=rev
Log:
Flex:FalconJx
- Class production implemented, final, extends and implements simple and qualified names
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=1425084&r1=1425083&r2=1425084&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 18:54:14 2012
@@ -19,6 +19,8 @@
package org.apache.flex.js.internal.driver;
+import org.apache.flex.compiler.tree.as.IClassNode;
+import org.apache.flex.compiler.tree.as.IFileNode;
import org.junit.Test;
/**
@@ -34,8 +36,91 @@ public class TestClass extends TestWalke
//--------------------------------------------------------------------------
@Test
- public void testGetAccessor()
+ public void testSimple()
{
+ IClassNode node = getClassNode("public class A{}");
+ visitor.visitClass(node);
+ assertOut("public class A {\n}");
+ }
+
+ @Test
+ public void testSimpleInternal()
+ {
+ IClassNode node = getClassNode("internal class A{}");
+ visitor.visitClass(node);
+ assertOut("internal class A {\n}");
+ }
+
+ @Test
+ public void testSimpleFinal()
+ {
+ IClassNode node = getClassNode("public final class A{}");
+ visitor.visitClass(node);
+ assertOut("public final class A {\n}");
+ }
+
+ @Test
+ public void testSimpleExtends()
+ {
+ IClassNode node = getClassNode("public class A extends B {}");
+ visitor.visitClass(node);
+ assertOut("public class A extends B {\n}");
+ }
+
+ @Test
+ public void testSimpleImplements()
+ {
+ IClassNode node = getClassNode("public class A implements IA {}");
+ visitor.visitClass(node);
+ assertOut("public class A implements IA {\n}");
+ }
+
+ @Test
+ public void testSimpleImplementsMultiple()
+ {
+ IClassNode node = getClassNode("public class A implements IA, IB, IC {}");
+ visitor.visitClass(node);
+ assertOut("public class A implements IA, IB, IC {\n}");
+ }
+
+ @Test
+ public void testSimpleExtendsImplements()
+ {
+ IClassNode node = getClassNode("public class A extends B implements IA {}");
+ visitor.visitClass(node);
+ assertOut("public class A extends B implements IA {\n}");
+ }
+
+ @Test
+ public void testSimpleExtendsImplementsMultiple()
+ {
+ IClassNode node = getClassNode("public class A extends B implements IA, IB, IC {}");
+ visitor.visitClass(node);
+ assertOut("public class A extends B implements IA, IB, IC {\n}");
+ }
+
+ @Test
+ public void testSimpleFinalExtendsImplementsMultiple()
+ {
+ IClassNode node = getClassNode("public final class A extends B implements IA, IB, IC {}");
+ visitor.visitClass(node);
+ assertOut("public final class A extends B implements IA, IB, IC {\n}");
+ }
+ @Test
+ public void testQualifiedExtendsImplementsMultiple()
+ {
+ IClassNode node = getClassNode("public class A extends goo.B implements foo.bar.IA, goo.foo.IB, baz.boo.IC {}");
+ visitor.visitClass(node);
+ assertOut("public class A extends goo.B implements foo.bar.IA, goo.foo.IB, baz.boo.IC {\n}");
+ }
+
+ protected IClassNode getClassNode(String code)
+ {
+ String source = "package {" + code + "}";
+ IFileNode node = getFileNode(source);
+ IClassNode child = (IClassNode) findFirstDescendantOfType(node,
+ IClassNode.class);
+ return child;
}
}
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=1425084&r1=1425083&r2=1425084&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 18:54:14 2012
@@ -24,6 +24,7 @@ import java.util.List;
import java.util.Stack;
import org.apache.flex.compiler.as.IASEmitter;
+import org.apache.flex.compiler.common.ASModifier;
import org.apache.flex.compiler.definitions.IClassDefinition;
import org.apache.flex.compiler.definitions.IInterfaceDefinition;
import org.apache.flex.compiler.definitions.ITypeDefinition;
@@ -39,7 +40,6 @@ import org.apache.flex.compiler.problems
import org.apache.flex.compiler.projects.IASProject;
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.IBinaryOperatorNode;
import org.apache.flex.compiler.tree.as.IBlockNode;
import org.apache.flex.compiler.tree.as.ICatchNode;
@@ -259,14 +259,17 @@ public class ASBlockWalker implements IA
{
debug("visitPackage()");
emitter.write("package");
+
String name = node.getQualifiedName();
if (name != null && !name.equals(""))
{
emitter.write(" ");
- emitter.write(name);
+ walk(node.getNameExpressionNode());
}
+
emitter.write(" ");
emitter.write("{");
+
ITypeNode tnode = findTypeNode(node);
if (tnode != null)
{
@@ -274,6 +277,7 @@ public class ASBlockWalker implements IA
emitter.write("\n");
walk(tnode); // IClassNode | IInterfaceNode
}
+
emitter.indentPop();
emitter.write("\n");
emitter.write("}");
@@ -286,16 +290,47 @@ public class ASBlockWalker implements IA
debug("visitClass()");
- emitter.write("public");
+ emitter.write(node.getNamespace());
emitter.write(" ");
+
+ if (node.hasModifier(ASModifier.FINAL))
+ {
+ emitter.write("final");
+ emitter.write(" ");
+ }
emitter.write("class");
emitter.write(" ");
- emitter.write(typeDefinition.getBaseName());
+ walk(node.getNameExpressionNode());
emitter.write(" ");
- emitter.write("{");
- // emitter.emitProvide(typeDefinition);
- // emitter.emitRequire(typeDefinition);
+ IExpressionNode bnode = node.getBaseClassExpressionNode();
+ if (bnode != null)
+ {
+ emitter.write("extends");
+ emitter.write(" ");
+ walk(bnode);
+ emitter.write(" ");
+ }
+
+ IExpressionNode[] inodes = node.getImplementedInterfaceNodes();
+ final int ilen = inodes.length;
+ if (ilen != 0)
+ {
+ emitter.write("implements");
+ emitter.write(" ");
+ for (int i = 0; i < ilen; i++)
+ {
+ walk(inodes[i]);
+ if (i < ilen - 1)
+ {
+ emitter.write(",");
+ emitter.write(" ");
+ }
+ }
+ emitter.write(" ");
+ }
+
+ emitter.write("{");
// fields, methods, namespaces
final IDefinitionNode[] members = node.getAllMemberNodes();
@@ -303,18 +338,19 @@ 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
}
-
- // emitter.emitConstructor(currentConstructor);
- // emitter.emitInherits(typeDefinition, project);
-
- emitFields(members);
- emitMethods(members);
+
+ // TODO (mschmalle) Check to see if the node order is the order of member parsed
+ for (IDefinitionNode mnode : members)
+ {
+ walk(mnode);
+ }
emitter.indentPop();
}
@@ -1080,33 +1116,6 @@ public class ASBlockWalker implements IA
//
//--------------------------------------------------------------------------
- protected void emitFields(IDefinitionNode[] members)
- {
- for (IDefinitionNode node : members)
- {
- if (node instanceof IVariableNode
- && !(node instanceof IAccessorNode))
- {
- walk(node);
- }
- }
- }
-
- protected void emitMethods(IDefinitionNode[] members)
- {
- for (IDefinitionNode node : members)
- {
- if (node instanceof IFunctionNode)
- {
- IFunctionNode fnode = (IFunctionNode) node;
- if (!fnode.isConstructor())
- walk(node);
- else
- visitConstructor(fnode);
- }
- }
- }
-
protected IFunctionNode getConstructor(IDefinitionNode[] members)
{
for (IDefinitionNode node : members)