mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
disable add explicit type args when types are not denotable
This commit is contained in:
+9
-2
@@ -20,6 +20,7 @@ import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
|
||||
import com.intellij.psi.util.PsiTypesUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.psi.util.TypeConversionUtil;
|
||||
import com.intellij.refactoring.util.RefactoringChangeUtil;
|
||||
@@ -83,8 +84,14 @@ public class AddTypeArgumentsFix extends MethodArgumentFix {
|
||||
LanguageLevel level = PsiUtil.getLanguageLevel(expression);
|
||||
for (int i = 0; i < typeParameters.length; i++) {
|
||||
PsiTypeParameter typeParameter = typeParameters[i];
|
||||
final PsiType substitution = toType == null ? resolveResult.getSubstitutor().substitute(typeParameter)
|
||||
: helper.getSubstitutionForTypeParameter(typeParameter, returnType, toType, false, level);
|
||||
final PsiType substitution;
|
||||
if (toType == null) {
|
||||
substitution = resolveResult.getSubstitutor().substitute(typeParameter);
|
||||
if (!PsiTypesUtil.isDenotableType(substitution, element)) return null;
|
||||
}
|
||||
else {
|
||||
substitution = helper.getSubstitutionForTypeParameter(typeParameter, returnType, toType, false, level);
|
||||
}
|
||||
if (substitution == null || PsiType.NULL.equals(substitution)) return null;
|
||||
mappings[i] = GenericsUtil.eliminateWildcards(substitution, false);
|
||||
}
|
||||
|
||||
+14
@@ -89,6 +89,20 @@ public class AddExplicitTypeArgumentsIntentionTest extends JavaCodeInsightFixtur
|
||||
assertNull(intentionAction);
|
||||
}
|
||||
|
||||
public void testNotAvailableWhenWildcardInferred() {
|
||||
myFixture.configureByText("a.java", "import java.util.stream.*;\n" +
|
||||
"\n" +
|
||||
"public class JDbQueryElement {\n" +
|
||||
"\n" +
|
||||
" void m(final Stream<String> stringStream) {\n" +
|
||||
" stringStream.c<caret>ollect(Collectors.joining(\", \"));\n" +
|
||||
" }\n" +
|
||||
"\n" +
|
||||
"}");
|
||||
final IntentionAction intentionAction = myFixture.getAvailableIntention(CodeInsightBundle.message("intention.add.explicit.type.arguments.family"));
|
||||
assertNull(intentionAction);
|
||||
}
|
||||
|
||||
private void doTest(String beforeText, String afterText) {
|
||||
myFixture.configureByText("a.java", beforeText);
|
||||
final IntentionAction intentionAction = myFixture.findSingleIntention(CodeInsightBundle.message("intention.add.explicit.type.arguments.family"));
|
||||
|
||||
Reference in New Issue
Block a user