private static void transformCollectionClassIfNeeded()

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();
    }
  }