diff --git a/java/debugger/impl/src/com/intellij/debugger/jdi/MethodBytecodeUtil.java b/java/debugger/impl/src/com/intellij/debugger/jdi/MethodBytecodeUtil.java index e0bdfe580a61..d490f072182f 100644 --- a/java/debugger/impl/src/com/intellij/debugger/jdi/MethodBytecodeUtil.java +++ b/java/debugger/impl/src/com/intellij/debugger/jdi/MethodBytecodeUtil.java @@ -22,6 +22,7 @@ import com.intellij.util.ReflectionUtil; import com.intellij.util.ThrowableConsumer; import com.intellij.util.containers.ContainerUtil; import com.sun.jdi.*; +import one.util.streamex.StreamEx; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.org.objectweb.asm.*; @@ -241,10 +242,7 @@ public class MethodBytecodeUtil { public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) { ReferenceType cls = ContainerUtil.getFirstItem(clsType.virtualMachine().classesByName(owner)); if (cls != null) { - Method method = ContainerUtil.getFirstItem(cls.methodsByName(name)); - if (method != null) { - methodRef.set(method); - } + cls.methodsByName(name).stream().findFirst().ifPresent(methodRef::set); } } }); @@ -252,4 +250,21 @@ public class MethodBytecodeUtil { } return methodRef.get(); } + + @Nullable + public static Method getBridgeTargetMethod(Method method) { + Ref methodRef = Ref.create(); + if (method.isBridge()) { + visit(method, new MethodVisitor(Opcodes.API_VERSION) { + @Override + public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) { + ReferenceType cls = ContainerUtil.getFirstItem(method.virtualMachine().classesByName(owner)); + if (cls != null) { + StreamEx.of(cls.methodsByName(name)).without(method).findFirst().ifPresent(methodRef::set); + } + } + }); + } + return methodRef.get(); + } } diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/MethodBreakpoint.java b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/MethodBreakpoint.java index 41cc35a2d621..c03a89de26ae 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/MethodBreakpoint.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/MethodBreakpoint.java @@ -156,6 +156,9 @@ public class MethodBreakpoint extends BreakpointWithHighlighter allLineLocations = DebuggerUtilsEx.allLineLocations(method); if (!allLineLocations.isEmpty()) { if (isWatchEntry()) {