@Override
      public void associate(String classFileName, Collection<String> sources, ClassReader cr, boolean isGenerated) {
        synchronized (myLock) {
          final int classFileNameS = myContext.get(classFileName);
          final ClassFileRepr result = new ClassfileAnalyzer(myContext).analyze(classFileNameS, cr, isGenerated);
          if (result != null) {
            // since java9 'repr' can represent either a class or a compiled module-info.java
            final int className = result.name;

            if (result instanceof ClassRepr) {
              final ClassRepr classRepr = (ClassRepr)result;
              final String classNameStr = myContext.getValue(className);
              if (addConstantUsages(classRepr, myConstantRefs.remove(classNameStr))) {
                // Important: should register constants before imports, because imports can produce additional
                // field references too and addConstantUsages may return false in this case
                classRepr.setHasInlinedConstants(true);
              }
              final Pair<Collection<String>, Collection<String>> imports = myImportRefs.remove(classNameStr);
              if (imports != null) {
                addImportUsages(classRepr, imports.getFirst(), imports.getSecond());
              }
            }

            for (String sourceFileName : sources) {
              String relative = myRelativizer.toRelative(sourceFileName);
              myClassToRelativeSourceFilePath.put(className, relative);
              myRelativeSourceFilePathToClasses.put(relative, result);
            }

            if (result instanceof ClassRepr) {
              for (final TypeRepr.ClassType s : ((ClassRepr)result).getSuperTypes()) {
                myClassToSubclasses.put(s.className, className);
              }
            }

            for (final UsageRepr.Usage u : result.getUsages()) {
              final int owner = u.getOwner();
              if (owner != className) {
                myClassToClassDependency.put(owner, className);
              }
            }
          }
        }
      }
@Override
      public void associate(String classFileName, Collection<String> sources, ClassReader cr, boolean isGenerated)