mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-14 18:05:27 +07:00
[lombok] IDEA-346456 IDEA-343255 improve PsiSubstitutor handling
GitOrigin-RevId: 26432e201db0a04c2ad628e8ce828b67463c00f7
This commit is contained in:
committed by
intellij-monorepo-bot
parent
1f704a102a
commit
a404c620c3
@@ -164,31 +164,26 @@ public final class DelegateHandler {
|
||||
}
|
||||
|
||||
private static void addMethodsOfType(PsiType psiType, Collection<Pair<PsiMethod, PsiSubstitutor>> results) {
|
||||
final PsiClassType.ClassResolveResult resolveResult = PsiUtil.resolveGenericsClassInType(psiType);
|
||||
final PsiClass psiClass = resolveResult.getElement();
|
||||
if (!(psiType instanceof PsiClassType classType)) return;
|
||||
final PsiClassType.ClassResolveResult classResolveResult = classType.resolveGenerics();
|
||||
final PsiClass psiClass = classResolveResult.getElement();
|
||||
if (null != psiClass) {
|
||||
final PsiSubstitutor psiClassSubstitutor = addAllInterfaceSuperSubstitutors(psiClass, resolveResult.getSubstitutor());
|
||||
|
||||
for (Pair<PsiMethod, PsiSubstitutor> pair : psiClass.getAllMethodsAndTheirSubstitutors()) {
|
||||
final PsiMethod psiMethod = pair.getFirst();
|
||||
final PsiSubstitutor classResolveResultSubstitutor = classResolveResult.getSubstitutor();
|
||||
for (PsiMethod psiMethod : psiClass.getAllMethods()) {
|
||||
if (isAcceptableMethod(psiMethod)) {
|
||||
final PsiSubstitutor psiSubstitutor = pair.getSecond().putAll(psiClassSubstitutor);
|
||||
if (!isAlreadyPresent(psiMethod, psiSubstitutor, results)) {
|
||||
results.add(Pair.pair(psiMethod, psiSubstitutor));
|
||||
final PsiClass containingClass = psiMethod.getContainingClass();
|
||||
if (containingClass != null) {
|
||||
final PsiSubstitutor psiSubstitutor =
|
||||
TypeConversionUtil.getSuperClassSubstitutor(containingClass, psiClass, classResolveResultSubstitutor);
|
||||
if (!isAlreadyPresent(psiMethod, psiSubstitutor, results)) {
|
||||
results.add(Pair.pair(psiMethod, psiSubstitutor));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static PsiSubstitutor addAllInterfaceSuperSubstitutors(PsiClass psiClass, PsiSubstitutor psiSubstitutor) {
|
||||
for (PsiClass interfaceClass : psiClass.getInterfaces()) {
|
||||
PsiSubstitutor classSubstitutor = TypeConversionUtil.getSuperClassSubstitutor(interfaceClass, psiClass, psiSubstitutor);
|
||||
psiSubstitutor = addAllInterfaceSuperSubstitutors(interfaceClass, psiSubstitutor.putAll(classSubstitutor));
|
||||
}
|
||||
return psiSubstitutor;
|
||||
}
|
||||
|
||||
private static void collectAllOwnMethods(@NotNull PsiExtensibleClass psiStartClass, Collection<Pair<PsiMethod, PsiSubstitutor>> results) {
|
||||
PsiExtensibleClass psiClass = psiStartClass;
|
||||
do {
|
||||
|
||||
Reference in New Issue
Block a user