[java-refactoring] Inline local: go specifically one level up when searching for PsiReferenceExpression

Otherwise, it's possible to find something unrelated, e.g., if you are inside the lambda
Fixes IDEA-351780 Inline Local Variable inside lambda fails with error

GitOrigin-RevId: 8f0378975da117dfbc7086a67dac6fa6c9533a67
This commit is contained in:
Tagir Valeev
2024-04-26 14:23:13 +00:00
committed by intellij-monorepo-bot
parent 5f8845c2b3
commit e8b723c468
4 changed files with 34 additions and 5 deletions
@@ -32,6 +32,7 @@ import com.intellij.refactoring.util.InlineUtil;
import com.intellij.refactoring.util.RefactoringUtil;
import com.intellij.util.ArrayUtil;
import com.intellij.util.CommonJavaRefactoringUtil;
import com.intellij.util.ObjectUtils;
import com.intellij.util.PlatformUtils;
import com.intellij.util.containers.ContainerUtil;
import com.siyeh.ig.PsiReplacementUtil;
@@ -96,11 +97,10 @@ public final class InlineLocalHandler extends JavaInlineActionHandler {
}
private static @NotNull ModCommand perform(ActionContext context) {
PsiElement element = context.findLeaf();
if (!(element instanceof PsiIdentifier)) {
element = context.findLeafOnTheLeft();
}
final PsiReferenceExpression refExpr = PsiTreeUtil.getParentOfType(element, PsiReferenceExpression.class);
PsiElement parent = context.findLeaf() instanceof PsiIdentifier id ? id.getParent() :
context.findLeafOnTheLeft() instanceof PsiIdentifier id ? id.getParent() :
null;
final PsiReferenceExpression refExpr = ObjectUtils.tryCast(parent, PsiReferenceExpression.class);
InlineMode mode;
if (refExpr != null && PlatformUtils.isFleetBackend() && JavaRefactoringSettings.getInstance().INLINE_LOCAL_THIS) {
// Conflicts mode is handled separately in Fleet, for now
@@ -0,0 +1,13 @@
import java.util.Collection;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
public final class InlineTest {
public List<Object> foo(Collection<Object> bars, Predicate<String> filter) {
return bars.stream().filter(bar -> {
final String se<caret>archString = bar.toString();
return filter.test(searchString);
}).collect(Collectors.toList());
}
}
@@ -0,0 +1,12 @@
import java.util.Collection;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
public final class InlineTest {
public List<Object> foo(Collection<Object> bars, Predicate<String> filter) {
return bars.stream().filter(bar -> {
return filter.test(bar.toString());
}).collect(Collectors.toList());
}
}
@@ -381,6 +381,10 @@ public class InlineLocalTest extends LightJavaCodeInsightTestCase {
JavaRefactoringSettings.getInstance().INLINE_LOCAL_THIS = initialSetting;
}
}
public void testInLambda() {
doTest(LanguageLevel.JDK_1_8);
}
private void doTest() {
doTest(LanguageLevel.JDK_1_7);