mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Revert "JavaCompletionUtil: use findMethodInSuperClassBySignatureInDerived" (e9f00a8) + test
It appears that findMethodInSuperClassBySignatureInDerived does not substitute recursively, at least in some cases.
This commit is contained in:
@@ -44,6 +44,7 @@ import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.JBIterable;
|
||||
import com.siyeh.ig.psiutils.SideEffectChecker;
|
||||
import gnu.trove.THashSet;
|
||||
import one.util.streamex.StreamEx;
|
||||
import org.jetbrains.annotations.Contract;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -364,13 +365,12 @@ public class JavaCompletionUtil {
|
||||
PsiMethod method = (PsiMethod)o;
|
||||
PsiClassType.ClassResolveResult plainResult = ((PsiClassType)plainQualifier).resolveGenerics();
|
||||
PsiClass plainClass = plainResult.getElement();
|
||||
PsiClass castClass = ((PsiClassType)castType).resolveGenerics().getElement();
|
||||
HierarchicalMethodSignature signature = method.getHierarchicalMethodSignature();
|
||||
if (plainClass != null && StreamEx.of(signature.getSuperSignatures()).prepend(signature)
|
||||
.anyMatch(sig -> MethodSignatureUtil.findMethodBySignature(plainClass, sig, true) != null)) {
|
||||
PsiClass castClass = ((PsiClassType)castType).resolveGenerics().getElement();
|
||||
|
||||
if (plainClass != null && castClass != null &&
|
||||
MethodSignatureUtil.findMethodInSuperClassBySignatureInDerived(
|
||||
castClass, plainClass, method.getSignature(plainResult.getSubstitutor()), true) != null) {
|
||||
|
||||
if (!castClass.isInheritor(plainClass, true)) {
|
||||
if (castClass == null || !castClass.isInheritor(plainClass, true)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
import java.util.*;
|
||||
|
||||
class Foo {
|
||||
static class ListData extends ArrayList {}
|
||||
|
||||
void test() {
|
||||
Set<ListData> list = new HashSet<>();
|
||||
list.addA<caret>
|
||||
}
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
import java.util.*;
|
||||
|
||||
class Foo {
|
||||
static class ListData extends ArrayList {}
|
||||
|
||||
void test() {
|
||||
Set<ListData> list = new HashSet<>();
|
||||
list.addAll()
|
||||
}
|
||||
}
|
||||
+1
@@ -50,6 +50,7 @@ class NormalCompletionDfaTest extends NormalCompletionTestCase {
|
||||
void testCastWhenMethodComesFromDfaSuperType() { doTest() }
|
||||
void testGenericTypeDfa() { doTest() }
|
||||
void testNoUnnecessaryCastDfa() { doTest() }
|
||||
void testNoUnnecessaryCastRawDfa() { doTest() }
|
||||
void testInstanceOfAfterFunction() { doTest() }
|
||||
|
||||
void testCastTwice() {
|
||||
|
||||
Reference in New Issue
Block a user