diff --git a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/processor/clazz/constructor/AbstractConstructorClassProcessor.java b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/processor/clazz/constructor/AbstractConstructorClassProcessor.java index b66c902eb362..02ba31a71b63 100644 --- a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/processor/clazz/constructor/AbstractConstructorClassProcessor.java +++ b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/processor/clazz/constructor/AbstractConstructorClassProcessor.java @@ -211,6 +211,11 @@ public abstract class AbstractConstructorClassProcessor extends AbstractClassPro @NotNull public Collection getRequiredFields(@NotNull PsiClass psiClass) { + return getRequiredFields(psiClass, false); + } + + @NotNull + Collection getRequiredFields(@NotNull PsiClass psiClass, boolean ignoreNonNull) { Collection result = new ArrayList<>(); final boolean classAnnotatedWithValue = PsiAnnotationSearchUtil.isAnnotatedWith(psiClass, LombokClassNames.VALUE); @@ -218,8 +223,7 @@ public abstract class AbstractConstructorClassProcessor extends AbstractClassPro final PsiModifierList modifierList = psiField.getModifierList(); if (null != modifierList) { final boolean isFinal = isFieldFinal(psiField, modifierList, classAnnotatedWithValue); - final boolean isNonNull = - PsiAnnotationSearchUtil.isAnnotatedWith(psiField, LombokUtils.NONNULL_ANNOTATIONS); + final boolean isNonNull = !ignoreNonNull && PsiAnnotationSearchUtil.isAnnotatedWith(psiField, LombokUtils.NONNULL_ANNOTATIONS); // accept initialized final or nonnull fields if ((isFinal || isNonNull) && !psiField.hasInitializer()) { result.add(psiField); diff --git a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/processor/clazz/constructor/NoArgsConstructorProcessor.java b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/processor/clazz/constructor/NoArgsConstructorProcessor.java index 9f4b19a67828..842403aba717 100644 --- a/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/processor/clazz/constructor/NoArgsConstructorProcessor.java +++ b/plugins/lombok/src/main/java/de/plushnikov/intellij/plugin/processor/clazz/constructor/NoArgsConstructorProcessor.java @@ -33,7 +33,7 @@ public final class NoArgsConstructorProcessor extends AbstractConstructorClassPr result &= validateIsConstructorNotDefined(psiClass, staticConstructorName, Collections.emptyList(), problemSink); if (problemSink.deepValidation()) { - final Collection requiredFields = getRequiredFields(psiClass); + final Collection requiredFields = getRequiredFields(psiClass, true); if (!requiredFields.isEmpty()) { problemSink.addErrorMessage("inspection.message.constructor.noargs.needs.to.be.forced") .withLocalQuickFixes(() -> PsiQuickFixFactory.createChangeAnnotationParameterFix(psiAnnotation, "force", "true")); diff --git a/plugins/lombok/src/test/java/de/plushnikov/intellij/plugin/inspection/DiverseInspectionTest.java b/plugins/lombok/src/test/java/de/plushnikov/intellij/plugin/inspection/DiverseInspectionTest.java index 300c0002a1d4..b2e2d8f28856 100644 --- a/plugins/lombok/src/test/java/de/plushnikov/intellij/plugin/inspection/DiverseInspectionTest.java +++ b/plugins/lombok/src/test/java/de/plushnikov/intellij/plugin/inspection/DiverseInspectionTest.java @@ -37,4 +37,8 @@ public class DiverseInspectionTest extends LombokInspectionTest { doTest(); } + public void testNoArgsConstructorWithNotNullFieldsShouldBeNotForced() { + doTest(); + } + } diff --git a/plugins/lombok/testData/inspection/diverse/NoArgsConstructorWithNotNullFieldsShouldBeNotForced.java b/plugins/lombok/testData/inspection/diverse/NoArgsConstructorWithNotNullFieldsShouldBeNotForced.java new file mode 100644 index 000000000000..5d138e7baf0f --- /dev/null +++ b/plugins/lombok/testData/inspection/diverse/NoArgsConstructorWithNotNullFieldsShouldBeNotForced.java @@ -0,0 +1,10 @@ +import lombok.NoArgsConstructor; +import lombok.NonNull; + +//No validation error:" Class contains required fields, you have to force NoArgsConstructor" +@NoArgsConstructor +public class NoArgsConstructorWithNotNullFieldsShouldBeNotForced { + + @NonNull + private String myVariable; +} \ No newline at end of file