mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[java-dfa] IDEA-365459 "Treat non-annotated members and parameters as @Nullable" inspections makes constructors @Nullable
GitOrigin-RevId: b4c0234154171b658451e9628fd1bbc873e4699f
This commit is contained in:
committed by
intellij-monorepo-bot
parent
2e8c27b68e
commit
1ad36b0e7a
+14
-1
@@ -10,6 +10,8 @@ import com.intellij.codeInspection.dataFlow.java.anchor.JavaMethodReferenceRetur
|
||||
import com.intellij.codeInspection.dataFlow.lang.ir.DfaInstructionState;
|
||||
import com.intellij.codeInspection.dataFlow.lang.ir.ExpressionPushingInstruction;
|
||||
import com.intellij.codeInspection.dataFlow.memory.DfaMemoryState;
|
||||
import com.intellij.codeInspection.dataFlow.types.DfType;
|
||||
import com.intellij.codeInspection.dataFlow.types.DfTypes;
|
||||
import com.intellij.codeInspection.dataFlow.value.DfaValue;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.util.TypeConversionUtil;
|
||||
@@ -63,7 +65,18 @@ public class MethodReferenceInstruction extends ExpressionPushingInstruction {
|
||||
}
|
||||
List<? extends MethodContract> contracts = JavaMethodContractUtil.getMethodCallContracts(method, null);
|
||||
PsiType returnType = substitutor.substitute(method.getReturnType());
|
||||
DfaValue defaultResult = interpreter.getFactory().fromDfType(typedObject(returnType, DfaPsiUtil.getElementNullability(returnType, method)));
|
||||
DfType dfType;
|
||||
if (method.isConstructor()) {
|
||||
PsiClass containingClass = method.getContainingClass();
|
||||
if (containingClass != null) {
|
||||
dfType = TypeConstraints.exactClass(containingClass).asDfType().meet(DfTypes.NOT_NULL_OBJECT);
|
||||
} else {
|
||||
dfType = DfTypes.NOT_NULL_OBJECT;
|
||||
}
|
||||
} else {
|
||||
dfType = typedObject(returnType, DfaPsiUtil.getElementNullability(returnType, method));
|
||||
}
|
||||
DfaValue defaultResult = interpreter.getFactory().fromDfType(dfType);
|
||||
Nullability expectedNullability = DfaPsiUtil.getTypeNullability(LambdaUtil.getFunctionalInterfaceReturnType(methodRef));
|
||||
if (expectedNullability == Nullability.NOT_NULL) {
|
||||
CheckNotNullInstruction.checkNotNullable(interpreter, state, defaultResult,
|
||||
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
class Main {
|
||||
public static void main(String[] args) {
|
||||
System.out.println("Hello, World!");
|
||||
|
||||
useConstructorAsFunction(InnerClass::new);
|
||||
useConstructorAsSupplier(InnerClass::new);
|
||||
}
|
||||
|
||||
public static void useConstructorAsFunction(@NotNull Function<@NotNull String, @NotNull InnerClass> function) {
|
||||
|
||||
}
|
||||
|
||||
public static void useConstructorAsSupplier(@NotNull Supplier<@NotNull InnerClass> supplier) {
|
||||
|
||||
}
|
||||
|
||||
public static class InnerClass {
|
||||
public InnerClass(@NotNull String name) {
|
||||
}
|
||||
|
||||
public InnerClass() {
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -381,4 +381,7 @@ public class DataFlowInspection8Test extends DataFlowInspectionTestCase {
|
||||
doTest();
|
||||
}
|
||||
public void testFieldWriteInLambda() { doTest(); }
|
||||
public void testNewMethodReferenceMustBeNonNull() {
|
||||
doTestWith((insp, __) -> insp.TREAT_UNKNOWN_MEMBERS_AS_NULLABLE = true);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user