1616import java .util .stream .Collectors ;
1717import java .util .stream .Stream ;
1818
19- import org .eclipse .jdt .core .Signature ;
2019import org .eclipse .jdt .core .compiler .CharOperation ;
2120import org .eclipse .jdt .core .dom .AST ;
2221import org .eclipse .jdt .core .dom .ASTNode ;
2322import org .eclipse .jdt .core .dom .Annotation ;
2423import org .eclipse .jdt .core .dom .AnnotationTypeMemberDeclaration ;
25- import org .eclipse .jdt .core .dom .Expression ;
2624import org .eclipse .jdt .core .dom .IBinding ;
2725import org .eclipse .jdt .core .dom .IMethodBinding ;
2826import org .eclipse .jdt .core .dom .ITypeBinding ;
29- import org .eclipse .jdt .core .dom .IVariableBinding ;
3027import org .eclipse .jdt .core .dom .JdtCoreDomPackagePrivateUtility ;
3128import org .eclipse .jdt .core .dom .MemberValuePair ;
3229import org .eclipse .jdt .core .dom .MethodDeclaration ;
@@ -194,7 +191,7 @@ protected int matchMethod(ASTNode node, IMethodBinding method, boolean skipImpos
194191 if (level == IMPOSSIBLE_MATCH )
195192 return level ;
196193
197- level = matchMethodBindingReturnType ( node , method );
194+ level = resolveLevelForType ( this . locator . pattern . returnSimpleName , this . locator . pattern . returnQualification , method . getReturnType () );
198195 if (level == IMPOSSIBLE_MATCH )
199196 return level ;
200197
@@ -207,49 +204,6 @@ protected int matchMethod(ASTNode node, IMethodBinding method, boolean skipImpos
207204 return level ;
208205 }
209206
210- private int matchMethodBindingReturnType (ASTNode node , IMethodBinding method ) {
211- boolean isExactPattern = isPatternExactMatch ();
212- boolean isErasurePattern = isPatternErasureMatch ();
213- boolean isEquivPattern = isPatternEquivalentMatch ();
214-
215- ITypeBinding returnTypeFromBinding = method .getReturnType ();
216- char [][] sigs = this .locator .pattern .returnTypeSignatures ;
217- if ( sigs != null && sigs .length > 0 && sigs [0 ] != null ) {
218- String patternSig = new String (sigs [0 ]);
219- IBinding patternBinding = findPossiblyUnresolvedBindingForType (node , patternSig );
220- boolean match = TypeArgumentMatchingUtility .validateSingleTypeArgMatches (isExactPattern , patternSig , patternBinding , returnTypeFromBinding );
221- if ( match ) {
222- // Do some extra checks
223- if ( node instanceof MethodInvocation mi ) {
224- Expression e = mi .getExpression ();
225- IBinding b = DOMASTNodeUtils .getBinding (e );
226- if ( b != null ) {
227- if ( b instanceof IVariableBinding ivb ) {
228- ITypeBinding t1 = ivb .getType ();
229- ITypeBinding [] bindingTypeArgs = t1 .getTypeArguments ();
230- String [] bindingTypeArgsSimple = Arrays .asList (bindingTypeArgs ).stream ().map (x -> Signature .getSignatureSimpleName (x .getKey ())).toArray (String []::new );
231- String [] patternTypeArgsArr = Signature .getTypeArguments (patternSig );
232- String [] patternTypeArgsSimple = Arrays .asList (patternTypeArgsArr ).stream ().map (x -> Signature .getSignatureSimpleName (x )).toArray (String []::new );
233- if ( patternTypeArgsSimple .length != bindingTypeArgs .length ) {
234- match = false ;
235- } else if ( !Arrays .equals (bindingTypeArgsSimple , patternTypeArgsSimple )) {
236- match = false ;
237- }
238- }
239- }
240- }
241- }
242- if ( !match ) {
243- if ( isExactPattern || (!isErasurePattern && !isEquivPattern )) {
244- return IMPOSSIBLE_MATCH ;
245- }
246- return ERASURE_MATCH ;
247- }
248- }
249-
250- return ACCURATE_MATCH ;
251- }
252-
253207 private IBinding findPossiblyUnresolvedBindingForType (ASTNode node , String patternSig ) {
254208 IBinding patternBinding = JdtCoreDomPackagePrivateUtility .findBindingForType (node , patternSig );
255209 if ( patternBinding == null ) {
@@ -501,9 +455,6 @@ public LocatorResponse resolveLevel(org.eclipse.jdt.core.dom.ASTNode node, IBind
501455 }
502456 if (binding instanceof IMethodBinding method ) {
503457 boolean skipVerif = this .locator .pattern .findDeclarations && this .locator .mayBeGeneric ;
504- if (Objects .equals (binding .getJavaElement (), this .locator .pattern .focus )) {
505- return toResponse (ACCURATE_MATCH );
506- }
507458 int methodLevel = matchMethod (node , method , skipVerif , false );
508459 if (methodLevel == IMPOSSIBLE_MATCH ) {
509460 IMethodBinding decl = method .getMethodDeclaration ();
0 commit comments