disable lambda -> meth ref if qualifier is not pure (IDEA-139825)

This commit is contained in:
Anna Kozlova
2015-08-26 16:23:35 +03:00
parent 624c0169d4
commit 6144008d26
2 changed files with 30 additions and 1 deletions
@@ -19,6 +19,8 @@ import com.intellij.codeInsight.FileModificationService;
import com.intellij.codeInsight.daemon.GroupNames;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.Conditions;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
@@ -217,7 +219,26 @@ public class LambdaCanBeMethodReferenceInspection extends BaseJavaBatchLocalInsp
}
private static boolean checkQualifier(PsiElement qualifier) {
return !(qualifier instanceof PsiCallExpression);
if (qualifier == null) {
return true;
}
final Condition<PsiElement> callExpressionCondition = Conditions.instanceOf(PsiCallExpression.class);
final Condition<PsiElement> nonFinalFieldRefCondition = new Condition<PsiElement>() {
@Override
public boolean value(PsiElement expression) {
if (expression instanceof PsiReferenceExpression) {
PsiElement element = ((PsiReferenceExpression)expression).resolve();
if (element instanceof PsiField && !((PsiField)element).hasModifierProperty(PsiModifier.FINAL)) {
return true;
}
}
return false;
}
};
return SyntaxTraverser
.psiTraverser()
.withRoot(qualifier)
.filter(Conditions.or(callExpressionCondition, nonFinalFieldRefCondition)).toList().isEmpty();
}
@Nullable
@@ -0,0 +1,8 @@
// "Replace lambda with method reference" "false"
class Example {
static Runnable runner;
public static void main(String[] args) {
lambda = () -> runn<caret>er.run();
}
}