mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-13 21:55:01 +07:00
Java: improve inspection messages
for "Null check can be replaced with method call" inspection GitOrigin-RevId: ffa45cce88afb341cdeb9a49d4ee256251865bfc
This commit is contained in:
committed by
intellij-monorepo-bot
parent
77b9f43a1d
commit
e5caa802af
+11
-11
@@ -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);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<html>
|
||||
<body>
|
||||
Reports null checks that can be replaced with a call to a static method from <code>Objects</code> or <code>Stream</code>.
|
||||
Reports <code>null</code> checks that can be replaced with a call to a static method from <code>Objects</code> or <code>Stream</code>.
|
||||
<p><b>Example:</b></p>
|
||||
<pre><code>
|
||||
if (message == null) {
|
||||
@@ -16,7 +16,7 @@ Reports null checks that can be replaced with a call to a static method from <co
|
||||
</code></pre>
|
||||
<!-- tooltip end -->
|
||||
<p>
|
||||
Use the <b>Don't warn if length of replacement bigger than original</b> option to ignore the cases when the replacement is longer than the
|
||||
Use the <b>Don't warn if the replacement is longer than the original</b> option to ignore the cases when the replacement is longer than the
|
||||
original code.
|
||||
</p>
|
||||
<p><small>New in 2017.3</small></p>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// "Replace condition with Objects.requireNonNullElseGet" "true"
|
||||
// "Replace 'if' statement with 'Objects.requireNonNullElseGet()' call" "true"
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
||||
@@ -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.*;
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// "Replace condition with Objects.requireNonNullElseGet" "INFORMATION"
|
||||
// "Replace 'if' statement with 'Objects.requireNonNullElseGet()' call" "INFORMATION"
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// "Replace condition with Objects.requireNonNullElse" "true"
|
||||
// "Replace 'if' statement with 'Objects.requireNonNullElse()' call" "true"
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// "Replace condition with Objects.requireNonNullElse" "true"
|
||||
// "Replace 'if' statement with 'Objects.requireNonNullElse()' call" "true"
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// "Replace condition with Objects.requireNonNullElse" "true"
|
||||
// "Replace conditional expression with 'Objects.requireNonNullElse()' call" "true"
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// "Replace condition with Objects.requireNonNullElseGet" "true"
|
||||
// "Replace conditional expression with 'Objects.requireNonNullElseGet()' call" "true"
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// "Replace condition with Objects.requireNonNullElse" "true"
|
||||
// "Replace conditional expression with 'Objects.requireNonNullElse()' call" "true"
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// "Replace condition with Objects.requireNonNullElse" "true"
|
||||
// "Replace conditional expression with 'Objects.requireNonNullElse()' call" "true"
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// "Replace condition with Objects.requireNonNullElseGet" "INFORMATION"
|
||||
// "Replace conditional expression with 'Objects.requireNonNullElseGet()' call" "INFORMATION"
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// "Replace condition with Objects.requireNonNullElseGet" "true"
|
||||
// "Replace 'if' statement with 'Objects.requireNonNullElseGet()' call" "true"
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
||||
@@ -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.*;
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// "Replace condition with Objects.requireNonNullElseGet" "INFORMATION"
|
||||
// "Replace 'if' statement with 'Objects.requireNonNullElseGet()' call" "INFORMATION"
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// "Replace condition with Objects.requireNonNullElse" "true"
|
||||
// "Replace 'if' statement with 'Objects.requireNonNullElse()' call" "true"
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// "Replace condition with Objects.requireNonNullElse" "true"
|
||||
// "Replace 'if' statement with 'Objects.requireNonNullElse()' call" "true"
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -7,7 +7,7 @@ import java.util.stream.Stream;
|
||||
|
||||
public class Main {
|
||||
Stream<Object> getStream(Object[] arr) {
|
||||
if<caret>(arr == null) return Stream.empty();
|
||||
if<caret>(((arr) == (null))) return Stream.empty();
|
||||
else return Stream.of(arr);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// "Replace condition with Objects.requireNonNullElse" "false"
|
||||
// "Replace 'if' statement with 'Objects.requireNonNullElse()' call" "false"
|
||||
|
||||
class Component {
|
||||
public Component add(Component component, int index) {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// "Replace condition with Objects.requireNonNullElse" "true"
|
||||
// "Replace conditional expression with 'Objects.requireNonNullElse()' call" "true"
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// "Replace condition with Objects.requireNonNullElseGet" "true"
|
||||
// "Replace conditional expression with 'Objects.requireNonNullElseGet()' call" "true"
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// "Replace condition with Objects.requireNonNullElse" "false"
|
||||
// "Replace conditional expression with 'Objects.requireNonNullElse()' call" "false"
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// "Replace condition with Objects.requireNonNullElse" "true"
|
||||
// "Replace conditional expression with 'Objects.requireNonNullElse()' call" "true"
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// "Replace condition with Objects.requireNonNullElse" "true"
|
||||
// "Replace conditional expression with 'Objects.requireNonNullElse()' call" "true"
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// "Replace condition with Objects.requireNonNullElseGet" "INFORMATION"
|
||||
// "Replace conditional expression with 'Objects.requireNonNullElseGet()' call" "INFORMATION"
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
||||
@@ -677,8 +677,9 @@ inspection.replace.with.trivial.lambda.fix.family.name=Replace with trivial lamb
|
||||
inspection.replace.with.trivial.lambda.fix.name=Replace with lambda returning ''{0}''
|
||||
inspection.require.non.null=Replace null check with Objects/Stream static call
|
||||
inspection.require.non.null.description=Null check can be replaced with method call
|
||||
inspection.require.non.null.message=Replace condition with {0}
|
||||
inspection.require.non.null.no.warning.replacement.bigger=Don't warn if length of replacement bigger than original
|
||||
inspection.require.non.null.message={0, choice, 1#''if'' statement|2#Conditional expression} can be replaced with call to ''{1}()''
|
||||
inspection.require.non.null.quickfix=Replace {0, choice, 1#''if'' statement|2#conditional expression} with ''{1}()'' call
|
||||
inspection.require.non.null.no.warning.replacement.bigger=Don't warn if the replacement is longer than the original
|
||||
inspection.return.separated.from.computation.descriptor=Return separated from computation of value of ''{0}''
|
||||
inspection.return.separated.from.computation.family.quickfix=Move 'return' closer to computation of the result
|
||||
inspection.return.separated.from.computation.name='return' separated from the result computation
|
||||
|
||||
Reference in New Issue
Block a user