From 7d772cbab83a6d9e62f808212d409a88a0dfc154 Mon Sep 17 00:00:00 2001 From: lpandzic Date: Mon, 27 Jan 2020 15:08:08 +0100 Subject: [PATCH] opened up apt API for extension --- .../apt/AbstractQuerydslProcessor.java | 26 ++++++++++++++----- .../querydsl/apt/DefaultConfiguration.java | 21 +++++++++++++-- .../com/querydsl/apt/ExtendedTypeFactory.java | 12 ++++++--- .../com/querydsl/apt/TypeElementHandler.java | 2 +- 4 files changed, 47 insertions(+), 14 deletions(-) diff --git a/querydsl-apt/src/main/java/com/querydsl/apt/AbstractQuerydslProcessor.java b/querydsl-apt/src/main/java/com/querydsl/apt/AbstractQuerydslProcessor.java index 54ea1dace..fe9643157 100644 --- a/querydsl-apt/src/main/java/com/querydsl/apt/AbstractQuerydslProcessor.java +++ b/querydsl-apt/src/main/java/com/querydsl/apt/AbstractQuerydslProcessor.java @@ -85,8 +85,8 @@ public abstract class AbstractQuerydslProcessor extends AbstractProcessor { Set> entityAnnotations = conf.getEntityAnnotations(); TypeMappings typeMappings = conf.getTypeMappings(); QueryTypeFactory queryTypeFactory = conf.getQueryTypeFactory(); - this.typeFactory = new ExtendedTypeFactory(processingEnv, entityAnnotations, typeMappings, queryTypeFactory, conf.getVariableNameFunction()); - elementHandler = new TypeElementHandler(conf, typeFactory, typeMappings, queryTypeFactory); + this.typeFactory = createTypeFactory(entityAnnotations, typeMappings, queryTypeFactory); + elementHandler = createElementHandler(typeMappings, queryTypeFactory); this.roundEnv = roundEnv; // process annotations @@ -100,7 +100,16 @@ public abstract class AbstractQuerydslProcessor extends AbstractProcessor { return ALLOW_OTHER_PROCESSORS_TO_CLAIM_ANNOTATIONS; } - private void processAnnotations() { + protected TypeElementHandler createElementHandler(TypeMappings typeMappings, QueryTypeFactory queryTypeFactory) { + return new TypeElementHandler(conf, typeFactory, typeMappings, queryTypeFactory); + } + + protected ExtendedTypeFactory createTypeFactory(Set> entityAnnotations, + TypeMappings typeMappings, QueryTypeFactory queryTypeFactory) { + return new ExtendedTypeFactory(processingEnv, entityAnnotations, typeMappings, queryTypeFactory, conf.getVariableNameFunction()); + } + + protected void processAnnotations() { processExclusions(); Set elements = collectElements(); @@ -120,7 +129,7 @@ public abstract class AbstractQuerydslProcessor extends AbstractProcessor { for (TypeElement element : elements) { EntityType entityType = elementHandler.handleEntityType(element); registerTypeElement(entityType.getFullName(), element); - if (element.getAnnotation(conf.getEntityAnnotation()) != null) { + if (typeFactory.isSimpleTypeEntity(element, conf.getEntityAnnotation())) { context.entityTypes.put(entityType.getFullName(), entityType); } else if (altEntityAnn && element.getAnnotation(conf.getAlternativeEntityAnnotation()) != null) { context.entityTypes.put(entityType.getFullName(), entityType); @@ -567,9 +576,7 @@ public abstract class AbstractQuerydslProcessor extends AbstractProcessor { private void serialize(Serializer serializer, Collection models) { for (EntityType model : models) { try { - Type type = conf.getTypeMappings().getPathType(model, model, true); - String packageName = type.getPackageName(); - String className = !packageName.isEmpty() ? (packageName + "." + type.getSimpleName()) : type.getSimpleName(); + String className = getClassName(model); // skip if type is excluded class or in excluded package if (conf.isExcludedPackage(model.getPackageName()) || conf.isExcludedClass(model.getFullName())) { @@ -610,6 +617,11 @@ public abstract class AbstractQuerydslProcessor extends AbstractProcessor { } } + protected String getClassName(EntityType model) { + Type type = conf.getTypeMappings().getPathType(model, model, true); + String packageName = type.getPackageName(); + return !packageName.isEmpty() ? (packageName + "." + type.getSimpleName()) : type.getSimpleName(); + } protected abstract Configuration createConfiguration(RoundEnvironment roundEnv); diff --git a/querydsl-apt/src/main/java/com/querydsl/apt/DefaultConfiguration.java b/querydsl-apt/src/main/java/com/querydsl/apt/DefaultConfiguration.java index 5b010036e..5168b098e 100644 --- a/querydsl-apt/src/main/java/com/querydsl/apt/DefaultConfiguration.java +++ b/querydsl-apt/src/main/java/com/querydsl/apt/DefaultConfiguration.java @@ -48,7 +48,7 @@ public class DefaultConfiguration implements Configuration { private boolean unknownAsEmbedded; - private final CodegenModule module = new CodegenModule(); + private final CodegenModule module; private final SerializerConfig defaultSerializerConfig; @@ -87,11 +87,28 @@ public class DefaultConfiguration implements Configuration { @Nullable Class superTypeAnn, @Nullable Class embeddableAnn, @Nullable Class embeddedAnn, - @Nullable Class skipAnn) { + @Nullable Class skipAnn + ) { + this(processingEnvironment, roundEnv, keywords, entitiesAnn, entityAnn, superTypeAnn, embeddableAnn, + embeddedAnn, skipAnn, new CodegenModule()); + } + + public DefaultConfiguration( + ProcessingEnvironment processingEnvironment, + RoundEnvironment roundEnv, + Collection keywords, + @Nullable Class entitiesAnn, + Class entityAnn, + @Nullable Class superTypeAnn, + @Nullable Class embeddableAnn, + @Nullable Class embeddedAnn, + @Nullable Class skipAnn, + CodegenModule codegenModule) { this.excludedClasses = new HashSet(); this.excludedPackages = new HashSet(); this.includedClasses = new HashSet(); this.includedPackages = new HashSet(); + module = codegenModule; module.bind(ProcessingEnvironment.class, processingEnvironment); module.bind(RoundEnvironment.class, roundEnv); module.bind(CodegenModule.KEYWORDS, keywords); diff --git a/querydsl-apt/src/main/java/com/querydsl/apt/ExtendedTypeFactory.java b/querydsl-apt/src/main/java/com/querydsl/apt/ExtendedTypeFactory.java index c9e25b8bc..7134f3ca8 100644 --- a/querydsl-apt/src/main/java/com/querydsl/apt/ExtendedTypeFactory.java +++ b/querydsl-apt/src/main/java/com/querydsl/apt/ExtendedTypeFactory.java @@ -34,7 +34,7 @@ import com.querydsl.core.annotations.QueryExclude; * @author tiwe * */ -final class ExtendedTypeFactory { +public class ExtendedTypeFactory { private final Map, Type> typeCache = new HashMap, Type>(); @@ -276,7 +276,7 @@ final class ExtendedTypeFactory { return env.getTypeUtils().erasure(env.getElementUtils().getTypeElement(clazz.getName()).asType()); } - private Type createType(TypeElement typeElement, TypeCategory category, + protected Type createType(TypeElement typeElement, TypeCategory category, List typeArgs, boolean deep) { String name = typeElement.getQualifiedName().toString(); String simpleName = typeElement.getSimpleName().toString(); @@ -354,7 +354,7 @@ final class ExtendedTypeFactory { } else if (typeCategory == TypeCategory.SIMPLE) { for (Class entityAnn : entityAnnotations) { - if (typeElement.getAnnotation(entityAnn) != null) { + if (isSimpleTypeEntity(typeElement, entityAnn)) { typeCategory = TypeCategory.ENTITY; } } @@ -401,7 +401,11 @@ final class ExtendedTypeFactory { return type; } - private Type createMapType(Iterator typeMirrors, boolean deep) { + public boolean isSimpleTypeEntity(TypeElement typeElement, Class entityAnn) { + return typeElement.getAnnotation(entityAnn) != null; + } + + protected Type createMapType(Iterator typeMirrors, boolean deep) { if (!typeMirrors.hasNext()) { return new SimpleType(Types.MAP, defaultType, defaultType); } diff --git a/querydsl-apt/src/main/java/com/querydsl/apt/TypeElementHandler.java b/querydsl-apt/src/main/java/com/querydsl/apt/TypeElementHandler.java index 3cfdc43e2..ba475213e 100644 --- a/querydsl-apt/src/main/java/com/querydsl/apt/TypeElementHandler.java +++ b/querydsl-apt/src/main/java/com/querydsl/apt/TypeElementHandler.java @@ -43,7 +43,7 @@ import com.querydsl.core.util.BeanUtils; * @author tiwe * */ -final class TypeElementHandler { +public class TypeElementHandler { private final TypeMappings typeMappings;