Skip to content

Commit 55b26c2

Browse files
Rob Strykerrobstryker
authored andcommitted
[DOM Search] Various issues trying to match unresolved patterns
Signed-off-by: Rob Stryker <[email protected]>
1 parent 5bb90ac commit 55b26c2

File tree

1 file changed

+21
-4
lines changed

1 file changed

+21
-4
lines changed

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

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,15 @@ private int validateTypeParameters(Type node) {
328328
for( int j = 0; j < thisLevelTypeParams.length; j++ ) {
329329
String patternSig = new String(thisLevelTypeParams[j]);
330330
IBinding patternTypeBinding = JdtCoreDomPackagePrivateUtility.findBindingForType(node, patternSig);
331-
IBinding domBinding = DOMASTNodeUtils.getBinding((ASTNode)typeArgs.get(j));
331+
if( patternTypeBinding == null ) {
332+
boolean plusOrMinus = patternSig.startsWith("+") || patternSig.startsWith("-");
333+
String safePatternString = plusOrMinus ? patternSig.substring(1) : patternSig;
334+
if( safePatternString.startsWith("Q")) {
335+
patternTypeBinding = JdtCoreDomPackagePrivateUtility.findUnresolvedBindingForType(node, safePatternString);
336+
}
337+
}
338+
ASTNode argj = (ASTNode)typeArgs.get(j);
339+
IBinding domBinding = DOMASTNodeUtils.getBinding(argj);
332340
String domSig = domBinding == null ? null : domBinding instanceof JavacTypeBinding jctb ? jctb.getGenericTypeSignature(false) : domBinding.getKey();
333341
if( patternSig.equals(("*")))
334342
continue;
@@ -359,9 +367,18 @@ private int validateTypeParameters(Type node) {
359367
String patternSigWithoutPrefix = patternSig.startsWith("+") || patternSig.startsWith("-") ? patternSig.substring(1) : patternSig;
360368
String domSigWithoutPrefix = domSig.startsWith("+") || domSig.startsWith("-") ? domSig.substring(1) : domSig;
361369
String patternSig2 = patternSigWithoutPrefix.substring(1);
362-
if( !patternSig2.equals(domSigWithoutPrefix.substring(1)) && !domSig.endsWith("." + patternSig2)) {
363-
return TYPE_PARAMS_COUNT_MATCH;
370+
if( patternSig2.equals(domSigWithoutPrefix.substring(1)))
371+
continue;
372+
if( domSig.endsWith("." + patternSig2) )
373+
continue;
374+
if( argj instanceof SimpleType stt && stt.getName() instanceof SimpleName snn) {
375+
String identifier = snn.getIdentifier();
376+
String patternSig3 = patternSig2.endsWith(";") ? patternSig2.substring(0, patternSig2.length() - 1) : patternSig2;
377+
if( matchesName(patternSig3.toCharArray(), identifier.toCharArray()) ) {
378+
continue;
379+
}
364380
}
381+
return TYPE_PARAMS_COUNT_MATCH;
365382
} else if( !patternSig.equals(domSig)) {
366383
return TYPE_PARAMS_COUNT_MATCH;
367384
}
@@ -409,7 +426,7 @@ private boolean validateOneTypeParameterExtends(String criteriaSignature, ITypeB
409426
if( evaluateSigIsUnresolved && boundSig.endsWith("." + evaluateSigTrimmed)) {
410427
return true;
411428
}
412-
if( !evaluateSigIsUnresolved && evaluateBinding instanceof ITypeBinding itb) {
429+
if( evaluateBinding instanceof ITypeBinding itb) {
413430
ITypeBinding working = itb;
414431
while(working != null) {
415432
ITypeBinding superClaz = working.getSuperclass();

0 commit comments

Comments
 (0)