From eaf8c3f891d106bb0bcf42b468b6c550f7f43ad3 Mon Sep 17 00:00:00 2001 From: Michail Plushnikov Date: Tue, 10 Sep 2024 18:32:59 +0200 Subject: [PATCH] [lombok] IDEA-354173 java: Improve @Getter/@Setter 'supported on' validation (is invalid on records) GitOrigin-RevId: fa6a65ad6c3c5ea0befa1a55cdf9987fd009fa68 --- .../plugin/processor/clazz/AbstractClassProcessor.java | 2 +- .../intellij/plugin/processor/clazz/GetterProcessor.java | 2 +- .../intellij/plugin/processor/clazz/SetterProcessor.java | 4 ++-- .../src/main/resources/messages/LombokBundle.properties | 2 +- .../onRecord/InvalidLombokAnnotationsOnRecord.java | 6 +++++- 5 files changed, 10 insertions(+), 6 deletions(-) diff --git a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/processor/clazz/AbstractClassProcessor.java b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/processor/clazz/AbstractClassProcessor.java index 77cc15047d44..6480bdbcbdf9 100644 --- a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/processor/clazz/AbstractClassProcessor.java +++ b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/processor/clazz/AbstractClassProcessor.java @@ -106,7 +106,7 @@ public abstract class AbstractClassProcessor extends AbstractProcessor implement public Collection verifyAnnotation(@NotNull PsiAnnotation psiAnnotation) { Collection result = Collections.emptyList(); // check first for fields, methods and filter it out, because PsiClass is parent of all annotations and will match other parents too - PsiElement psiElement = PsiTreeUtil.getParentOfType(psiAnnotation, PsiField.class, PsiMethod.class, PsiClass.class); + PsiElement psiElement = PsiTreeUtil.getParentOfType(psiAnnotation, PsiField.class, PsiRecordComponent.class, PsiMethod.class, PsiClass.class); if (psiElement instanceof PsiClass) { ProblemValidationSink problemNewBuilder = new ProblemValidationSink(); validate(psiAnnotation, (PsiClass) psiElement, problemNewBuilder); diff --git a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/processor/clazz/GetterProcessor.java b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/processor/clazz/GetterProcessor.java index fb2abd9aaaea..1836dfde6720 100644 --- a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/processor/clazz/GetterProcessor.java +++ b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/processor/clazz/GetterProcessor.java @@ -71,7 +71,7 @@ public final class GetterProcessor extends AbstractClassProcessor { } private static void validateAnnotationOnRightType(@NotNull PsiClass psiClass, @NotNull ProblemSink builder) { - if (psiClass.isAnnotationType() || psiClass.isInterface()) { + if (psiClass.isAnnotationType() || psiClass.isInterface() || psiClass.isRecord()) { builder.addErrorMessage("inspection.message.getter.only.supported.on.class.enum.or.field.type"); builder.markFailed(); } diff --git a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/processor/clazz/SetterProcessor.java b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/processor/clazz/SetterProcessor.java index 747b66597faf..89055d087d67 100644 --- a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/processor/clazz/SetterProcessor.java +++ b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/processor/clazz/SetterProcessor.java @@ -70,8 +70,8 @@ public final class SetterProcessor extends AbstractClassProcessor { private static void validateAnnotationOnRightType(@NotNull PsiAnnotation psiAnnotation, @NotNull PsiClass psiClass, @NotNull ProblemSink builder) { - if (psiClass.isAnnotationType() || psiClass.isInterface() || psiClass.isEnum()) { - builder.addErrorMessage("inspection.message.s.only.supported.on.class.or.field.type", psiAnnotation.getQualifiedName()); + if (psiClass.isAnnotationType() || psiClass.isInterface() || psiClass.isEnum() || psiClass.isRecord()) { + builder.addErrorMessage("inspection.message.setter.only.supported.on.class.or.field.type"); builder.markFailed(); } } diff --git a/plugins/lombok/src/main/resources/messages/LombokBundle.properties b/plugins/lombok/src/main/resources/messages/LombokBundle.properties index 668002011169..25432f0dca45 100644 --- a/plugins/lombok/src/main/resources/messages/LombokBundle.properties +++ b/plugins/lombok/src/main/resources/messages/LombokBundle.properties @@ -62,7 +62,7 @@ inspection.message.generating.equals.hashcode.with.super.call=Generating equals/ inspection.message.generating.equals.hashcode.implementation=Generating equals/hashCode implementation but without a call to superclass, even though this class does not extend java.lang.Object. If this is intentional, add '(callSuper=false)' to your type. inspection.message.lazy.not.supported.for.getter.on.type='lazy' is not supported for @Getter on a type inspection.message.getter.only.supported.on.class.enum.or.field.type=@Getter is only supported on a class, enum or field type -inspection.message.s.only.supported.on.class.or.field.type=''@{0}'' is only supported on a class or field type +inspection.message.setter.only.supported.on.class.or.field.type=@Setter is only supported on a class or field type inspection.message.to.string.only.supported.on.class.or.enum.type=@ToString is only supported on a class or enum type inspection.message.not.generated.s.method.with.same.name.already.exists=Not generated ''{0}()'': A method with same name already exists inspection.message.utility.classes.cannot.have.declared.constructors=@UtilityClasses cannot have declared constructors. diff --git a/plugins/lombok/testData/highlights/onRecord/InvalidLombokAnnotationsOnRecord.java b/plugins/lombok/testData/highlights/onRecord/InvalidLombokAnnotationsOnRecord.java index ea6f0f258012..903a2643baf7 100644 --- a/plugins/lombok/testData/highlights/onRecord/InvalidLombokAnnotationsOnRecord.java +++ b/plugins/lombok/testData/highlights/onRecord/InvalidLombokAnnotationsOnRecord.java @@ -1,4 +1,6 @@ import lombok.Builder; +import lombok.Getter; +import lombok.Setter; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; @@ -11,6 +13,8 @@ import lombok.experimental.FieldNameConstants; import lombok.experimental.SuperBuilder; import lombok.experimental.UtilityClass; +@Getter +@Setter @Data @Value @ToString @@ -23,5 +27,5 @@ import lombok.experimental.UtilityClass; @With//OK on records @Builder//OK on records @FieldNameConstants//OK on records -public record InvalidLombokAnnotationsOnRecord(int a, int b) { +public record InvalidLombokAnnotationsOnRecord(@Getter /*OK on record param*/int a, int b) { }