From 8b4e3a7084982c534557bc1a9ad3d6b25a1468fc Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Mon, 29 Sep 2025 16:28:09 +0200 Subject: [PATCH] Java: don't report Lombok @Getter can be used on implicit classes (IDEA-380028) GitOrigin-RevId: a3129385bd5fb4b86b6137c5de3987e1c36870ff --- ...mbokGetterOrSetterMayBeUsedInspection.java | 28 +++++++++---------- .../LombokGetterMayBeUsedInspectionTest.java | 13 ++++----- .../CompactSourceFile.java | 11 ++++++++ 3 files changed, 30 insertions(+), 22 deletions(-) create mode 100644 plugins/lombok/testData/inspection/lombokGetterMayBeUsed/CompactSourceFile.java diff --git a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/inspection/LombokGetterOrSetterMayBeUsedInspection.java b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/inspection/LombokGetterOrSetterMayBeUsedInspection.java index 9d9e075ad559..76e73289b037 100644 --- a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/inspection/LombokGetterOrSetterMayBeUsedInspection.java +++ b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/inspection/LombokGetterOrSetterMayBeUsedInspection.java @@ -8,7 +8,6 @@ import com.intellij.modcommand.ModPsiUpdater; import com.intellij.modcommand.PsiUpdateModCommandQuickFix; 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.codeStyle.JavaCodeStyleManager; import com.intellij.psi.javadoc.PsiDocComment; @@ -29,7 +28,7 @@ import java.util.List; public abstract class LombokGetterOrSetterMayBeUsedInspection extends LombokJavaInspectionBase { @Override - protected @NotNull PsiElementVisitor createVisitor(final @NotNull ProblemsHolder holder, final boolean isOnTheFly) { + protected @NotNull PsiElementVisitor createVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { return new LombokGetterOrSetterMayBeUsedVisitor(holder, null); } @@ -50,6 +49,7 @@ public abstract class LombokGetterOrSetterMayBeUsedInspection extends LombokJava @Override public void visitClass(@NotNull PsiClass psiClass) { + if (psiClass instanceof PsiAnonymousClass || psiClass instanceof PsiImplicitClass) return; if (psiClass.isRecord()) return; List> instanceCandidates = new ArrayList<>(); @@ -91,21 +91,19 @@ public abstract class LombokGetterOrSetterMayBeUsedInspection extends LombokJava List> fieldsAndMethods = new ArrayList<>(); if (!processMethod(psiMethod, fieldsAndMethods, fieldsAndMethods)) return; if (!fieldsAndMethods.isEmpty()) { - final Pair psiFieldPsiMethodPair = fieldsAndMethods.get(0); + final Pair psiFieldPsiMethodPair = fieldsAndMethods.getFirst(); warnOrFix(psiFieldPsiMethodPair.getFirst(), psiFieldPsiMethodPair.getSecond()); } } private void warnOrFix(@NotNull PsiClass psiClass, @NotNull List> fieldsAndMethods) { if (myHolder != null) { - String className = psiClass.getName(); - if (StringUtil.isNotEmpty(className)) { - final PsiIdentifier psiClassNameIdentifier = psiClass.getNameIdentifier(); - final LocalQuickFix fix = new LombokGetterOrSetterMayBeUsedFix(className); - myHolder.registerProblem(psiClass, getClassErrorMessage(className), ProblemHighlightType.GENERIC_ERROR_OR_WARNING, - psiClassNameIdentifier != null ? psiClassNameIdentifier.getTextRangeInParent() : psiClass.getTextRange(), - fix); - } + final PsiIdentifier identifier = psiClass.getNameIdentifier(); + if (identifier == null) return; + String className = identifier.getText(); + final LocalQuickFix fix = new LombokGetterOrSetterMayBeUsedFix(className); + myHolder.registerProblem(psiClass, getClassErrorMessage(className), ProblemHighlightType.GENERIC_ERROR_OR_WARNING, + identifier.getTextRangeInParent(), fix); } else if (myLombokGetterOrSetterMayBeUsedFix != null) { myLombokGetterOrSetterMayBeUsedFix.effectivelyDoFix(psiClass, fieldsAndMethods); @@ -143,11 +141,11 @@ public abstract class LombokGetterOrSetterMayBeUsedInspection extends LombokJava @Override protected void applyFix(@NotNull Project project, @NotNull PsiElement element, @NotNull ModPsiUpdater updater) { - if (element instanceof PsiMethod) { - new LombokGetterOrSetterMayBeUsedVisitor(null, this).visitMethodForFix((PsiMethod)element); + if (element instanceof PsiMethod method) { + new LombokGetterOrSetterMayBeUsedVisitor(null, this).visitMethodForFix(method); } - else if (element instanceof PsiClass) { - new LombokGetterOrSetterMayBeUsedVisitor(null, this).visitClass((PsiClass)element); + else if (element instanceof PsiClass aClass) { + new LombokGetterOrSetterMayBeUsedVisitor(null, this).visitClass(aClass); } } diff --git a/plugins/lombok/src/test/java/de/plushnikov/intellij/plugin/inspection/LombokGetterMayBeUsedInspectionTest.java b/plugins/lombok/src/test/java/de/plushnikov/intellij/plugin/inspection/LombokGetterMayBeUsedInspectionTest.java index 03c8aedece0d..d9fd22925725 100644 --- a/plugins/lombok/src/test/java/de/plushnikov/intellij/plugin/inspection/LombokGetterMayBeUsedInspectionTest.java +++ b/plugins/lombok/src/test/java/de/plushnikov/intellij/plugin/inspection/LombokGetterMayBeUsedInspectionTest.java @@ -21,16 +21,11 @@ public class LombokGetterMayBeUsedInspectionTest extends LightDaemonAnalyzerTest @Override protected @NotNull String getTestDataPath() { - return PathManager.getCommunityHomePath() + "/plugins/lombok/testData"; - } - - @NotNull - private String getFilePath() { - return "/inspection/lombokGetterMayBeUsed/" + getTestName(false) + ".java"; + return PathManager.getCommunityHomePath() + "/plugins/lombok/testData/inspection/lombokGetterMayBeUsed/"; } private void doTest() { - doTest(getFilePath(), true, false); + doTest(getTestName(false) + ".java", true, false); } public void testFieldsWithGetter() { @@ -48,4 +43,8 @@ public class LombokGetterMayBeUsedInspectionTest extends LightDaemonAnalyzerTest public void testRecord() { doTest(); } + + public void testCompactSourceFile() { + doTest(); + } } diff --git a/plugins/lombok/testData/inspection/lombokGetterMayBeUsed/CompactSourceFile.java b/plugins/lombok/testData/inspection/lombokGetterMayBeUsed/CompactSourceFile.java new file mode 100644 index 000000000000..6f84d6cce60f --- /dev/null +++ b/plugins/lombok/testData/inspection/lombokGetterMayBeUsed/CompactSourceFile.java @@ -0,0 +1,11 @@ +int i; + +public void setI(int i) { + this.i = i; +} + +public int getI() { + return i; +} + +void main() {} \ No newline at end of file