mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-16 22:51:17 +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) {
|
private static void addMethodsOfType(PsiType psiType, Collection<Pair<PsiMethod, PsiSubstitutor>> results) {
|
||||||
final PsiClassType.ClassResolveResult resolveResult = PsiUtil.resolveGenericsClassInType(psiType);
|
if (!(psiType instanceof PsiClassType classType)) return;
|
||||||
final PsiClass psiClass = resolveResult.getElement();
|
final PsiClassType.ClassResolveResult classResolveResult = classType.resolveGenerics();
|
||||||
|
final PsiClass psiClass = classResolveResult.getElement();
|
||||||
if (null != psiClass) {
|
if (null != psiClass) {
|
||||||
final PsiSubstitutor psiClassSubstitutor = addAllInterfaceSuperSubstitutors(psiClass, resolveResult.getSubstitutor());
|
final PsiSubstitutor classResolveResultSubstitutor = classResolveResult.getSubstitutor();
|
||||||
|
for (PsiMethod psiMethod : psiClass.getAllMethods()) {
|
||||||
for (Pair<PsiMethod, PsiSubstitutor> pair : psiClass.getAllMethodsAndTheirSubstitutors()) {
|
|
||||||
final PsiMethod psiMethod = pair.getFirst();
|
|
||||||
if (isAcceptableMethod(psiMethod)) {
|
if (isAcceptableMethod(psiMethod)) {
|
||||||
final PsiSubstitutor psiSubstitutor = pair.getSecond().putAll(psiClassSubstitutor);
|
final PsiClass containingClass = psiMethod.getContainingClass();
|
||||||
if (!isAlreadyPresent(psiMethod, psiSubstitutor, results)) {
|
if (containingClass != null) {
|
||||||
results.add(Pair.pair(psiMethod, psiSubstitutor));
|
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) {
|
private static void collectAllOwnMethods(@NotNull PsiExtensibleClass psiStartClass, Collection<Pair<PsiMethod, PsiSubstitutor>> results) {
|
||||||
PsiExtensibleClass psiClass = psiStartClass;
|
PsiExtensibleClass psiClass = psiStartClass;
|
||||||
do {
|
do {
|
||||||
|
|||||||
Reference in New Issue
Block a user