From 9332f88d1ac84b5332b7bf16e82c498b9a670457 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 22 Feb 2016 17:43:59 +0100 Subject: [PATCH] anonymous -> lambda: skip fields with qualified refs to another fields of the same class (IDEA-151954) --- .../AnonymousCanBeLambdaInspection.java | 6 +++--- ...erDependencyOnQualifiedFieldOfTheSameClass.java | 10 ++++++++++ ...reDependencyOnQualifiedFieldOfTheSameClass.java | 14 ++++++++++++++ 3 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/afterDependencyOnQualifiedFieldOfTheSameClass.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeDependencyOnQualifiedFieldOfTheSameClass.java diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/AnonymousCanBeLambdaInspection.java b/java/java-analysis-impl/src/com/intellij/codeInspection/AnonymousCanBeLambdaInspection.java index 15787fbaca3b..dc7031d456b9 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/AnonymousCanBeLambdaInspection.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/AnonymousCanBeLambdaInspection.java @@ -33,9 +33,7 @@ import com.intellij.psi.codeStyle.JavaCodeStyleManager; import com.intellij.psi.controlFlow.AnalysisCanceledException; import com.intellij.psi.controlFlow.ControlFlow; import com.intellij.psi.controlFlow.ControlFlowUtil; -import com.intellij.psi.impl.source.resolve.DefaultParameterTypeInferencePolicy; import com.intellij.psi.impl.source.resolve.graphInference.FunctionalInterfaceParameterizationUtil; -import com.intellij.psi.infos.MethodCandidateInfo; import com.intellij.psi.util.*; import com.intellij.util.ArrayUtilRt; import com.intellij.util.Function; @@ -478,7 +476,9 @@ public class AnonymousCanBeLambdaInspection extends BaseJavaBatchLocalInspection final PsiField field = PsiTreeUtil.getParentOfType(expression, PsiField.class); if (field != null) { final PsiElement resolved = expression.resolve(); - if (resolved instanceof PsiField && ((PsiField)resolved).getContainingClass() == field.getContainingClass()) { + if (resolved instanceof PsiField && + ((PsiField)resolved).getContainingClass() == field.getContainingClass() && + expression.getQualifierExpression() == null) { final PsiExpression initializer = ((PsiField)resolved).getInitializer(); if (initializer == null || resolved == field || diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/afterDependencyOnQualifiedFieldOfTheSameClass.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/afterDependencyOnQualifiedFieldOfTheSameClass.java new file mode 100644 index 000000000000..7362848296a3 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/afterDependencyOnQualifiedFieldOfTheSameClass.java @@ -0,0 +1,10 @@ +// "Replace with lambda" "true" + +import java.util.function.Function; + +public class CtorAndFun { + public final String value; + public CtorAndFun(final String value) { this.value = value; } + + public static final Function GET_VALUE = input -> input.value; +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeDependencyOnQualifiedFieldOfTheSameClass.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeDependencyOnQualifiedFieldOfTheSameClass.java new file mode 100644 index 000000000000..bf5dc0cfda80 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/anonymous2lambda/beforeDependencyOnQualifiedFieldOfTheSameClass.java @@ -0,0 +1,14 @@ +// "Replace with lambda" "true" + +import java.util.function.Function; + +public class CtorAndFun { + public final String value; + public CtorAndFun(final String value) { this.value = value; } + + public static final Function GET_VALUE = new Function() { + @Override public String apply(final CtorAndFun input) { + return input.value; + } + }; +} \ No newline at end of file