mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[lombok] IDEA-317168 "Lombok annotations" false positive when using Lombok @NoArgsConstructor and @NonNull
GitOrigin-RevId: 5db9f2109d64e386069915c46496d548e6e54bb2
This commit is contained in:
committed by
intellij-monorepo-bot
parent
e7899edaa1
commit
f032aad26a
+6
-2
@@ -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);
|
||||
|
||||
+1
-1
@@ -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"));
|
||||
|
||||
+4
@@ -37,4 +37,8 @@ public class DiverseInspectionTest extends LombokInspectionTest {
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testNoArgsConstructorWithNotNullFieldsShouldBeNotForced() {
|
||||
doTest();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+10
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user