mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-13 21:55:01 +07:00
don't cast when instaceofing List<String> to ArrayList
This commit is contained in:
@@ -52,6 +52,7 @@ import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.psi.util.PsiFormatUtil;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.psi.util.TypeConversionUtil;
|
||||
import com.intellij.psi.xml.XmlToken;
|
||||
import com.intellij.psi.xml.XmlTokenType;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
@@ -510,8 +511,16 @@ public class JavaCompletionUtil {
|
||||
PsiType castType = castTypeItem.getPsiType();
|
||||
if (plainQualifier instanceof PsiClassType && castType instanceof PsiClassType) {
|
||||
PsiMethod method = (PsiMethod)o;
|
||||
PsiSubstitutor plainSub = ((PsiClassType)plainQualifier).resolveGenerics().getSubstitutor();
|
||||
PsiSubstitutor castSub = ((PsiClassType)castType).resolveGenerics().getSubstitutor();
|
||||
PsiClassType.ClassResolveResult plainResult = ((PsiClassType)plainQualifier).resolveGenerics();
|
||||
PsiClass plainClass = plainResult.getElement();
|
||||
PsiClass castClass = ((PsiClassType)castType).resolveGenerics().getElement();
|
||||
|
||||
if (castClass == null || plainClass == null || !castClass.isInheritor(plainClass, true)) {
|
||||
return item;
|
||||
}
|
||||
|
||||
PsiSubstitutor plainSub = plainResult.getSubstitutor();
|
||||
PsiSubstitutor castSub = TypeConversionUtil.getSuperClassSubstitutor(plainClass, (PsiClassType)castType);
|
||||
if (method.getSignature(plainSub).equals(method.getSignature(castSub)) &&
|
||||
plainSub.substitute(method.getReturnType()).equals(castSub.substitute(method.getReturnType()))) {
|
||||
return item;
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class A {
|
||||
void foo(List<String> l) {
|
||||
if (l instanceof ArrayList) {
|
||||
l.ge<caret>
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class A {
|
||||
void foo(List<String> l) {
|
||||
if (l instanceof ArrayList) {
|
||||
l.get(<caret>)
|
||||
}
|
||||
}
|
||||
}
|
||||
+2
@@ -1324,4 +1324,6 @@ public class ListUtils {
|
||||
|
||||
}
|
||||
|
||||
public void testListArrayListCast() { doTest('\n') }
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user