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