aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-10-31 16:30:43 +0000
committerMichael Williamson <mike@zwobble.org>2015-10-31 16:30:43 +0000
commita5e68ab6528f62c891479f387877118f90dfa2b8 (patch)
tree6caf076e16e854a837e913203d9a4e1fc6e7e788 /src
parente512a23e1b2ed73239db9692184f71a982362477 (diff)
Fix reading of methods
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java29
-rw-r--r--src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java7
2 files changed, 16 insertions, 20 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 601e565..c08e447 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
@@ -244,32 +244,21 @@ public class JavaReader {
@SuppressWarnings("unchecked")
List<ExpressionNode> arguments = readArguments(expression.arguments());
final TypeName type = typeOf(expression);
- if (expression.getExpression() == null) {
- IMethodBinding methodBinding = expression.resolveMethodBinding();
- TypeName receiverType = typeOf(methodBinding.getDeclaringClass());
- if ((methodBinding.getModifiers() & Modifier.STATIC) != 0) {
- return StaticMethodCallNode.staticMethodCall(
- receiverType,
- methodName,
- arguments,
- type);
- } else {
- return MethodCallNode.methodCall(
- ThisReferenceNode.thisReference(receiverType),
- methodName,
- arguments,
- type);
- }
- } else if (expression.getExpression().getNodeType() == ASTNode.SIMPLE_NAME) {
- Expression receiver = expression.getExpression();
+
+ IMethodBinding methodBinding = expression.resolveMethodBinding();
+ TypeName receiverType = typeOf(methodBinding.getDeclaringClass());
+ if ((methodBinding.getModifiers() & Modifier.STATIC) != 0) {
return StaticMethodCallNode.staticMethodCall(
- typeOf(receiver),
+ receiverType,
methodName,
arguments,
type);
} else {
+ ExpressionNode receiver = expression.getExpression() == null
+ ? ThisReferenceNode.thisReference(receiverType)
+ : readExpression(expression.getExpression());
return MethodCallNode.methodCall(
- readExpression(expression.getExpression()),
+ receiver,
methodName,
arguments,
type);
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 7a6aab1..dffa7df 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
@@ -97,6 +97,13 @@ public class JavaReaderTests {
assertEquals(
methodCall(literal("hello"), "startsWith", asList(literal("h")), BooleanValue.REF),
readExpression("\"hello\".startsWith(\"h\")"));
+
+ List<StatementNode> statements = readStatements("Object x = 1; return x.hashCode();");
+ LocalVariableDeclarationNode declaration = (LocalVariableDeclarationNode) statements.get(0);
+ ReturnNode returnNode = (ReturnNode) statements.get(1);
+ assertEquals(
+ methodCall(reference(declaration), "hashCode", asList(), IntegerValue.REF),
+ returnNode.getValue());
}
@Test