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 884b351197..5862b64188 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationTool.java +++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationTool.java @@ -69,6 +69,7 @@ import org.jooq.meta.Definition; import org.jooq.meta.SchemaVersionProvider; import org.jooq.meta.jaxb.CatalogMappingType; import org.jooq.meta.jaxb.Configuration; +import org.jooq.meta.jaxb.ForcedType; import org.jooq.meta.jaxb.Generate; import org.jooq.meta.jaxb.Jdbc; import org.jooq.meta.jaxb.Logging; @@ -803,6 +804,13 @@ public class GenerationTool { generator.generate(database); + + if (!database.getUnusedForcedTypes().isEmpty()) { + log.info("Unused ForcedTypes", "There are unused forced types, which have not been used by this generation run. This can be because of misconfigurations (e.g. bad regular expressions, which do not take into account case sensitivity or object qualification) or because the forced type is obsolete."); + + for (ForcedType f : database.getUnusedForcedTypes()) + log.info("Unused ForcedType", f); + } } finally { if (database != null) diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java index 63aa64a82a..a3d8c83e1b 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java @@ -55,6 +55,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; @@ -154,6 +155,7 @@ public abstract class AbstractDatabase implements Database { private List configuredCustomTypes; private List configuredEnumTypes; private List configuredForcedTypes; + private Set unusedForcedTypes; private List configuredEmbeddables; private SchemaVersionProvider schemaVersionProvider; private CatalogVersionProvider catalogVersionProvider; @@ -223,6 +225,7 @@ public abstract class AbstractDatabase implements Database { all = new ArrayList<>(); included = new ArrayList<>(); excluded = new ArrayList<>(); + unusedForcedTypes = new HashSet<>(); } @Override @@ -1255,6 +1258,16 @@ public abstract class AbstractDatabase implements Database { return null; } + @Override + public void markUsed(ForcedType forcedType) { + unusedForcedTypes.remove(forcedType); + } + + @Override + public List getUnusedForcedTypes() { + return new ArrayList<>(unusedForcedTypes); + } + @Override public final void setConfiguredForcedTypes(List configuredForcedTypes) { @@ -1262,6 +1275,7 @@ public abstract class AbstractDatabase implements Database { // a forced type programmatically, so we must not set the list but // append it. getConfiguredForcedTypes().addAll(configuredForcedTypes); + unusedForcedTypes.addAll(configuredForcedTypes); } @Override diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractTypedElementDefinition.java b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractTypedElementDefinition.java index 5212e4e896..da81dfb57b 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractTypedElementDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractTypedElementDefinition.java @@ -246,6 +246,7 @@ public abstract class AbstractTypedElementDefinition } if (uType != null) { + db.markUsed(forcedType); log.info("Forcing type", child + " to " + forcedType); DataType forcedDataType = null; diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/Database.java b/jOOQ-meta/src/main/java/org/jooq/meta/Database.java index 027ca955fd..e9ac5015f0 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/Database.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/Database.java @@ -798,6 +798,16 @@ public interface Database extends AutoCloseable { */ void setOrderProvider(Comparator provider); + /** + * Mark a forced type as used. + */ + void markUsed(ForcedType forcedType); + + /** + * Retrieve the not-yet used forced types. + */ + List getUnusedForcedTypes(); + /** * Database objects matching any of these field names will be generated as * forced types.