Inserting comments for all classes generated by jooq

Viewed 120

I need to put a // @formatter:on and // @formatter:off comment on top and bottom of each class generated by jOOQ. I have created a JavaGenerator class as follows:

package ch.acme.backend.server.metamodel

import org.jooq.codegen.JavaGenerator
import org.jooq.codegen.JavaWriter
import org.jooq.meta.ArrayDefinition
import org.jooq.meta.EnumDefinition
import org.jooq.meta.PackageDefinition
import org.jooq.meta.RoutineDefinition
import org.jooq.meta.SchemaDefinition
import org.jooq.meta.TableDefinition
import org.jooq.meta.UDTDefinition

class NoFormatJavaGenerator : JavaGenerator() {

    override fun generateRecordClassJavadoc(table: TableDefinition, out: JavaWriter) {
        out.println("// @formatter:off")
    }

    override fun generateArrayClassJavadoc(arrayDefinition: ArrayDefinition, out: JavaWriter) {
        out.println("// @formatter:off")
    }

    override fun generateDaoClassJavadoc(table: TableDefinition, out: JavaWriter) {
        out.println("// @formatter:off")
    }

    override fun generateEnumClassJavadoc(enum: EnumDefinition, out: JavaWriter) {
        out.println("// @formatter:off")
    }

    override fun generateInterfaceClassJavadoc(table: TableDefinition, out: JavaWriter) {
        out.println("// @formatter:off")
    }

    override fun generatePackageClassJavadoc(pkg: PackageDefinition, out: JavaWriter) {
        out.println("// @formatter:off")
    }

    override fun generatePojoClassJavadoc(table: TableDefinition, out: JavaWriter) {
        out.println("// @formatter:off")
    }

    override fun generateRoutineClassJavadoc(routine: RoutineDefinition, out: JavaWriter) {
        out.println("// @formatter:off")
    }

    override fun generateSchemaClassJavadoc(schema: SchemaDefinition, out: JavaWriter) {
        out.println("// @formatter:off")
    }

    override fun generateTableClassJavadoc(table: TableDefinition, out: JavaWriter) {
        out.println("// @formatter:off")
    }

    override fun generateUDTClassJavadoc(udt: UDTDefinition, out: JavaWriter) {
        out.println("// @formatter:off")
    }

    override fun generateUDTRecordClassJavadoc(udt: UDTDefinition, out: JavaWriter) {
        out.println("// @formatter:off")
    }

    override fun generateRecordClassFooter(table: TableDefinition, out: JavaWriter) {
        out.println("// @formatter:on")
    }

    override fun generateArrayClassFooter(arrayDefinition: ArrayDefinition, out: JavaWriter) {
        out.println("// @formatter:on")
    }


    override fun generateDaoClassFooter(table: TableDefinition, out: JavaWriter) {
        out.println("// @formatter:on")
    }


    override fun generateEnumClassFooter(enum: EnumDefinition, out: JavaWriter) {
        out.println("// @formatter:on")
    }


    override fun generateInterfaceClassFooter(table: TableDefinition, out: JavaWriter) {
        out.println("// @formatter:on")
    }


    override fun generatePackageClassFooter(pkg: PackageDefinition, out: JavaWriter) {
        out.println("// @formatter:on")
    }


    override fun generatePojoClassFooter(table: TableDefinition, out: JavaWriter) {
        out.println("// @formatter:on")
    }


    override fun generateRoutineClassFooter(routine: RoutineDefinition, out: JavaWriter) {
        out.println("// @formatter:on")
    }


    override fun generateSchemaClassFooter(schema: SchemaDefinition, out: JavaWriter) {
        out.println("// @formatter:on")
    }


    override fun generateTableClassFooter(table: TableDefinition, out: JavaWriter) {
        out.println("// @formatter:on")
    }

    override fun generateUDTClassFooter(udt: UDTDefinition, out: JavaWriter) {
        out.println("// @formatter:on")

    }

    override fun generateUDTRecordClassFooter(udt: UDTDefinition, out: JavaWriter) {
        out.println("// @formatter:on")
    }

}

This works for most files, but "DefaultCatalog", "Indexes", "Keys", "Public" and "Tables", are not touched by this. How can I add those too?

1 Answers

Extending JavaGenerator

You could extend the org.jooq.codegen.JavaGenerator.newJavaWriter(File) method and replace the returned implementation by your own extension that prepends and appends these annotations to all of the jOOQ-generated files.

Using a post processor

However, I think it would be much simpler to just post-process all the generated files using something like the com.google.code.maven-replacer-plugin, because your particular addition to the files doesn't really need to know anything about the Java code's internal structure. You can just prepend // @formatter:off at the very beginning, and append // @formatter:on at the very end of each generated *.java file. This will then work also for files that have not been generated by jOOQ, but by some other tool.

Related