public void generate()

in tools/javac/SourceGenerator.java [49:81]


    public void generate(Round round) {
        Set<? extends Element>
                serviceElements = round.getElementsAnnotatedWith(round.annotations.service),
                providedElements = round.getElementsAnnotatedWith(round.annotations.provided);
        Map<String, Set<TypeElement>> extensions = findExtensions(round);

        // Generate JBR class source code.
        List<String> serviceGetters = serviceElements.stream()
                .filter(e -> // Only top-level public interfaces are included.
                        e.getEnclosingElement().getKind() == ElementKind.PACKAGE &&
                        e.getModifiers().contains(Modifier.PUBLIC))
                .map(s -> generateServiceGetter(round, s)).toList();
        List<String> knownExtensions = extensions.entrySet().stream()
                .map(e -> "KNOWN_EXTENSIONS.put(Extensions." + e.getKey() + ", new Class[] {" +
                        e.getValue().stream().map(c -> c.getQualifiedName() + ".class")
                                .collect(Collectors.joining(", ")) + "});").toList();
        String result = replaceTemplate(
                replaceTemplate(jbrTemplate, "/*GENERATED_METHODS*/", serviceGetters, true),
                "/*KNOWN_EXTENSIONS*/", knownExtensions, false)
                .replace("/*KNOWN_PROXIES*/", joinClassNamesToList(providedElements))
                .replace("/*KNOWN_SERVICES*/", joinClassNamesToList(serviceElements));

        // Write generated content.
        try {
            JavaFileObject file = processingEnv.getFiler().createSourceFile("jetbrains.runtime.api/com.jetbrains.JBR",
                    Stream.concat(serviceElements.stream(), providedElements.stream()).toArray(Element[]::new));
            try (Writer w = file.openWriter()) {
                w.write(result);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }