mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-15 02:59:33 +07:00
[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:
committed by
intellij-monorepo-bot
parent
29d7e44190
commit
02a58d62f4
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user