diff --git a/java/java-analysis-impl/src/com/siyeh/ig/fixes/ConvertToVarargsMethodFix.java b/java/java-analysis-impl/src/com/siyeh/ig/fixes/ConvertToVarargsMethodFix.java index 983e42642331..670bc2c09d1d 100644 --- a/java/java-analysis-impl/src/com/siyeh/ig/fixes/ConvertToVarargsMethodFix.java +++ b/java/java-analysis-impl/src/com/siyeh/ig/fixes/ConvertToVarargsMethodFix.java @@ -5,6 +5,7 @@ import com.intellij.modcommand.ModPsiUpdater; import com.intellij.modcommand.PsiUpdateModCommandQuickFix; import com.intellij.openapi.project.Project; import com.intellij.psi.*; +import com.intellij.psi.codeStyle.JavaCodeStyleManager; import com.intellij.psi.impl.source.javadoc.PsiDocMethodOrFieldRef; import com.intellij.psi.search.searches.ReferencesSearch; import com.siyeh.InspectionGadgetsBundle; @@ -68,11 +69,10 @@ public class ConvertToVarargsMethodFix extends PsiUpdateModCommandQuickFix { private static void makeMethodVarargs(PsiMethod method) { final PsiParameterList parameterList = method.getParameterList(); - if (parameterList.isEmpty()) { + final PsiParameter lastParameter = parameterList.getParameter(parameterList.getParametersCount() - 1); + if (lastParameter == null) { return; } - final PsiParameter[] parameters = parameterList.getParameters(); - final PsiParameter lastParameter = parameters[parameters.length - 1]; lastParameter.normalizeDeclaration(); final PsiType type = lastParameter.getType(); if (!(type instanceof PsiArrayType arrayType)) { @@ -85,16 +85,15 @@ public class ConvertToVarargsMethodFix extends PsiUpdateModCommandQuickFix { final PsiTypeElement typeElement = lastParameter.getTypeElement(); if (typeElement != null) { CommentTracker ct = new CommentTracker(); - ct.grabComments(typeElement); - PsiElement result = typeElement.replace(newTypeElement); + PsiElement result = ct.replace(typeElement, newTypeElement); ct.insertCommentsBefore(result.getLastChild()); // Swap comments, example: String /* Foo */ [] -> String/* Foo */... + JavaCodeStyleManager.getInstance(method.getProject()).shortenClassReferences(result); } } private static void makeMethodCallsVarargs(Collection referenceExpressions) { for (PsiReferenceExpression referenceExpression : referenceExpressions) { - final PsiElement parent = referenceExpression.getParent(); - if (!(parent instanceof PsiMethodCallExpression methodCallExpression)) { + if (!(referenceExpression.getParent() instanceof PsiMethodCallExpression methodCallExpression)) { continue; } final PsiExpressionList argumentList = methodCallExpression.getArgumentList(); diff --git a/java/java-analysis-impl/src/com/siyeh/ig/jdk/VarargParameterInspection.java b/java/java-analysis-impl/src/com/siyeh/ig/jdk/VarargParameterInspection.java index fce9d45cc706..159c65127f40 100644 --- a/java/java-analysis-impl/src/com/siyeh/ig/jdk/VarargParameterInspection.java +++ b/java/java-analysis-impl/src/com/siyeh/ig/jdk/VarargParameterInspection.java @@ -111,7 +111,8 @@ public final class VarargParameterInspection extends BaseInspection { } PsiTypeElement typeElement = lastParameter.getTypeElement(); assert typeElement != null; - new CommentTracker().replaceAndRestoreComments(typeElement, newTypeElement); + PsiElement result = new CommentTracker().replaceAndRestoreComments(typeElement, newTypeElement); + JavaCodeStyleManager.getInstance(method.getProject()).shortenClassReferences(result); } private static void modifyJavadoc(int indexOfFirstVarargArgument, @NotNull PsiElement reference) { diff --git a/java/java-tests/testData/ig/com/siyeh/igfixes/jdk/vararg_parameter/TypeParameter.after.java b/java/java-tests/testData/ig/com/siyeh/igfixes/jdk/vararg_parameter/TypeParameter.after.java index 0bcabd09e1da..8e0d23ee3666 100644 --- a/java/java-tests/testData/ig/com/siyeh/igfixes/jdk/vararg_parameter/TypeParameter.after.java +++ b/java/java-tests/testData/ig/com/siyeh/igfixes/jdk/vararg_parameter/TypeParameter.after.java @@ -1,5 +1,7 @@ +import org.jetbrains.annotations.NotNull; + class FieldSet { - public FieldSet set(T[] fields) { + public FieldSet set(T @NotNull [] fields) { return this; } diff --git a/java/java-tests/testData/ig/com/siyeh/igfixes/jdk/vararg_parameter/TypeParameter.java b/java/java-tests/testData/ig/com/siyeh/igfixes/jdk/vararg_parameter/TypeParameter.java index f5918f1821d2..6ff8e8790d7d 100644 --- a/java/java-tests/testData/ig/com/siyeh/igfixes/jdk/vararg_parameter/TypeParameter.java +++ b/java/java-tests/testData/ig/com/siyeh/igfixes/jdk/vararg_parameter/TypeParameter.java @@ -1,5 +1,7 @@ +import org.jetbrains.annotations.NotNull; + class FieldSet { - public FieldSet set(T... fields) { + public FieldSet set(T @NotNull ... fields) { return this; } diff --git a/java/java-tests/testData/ig/com/siyeh/igfixes/migration/convert_to_varargs_method/Final.after.java b/java/java-tests/testData/ig/com/siyeh/igfixes/migration/convert_to_varargs_method/Final.after.java index 412fd976d26d..e9df574ed2f8 100644 --- a/java/java-tests/testData/ig/com/siyeh/igfixes/migration/convert_to_varargs_method/Final.after.java +++ b/java/java-tests/testData/ig/com/siyeh/igfixes/migration/convert_to_varargs_method/Final.after.java @@ -1,5 +1,7 @@ +import org.jetbrains.annotations.NotNull; + class Test { - public void foo(final String... arg) { + public void foo(final String @NotNull ... arg) { } { diff --git a/java/java-tests/testData/ig/com/siyeh/igfixes/migration/convert_to_varargs_method/Final.java b/java/java-tests/testData/ig/com/siyeh/igfixes/migration/convert_to_varargs_method/Final.java index 1a36d0462efd..6753941d996e 100644 --- a/java/java-tests/testData/ig/com/siyeh/igfixes/migration/convert_to_varargs_method/Final.java +++ b/java/java-tests/testData/ig/com/siyeh/igfixes/migration/convert_to_varargs_method/Final.java @@ -1,5 +1,7 @@ +import org.jetbrains.annotations.NotNull; + class Test { - public void foo(final String[] arg) { + public void foo(final String @NotNull [] arg) { } { diff --git a/java/java-tests/testSrc/com/siyeh/ig/fixes/jdk/VarargParameterFixTest.java b/java/java-tests/testSrc/com/siyeh/ig/fixes/jdk/VarargParameterFixTest.java index 3f80ab2ba704..f91a7d090768 100644 --- a/java/java-tests/testSrc/com/siyeh/ig/fixes/jdk/VarargParameterFixTest.java +++ b/java/java-tests/testSrc/com/siyeh/ig/fixes/jdk/VarargParameterFixTest.java @@ -11,6 +11,13 @@ public class VarargParameterFixTest extends IGQuickFixesTestCase { protected void setUp() throws Exception { super.setUp(); myFixture.enableInspections(new VarargParameterInspection()); + myFixture.addClass(""" + package org.jetbrains.annotations; + @Documented + @Retention(RetentionPolicy.CLASS) + @Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.LOCAL_VARIABLE, ElementType.TYPE_USE}) + public @interface NotNull {} + """); myRelativePath = "jdk/vararg_parameter"; myDefaultHint = InspectionGadgetsBundle.message("variable.argument.method.quickfix"); } diff --git a/java/java-tests/testSrc/com/siyeh/ig/fixes/migration/ConvertToVarargsMethodFixTest.java b/java/java-tests/testSrc/com/siyeh/ig/fixes/migration/ConvertToVarargsMethodFixTest.java index 23045636f562..647e2be7d2c9 100644 --- a/java/java-tests/testSrc/com/siyeh/ig/fixes/migration/ConvertToVarargsMethodFixTest.java +++ b/java/java-tests/testSrc/com/siyeh/ig/fixes/migration/ConvertToVarargsMethodFixTest.java @@ -20,6 +20,13 @@ public class ConvertToVarargsMethodFixTest extends IGQuickFixesTestCase { public void setUp() throws Exception { super.setUp(); myFixture.enableInspections(new MethodCanBeVariableArityMethodInspection()); + myFixture.addClass(""" + package org.jetbrains.annotations; + @Documented + @Retention(RetentionPolicy.CLASS) + @Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.LOCAL_VARIABLE, ElementType.TYPE_USE}) + public @interface NotNull {} + """); myRelativePath = "migration/convert_to_varargs_method"; myDefaultHint = InspectionGadgetsBundle.message("convert.to.variable.arity.method.quickfix"); }