[debugger] IDEA-359016 Fix navigation to Kotlin lambdas

* due to primitive types boxing/unboxing lambda method heuristic search was broken
* now methods from the same class are preferred for the search

GitOrigin-RevId: 59cb85ead6729a98f58107ebd8487237c7ee27e3
This commit is contained in:
Maksim Zuev
2024-09-10 13:03:38 +02:00
committed by intellij-monorepo-bot
parent 29d7e44190
commit 02a58d62f4

View File

@@ -229,6 +229,7 @@ public final class MethodBytecodeUtil {
}
private static Method getFirstCalledMethod(Method method, @NotNull ClassesByNameProvider classesByName) {
Ref<Method> methodInSameClass = Ref.create();
Ref<Method> methodRef = Ref.create();
visit(method, new MethodVisitor(Opcodes.API_VERSION) {
@Override
@@ -238,14 +239,19 @@ public final class MethodBytecodeUtil {
}
ReferenceType declaringType = method.declaringType();
owner = Type.getObjectType(owner).getClassName();
ReferenceType cls = declaringType.name().equals(owner) ?
String declaringTypeName = declaringType.name();
ReferenceType cls = declaringTypeName.equals(owner) ?
declaringType :
ContainerUtil.getFirstItem(classesByName.get(owner));
if (cls != null) {
methodRef.setIfNull(DebuggerUtils.findMethod(cls, name, desc));
if (cls == null) return;
Method targetMethod = DebuggerUtils.findMethod(cls, name, desc);
methodRef.setIfNull(targetMethod);
if (owner.equals(DebuggerUtilsEx.getLambdaBaseClassName(declaringTypeName))) {
methodInSameClass.setIfNull(targetMethod);
}
}
}, false);
if (methodInSameClass.get() != null) return methodInSameClass.get();
return methodRef.get();
}