diff --git a/querydsl-codegen/src/main/java/com/querydsl/codegen/GenericExporter.java b/querydsl-codegen/src/main/java/com/querydsl/codegen/GenericExporter.java index 0bafda1fe..75289cc9b 100644 --- a/querydsl-codegen/src/main/java/com/querydsl/codegen/GenericExporter.java +++ b/querydsl-codegen/src/main/java/com/querydsl/codegen/GenericExporter.java @@ -99,6 +99,8 @@ public class GenericExporter { private boolean handleFields = true, handleMethods = true; + private boolean useFieldTypes = false; + @Nullable private File targetFolder; @@ -391,7 +393,7 @@ public class GenericExporter { AnnotatedElement annotated = ReflectionUtils.getAnnotatedElement(cl, field.getName(), field.getType()); Method method = ReflectionUtils.getGetterOrNull(cl, field.getName(), field.getType()); Type propertyType = null; - if (method != null) { + if (method != null && !useFieldTypes) { propertyType = getPropertyType(cl, annotated, method.getReturnType(), method.getGenericReturnType()); } else { propertyType = getPropertyType(cl, annotated, field.getType(), field.getGenericType()); @@ -707,6 +709,15 @@ public class GenericExporter { handleMethods = b; } + /** + * Set whether field types should be used instead of getter return types (default false) + * + * @param b + */ + public void setUseFieldTypes(boolean b) { + useFieldTypes = b; + } + /** * Add a stop class to be used (default Object.class and Enum.class) * diff --git a/querydsl-codegen/src/test/java/com/querydsl/codegen/GenericExporterTest.java b/querydsl-codegen/src/test/java/com/querydsl/codegen/GenericExporterTest.java index 13e3ad559..5ec5968d7 100644 --- a/querydsl-codegen/src/test/java/com/querydsl/codegen/GenericExporterTest.java +++ b/querydsl-codegen/src/test/java/com/querydsl/codegen/GenericExporterTest.java @@ -130,4 +130,17 @@ public class GenericExporterTest { assertTrue(new File("target/gen7/com/querydsl/codegen/sub/QExampleEntity2.java").exists()); } + @Test + public void Export_UseFieldTypes() { + exporter.setTargetFolder(new File("target/gen8")); + exporter.export(getClass().getPackage()); + exporter.setUseFieldTypes(true); + assertTrue(new File("target/gen8/com/querydsl/codegen/QExampleEmbeddable.java").exists()); + assertTrue(new File("target/gen8/com/querydsl/codegen/QExampleEmbedded.java").exists()); + assertTrue(new File("target/gen8/com/querydsl/codegen/QExampleEntity.java").exists()); + assertTrue(new File("target/gen8/com/querydsl/codegen/QExampleEntityInterface.java").exists()); + assertTrue(new File("target/gen8/com/querydsl/codegen/QExampleSupertype.java").exists()); + assertTrue(new File("target/gen8/com/querydsl/codegen/sub/QExampleEntity2.java").exists()); + } + } diff --git a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/AbstractExporterMojo.java b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/AbstractExporterMojo.java index d0d5bca60..9a10094e4 100644 --- a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/AbstractExporterMojo.java +++ b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/AbstractExporterMojo.java @@ -76,6 +76,13 @@ public abstract class AbstractExporterMojo extends AbstractMojo { */ private boolean handleMethods = true; + /** + * switch for usage of field types instead of getter types + * + * @parameter default-value=false + */ + private boolean useFieldTypes = false; + /** * maven project * @@ -154,6 +161,7 @@ public abstract class AbstractExporterMojo extends AbstractMojo { protected void configure(GenericExporter exporter) { exporter.setHandleFields(handleFields); exporter.setHandleMethods(handleMethods); + exporter.setUseFieldTypes(useFieldTypes); } @SuppressWarnings("unchecked") @@ -226,4 +234,8 @@ public abstract class AbstractExporterMojo extends AbstractMojo { public void setHandleMethods(boolean handleMethods) { this.handleMethods = handleMethods; } + + public void setUseFieldTypes(boolean useFieldTypes) { + this.useFieldTypes = useFieldTypes; + } }