diff --git a/java/java-impl-inspections/src/com/intellij/codeInspection/ReplaceNullCheckInspection.java b/java/java-impl-inspections/src/com/intellij/codeInspection/ReplaceNullCheckInspection.java index 0e09100b6b49..f085f497b1fd 100644 --- a/java/java-impl-inspections/src/com/intellij/codeInspection/ReplaceNullCheckInspection.java +++ b/java/java-impl-inspections/src/com/intellij/codeInspection/ReplaceNullCheckInspection.java @@ -1,4 +1,4 @@ -// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.codeInspection; import com.intellij.codeInsight.Nullability; @@ -41,8 +41,7 @@ public class ReplaceNullCheckInspection extends AbstractBaseJavaLocalInspectionT @Override public JComponent createOptionsPanel() { MultipleCheckboxOptionsPanel panel = new MultipleCheckboxOptionsPanel(this); - panel - .addCheckbox(JavaBundle.message("inspection.require.non.null.no.warning.replacement.bigger"), "noWarningReplacementBigger"); + panel.addCheckbox(JavaBundle.message("inspection.require.non.null.no.warning.replacement.bigger"), "noWarningReplacementBigger"); return panel; } @@ -62,10 +61,11 @@ public class ReplaceNullCheckInspection extends AbstractBaseJavaLocalInspectionT PsiStatement nextToDelete = context.myNextToDelete; int maybeImplicitElseLength = nextToDelete != null ? nextToDelete.getTextLength() : 0; - boolean isInfoLevel = noWarningReplacementBigger && ifStatement.getTextLength() + maybeImplicitElseLength - context.getLenAfterReplace() < MINIMAL_WARN_DELTA_SIZE; + boolean isInfoLevel = noWarningReplacementBigger && + ifStatement.getTextLength() + maybeImplicitElseLength - context.getLenAfterReplace() < MINIMAL_WARN_DELTA_SIZE; ProblemHighlightType highlight = getHighlight(context, isInfoLevel); if (!isOnTheFly && highlight == ProblemHighlightType.INFORMATION) return; - holder.registerProblem(ifStatement.getFirstChild(), JavaBundle.message("inspection.require.non.null.message", method), highlight, + holder.registerProblem(ifStatement.getFirstChild(), JavaBundle.message("inspection.require.non.null.message", 1, method), highlight, new ReplaceWithRequireNonNullFix(method, false)); } @@ -87,12 +87,12 @@ public class ReplaceNullCheckInspection extends AbstractBaseJavaLocalInspectionT String method = getMethodWithClass(context.myNullExpr, false); String name = context.myReferenceExpression.getText(); boolean replacementShorter = - name != null - && context.myNullExpr.getTextLength() + method.length() + name.length() < context.myTernary.getTextLength() + MINIMAL_WARN_DELTA_SIZE; + name != null && + context.myNullExpr.getTextLength() + method.length() + name.length() < context.myTernary.getTextLength() + MINIMAL_WARN_DELTA_SIZE; boolean isInfoLevel = noWarningReplacementBigger && replacementShorter; ProblemHighlightType highlightType = isInfoLevel ? ProblemHighlightType.INFORMATION : ProblemHighlightType.GENERIC_ERROR_OR_WARNING; if (!isOnTheFly && highlightType == ProblemHighlightType.INFORMATION) return; - holder.registerProblem(ternary, JavaBundle.message("inspection.require.non.null.message", method), + holder.registerProblem(ternary, JavaBundle.message("inspection.require.non.null.message", 2, method), highlightType, new ReplaceWithRequireNonNullFix(method, true)); } }; @@ -110,7 +110,7 @@ public class ReplaceNullCheckInspection extends AbstractBaseJavaLocalInspectionT @NotNull @Override public String getName() { - return JavaBundle.message("inspection.require.non.null.message", myMethod); + return JavaBundle.message("inspection.require.non.null.quickfix", myIsTernary ? 2 : 1, myMethod); } @Nls @@ -207,11 +207,11 @@ public class ReplaceNullCheckInspection extends AbstractBaseJavaLocalInspectionT @Nullable static NotNullContext from(@NotNull PsiIfStatement ifStatement) { - PsiExpression condition = ifStatement.getCondition(); + PsiExpression condition = PsiUtil.skipParenthesizedExprDown(ifStatement.getCondition()); if(condition == null) return null; PsiBinaryExpression binOp = tryCast(condition, PsiBinaryExpression.class); if(binOp == null) return null; - PsiExpression value = ExpressionUtils.getValueComparedWithNull(binOp); + PsiExpression value = PsiUtil.skipParenthesizedExprDown(ExpressionUtils.getValueComparedWithNull(binOp)); PsiReferenceExpression referenceExpression = tryCast(value, PsiReferenceExpression.class); if(referenceExpression == null) return null; PsiVariable variable = tryCast(referenceExpression.resolve(), PsiVariable.class); diff --git a/java/java-impl/src/inspectionDescriptions/ReplaceNullCheck.html b/java/java-impl/src/inspectionDescriptions/ReplaceNullCheck.html index 78ec92177c20..afcdad8c787b 100644 --- a/java/java-impl/src/inspectionDescriptions/ReplaceNullCheck.html +++ b/java/java-impl/src/inspectionDescriptions/ReplaceNullCheck.html @@ -1,6 +1,6 @@
-Reports null checks that can be replaced with a call to a static method fromObjects or Stream.
+Reports null checks that can be replaced with a call to a static method from Objects or Stream.
Example:
if (message == null) {
@@ -16,7 +16,7 @@ Reports null checks that can be replaced with a call to a static method from
- Use the Don't warn if length of replacement bigger than original option to ignore the cases when the replacement is longer than the + Use the Don't warn if the replacement is longer than the original option to ignore the cases when the replacement is longer than the original code.
New in 2017.3
diff --git a/java/java-tests/testData/inspection/requireNonNull/afterIfAssignment.java b/java/java-tests/testData/inspection/requireNonNull/afterIfAssignment.java index 1586afa36450..4aad677e540f 100644 --- a/java/java-tests/testData/inspection/requireNonNull/afterIfAssignment.java +++ b/java/java-tests/testData/inspection/requireNonNull/afterIfAssignment.java @@ -1,4 +1,4 @@ -// "Replace condition with Objects.requireNonNullElseGet" "true" +// "Replace 'if' statement with 'Objects.requireNonNullElseGet()' call" "true" import java.util.*; diff --git a/java/java-tests/testData/inspection/requireNonNull/afterIfCall.java b/java/java-tests/testData/inspection/requireNonNull/afterIfCall.java index e49a0b3e0ca7..ecceb81031a1 100644 --- a/java/java-tests/testData/inspection/requireNonNull/afterIfCall.java +++ b/java/java-tests/testData/inspection/requireNonNull/afterIfCall.java @@ -1,4 +1,4 @@ -// "Replace condition with Objects.requireNonNullElse" "GENERIC_ERROR_OR_WARNING" +// "Replace 'if' statement with 'Objects.requireNonNullElse()' call" "GENERIC_ERROR_OR_WARNING" import java.util.*; diff --git a/java/java-tests/testData/inspection/requireNonNull/afterNonSimpleElse.java b/java/java-tests/testData/inspection/requireNonNull/afterNonSimpleElse.java index 85b39cb302ac..26db56f05cdf 100644 --- a/java/java-tests/testData/inspection/requireNonNull/afterNonSimpleElse.java +++ b/java/java-tests/testData/inspection/requireNonNull/afterNonSimpleElse.java @@ -1,4 +1,4 @@ -// "Replace condition with Objects.requireNonNullElseGet" "INFORMATION" +// "Replace 'if' statement with 'Objects.requireNonNullElseGet()' call" "INFORMATION" import java.util.*; diff --git a/java/java-tests/testData/inspection/requireNonNull/afterSimpeReturn.java b/java/java-tests/testData/inspection/requireNonNull/afterSimpeReturn.java index 1c87dea5ab7a..dc5ccff6a32c 100644 --- a/java/java-tests/testData/inspection/requireNonNull/afterSimpeReturn.java +++ b/java/java-tests/testData/inspection/requireNonNull/afterSimpeReturn.java @@ -1,4 +1,4 @@ -// "Replace condition with Objects.requireNonNullElse" "true" +// "Replace 'if' statement with 'Objects.requireNonNullElse()' call" "true" import java.util.*; diff --git a/java/java-tests/testData/inspection/requireNonNull/afterSimpeReturnWithoutElse.java b/java/java-tests/testData/inspection/requireNonNull/afterSimpeReturnWithoutElse.java index c8518e6233e8..fe1a2d79358a 100644 --- a/java/java-tests/testData/inspection/requireNonNull/afterSimpeReturnWithoutElse.java +++ b/java/java-tests/testData/inspection/requireNonNull/afterSimpeReturnWithoutElse.java @@ -1,4 +1,4 @@ -// "Replace condition with Objects.requireNonNullElse" "true" +// "Replace 'if' statement with 'Objects.requireNonNullElse()' call" "true" import java.util.*; diff --git a/java/java-tests/testData/inspection/requireNonNull/afterStreamEmptyOf.java b/java/java-tests/testData/inspection/requireNonNull/afterStreamEmptyOf.java index 3fe84aee449a..fabf6eef4ff1 100644 --- a/java/java-tests/testData/inspection/requireNonNull/afterStreamEmptyOf.java +++ b/java/java-tests/testData/inspection/requireNonNull/afterStreamEmptyOf.java @@ -1,4 +1,4 @@ -// "Replace condition with Stream.ofNullable" "true" +// "Replace 'if' statement with 'Stream.ofNullable()' call" "true" import java.util.*; import java.util.stream.Stream; diff --git a/java/java-tests/testData/inspection/requireNonNull/afterStreamEmptyOfComplex.java b/java/java-tests/testData/inspection/requireNonNull/afterStreamEmptyOfComplex.java index 1ca0b5a2ec29..5bae71cd15cf 100644 --- a/java/java-tests/testData/inspection/requireNonNull/afterStreamEmptyOfComplex.java +++ b/java/java-tests/testData/inspection/requireNonNull/afterStreamEmptyOfComplex.java @@ -1,4 +1,4 @@ -// "Replace condition with Stream.ofNullable" "true" +// "Replace 'if' statement with 'Stream.ofNullable()' call" "true" import java.util.*; import java.util.stream.Stream; diff --git a/java/java-tests/testData/inspection/requireNonNull/afterStreamEmptyOfComplex2.java b/java/java-tests/testData/inspection/requireNonNull/afterStreamEmptyOfComplex2.java index c689b7a5fdda..44dc315829dc 100644 --- a/java/java-tests/testData/inspection/requireNonNull/afterStreamEmptyOfComplex2.java +++ b/java/java-tests/testData/inspection/requireNonNull/afterStreamEmptyOfComplex2.java @@ -1,4 +1,4 @@ -// "Replace condition with Stream.ofNullable" "true" +// "Replace 'if' statement with 'Stream.ofNullable()' call" "true" import java.util.*; import java.util.stream.Collectors; diff --git a/java/java-tests/testData/inspection/requireNonNull/afterStreamEmptyOfField.java b/java/java-tests/testData/inspection/requireNonNull/afterStreamEmptyOfField.java index ff22720ff196..26702a0088b5 100644 --- a/java/java-tests/testData/inspection/requireNonNull/afterStreamEmptyOfField.java +++ b/java/java-tests/testData/inspection/requireNonNull/afterStreamEmptyOfField.java @@ -1,4 +1,4 @@ -// "Replace condition with Stream.ofNullable" "true" +// "Replace 'if' statement with 'Stream.ofNullable()' call" "true" import java.util.*; import java.util.stream.Stream; diff --git a/java/java-tests/testData/inspection/requireNonNull/afterTernaryField.java b/java/java-tests/testData/inspection/requireNonNull/afterTernaryField.java index 532557f0fe38..5ba6a43d9e75 100644 --- a/java/java-tests/testData/inspection/requireNonNull/afterTernaryField.java +++ b/java/java-tests/testData/inspection/requireNonNull/afterTernaryField.java @@ -1,4 +1,4 @@ -// "Replace condition with Objects.requireNonNullElse" "true" +// "Replace conditional expression with 'Objects.requireNonNullElse()' call" "true" import java.util.*; diff --git a/java/java-tests/testData/inspection/requireNonNull/afterTernaryInvertedNonSimpleCheck.java b/java/java-tests/testData/inspection/requireNonNull/afterTernaryInvertedNonSimpleCheck.java index 1a71fe9522c1..75061538dd14 100644 --- a/java/java-tests/testData/inspection/requireNonNull/afterTernaryInvertedNonSimpleCheck.java +++ b/java/java-tests/testData/inspection/requireNonNull/afterTernaryInvertedNonSimpleCheck.java @@ -1,4 +1,4 @@ -// "Replace condition with Objects.requireNonNullElseGet" "true" +// "Replace conditional expression with 'Objects.requireNonNullElseGet()' call" "true" import java.util.*; diff --git a/java/java-tests/testData/inspection/requireNonNull/afterTernaryOnly.java b/java/java-tests/testData/inspection/requireNonNull/afterTernaryOnly.java index 4e132a007b81..5a5c2f2be96a 100644 --- a/java/java-tests/testData/inspection/requireNonNull/afterTernaryOnly.java +++ b/java/java-tests/testData/inspection/requireNonNull/afterTernaryOnly.java @@ -1,4 +1,4 @@ -// "Replace condition with Objects.requireNonNullElse" "true" +// "Replace conditional expression with 'Objects.requireNonNullElse()' call" "true" import java.util.*; diff --git a/java/java-tests/testData/inspection/requireNonNull/afterTernarySimpleCheck.java b/java/java-tests/testData/inspection/requireNonNull/afterTernarySimpleCheck.java index 786374d10410..e6214eda0a30 100644 --- a/java/java-tests/testData/inspection/requireNonNull/afterTernarySimpleCheck.java +++ b/java/java-tests/testData/inspection/requireNonNull/afterTernarySimpleCheck.java @@ -1,4 +1,4 @@ -// "Replace condition with Objects.requireNonNullElse" "true" +// "Replace conditional expression with 'Objects.requireNonNullElse()' call" "true" import java.util.*; diff --git a/java/java-tests/testData/inspection/requireNonNull/afterTernarySmallerSize.java b/java/java-tests/testData/inspection/requireNonNull/afterTernarySmallerSize.java index d2b878054179..fcf437ca2c8d 100644 --- a/java/java-tests/testData/inspection/requireNonNull/afterTernarySmallerSize.java +++ b/java/java-tests/testData/inspection/requireNonNull/afterTernarySmallerSize.java @@ -1,4 +1,4 @@ -// "Replace condition with Objects.requireNonNullElseGet" "INFORMATION" +// "Replace conditional expression with 'Objects.requireNonNullElseGet()' call" "INFORMATION" import java.util.*; diff --git a/java/java-tests/testData/inspection/requireNonNull/beforeIfAssignment.java b/java/java-tests/testData/inspection/requireNonNull/beforeIfAssignment.java index 469b2e1126e7..90c57c76e170 100644 --- a/java/java-tests/testData/inspection/requireNonNull/beforeIfAssignment.java +++ b/java/java-tests/testData/inspection/requireNonNull/beforeIfAssignment.java @@ -1,4 +1,4 @@ -// "Replace condition with Objects.requireNonNullElseGet" "true" +// "Replace 'if' statement with 'Objects.requireNonNullElseGet()' call" "true" import java.util.*; diff --git a/java/java-tests/testData/inspection/requireNonNull/beforeIfCall.java b/java/java-tests/testData/inspection/requireNonNull/beforeIfCall.java index e677c60466fc..6278d15fe095 100644 --- a/java/java-tests/testData/inspection/requireNonNull/beforeIfCall.java +++ b/java/java-tests/testData/inspection/requireNonNull/beforeIfCall.java @@ -1,4 +1,4 @@ -// "Replace condition with Objects.requireNonNullElse" "GENERIC_ERROR_OR_WARNING" +// "Replace 'if' statement with 'Objects.requireNonNullElse()' call" "GENERIC_ERROR_OR_WARNING" import java.util.*; diff --git a/java/java-tests/testData/inspection/requireNonNull/beforeNonSimpleElse.java b/java/java-tests/testData/inspection/requireNonNull/beforeNonSimpleElse.java index 3b2fd5625d8b..437fb2c66fac 100644 --- a/java/java-tests/testData/inspection/requireNonNull/beforeNonSimpleElse.java +++ b/java/java-tests/testData/inspection/requireNonNull/beforeNonSimpleElse.java @@ -1,4 +1,4 @@ -// "Replace condition with Objects.requireNonNullElseGet" "INFORMATION" +// "Replace 'if' statement with 'Objects.requireNonNullElseGet()' call" "INFORMATION" import java.util.*; diff --git a/java/java-tests/testData/inspection/requireNonNull/beforeSimpeReturn.java b/java/java-tests/testData/inspection/requireNonNull/beforeSimpeReturn.java index 343e5239d87a..09a9bb52dd1e 100644 --- a/java/java-tests/testData/inspection/requireNonNull/beforeSimpeReturn.java +++ b/java/java-tests/testData/inspection/requireNonNull/beforeSimpeReturn.java @@ -1,4 +1,4 @@ -// "Replace condition with Objects.requireNonNullElse" "true" +// "Replace 'if' statement with 'Objects.requireNonNullElse()' call" "true" import java.util.*; diff --git a/java/java-tests/testData/inspection/requireNonNull/beforeSimpeReturnWithoutElse.java b/java/java-tests/testData/inspection/requireNonNull/beforeSimpeReturnWithoutElse.java index f4e52b2c5d4b..27224e4d5004 100644 --- a/java/java-tests/testData/inspection/requireNonNull/beforeSimpeReturnWithoutElse.java +++ b/java/java-tests/testData/inspection/requireNonNull/beforeSimpeReturnWithoutElse.java @@ -1,4 +1,4 @@ -// "Replace condition with Objects.requireNonNullElse" "true" +// "Replace 'if' statement with 'Objects.requireNonNullElse()' call" "true" import java.util.*; diff --git a/java/java-tests/testData/inspection/requireNonNull/beforeStreamEmptyOf.java b/java/java-tests/testData/inspection/requireNonNull/beforeStreamEmptyOf.java index 2e38f49be710..eef7931f6a1f 100644 --- a/java/java-tests/testData/inspection/requireNonNull/beforeStreamEmptyOf.java +++ b/java/java-tests/testData/inspection/requireNonNull/beforeStreamEmptyOf.java @@ -1,4 +1,4 @@ -// "Replace condition with Stream.ofNullable" "true" +// "Replace 'if' statement with 'Stream.ofNullable()' call" "true" import java.util.*; import java.util.stream.Stream; diff --git a/java/java-tests/testData/inspection/requireNonNull/beforeStreamEmptyOfComplex.java b/java/java-tests/testData/inspection/requireNonNull/beforeStreamEmptyOfComplex.java index c61c88ae31ca..ccaf97b454c7 100644 --- a/java/java-tests/testData/inspection/requireNonNull/beforeStreamEmptyOfComplex.java +++ b/java/java-tests/testData/inspection/requireNonNull/beforeStreamEmptyOfComplex.java @@ -1,4 +1,4 @@ -// "Replace condition with Stream.ofNullable" "true" +// "Replace 'if' statement with 'Stream.ofNullable()' call" "true" import java.util.*; import java.util.stream.Stream; diff --git a/java/java-tests/testData/inspection/requireNonNull/beforeStreamEmptyOfComplex2.java b/java/java-tests/testData/inspection/requireNonNull/beforeStreamEmptyOfComplex2.java index e7ea00b9c365..dfdbec1b7d81 100644 --- a/java/java-tests/testData/inspection/requireNonNull/beforeStreamEmptyOfComplex2.java +++ b/java/java-tests/testData/inspection/requireNonNull/beforeStreamEmptyOfComplex2.java @@ -1,4 +1,4 @@ -// "Replace condition with Stream.ofNullable" "true" +// "Replace 'if' statement with 'Stream.ofNullable()' call" "true" import java.util.*; import java.util.stream.Collectors; diff --git a/java/java-tests/testData/inspection/requireNonNull/beforeStreamEmptyOfField.java b/java/java-tests/testData/inspection/requireNonNull/beforeStreamEmptyOfField.java index d8cdd818cf8d..a8dbc9eb1dcc 100644 --- a/java/java-tests/testData/inspection/requireNonNull/beforeStreamEmptyOfField.java +++ b/java/java-tests/testData/inspection/requireNonNull/beforeStreamEmptyOfField.java @@ -1,4 +1,4 @@ -// "Replace condition with Stream.ofNullable" "true" +// "Replace 'if' statement with 'Stream.ofNullable()' call" "true" import java.util.*; import java.util.stream.Stream; diff --git a/java/java-tests/testData/inspection/requireNonNull/beforeStreamOfArray.java b/java/java-tests/testData/inspection/requireNonNull/beforeStreamOfArray.java index 75e609955973..4d4629313bcc 100644 --- a/java/java-tests/testData/inspection/requireNonNull/beforeStreamOfArray.java +++ b/java/java-tests/testData/inspection/requireNonNull/beforeStreamOfArray.java @@ -7,7 +7,7 @@ import java.util.stream.Stream; public class Main { Stream