From b2bda76ce33537285acec907f87d082bbe43f0e6 Mon Sep 17 00:00:00 2001 From: Vladimir Parfinenko Date: Mon, 19 Feb 2024 19:04:49 +0100 Subject: [PATCH] [debugger] fix method breakpoint for bridge methods, EA-962879 Bridge method might target to abstract/native method. GitOrigin-RevId: cd408645092e08e5549262ba0a4bc15bd5b58c9f --- .../ui/breakpoints/MethodBreakpoint.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) 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 405548ccf5ea..846cf2493904 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 @@ -198,22 +198,21 @@ public class MethodBreakpoint extends BreakpointWithHighlighter base || !m.isAbstract()), debugProcess); boolean found = false; - for (Method method : methods) { + for (Method original : methods) { found = true; + + Method bridgeTarget = MethodBytecodeUtil.getBridgeTargetMethod(original, classesByName); + Method method = bridgeTarget != null ? bridgeTarget : original; + if (method.isNative()) { LOG.info("Breakpoint emulation was disabled because " + method + " is native"); breakpoint.disableEmulation(); return; } - else if (method.isAbstract()) { + if (method.isAbstract()) { continue; } - Method target = MethodBytecodeUtil.getBridgeTargetMethod(method, classesByName); - if (target != null) { - method = target; - } - if (breakpoint.isWatchEntry()) { // We assume that all VMs start code indexes from zero. Location location = new LocationCodeIndexOnly(method, 0); @@ -221,7 +220,6 @@ public class MethodBreakpoint extends BreakpointWithHighlighter= 0; - Location location = new LocationCodeIndexOnly(finalMethod, bytecodeOffset); + Location location = new LocationCodeIndexOnly(method, bytecodeOffset); createLocationBreakpointRequest(breakpoint, location, debugProcess, false); } }