Skip to content

Commit a4cc36b

Browse files
Rob Strykerrobstryker
authored andcommitted
Handle regressions in binding key generation
Signed-off-by: Rob Stryker <[email protected]> Fix many regressions in previously successful tests Signed-off-by: Rob Stryker <[email protected]> Fix regression in org.eclipse.jdt.core.tests.dom.ASTConverterTestAST3_2 test0666 Signed-off-by: Rob Stryker <[email protected]> Fix regressions in completion Signed-off-by: Rob Stryker <[email protected]>
1 parent 8010b37 commit a4cc36b

File tree

8 files changed

+96
-62
lines changed

8 files changed

+96
-62
lines changed

org.eclipse.jdt.core.javac/src/org/eclipse/jdt/core/dom/JavacCompilationUnitResolver.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,8 @@ private List<org.eclipse.jdt.internal.compiler.env.ICompilationUnit> createSourc
159159
int length = sourceFilePaths.length;
160160
List<org.eclipse.jdt.internal.compiler.env.ICompilationUnit> sourceUnitList = new ArrayList<>(length);
161161
for (int i = 0; i < length; i++) {
162-
org.eclipse.jdt.internal.compiler.env.ICompilationUnit obj = createSourceUnit(sourceFilePaths[i], encodings[i]);
162+
String encoding = encodings == null ? null : i >= encodings.length ? null : encodings[i];
163+
org.eclipse.jdt.internal.compiler.env.ICompilationUnit obj = createSourceUnit(sourceFilePaths[i], encoding);
163164
if( obj != null )
164165
sourceUnitList.add(obj);
165166
}

org.eclipse.jdt.core.javac/src/org/eclipse/jdt/internal/core/search/PatternLocatorVisitor.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,8 @@ private <T extends ASTNode> LocatorResponse defaultVisitImplementationWithFunc(
108108
n2 = n2 == null ? node : n2;
109109
if (resp.level() == PatternLocator.POSSIBLE_MATCH && mustResolve) {
110110
LocatorResponse resp2 = wrapper.resolveLevel(n2, bindingFunc.apply(n2), this.locator);
111-
resp = new LocatorResponse(resp2.level(), resp.replacementNodeFound(), n2, resp2.added(), resp2.canVisitChildren());
111+
n2 = resp2.replacementNodeFound() ? resp2.replacement() : n2;
112+
resp = new LocatorResponse(resp2.level(), resp.replacementNodeFound() || resp2.replacementNodeFound(), n2, resp2.added(), resp2.canVisitChildren());
112113
}
113114
boolean added = resp.added();
114115
if( !added ) {
@@ -204,7 +205,7 @@ public boolean visit(NameQualifiedType type) {
204205
}
205206
@Override
206207
public boolean visit(ParameterizedType node) {
207-
LocatorResponse resp = defaultVisitImplementationWithFunc(node.getType(), (x,y) -> y.match(node, this.nodeSet, this.locator), DOMASTNodeUtils::getBinding);
208+
LocatorResponse resp = defaultVisitImplementationWithFunc(node, (x,y) -> y.match(node, this.nodeSet, this.locator), DOMASTNodeUtils::getBinding);
208209
if( resp.level() == 0 && resp.canVisitChildren() ) {
209210
return true;
210211
}

org.eclipse.jdt.core.javac/src/org/eclipse/jdt/internal/core/search/matching/DOMTypeReferenceLocator.java

Lines changed: 28 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -145,31 +145,40 @@ public LocatorResponse match(org.eclipse.jdt.core.dom.ASTNode node, NodeSetWrapp
145145
}
146146
return toResponse(IMPOSSIBLE_MATCH);
147147
}
148+
149+
private LocatorResponse matchTypeNodeReturnComponent(Type node, String qualifiedNameFromNode, String fqqn,
150+
int defaultLevel) {
151+
if( this.locator.matchesName(qualifiedNameFromNode.toCharArray(), fqqn.toCharArray())) {
152+
Type componentType = node instanceof ParameterizedType pt ? pt.getType() : null;
153+
boolean replacementFound = componentType != node;
154+
int typeParamMatches = validateTypeParameters(node);
155+
if( typeParamMatches == TYPE_PARAMS_MATCH) {
156+
return new LocatorResponse(defaultLevel, replacementFound, componentType, false, false);
157+
} else {
158+
int ret = typeParamMatches == TYPE_PARAMS_COUNT_MATCH ? ERASURE_MATCH : IMPOSSIBLE_MATCH;
159+
return new LocatorResponse(ret, replacementFound, componentType, false, false);
160+
}
161+
}
162+
return null;
163+
}
164+
148165
@Override
149166
public LocatorResponse match(Type node, NodeSetWrapper nodeSet, MatchLocator locator) {
150167
if (failsFineGrain(node, this.locator.fineGrain())) {
151168
return toResponse(IMPOSSIBLE_MATCH);
152169
}
170+
int defaultLevel = this.locator.pattern.mustResolve ? POSSIBLE_MATCH : ACCURATE_MATCH;
153171
if (this.locator.pattern.simpleName == null) {
154-
int v = nodeSet.addMatch(node, this.locator.pattern.mustResolve ? POSSIBLE_MATCH : ACCURATE_MATCH);
172+
int v = nodeSet.addMatch(node, defaultLevel);
155173
return toResponse(v, true);
156174
}
157175
String qualifiedNameFromNode = getQualifiedNameFromType(node);
158176
String simpleNameFromNode = getNameStringFromType(node);
159177
if( qualifiedNameFromNode != null && this.locator.pattern.qualification != null) {
160178
// we have a qualified name in the node, and our pattern is searching for a qualified name
161179
String patternQualifiedString = (new String(this.locator.pattern.qualification) + "." + new String(this.locator.pattern.simpleName));
162-
char[] patternQualified = patternQualifiedString.toCharArray();
163-
if( this.locator.matchesName(patternQualified, qualifiedNameFromNode.toCharArray())) {
164-
int typeParamMatches = validateTypeParameters(node);
165-
if( typeParamMatches == TYPE_PARAMS_MATCH) {
166-
int v = nodeSet.addMatch(node, this.locator.pattern.mustResolve ? POSSIBLE_MATCH : ACCURATE_MATCH);
167-
return toResponse(v, true);
168-
} else {
169-
int ret = typeParamMatches == TYPE_PARAMS_COUNT_MATCH ? ERASURE_MATCH : IMPOSSIBLE_MATCH;
170-
return new LocatorResponse(ret, false, node, false, false);
171-
}
172-
}
180+
LocatorResponse r1 = matchTypeNodeReturnComponent(node, patternQualifiedString, qualifiedNameFromNode, defaultLevel);
181+
if( r1 != null ) return r1;
173182

174183
// Not an exact match. We might need to check for more qualifications
175184
if( qualifiedNameFromNode.endsWith(patternQualifiedString)) {
@@ -178,33 +187,17 @@ public LocatorResponse match(Type node, NodeSetWrapper nodeSet, MatchLocator loc
178187
String fqqnImport = fqqnFromImport(firstSegment);
179188
if( fqqnImport != null ) {
180189
String fqqn = fqqnImport + patternQualifiedString.substring(firstSegment.length());
181-
if( this.locator.matchesName(qualifiedNameFromNode.toCharArray(), fqqn.toCharArray())) {
182-
int typeParamMatches = validateTypeParameters(node);
183-
if( typeParamMatches == TYPE_PARAMS_MATCH) {
184-
int v = nodeSet.addMatch(node, this.locator.pattern.mustResolve ? POSSIBLE_MATCH : ACCURATE_MATCH);
185-
return toResponse(v, true);
186-
} else {
187-
int ret = typeParamMatches == TYPE_PARAMS_COUNT_MATCH ? ERASURE_MATCH : IMPOSSIBLE_MATCH;
188-
return new LocatorResponse(ret, false, node, false, false);
189-
}
190-
}
190+
r1 = matchTypeNodeReturnComponent(node, qualifiedNameFromNode, fqqn, defaultLevel);
191+
if( r1 != null ) return r1;
191192
}
192193
} else if( patternQualifiedString.endsWith(qualifiedNameFromNode)) {
193194
String[] qualifiedNameFromNodeStringSegments = qualifiedNameFromNode.split("\\.");
194195
String firstSegment = qualifiedNameFromNodeStringSegments == null || qualifiedNameFromNodeStringSegments.length == 0 ? null : qualifiedNameFromNodeStringSegments[0];
195196
String fqqnImport = fqqnFromImport(firstSegment);
196197
if( fqqnImport != null ) {
197198
String fqqn = fqqnImport + qualifiedNameFromNode.substring(firstSegment.length());
198-
if( this.locator.matchesName(patternQualified, fqqn.toCharArray())) {
199-
int typeParamMatches = validateTypeParameters(node);
200-
if( typeParamMatches == TYPE_PARAMS_MATCH) {
201-
int v = nodeSet.addMatch(node, this.locator.pattern.mustResolve ? POSSIBLE_MATCH : ACCURATE_MATCH);
202-
return toResponse(v, true);
203-
} else {
204-
int ret = typeParamMatches == TYPE_PARAMS_COUNT_MATCH ? ERASURE_MATCH : IMPOSSIBLE_MATCH;
205-
return new LocatorResponse(ret, false, node, false, false);
206-
}
207-
}
199+
r1 = matchTypeNodeReturnComponent(node, patternQualifiedString, fqqn, defaultLevel);
200+
if( r1 != null ) return r1;
208201
}
209202
}
210203
} else if (simpleNameFromNode != null ) {
@@ -391,6 +384,9 @@ public LocatorResponse resolveLevel(org.eclipse.jdt.core.dom.ASTNode node, IBind
391384
return resolveLevelForImportBinding(node, typeBinding, locator);
392385
}
393386
int v = resolveLevelForTypeBinding(node, typeBinding, locator);
387+
if( node instanceof ParameterizedType pt) {
388+
return new LocatorResponse(v, true, pt.getType(), false, false);
389+
}
394390
return toResponse(v);
395391
}
396392
if( binding instanceof IPackageBinding && node instanceof SimpleName sn) {

org.eclipse.jdt.core.javac/src/org/eclipse/jdt/internal/javac/dom/JavacMethodBinding.java

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -365,15 +365,20 @@ private String computeKey() {
365365
}
366366

367367
static void getKey(StringBuilder builder, MethodSymbol methodSymbol, MethodType methodType, Type parentType, JavacBindingResolver resolver) throws BindingKeyException {
368+
getKey(builder, methodSymbol, methodType, parentType, false, resolver);
369+
}
370+
371+
static void getKey(StringBuilder builder, MethodSymbol methodSymbol, MethodType methodType, Type parentType, boolean useSlashes, JavacBindingResolver resolver) throws BindingKeyException {
372+
368373
if (parentType != null) {
369-
builder.append(resolver.bindings.getTypeBinding(parentType).getKey());
374+
builder.append(resolver.bindings.getTypeBinding(parentType).getKey(true, true));
370375
} else {
371376
Symbol ownerSymbol = methodSymbol.owner;
372377
while (ownerSymbol != null && !(ownerSymbol instanceof TypeSymbol)) {
373378
ownerSymbol = ownerSymbol.owner;
374379
}
375380
if (ownerSymbol instanceof TypeSymbol ownerTypeSymbol && ownerTypeSymbol.type != Type.noType) {
376-
JavacTypeBinding.getKey(builder, resolver.getTypes().erasure(ownerTypeSymbol.type), false, resolver);
381+
JavacTypeBinding.getKey(builder, resolver.getTypes().erasure(ownerTypeSymbol.type), false, false, useSlashes, resolver);
377382
} else {
378383
throw new BindingKeyException(new IllegalArgumentException("Method has no owning class"));
379384
}
@@ -391,7 +396,7 @@ static void getKey(StringBuilder builder, MethodSymbol methodSymbol, MethodType
391396
if (methodType != null && !methodType.getTypeArguments().isEmpty()) {
392397
builder.append('<');
393398
for (var typeParam : methodType.getTypeArguments()) {
394-
JavacTypeBinding.getKey(builder, typeParam, false, resolver);
399+
JavacTypeBinding.getKey(builder, typeParam, false, true, useSlashes, resolver);
395400
}
396401
builder.append('>');
397402
} else if (!methodSymbol.getTypeParameters().isEmpty()) {
@@ -404,18 +409,18 @@ static void getKey(StringBuilder builder, MethodSymbol methodSymbol, MethodType
404409
builder.append('(');
405410
if (methodType != null) {
406411
for (var param : methodType.getParameterTypes()) {
407-
JavacTypeBinding.getKey(builder, param, false, resolver);
412+
JavacTypeBinding.getKey(builder, param, false, false, true, resolver);
408413
}
409414
} else {
410415
for (var param : methodSymbol.getParameters()) {
411-
JavacTypeBinding.getKey(builder, param.type, false, resolver);
416+
JavacTypeBinding.getKey(builder, param.type, false, false, true, resolver);
412417
}
413418
}
414419
builder.append(')');
415420
if (methodType != null && !(methodType.getReturnType() instanceof JCNoType)) {
416-
JavacTypeBinding.getKey(builder, methodType.getReturnType(), false, true, resolver);
421+
JavacTypeBinding.getKey(builder, methodType.getReturnType(), false, true, true, resolver);
417422
} else if (!(methodSymbol.getReturnType() instanceof JCNoType)) {
418-
JavacTypeBinding.getKey(builder, methodSymbol.getReturnType(), false, resolver);
423+
JavacTypeBinding.getKey(builder, methodSymbol.getReturnType(), false, true, true, resolver);
419424
}
420425
if (
421426
methodSymbol.getThrownTypes().stream().anyMatch(a -> !a.getParameterTypes().isEmpty())

org.eclipse.jdt.core.javac/src/org/eclipse/jdt/internal/javac/dom/JavacTypeBinding.java

Lines changed: 43 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@ public String getKey() {
314314
}
315315

316316
private String computeKey() {
317-
return getKeyWithPossibleGenerics(this.type, this.typeSymbol);
317+
return getKeyWithPossibleGenerics(this.type, this.typeSymbol, ITypeBinding::getKey, true);
318318
}
319319
public String getKeyWithPossibleGenerics(Type t, TypeSymbol s) {
320320
return getKeyWithPossibleGenerics(t, s, ITypeBinding::getKey);
@@ -323,22 +323,26 @@ private String getKeyWithPossibleGenerics(Type t, TypeSymbol s, Function<ITypeBi
323323
return getKeyWithPossibleGenerics(t, s, parameterizedCallback, false);
324324
}
325325
private String getKeyWithPossibleGenerics(Type t, TypeSymbol s, Function<ITypeBinding, String> parameterizedCallback, boolean useSlashes) {
326-
String base = removeTrailingSemicolon(getKey(t, s.flatName(), false, useSlashes));
327-
if (isGenericType()) {
326+
String base1 = getKey(t, s.flatName(), false, useSlashes);
327+
boolean removingSemi = base1.endsWith(";");
328+
String base = removingSemi ? removeTrailingSemicolon(base1) : base1;
329+
if (isGenericType(t)) {
328330
return base + '<'
329331
+ Arrays.stream(getTypeParameters())
330332
.map(ITypeBinding::getName)
331333
.map(name -> 'T' + name + ';')
332334
.collect(Collectors.joining())
333335
+ ">;";
334-
} else if (isParameterizedType()) {
336+
} else if (isParameterizedType(t)) {
335337
return base + '<'
336338
+ Arrays.stream(getTypeArguments())
337339
.map(parameterizedCallback)
338340
.collect(Collectors.joining())
339341
+ ">;";
342+
} else if( isRawType(t)) {
343+
return base + "<>;";
340344
}
341-
return base + ";";
345+
return base1;
342346
}
343347

344348
public String getGenericTypeSignature(boolean useSlashes) {
@@ -387,6 +391,10 @@ public String getKey(boolean includeTypeParameters) {
387391
return getKey(this.type, this.typeSymbol.flatName(), includeTypeParameters);
388392
}
389393

394+
public String getKey(boolean includeTypeParameters, boolean useSlashes) {
395+
return getKey(this.type, this.typeSymbol.flatName(), includeTypeParameters, useSlashes);
396+
}
397+
390398
public String getKey(Type t, Name n) {
391399
return getKey(type, n, true);
392400
}
@@ -405,17 +413,25 @@ public String getKey(Type t, Name n, boolean includeTypeParameters, boolean useS
405413

406414

407415
static void getKey(StringBuilder builder, Type typeToBuild, boolean isLeaf, JavacBindingResolver resolver) throws BindingKeyException {
408-
getKey(builder, typeToBuild, typeToBuild.asElement().flatName(), isLeaf, false, resolver);
416+
getKey(builder, typeToBuild, typeToBuild.asElement().flatName(), isLeaf, false, false, resolver);
409417
}
410-
418+
411419
static void getKey(StringBuilder builder, Type typeToBuild, boolean isLeaf, boolean includeParameters, JavacBindingResolver resolver) throws BindingKeyException {
412-
getKey(builder, typeToBuild, typeToBuild.asElement().flatName(), isLeaf, includeParameters, resolver);
420+
getKey(builder, typeToBuild, typeToBuild.asElement().flatName(), isLeaf, includeParameters, false, resolver);
421+
}
422+
423+
static void getKey(StringBuilder builder, Type typeToBuild, boolean isLeaf, boolean includeParameters, boolean useSlashes, JavacBindingResolver resolver) throws BindingKeyException {
424+
getKey(builder, typeToBuild, typeToBuild.asElement().flatName(), isLeaf, includeParameters, useSlashes, resolver);
413425
}
414426

415427
static void getKey(StringBuilder builder, Type typeToBuild, Name n, boolean isLeaf, boolean includeParameters, JavacBindingResolver resolver) throws BindingKeyException {
416428
getKey(builder, typeToBuild, n.toString(), isLeaf, includeParameters, false, resolver);
417429
}
418430

431+
static void getKey(StringBuilder builder, Type typeToBuild, Name n, boolean isLeaf, boolean includeParameters, boolean useSlashes, JavacBindingResolver resolver) throws BindingKeyException {
432+
getKey(builder, typeToBuild, n.toString(), isLeaf, includeParameters, useSlashes, resolver);
433+
}
434+
419435
static void getKey(StringBuilder builder, Type typeToBuild, String n, boolean isLeaf, boolean includeParameters, boolean useSlashes, JavacBindingResolver resolver) throws BindingKeyException {
420436

421437
if (typeToBuild instanceof Type.JCNoType) {
@@ -435,18 +451,18 @@ static void getKey(StringBuilder builder, Type typeToBuild, String n, boolean is
435451
}
436452
if (typeToBuild instanceof ArrayType arrayType) {
437453
builder.append('[');
438-
getKey(builder, arrayType.elemtype, isLeaf, includeParameters, resolver);
454+
getKey(builder, arrayType.elemtype, isLeaf, includeParameters, useSlashes, resolver);
439455
return;
440456
}
441457
if (typeToBuild instanceof Type.WildcardType wildcardType) {
442458
if (wildcardType.isUnbound()) {
443459
builder.append("+Ljava/lang/Object;");
444460
} else if (wildcardType.isExtendsBound()) {
445461
builder.append('+');
446-
getKey(builder, wildcardType.getExtendsBound(), isLeaf, includeParameters, resolver);
462+
getKey(builder, wildcardType.getExtendsBound(), isLeaf, includeParameters, useSlashes, resolver);
447463
} else if (wildcardType.isSuperBound()) {
448464
builder.append('-');
449-
getKey(builder, wildcardType.getSuperBound(), isLeaf, includeParameters, resolver);
465+
getKey(builder, wildcardType.getSuperBound(), isLeaf, includeParameters, useSlashes, resolver);
450466
}
451467
return;
452468
}
@@ -506,7 +522,7 @@ static void getKey(StringBuilder builder, Type typeToBuild, String n, boolean is
506522
if ((b1 || b2) && includeParameters) {
507523
builder.append('<');
508524
for (var typeArgument : typeToBuild.getTypeArguments()) {
509-
getKey(builder, typeArgument, false, includeParameters, resolver);
525+
getKey(builder, typeArgument, false, includeParameters, useSlashes, resolver);
510526
}
511527
builder.append('>');
512528
}
@@ -1227,9 +1243,14 @@ public boolean isFromSource() {
12271243

12281244
@Override
12291245
public boolean isGenericType() {
1230-
return !isRawType() && this.type.isParameterized() && this.isGeneric;
1246+
return isGenericType(this.type);
1247+
}
1248+
1249+
public boolean isGenericType(Type t) {
1250+
return !isRawType(t) && t.isParameterized() && this.isGeneric;
12311251
}
12321252

1253+
12331254
@Override
12341255
public boolean isInterface() {
12351256
return this.typeSymbol.isInterface();
@@ -1275,7 +1296,10 @@ public boolean isNullType() {
12751296

12761297
@Override
12771298
public boolean isParameterizedType() {
1278-
return this.type.isParameterized() && !this.isGeneric;
1299+
return isParameterizedType(this.type);
1300+
}
1301+
public boolean isParameterizedType(Type t) {
1302+
return t.isParameterized() && !this.isGeneric;
12791303
}
12801304

12811305
@Override
@@ -1285,7 +1309,11 @@ public boolean isPrimitive() {
12851309

12861310
@Override
12871311
public boolean isRawType() {
1288-
return this.type.isRaw();
1312+
return isRawType(this.type);
1313+
}
1314+
1315+
private boolean isRawType(Type type2) {
1316+
return type2.isRaw();
12891317
}
12901318

12911319
@Override

org.eclipse.jdt.core.javac/src/org/eclipse/jdt/internal/javac/dom/JavacTypeVariableBinding.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public String getKey() {
5656
IBinding ownerBinding = this.bindingResolver.bindings.getBinding(this.sym.owner, null);
5757
if (ownerBinding != null) {
5858
if( ownerBinding instanceof JavacTypeBinding jctb && !(ownerBinding instanceof JavacTypeVariableBinding)) {
59-
builder.append(jctb.getKey(false));
59+
builder.append(jctb.getKey(false, true));
6060
} else {
6161
builder.append(ownerBinding.getKey());
6262
}
@@ -90,7 +90,7 @@ static String getTypeVariableKey(TypeVariableSymbol sym, JavacBindingResolver re
9090
if (bound.isParameterized()) {
9191
builder.append(':');
9292
}
93-
JavacTypeBinding.getKey(builder, bound, false, resolver);
93+
JavacTypeBinding.getKey(builder, bound, false, false, true, resolver);
9494
}
9595
return builder.toString();
9696
}

org.eclipse.jdt.core.javac/src/org/eclipse/jdt/internal/javac/dom/JavacVariableBinding.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -200,18 +200,19 @@ private String getKeyImpl() throws BindingKeyException {
200200
if( classSymbol.type.asElement() == null ) {
201201
return null;
202202
}
203-
JavacTypeBinding.getKey(builder, classSymbol.type, false, this.resolver);
203+
JavacTypeBinding.getKey(builder, classSymbol.type, false, false, true, this.resolver);
204204
builder.append('.');
205205
builder.append(this.variableSymbol.name);
206206
builder.append(')');
207207
if (this.variableSymbol.type != null) {
208-
JavacTypeBinding.getKey(builder, this.variableSymbol.type, false, this.resolver);
208+
JavacTypeBinding.getKey(builder, this.variableSymbol.type, false, false, true, this.resolver);
209209
} else {
210210
builder.append('V');
211211
}
212212
return builder.toString();
213213
} else if (this.variableSymbol.owner instanceof MethodSymbol methodSymbol) {
214-
JavacMethodBinding.getKey(builder, methodSymbol, methodSymbol.type instanceof Type.MethodType methodType ? methodType : null, null, this.resolver);
214+
Type.MethodType toUse = methodSymbol.type instanceof Type.MethodType methodType ? methodType : null;
215+
JavacMethodBinding.getKey(builder, methodSymbol, toUse, null, true, this.resolver);
215216
// no need to get it right, just get it right enough
216217
if (!isUnique) {
217218
builder.append(this.variableSymbol.pos);

org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter15JLS4Test.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3880,6 +3880,8 @@ public void test0127() throws CoreException {
38803880
assertEquals("Not a method invocation", ASTNode.METHOD_INVOCATION, expression.getNodeType());
38813881
methodInvocation = (MethodInvocation) expression;
38823882
IMethodBinding methodBinding2 = methodInvocation.resolveMethodBinding();
3883+
String k1 = methodBinding.getKey();
3884+
String k2 = methodBinding2.getKey();
38833885
assertFalse("Keys are equals", methodBinding.getKey().equals(methodBinding2.getKey()));
38843886
assertFalse("bindings are equals", methodBinding.isEqualTo(methodBinding2));
38853887
}

0 commit comments

Comments
 (0)