[java-debugger] Fix for IDEA-370817 Evaluate Expression with a lambda and a comment at the top throws EvaluateException: Cannot find local variable 'EvaluationClass'

GitOrigin-RevId: d915e69afe155a13b0dbf61344308550ea01cd52
This commit is contained in:
Tagir Valeev
2025-10-08 16:21:30 +00:00
committed by intellij-monorepo-bot
parent af7031947b
commit fb9db64967
2 changed files with 26 additions and 20 deletions
@@ -30,6 +30,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
import java.util.Objects;
public final class ExtractLightMethodObjectHandler {
private static final Logger LOG = Logger.getInstance(ExtractLightMethodObjectHandler.class);
@@ -142,7 +143,6 @@ public final class ExtractLightMethodObjectHandler {
LOG.assertTrue(elementsCopy[0].getParent() == container, "element: " + elementsCopy[0].getText() + "; container: " + container.getText());
final int startOffsetInContainer = elementsCopy[0].getStartOffsetInParent();
final ControlFlow controlFlow;
try {
@@ -211,24 +211,30 @@ public final class ExtractLightMethodObjectHandler {
extractMethodObjectProcessor.getExtractProcessor().setShowErrorDialogs(false);
final ExtractMethodObjectProcessor.MyExtractMethodProcessor extractProcessor = extractMethodObjectProcessor.getExtractProcessor();
int startOffsetInContainer;
if (extractProcessor.prepare()) {
if (extractProcessor.showDialog()) {
try {
extractProcessor.doExtract();
final UsageInfo[] usages = extractMethodObjectProcessor.findUsages();
extractMethodObjectProcessor.performRefactoring(usages);
extractMethodObjectProcessor.runChangeSignature();
}
catch (IncorrectOperationException e) {
LOG.error(e);
}
if (extractMethodObjectProcessor.isCreateInnerClass()) {
extractMethodObjectProcessor.changeInstanceAccess(project);
}
final PsiElement method = extractMethodObjectProcessor.getMethod();
LOG.assertTrue(method != null);
method.delete();
boolean shown = extractProcessor.showDialog();
if (!shown) {
throw new IllegalStateException("Must return success");
}
try {
extractProcessor.doExtract();
startOffsetInContainer = Objects.requireNonNull(PsiTreeUtil.getParentOfType(extractProcessor.getMethodCall(), PsiStatement.class))
.getTextRangeInParent().getStartOffset();
final UsageInfo[] usages = extractMethodObjectProcessor.findUsages();
extractMethodObjectProcessor.performRefactoring(usages);
extractMethodObjectProcessor.runChangeSignature();
}
catch (IncorrectOperationException e) {
LOG.error(e);
return null;
}
if (extractMethodObjectProcessor.isCreateInnerClass()) {
extractMethodObjectProcessor.changeInstanceAccess(project);
}
final PsiElement method = extractMethodObjectProcessor.getMethod();
LOG.assertTrue(method != null);
method.delete();
} else {
return null;
}
@@ -257,7 +263,7 @@ public final class ExtractLightMethodObjectHandler {
}
}
final String generatedCall = copy.getText().substring(startOffset, outStatement.getTextOffset());
final String generatedCall = copy.getText().substring(startOffset, outStatement.getTextOffset()).trim();
return new LightMethodObjectExtractedData(generatedCall,
(PsiClass)CodeStyleManager.getInstance(project).reformat(generatedClass),
originalAnchor, useMagicAccessor);
@@ -3,7 +3,7 @@
package com.intellij.java.refactoring;
import com.intellij.JavaTestUtil;
import com.intellij.idea.IJIgnore;
import com.intellij.idea.TestFor;
import com.intellij.openapi.projectRoots.JavaSdkVersion;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.psi.JavaCodeFragment;
@@ -343,7 +343,7 @@ public class ExtractMethodObject4DebuggerTest extends LightRefactoringTestCase {
}""");
}
@IJIgnore(issue = "IDEA-370817")
@TestFor(issues = "IDEA-370817")
public void testOnWithComment() throws Exception {
doTest("""
//