[jOOQ/jOOQ#15554] JavaWriter should have a Mode reference
This commit is contained in:
parent
6bc82eb3ef
commit
0d70664474
@ -52,6 +52,8 @@ import static org.jooq.SQLDialect.MYSQL;
|
||||
import static org.jooq.SQLDialect.POSTGRES;
|
||||
import static org.jooq.SQLDialect.YUGABYTEDB;
|
||||
import static org.jooq.SortOrder.DESC;
|
||||
import static org.jooq.codegen.GeneratorStrategy.Mode.POJO;
|
||||
import static org.jooq.codegen.GeneratorStrategy.Mode.RECORD;
|
||||
import static org.jooq.codegen.Language.JAVA;
|
||||
import static org.jooq.codegen.Language.KOTLIN;
|
||||
import static org.jooq.codegen.Language.SCALA;
|
||||
@ -89,6 +91,7 @@ import java.util.Set;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
@ -1602,14 +1605,14 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
|
||||
|
||||
protected void generateRecord(TableDefinition table) {
|
||||
JavaWriter out = newJavaWriter(getFile(table, Mode.RECORD));
|
||||
JavaWriter out = newJavaWriter(table, Mode.RECORD);
|
||||
log.info("Generating record", out.file().getName());
|
||||
generateRecord0(table, out);
|
||||
closeJavaWriter(out);
|
||||
}
|
||||
|
||||
protected void generateUDTRecord(UDTDefinition udt) {
|
||||
JavaWriter out = newJavaWriter(getFile(udt, Mode.RECORD));
|
||||
JavaWriter out = newJavaWriter(udt, Mode.RECORD);
|
||||
log.info("Generating record", out.file().getName());
|
||||
generateRecord0(udt, out);
|
||||
closeJavaWriter(out);
|
||||
@ -2988,21 +2991,21 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
}
|
||||
|
||||
protected void generateInterface(TableDefinition table) {
|
||||
JavaWriter out = newJavaWriter(getFile(table, Mode.INTERFACE));
|
||||
JavaWriter out = newJavaWriter(table, Mode.INTERFACE);
|
||||
log.info("Generating interface", out.file().getName());
|
||||
generateInterface(table, out);
|
||||
closeJavaWriter(out);
|
||||
}
|
||||
|
||||
protected void generateUDTInterface(UDTDefinition udt) {
|
||||
JavaWriter out = newJavaWriter(getFile(udt, Mode.INTERFACE));
|
||||
JavaWriter out = newJavaWriter(udt, Mode.INTERFACE);
|
||||
log.info("Generating interface", out.file().getName());
|
||||
generateInterface0(udt, out);
|
||||
closeJavaWriter(out);
|
||||
}
|
||||
|
||||
protected void generateEmbeddableInterface(EmbeddableDefinition embeddable) {
|
||||
JavaWriter out = newJavaWriter(getFile(embeddable, Mode.INTERFACE));
|
||||
JavaWriter out = newJavaWriter(embeddable, Mode.INTERFACE);
|
||||
log.info("Generating interface", out.file().getName());
|
||||
generateInterface0(embeddable, out);
|
||||
closeJavaWriter(out);
|
||||
@ -3271,7 +3274,7 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
protected void generateUDT(SchemaDefinition schema, UDTDefinition udt) {
|
||||
JavaWriter out = newJavaWriter(getFile(udt));
|
||||
JavaWriter out = newJavaWriter(udt);
|
||||
out.refConflicts(getStrategy().getJavaIdentifiers(udt.getAttributes()));
|
||||
|
||||
log.info("Generating UDT ", out.file().getName());
|
||||
@ -3440,7 +3443,7 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
protected void generateUDTPath(SchemaDefinition schema, UDTDefinition udt) {
|
||||
JavaWriter out = newJavaWriter(getFile(udt, Mode.PATH));
|
||||
JavaWriter out = newJavaWriter(udt, Mode.PATH);
|
||||
out.refConflicts(getStrategy().getJavaIdentifiers(udt.getAttributes()));
|
||||
|
||||
log.info("Generating UDT Path", out.file().getName());
|
||||
@ -3894,7 +3897,7 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
protected void generateArray(SchemaDefinition schema, ArrayDefinition array) {
|
||||
JavaWriter out = newJavaWriter(getFile(array, Mode.RECORD));
|
||||
JavaWriter out = newJavaWriter(getFile(array, Mode.RECORD), Mode.RECORD);
|
||||
log.info("Generating ARRAY", out.file().getName());
|
||||
generateArray(array, out);
|
||||
closeJavaWriter(out);
|
||||
@ -4063,7 +4066,7 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
getStrategy().setTargetLanguage(language);
|
||||
}
|
||||
|
||||
JavaWriter out = newJavaWriter(getFile(e, Mode.ENUM));
|
||||
JavaWriter out = newJavaWriter(e, Mode.ENUM);
|
||||
log.info("Generating ENUM", out.file().getName());
|
||||
generateEnum(e, out);
|
||||
closeJavaWriter(out);
|
||||
@ -4586,7 +4589,7 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
}
|
||||
|
||||
protected void generateSyntheticDao(DefaultSyntheticDaoDefinition dao) {
|
||||
JavaWriter out = newJavaWriter(getFile(dao, Mode.SYNTHETIC_DAO));
|
||||
JavaWriter out = newJavaWriter(dao, Mode.SYNTHETIC_DAO);
|
||||
log.info("Generating Synthetic DAO", out.file().getName());
|
||||
generateSyntheticDao(dao, out);
|
||||
closeJavaWriter(out);
|
||||
@ -5043,7 +5046,7 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
protected void generateSpringDaoClassFooter(CatalogDefinition catalog, JavaWriter out) {}
|
||||
|
||||
protected void generateDao(TableDefinition table) {
|
||||
JavaWriter out = newJavaWriter(getFile(table, Mode.DAO));
|
||||
JavaWriter out = newJavaWriter(table, Mode.DAO);
|
||||
log.info("Generating DAO", out.file().getName());
|
||||
generateDao(table, out);
|
||||
closeJavaWriter(out);
|
||||
@ -5388,21 +5391,21 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
}
|
||||
|
||||
protected void generatePojo(TableDefinition table) {
|
||||
JavaWriter out = newJavaWriter(getFile(table, Mode.POJO));
|
||||
JavaWriter out = newJavaWriter(table, Mode.POJO);
|
||||
log.info("Generating POJO", out.file().getName());
|
||||
generatePojo(table, out);
|
||||
closeJavaWriter(out);
|
||||
}
|
||||
|
||||
protected void generateEmbeddablePojo(EmbeddableDefinition embeddable) {
|
||||
JavaWriter out = newJavaWriter(getFile(embeddable, Mode.POJO));
|
||||
JavaWriter out = newJavaWriter(embeddable, Mode.POJO);
|
||||
log.info("Generating POJO", out.file().getName());
|
||||
generatePojo0(embeddable, out);
|
||||
closeJavaWriter(out);
|
||||
}
|
||||
|
||||
protected void generateUDTPojo(UDTDefinition udt) {
|
||||
JavaWriter out = newJavaWriter(getFile(udt, Mode.POJO));
|
||||
JavaWriter out = newJavaWriter(udt, Mode.POJO);
|
||||
log.info("Generating POJO", out.file().getName());
|
||||
generatePojo0(udt, out);
|
||||
closeJavaWriter(out);
|
||||
@ -6322,7 +6325,7 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
protected void generateTable(SchemaDefinition schema, TableDefinition table) {
|
||||
JavaWriter out = newJavaWriter(getFile(table));
|
||||
JavaWriter out = newJavaWriter(table);
|
||||
out.refConflicts(getStrategy().getJavaIdentifiers(table.getColumns()));
|
||||
out.refConflicts(getStrategy().getJavaIdentifiers(table.getReferencedEmbeddables()));
|
||||
|
||||
@ -7865,7 +7868,7 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
protected void generateEmbeddable(SchemaDefinition schema, EmbeddableDefinition embeddable) {
|
||||
JavaWriter out = newJavaWriter(getFile(embeddable, Mode.RECORD));
|
||||
JavaWriter out = newJavaWriter(embeddable, Mode.RECORD);
|
||||
log.info("Generating embeddable", out.file().getName());
|
||||
generateRecord0(embeddable, out);
|
||||
closeJavaWriter(out);
|
||||
@ -8419,7 +8422,7 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
}
|
||||
|
||||
protected void generateCatalog(CatalogDefinition catalog) {
|
||||
JavaWriter out = newJavaWriter(getFile(catalog));
|
||||
JavaWriter out = newJavaWriter(catalog);
|
||||
log.info("");
|
||||
log.info("Generating catalog", out.file().getName());
|
||||
log.info("==========================================================");
|
||||
@ -8546,7 +8549,7 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
}
|
||||
|
||||
protected void generateSchema(SchemaDefinition schema) {
|
||||
JavaWriter out = newJavaWriter(getFile(schema));
|
||||
JavaWriter out = newJavaWriter(schema);
|
||||
log.info("Generating schema", out.file().getName());
|
||||
log.info("----------------------------------------------------------");
|
||||
generateSchema(schema, out);
|
||||
@ -9244,7 +9247,7 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
protected void generateRoutine(SchemaDefinition schema, RoutineDefinition routine) {
|
||||
JavaWriter out = newJavaWriter(getFile(routine));
|
||||
JavaWriter out = newJavaWriter(routine);
|
||||
log.info("Generating routine", out.file().getName());
|
||||
|
||||
if (log.isDebugEnabled())
|
||||
@ -10449,6 +10452,27 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
public String ref(Class<?> type) {
|
||||
return out.ref(type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T resolveDefinedType(Supplier<T> supplier) {
|
||||
|
||||
// [#15553] Converter and Binding related imports shouldn't appear here
|
||||
if (ignoreImports(mode) || mode == null && ignoreImports(out.mode())) {
|
||||
try {
|
||||
out.ignoreImports(true);
|
||||
return supplier.get();
|
||||
}
|
||||
finally {
|
||||
out.ignoreImports(false);
|
||||
}
|
||||
}
|
||||
else
|
||||
return supplier.get();
|
||||
}
|
||||
|
||||
private boolean ignoreImports(Mode m) {
|
||||
return m == POJO || m == RECORD;
|
||||
}
|
||||
}
|
||||
|
||||
protected JavaTypeResolver resolver(JavaWriter out) {
|
||||
@ -10968,8 +10992,22 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
|
||||
// [#3880] Users may need to call this method
|
||||
protected JavaWriter newJavaWriter(File file) {
|
||||
return newJavaWriter(file, null);
|
||||
}
|
||||
|
||||
// [#3880] Users may need to call this method
|
||||
protected JavaWriter newJavaWriter(Definition definition) {
|
||||
return newJavaWriter(getFile(definition));
|
||||
}
|
||||
|
||||
// [#3880] Users may need to call this method
|
||||
protected JavaWriter newJavaWriter(Definition definition, Mode mode) {
|
||||
return newJavaWriter(getFile(definition, mode), mode);
|
||||
}
|
||||
|
||||
protected JavaWriter newJavaWriter(File file, Mode mode) {
|
||||
file = fixSuffix(file);
|
||||
JavaWriter result = new JavaWriter(file, generateFullyQualifiedTypes(), targetEncoding, generateJavadoc(), fileCache, generatedSerialVersionUID());
|
||||
JavaWriter result = new JavaWriter(file, generateFullyQualifiedTypes(), targetEncoding, generateJavadoc(), fileCache, generatedSerialVersionUID(), mode);
|
||||
|
||||
if (generateIndentation != null)
|
||||
result.tabString(generateIndentation);
|
||||
|
||||
@ -19,6 +19,7 @@ import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.jooq.codegen.GeneratorStrategy.Mode;
|
||||
import org.jooq.meta.jaxb.GeneratedSerialVersionUID;
|
||||
import org.jooq.tools.StringUtils;
|
||||
|
||||
@ -46,6 +47,8 @@ public class JavaWriter extends GeneratorWriter<JavaWriter> {
|
||||
private final boolean isScala;
|
||||
private final boolean isKotlin;
|
||||
private final GeneratedSerialVersionUID generatedSerialVersionUID;
|
||||
private final Mode mode;
|
||||
private boolean ignoreImports;
|
||||
|
||||
public JavaWriter(File file, String fullyQualifiedTypes) {
|
||||
this(file, fullyQualifiedTypes, null);
|
||||
@ -64,6 +67,10 @@ public class JavaWriter extends GeneratorWriter<JavaWriter> {
|
||||
}
|
||||
|
||||
public JavaWriter(File file, String fullyQualifiedTypes, String encoding, boolean javadoc, Files files, GeneratedSerialVersionUID generatedSerialVersionUID) {
|
||||
this(file, fullyQualifiedTypes, encoding, javadoc, files, generatedSerialVersionUID, null);
|
||||
}
|
||||
|
||||
public JavaWriter(File file, String fullyQualifiedTypes, String encoding, boolean javadoc, Files files, GeneratedSerialVersionUID generatedSerialVersionUID, Mode mode) {
|
||||
super(file, encoding, files);
|
||||
|
||||
this.className = file.getName().replaceAll("\\.(java|scala|kt)$", "");
|
||||
@ -74,6 +81,7 @@ public class JavaWriter extends GeneratorWriter<JavaWriter> {
|
||||
this.fullyQualifiedTypes = fullyQualifiedTypes == null ? null : Pattern.compile(fullyQualifiedTypes);
|
||||
this.javadoc = javadoc;
|
||||
this.generatedSerialVersionUID = generatedSerialVersionUID;
|
||||
this.mode = mode;
|
||||
|
||||
if (isJava || isKotlin)
|
||||
tabString(" ");
|
||||
@ -131,6 +139,10 @@ public class JavaWriter extends GeneratorWriter<JavaWriter> {
|
||||
.replace("\\u002a\\u002f", "\\u002a \\u002f");
|
||||
}
|
||||
|
||||
public Mode mode() {
|
||||
return mode;
|
||||
}
|
||||
|
||||
public JavaWriter header(String header, Object... args) {
|
||||
println();
|
||||
println("// -------------------------------------------------------------------------");
|
||||
@ -261,6 +273,9 @@ public class JavaWriter extends GeneratorWriter<JavaWriter> {
|
||||
|
||||
@Override
|
||||
protected List<String> ref(List<String> clazz, int keepSegments) {
|
||||
if (ignoreImports)
|
||||
return super.ref(clazz, keepSegments);
|
||||
|
||||
List<String> result = new ArrayList<>(clazz == null ? 0 : clazz.size());
|
||||
|
||||
if (clazz != null) {
|
||||
@ -358,4 +373,8 @@ public class JavaWriter extends GeneratorWriter<JavaWriter> {
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
public void ignoreImports(boolean ignoreImports) {
|
||||
this.ignoreImports = ignoreImports;
|
||||
}
|
||||
}
|
||||
|
||||
@ -147,10 +147,7 @@ public abstract class AbstractTypedElementDefinition<T extends Definition>
|
||||
|
||||
@Override
|
||||
public DataTypeDefinition getType(JavaTypeResolver resolver) {
|
||||
if (resolvedType == null)
|
||||
resolvedType = mapDefinedType(container, this, definedType, resolver);
|
||||
|
||||
return resolvedType;
|
||||
return mapDefinedType(container, this, definedType, resolver);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -182,6 +179,10 @@ public abstract class AbstractTypedElementDefinition<T extends Definition>
|
||||
}
|
||||
|
||||
public static final DataTypeDefinition mapDefinedType(Definition container, Definition child, DataTypeDefinition definedType, JavaTypeResolver resolver) {
|
||||
return resolver.resolveDefinedType(() -> mapDefinedType0(container, child, definedType, resolver));
|
||||
}
|
||||
|
||||
static final DataTypeDefinition mapDefinedType0(Definition container, Definition child, DataTypeDefinition definedType, JavaTypeResolver resolver) {
|
||||
DataTypeDefinition result = definedType;
|
||||
Database db = container.getDatabase();
|
||||
|
||||
|
||||
@ -37,6 +37,8 @@
|
||||
*/
|
||||
package org.jooq.meta;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import org.jooq.Name;
|
||||
|
||||
final class DefaultJavaTypeResolver implements JavaTypeResolver {
|
||||
@ -72,4 +74,9 @@ final class DefaultJavaTypeResolver implements JavaTypeResolver {
|
||||
public String constructorCall(String type) {
|
||||
return "new " + type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T resolveDefinedType(Supplier<T> supplier) {
|
||||
return supplier.get();
|
||||
}
|
||||
}
|
||||
@ -37,6 +37,8 @@
|
||||
*/
|
||||
package org.jooq.meta;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import org.jooq.Name;
|
||||
|
||||
/**
|
||||
@ -95,4 +97,10 @@ public interface JavaTypeResolver {
|
||||
* type, if necessary.
|
||||
*/
|
||||
String ref(Class<?> type);
|
||||
|
||||
/**
|
||||
* Map a defined type to a user type, resolving converters and bindings,
|
||||
* which may not need imports in some output modes.
|
||||
*/
|
||||
<T> T resolveDefinedType(Supplier<T> supplier);
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user