NotNullContext (@NotNull PsiIfStatement ifStatement, @NotNull PsiVariable variable, @NotNull PsiReferenceExpression reference, @Nullable PsiStatement nullBranch, @Nullable PsiStatement nonNullBranch, @Nullable PsiReturnStatement toDelete) { if(nullBranch == null) return null; EquivalenceChecker.Match match = ourEquivalence.statementsMatch(nullBranch, nonNullBranch); PsiExpression nullDiff = tryCast(match.getLeftDiff(), PsiExpression.class); PsiExpression nonNullDiff = tryCast(match.getRightDiff(), PsiExpression.class); if(!ExpressionUtils.isReferenceTo(nullDiff, variable)) { TopmostQualifierDiff qualifierDiff = TopmostQualifierDiff.from(nullDiff, nonNullDiff); if(qualifierDiff == null) { PsiMethodCallExpression nullCall = tryCast(nullDiff, PsiMethodCallExpression.class); PsiMethodCallExpression nonNullCall = tryCast(nonNullDiff, PsiMethodCallExpression.class); if(nullCall == null || nonNullCall == null) return null; if(!STREAM_EMPTY.test(nonNullCall) || !STREAM_OF.test(nullCall)) return null; PsiExpression maybeRef = nullCall.getArgumentList().getExpressions()[0]; if (!ExpressionUtils.isReferenceTo(maybeRef, variable)) return null; return new NotNullContext(nullCall, maybeRef, nullBranch, reference, ifStatement, null, true); } nullDiff = qualifierDiff.getLeft(); nonNullDiff = qualifierDiff.getRight(); if(!ExpressionUtils.isReferenceTo(nullDiff, variable)) return null; } if(NullabilityUtil.getExpressionNullability(nonNullDiff, true) != Nullability.NOT_NULL) return null; if (nonNullDiff instanceof PsiSuperExpression) return null; if(!LambdaGenerationUtil.canBeUncheckedLambda(nonNullDiff)) return null; return new NotNullContext(nonNullDiff, nullDiff, nullBranch, reference, ifStatement, toDelete, false); }