private synchronized ClassReader getOrLoadClassReader()

in util/src/com/intellij/rt/coverage/instrumentation/ClassWriterImpl.java [129:154]


  private synchronized ClassReader getOrLoadClassReader(String className) throws IOException {
    Map<String, ClassReader> loaderClassReaders = myClassReaders.get(myClassLoader);
    if (loaderClassReaders == null) {
      myClassReaders.put(myClassLoader, loaderClassReaders = new HashMap<String, ClassReader>());
    }
    ClassReader classReader = loaderClassReaders.get(className);
    if (classReader == null) {
      InputStream is = null;
      try {
        String resource = className + ".class";
        if (myClassLoader != null) {
          is = myClassLoader.getResourceAsStream(resource);
        }
        if (is == null) {
          is = ClassLoader.getSystemResourceAsStream(resource);
        }
        if (is == null) {
          throw new FrameComputationClassNotFoundException("Class " + className + " not found");
        }
        loaderClassReaders.put(className, classReader = new ClassReader(is));
      } finally {
        CoverageIOUtil.close(is);
      }
    }
    return classReader;
  }