mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-10-26 00:56:09 +02:00
Make build with queryable type annotation processor faster
With this, gradle can determine the originating element for the generated query types and the store factories correctly and therefor can run incremental builds when the queryable type annotation processor is added as a dependency.
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
|
||||
package sonia.scm.annotation;
|
||||
|
||||
import com.squareup.javapoet.AnnotationSpec;
|
||||
import com.squareup.javapoet.ClassName;
|
||||
import com.squareup.javapoet.JavaFile;
|
||||
import com.squareup.javapoet.MethodSpec;
|
||||
@@ -26,6 +27,7 @@ import jakarta.inject.Inject;
|
||||
import sonia.scm.ModelObject;
|
||||
import sonia.scm.store.QueryableStoreFactory;
|
||||
|
||||
import javax.annotation.processing.Generated;
|
||||
import javax.annotation.processing.ProcessingEnvironment;
|
||||
import javax.lang.model.element.Element;
|
||||
import javax.lang.model.element.Modifier;
|
||||
@@ -56,7 +58,9 @@ class FactoryClassCreator {
|
||||
TypeSpec
|
||||
.classBuilder(element.getSimpleName() + "StoreFactory")
|
||||
.addModifiers(Modifier.PUBLIC)
|
||||
.addJavadoc("Generated queryable store factory for type {@link $T}.\nTo create conditions in queries, use the static fields in the class {@link $TQueryFields}.\n", typeNameOfDataClass, typeNameOfDataClass);
|
||||
.addAnnotation(AnnotationSpec.builder(Generated.class).addMember("value", "$S", "sonia.scm.annotation.QueryableTypeAnnotationProcessor").build())
|
||||
.addJavadoc("Generated queryable store factory for type {@link $T}.\nTo create conditions in queries, use the static fields in the class {@link $TQueryFields}.\n", typeNameOfDataClass, typeNameOfDataClass)
|
||||
.addOriginatingElement(dataClassTypeElement);
|
||||
|
||||
createStoreFactoryField(builder);
|
||||
createConstructor(builder);
|
||||
|
||||
@@ -18,6 +18,7 @@ package sonia.scm.annotation;
|
||||
|
||||
import com.google.auto.common.MoreElements;
|
||||
import com.google.auto.common.MoreTypes;
|
||||
import com.squareup.javapoet.AnnotationSpec;
|
||||
import com.squareup.javapoet.ClassName;
|
||||
import com.squareup.javapoet.FieldSpec;
|
||||
import com.squareup.javapoet.JavaFile;
|
||||
@@ -28,6 +29,7 @@ import com.squareup.javapoet.TypeSpec;
|
||||
import jakarta.xml.bind.annotation.adapters.XmlAdapter;
|
||||
import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
|
||||
|
||||
import javax.annotation.processing.Generated;
|
||||
import javax.annotation.processing.ProcessingEnvironment;
|
||||
import javax.lang.model.element.AnnotationMirror;
|
||||
import javax.lang.model.element.AnnotationValue;
|
||||
@@ -70,7 +72,9 @@ class QueryFieldClassCreator {
|
||||
TypeSpec
|
||||
.classBuilder(element.getSimpleName() + "QueryFields")
|
||||
.addModifiers(Modifier.PUBLIC, Modifier.FINAL)
|
||||
.addJavadoc("Generated query fields for type {@link $T}.\nTo create a queryable store for this, use an injected instance of the {@link $TStoreFactory}.\n", TypeName.get(typeElement.asType()), TypeName.get(typeElement.asType()));
|
||||
.addAnnotation(AnnotationSpec.builder(Generated.class).addMember("value", "$S", "sonia.scm.annotation.QueryableTypeAnnotationProcessor").build())
|
||||
.addJavadoc("Generated query fields for type {@link $T}.\nTo create a queryable store for this, use an injected instance of the {@link $TStoreFactory}.\n", TypeName.get(typeElement.asType()), TypeName.get(typeElement.asType()))
|
||||
.addOriginatingElement(typeElement);
|
||||
|
||||
createPrivateConstructor(builder);
|
||||
processParents(typeElement, builder);
|
||||
|
||||
@@ -18,6 +18,7 @@ package sonia.scm.annotation;
|
||||
|
||||
import com.google.auto.common.MoreElements;
|
||||
import org.kohsuke.MetaInfServices;
|
||||
import sonia.scm.store.QueryableType;
|
||||
|
||||
import javax.annotation.processing.AbstractProcessor;
|
||||
import javax.annotation.processing.Processor;
|
||||
@@ -29,6 +30,7 @@ import javax.lang.model.element.Element;
|
||||
import javax.lang.model.element.TypeElement;
|
||||
import javax.tools.Diagnostic;
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -42,6 +44,15 @@ public class QueryableTypeAnnotationProcessor extends AbstractProcessor {
|
||||
|
||||
@Override
|
||||
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnvironment) {
|
||||
if (roundEnvironment.processingOver()) {
|
||||
return false;
|
||||
}
|
||||
// Only process elements that actually have the annotation
|
||||
Set<? extends Element> elements = roundEnvironment.getElementsAnnotatedWith(QueryableType.class);
|
||||
if (elements.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (TypeElement annotation : annotations) {
|
||||
log("Found annotation: " + annotation.getQualifiedName());
|
||||
roundEnvironment.getElementsAnnotatedWith(annotation).forEach(element -> {
|
||||
@@ -53,6 +64,11 @@ public class QueryableTypeAnnotationProcessor extends AbstractProcessor {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<String> getSupportedOptions() {
|
||||
return Collections.emptySet();
|
||||
}
|
||||
|
||||
@SuppressWarnings("UnstableApiUsage")
|
||||
private void tryToCreateQueryFieldClass(Element element) {
|
||||
TypeElement typeElement = MoreElements.asType(element);
|
||||
|
||||
@@ -16,8 +16,10 @@
|
||||
|
||||
package sonia.scm.testing;
|
||||
|
||||
import javax.annotation.processing.Generated;
|
||||
import sonia.scm.store.QueryableStore;
|
||||
|
||||
@Generated("sonia.scm.annotation.QueryableTypeAnnotationProcessor")
|
||||
public final class AQueryFields {
|
||||
public static final QueryableStore.IdQueryField<A> INTERNAL_ID =
|
||||
new QueryableStore.IdQueryField<>();
|
||||
|
||||
@@ -17,10 +17,12 @@
|
||||
package sonia.scm.testing;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import javax.annotation.processing.Generated;
|
||||
import sonia.scm.store.QueryableMutableStore;
|
||||
import sonia.scm.store.QueryableStore;
|
||||
import sonia.scm.store.QueryableStoreFactory;
|
||||
|
||||
@Generated("sonia.scm.annotation.QueryableTypeAnnotationProcessor")
|
||||
public class AStoreFactory {
|
||||
|
||||
private final QueryableStoreFactory storeFactory;
|
||||
|
||||
@@ -16,8 +16,10 @@
|
||||
|
||||
package sonia.scm.testing;
|
||||
|
||||
import javax.annotation.processing.Generated;
|
||||
import sonia.scm.store.QueryableStore;
|
||||
|
||||
@Generated("sonia.scm.annotation.QueryableTypeAnnotationProcessor")
|
||||
public final class BQueryFields {
|
||||
public static final QueryableStore.IdQueryField<B> INTERNAL_ID =
|
||||
new QueryableStore.IdQueryField<>();
|
||||
|
||||
@@ -16,8 +16,10 @@
|
||||
|
||||
package sonia.scm.testing;
|
||||
|
||||
import javax.annotation.processing.Generated;
|
||||
import sonia.scm.store.QueryableStore;
|
||||
|
||||
@Generated("sonia.scm.annotation.QueryableTypeAnnotationProcessor")
|
||||
public final class BSubQueryFields {
|
||||
public static final QueryableStore.IdQueryField<BSub> INTERNAL_ID =
|
||||
new QueryableStore.IdQueryField<>();
|
||||
|
||||
@@ -16,8 +16,10 @@
|
||||
|
||||
package sonia.scm.testing;
|
||||
|
||||
import javax.annotation.processing.Generated;
|
||||
import sonia.scm.store.QueryableStore;
|
||||
|
||||
@Generated("sonia.scm.annotation.QueryableTypeAnnotationProcessor")
|
||||
public final class CQueryFields {
|
||||
public static final QueryableStore.IdQueryField<C> INTERNAL_ID =
|
||||
new QueryableStore.IdQueryField<>();
|
||||
|
||||
@@ -16,8 +16,10 @@
|
||||
|
||||
package sonia.scm.testing;
|
||||
|
||||
import javax.annotation.processing.Generated;
|
||||
import sonia.scm.store.QueryableStore;
|
||||
|
||||
@Generated("sonia.scm.annotation.QueryableTypeAnnotationProcessor")
|
||||
public final class DQueryFields {
|
||||
public static final QueryableStore.IdQueryField<D> INTERNAL_ID =
|
||||
new QueryableStore.IdQueryField<>();
|
||||
|
||||
@@ -16,9 +16,11 @@
|
||||
|
||||
package sonia.scm.testing;
|
||||
|
||||
import javax.annotation.processing.Generated;
|
||||
import sonia.scm.Stage;
|
||||
import sonia.scm.store.QueryableStore;
|
||||
|
||||
@Generated("sonia.scm.annotation.QueryableTypeAnnotationProcessor")
|
||||
public final class EQueryFields {
|
||||
public static final QueryableStore.IdQueryField<E> INTERNAL_ID =
|
||||
new QueryableStore.IdQueryField<>();
|
||||
|
||||
@@ -16,8 +16,10 @@
|
||||
|
||||
package sonia.scm.testing;
|
||||
|
||||
import javax.annotation.processing.Generated;
|
||||
import sonia.scm.store.QueryableStore;
|
||||
|
||||
@Generated("sonia.scm.annotation.QueryableTypeAnnotationProcessor")
|
||||
public final class FQueryFields {
|
||||
public static final QueryableStore.IdQueryField<F> INTERNAL_ID =
|
||||
new QueryableStore.IdQueryField<>();
|
||||
|
||||
@@ -16,8 +16,10 @@
|
||||
|
||||
package sonia.scm.testing;
|
||||
|
||||
import javax.annotation.processing.Generated;
|
||||
import sonia.scm.store.QueryableStore;
|
||||
|
||||
@Generated("sonia.scm.annotation.QueryableTypeAnnotationProcessor")
|
||||
public final class GQueryFields {
|
||||
public static final QueryableStore.IdQueryField<G> INTERNAL_ID =
|
||||
new QueryableStore.IdQueryField<>();
|
||||
|
||||
@@ -16,8 +16,10 @@
|
||||
|
||||
package sonia.scm.testing;
|
||||
|
||||
import javax.annotation.processing.Generated;
|
||||
import sonia.scm.store.QueryableStore;
|
||||
|
||||
@Generated("sonia.scm.annotation.QueryableTypeAnnotationProcessor")
|
||||
public final class HQueryFields {
|
||||
public static final QueryableStore.IdQueryField<H> INTERNAL_ID =
|
||||
new QueryableStore.IdQueryField<>();
|
||||
|
||||
@@ -16,8 +16,10 @@
|
||||
|
||||
package sonia.scm.testing;
|
||||
|
||||
import javax.annotation.processing.Generated;
|
||||
import sonia.scm.store.QueryableStore;
|
||||
|
||||
@Generated("sonia.scm.annotation.QueryableTypeAnnotationProcessor")
|
||||
public final class IQueryFields {
|
||||
public static final QueryableStore.IdQueryField<I> INTERNAL_ID =
|
||||
new QueryableStore.IdQueryField<>();
|
||||
|
||||
@@ -16,9 +16,11 @@
|
||||
|
||||
package sonia.scm.testing;
|
||||
|
||||
import javax.annotation.processing.Generated;
|
||||
import sonia.scm.repository.Repository;
|
||||
import sonia.scm.store.QueryableStore;
|
||||
|
||||
@Generated("sonia.scm.annotation.QueryableTypeAnnotationProcessor")
|
||||
public final class KQueryFields {
|
||||
public static final QueryableStore.IdQueryField<K> REPOSITORY_ID =
|
||||
new QueryableStore.IdQueryField<>(Repository.class);
|
||||
|
||||
@@ -16,8 +16,10 @@
|
||||
|
||||
package sonia.scm.testing;
|
||||
|
||||
import javax.annotation.processing.Generated;
|
||||
import sonia.scm.store.QueryableStore;
|
||||
|
||||
@Generated("sonia.scm.annotation.QueryableTypeAnnotationProcessor")
|
||||
public final class LQueryFields {
|
||||
public static final QueryableStore.IdQueryField<L> INTERNAL_ID =
|
||||
new QueryableStore.IdQueryField<>();
|
||||
|
||||
@@ -16,8 +16,10 @@
|
||||
|
||||
package sonia.scm.testing;
|
||||
|
||||
import javax.annotation.processing.Generated;
|
||||
import sonia.scm.store.QueryableStore;
|
||||
|
||||
@Generated("sonia.scm.annotation.QueryableTypeAnnotationProcessor")
|
||||
public final class MQueryFields {
|
||||
public static final QueryableStore.IdQueryField<M> INTERNAL_ID =
|
||||
new QueryableStore.IdQueryField<>();
|
||||
|
||||
@@ -16,8 +16,10 @@
|
||||
|
||||
package sonia.scm.testing;
|
||||
|
||||
import javax.annotation.processing.Generated;
|
||||
import sonia.scm.store.QueryableStore;
|
||||
|
||||
@Generated("sonia.scm.annotation.QueryableTypeAnnotationProcessor")
|
||||
public final class NQueryFields {
|
||||
public static final QueryableStore.IdQueryField<N> INTERNAL_ID =
|
||||
new QueryableStore.IdQueryField<>();
|
||||
|
||||
@@ -16,8 +16,10 @@
|
||||
|
||||
package sonia.scm.testing;
|
||||
|
||||
import javax.annotation.processing.Generated;
|
||||
import sonia.scm.store.QueryableStore;
|
||||
|
||||
@Generated("sonia.scm.annotation.QueryableTypeAnnotationProcessor")
|
||||
public final class OQueryFields {
|
||||
public static final QueryableStore.IdQueryField<O> INTERNAL_ID =
|
||||
new QueryableStore.IdQueryField<>();
|
||||
|
||||
@@ -18,10 +18,12 @@ package sonia.scm.testing;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import java.lang.String;
|
||||
import javax.annotation.processing.Generated;
|
||||
import sonia.scm.store.QueryableMutableStore;
|
||||
import sonia.scm.store.QueryableStore;
|
||||
import sonia.scm.store.QueryableStoreFactory;
|
||||
|
||||
@Generated("sonia.scm.annotation.QueryableTypeAnnotationProcessor")
|
||||
public class OneNonModelObjectParentStoreFactory {
|
||||
|
||||
private final QueryableStoreFactory storeFactory;
|
||||
|
||||
@@ -18,11 +18,13 @@ package sonia.scm.testing;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import java.lang.String;
|
||||
import javax.annotation.processing.Generated;
|
||||
import sonia.scm.repository.Repository;
|
||||
import sonia.scm.store.QueryableMutableStore;
|
||||
import sonia.scm.store.QueryableStore;
|
||||
import sonia.scm.store.QueryableStoreFactory;
|
||||
|
||||
@Generated("sonia.scm.annotation.QueryableTypeAnnotationProcessor")
|
||||
public class OneParentStoreFactory {
|
||||
|
||||
private final QueryableStoreFactory storeFactory;
|
||||
|
||||
@@ -18,7 +18,7 @@ package sonia.scm.testing;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import java.lang.String;
|
||||
|
||||
import javax.annotation.processing.Generated;
|
||||
import sonia.scm.group.Group;
|
||||
import sonia.scm.repository.Repository;
|
||||
import sonia.scm.store.QueryableMutableStore;
|
||||
@@ -26,6 +26,7 @@ import sonia.scm.store.QueryableStore;
|
||||
import sonia.scm.store.QueryableStoreFactory;
|
||||
import sonia.scm.user.User;
|
||||
|
||||
@Generated("sonia.scm.annotation.QueryableTypeAnnotationProcessor")
|
||||
public class ThreeParentsStoreFactory {
|
||||
|
||||
private final QueryableStoreFactory storeFactory;
|
||||
|
||||
@@ -18,12 +18,15 @@ package sonia.scm.testing;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import java.lang.String;
|
||||
import javax.annotation.processing.Generated;
|
||||
import sonia.scm.repository.Repository;
|
||||
import sonia.scm.store.QueryableMutableStore;
|
||||
import sonia.scm.store.QueryableStore;
|
||||
import sonia.scm.store.QueryableStoreFactory;
|
||||
import sonia.scm.user.User;
|
||||
|
||||
|
||||
@Generated("sonia.scm.annotation.QueryableTypeAnnotationProcessor")
|
||||
public class TwoParentsStoreFactory {
|
||||
|
||||
private final QueryableStoreFactory storeFactory;
|
||||
|
||||
Reference in New Issue
Block a user