[lombok] IDEA-322276 Replace all field-annotations by one class-annotation

GitOrigin-RevId: 53da3fce87d68c26f248a9a61e59be9fc68885d9
This commit is contained in:
Michail Plushnikov
2023-07-02 20:33:02 +02:00
committed by intellij-monorepo-bot
parent 9c70a0f57e
commit 0f73b3d3d4

View File

@@ -59,12 +59,12 @@ public abstract class LombokGetterOrSetterMayBeUsedInspection extends LombokJava
if (annotation != null) { if (annotation != null) {
if (!annotation.getAttributes().isEmpty()) { if (!annotation.getAttributes().isEmpty()) {
isLombokAnnotationAtClassLevel = false; isLombokAnnotationAtClassLevel = false;
} else { }
else {
annotatedFields.add(field); annotatedFields.add(field);
} }
break;
} }
if (!field.hasModifierProperty(PsiModifier.STATIC)) { else if (!field.hasModifierProperty(PsiModifier.STATIC)) {
boolean found = false; boolean found = false;
for (Pair<PsiField, PsiMethod> instanceCandidate : instanceCandidates) { for (Pair<PsiField, PsiMethod> instanceCandidate : instanceCandidates) {
if (field.equals(instanceCandidate.getFirst())) { if (field.equals(instanceCandidate.getFirst())) {
@@ -72,13 +72,18 @@ public abstract class LombokGetterOrSetterMayBeUsedInspection extends LombokJava
break; break;
} }
} }
isLombokAnnotationAtClassLevel &= found; isLombokAnnotationAtClassLevel = found;
}
if (!isLombokAnnotationAtClassLevel) {
break;
} }
} }
List<Pair<PsiField, PsiMethod>> allCandidates = new ArrayList<>(staticCandidates); List<Pair<PsiField, PsiMethod>> allCandidates = new ArrayList<>(staticCandidates);
if (isLombokAnnotationAtClassLevel && (!instanceCandidates.isEmpty() || !annotatedFields.isEmpty()) ) { if (isLombokAnnotationAtClassLevel && (!instanceCandidates.isEmpty() || !annotatedFields.isEmpty())) {
warnOrFix(psiClass, instanceCandidates, annotatedFields); warnOrFix(psiClass, instanceCandidates, annotatedFields);
} else { }
else {
allCandidates.addAll(instanceCandidates); allCandidates.addAll(instanceCandidates);
} }
for (Pair<PsiField, PsiMethod> candidate : allCandidates) { for (Pair<PsiField, PsiMethod> candidate : allCandidates) {
@@ -109,7 +114,8 @@ public abstract class LombokGetterOrSetterMayBeUsedInspection extends LombokJava
ProblemHighlightType.GENERIC_ERROR_OR_WARNING, ProblemHighlightType.GENERIC_ERROR_OR_WARNING,
psiClassNameIdentifier != null ? psiClassNameIdentifier.getTextRangeInParent() : psiClass.getTextRange(), psiClassNameIdentifier != null ? psiClassNameIdentifier.getTextRangeInParent() : psiClass.getTextRange(),
fix); fix);
} else if (myLombokGetterOrSetterMayBeUsedFix != null) { }
else if (myLombokGetterOrSetterMayBeUsedFix != null) {
myLombokGetterOrSetterMayBeUsedFix.effectivelyDoFix(psiClass, fieldsAndMethods, annotatedFields); myLombokGetterOrSetterMayBeUsedFix.effectivelyDoFix(psiClass, fieldsAndMethods, annotatedFields);
} }
} }
@@ -120,7 +126,8 @@ public abstract class LombokGetterOrSetterMayBeUsedInspection extends LombokJava
final LocalQuickFix fix = new LombokGetterOrSetterMayBeUsedFix(fieldName); final LocalQuickFix fix = new LombokGetterOrSetterMayBeUsedFix(fieldName);
myHolder.registerProblem(method, myHolder.registerProblem(method,
getFieldErrorMessage(fieldName), fix); getFieldErrorMessage(fieldName), fix);
} else if (myLombokGetterOrSetterMayBeUsedFix != null) { }
else if (myLombokGetterOrSetterMayBeUsedFix != null) {
myLombokGetterOrSetterMayBeUsedFix.effectivelyDoFix(field, method); myLombokGetterOrSetterMayBeUsedFix.effectivelyDoFix(field, method);
} }
} }
@@ -154,7 +161,8 @@ public abstract class LombokGetterOrSetterMayBeUsedInspection extends LombokJava
final PsiElement element = descriptor.getPsiElement(); final PsiElement element = descriptor.getPsiElement();
if (element instanceof PsiMethod) { if (element instanceof PsiMethod) {
new LombokGetterOrSetterMayBeUsedVisitor(null, this).visitMethodForFix((PsiMethod)element); new LombokGetterOrSetterMayBeUsedVisitor(null, this).visitMethodForFix((PsiMethod)element);
} else if (element instanceof PsiClass) { }
else if (element instanceof PsiClass) {
new LombokGetterOrSetterMayBeUsedVisitor(null, this).visitClass((PsiClass)element); new LombokGetterOrSetterMayBeUsedVisitor(null, this).visitClass((PsiClass)element);
} }
} }
@@ -186,7 +194,7 @@ public abstract class LombokGetterOrSetterMayBeUsedInspection extends LombokJava
return false; return false;
} }
final PsiElementFactory factory = JavaPsiFacade.getElementFactory(project); final PsiElementFactory factory = JavaPsiFacade.getElementFactory(project);
final PsiAnnotation annotation = factory.createAnnotationFromText("@"+getAnnotationName(), fieldOrClass); final PsiAnnotation annotation = factory.createAnnotationFromText("@" + getAnnotationName(), fieldOrClass);
JavaCodeStyleManager.getInstance(project).shortenClassReferences(annotation); JavaCodeStyleManager.getInstance(project).shortenClassReferences(annotation);
modifierList.addAfter(annotation, null); modifierList.addAfter(annotation, null);
return true; return true;
@@ -210,19 +218,23 @@ public abstract class LombokGetterOrSetterMayBeUsedInspection extends LombokJava
if (fieldJavaDoc == null) { if (fieldJavaDoc == null) {
if (javaDocMethodText.isEmpty()) { if (javaDocMethodText.isEmpty()) {
fieldJavaDoc = factory.createDocCommentFromText("/**\n*/"); fieldJavaDoc = factory.createDocCommentFromText("/**\n*/");
} else { }
fieldJavaDoc = factory.createDocCommentFromText("/**\n* -- " + getJavaDocMethodMarkup() + " --\n* " + javaDocMethodText + "\n*/"); else {
fieldJavaDoc =
factory.createDocCommentFromText("/**\n* -- " + getJavaDocMethodMarkup() + " --\n* " + javaDocMethodText + "\n*/");
} }
for (PsiDocTag methodTag : methodTags) { for (PsiDocTag methodTag : methodTags) {
fieldJavaDoc.add(methodTag); fieldJavaDoc.add(methodTag);
} }
field.getParent().addBefore(fieldJavaDoc, field); field.getParent().addBefore(fieldJavaDoc, field);
} else { }
else {
@NotNull PsiElement @NotNull [] fieldJavaDocChildren = Arrays.stream(fieldJavaDoc.getChildren()) @NotNull PsiElement @NotNull [] fieldJavaDocChildren = Arrays.stream(fieldJavaDoc.getChildren())
.filter(e -> e instanceof PsiDocToken) .filter(e -> e instanceof PsiDocToken)
.toArray(PsiElement[]::new); .toArray(PsiElement[]::new);
@NotNull PsiElement fieldJavaDocChild = fieldJavaDocChildren[fieldJavaDocChildren.length - 2]; @NotNull PsiElement fieldJavaDocChild = fieldJavaDocChildren[fieldJavaDocChildren.length - 2];
PsiDocComment newMethodJavaDoc = factory.createDocCommentFromText("/**\n* -- " + getJavaDocMethodMarkup() + " --\n* " + javaDocMethodText + "\n*/"); PsiDocComment newMethodJavaDoc =
factory.createDocCommentFromText("/**\n* -- " + getJavaDocMethodMarkup() + " --\n* " + javaDocMethodText + "\n*/");
PsiElement[] tokens = newMethodJavaDoc.getChildren(); PsiElement[] tokens = newMethodJavaDoc.getChildren();
for (int i = tokens.length - 2; 0 < i; i--) { for (int i = tokens.length - 2; 0 < i; i--) {
fieldJavaDoc.addAfter(tokens[i], fieldJavaDocChild); fieldJavaDoc.addAfter(tokens[i], fieldJavaDocChild);