aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-10-12 20:33:23 +0100
committerMichael Williamson <mike@zwobble.org>2015-10-12 20:33:23 +0100
commite8e18d765ec1e47825f23d478583b2041dfe7dfe (patch)
tree3a442594b8e634282f018d43928c81faf746aaa8 /src/main/java/org/zwobble
parent07d4507eca4c950c65fac53fafa3f81d703167d1 (diff)
Read explicit Java field accesses
Diffstat (limited to 'src/main/java/org/zwobble')
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java28
1 files changed, 21 insertions, 7 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 10d6e10..fc42fa0 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
@@ -9,6 +9,7 @@ import org.eclipse.jdt.core.dom.ClassInstanceCreation;
import org.eclipse.jdt.core.dom.CompilationUnit;
import org.eclipse.jdt.core.dom.ConditionalExpression;
import org.eclipse.jdt.core.dom.Expression;
+import org.eclipse.jdt.core.dom.FieldAccess;
import org.eclipse.jdt.core.dom.MethodInvocation;
import org.eclipse.jdt.core.dom.NumberLiteral;
import org.eclipse.jdt.core.dom.ReturnStatement;
@@ -20,6 +21,7 @@ import org.zwobble.couscous.ast.ClassNode;
import org.zwobble.couscous.ast.ClassNodeBuilder;
import org.zwobble.couscous.ast.ConstructorCallNode;
import org.zwobble.couscous.ast.ExpressionNode;
+import org.zwobble.couscous.ast.FieldAccessNode;
import org.zwobble.couscous.ast.LiteralNode;
import org.zwobble.couscous.ast.MethodCallNode;
import org.zwobble.couscous.ast.ReturnNode;
@@ -89,6 +91,8 @@ public class JavaReader {
return readStringLiteral((StringLiteral)expression);
case ASTNode.THIS_EXPRESSION:
return readThisExpression((ThisExpression)expression);
+ case ASTNode.FIELD_ACCESS:
+ return readFieldAccess((FieldAccess)expression);
case ASTNode.METHOD_INVOCATION:
return readMethodInvocation((MethodInvocation)expression);
case ASTNode.CLASS_INSTANCE_CREATION:
@@ -99,7 +103,7 @@ public class JavaReader {
throw new RuntimeException("Unsupported expression: " + expression.getClass());
}
}
-
+
private static ExpressionNode readBooleanLiteral(BooleanLiteral expression) {
return LiteralNode.literal(expression.booleanValue());
}
@@ -113,28 +117,34 @@ public class JavaReader {
}
private static ExpressionNode readThisExpression(ThisExpression expression) {
- return ThisReferenceNode.thisReference(
- TypeName.of(expression.resolveTypeBinding().getQualifiedName()));
+ return ThisReferenceNode.thisReference(typeOf(expression));
+ }
+
+ private static ExpressionNode readFieldAccess(FieldAccess expression) {
+ return FieldAccessNode.fieldAccess(
+ readExpression(expression.getExpression()),
+ expression.getName().getIdentifier(),
+ typeOf(expression));
}
private static ExpressionNode readMethodInvocation(MethodInvocation expression) {
val methodName = expression.getName().getIdentifier();
val arguments = readArguments(expression.arguments());
if (expression.getExpression().getNodeType() == ASTNode.SIMPLE_NAME) {
- val receiver = expression.getExpression().resolveTypeBinding();
- return StaticMethodCallNode.staticMethodCall(receiver.getQualifiedName(), methodName, arguments);
+ val receiver = expression.getExpression();
+ return StaticMethodCallNode.staticMethodCall(typeOf(receiver), methodName, arguments);
} else {
return MethodCallNode.methodCall(
readExpression(expression.getExpression()),
methodName,
arguments,
- TypeName.of(expression.resolveTypeBinding().getQualifiedName()));
+ typeOf(expression));
}
}
private static ExpressionNode readClassInstanceCreation(ClassInstanceCreation expression) {
return ConstructorCallNode.constructorCall(
- TypeName.of(expression.resolveTypeBinding().getQualifiedName()),
+ typeOf(expression),
readArguments(expression.arguments()));
}
@@ -156,4 +166,8 @@ public class JavaReader {
val type = (TypeDeclaration)ast.types().get(0);
return ast.getPackage().getName().getFullyQualifiedName() + "." + type.getName().getFullyQualifiedName();
}
+
+ private static TypeName typeOf(Expression expression) {
+ return TypeName.of(expression.resolveTypeBinding().getQualifiedName());
+ }
}