diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java | 11 | ||||
| -rw-r--r-- | src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java | 20 |
2 files changed, 31 insertions, 0 deletions
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java index 9cb6097..c3898c5 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java @@ -4,6 +4,7 @@ import java.nio.file.Path; import java.util.List; import org.eclipse.jdt.core.dom.ASTNode; +import org.eclipse.jdt.core.dom.Assignment; import org.eclipse.jdt.core.dom.BooleanLiteral; import org.eclipse.jdt.core.dom.ClassInstanceCreation; import org.eclipse.jdt.core.dom.CompilationUnit; @@ -21,6 +22,8 @@ import org.eclipse.jdt.core.dom.Statement; import org.eclipse.jdt.core.dom.StringLiteral; import org.eclipse.jdt.core.dom.ThisExpression; import org.eclipse.jdt.core.dom.TypeDeclaration; +import org.zwobble.couscous.ast.AssignableExpressionNode; +import org.zwobble.couscous.ast.AssignmentNode; import org.zwobble.couscous.ast.ClassNode; import org.zwobble.couscous.ast.ClassNodeBuilder; import org.zwobble.couscous.ast.ConstructorCallNode; @@ -105,6 +108,8 @@ public class JavaReader { return readClassInstanceCreation((ClassInstanceCreation)expression); case ASTNode.CONDITIONAL_EXPRESSION: return readConditionalExpression((ConditionalExpression)expression); + case ASTNode.ASSIGNMENT: + return readAssignment((Assignment)expression); default: throw new RuntimeException("Unsupported expression: " + expression.getClass()); } @@ -195,6 +200,12 @@ public class JavaReader { readExpression(expression.getElseExpression())); } + private static ExpressionNode readAssignment(Assignment expression) { + return AssignmentNode.assign( + (AssignableExpressionNode)readExpression(expression.getLeftHandSide()), + readExpression(expression.getRightHandSide())); + } + private static String generateClassName(CompilationUnit ast) { val type = (TypeDeclaration)ast.types().get(0); return ast.getPackage().getName().getFullyQualifiedName() + "." + type.getName().getFullyQualifiedName(); diff --git a/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java b/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java index 57bcaeb..0864b74 100644 --- a/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java +++ b/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java @@ -15,6 +15,7 @@ import org.zwobble.couscous.values.StringValue; import static java.util.Arrays.asList; import static org.junit.Assert.assertEquals; +import static org.zwobble.couscous.ast.AssignmentNode.assign; import static org.zwobble.couscous.ast.ConstructorCallNode.constructorCall; import static org.zwobble.couscous.ast.FieldAccessNode.fieldAccess; import static org.zwobble.couscous.ast.LiteralNode.literal; @@ -112,6 +113,25 @@ public class JavaReaderTests { new TernaryConditionalNode(literal(true), literal(1), literal(2)), readExpression("true ? 1 : 2")); } + + @Test + public void canReadAssignments() { + val classNode = readClass( + "private String name;" + + "public String getName() {" + + " return name = \"blah\";" + + "}"); + + val returnNode = (ReturnNode) classNode.getMethods().get(0).getBody().get(0); + assertEquals( + assign( + fieldAccess( + thisReference(TypeName.of("com.example.Example")), + "name", + StringValue.REF), + literal("blah")), + returnNode.getValue()); + } @SneakyThrows private ExpressionNode readExpressionInInstanceMethod(String expressionSource) { |
