Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephan Herrmann2016-06-04 14:57:06 +0000
committerStephan Herrmann2016-06-04 14:57:06 +0000
commitae73a7f6aa842e5d900b97c96de9adc7180c917a (patch)
treed4cc5c7cdc9b3f102b2364bc9bbeb4e64d2b3696
parentb4cd6c3f11a42fc20ce649d1940f0723e94a56fa (diff)
downloadorg.eclipse.objectteams-ae73a7f6aa842e5d900b97c96de9adc7180c917a.tar.gz
org.eclipse.objectteams-ae73a7f6aa842e5d900b97c96de9adc7180c917a.tar.xz
org.eclipse.objectteams-ae73a7f6aa842e5d900b97c96de9adc7180c917a.zip
Bug 495463: NPE in BaseCallMessageSend.resolveType() if an argument
cannot be resolved
-rw-r--r--org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/ast/BaseCallMessageSend.java3
-rw-r--r--org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/problem/BaseCallProblemReporterWrapper.java6
-rw-r--r--testplugins/org.eclipse.objectteams.otdt.tests/otjld/org/eclipse/objectteams/otdt/tests/otjld/callinbinding/BaseCalls.java39
3 files changed, 48 insertions, 0 deletions
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/ast/BaseCallMessageSend.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/ast/BaseCallMessageSend.java
index aac6da0b5..6faedbcb0 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/ast/BaseCallMessageSend.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/ast/BaseCallMessageSend.java
@@ -267,6 +267,9 @@ public class BaseCallMessageSend extends AbstractExpressionWrapper
boolean hasArgumentProblem = false;
for (int i = 0; i < args.length; i++) {
argumentTypes[i] = args[i].resolvedType;
+ if (argumentTypes[i] == null) {
+ return this.resolvedType;
+ }
if (!hasArgumentProblem && !argumentTypes[i].isBoxingCompatibleWith(parameters[i], scope))
hasArgumentProblem = true;
}
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/problem/BaseCallProblemReporterWrapper.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/problem/BaseCallProblemReporterWrapper.java
index c61f9061a..4f8c75817 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/problem/BaseCallProblemReporterWrapper.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/problem/BaseCallProblemReporterWrapper.java
@@ -25,6 +25,7 @@ import org.eclipse.jdt.core.compiler.IProblem;
import org.eclipse.jdt.internal.compiler.CompilationResult;
import org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration;
import org.eclipse.jdt.internal.compiler.ast.MessageSend;
+import org.eclipse.jdt.internal.compiler.ast.Statement;
import org.eclipse.jdt.internal.compiler.impl.ReferenceContext;
import org.eclipse.jdt.internal.compiler.lookup.MethodBinding;
import org.eclipse.jdt.internal.compiler.lookup.ProblemMethodBinding;
@@ -120,4 +121,9 @@ public class BaseCallProblemReporterWrapper extends ProblemReporterWrapper
this._wrappee.baseCallNotSameMethod(enclosingMethodDecl, messageSend);
}
}
+
+ public void invalidConstructor(Statement statement, MethodBinding targetConstructor) {
+ if (!statement.isGenerated()) // suppress error against generated boxing constructor (in case of type mismatch)
+ super.invalidConstructor(statement, targetConstructor);
+ }
}
diff --git a/testplugins/org.eclipse.objectteams.otdt.tests/otjld/org/eclipse/objectteams/otdt/tests/otjld/callinbinding/BaseCalls.java b/testplugins/org.eclipse.objectteams.otdt.tests/otjld/org/eclipse/objectteams/otdt/tests/otjld/callinbinding/BaseCalls.java
index faf0b2140..2277a3d55 100644
--- a/testplugins/org.eclipse.objectteams.otdt.tests/otjld/org/eclipse/objectteams/otdt/tests/otjld/callinbinding/BaseCalls.java
+++ b/testplugins/org.eclipse.objectteams.otdt.tests/otjld/org/eclipse/objectteams/otdt/tests/otjld/callinbinding/BaseCalls.java
@@ -2642,4 +2642,43 @@ public class BaseCalls extends AbstractOTJLDTest {
true/*skipJava*/);
}
+ public void testBug495463() {
+ runNegativeTest(
+ new String[] {
+ "MyTeam.java",
+ "public team class MyTeam {\n" +
+ " protected class R {\n" +
+ " callin void foo(int arga, int arg2) {\n" +
+ " base.foo(missing, false);\n" +
+ " }\n" +
+ " }\n" +
+ "}\n"
+ },
+ "----------\n" +
+ "1. ERROR in MyTeam.java (at line 4)\n" +
+ " base.foo(missing, false);\n" +
+ " ^^^^^^^\n" +
+ "missing cannot be resolved to a variable\n" +
+ "----------\n");
+ }
+
+ public void testBug495463_b() {
+ runNegativeTest(
+ new String[] {
+ "MyTeam.java",
+ "public team class MyTeam {\n" +
+ " protected class R {\n" +
+ " callin void foo(int arga, int arg2) {\n" +
+ " base.foo(1, false);\n" +
+ " }\n" +
+ " }\n" +
+ "}\n"
+ },
+ "----------\n" +
+ "1. ERROR in MyTeam.java (at line 4)\n" +
+ " base.foo(1, false);\n" +
+ " ^^^\n" +
+ "Base call foo(int, int) is not applicable for the arguments (int, boolean)\n" +
+ "----------\n");
+ }
}

Back to the top