From 18530b2b120729c72d8e85617c96157288c27216 Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Tue, 8 Nov 2016 15:58:27 +0300 Subject: [PATCH] check method signature in lambdas and bridge methods --- .../intellij/debugger/jdi/MethodBytecodeUtil.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) 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 d490f072182f..965695595e81 100644 --- a/java/debugger/impl/src/com/intellij/debugger/jdi/MethodBytecodeUtil.java +++ b/java/debugger/impl/src/com/intellij/debugger/jdi/MethodBytecodeUtil.java @@ -242,7 +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) { - cls.methodsByName(name).stream().findFirst().ifPresent(methodRef::set); + cls.methodsByName(name, desc).stream().findFirst().ifPresent(methodRef::set); } } }); @@ -258,9 +258,16 @@ public class MethodBytecodeUtil { 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)); + ReferenceType declaringType = method.declaringType(); + ReferenceType cls = null; + if (declaringType.name().equals(owner.replace("/", "."))) { + cls = declaringType; + } + else if (!"java/lang/AbstractMethodError".equals(owner)) { + cls = ContainerUtil.getFirstItem(method.virtualMachine().classesByName(owner)); + } if (cls != null) { - StreamEx.of(cls.methodsByName(name)).without(method).findFirst().ifPresent(methodRef::set); + StreamEx.of(cls.methodsByName(name, desc)).findFirst().ifPresent(methodRef::set); } } });