diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightControlFlowUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightControlFlowUtil.java index 715040ac8048..bc75547def81 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightControlFlowUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightControlFlowUtil.java @@ -678,7 +678,9 @@ public final class HighlightControlFlowUtil { @NotNull PsiExpression expression, @NotNull PsiReferenceExpression reference, @NotNull PsiFile containingFile) { - if (variable.hasInitializer()) return false; + if (variable.hasInitializer()) { + return variable instanceof PsiField field && !PsiAugmentProvider.canTrustFieldInitializer(field); + } if (variable instanceof PsiParameter) return false; PsiElement scope = getElementVariableReferencedFrom(variable, expression); if (variable instanceof PsiField field) { diff --git a/plugins/lombok/src/test/java/com/intellij/java/lomboktest/LombokHighlightingTest.java b/plugins/lombok/src/test/java/com/intellij/java/lomboktest/LombokHighlightingTest.java index 96b3da3ef342..8561ceebe61c 100644 --- a/plugins/lombok/src/test/java/com/intellij/java/lomboktest/LombokHighlightingTest.java +++ b/plugins/lombok/src/test/java/com/intellij/java/lomboktest/LombokHighlightingTest.java @@ -48,6 +48,10 @@ public class LombokHighlightingTest extends LightDaemonAnalyzerTestCase { doTest(); } + public void testBuilderWithDefaultReinitializeInConstructor() { + doTest(); + } + public void testValueSealedInterface() { doTest(); } diff --git a/plugins/lombok/testData/highlighting/BuilderWithDefaultReinitializeInConstructor.java b/plugins/lombok/testData/highlighting/BuilderWithDefaultReinitializeInConstructor.java new file mode 100644 index 000000000000..d9941e9d7e38 --- /dev/null +++ b/plugins/lombok/testData/highlighting/BuilderWithDefaultReinitializeInConstructor.java @@ -0,0 +1,35 @@ +import lombok.Builder; +import lombok.experimental.SuperBuilder; + +@Builder +class Bar { + @Builder.Default + private final String bar = "FooBar"; + + private final String foo = "Foo"; + + public Bar(String bar, String foo) { + this.bar = bar; + this.foo = foo; + } +} + +@SuperBuilder +class Foo { + @Builder.Default + private final String bar = "FooBar"; + + private final String foo = "Foo"; + + public Foo(String bar, String foo) { + this.bar = bar; + this.foo = foo; + } +} + +public class BuilderWithDefaultReinitializeInConstructor { + public static void main(String[] args) { + new Bar("FooBar", "Foo"); + new Foo("FooBar", "Foo"); + } +} \ No newline at end of file