[jOOQ/jOOQ#8353] Log warning when there are unused embeddables

This commit is contained in:
Lukas Eder 2020-08-19 10:44:07 +02:00
parent d8a2b44e96
commit 14c2fac8f0
3 changed files with 53 additions and 8 deletions

View File

@ -72,6 +72,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.Embeddable;
import org.jooq.meta.jaxb.ForcedType;
import org.jooq.meta.jaxb.Generate;
import org.jooq.meta.jaxb.Jdbc;
@ -245,7 +246,7 @@ public class GenerationTool {
}
}
@SuppressWarnings("unchecked")
@SuppressWarnings({ "unchecked", "unused" })
private void run0(Configuration configuration) throws Exception {
if (configuration.getLogging() != null) {
setGlobalLoggingThreshold(configuration);
@ -855,7 +856,7 @@ public class GenerationTool {
generator.generate(database);
if (!database.getUnusedForcedTypes().isEmpty()) {
log.info(
log.warn(
"Unused ForcedTypes",
"There are unused forced types, which have not been used by this generation run.\n"
+ "This can be because of misconfigurations, such as, for example:\n"
@ -866,7 +867,22 @@ public class GenerationTool {
);
for (ForcedType f : database.getUnusedForcedTypes())
log.info("Unused ForcedType", f);
log.warn("Unused ForcedType", f);
}
if (!database.getUnusedEmbeddables().isEmpty()) {
log.warn(
"Unused Embeddables",
"There are unused embeddables, which have not been used by this generation run.\n"
+ "This can be because of misconfigurations, such as, for example:\n"
+ "- case sensitive regular expressions\n"
+ "- regular expressions depending on whitespace (Pattern.COMMENTS is turned on!)\n"
+ "- missing or inadequate object qualification\n"
+ "- the embeddable is obsolete\n"
);
for (Embeddable e : database.getUnusedEmbeddables())
log.warn("Unused Embeddable", e);
}
}
finally {

View File

@ -169,8 +169,9 @@ public abstract class AbstractDatabase implements Database {
private List<CustomType> configuredCustomTypes = new ArrayList<>();
private List<EnumType> configuredEnumTypes = new ArrayList<>();
private List<ForcedType> configuredForcedTypes = new ArrayList<>();
private Set<ForcedType> unusedForcedTypes;
private Set<ForcedType> unusedForcedTypes = new HashSet<>();
private List<Embeddable> configuredEmbeddables = new ArrayList<>();
private Set<Embeddable> unusedEmbeddables = new HashSet<>();
private SchemaVersionProvider schemaVersionProvider;
private CatalogVersionProvider catalogVersionProvider;
private Comparator<Definition> orderProvider;
@ -241,7 +242,6 @@ public abstract class AbstractDatabase implements Database {
all = new ArrayList<>();
included = new ArrayList<>();
excluded = new ArrayList<>();
unusedForcedTypes = new HashSet<>();
orderProvider = new DefaultOrderProvider();
}
@ -1780,9 +1780,24 @@ public abstract class AbstractDatabase implements Database {
);
}
@Override
public final void markUsed(Embeddable embeddable) {
unusedEmbeddables.remove(embeddable);
}
@Override
public final List<Embeddable> getUnusedEmbeddables() {
return new ArrayList<>(unusedEmbeddables);
}
@Override
public final void setConfiguredEmbeddables(List<Embeddable> configuredEmbeddables) {
this.configuredEmbeddables = configuredEmbeddables;
// [#8512] Some implementation of this database may have already
// configured a forced type programmatically, so we must not set the
// list but append it.
getConfiguredEmbeddables().addAll(configuredEmbeddables);
unusedEmbeddables.addAll(configuredEmbeddables);
}
@Override
@ -1912,9 +1927,10 @@ public abstract class AbstractDatabase implements Database {
Name name = table.getQualifiedNamePart().append(embeddable.getName());
if (result.containsKey(name))
if (result.containsKey(name)) {
log.warn("Embeddable configuration", "Table " + table + " already has embeddable " + embeddable);
else
}
else {
result.put(
name,
new DefaultEmbeddableDefinition(
@ -1928,6 +1944,9 @@ public abstract class AbstractDatabase implements Database {
TRUE.equals(embeddable.isReplacesFields())
)
);
markUsed(embeddable);
}
}
}
}

View File

@ -888,6 +888,16 @@ public interface Database extends AutoCloseable {
*/
List<Embeddable> getConfiguredEmbeddables();
/**
* Mark an embeddable as used.
*/
void markUsed(Embeddable embeddable);
/**
* Retrieve the not-yet used embeddables.
*/
List<Embeddable> getUnusedEmbeddables();
/**
* Whether embeddable types for primary keys should be generated.
*/