mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-191500 Inappropriate 'Enum.valueOf()' Smart Type suggestion
This commit is contained in:
@@ -112,14 +112,30 @@ public class AssignableFromFilter implements ElementFilter{
|
||||
expectedType,
|
||||
false,
|
||||
PsiUtil.getLanguageLevel(place));
|
||||
if (substitutionForParameter != PsiType.NULL && !(substitutionForParameter instanceof PsiIntersectionType) &&
|
||||
PsiUtil.resolveClassInClassTypeOnly(substitutionForParameter) != parameter) {
|
||||
if (substitutionForParameter != PsiType.NULL &&
|
||||
!isImpossibleIntersection(substitutionForParameter) &&
|
||||
!extendsImpossibleIntersection(PsiUtil.resolveClassInClassTypeOnly(substitutionForParameter)) &&
|
||||
PsiUtil.resolveClassInClassTypeOnly(substitutionForParameter) != parameter) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static boolean extendsImpossibleIntersection(@Nullable PsiClass psiClass) {
|
||||
if (psiClass instanceof PsiTypeParameter) {
|
||||
PsiClassType[] supers = psiClass.getExtendsListTypes();
|
||||
if (supers.length > 1) {
|
||||
return isImpossibleIntersection(PsiIntersectionType.createIntersection(supers));
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static boolean isImpossibleIntersection(PsiType intersection) {
|
||||
return intersection instanceof PsiIntersectionType && ((PsiIntersectionType)intersection).getConflictingConjunctsMessage() != null;
|
||||
}
|
||||
|
||||
public String toString(){
|
||||
return "assignable-from(" + (myType != null ? myType : myClassName) + ")";
|
||||
}
|
||||
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
class Foo {
|
||||
{
|
||||
Foo m = <caret>x;
|
||||
}
|
||||
|
||||
|
||||
static <TX extends Enum<TX>> TX valueOf(Class<TX> enumType, String name);
|
||||
}
|
||||
+6
@@ -188,6 +188,12 @@ public void testConvertToObjectStream() {
|
||||
checkResultByFile("/" + getTestName(false) + "-out.java");
|
||||
}
|
||||
|
||||
public void testNoUnrelatedMethodSuggestion() {
|
||||
configureByTestName();
|
||||
myFixture.complete(CompletionType.SMART, 1);
|
||||
assertOrderedEquals(myFixture.getLookupElementStrings(), "this");
|
||||
}
|
||||
|
||||
public void testInferFromReturnTypeWhenCompleteInsideArgList() {
|
||||
configureByTestName();
|
||||
myFixture.complete(CompletionType.SMART, 1);
|
||||
|
||||
+4
@@ -1282,4 +1282,8 @@ public class SmartTypeCompletionTest extends LightFixtureCompletionTestCase {
|
||||
public void testNewMapTypeArguments() { doTest(); }
|
||||
public void testNewMapObjectTypeArguments() { doTest(); }
|
||||
|
||||
public void testNoUnrelatedMethodSuggestion() {
|
||||
configureByTestName();
|
||||
assertOrderedEquals(myFixture.getLookupElementStrings(), "this");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user