diff options
| author | Michael Williamson <mike@zwobble.org> | 2015-10-31 16:30:43 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2015-10-31 16:30:43 +0000 |
| commit | a5e68ab6528f62c891479f387877118f90dfa2b8 (patch) | |
| tree | 6caf076e16e854a837e913203d9a4e1fc6e7e788 /src | |
| parent | e512a23e1b2ed73239db9692184f71a982362477 (diff) | |
Fix reading of methods
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java | 29 | ||||
| -rw-r--r-- | src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java | 7 |
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 |
