mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-06 03:21:12 +07:00
search for method implementations with correct substitutor
This commit is contained in:
@@ -40,7 +40,9 @@ import com.intellij.openapi.ui.popup.PopupChooserBuilder;
|
||||
import com.intellij.openapi.util.Computable;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.search.searches.ClassInheritorsSearch;
|
||||
import com.intellij.psi.util.MethodSignatureUtil;
|
||||
import com.intellij.psi.util.PsiUtilCore;
|
||||
import com.intellij.psi.util.TypeConversionUtil;
|
||||
import com.intellij.ui.components.JBList;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
|
||||
@@ -180,7 +182,9 @@ public class ImplementAbstractMethodHandler {
|
||||
ArrayList<PsiClass> list = new ArrayList<PsiClass>();
|
||||
for (PsiClass inheritor : ClassInheritorsSearch.search(psiClass, true)) {
|
||||
if (!inheritor.isInterface()) {
|
||||
PsiMethod method = inheritor.findMethodBySignature(myMethod, true);
|
||||
final PsiSubstitutor classSubstitutor = TypeConversionUtil.getClassSubstitutor(psiClass, inheritor, PsiSubstitutor.EMPTY);
|
||||
LOG.assertTrue(classSubstitutor != null);
|
||||
PsiMethod method = MethodSignatureUtil.findMethodBySignature(inheritor, myMethod.getSignature(classSubstitutor), true);
|
||||
if (method == null || !method.getContainingClass().equals(psiClass)) continue;
|
||||
list.add(inheritor);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
// "Implement method 'foo'" "true"
|
||||
|
||||
abstract class A<T> {
|
||||
abstract String foo(T t);
|
||||
}
|
||||
|
||||
class B extends A<String> {
|
||||
|
||||
@Override
|
||||
String foo(String s1) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
class ABC extends A<Integer> {
|
||||
@Override
|
||||
String foo(Integer integer) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
// "Implement method 'foo'" "true"
|
||||
|
||||
abstract class A<T> {
|
||||
abstract String f<caret>oo(T t);
|
||||
}
|
||||
|
||||
class B extends A<String> {
|
||||
|
||||
@Override
|
||||
String foo(String s1) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
class ABC extends A<Integer> {}
|
||||
Reference in New Issue
Block a user