JavaFiler.java

/*
 * SPDX-FileCopyrightText: 2025 kaumei.io
 * SPDX-License-Identifier: Apache-2.0
 */
package io.kaumei.jdbc.anno.ctx;

import com.palantir.javapoet.JavaFile;
import com.palantir.javapoet.TypeSpec;
import io.kaumei.jdbc.anno.Processor;

import javax.annotation.processing.Filer;
import javax.lang.model.element.TypeElement;
import java.io.IOException;

import static java.util.Objects.requireNonNull;

public final class JavaFiler {
    // ----- service
    private final JavaMessenger logger;
    private final Filer filer;

    public JavaFiler(Context ctx, Filer filer) {
        this.logger = requireNonNull(ctx.logger);
        this.filer = requireNonNull(filer);
    }

    // ------------------------------------------------------------------------

    public void writeJava(TypeElement elem, String packageName, TypeSpec typeSpec) {
        JavaFile javaFile = JavaFile.builder(packageName, typeSpec)
                .addFileComment(Processor.FILE_COMMENT)
                .indent("    ")
                .build();
        try {
            javaFile.writeTo(this.filer);
        } catch (IOException e) { // sanity-check
            this.logger.error(elem, "Failed to write generated file: " + javaFile.toJavaFileObject().getName()); // sanity-check
        }
    }
}