From a5e68ab6528f62c891479f387877118f90dfa2b8 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 31 Oct 2015 16:30:43 +0000 Subject: Fix reading of methods --- .../couscous/frontends/java/JavaReader.java | 29 +++++++--------------- .../tests/frontends/java/JavaReaderTests.java | 7 ++++++ 2 files changed, 16 insertions(+), 20 deletions(-) (limited to 'src') 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 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 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 -- cgit v1.2.3