in src/main/java/com/intellij/rt/debugger/agent/CollectionBreakpointInstrumentor.java [413:444]
private static void transformCollectionClassIfNeeded(Class<?> cls) {
try {
myTransformLock.lock();
String qualifiedClassName = getInternalClsName(cls);
if (myCollectionsToTransform.containsKey(qualifiedClassName)) {
return;
}
List<Class<?>> allSupers = getSuperClassesAndInterfaces(cls);
Set<String> allSupersNames = getClassesNames(allSupers);
for (Class<?> loadedCls : ourInstrumentation.getAllLoadedClasses()) {
if (allSupersNames.contains(loadedCls.getName())) {
try {
myCollectionsToTransform.put(getInternalClsName(loadedCls), getAllKnownMethods(loadedCls, allSupers));
ourInstrumentation.retransformClasses(loadedCls);
}
catch (UnmodifiableClassException e) {
e.printStackTrace();
}
}
}
transformCollectionNestedMembers();
}
catch (Exception e) {
e.printStackTrace();
}
finally {
myTransformLock.unlock();
}
}