diff options
author | Stephan Herrmann | 2016-06-04 14:57:06 +0000 |
---|---|---|
committer | Stephan Herrmann | 2016-06-04 14:57:06 +0000 |
commit | ae73a7f6aa842e5d900b97c96de9adc7180c917a (patch) | |
tree | d4cc5c7cdc9b3f102b2364bc9bbeb4e64d2b3696 | |
parent | b4cd6c3f11a42fc20ce649d1940f0723e94a56fa (diff) | |
download | org.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
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"); + } } |