From 2cc97a1535acda41c72d23fc20772a336ecc634e Mon Sep 17 00:00:00 2001 From: Michail Plushnikov Date: Wed, 29 Mar 2023 20:40:58 +0200 Subject: [PATCH] [lombok] IDEA-313324 Cannot resolve the staticConstructor of Lombok @Value GitOrigin-RevId: b1f37499752fa34d1f906f1aa30fea98860ba643 --- .../plugin/processor/clazz/DataProcessor.java | 5 +++++ .../plugin/processor/clazz/ValueProcessor.java | 5 +++++ .../StaticConstructorHighlightTest.java | 17 +++++++++++++++++ .../after/value/ValueStaticConstructor.java | 2 +- .../before/value/ValueStaticConstructor.java | 2 +- .../highlights/staticConstructor/DataDto.java | 9 +++++++++ .../highlights/staticConstructor/ValueDto.java | 9 +++++++++ 7 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 plugins/lombok/src/test/java/de/plushnikov/intellij/plugin/highlights/StaticConstructorHighlightTest.java create mode 100644 plugins/lombok/testData/highlights/staticConstructor/DataDto.java create mode 100644 plugins/lombok/testData/highlights/staticConstructor/ValueDto.java diff --git a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/processor/clazz/DataProcessor.java b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/processor/clazz/DataProcessor.java index 68f3b72e3892..eb97986e35e2 100644 --- a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/processor/clazz/DataProcessor.java +++ b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/processor/clazz/DataProcessor.java @@ -1,6 +1,7 @@ package de.plushnikov.intellij.plugin.processor.clazz; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; import de.plushnikov.intellij.plugin.LombokClassNames; import de.plushnikov.intellij.plugin.problem.ProblemProcessingSink; @@ -54,6 +55,10 @@ public class DataProcessor extends AbstractClassProcessor { protected Collection getNamesOfPossibleGeneratedElements(@NotNull PsiClass psiClass, @NotNull PsiAnnotation psiAnnotation) { Collection result = new ArrayList<>(); + final String staticConstructorName = PsiAnnotationUtil.getStringAnnotationValue(psiAnnotation, "staticConstructor", ""); + if(StringUtil.isNotEmpty(staticConstructorName)) { + result.add(staticConstructorName); + } result.addAll(getNoArgsConstructorProcessor().getNamesOfPossibleGeneratedElements(psiClass, psiAnnotation)); result.addAll(getToStringProcessor().getNamesOfPossibleGeneratedElements(psiClass, psiAnnotation)); result.addAll(getEqualsAndHashCodeProcessor().getNamesOfPossibleGeneratedElements(psiClass, psiAnnotation)); diff --git a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/processor/clazz/ValueProcessor.java b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/processor/clazz/ValueProcessor.java index 57f8f91eb77a..88579d156aeb 100644 --- a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/processor/clazz/ValueProcessor.java +++ b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/processor/clazz/ValueProcessor.java @@ -1,6 +1,7 @@ package de.plushnikov.intellij.plugin.processor.clazz; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; import de.plushnikov.intellij.plugin.LombokClassNames; import de.plushnikov.intellij.plugin.problem.ProblemProcessingSink; @@ -51,6 +52,10 @@ public class ValueProcessor extends AbstractClassProcessor { protected Collection getNamesOfPossibleGeneratedElements(@NotNull PsiClass psiClass, @NotNull PsiAnnotation psiAnnotation) { Collection result = new ArrayList<>(); + final String staticConstructorName = PsiAnnotationUtil.getStringAnnotationValue(psiAnnotation, "staticConstructor", ""); + if(StringUtil.isNotEmpty(staticConstructorName)) { + result.add(staticConstructorName); + } result.addAll(getNoArgsConstructorProcessor().getNamesOfPossibleGeneratedElements(psiClass, psiAnnotation)); result.addAll(getToStringProcessor().getNamesOfPossibleGeneratedElements(psiClass, psiAnnotation)); result.addAll(getEqualsAndHashCodeProcessor().getNamesOfPossibleGeneratedElements(psiClass, psiAnnotation)); diff --git a/plugins/lombok/src/test/java/de/plushnikov/intellij/plugin/highlights/StaticConstructorHighlightTest.java b/plugins/lombok/src/test/java/de/plushnikov/intellij/plugin/highlights/StaticConstructorHighlightTest.java new file mode 100644 index 000000000000..d42fe0574f76 --- /dev/null +++ b/plugins/lombok/src/test/java/de/plushnikov/intellij/plugin/highlights/StaticConstructorHighlightTest.java @@ -0,0 +1,17 @@ +package de.plushnikov.intellij.plugin.highlights; + +public class StaticConstructorHighlightTest extends AbstractLombokHighlightsTest { + + @Override + protected String getBasePath() { + return super.getBasePath() + "/staticConstructor"; + } + + public void testDataDto() { + doTest(); + } + + public void testValueDto() { + doTest(); + } +} diff --git a/plugins/lombok/testData/after/value/ValueStaticConstructor.java b/plugins/lombok/testData/after/value/ValueStaticConstructor.java index 0730baa50afc..72bbd1944354 100644 --- a/plugins/lombok/testData/after/value/ValueStaticConstructor.java +++ b/plugins/lombok/testData/after/value/ValueStaticConstructor.java @@ -7,7 +7,7 @@ public final class ValueStaticConstructor { } public static void main(String[] args) { - final ValueStaticConstructor test = new ValueStaticConstructor.of(1); + final ValueStaticConstructor test = ValueStaticConstructor.of(1); System.out.println(test); } diff --git a/plugins/lombok/testData/before/value/ValueStaticConstructor.java b/plugins/lombok/testData/before/value/ValueStaticConstructor.java index eb18d18c2723..90bdd30ab990 100644 --- a/plugins/lombok/testData/before/value/ValueStaticConstructor.java +++ b/plugins/lombok/testData/before/value/ValueStaticConstructor.java @@ -10,7 +10,7 @@ public class ValueStaticConstructor { } public static void main(String[] args) { - final ValueStaticConstructor test = new ValueStaticConstructor.of(1); + final ValueStaticConstructor test = ValueStaticConstructor.of(1); System.out.println(test); } } diff --git a/plugins/lombok/testData/highlights/staticConstructor/DataDto.java b/plugins/lombok/testData/highlights/staticConstructor/DataDto.java new file mode 100644 index 000000000000..bee0254b4f06 --- /dev/null +++ b/plugins/lombok/testData/highlights/staticConstructor/DataDto.java @@ -0,0 +1,9 @@ +import lombok.Data; + +@Data(staticConstructor = "o3f") +public class DataDto { + private final int someInt; + public static void main(String[] args) { + DataDto.o3f(2); + } +} diff --git a/plugins/lombok/testData/highlights/staticConstructor/ValueDto.java b/plugins/lombok/testData/highlights/staticConstructor/ValueDto.java new file mode 100644 index 000000000000..34ce1726cc9a --- /dev/null +++ b/plugins/lombok/testData/highlights/staticConstructor/ValueDto.java @@ -0,0 +1,9 @@ +import lombok.Value; + +@Value(staticConstructor = "o3f") +public class ValueDto { + private int someInt; + public static void main(String[] args) { + ValueDto.o3f(2); + } +}