mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-20 21:41:24 +07:00
block lambda -> expr: disable if found comments outside of expression (IDEA-131749)
This commit is contained in:
@@ -21,19 +21,17 @@ import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.source.resolve.graphInference.InferenceSession;
|
||||
import com.intellij.psi.infos.CandidateInfo;
|
||||
import com.intellij.psi.infos.MethodCandidateInfo;
|
||||
import com.intellij.psi.scope.conflictResolvers.JavaMethodsConflictResolver;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import org.jetbrains.annotations.Nls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -77,7 +75,7 @@ public class RedundantLambdaCodeBlockInspection extends BaseJavaBatchLocalInspec
|
||||
final PsiElement body = expression.getBody();
|
||||
if (body instanceof PsiCodeBlock) {
|
||||
PsiExpression psiExpression = getExpression((PsiCodeBlock)body);
|
||||
if (psiExpression != null) {
|
||||
if (psiExpression != null && !findCommentsOutsideExpression(body, psiExpression)) {
|
||||
if (!expression.isVoidCompatible() && LambdaUtil.isExpressionStatementExpression(psiExpression)) {
|
||||
final PsiElement parent = PsiUtil.skipParenthesizedExprUp(expression.getParent());
|
||||
if (parent instanceof PsiExpressionList) {
|
||||
@@ -110,6 +108,16 @@ public class RedundantLambdaCodeBlockInspection extends BaseJavaBatchLocalInspec
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean findCommentsOutsideExpression(PsiElement body, PsiExpression psiExpression) {
|
||||
final Collection<PsiComment> comments = PsiTreeUtil.findChildrenOfType(body, PsiComment.class);
|
||||
for (PsiComment comment : comments) {
|
||||
if (!PsiTreeUtil.isAncestor(psiExpression, comment, true)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
// "Replace with expression lambda" "true"
|
||||
class Test {
|
||||
{
|
||||
Runnable r = () -> System.out.println(""//todo comment
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
// "Replace with expression lambda" "false"
|
||||
class Test {
|
||||
{
|
||||
a(() -> {
|
||||
//my comment here
|
||||
ret<caret>urn new Object(){};
|
||||
});
|
||||
}
|
||||
|
||||
void a(Supplier<Object> s) {}
|
||||
void a(AI<Object> s) {}
|
||||
|
||||
interface AI<K> {
|
||||
void m();
|
||||
}
|
||||
interface Supplier<T> {
|
||||
T get();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
// "Replace with expression lambda" "true"
|
||||
class Test {
|
||||
{
|
||||
Runnable r = () -> <caret>{
|
||||
System.out.println(""//todo comment
|
||||
);
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user