diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaPsiUtil.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaPsiUtil.java index e47508efb755..c98ff2e10ed6 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaPsiUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaPsiUtil.java @@ -273,7 +273,16 @@ public final class DfaPsiUtil { if (eachType instanceof PsiClassType classType && !local) { PsiElement context = classType.getPsiContext(); if (context != null) { - return NullableNotNullManager.getInstance(context.getProject()).findDefaultTypeUseNullability(context); + NullableNotNullManager manager = NullableNotNullManager.getInstance(context.getProject()); + NullabilityAnnotationInfo typeUseNullability = manager.findDefaultTypeUseNullability(context); + if (typeUseNullability != null) { + return typeUseNullability; + } + PsiClass declaration = PsiUtil.resolveClassInClassTypeOnly(classType); + if (declaration instanceof PsiTypeParameter typeParameter && typeParameter.getExtendsList().getReferenceElements().length == 0) { + // If there's no bound, we assume an implicit `extends Object` bound, which is subject to default annotation if any. + return manager.findDefaultTypeUseNullability(declaration); + } } } return null; diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/JSpecifyReturnFromParameterized.java b/java/java-tests/testData/inspection/dataFlow/fixture/JSpecifyReturnFromParameterized.java index 2090ea1031e5..953507d376a4 100644 --- a/java/java-tests/testData/inspection/dataFlow/fixture/JSpecifyReturnFromParameterized.java +++ b/java/java-tests/testData/inspection/dataFlow/fixture/JSpecifyReturnFromParameterized.java @@ -23,13 +23,13 @@ class ReturnFromParameterizedNullMarked { return null; } }; - Callable callable2 = () -> null; + Callable callable2 = () -> null; R r = new Callable() { @Override public R call() throws Exception { return null; } }.call(); - R r2 = ((Callable) () -> null).call(); + R r2 = ((Callable) () -> null).call(); } } \ No newline at end of file