public void registerJavacFileData()

in sources/java-incremental-compilation/jvm-inc-builder/src/com/intellij/tools/build/bazel/jvmIncBuilder/impl/JavaCompilerRunner.java [189:245]


    public void registerJavacFileData(JavacFileData data) {
      final Set<String> definedClasses = new HashSet<>();
      for (JavacDef def : data.getDefs()) {
        if (def instanceof JavacDef.JavacClassDef) {
          final JavacRef element = def.getDefinedElement();
          if (element instanceof JavacRef.JavacClass) {
            definedClasses.add(element.getName());
          }
        }
      }
      if (definedClasses.isEmpty()) {
        return;
      }

      Set<JavacRef> allRefs = data.getRefs().keySet();
      if (!allRefs.isEmpty()) {
        final Set<String> classImports = new HashSet<>();
        final Set<String> staticImports = new HashSet<>();
        final Map<String, List<CompilerDataSink.ConstantRef>> cRefs = new HashMap<>();

        for (JavacRef ref : allRefs) {
          final JavacRef.ImportProperties importProps = ref.getImportProperties();
          if (importProps != null) { // the reference comes from import list
            if (ref instanceof JavacRef.JavacClass) {
              classImports.add(ref.getName());
              if (importProps.isStatic() && importProps.isOnDemand()) {
                staticImports.add(ref.getName() + ".*");
              }
            }
            else {
              if (ref instanceof JavacRef.JavacField || ref instanceof JavacRef.JavacMethod) {
                staticImports.add(ref.getOwnerName() + "." + ref.getName());
              }
            }
          }
          else if (ref instanceof JavacRef.JavacField fieldRef && ref.getModifiers().contains(Modifier.FINAL)) {
            final String descriptor = fieldRef.getDescriptor();
            if (descriptor != null && definedClasses.contains(fieldRef.getContainingClass()) && !definedClasses.contains(fieldRef.getOwnerName())) {
              cRefs.computeIfAbsent(fieldRef.getContainingClass(), k -> new ArrayList<>()).add(
                CompilerDataSink.ConstantRef.create(fieldRef.getOwnerName(), fieldRef.getName(), descriptor)
              );
            }
          }
        }

        if (!classImports.isEmpty() || !staticImports.isEmpty()) {
          for (String aClass : definedClasses) {
            myOutSink.registerImports(aClass, classImports, staticImports);
          }
        }
        if (!cRefs.isEmpty()) {
          for (String aClass : definedClasses) {
            myOutSink.registerConstantReferences(aClass, cRefs.getOrDefault(aClass, List.of()));
          }
        }
      }
    }