[lombok] IDEA-317168 "Lombok annotations" false positive when using Lombok @NoArgsConstructor and @NonNull

GitOrigin-RevId: 5db9f2109d64e386069915c46496d548e6e54bb2
This commit is contained in:
Michail Plushnikov
2023-05-01 16:52:49 +00:00
committed by intellij-monorepo-bot
parent e7899edaa1
commit f032aad26a
4 changed files with 21 additions and 3 deletions
@@ -211,6 +211,11 @@ public abstract class AbstractConstructorClassProcessor extends AbstractClassPro
@NotNull
public Collection<PsiField> getRequiredFields(@NotNull PsiClass psiClass) {
return getRequiredFields(psiClass, false);
}
@NotNull
Collection<PsiField> getRequiredFields(@NotNull PsiClass psiClass, boolean ignoreNonNull) {
Collection<PsiField> 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);
@@ -33,7 +33,7 @@ public final class NoArgsConstructorProcessor extends AbstractConstructorClassPr
result &= validateIsConstructorNotDefined(psiClass, staticConstructorName, Collections.emptyList(), problemSink);
if (problemSink.deepValidation()) {
final Collection<PsiField> requiredFields = getRequiredFields(psiClass);
final Collection<PsiField> requiredFields = getRequiredFields(psiClass, true);
if (!requiredFields.isEmpty()) {
problemSink.addErrorMessage("inspection.message.constructor.noargs.needs.to.be.forced")
.withLocalQuickFixes(() -> PsiQuickFixFactory.createChangeAnnotationParameterFix(psiAnnotation, "force", "true"));
@@ -37,4 +37,8 @@ public class DiverseInspectionTest extends LombokInspectionTest {
doTest();
}
public void testNoArgsConstructorWithNotNullFieldsShouldBeNotForced() {
doTest();
}
}
@@ -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;
}