diff --git a/jOOQ-codegen-maven/src/main/java/org/jooq/codegen/maven/Plugin.java b/jOOQ-codegen-maven/src/main/java/org/jooq/codegen/maven/Plugin.java index 0c52b2f219..dc4f59d270 100644 --- a/jOOQ-codegen-maven/src/main/java/org/jooq/codegen/maven/Plugin.java +++ b/jOOQ-codegen-maven/src/main/java/org/jooq/codegen/maven/Plugin.java @@ -137,6 +137,14 @@ public class Plugin extends AbstractMojo { ) private org.jooq.meta.jaxb.OnError onError; + /** + * The on-unused behavior. + */ + @Parameter( + property = "jooq.codegen.onUnused" + ) + private org.jooq.meta.jaxb.OnError onUnused; + /** * The jdbc settings. */ @@ -197,6 +205,7 @@ public class Plugin extends AbstractMojo { Configuration configuration = new Configuration(); configuration.setLogging(logging); configuration.setOnError(onError); + configuration.setOnUnused(onUnused); configuration.setJdbc(jdbc); configuration.setGenerator(generator); configuration.setBasedir(actualBasedir); @@ -239,6 +248,7 @@ public class Plugin extends AbstractMojo { Configuration configuration = GenerationTool.load(in); logging = MiniJAXB.append(logging, configuration.getLogging()); onError = MiniJAXB.append(onError, configuration.getOnError()); + onUnused = MiniJAXB.append(onUnused, configuration.getOnUnused()); jdbc = MiniJAXB.append(jdbc, configuration.getJdbc()); generator = MiniJAXB.append(generator, configuration.getGenerator()); } diff --git a/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationTool.java b/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationTool.java index b50e1a6341..846a950168 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationTool.java +++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationTool.java @@ -937,17 +937,24 @@ public class GenerationTool { verifyVersions(); generator.generate(database); - logUnused("forced type", "forced types", database.getUnusedForcedTypes()); - logUnused("embeddable", "embeddables", database.getUnusedEmbeddables()); - logUnused("comment", "comments", database.getUnusedComments()); - logUnused("synthetic column", "synthetic columns", database.getUnusedSyntheticColumns()); - logUnused("synthetic readonly column", "synthetic readonly columns", database.getUnusedSyntheticReadonlyColumns()); - logUnused("synthetic readonly rowid", "synthetic readonly rowids", database.getUnusedSyntheticReadonlyRowids()); - logUnused("synthetic identity", "synthetic identities", database.getUnusedSyntheticIdentities()); - logUnused("synthetic primary key", "synthetic primary keys", database.getUnusedSyntheticPrimaryKeys()); - logUnused("synthetic unique key", "synthetic unique keys", database.getUnusedSyntheticUniqueKeys()); - logUnused("synthetic foreign key", "synthetic foreign keys", database.getUnusedSyntheticForeignKeys()); - logUnused("synthetic view", "synthetic views", database.getUnusedSyntheticViews()); + if (configuration.getOnUnused() != OnError.SILENT) { + boolean anyUnused = false; + + anyUnused = anyUnused | logUnused("forced type", "forced types", database.getUnusedForcedTypes()); + anyUnused = anyUnused | logUnused("embeddable", "embeddables", database.getUnusedEmbeddables()); + anyUnused = anyUnused | logUnused("comment", "comments", database.getUnusedComments()); + anyUnused = anyUnused | logUnused("synthetic column", "synthetic columns", database.getUnusedSyntheticColumns()); + anyUnused = anyUnused | logUnused("synthetic readonly column", "synthetic readonly columns", database.getUnusedSyntheticReadonlyColumns()); + anyUnused = anyUnused | logUnused("synthetic readonly rowid", "synthetic readonly rowids", database.getUnusedSyntheticReadonlyRowids()); + anyUnused = anyUnused | logUnused("synthetic identity", "synthetic identities", database.getUnusedSyntheticIdentities()); + anyUnused = anyUnused | logUnused("synthetic primary key", "synthetic primary keys", database.getUnusedSyntheticPrimaryKeys()); + anyUnused = anyUnused | logUnused("synthetic unique key", "synthetic unique keys", database.getUnusedSyntheticUniqueKeys()); + anyUnused = anyUnused | logUnused("synthetic foreign key", "synthetic foreign keys", database.getUnusedSyntheticForeignKeys()); + anyUnused = anyUnused | logUnused("synthetic view", "synthetic views", database.getUnusedSyntheticViews()); + + if (anyUnused && configuration.getOnUnused() == OnError.FAIL) + throw new GeneratorException("Unused configuration elements encountered"); + } } finally { if (database != null) @@ -1012,7 +1019,7 @@ public class GenerationTool { } } - private void logUnused(String objectType, String objectTypes, List list) { + private boolean logUnused(String objectType, String objectTypes, List list) { if (!list.isEmpty() && Boolean.parseBoolean(System.getProperty("jooq.codegen.logunused", "true"))) { unusedLogger.warn( "Unused " + objectTypes, @@ -1027,7 +1034,11 @@ public class GenerationTool { for (Object o : list) unusedLogger.warn("Unused " + objectType, o); + + return true; } + else + return false; } private static void setGlobalLoggingThreshold(Configuration configuration) { diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/jaxb/Configuration.java b/jOOQ-meta/src/main/java/org/jooq/meta/jaxb/Configuration.java index 22f7f20f5a..b633e007fb 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/jaxb/Configuration.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/jaxb/Configuration.java @@ -26,6 +26,7 @@ import org.jooq.util.jaxb.tools.XMLBuilder; * <all> * <element name="logging" type="{http://www.jooq.org/xsd/jooq-codegen-3.17.0.xsd}Logging" minOccurs="0"/> * <element name="onError" type="{http://www.jooq.org/xsd/jooq-codegen-3.17.0.xsd}OnError" minOccurs="0"/> + * <element name="onUnused" type="{http://www.jooq.org/xsd/jooq-codegen-3.17.0.xsd}OnError" minOccurs="0"/> * <element name="jdbc" type="{http://www.jooq.org/xsd/jooq-codegen-3.17.0.xsd}Jdbc" minOccurs="0"/> * <element name="generator" type="{http://www.jooq.org/xsd/jooq-codegen-3.17.0.xsd}Generator"/> * <element name="basedir" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> @@ -54,6 +55,9 @@ public class Configuration implements Serializable, XMLAppendable @XmlElement(defaultValue = "FAIL") @XmlSchemaType(name = "string") protected OnError onError = OnError.FAIL; + @XmlElement(defaultValue = "LOG") + @XmlSchemaType(name = "string") + protected OnError onUnused = OnError.LOG; protected Jdbc jdbc; @XmlElement(required = true) protected Generator generator; @@ -92,6 +96,22 @@ public class Configuration implements Serializable, XMLAppendable this.onError = value; } + /** + * The action to be taken by the generator as the consequence of unused objects being encountered. Defaults to LOG. + * + */ + public OnError getOnUnused() { + return onUnused; + } + + /** + * The action to be taken by the generator as the consequence of unused objects being encountered. Defaults to LOG. + * + */ + public void setOnUnused(OnError value) { + this.onUnused = value; + } + /** * The JDBC configuration element contains information about how to set up the database connection used for source code generation. * @@ -158,6 +178,15 @@ public class Configuration implements Serializable, XMLAppendable return this; } + /** + * The action to be taken by the generator as the consequence of unused objects being encountered. Defaults to LOG. + * + */ + public Configuration withOnUnused(OnError value) { + setOnUnused(value); + return this; + } + /** * The JDBC configuration element contains information about how to set up the database connection used for source code generation. * @@ -189,6 +218,7 @@ public class Configuration implements Serializable, XMLAppendable public final void appendTo(XMLBuilder builder) { builder.append("logging", logging); builder.append("onError", onError); + builder.append("onUnused", onUnused); builder.append("jdbc", jdbc); builder.append("generator", generator); builder.append("basedir", basedir); @@ -231,6 +261,15 @@ public class Configuration implements Serializable, XMLAppendable return false; } } + if (onUnused == null) { + if (other.onUnused!= null) { + return false; + } + } else { + if (!onUnused.equals(other.onUnused)) { + return false; + } + } if (jdbc == null) { if (other.jdbc!= null) { return false; @@ -267,6 +306,7 @@ public class Configuration implements Serializable, XMLAppendable int result = 1; result = ((prime*result)+((logging == null)? 0 :logging.hashCode())); result = ((prime*result)+((onError == null)? 0 :onError.hashCode())); + result = ((prime*result)+((onUnused == null)? 0 :onUnused.hashCode())); result = ((prime*result)+((jdbc == null)? 0 :jdbc.hashCode())); result = ((prime*result)+((generator == null)? 0 :generator.hashCode())); result = ((prime*result)+((basedir == null)? 0 :basedir.hashCode())); diff --git a/jOOQ-meta/src/main/resources/org/jooq/meta/xsd/jooq-codegen-3.17.0.xsd b/jOOQ-meta/src/main/resources/org/jooq/meta/xsd/jooq-codegen-3.17.0.xsd index 50c9039d18..3d88d443d4 100644 --- a/jOOQ-meta/src/main/resources/org/jooq/meta/xsd/jooq-codegen-3.17.0.xsd +++ b/jOOQ-meta/src/main/resources/org/jooq/meta/xsd/jooq-codegen-3.17.0.xsd @@ -19,6 +19,10 @@ + + + +