mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-20 21:41:24 +07:00
redundant lambda code block: do not suggest change void/value compatibility
This commit is contained in:
@@ -67,6 +67,9 @@ public class RedundantLambdaCodeBlockInspection extends BaseJavaBatchLocalInspec
|
||||
if (body instanceof PsiCodeBlock) {
|
||||
PsiExpression psiExpression = getExpression((PsiCodeBlock)body);
|
||||
if (psiExpression != null) {
|
||||
if (!expression.isVoidCompatible() && LambdaUtil.isExpressionStatementExpression(psiExpression)) {
|
||||
return;
|
||||
}
|
||||
final PsiElement errorElement;
|
||||
final PsiElement parent = psiExpression.getParent();
|
||||
if (parent instanceof PsiReturnStatement) {
|
||||
|
||||
@@ -477,6 +477,16 @@ public class LambdaUtil {
|
||||
return true;
|
||||
}
|
||||
|
||||
//JLS 14.8 Expression Statements
|
||||
public static boolean isExpressionStatementExpression(PsiElement body) {
|
||||
return body instanceof PsiAssignmentExpression ||
|
||||
body instanceof PsiPrefixExpression &&
|
||||
(((PsiPrefixExpression)body).getOperationTokenType() == JavaTokenType.PLUSPLUS ||
|
||||
((PsiPrefixExpression)body).getOperationTokenType() == JavaTokenType.MINUSMINUS) ||
|
||||
body instanceof PsiPostfixExpression ||
|
||||
body instanceof PsiCallExpression;
|
||||
}
|
||||
|
||||
public static class TypeParamsChecker extends PsiTypeVisitor<Boolean> {
|
||||
private PsiMethod myMethod;
|
||||
private final PsiClass myClass;
|
||||
|
||||
@@ -225,13 +225,7 @@ public class PsiLambdaExpressionImpl extends ExpressionPsiElement implements Psi
|
||||
if (body instanceof PsiCodeBlock) {
|
||||
return isVoidCompatible();
|
||||
} else {
|
||||
//JLS 14.8 Expression Statements
|
||||
return body instanceof PsiAssignmentExpression ||
|
||||
body instanceof PsiPrefixExpression &&
|
||||
(((PsiPrefixExpression)body).getOperationTokenType() == JavaTokenType.PLUSPLUS ||
|
||||
((PsiPrefixExpression)body).getOperationTokenType() == JavaTokenType.MINUSMINUS) ||
|
||||
body instanceof PsiPostfixExpression ||
|
||||
body instanceof PsiCallExpression;
|
||||
return LambdaUtil.isExpressionStatementExpression(body);
|
||||
}
|
||||
} else {
|
||||
if (body instanceof PsiCodeBlock) {
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
// "Replace with expression lambda" "false"
|
||||
interface A {
|
||||
int m(int x);
|
||||
}
|
||||
|
||||
interface B {
|
||||
void m(boolean x);
|
||||
}
|
||||
|
||||
abstract class X {
|
||||
abstract void foo(A j);
|
||||
abstract void foo(B i);
|
||||
|
||||
void bar(Object o) {
|
||||
foo(x -> {
|
||||
retu<caret>rn x += 1;
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user