IDEA-207528 - remove executed methods one by one, not all together

This commit is contained in:
Egor Ushakov
2019-02-21 16:28:49 +03:00
parent abd0a37dc2
commit 626838092e
@@ -26,7 +26,6 @@ import com.intellij.psi.*;
import com.intellij.util.DocumentUtil;
import com.intellij.util.Range;
import com.intellij.util.ThreeState;
import com.intellij.util.containers.OrderedSet;
import com.sun.jdi.Location;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -37,10 +36,7 @@ import org.jetbrains.org.objectweb.asm.Label;
import org.jetbrains.org.objectweb.asm.MethodVisitor;
import org.jetbrains.org.objectweb.asm.Opcodes;
import java.util.Collections;
import java.util.Deque;
import java.util.LinkedList;
import java.util.List;
import java.util.*;
public class JavaSmartStepIntoHandler extends JvmSmartStepIntoHandler {
private static final Logger LOG = Logger.getInstance(JavaSmartStepIntoHandler.class);
@@ -123,7 +119,7 @@ public class JavaSmartStepIntoHandler extends JvmSmartStepIntoHandler {
}
while (true);
final List<SmartStepTarget> targets = new OrderedSet<>();
final List<SmartStepTarget> targets = new ArrayList<>();
final Ref<TextRange> textRange = new Ref<>(lineRange);
@@ -325,13 +321,17 @@ public class JavaSmartStepIntoHandler extends JvmSmartStepIntoHandler {
@Override
public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) {
if (myLineMatch) {
targets.removeIf(t -> {
if (t instanceof MethodSmartStepTarget) {
return DebuggerUtilsEx.methodMatches(((MethodSmartStepTarget)t).getMethod(),
owner.replace("/", "."), name, desc, suspendContext.getDebugProcess());
Iterator<SmartStepTarget> iterator = targets.iterator();
while (iterator.hasNext()) {
SmartStepTarget e = iterator.next();
if (e instanceof MethodSmartStepTarget &&
DebuggerUtilsEx.methodMatches(((MethodSmartStepTarget)e).getMethod(),
owner.replace("/", "."), name, desc,
suspendContext.getDebugProcess())) {
iterator.remove();
break;
}
return false;
});
}
}
}
}, true);