mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
preserve comments: simplifiable annotation
This commit is contained in:
+16
-10
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user