block lambda -> expr: disable if found comments outside of expression (IDEA-131749)

This commit is contained in:
Anna Kozlova
2014-10-23 12:27:55 +02:00
parent 4ae41f73cf
commit fa2c07e579
4 changed files with 47 additions and 4 deletions

View File

@@ -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;
}
};
}

View File

@@ -0,0 +1,7 @@
// "Replace with expression lambda" "true"
class Test {
{
Runnable r = () -> System.out.println(""//todo comment
);
}
}

View File

@@ -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();
}
}

View File

@@ -0,0 +1,9 @@
// "Replace with expression lambda" "true"
class Test {
{
Runnable r = () -> <caret>{
System.out.println(""//todo comment
);
};
}
}