4 new revisions:
Revision: f3d8ffc4dc
Author: Alex Eagle <
alex...@google.com>
Date: Tue Apr 20 08:34:11 2010
Log: Replace type fields in block with inheritance. Add a mutation
operatio...
http://code.google.com/p/noop/source/detail?r=f3d8ffc4dc
Revision: f30812c243
Author: Alex Eagle <
alex...@google.com>
Date: Wed Apr 21 09:10:37 2010
Log: Add arithmetic example and refactor the main/test for dumping the
work...
http://code.google.com/p/noop/source/detail?r=f30812c243
Revision: 4c2c3c43a3
Author: Alex Eagle <
alex...@google.com>
Date: Wed Apr 21 09:23:46 2010
Log: Add comment as a language element.
http://code.google.com/p/noop/source/detail?r=4c2c3c43a3
Revision: b132b5ae91
Author: Alex Eagle <
alex...@google.com>
Date: Thu Apr 22 02:43:30 2010
Log: Add control flow example, with loop construct
http://code.google.com/p/noop/source/detail?r=b132b5ae91
==============================================================================
Revision: f3d8ffc4dc
Author: Alex Eagle <
alex...@google.com>
Date: Tue Apr 20 08:34:11 2010
Log: Replace type fields in block with inheritance. Add a mutation
operation which just adds an Edge to the graph, and use that instead of
storing extra edges in the NewNodeOperation. Make sure we visit all nodes
now, and get both the outline and DOT views to look right.
http://code.google.com/p/noop/source/detail?r=f3d8ffc4dc
Added:
/core/src/main/java/noop/model/Function.java
/core/src/main/java/noop/model/Method.java
/core/src/main/java/noop/model/UnitTest.java
/core/src/main/java/noop/operations/NewEdgeOperation.java
Modified:
/core/src/main/java/noop/graph/Controller.java
/core/src/main/java/noop/graph/DotGraphPrintingVisitor.java
/core/src/main/java/noop/graph/Edge.java
/core/src/main/java/noop/graph/ModelVisitor.java
/core/src/main/java/noop/graph/OutlinePrintingVisitor.java
/core/src/main/java/noop/graph/PrintingVisitor.java
/core/src/main/java/noop/model/Assignment.java
/core/src/main/java/noop/model/Block.java
/core/src/main/java/noop/model/Clazz.java
/core/src/main/java/noop/model/Documentation.java
/core/src/main/java/noop/model/IdentifierDeclaration.java
/core/src/main/java/noop/model/IntegerLiteral.java
/core/src/main/java/noop/model/LanguageElement.java
/core/src/main/java/noop/model/Library.java
/core/src/main/java/noop/model/MethodInvocation.java
/core/src/main/java/noop/model/Parameter.java
/core/src/main/java/noop/model/Project.java
/core/src/main/java/noop/model/Return.java
/core/src/main/java/noop/model/StringLiteral.java
/core/src/main/java/noop/operations/NewNodeOperation.java
/core/src/main/java/noop/stdlib/StandardLibraryBuilder.java
/core/src/test/java/noop/graph/ControllerTest.java
/core/src/test/java/noop/graph/HelloWorldExampleMain.java
=======================================
--- /dev/null
+++ /core/src/main/java/noop/model/Function.java Tue Apr 20 08:34:11 2010
@@ -0,0 +1,19 @@
+package noop.model;
+
+import noop.graph.ModelVisitor;
+
+/**
+ * @author
alex...@google.com (Alex Eagle)
+ */
+public class Function extends Block<Function> {
+
+ public Function(String name, Clazz returnType) {
+ super(name, returnType);
+ }
+
+ @Override
+ public void accept(ModelVisitor v) {
+ v.visit(this);
+ super.accept(v);
+ }
+}
=======================================
--- /dev/null
+++ /core/src/main/java/noop/model/Method.java Tue Apr 20 08:34:11 2010
@@ -0,0 +1,18 @@
+package noop.model;
+
+import noop.graph.ModelVisitor;
+
+/**
+ * @author
alex...@google.com (Alex Eagle)
+ */
+public class Method extends Block<Method> {
+ public Method(String name, Clazz returnType) {
+ super(name, returnType);
+ }
+
+ @Override
+ public void accept(ModelVisitor v) {
+ v.visit(this);
+ super.accept(v);
+ }
+}
=======================================
--- /dev/null
+++ /core/src/main/java/noop/model/UnitTest.java Tue Apr 20 08:34:11 2010
@@ -0,0 +1,26 @@
+package noop.model;
+
+import noop.graph.ModelVisitor;
+
+/**
+ * @author
alex...@google.com (Alex Eagle)
+ */
+public class UnitTest extends Block<UnitTest> {
+ public UnitTest(String name) {
+ super(name, null);
+ }
+
+ @Override
+ public boolean adoptChild(LanguageElement child) {
+ if (child instanceof Parameter) {
+ return false;
+ }
+ return super.adoptChild(child);
+ }
+
+ @Override
+ public void accept(ModelVisitor v) {
+ v.visit(this);
+ super.accept(v);
+ }
+}
=======================================
--- /dev/null
+++ /core/src/main/java/noop/operations/NewEdgeOperation.java Tue Apr 20
08:34:11 2010
@@ -0,0 +1,19 @@
+package noop.operations;
+
+import noop.graph.Edge.EdgeType;
+import noop.model.LanguageElement;
+
+/**
+ * @author
alex...@google.com (Alex Eagle)
+ */
+public class NewEdgeOperation implements MutationOperation {
+ public final LanguageElement src;
+ public final EdgeType type;
+ public final LanguageElement dest;
+
+ public NewEdgeOperation(LanguageElement src, EdgeType type,
LanguageElement dest) {
+ this.src = src;
+ this.type = type;
+ this.dest = dest;
+ }
+}
=======================================
--- /core/src/main/java/noop/graph/Controller.java Mon Apr 19 10:04:58 2010
+++ /core/src/main/java/noop/graph/Controller.java Tue Apr 20 08:34:11 2010
@@ -16,17 +16,13 @@
package noop.graph;
-import noop.graph.Edge;
import noop.graph.Edge.EdgeType;
-import noop.model.Clazz;
import noop.model.LanguageElement;
-import noop.graph.Workspace;
import noop.operations.EditNodeOperation;
import noop.operations.MutationOperation;
+import noop.operations.NewEdgeOperation;
import noop.operations.NewNodeOperation;
-import java.util.Map.Entry;
-
/**
* @author
alex...@google.com (Alex Eagle)
*/
@@ -36,16 +32,6 @@
public Controller(Workspace workspace) {
this.workspace = workspace;
}
-
- private void addEdge(int newNodeId, LanguageElement destElement,
EdgeType edgeType, boolean backwards) {
- int destId = workspace.elements.indexOf(destElement);
- if (destId < 0) {
- throw new IllegalStateException(String.format("Cannot add edge [%s
-> %s] due to non-existant dest %s",
- newNodeId, destId, destElement));
- }
- Edge newEdge = backwards ? new Edge(destId, edgeType, newNodeId) : new
Edge(newNodeId, edgeType, destId);
- workspace.edges.add(newEdge);
- }
public void apply(NewNodeOperation operation) {
int nextNodeId = workspace.elements.size();
@@ -55,13 +41,14 @@
throw new IllegalArgumentException("Element " + operation.newElement
+ " not allowed as child of " + container);
}
- addEdge(nextNodeId, container, EdgeType.CONTAIN, true);
- workspace.elements.add(operation.newElement);
- for (Entry<EdgeType, LanguageElement> edgeTypeLanguageNodeEntry :
operation.edges.entries()) {
- LanguageElement destElement = edgeTypeLanguageNodeEntry.getValue();
- EdgeType edgeType = edgeTypeLanguageNodeEntry.getKey();
- addEdge(nextNodeId, destElement, edgeType, false);
- }
+ int destId = workspace.elements.indexOf(container);
+ if (destId < 0) {
+ throw new IllegalStateException(String.format("Cannot add edge [%s
-> %s] due to non-existant dest %s",
+ nextNodeId, destId, container));
+ }
+ Edge newEdge = new Edge(destId, EdgeType.CONTAIN, nextNodeId);
+ workspace.edges.add(newEdge);
+ workspace.elements.add(operation.newElement);
}
public void apply(EditNodeOperation operation) {
@@ -74,6 +61,11 @@
operation.newValue.setPreviousVersion(currentValue);
workspace.elements.set(
operation.id, operation.newValue);
}
+
+ public void apply(NewEdgeOperation operation) {
+ workspace.edges.add(new Edge(workspace.elements.indexOf(operation.src),
+ operation.type, workspace.elements.indexOf(operation.dest)));
+ }
public void applyAll(Iterable<? extends MutationOperation> operations) {
for (MutationOperation operation : operations) {
@@ -86,7 +78,8 @@
apply((NewNodeOperation)operation);
} else if (operation instanceof EditNodeOperation) {
apply((EditNodeOperation)operation);
- }
-
+ } else if (operation instanceof NewEdgeOperation) {
+ apply((NewEdgeOperation)operation);
+ }
}
}
=======================================
--- /core/src/main/java/noop/graph/DotGraphPrintingVisitor.java Mon Apr 19
10:04:58 2010
+++ /core/src/main/java/noop/graph/DotGraphPrintingVisitor.java Tue Apr 20
08:34:11 2010
@@ -16,11 +16,15 @@
package noop.graph;
+import noop.graph.Edge.EdgeType;
import noop.model.*;
import java.io.PrintStream;
+import static com.google.common.base.Join.join;
+import static com.google.common.collect.Iterables.filter;
import static java.lang.System.identityHashCode;
+import static noop.graph.Edge.notContain;
/**
* @author
alex...@google.com (Alex Eagle)
@@ -36,14 +40,24 @@
public void visit(Workspace workspace) {
this.workspace = workspace;
out.format("digraph workspace\n{\n");
- out.format("%s [label=\"%s\", shape=house]\n",
idFor(workspace), "Workspace");
+ print(workspace, "Workspace", "shape=house");
+ }
+
+ private void print(LanguageElement element, String label, String...
additional) {
+ String attrs = join(",", additional);
+ if (additional.length > 0) {
+ attrs = ", " + attrs;
+ }
+ out.format("%s [label=\"%s\"%s]\n", idFor(element), label, attrs);
+ for (Edge edge : filter(workspace.edgesFrom(idFor(element)),
notContain())) {
+ out.format("%d -> %d ", edge.src, edge.dest);
+ out.println("[label=\"" +
edge.type.name().toLowerCase() + "\",
style=dashed]");
+ }
}
@Override
public void visit(Project project) {
- out.format("%s [label=\"%s (%s)\", shape=box]\n",
- idFor(project), project.getName(), project.getNamespace());
-
+ print(project, String.format("%s -> %s", project.getNamespace(),
project.getName()), "shape=box");
out.format("%s [label=\"%s\", shape=none]\n",
identityHashCode(project.getCopyright()),
escape(project.getCopyright()));
out.format("%s -> %s\n", idFor(project),
identityHashCode(project.getCopyright()));
@@ -51,57 +65,58 @@
@Override
public void visit(Library library) {
- out.format("%s [label=\"%s\", shape=hexagon]\n", idFor(library),
library.name);
+ print(library,
library.name, "shape=hexagon");
}
@Override
- public void visit(Block block) {
- out.format("%s [label=\"%s {}\"]\n", idFor(block),
block.name);
- for (Parameter parameter : block.parameters) {
- out.format("%s -> %s [label=param, style=dotted]\n",
- idFor(block), idFor(parameter));
- }
- if (block.returnType != null) {
- out.format("%s -> %s [label=return, style=dotted]\n",
- idFor(block), idFor(block.returnType));
- }
+ public void visit(Method method) {
+ print(method,
method.name + "{}");
+ }
+
+ @Override
+ public void visit(Function function) {
+ print(function,
function.name + "{}");
+ }
+
+ @Override
+ public void visit(UnitTest unitTest) {
+ print(unitTest, "test: " + unitTest.name);
+ }
+
+ @Override
+ public void visit(Assignment assignment) {
+ print(assignment, "assign");
}
@Override
public void visit(IdentifierDeclaration identifierDeclaration) {
- out.format("%s [label=\"%s\"]\n", idFor(identifierDeclaration),
identifierDeclaration.name);
+ print(identifierDeclaration, identifierDeclaration.name);
}
@Override
public void visit(Return aReturn) {
- out.format("%s [label=\"%s\"]\n", idFor(aReturn), "[return]");
- out.format("%s -> %s [label=arg, style=dotted]\n",
- idFor(aReturn), idFor(aReturn.returned));
+ print(aReturn, "[return]");
}
@Override
public void visit(IntegerLiteral integerLiteral) {
- out.format("%s [label=\"%s\"]\n", idFor(integerLiteral),
integerLiteral.value);
+ print(integerLiteral, String.valueOf(integerLiteral.value));
}
@Override
public void visit(Parameter parameter) {
- out.format("%s [label=\"%s\"]\n", idFor(parameter),
parameter.name);
+ print(parameter,
parameter.name);
}
@Override
public void visit(MethodInvocation methodInvocation) {
- out.format("%s [label=\"%s\"]\n", idFor(methodInvocation), "[invoke]");
- for (Expression argument : methodInvocation.arguments) {
- out.format("%s -> %s [label=arg, style=dotted]\n",
- idFor(methodInvocation), idFor(argument));
- }
+ print(methodInvocation, "[invoke]");
}
@Override
public void visit(Documentation documentation) {
- out.format("%s [label=\"%s\", shape=none]\n", idFor(documentation),
escape(documentation.summary));
+ print(documentation, escape(documentation.summary), "shape=none");
}
protected String escape(String value) {
@@ -114,12 +129,12 @@
@Override
public void visit(StringLiteral stringLiteral) {
- out.format("%s [label=\"\\\"%s\\\"\"]\n", idFor(stringLiteral),
stringLiteral.value);
+ print(stringLiteral, "\\\"" + stringLiteral.value + "\\\"");
}
@Override
public void visit(Clazz clazz) {
- out.format("%s [label=\"%s\"]\n", idFor(clazz),
clazz.name);
+ print(clazz,
clazz.name);
}
@Override
@@ -132,14 +147,8 @@
@Override
public void visit(Edge edge) {
- out.format("%d -> %d ", edge.src, edge.dest);
- switch (edge.type) {
- case CONTAIN:
- out.print("\n");
- break;
- default:
- out.println("[label=\"" +
edge.type.name().toLowerCase() + "\",
style=dashed]");
- break;
+ if (edge.type == EdgeType.CONTAIN) {
+ out.format("%d -> %d\n", edge.src, edge.dest);
}
}
}
=======================================
--- /core/src/main/java/noop/graph/Edge.java Mon Apr 19 10:04:58 2010
+++ /core/src/main/java/noop/graph/Edge.java Tue Apr 20 08:34:11 2010
@@ -16,7 +16,6 @@
package noop.graph;
-import com.google.common.base.Nullable;
import com.google.common.base.Predicate;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
@@ -49,7 +48,8 @@
CONTAIN,
OVERRIDE,
TYPEOF,
- TARGET
+ TARGET,
+ ARG
}
public final EdgeType type;
=======================================
--- /core/src/main/java/noop/graph/ModelVisitor.java Mon Apr 19 10:04:58
2010
+++ /core/src/main/java/noop/graph/ModelVisitor.java Tue Apr 20 08:34:11
2010
@@ -30,7 +30,11 @@
public void visit(Workspace workspace) {}
- public void visit(Block block) {}
+ public void visit(Method method) {}
+
+ public void visit(Function function) {}
+
+ public void visit(UnitTest unitTest) {}
public void visit(Project project) {}
=======================================
--- /core/src/main/java/noop/graph/OutlinePrintingVisitor.java Mon Apr 19
10:04:58 2010
+++ /core/src/main/java/noop/graph/OutlinePrintingVisitor.java Tue Apr 20
08:34:11 2010
@@ -43,8 +43,18 @@
}
@Override
- public void visit(Block block) {
- print(block, "%s{}",
block.name);
+ public void visit(Method method) {
+ print(method, "Method %s{}",
method.name);
+ }
+
+ @Override
+ public void visit(Function function) {
+ print(function, "Function %s{}",
function.name);
+ }
+
+ @Override
+ public void visit(UnitTest unitTest) {
+ print(unitTest, "Unit test %s", unitTest.name);
}
@Override
@@ -81,6 +91,11 @@
public void visit(StringLiteral stringLiteral) {
print(stringLiteral, "literal \"%s\"", stringLiteral.value);
}
+
+ @Override
+ public void visit(Return aReturn) {
+ print(aReturn, "return");
+ }
private void print(LanguageElement element, String message, String...
params) {
out.format("%s%s [#%d]", indent(), String.format(message, params),
idFor(element));
=======================================
--- /core/src/main/java/noop/graph/PrintingVisitor.java Mon Apr 19 10:04:58
2010
+++ /core/src/main/java/noop/graph/PrintingVisitor.java Tue Apr 20 08:34:11
2010
@@ -11,13 +11,11 @@
@Override
public void enter(LanguageElement element) {
- System.out.println("Enter " + element);
currentDepth++;
}
@Override
public void leave(LanguageElement element) {
- System.out.println("Leave " + element);
currentDepth--;
}
=======================================
--- /core/src/main/java/noop/model/Assignment.java Fri Apr 16 14:27:28 2010
+++ /core/src/main/java/noop/model/Assignment.java Tue Apr 20 08:34:11 2010
@@ -25,5 +25,6 @@
@Override
public void accept(ModelVisitor v) {
v.visit(this);
+ super.accept(v);
}
}
=======================================
--- /core/src/main/java/noop/model/Block.java Mon Apr 19 10:04:58 2010
+++ /core/src/main/java/noop/model/Block.java Tue Apr 20 08:34:11 2010
@@ -19,28 +19,20 @@
import com.google.common.collect.Lists;
import noop.graph.ModelVisitor;
-import java.util.Collections;
import java.util.List;
-import static java.util.Arrays.asList;
-import static java.util.Collections.emptyList;
-
/**
* @author
alex...@google.com (Alex Eagle)
*/
-public class Block extends LanguageElement<Block> {
+public abstract class Block<T> extends LanguageElement<T> {
public final String name;
public final Clazz returnType;
- public final List<Parameter> parameters = Lists.newArrayList();
- private final List<Expression> statements = Lists.newArrayList();
- public final boolean test;
- public final boolean instance;
-
- private Block(String name, Clazz returnType, boolean isTest, boolean
instance) {
+ protected final List<Parameter> parameters = Lists.newArrayList();
+ protected final List<Expression> statements = Lists.newArrayList();
+
+ public Block(String name, Clazz returnType) {
this.name = name;
this.returnType = returnType;
- this.test = isTest;
- this.instance = instance;
}
@Override
@@ -55,23 +47,9 @@
}
return super.adoptChild(child);
}
-
- public static Block unitTest(String name) {
- return new Block(name, null, true, false);
- }
-
- public static Block function(String name, Clazz returnType) {
- return new Block(name, returnType, false, false);
- }
-
- public static Block method(String name, Clazz returnType) {
- // TODO: should hold a reference to the instance clazz?
- return new Block(name, returnType, false, true);
- }
@Override
public void accept(ModelVisitor v) {
- v.visit(this);
for (Parameter parameter : parameters) {
v.enter(parameter);
parameter.accept(v);
@@ -82,18 +60,11 @@
statement.accept(v);
v.leave(statement);
}
- }
-
- @Override
- public String toString() {
- return "Block " + name;
- }
-
- public boolean isFunction() {
- return !instance;
- }
-
- public boolean isTest() {
- return test;
+ for (UnitTest unitTest : unitTests) {
+ v.enter(unitTest);
+ unitTest.accept(v);
+ v.leave(unitTest);
+ }
+ super.accept(v);
}
}
=======================================
--- /core/src/main/java/noop/model/Clazz.java Mon Apr 19 10:04:58 2010
+++ /core/src/main/java/noop/model/Clazz.java Tue Apr 20 08:34:11 2010
@@ -49,5 +49,6 @@
block.accept(v);
v.leave(block);
}
+ super.accept(v);
}
}
=======================================
--- /core/src/main/java/noop/model/Documentation.java Fri Apr 16 14:27:28
2010
+++ /core/src/main/java/noop/model/Documentation.java Tue Apr 20 08:34:11
2010
@@ -31,5 +31,6 @@
@Override
public void accept(ModelVisitor v) {
v.visit(this);
+ super.accept(v);
}
}
=======================================
--- /core/src/main/java/noop/model/IdentifierDeclaration.java Mon Apr 19
10:04:58 2010
+++ /core/src/main/java/noop/model/IdentifierDeclaration.java Tue Apr 20
08:34:11 2010
@@ -41,5 +41,11 @@
@Override
public void accept(ModelVisitor v) {
v.visit(this);
+ if (initialValue != null) {
+ v.enter(initialValue);
+ initialValue.accept(v);
+ v.leave(initialValue);
+ }
+ super.accept(v);
}
}
=======================================
--- /core/src/main/java/noop/model/IntegerLiteral.java Fri Apr 16 14:27:28
2010
+++ /core/src/main/java/noop/model/IntegerLiteral.java Tue Apr 20 08:34:11
2010
@@ -31,5 +31,6 @@
@Override
public void accept(ModelVisitor v) {
v.visit(this);
+ super.accept(v);
}
}
=======================================
--- /core/src/main/java/noop/model/LanguageElement.java Mon Apr 19 10:04:58
2010
+++ /core/src/main/java/noop/model/LanguageElement.java Tue Apr 20 08:34:11
2010
@@ -27,9 +27,17 @@
*/
public abstract class LanguageElement<T> implements Serializable {
protected Documentation documentation;
- protected Set<Block> unitTests = Sets.newHashSet();
+ protected Set<UnitTest> unitTests = Sets.newHashSet();
protected T previousVersion;
- public abstract void accept(ModelVisitor v);
+
+ public void accept(ModelVisitor v) {
+ if (documentation != null) {
+ v.enter(documentation);
+ documentation.accept(v);
+ v.leave(documentation);
+ }
+ }
+
public T getPreviousVersion() {
return previousVersion;
}
@@ -41,12 +49,10 @@
this.documentation = (Documentation) child;
return true;
}
- if (child instanceof Block) {
- Block block = (Block) child;
- if (block.isTest()) {
- unitTests.add(block);
- return true;
- }
+ if (child instanceof UnitTest) {
+ UnitTest block = (UnitTest) child;
+ unitTests.add(block);
+ return true;
}
return false;
}
=======================================
--- /core/src/main/java/noop/model/Library.java Mon Apr 19 10:04:58 2010
+++ /core/src/main/java/noop/model/Library.java Tue Apr 20 08:34:11 2010
@@ -39,12 +39,10 @@
classes.add((Clazz) child);
return true;
}
- if (child instanceof Block) {
- Block block = (Block) child;
- if (block.isFunction()) {
- functions.add(block);
- return true;
- }
+ if (child instanceof Function) {
+ Function block = (Function) child;
+ functions.add(block);
+ return true;
}
return super.adoptChild(child);
}
@@ -62,5 +60,6 @@
clazz.accept(v);
v.leave(clazz);
}
+ super.accept(v);
}
}
=======================================
--- /core/src/main/java/noop/model/MethodInvocation.java Fri Apr 16
14:27:28 2010
+++ /core/src/main/java/noop/model/MethodInvocation.java Tue Apr 20
08:34:11 2010
@@ -18,24 +18,16 @@
import noop.graph.ModelVisitor;
-import java.util.Arrays;
-import java.util.List;
-
/**
* @author
alex...@google.com (Alex Eagle)
*/
public class MethodInvocation extends Expression<MethodInvocation> {
- public final List<Expression> arguments;
-
- public MethodInvocation(Expression... arguments) {
- this.arguments = Arrays.asList(arguments);
+ public MethodInvocation() {
}
@Override
public void accept(ModelVisitor v) {
v.visit(this);
- for (Expression argument : arguments) {
- argument.accept(v);
- }
+ super.accept(v);
}
}
=======================================
--- /core/src/main/java/noop/model/Parameter.java Mon Apr 19 10:04:58 2010
+++ /core/src/main/java/noop/model/Parameter.java Tue Apr 20 08:34:11 2010
@@ -31,6 +31,7 @@
@Override
public void accept(ModelVisitor v) {
v.visit(this);
+ super.accept(v);
}
@Override
=======================================
--- /core/src/main/java/noop/model/Project.java Mon Apr 19 10:04:58 2010
+++ /core/src/main/java/noop/model/Project.java Tue Apr 20 08:34:11 2010
@@ -89,5 +89,6 @@
library.accept(v);
v.leave(library);
}
+ super.accept(v);
}
}
=======================================
--- /core/src/main/java/noop/model/Return.java Fri Apr 16 14:27:28 2010
+++ /core/src/main/java/noop/model/Return.java Tue Apr 20 08:34:11 2010
@@ -22,15 +22,12 @@
* @author
alex...@google.com (Alex Eagle)
*/
public class Return extends Expression {
- public final Expression returned;
-
- public Return(Expression returned) {
- this.returned = returned;
+ public Return() {
}
@Override
public void accept(ModelVisitor v) {
v.visit(this);
- returned.accept(v);
+ super.accept(v);
}
}
=======================================
--- /core/src/main/java/noop/model/StringLiteral.java Fri Apr 16 14:27:28
2010
+++ /core/src/main/java/noop/model/StringLiteral.java Tue Apr 20 08:34:11
2010
@@ -31,5 +31,6 @@
@Override
public void accept(ModelVisitor v) {
v.visit(this);
+ super.accept(v);
}
}
=======================================
--- /core/src/main/java/noop/operations/NewNodeOperation.java Mon Apr 19
07:04:03 2010
+++ /core/src/main/java/noop/operations/NewNodeOperation.java Tue Apr 20
08:34:11 2010
@@ -16,18 +16,7 @@
package noop.operations;
-import com.google.common.base.Supplier;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Multimap;
-import com.google.common.collect.Multimaps;
import noop.model.LanguageElement;
-import noop.model.Project;
-
-import java.util.Collection;
-import java.util.List;
-
-import static noop.graph.Edge.EdgeType;
/**
* @author
alex...@google.com (Alex Eagle)
@@ -35,12 +24,6 @@
public class NewNodeOperation implements MutationOperation {
public final LanguageElement newElement;
public final LanguageElement container;
- public final Multimap<EdgeType, LanguageElement> edges =
Multimaps.newListMultimap(
- Maps.<EdgeType, Collection<LanguageElement>>newHashMap(), new
Supplier<List<LanguageElement>>() {
- public List<LanguageElement> get() {
- return Lists.newArrayList();
- }
- });
/**
* Create a new node with the given parent
@@ -60,17 +43,4 @@
public NewNodeOperation(LanguageElement newElement) {
this(newElement, null);
}
-
- public NewNodeOperation(LanguageElement newElement, LanguageElement
container,
- EdgeType edgeType, LanguageElement dest) {
- this(newElement, container);
- edges.put(edgeType, dest);
- }
-
- public NewNodeOperation(LanguageElement newElement, LanguageElement
container,
- EdgeType edgeType, LanguageElement dest,
- EdgeType edge2Type, LanguageElement dest2) {
- this(newElement, container, edgeType, dest);
- edges.put(edge2Type, dest2);
- }
-}
+}
=======================================
--- /core/src/main/java/noop/stdlib/StandardLibraryBuilder.java Mon Apr 19
10:04:58 2010
+++ /core/src/main/java/noop/stdlib/StandardLibraryBuilder.java Tue Apr 20
08:34:11 2010
@@ -3,12 +3,12 @@
import com.google.common.collect.Lists;
import noop.model.*;
import noop.operations.MutationOperation;
+import noop.operations.NewEdgeOperation;
import noop.operations.NewNodeOperation;
import java.util.List;
import static noop.graph.Edge.EdgeType.TYPEOF;
-import static noop.model.Block.method;
/**
* @author
alex...@google.com (Alex Eagle)
@@ -41,11 +41,12 @@
consoleClazz = new Clazz("Console");
result.add(new NewNodeOperation(consoleClazz, io));
- printMethod = method("print", voidClazz);
+ printMethod = new Method("print", voidClazz);
result.add(new NewNodeOperation(printMethod, consoleClazz));
Parameter printArg = new Parameter("s");
- result.add(new NewNodeOperation(printArg, printMethod, TYPEOF,
stringClazz));
+ result.add(new NewNodeOperation(printArg, printMethod));
+ result.add(new NewEdgeOperation(printArg, TYPEOF, stringClazz));
intClazz = new Clazz("Integer");
result.add(new NewNodeOperation(intClazz, lang));
=======================================
--- /core/src/test/java/noop/graph/ControllerTest.java Fri Apr 16 14:27:28
2010
+++ /core/src/test/java/noop/graph/ControllerTest.java Tue Apr 20 08:34:11
2010
@@ -18,6 +18,7 @@
import noop.model.*;
import noop.operations.EditNodeOperation;
+import noop.operations.NewEdgeOperation;
import noop.operations.NewNodeOperation;
import org.junit.Before;
import org.junit.Test;
@@ -52,7 +53,8 @@
controller.apply(new NewNodeOperation(stringType, workspace));
LanguageElement newNode = new StringLiteral("yes");
- controller.apply(new NewNodeOperation(newNode, workspace, TYPEOF,
stringType));
+ controller.apply(new NewNodeOperation(newNode, workspace));
+ controller.apply(new NewEdgeOperation(newNode, TYPEOF, stringType));
assertEquals(3, workspace.edges.size());
assertTrue(workspace.edges.contains(new Edge(0, CONTAIN, 1)));
assertTrue(workspace.edges.contains(new Edge(0, CONTAIN, 2)));
=======================================
--- /core/src/test/java/noop/graph/HelloWorldExampleMain.java Mon Apr 19
10:04:58 2010
+++ /core/src/test/java/noop/graph/HelloWorldExampleMain.java Tue Apr 20
08:34:11 2010
@@ -17,6 +17,7 @@
package noop.graph;
import noop.model.*;
+import noop.operations.NewEdgeOperation;
import noop.operations.NewNodeOperation;
import noop.stdlib.StandardLibraryBuilder;
@@ -24,11 +25,9 @@
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
-import java.util.Arrays;
-
+
+import static java.util.Arrays.asList;
import static noop.graph.Edge.EdgeType.*;
-import static noop.model.Block.function;
-import static noop.model.Block.unitTest;
/**
* @author
alex...@google.com (Alex Eagle)
@@ -83,32 +82,47 @@
Parameter consoleDep = new Parameter("console");
- Block sayHello = function("Say hello", stdLib.intClazz);
- controller.applyAll(Arrays.asList(
+ Block sayHello = new Function("Say hello", stdLib.intClazz);
+ controller.applyAll(asList(
new NewNodeOperation(sayHello, library),
- new NewNodeOperation(consoleDep, sayHello, TYPEOF,
stdLib.consoleClazz)));
+ new NewNodeOperation(consoleDep, sayHello),
+ new NewEdgeOperation(consoleDep, TYPEOF, stdLib.consoleClazz)));
Documentation sayHelloDoc = new Documentation("This is the entry point
for the Hello World app");
controller.apply(new NewNodeOperation(sayHelloDoc, sayHello));
StringLiteral helloWorld = new StringLiteral("Hello, World!");
- controller.apply(new NewNodeOperation(helloWorld, sayHello, TYPEOF,
stdLib.stringClazz));
-
- Expression printHello = new MethodInvocation(helloWorld);
- controller.apply(new NewNodeOperation(printHello, sayHello, TARGET,
consoleDep, INVOKE, stdLib.printMethod));
+ controller.applyAll(asList(
+ new NewNodeOperation(helloWorld, sayHello),
+ new NewEdgeOperation(helloWorld, TYPEOF, stdLib.stringClazz)));
+
+ Expression printHello = new MethodInvocation();
+ controller.applyAll(asList(
+ new NewNodeOperation(printHello, sayHello),
+ new NewEdgeOperation(printHello, TARGET, consoleDep),
+ new NewEdgeOperation(printHello, INVOKE, stdLib.printMethod)));
+ controller.apply(new NewEdgeOperation(printHello, ARG, helloWorld));
IntegerLiteral zero = new IntegerLiteral(0);
- controller.applyAll(Arrays.asList(new NewNodeOperation(zero, sayHello,
TYPEOF, stdLib.intClazz),
- new NewNodeOperation(new Return(zero), sayHello)));
-
- Block unitTest = unitTest("Should say hello");
+ Return aReturn = new Return();
+ controller.applyAll(asList(
+ new NewNodeOperation(zero, sayHello),
+ new NewEdgeOperation(zero, TYPEOF, stdLib.intClazz),
+ new NewNodeOperation(aReturn, sayHello),
+ new NewEdgeOperation(aReturn, ARG, zero)));
+
+ Block unitTest = new UnitTest("Should say hello");
controller.apply(new NewNodeOperation(unitTest, sayHello));
IdentifierDeclaration resultDecl = new IdentifierDeclaration("result");
- controller.apply(new NewNodeOperation(resultDecl, unitTest, TYPEOF,
stdLib.intClazz));
+ controller.applyAll(asList(
+ new NewNodeOperation(resultDecl, unitTest),
+ new NewEdgeOperation(resultDecl, TYPEOF, stdLib.intClazz)));
Expression callMain = new MethodInvocation();
- controller.apply(new NewNodeOperation(callMain, resultDecl, INVOKE,
sayHello));
+ controller.applyAll(asList(
+ new NewNodeOperation(callMain, resultDecl),
+ new NewEdgeOperation(callMain, INVOKE, sayHello)));
Expression assertion = new MethodInvocation();
controller.apply(new NewNodeOperation(assertion, unitTest));
==============================================================================
Revision: f30812c243
Author: Alex Eagle <
alex...@google.com>
Date: Wed Apr 21 09:10:37 2010
Log: Add arithmetic example and refactor the main/test for dumping the
workspace.
http://code.google.com/p/noop/source/detail?r=f30812c243
Added:
/core/src/test/java/noop/graph/ArithmeticExample.java
/core/src/test/java/noop/graph/DumpExamplesMain.java
/core/src/test/java/noop/graph/DumpExamplesTest.java
/core/src/test/java/noop/graph/Example.java
/core/src/test/java/noop/graph/HelloWorldExample.java
/core/src/test/java/noop/graph/WorkspaceDumper.java
Deleted:
/core/src/test/java/noop/graph/HelloWorldExampleMain.java
/core/src/test/java/noop/graph/HelloWorldExampleTest.java
Modified:
/core/src/main/java/noop/graph/ModelVisitor.java
/core/src/main/java/noop/model/Block.java
/core/src/main/java/noop/model/Function.java
/core/src/main/java/noop/model/Method.java
/core/src/main/java/noop/model/UnitTest.java
/core/src/main/java/noop/stdlib/StandardLibraryBuilder.java
=======================================
--- /dev/null
+++ /core/src/test/java/noop/graph/ArithmeticExample.java Wed Apr 21
09:10:37 2010
@@ -0,0 +1,75 @@
+package noop.graph;
+
+import noop.model.*;
+import noop.operations.NewEdgeOperation;
+import noop.operations.NewNodeOperation;
+import noop.stdlib.StandardLibraryBuilder;
+
+import static java.util.Arrays.asList;
+import static noop.graph.Edge.EdgeType.*;
+
+/**
+ * @author
alex...@google.com (Alex Eagle)
+ */
+public class ArithmeticExample extends Example {
+
+ public ArithmeticExample(StandardLibraryBuilder stdLib) {
+ super(stdLib);
+ }
+
+ @Override
+ public void createProgram(Controller controller) {
+ Project project = new Project("Arithmetic", "com.example", "Copyright
2010\nExample Co.");
+ controller.apply(new NewNodeOperation(project));
+
+ Library library = new Library("adding stuff");
+ controller.apply(new NewNodeOperation(library, project));
+
+ Parameter consoleDep = new Parameter("console");
+
+ Block entryPoint = new Function("start here");
+ controller.applyAll(asList(
+ new NewNodeOperation(entryPoint, library),
+ new NewEdgeOperation(entryPoint, TYPEOF, stdLib.intClazz),
+ new NewNodeOperation(consoleDep, entryPoint),
+ new NewEdgeOperation(consoleDep, TYPEOF, stdLib.consoleClazz)));
+
+ IdentifierDeclaration i = new IdentifierDeclaration("i");
+ controller.apply(new NewNodeOperation(i, entryPoint));
+
+ IntegerLiteral one = new IntegerLiteral(1);
+ controller.apply(new NewNodeOperation(one, i));
+
+ IdentifierDeclaration j = new IdentifierDeclaration("j");
+ controller.apply(new NewNodeOperation(j, entryPoint));
+
+ IntegerLiteral two = new IntegerLiteral(2);
+ controller.apply(new NewNodeOperation(two, j));
+
+ IdentifierDeclaration k = new IdentifierDeclaration("k");
+ controller.apply(new NewNodeOperation(k, entryPoint));
+
+ Expression sum = new MethodInvocation();
+ controller.applyAll(asList(
+ new NewNodeOperation(sum, k),
+ new NewEdgeOperation(sum, INVOKE, stdLib.integerPlus),
+ new NewEdgeOperation(sum, TARGET, i),
+ new NewEdgeOperation(sum, ARG, j)
+ ));
+
+ Expression printResult = new MethodInvocation();
+ controller.applyAll(asList(
+ new NewNodeOperation(printResult, entryPoint),
+ new NewEdgeOperation(printResult, INVOKE, stdLib.printMethod),
+ new NewEdgeOperation(printResult, TARGET, consoleDep),
+ new NewEdgeOperation(printResult, ARG, k)
+ ));
+
+ IntegerLiteral zero = new IntegerLiteral(0);
+ controller.apply(new NewNodeOperation(zero, entryPoint));
+
+ Expression returnVal = new Return();
+ controller.applyAll(asList(new NewNodeOperation(returnVal, entryPoint),
+ new NewEdgeOperation(returnVal, ARG, zero)));
+ }
+}
=======================================
--- /dev/null
+++ /core/src/test/java/noop/graph/DumpExamplesMain.java Wed Apr 21
09:10:37 2010
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *
http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package noop.graph;
+
+import noop.graph.WorkspaceDumper.Output;
+import noop.stdlib.StandardLibraryBuilder;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.PrintStream;
+import java.util.Arrays;
+
+/**
+ * @author
alex...@google.com (Alex Eagle)
+ */
+public class DumpExamplesMain {
+ private final Output output;
+ private final File outDir;
+
+ public DumpExamplesMain(Output output, File outDir) {
+ this.output = output;
+ this.outDir = outDir;
+ }
+
+ public static void main(String[] args) throws FileNotFoundException {
+ new DumpExamplesMain(Output.DOT, new File(args[0])).run();
+ new DumpExamplesMain(Output.TXT, new File(args[0])).run();
+ }
+
+ public void run() throws FileNotFoundException {
+ StandardLibraryBuilder stdLib = new StandardLibraryBuilder();
+
+ for (Example example : Arrays.asList(
+ new ArithmeticExample(stdLib),
+ new HelloWorldExample(stdLib))) {
+ Workspace workspace = new Workspace();
+
+ Controller controller = new Controller(workspace);
+ controller.applyAll(stdLib.build());
+
+ example.createProgram(controller);
+ File outFile = new File(outDir, example.getClass().getSimpleName()
+ "." +
output.name().toLowerCase());
+ new WorkspaceDumper(output, new PrintStream(new
FileOutputStream(outFile))).dump(workspace);
+ }
+ }
+}
=======================================
--- /dev/null
+++ /core/src/test/java/noop/graph/DumpExamplesTest.java Wed Apr 21
09:10:37 2010
@@ -0,0 +1,49 @@
+package noop.graph;
+
+import noop.graph.WorkspaceDumper.Output;
+import noop.stdlib.StandardLibraryBuilder;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * @author
alex...@google.com (Alex Eagle)
+ */
+public class DumpExamplesTest {
+
+ Workspace workspace;
+ StandardLibraryBuilder stdLib;
+ Controller controller;
+
+ @Before
+ public void setUp() {
+ workspace = new Workspace();
+ stdLib = new StandardLibraryBuilder();
+ controller = new Controller(workspace);
+ controller.applyAll(stdLib.build());
+ }
+
+ @Test
+ public void shouldCreateArithmeticDot() {
+ new ArithmeticExample(stdLib).createProgram(controller);
+ new WorkspaceDumper(Output.DOT, System.out).dump(workspace);
+ }
+
+ @Test
+ public void shouldCreateArithmeticOutline() {
+ new ArithmeticExample(stdLib).createProgram(controller);
+ new WorkspaceDumper(Output.TXT, System.out).dump(workspace);
+ }
+
+ @Test
+ public void shouldCreateHelloWorldDot() {
+ new HelloWorldExample(stdLib).createProgram(controller);
+ new WorkspaceDumper(Output.DOT, System.out).dump(workspace);
+ }
+
+ @Test
+ public void shouldCreateHelloWorldOutline() {
+ new HelloWorldExample(stdLib).createProgram(controller);
+ new WorkspaceDumper(Output.TXT, System.out).dump(workspace);
+ }
+
+}
=======================================
--- /dev/null
+++ /core/src/test/java/noop/graph/Example.java Wed Apr 21 09:10:37 2010
@@ -0,0 +1,16 @@
+package noop.graph;
+
+import noop.stdlib.StandardLibraryBuilder;
+
+/**
+ * @author
alex...@google.com (Alex Eagle)
+ */
+public abstract class Example {
+ protected final StandardLibraryBuilder stdLib;
+
+ public Example(StandardLibraryBuilder stdLib) {
+ this.stdLib = stdLib;
+ }
+
+ public abstract void createProgram(Controller controller);
+}
=======================================
--- /dev/null
+++ /core/src/test/java/noop/graph/HelloWorldExample.java Wed Apr 21
09:10:37 2010
@@ -0,0 +1,75 @@
+package noop.graph;
+
+import noop.model.*;
+import noop.operations.NewEdgeOperation;
+import noop.operations.NewNodeOperation;
+import noop.stdlib.StandardLibraryBuilder;
+
+import static java.util.Arrays.asList;
+import static noop.graph.Edge.EdgeType.*;
+
+/**
+ * @author
alex...@google.com (Alex Eagle)
+ */
+public class HelloWorldExample extends Example {
+ public HelloWorldExample(StandardLibraryBuilder stdLib) {
+ super(stdLib);
+ }
+
+ @Override
+ public void createProgram(Controller controller) {
+ Project project = new Project("Hello World", "com.example", "Copyright
2010\nExample Co.");
+ controller.apply(new NewNodeOperation(project));
+
+ Library library = new Library("hello");
+ controller.apply(new NewNodeOperation(library, project));
+
+ Parameter consoleDep = new Parameter("console");
+
+ Block sayHello = new Function("Say hello");
+ controller.applyAll(asList(
+ new NewNodeOperation(sayHello, library),
+ new NewEdgeOperation(sayHello, TYPEOF, stdLib.intClazz),
+ new NewNodeOperation(consoleDep, sayHello),
+ new NewEdgeOperation(consoleDep, TYPEOF, stdLib.consoleClazz)));
+
+ Documentation sayHelloDoc = new Documentation("This is the entry point
for the Hello World app");
+ controller.apply(new NewNodeOperation(sayHelloDoc, sayHello));
+
+ StringLiteral helloWorld = new StringLiteral("Hello, World!");
+ controller.applyAll(asList(
+ new NewNodeOperation(helloWorld, sayHello),
+ new NewEdgeOperation(helloWorld, TYPEOF, stdLib.stringClazz)));
+
+ Expression printHello = new MethodInvocation();
+ controller.applyAll(asList(
+ new NewNodeOperation(printHello, sayHello),
+ new NewEdgeOperation(printHello, TARGET, consoleDep),
+ new NewEdgeOperation(printHello, INVOKE, stdLib.printMethod)));
+ controller.apply(new NewEdgeOperation(printHello, ARG, helloWorld));
+
+ IntegerLiteral zero = new IntegerLiteral(0);
+ Return aReturn = new Return();
+ controller.applyAll(asList(
+ new NewNodeOperation(zero, sayHello),
+ new NewEdgeOperation(zero, TYPEOF, stdLib.intClazz),
+ new NewNodeOperation(aReturn, sayHello),
+ new NewEdgeOperation(aReturn, ARG, zero)));
+
+ Block unitTest = new UnitTest("Should say hello");
+ controller.apply(new NewNodeOperation(unitTest, sayHello));
+
+ IdentifierDeclaration resultDecl = new IdentifierDeclaration("result");
+ controller.applyAll(asList(
+ new NewNodeOperation(resultDecl, unitTest),
+ new NewEdgeOperation(resultDecl, TYPEOF, stdLib.intClazz)));
+
+ Expression callMain = new MethodInvocation();
+ controller.applyAll(asList(
+ new NewNodeOperation(callMain, resultDecl),
+ new NewEdgeOperation(callMain, INVOKE, sayHello)));
+
+ Expression assertion = new MethodInvocation();
+ controller.apply(new NewNodeOperation(assertion, unitTest));
+ }
+}
=======================================
--- /dev/null
+++ /core/src/test/java/noop/graph/WorkspaceDumper.java Wed Apr 21 09:10:37
2010
@@ -0,0 +1,36 @@
+package noop.graph;
+
+import java.io.PrintStream;
+
+/**
+ * Dumps the content of a workspace in one of a few possible formats.
+ * @author
alex...@google.com (Alex Eagle)
+ */
+public class WorkspaceDumper {
+ private final Output output;
+ private final PrintStream out;
+
+ public WorkspaceDumper(Output output, PrintStream out) {
+ this.output = output;
+ this.out = out;
+ }
+
+ public enum Output {
+ TXT, DOT
+ }
+
+ public void dump(Workspace workspace) {
+ PrintingVisitor graphPrintingVisitor;
+ switch (output) {
+ case DOT:
+ graphPrintingVisitor = new DotGraphPrintingVisitor(out);
+ break;
+ case TXT:
+ graphPrintingVisitor = new OutlinePrintingVisitor(out);
+ break;
+ default:
+ throw new RuntimeException("unknown output type " + output);
+ }
+ workspace.accept(graphPrintingVisitor);
+ }
+}
=======================================
--- /core/src/test/java/noop/graph/HelloWorldExampleMain.java Tue Apr 20
08:34:11 2010
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *
http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package noop.graph;
-
-import noop.model.*;
-import noop.operations.NewEdgeOperation;
-import noop.operations.NewNodeOperation;
-import noop.stdlib.StandardLibraryBuilder;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.PrintStream;
-
-import static java.util.Arrays.asList;
-import static noop.graph.Edge.EdgeType.*;
-
-/**
- * @author
alex...@google.com (Alex Eagle)
- */
-public class HelloWorldExampleMain {
- private Controller controller;
- private Workspace workspace;
- private StandardLibraryBuilder stdLib;
- private final Output output;
- private final PrintStream out;
-
- public HelloWorldExampleMain(Output output, PrintStream out) {
- this.output = output;
- this.out = out;
- }
-
- public enum Output {
- OUTLINE, DOT
- }
-
- public static void main(String[] args) throws FileNotFoundException {
- new HelloWorldExampleMain(Output.valueOf(args[0].toUpperCase()),
- new PrintStream(new FileOutputStream(new File(args[1])))).run();
- }
-
- public void run() {
- workspace = new Workspace();
- controller = new Controller(workspace);
- stdLib = new StandardLibraryBuilder();
- controller.applyAll(stdLib.build());
- createHelloWorldProgram();
- PrintingVisitor graphPrintingVisitor;
- switch (output) {
- case DOT:
- graphPrintingVisitor = new DotGraphPrintingVisitor(out);
- break;
- case OUTLINE:
- graphPrintingVisitor = new OutlinePrintingVisitor(out);
- break;
- default:
- throw new RuntimeException("unknown output type " + output);
- }
- workspace.accept(graphPrintingVisitor);
- }
-
- public void createHelloWorldProgram() {
- Project project = new Project("Hello World", "com.example", "Copyright
2010\nExample Co.");
- controller.apply(new NewNodeOperation(project));
-
- Library library = new Library("hello");
- controller.apply(new NewNodeOperation(library, project));
-
- Parameter consoleDep = new Parameter("console");
-
- Block sayHello = new Function("Say hello", stdLib.intClazz);
- controller.applyAll(asList(
- new NewNodeOperation(sayHello, library),
- new NewNodeOperation(consoleDep, sayHello),
- new NewEdgeOperation(consoleDep, TYPEOF, stdLib.consoleClazz)));
-
- Documentation sayHelloDoc = new Documentation("This is the entry point
for the Hello World app");
- controller.apply(new NewNodeOperation(sayHelloDoc, sayHello));
-
- StringLiteral helloWorld = new StringLiteral("Hello, World!");
- controller.applyAll(asList(
- new NewNodeOperation(helloWorld, sayHello),
- new NewEdgeOperation(helloWorld, TYPEOF, stdLib.stringClazz)));
-
- Expression printHello = new MethodInvocation();
- controller.applyAll(asList(
- new NewNodeOperation(printHello, sayHello),
- new NewEdgeOperation(printHello, TARGET, consoleDep),
- new NewEdgeOperation(printHello, INVOKE, stdLib.printMethod)));
- controller.apply(new NewEdgeOperation(printHello, ARG, helloWorld));
-
- IntegerLiteral zero = new IntegerLiteral(0);
- Return aReturn = new Return();
- controller.applyAll(asList(
- new NewNodeOperation(zero, sayHello),
- new NewEdgeOperation(zero, TYPEOF, stdLib.intClazz),
- new NewNodeOperation(aReturn, sayHello),
- new NewEdgeOperation(aReturn, ARG, zero)));
-
- Block unitTest = new UnitTest("Should say hello");
- controller.apply(new NewNodeOperation(unitTest, sayHello));
-
- IdentifierDeclaration resultDecl = new IdentifierDeclaration("result");
- controller.applyAll(asList(
- new NewNodeOperation(resultDecl, unitTest),
- new NewEdgeOperation(resultDecl, TYPEOF, stdLib.intClazz)));
-
- Expression callMain = new MethodInvocation();
- controller.applyAll(asList(
- new NewNodeOperation(callMain, resultDecl),
- new NewEdgeOperation(callMain, INVOKE, sayHello)));
-
- Expression assertion = new MethodInvocation();
- controller.apply(new NewNodeOperation(assertion, unitTest));
- }
-}
=======================================
--- /core/src/test/java/noop/graph/HelloWorldExampleTest.java Mon Apr 19
10:04:58 2010
+++ /dev/null
@@ -1,20 +0,0 @@
-package noop.graph;
-
-import noop.graph.HelloWorldExampleMain.Output;
-import org.junit.Test;
-
-/**
- * @author
alex...@google.com (Alex Eagle)
- */
-public class HelloWorldExampleTest {
-
- @Test
- public void shouldCreateDotSuccessfully() {
- new HelloWorldExampleMain(Output.DOT, System.out).run();
- }
-
- @Test
- public void shouldCreateOutlineSuccessfully() {
- new HelloWorldExampleMain(Output.OUTLINE, System.out).run();
- }
-}
=======================================
--- /core/src/main/java/noop/graph/ModelVisitor.java Tue Apr 20 08:34:11
2010
+++ /core/src/main/java/noop/graph/ModelVisitor.java Wed Apr 21 09:10:37
2010
@@ -57,4 +57,6 @@
public void visit(Assignment assignment) {}
public void visit(IdentifierDeclaration identifierDeclaration) {}
-}
+
+ public void visit(Binding binding) {}
+}
=======================================
--- /core/src/main/java/noop/model/Block.java Tue Apr 20 08:34:11 2010
+++ /core/src/main/java/noop/model/Block.java Wed Apr 21 09:10:37 2010
@@ -26,13 +26,11 @@
*/
public abstract class Block<T> extends LanguageElement<T> {
public final String name;
- public final Clazz returnType;
protected final List<Parameter> parameters = Lists.newArrayList();
protected final List<Expression> statements = Lists.newArrayList();
- public Block(String name, Clazz returnType) {
+ public Block(String name) {
this.name = name;
- this.returnType = returnType;
}
@Override
=======================================
--- /core/src/main/java/noop/model/Function.java Tue Apr 20 08:34:11 2010
+++ /core/src/main/java/noop/model/Function.java Wed Apr 21 09:10:37 2010
@@ -7,8 +7,8 @@
*/
public class Function extends Block<Function> {
- public Function(String name, Clazz returnType) {
- super(name, returnType);
+ public Function(String name) {
+ super(name);
}
@Override
=======================================
--- /core/src/main/java/noop/model/Method.java Tue Apr 20 08:34:11 2010
+++ /core/src/main/java/noop/model/Method.java Wed Apr 21 09:10:37 2010
@@ -6,8 +6,8 @@
* @author
alex...@google.com (Alex Eagle)
*/
public class Method extends Block<Method> {
- public Method(String name, Clazz returnType) {
- super(name, returnType);
+ public Method(String name) {
+ super(name);
}
@Override
=======================================
--- /core/src/main/java/noop/model/UnitTest.java Tue Apr 20 08:34:11 2010
+++ /core/src/main/java/noop/model/UnitTest.java Wed Apr 21 09:10:37 2010
@@ -7,7 +7,7 @@
*/
public class UnitTest extends Block<UnitTest> {
public UnitTest(String name) {
- super(name, null);
+ super(name);
}
@Override
=======================================
--- /core/src/main/java/noop/stdlib/StandardLibraryBuilder.java Tue Apr 20
08:34:11 2010
+++ /core/src/main/java/noop/stdlib/StandardLibraryBuilder.java Wed Apr 21
09:10:37 2010
@@ -19,6 +19,7 @@
public Clazz stringClazz;
public Clazz voidClazz;
public Block printMethod;
+ public Method integerPlus;
public List<MutationOperation> build() {
List<MutationOperation> result = Lists.newArrayList();
@@ -41,8 +42,9 @@
consoleClazz = new Clazz("Console");
result.add(new NewNodeOperation(consoleClazz, io));
- printMethod = new Method("print", voidClazz);
+ printMethod = new Method("print");
result.add(new NewNodeOperation(printMethod, consoleClazz));
+ result.add(new NewEdgeOperation(printMethod, TYPEOF, voidClazz));
Parameter printArg = new Parameter("s");
result.add(new NewNodeOperation(printArg, printMethod));
@@ -51,6 +53,14 @@
intClazz = new Clazz("Integer");
result.add(new NewNodeOperation(intClazz, lang));
+ integerPlus = new Method("+");
+ result.add(new NewNodeOperation(integerPlus, intClazz));
+ result.add(new NewEdgeOperation(integerPlus, TYPEOF, intClazz));
+
+ Parameter integerPlusArg = new Parameter("i");
+ result.add(new NewNodeOperation(integerPlusArg, integerPlus));
+ result.add(new NewEdgeOperation(integerPlusArg, TYPEOF, intClazz));
+
return result;
}
}
==============================================================================
Revision: 4c2c3c43a3
Author: Alex Eagle <
alex...@google.com>
Date: Wed Apr 21 09:23:46 2010
Log: Add comment as a language element.
http://code.google.com/p/noop/source/detail?r=4c2c3c43a3
Added:
/core/src/main/java/noop/model/Binding.java
/core/src/main/java/noop/model/Comment.java
Modified:
/core/pom.xml
/core/src/main/java/noop/graph/ModelVisitor.java
/core/src/main/java/noop/graph/OutlinePrintingVisitor.java
/core/src/main/java/noop/model/LanguageElement.java
/core/src/main/java/noop/stdlib/StandardLibraryBuilder.java
=======================================
--- /dev/null
+++ /core/src/main/java/noop/model/Binding.java Wed Apr 21 09:23:46 2010
@@ -0,0 +1,29 @@
+package noop.model;
+
+import noop.graph.ModelVisitor;
+
+/**
+ * @author
alex...@google.com (Alex Eagle)
+ */
+public class Binding extends LanguageElement<Binding> {
+ private Clazz type;
+ private Expression boundTo;
+
+ @Override
+ public boolean adoptChild(LanguageElement child) {
+ if (child instanceof Clazz) {
+ type = (Clazz) child;
+ return true;
+ }
+ if (child instanceof Expression) {
+ boundTo = (Expression) child;
+ return true;
+ }
+ return super.adoptChild(child);
+ }
+
+ @Override
+ public void accept(ModelVisitor v) {
+ v.visit(this);
+ }
+}
=======================================
--- /dev/null
+++ /core/src/main/java/noop/model/Comment.java Wed Apr 21 09:23:46 2010
@@ -0,0 +1,29 @@
+package noop.model;
+
+import noop.graph.ModelVisitor;
+import org.joda.time.Instant;
+
+/**
+ * @author
alex...@google.com (Alex Eagle)
+ */
+public class Comment extends LanguageElement<Comment> {
+ public final String text;
+ public final String user;
+ public final Instant timestamp;
+
+ public Comment(String text, String user) {
+ this.text = text;
+ this.user = user;
+ this.timestamp = new Instant();
+ }
+
+ @Override
+ public void accept(ModelVisitor v) {
+ v.visit(this);
+ }
+
+ @Override
+ public boolean adoptChild(LanguageElement child) {
+ return false;
+ }
+}
=======================================
--- /core/pom.xml Fri Apr 16 14:53:57 2010
+++ /core/pom.xml Wed Apr 21 09:23:46 2010
@@ -30,5 +30,10 @@
<artifactId>commons-lang</artifactId>
<version>2.4</version>
</dependency>
+ <dependency>
+ <groupId>joda-time</groupId>
+ <artifactId>joda-time</artifactId>
+ <version>1.6</version>
+ </dependency>
</dependencies>
</project>
=======================================
--- /core/src/main/java/noop/graph/ModelVisitor.java Wed Apr 21 09:10:37
2010
+++ /core/src/main/java/noop/graph/ModelVisitor.java Wed Apr 21 09:23:46
2010
@@ -59,4 +59,6 @@
public void visit(IdentifierDeclaration identifierDeclaration) {}
public void visit(Binding binding) {}
-}
+
+ public void visit(Comment comment) {}
+}
=======================================
--- /core/src/main/java/noop/graph/OutlinePrintingVisitor.java Tue Apr 20
08:34:11 2010
+++ /core/src/main/java/noop/graph/OutlinePrintingVisitor.java Wed Apr 21
09:23:46 2010
@@ -96,6 +96,11 @@
public void visit(Return aReturn) {
print(aReturn, "return");
}
+
+ @Override
+ public void visit(Comment comment) {
+ print(comment, "// %s --%s %s", comment.text, comment.user,
comment.timestamp.toString());
+ }
private void print(LanguageElement element, String message, String...
params) {
out.format("%s%s [#%d]", indent(), String.format(message, params),
idFor(element));
=======================================
--- /core/src/main/java/noop/model/LanguageElement.java Tue Apr 20 08:34:11
2010
+++ /core/src/main/java/noop/model/LanguageElement.java Wed Apr 21 09:23:46
2010
@@ -16,10 +16,12 @@
package noop.model;
+import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import noop.graph.ModelVisitor;
import java.io.Serializable;
+import java.util.List;
import java.util.Set;
/**
@@ -27,6 +29,7 @@
*/
public abstract class LanguageElement<T> implements Serializable {
protected Documentation documentation;
+ protected List<Comment> comments = Lists.newArrayList();
protected Set<UnitTest> unitTests = Sets.newHashSet();
protected T previousVersion;
@@ -36,19 +39,31 @@
documentation.accept(v);
v.leave(documentation);
}
+ for (Comment comment : comments) {
+ v.enter(comment);
+ comment.accept(v);
+ v.leave(comment);
+ }
}
public T getPreviousVersion() {
return previousVersion;
}
+
public void setPreviousVersion(T previousVersion) {
this.previousVersion = previousVersion;
}
+
public boolean adoptChild(LanguageElement child) {
if (child instanceof Documentation) {
this.documentation = (Documentation) child;
return true;
}
+ if (child instanceof Comment) {
+ this.comments.add((Comment) child);
+ return true;
+ }
+ // TODO: not sure that unit tests can be attached literally anywhere
if (child instanceof UnitTest) {
UnitTest block = (UnitTest) child;
unitTests.add(block);
=======================================
--- /core/src/main/java/noop/stdlib/StandardLibraryBuilder.java Wed Apr 21
09:10:37 2010
+++ /core/src/main/java/noop/stdlib/StandardLibraryBuilder.java Wed Apr 21
09:23:46 2010
@@ -57,6 +57,10 @@
result.add(new NewNodeOperation(integerPlus, intClazz));
result.add(new NewEdgeOperation(integerPlus, TYPEOF, intClazz));
+ result.add(new NewNodeOperation(new Comment("Elements may have symbols
in their names." +
+ " Tools may choose to render this as infix",
+ System.getProperty("
user.name")), integerPlus));
+
Parameter integerPlusArg = new Parameter("i");
result.add(new NewNodeOperation(integerPlusArg, integerPlus));
result.add(new NewEdgeOperation(integerPlusArg, TYPEOF, intClazz));
==============================================================================
Revision: b132b5ae91
Author: Alex Eagle <
alex...@google.com>
Date: Thu Apr 22 02:43:30 2010
Log: Add control flow example, with loop construct
http://code.google.com/p/noop/source/detail?r=b132b5ae91
Added:
/core/src/main/java/noop/model/AnonymousBlock.java
/core/src/main/java/noop/model/Loop.java
/core/src/test/java/noop/graph/ControlFlowExample.java
Modified:
/core/src/main/java/noop/graph/Edge.java
/core/src/main/java/noop/graph/ModelVisitor.java
/core/src/main/java/noop/graph/OutlinePrintingVisitor.java
/core/src/main/java/noop/model/Block.java
/core/src/main/java/noop/model/Documentation.java
/core/src/main/java/noop/model/Function.java
/core/src/main/java/noop/model/Method.java
/core/src/main/java/noop/stdlib/StandardLibraryBuilder.java
/core/src/test/java/noop/graph/DumpExamplesMain.java
/core/src/test/java/noop/graph/DumpExamplesTest.java
/core/src/test/java/noop/graph/HelloWorldExample.java
=======================================
--- /dev/null
+++ /core/src/main/java/noop/model/AnonymousBlock.java Thu Apr 22 02:43:30
2010
@@ -0,0 +1,19 @@
+package noop.model;
+
+import noop.graph.ModelVisitor;
+
+/**
+ * @author
alex...@google.com (Alex Eagle)
+ */
+public class AnonymousBlock extends Block<AnonymousBlock> {
+
+ public AnonymousBlock() {
+ super("[anonymous]");
+ }
+
+ @Override
+ public void accept(ModelVisitor v) {
+ v.visit(this);
+ super.accept(v);
+ }
+}
=======================================
--- /dev/null
+++ /core/src/main/java/noop/model/Loop.java Thu Apr 22 02:43:30 2010
@@ -0,0 +1,36 @@
+package noop.model;
+
+import noop.graph.ModelVisitor;
+
+/**
+ * @author
alex...@google.com (Alex Eagle)
+ */
+public class Loop extends Expression<Loop> {
+ public Expression terminationCondition;
+ public Block body;
+
+ @Override
+ public boolean adoptChild(LanguageElement child) {
+ if (child instanceof Expression) {
+ terminationCondition = (Expression) child;
+ return true;
+ }
+ if (child instanceof Block) {
+ body = (Block) child;
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public void accept(ModelVisitor v) {
+ v.visit(this);
+ v.enter(terminationCondition);
+ terminationCondition.accept(v);
+ v.leave(terminationCondition);
+
+ v.enter(body);
+ body.accept(v);
+ v.leave(body);
+ }
+}
=======================================
--- /dev/null
+++ /core/src/test/java/noop/graph/ControlFlowExample.java Thu Apr 22
02:43:30 2010
@@ -0,0 +1,68 @@
+package noop.graph;
+
+import noop.model.*;
+import noop.operations.NewEdgeOperation;
+import noop.operations.NewNodeOperation;
+import noop.stdlib.StandardLibraryBuilder;
+
+import static java.util.Arrays.asList;
+import static noop.graph.Edge.EdgeType.*;
+
+/**
+ * @author
alex...@google.com (Alex Eagle)
+ */
+public class ControlFlowExample extends Example {
+ public ControlFlowExample(StandardLibraryBuilder stdLib) {
+ super(stdLib);
+ }
+
+ @Override
+ public void createProgram(Controller controller) {
+ Project project = new Project("Control
Flow", "com.example", "Copyright 2010\nExample Co.");
+ controller.apply(new NewNodeOperation(project));
+
+ Library library = new Library("Testing loops");
+ controller.apply(new NewNodeOperation(library, project));
+
+ Clazz clazz = new Clazz("Iterating Printer");
+ controller.apply(new NewNodeOperation(clazz, library));
+
+ Method method = new Method("Print 1 through 10");
+ controller.apply(new NewNodeOperation(method, clazz));
+
+ Parameter consoleDep = new Parameter("console");
+ controller.apply(new NewNodeOperation(consoleDep, method));
+
+ IdentifierDeclaration b = new IdentifierDeclaration("count");
+ controller.applyAll(asList(
+ new NewNodeOperation(b, method),
+ new NewEdgeOperation(b, TYPEOF, stdLib.booleanClazz)));
+ IntegerLiteral initValue = new IntegerLiteral(0);
+ controller.apply(new NewNodeOperation(initValue, b));
+
+ Loop loop = new Loop();
+ controller.apply(new NewNodeOperation(loop, method));
+
+ IntegerLiteral ten = new IntegerLiteral(10);
+ controller.apply(new NewNodeOperation(ten, method));
+
+ Expression terminateWhen = new MethodInvocation();
+ controller.applyAll(asList(
+ new NewNodeOperation(terminateWhen, loop),
+ new NewEdgeOperation(terminateWhen, TARGET, b),
+ new NewEdgeOperation(terminateWhen, INVOKE, stdLib.integerEquals),
+ new NewEdgeOperation(terminateWhen, ARG, ten)
+ ));
+
+ Block body = new AnonymousBlock();
+ controller.apply(new NewNodeOperation(body, loop));
+
+ Expression printValue = new MethodInvocation();
+ controller.applyAll(asList(
+ new NewNodeOperation(printValue, body),
+ new NewEdgeOperation(printValue, TARGET, consoleDep),
+ new NewEdgeOperation(printValue, INVOKE, stdLib.printMethod),
+ new NewEdgeOperation(printValue, ARG, b)
+ ));
+ }
+}
=======================================
--- /core/src/main/java/noop/graph/Edge.java Tue Apr 20 08:34:11 2010
+++ /core/src/main/java/noop/graph/Edge.java Thu Apr 22 02:43:30 2010
@@ -46,7 +46,7 @@
public enum EdgeType {
INVOKE,
CONTAIN,
- OVERRIDE,
+ IMPLEMENT,
TYPEOF,
TARGET,
ARG
=======================================
--- /core/src/main/java/noop/graph/ModelVisitor.java Wed Apr 21 09:23:46
2010
+++ /core/src/main/java/noop/graph/ModelVisitor.java Thu Apr 22 02:43:30
2010
@@ -61,4 +61,8 @@
public void visit(Binding binding) {}
public void visit(Comment comment) {}
-}
+
+ public void visit(Loop loop) {}
+
+ public void visit(AnonymousBlock block) {}
+}
=======================================
--- /core/src/main/java/noop/graph/OutlinePrintingVisitor.java Wed Apr 21
09:23:46 2010
+++ /core/src/main/java/noop/graph/OutlinePrintingVisitor.java Thu Apr 22
02:43:30 2010
@@ -76,6 +76,16 @@
public void visit(IdentifierDeclaration identifierDeclaration) {
print(identifierDeclaration, "Declare %s", identifierDeclaration.name);
}
+
+ @Override
+ public void visit(Loop loop) {
+ print(loop, "Loop until");
+ }
+
+ @Override
+ public void visit(AnonymousBlock block) {
+ print(block, "{}");
+ }
@Override
public void visit(Assignment assignment) {
=======================================
--- /core/src/main/java/noop/model/Block.java Wed Apr 21 09:10:37 2010
+++ /core/src/main/java/noop/model/Block.java Thu Apr 22 02:43:30 2010
@@ -24,9 +24,8 @@
/**
* @author
alex...@google.com (Alex Eagle)
*/
-public abstract class Block<T> extends LanguageElement<T> {
+public class Block<T> extends LanguageElement<T> {
public final String name;
- protected final List<Parameter> parameters = Lists.newArrayList();
protected final List<Expression> statements = Lists.newArrayList();
public Block(String name) {
@@ -35,10 +34,6 @@
@Override
public boolean adoptChild(LanguageElement child) {
- if (child instanceof Parameter) {
- parameters.add((Parameter) child);
- return true;
- }
if (child instanceof Expression) {
statements.add((Expression) child);
return true;
@@ -48,11 +43,6 @@
@Override
public void accept(ModelVisitor v) {
- for (Parameter parameter : parameters) {
- v.enter(parameter);
- parameter.accept(v);
- v.leave(parameter);
- }
for (Expression statement : statements) {
v.enter(statement);
statement.accept(v);
=======================================
--- /core/src/main/java/noop/model/Documentation.java Tue Apr 20 08:34:11
2010
+++ /core/src/main/java/noop/model/Documentation.java Thu Apr 22 02:43:30
2010
@@ -23,9 +23,11 @@
*/
public class Documentation extends LanguageElement<Documentation> {
public final String summary;
-
- public Documentation(String summary) {
+ public final String author;
+
+ public Documentation(String summary, String author) {
this.summary = summary;
+ this.author = author;
}
@Override
=======================================
--- /core/src/main/java/noop/model/Function.java Wed Apr 21 09:10:37 2010
+++ /core/src/main/java/noop/model/Function.java Thu Apr 22 02:43:30 2010
@@ -1,19 +1,38 @@
package noop.model;
+import com.google.common.collect.Lists;
import noop.graph.ModelVisitor;
+import java.util.List;
+
/**
* @author
alex...@google.com (Alex Eagle)
*/
public class Function extends Block<Function> {
+ protected final List<Parameter> parameters = Lists.newArrayList();
+
public Function(String name) {
super(name);
}
-
+
+ @Override
+ public boolean adoptChild(LanguageElement child) {
+ if (child instanceof Parameter) {
+ parameters.add((Parameter) child);
+ return true;
+ }
+ return super.adoptChild(child);
+ }
+
@Override
public void accept(ModelVisitor v) {
v.visit(this);
+ for (Parameter parameter : parameters) {
+ v.enter(parameter);
+ parameter.accept(v);
+ v.leave(parameter);
+ }
super.accept(v);
}
}
=======================================
--- /core/src/main/java/noop/model/Method.java Wed Apr 21 09:10:37 2010
+++ /core/src/main/java/noop/model/Method.java Thu Apr 22 02:43:30 2010
@@ -1,18 +1,37 @@
package noop.model;
+import com.google.common.collect.Lists;
import noop.graph.ModelVisitor;
+import java.util.List;
+
/**
* @author
alex...@google.com (Alex Eagle)
*/
public class Method extends Block<Method> {
+ protected final List<Parameter> parameters = Lists.newArrayList();
+
public Method(String name) {
super(name);
}
+
+ @Override
+ public boolean adoptChild(LanguageElement child) {
+ if (child instanceof Parameter) {
+ parameters.add((Parameter) child);
+ return true;
+ }
+ return super.adoptChild(child);
+ }
@Override
public void accept(ModelVisitor v) {
v.visit(this);
+ for (Parameter parameter : parameters) {
+ v.enter(parameter);
+ parameter.accept(v);
+ v.leave(parameter);
+ }
super.accept(v);
}
}
=======================================
--- /core/src/main/java/noop/stdlib/StandardLibraryBuilder.java Wed Apr 21
09:23:46 2010
+++ /core/src/main/java/noop/stdlib/StandardLibraryBuilder.java Thu Apr 22
02:43:30 2010
@@ -11,6 +11,7 @@
import static noop.graph.Edge.EdgeType.TYPEOF;
/**
+ * TODO: when we have a way to share serialized noop code, remove this
class
* @author
alex...@google.com (Alex Eagle)
*/
public class StandardLibraryBuilder {
@@ -18,8 +19,10 @@
public Clazz consoleClazz;
public Clazz stringClazz;
public Clazz voidClazz;
+ public Clazz booleanClazz;
public Block printMethod;
public Method integerPlus;
+ public Method integerEquals;
public List<MutationOperation> build() {
List<MutationOperation> result = Lists.newArrayList();
@@ -50,17 +53,23 @@
result.add(new NewNodeOperation(printArg, printMethod));
result.add(new NewEdgeOperation(printArg, TYPEOF, stringClazz));
+ booleanClazz = new Clazz("Boolean");
+ result.add(new NewNodeOperation(booleanClazz, lang));
+
intClazz = new Clazz("Integer");
result.add(new NewNodeOperation(intClazz, lang));
integerPlus = new Method("+");
result.add(new NewNodeOperation(integerPlus, intClazz));
result.add(new NewEdgeOperation(integerPlus, TYPEOF, intClazz));
-
result.add(new NewNodeOperation(new Comment("Elements may have symbols
in their names." +
" Tools may choose to render this as infix",
System.getProperty("
user.name")), integerPlus));
+ integerEquals = new Method("==");
+ result.add(new NewNodeOperation(integerEquals, intClazz));
+ result.add(new NewEdgeOperation(integerEquals, TYPEOF, booleanClazz));
+
Parameter integerPlusArg = new Parameter("i");
result.add(new NewNodeOperation(integerPlusArg, integerPlus));
result.add(new NewEdgeOperation(integerPlusArg, TYPEOF, intClazz));
=======================================
--- /core/src/test/java/noop/graph/DumpExamplesMain.java Wed Apr 21
09:10:37 2010
+++ /core/src/test/java/noop/graph/DumpExamplesMain.java Thu Apr 22
02:43:30 2010
@@ -47,7 +47,8 @@
for (Example example : Arrays.asList(
new ArithmeticExample(stdLib),
- new HelloWorldExample(stdLib))) {
+ new HelloWorldExample(stdLib),
+ new ControlFlowExample(stdLib))) {
Workspace workspace = new Workspace();
Controller controller = new Controller(workspace);
=======================================
--- /core/src/test/java/noop/graph/DumpExamplesTest.java Wed Apr 21
09:10:37 2010
+++ /core/src/test/java/noop/graph/DumpExamplesTest.java Thu Apr 22
02:43:30 2010
@@ -46,4 +46,15 @@
new WorkspaceDumper(Output.TXT, System.out).dump(workspace);
}
-}
+ @Test
+ public void shouldCreateControlFlowDot() {
+ new ControlFlowExample(stdLib).createProgram(controller);
+ new WorkspaceDumper(Output.DOT, System.out).dump(workspace);
+ }
+
+ @Test
+ public void shouldCreateControlFlowOutline() {
+ new ControlFlowExample(stdLib).createProgram(controller);
+ new WorkspaceDumper(Output.TXT, System.out).dump(workspace);
+ }
+}
=======================================
--- /core/src/test/java/noop/graph/HelloWorldExample.java Wed Apr 21
09:10:37 2010
+++ /core/src/test/java/noop/graph/HelloWorldExample.java Thu Apr 22
02:43:30 2010
@@ -33,7 +33,8 @@
new NewNodeOperation(consoleDep, sayHello),
new NewEdgeOperation(consoleDep, TYPEOF, stdLib.consoleClazz)));
- Documentation sayHelloDoc = new Documentation("This is the entry point
for the Hello World app");
+ Documentation sayHelloDoc = new Documentation("This is the entry point
for the Hello World app",
+ "
alex...@google.com (Alex Eagle)");
controller.apply(new NewNodeOperation(sayHelloDoc, sayHello));
StringLiteral helloWorld = new StringLiteral("Hello, World!");
--
You received this message because you are subscribed to the Google Groups "Noop project changes from the version control system" group.
To post to this group, send email to
noop-c...@googlegroups.com.
To unsubscribe from this group, send email to
noop-changes...@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/noop-changes?hl=en.