Skip to content

Commit 710553f

Browse files
mickaelistriadatho7561
authored andcommitted
[Search] Improve comparison of method return type
1 parent 4655018 commit 710553f

File tree

1 file changed

+1
-50
lines changed

1 file changed

+1
-50
lines changed

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

Lines changed: 1 addition & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,14 @@
1616
import java.util.stream.Collectors;
1717
import java.util.stream.Stream;
1818

19-
import org.eclipse.jdt.core.Signature;
2019
import org.eclipse.jdt.core.compiler.CharOperation;
2120
import org.eclipse.jdt.core.dom.AST;
2221
import org.eclipse.jdt.core.dom.ASTNode;
2322
import org.eclipse.jdt.core.dom.Annotation;
2423
import org.eclipse.jdt.core.dom.AnnotationTypeMemberDeclaration;
25-
import org.eclipse.jdt.core.dom.Expression;
2624
import org.eclipse.jdt.core.dom.IBinding;
2725
import org.eclipse.jdt.core.dom.IMethodBinding;
2826
import org.eclipse.jdt.core.dom.ITypeBinding;
29-
import org.eclipse.jdt.core.dom.IVariableBinding;
3027
import org.eclipse.jdt.core.dom.JdtCoreDomPackagePrivateUtility;
3128
import org.eclipse.jdt.core.dom.MemberValuePair;
3229
import 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

Comments
 (0)