From b5cc35f1dfd66db288634e59416e9690e053dd81 Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Wed, 29 Nov 2017 12:31:12 +0100 Subject: [PATCH] preserve comments: simplifiable annotation --- .../SimplifiableAnnotationInspection.java | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/SimplifiableAnnotationInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/SimplifiableAnnotationInspection.java index fc3b253e3281..b59991d568ac 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/SimplifiableAnnotationInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/SimplifiableAnnotationInspection.java @@ -29,6 +29,7 @@ import com.siyeh.InspectionGadgetsBundle; import com.siyeh.ig.BaseInspection; import com.siyeh.ig.BaseInspectionVisitor; import com.siyeh.ig.InspectionGadgetsFix; +import com.siyeh.ig.psiutils.CommentTracker; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -79,16 +80,17 @@ public class SimplifiableAnnotationInspection extends BaseInspection implements return; } final PsiElementFactory factory = JavaPsiFacade.getElementFactory(project); - final String annotationText = buildAnnotationText(annotation); + CommentTracker tracker = new CommentTracker(); + final String annotationText = buildAnnotationText(annotation, tracker); final PsiAnnotation newAnnotation = factory.createAnnotationFromText(annotationText, element); - annotation.replace(newAnnotation); + tracker.replaceAndRestoreComments(annotation, newAnnotation); } - private static String buildAnnotationText(PsiAnnotation annotation) { + private static String buildAnnotationText(PsiAnnotation annotation, CommentTracker tracker) { final StringBuilder out = new StringBuilder("@"); final PsiJavaCodeReferenceElement nameReferenceElement = annotation.getNameReferenceElement(); assert nameReferenceElement != null; - out.append(nameReferenceElement.getText()); + out.append(tracker.markUnchanged(nameReferenceElement).getText()); final PsiAnnotationParameterList parameterList = annotation.getParameterList(); final PsiNameValuePair[] attributes = parameterList.getAttributes(); if (attributes.length == 0) { @@ -101,7 +103,7 @@ public class SimplifiableAnnotationInspection extends BaseInspection implements if (name != null && !PsiAnnotation.DEFAULT_REFERENCED_METHOD_NAME.equals(name)) { out.append(name).append('='); } - buildAttributeValueText(attribute.getValue(), out); + buildAttributeValueText(attribute.getValue(), out, tracker); } else { for (int i = 0; i < attributes.length; i++) { @@ -110,25 +112,29 @@ public class SimplifiableAnnotationInspection extends BaseInspection implements out.append(','); } out.append(attribute.getName()).append('='); - buildAttributeValueText(attribute.getValue(), out); + buildAttributeValueText(attribute.getValue(), out, tracker); } } out.append(')'); return out.toString(); } - private static StringBuilder buildAttributeValueText(PsiAnnotationMemberValue value, StringBuilder out) { + private static void buildAttributeValueText(PsiAnnotationMemberValue value, + StringBuilder out, + CommentTracker tracker) { if (value instanceof PsiArrayInitializerMemberValue) { final PsiArrayInitializerMemberValue arrayValue = (PsiArrayInitializerMemberValue)value; final PsiAnnotationMemberValue[] initializers = arrayValue.getInitializers(); if (initializers.length == 1) { - return out.append(initializers[0].getText()); + out.append(tracker.markUnchanged(initializers[0]).getText()); + return; } } else if (value instanceof PsiAnnotation) { - return out.append(buildAnnotationText((PsiAnnotation)value)); + out.append(buildAnnotationText((PsiAnnotation)value, tracker)); + return; } - return out.append(value.getText()); + out.append(tracker.markUnchanged(value).getText()); } }