mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[debugger, devkit] IDEA-355621 Search only for loaded class
GitOrigin-RevId: 3034072eab48843f73c6907ec242b3608934e847
This commit is contained in:
committed by
intellij-monorepo-bot
parent
b4921470f5
commit
bf70fac365
@@ -1715,14 +1715,7 @@ public abstract class DebugProcessImpl extends UserDataHolderBase implements Deb
|
||||
ClassLoaderReference classLoader) throws EvaluateException {
|
||||
try {
|
||||
DebuggerManagerThreadImpl.assertIsManagerThread();
|
||||
ReferenceType result;
|
||||
List<ReferenceType> types = ContainerUtil.filter(getCurrentVm(evaluationContext).classesByName(className), ReferenceType::isPrepared);
|
||||
// first try to quickly find the equal classloader only
|
||||
result = ContainerUtil.find(types, refType -> Objects.equals(classLoader, refType.classLoader()));
|
||||
// now do the full visibility check
|
||||
if (result == null && classLoader != null) {
|
||||
result = ContainerUtil.find(types, refType -> isVisibleFromClassLoader(classLoader, refType));
|
||||
}
|
||||
ReferenceType result = findLoadedClass(evaluationContext, className, classLoader);
|
||||
if (result == null && evaluationContext != null) {
|
||||
EvaluationContextImpl evalContext = (EvaluationContextImpl)evaluationContext;
|
||||
if (evalContext.isAutoLoadClasses()) {
|
||||
@@ -1736,6 +1729,19 @@ public abstract class DebugProcessImpl extends UserDataHolderBase implements Deb
|
||||
}
|
||||
}
|
||||
|
||||
public @Nullable ReferenceType findLoadedClass(@Nullable EvaluationContext evaluationContext,
|
||||
String className,
|
||||
ClassLoaderReference classLoader) {
|
||||
List<ReferenceType> types = ContainerUtil.filter(getCurrentVm(evaluationContext).classesByName(className), ReferenceType::isPrepared);
|
||||
// first try to quickly find the equal classloader only
|
||||
ReferenceType result = ContainerUtil.find(types, refType -> Objects.equals(classLoader, refType.classLoader()));
|
||||
// now do the full visibility check
|
||||
if (result == null && classLoader != null) {
|
||||
result = ContainerUtil.find(types, refType -> isVisibleFromClassLoader(classLoader, refType));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private VirtualMachineProxyImpl getCurrentVm(@Nullable EvaluationContext evaluationContext) {
|
||||
return evaluationContext != null
|
||||
? ((SuspendContextImpl)evaluationContext.getSuspendContext()).getVirtualMachineProxy()
|
||||
|
||||
Reference in New Issue
Block a user