From f18b4797d924675d29942756450a32cb99307773 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Thu, 30 Apr 2020 11:41:12 +0700 Subject: [PATCH] AddMissingRequiredAnnotationParametersFix preview-friendly; default values GitOrigin-RevId: 7e2cd8fca577fce7acc290caa0b9a3c37dcf3e4b --- ...issingRequiredAnnotationParametersFix.java | 34 ++++++++++++++++--- .../afterFewParameters.java | 2 +- .../afterFewParameters2.java | 6 ++-- .../afterFewParameters3.java | 2 +- .../afterFewParametersWithoutOrder.java | 2 +- .../afterSingleParameter.java | 2 +- .../beforeFewParameters2.java | 4 +-- 7 files changed, 38 insertions(+), 14 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddMissingRequiredAnnotationParametersFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddMissingRequiredAnnotationParametersFix.java index ac1f9486df5a..8968d610a27e 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddMissingRequiredAnnotationParametersFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddMissingRequiredAnnotationParametersFix.java @@ -16,9 +16,11 @@ package com.intellij.codeInsight.daemon.impl.quickfix; import com.intellij.codeInsight.daemon.QuickFixBundle; +import com.intellij.codeInsight.intention.FileModifier; import com.intellij.codeInsight.intention.IntentionAction; import com.intellij.codeInsight.template.TemplateBuilderImpl; import com.intellij.codeInsight.template.TemplateManager; +import com.intellij.codeInsight.template.impl.TextExpression; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; @@ -26,8 +28,10 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; +import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.IncorrectOperationException; import com.intellij.util.containers.ContainerUtil; +import com.siyeh.ig.psiutils.TypeUtils; import gnu.trove.TObjectIntHashMap; import org.jetbrains.annotations.NotNull; @@ -39,7 +43,7 @@ import java.util.TreeSet; /** * @author Dmitry Batkovich */ -public class AddMissingRequiredAnnotationParametersFix implements IntentionAction { +public final class AddMissingRequiredAnnotationParametersFix implements IntentionAction { private static final Logger LOG = Logger.getInstance(AddMissingRequiredAnnotationParametersFix.class); private final PsiAnnotation myAnnotation; @@ -104,9 +108,21 @@ public class AddMissingRequiredAnnotationParametersFix implements IntentionActio } } - final PsiExpression nullValue = JavaPsiFacade.getElementFactory(project).createExpressionFromText(PsiKeyword.NULL, null); - for (final String missedParameter : myMissedElements) { - newParameters.add(Pair.create(missedParameter, nullValue)); + PsiElementFactory factory = JavaPsiFacade.getElementFactory(project); + for (PsiMethod method : myAnnotationMethods) { + if (myMissedElements.contains(method.getName())) { + PsiType type = method.getReturnType(); + String defaultValue; + if (TypeUtils.isJavaLangString(type)) { + defaultValue = "\"\""; + } + else if (type instanceof PsiArrayType) { + defaultValue = "{}"; + } else { + defaultValue = TypeUtils.getDefaultValue(type); + } + newParameters.add(Pair.create(method.getName(), factory.createExpressionFromText(defaultValue, null))); + } } TemplateBuilderImpl builder = null; @@ -117,9 +133,11 @@ public class AddMissingRequiredAnnotationParametersFix implements IntentionActio if (builder == null) { builder = new TemplateBuilderImpl(myAnnotation.getParameterList()); } - builder.replaceElement(value, new EmptyExpression(), true); + builder.replaceElement(value, new TextExpression(newParameter.getSecond().getText()), true); } } + + if (!file.isPhysical()) return; editor.getCaretModel().moveToOffset(myAnnotation.getParameterList().getTextRange().getStartOffset()); final PsiDocumentManager documentManager = PsiDocumentManager.getInstance(project); @@ -158,4 +176,10 @@ public class AddMissingRequiredAnnotationParametersFix implements IntentionActio } return true; } + + @Override + public @NotNull FileModifier getFileModifierForPreview(@NotNull PsiFile target) { + return new AddMissingRequiredAnnotationParametersFix(PsiTreeUtil.findSameElementInCopy(myAnnotation, target), myAnnotationMethods, + myMissedElements); + } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMissingRequiredAnnotationParameters/afterFewParameters.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMissingRequiredAnnotationParameters/afterFewParameters.java index 889b0a118252..ba1868f74a1d 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMissingRequiredAnnotationParameters/afterFewParameters.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMissingRequiredAnnotationParameters/afterFewParameters.java @@ -1,7 +1,7 @@ // "Add missing annotation parameters - value3, value2, value1" "true" class Test { - @MyAnnotation(value3 = , value2 = , value1 = ) + @MyAnnotation(value3 = "", value2 = "", value1 = "") void m() { } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMissingRequiredAnnotationParameters/afterFewParameters2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMissingRequiredAnnotationParameters/afterFewParameters2.java index 67886a6bb979..09e2d20bb046 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMissingRequiredAnnotationParameters/afterFewParameters2.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMissingRequiredAnnotationParameters/afterFewParameters2.java @@ -1,16 +1,16 @@ // "Add missing annotation parameters - value4, value1" "true" class Test { - @MyAnnotation(value4 = , value3 = "", value2 = "", value1 = ) + @MyAnnotation(value4 = {}, value3 = "", value2 = "", value1 = {}) void m() { } @interface MyAnnotation { - String value4(); + String[] value4(); String value3(); String value2(); - String value1(); + String[] value1(); } } \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMissingRequiredAnnotationParameters/afterFewParameters3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMissingRequiredAnnotationParameters/afterFewParameters3.java index 24b8769f5a0e..a9c5cec39ad1 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMissingRequiredAnnotationParameters/afterFewParameters3.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMissingRequiredAnnotationParameters/afterFewParameters3.java @@ -1,7 +1,7 @@ // "Add missing annotation parameters - value4, value3, value2, value1" "true" class Test { - @MyAnnotation(value = "xxx", value4 = , value3 = , value2 = , value1 = ) + @MyAnnotation(value = "xxx", value4 = "", value3 = "", value2 = "", value1 = "") void m() { } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMissingRequiredAnnotationParameters/afterFewParametersWithoutOrder.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMissingRequiredAnnotationParameters/afterFewParametersWithoutOrder.java index 414eb2bf7f35..6d7d48e7f3f9 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMissingRequiredAnnotationParameters/afterFewParametersWithoutOrder.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMissingRequiredAnnotationParameters/afterFewParametersWithoutOrder.java @@ -1,7 +1,7 @@ // "Add missing annotation parameters - value4, value1" "true" class Test { - @MyAnnotation(value2 = "", value3 = "", value4 = , value1 = ) + @MyAnnotation(value2 = "", value3 = "", value4 = "", value1 = "") void m() { } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMissingRequiredAnnotationParameters/afterSingleParameter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMissingRequiredAnnotationParameters/afterSingleParameter.java index 14f71e51a151..19a436e4ee13 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMissingRequiredAnnotationParameters/afterSingleParameter.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMissingRequiredAnnotationParameters/afterSingleParameter.java @@ -1,7 +1,7 @@ // "Add missing annotation parameter 'value'" "true" class Test { - @MyAnnotation() + @MyAnnotation("") void m() { } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMissingRequiredAnnotationParameters/beforeFewParameters2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMissingRequiredAnnotationParameters/beforeFewParameters2.java index bb0ad03903bf..f5fc85b720c9 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMissingRequiredAnnotationParameters/beforeFewParameters2.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addMissingRequiredAnnotationParameters/beforeFewParameters2.java @@ -7,10 +7,10 @@ class Test { } @interface MyAnnotation { - String value4(); + String[] value4(); String value3(); String value2(); - String value1(); + String[] value1(); } } \ No newline at end of file