aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-10-17 16:23:14 +0100
committerMichael Williamson <mike@zwobble.org>2015-10-17 16:23:14 +0100
commit36b8ac144eed4fa94c8dd559b449604b0255ffb4 (patch)
treedbd612219868424b8ac23c33962790d7590a1ac4 /src/main/java
parent2353887c3cca9a6f4c4bdf6a0005c2d4bd630601 (diff)
Java: read implicit static method calls
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java17
1 files changed, 12 insertions, 5 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 c3898c5..d0b3f17 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
@@ -15,6 +15,7 @@ import org.eclipse.jdt.core.dom.IBinding;
import org.eclipse.jdt.core.dom.ITypeBinding;
import org.eclipse.jdt.core.dom.IVariableBinding;
import org.eclipse.jdt.core.dom.MethodInvocation;
+import org.eclipse.jdt.core.dom.Modifier;
import org.eclipse.jdt.core.dom.NumberLiteral;
import org.eclipse.jdt.core.dom.ReturnStatement;
import org.eclipse.jdt.core.dom.SimpleName;
@@ -163,11 +164,17 @@ public class JavaReader {
val arguments = readArguments(expression.arguments());
if (expression.getExpression() == null) {
val methodBinding = expression.resolveMethodBinding();
- return MethodCallNode.methodCall(
- ThisReferenceNode.thisReference(typeOf(methodBinding.getDeclaringClass())),
- methodName,
- arguments,
- typeOf(expression));
+ val receiverType = typeOf(methodBinding.getDeclaringClass());
+ if ((methodBinding.getModifiers() & Modifier.STATIC) != 0) {
+ return StaticMethodCallNode.staticMethodCall(
+ receiverType, methodName, arguments);
+ } else {
+ return MethodCallNode.methodCall(
+ ThisReferenceNode.thisReference(receiverType),
+ methodName,
+ arguments,
+ typeOf(expression));
+ }
} else if (expression.getExpression().getNodeType() == ASTNode.SIMPLE_NAME) {
val receiver = expression.getExpression();
return StaticMethodCallNode.staticMethodCall(typeOf(receiver), methodName, arguments);