Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephan Herrmann2018-09-04 15:22:45 +0000
committerStephan Herrmann2018-09-06 11:49:13 +0000
commit137440659e5f6de2b611e18488e240eb603d47e1 (patch)
tree0a9791b8bc98c541638eecf4d6745a01e2875102 /org.eclipse.jdt.core
parenta4f6df84005c775e6159cf14d7e7b2626cf46d07 (diff)
downloadeclipse.jdt.core-137440659e5f6de2b611e18488e240eb603d47e1.tar.gz
eclipse.jdt.core-137440659e5f6de2b611e18488e240eb603d47e1.tar.xz
eclipse.jdt.core-137440659e5f6de2b611e18488e240eb603d47e1.zip
Bug 475996 - NullPointerException in ASTNode.checkInvocationArgumentI20180910-0310I20180907-0855I20180907-0715I20180907-0650I20180907-0400I20180906-1400
(ASTNode.java:340) Change-Id: I8eb730049c6319bd56eee44f65c5e178b3c31eac
Diffstat (limited to 'org.eclipse.jdt.core')
-rw-r--r--org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java9
-rw-r--r--org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/Scope.java4
-rw-r--r--org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/BindingKeyResolver.java2
3 files changed, 10 insertions, 5 deletions
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java
index 2ec4fb74e8..142fbe26dc 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java
@@ -1217,7 +1217,7 @@ public ParameterizedGenericMethodBinding createParameterizedGenericMethod(Method
cachedInfo[index] = parameterizedGenericMethod;
return parameterizedGenericMethod;
}
-public PolymorphicMethodBinding createPolymorphicMethod(MethodBinding originalPolymorphicMethod, TypeBinding[] parameters) {
+public PolymorphicMethodBinding createPolymorphicMethod(MethodBinding originalPolymorphicMethod, TypeBinding[] parameters, Scope scope) {
// cached info is array of already created polymorphic methods for this type
String key = new String(originalPolymorphicMethod.selector);
PolymorphicMethodBinding[] cachedInfo = (PolymorphicMethodBinding[]) this.uniquePolymorphicMethodBindings.get(key);
@@ -1230,7 +1230,12 @@ public PolymorphicMethodBinding createPolymorphicMethod(MethodBinding originalPo
} else {
if (parameterTypeBinding.isPolyType()) {
PolyTypeBinding ptb = (PolyTypeBinding) parameterTypeBinding;
- parametersTypeBinding[i] = ptb.expression.resolvedType;
+ if (scope instanceof BlockScope && ptb.expression.resolvedType == null) {
+ ptb.expression.setExpectedType(scope.getJavaLangObject());
+ parametersTypeBinding[i] = ptb.expression.resolveType((BlockScope) scope);
+ } else {
+ parametersTypeBinding[i] = ptb.expression.resolvedType;
+ }
} else {
parametersTypeBinding[i] = parameterTypeBinding.erasure();
}
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/Scope.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/Scope.java
index 0569b90c29..000a3c3463 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/Scope.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/Scope.java
@@ -867,7 +867,7 @@ public abstract class Scope {
if ((parameterCompatibilityLevel(method, arguments, tiebreakingVarargsMethods)) > NOT_COMPATIBLE) {
if ((method.tagBits & TagBits.AnnotationPolymorphicSignature) != 0) {
// generate polymorphic method
- return this.environment().createPolymorphicMethod(method, arguments);
+ return this.environment().createPolymorphicMethod(method, arguments, this);
}
return method;
}
@@ -1347,7 +1347,7 @@ public abstract class Scope {
exactMethod = computeCompatibleMethod(exactMethod, argumentTypes, invocationSite);
} else if ((exactMethod.tagBits & TagBits.AnnotationPolymorphicSignature) != 0) {
// generate polymorphic method
- return this.environment().createPolymorphicMethod(exactMethod, argumentTypes);
+ return this.environment().createPolymorphicMethod(exactMethod, argumentTypes, this);
}
return exactMethod;
}
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/BindingKeyResolver.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/BindingKeyResolver.java
index aa84993cd1..8d5a4c6045 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/BindingKeyResolver.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/BindingKeyResolver.java
@@ -431,7 +431,7 @@ public class BindingKeyResolver extends BindingKeyParser {
for (int j = 0; j < length; j++) {
parameterTypes[j] = getType(typeParameters[j]);
}
- PolymorphicMethodBinding polymorphicMethod = this.environment.createPolymorphicMethod(method, parameterTypes);
+ PolymorphicMethodBinding polymorphicMethod = this.environment.createPolymorphicMethod(method, parameterTypes, this.scope);
this.methodBinding = polymorphicMethod;
this.methodBinding = this.environment.updatePolymorphicMethodReturnType(
polymorphicMethod,

Back to the top