From 243ff9ed95fc686a8524f2dfb0e39d1a15afa46e Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Wed, 30 Apr 2025 10:23:36 +0200 Subject: [PATCH] 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. --- .../scm/annotation/FactoryClassCreator.java | 6 +++++- .../scm/annotation/QueryFieldClassCreator.java | 6 +++++- .../QueryableTypeAnnotationProcessor.java | 16 ++++++++++++++++ .../sonia/scm/testing/AQueryFields.java | 2 ++ .../sonia/scm/testing/AStoreFactory.java | 2 ++ .../sonia/scm/testing/BQueryFields.java | 2 ++ .../sonia/scm/testing/BSubQueryFields.java | 2 ++ .../sonia/scm/testing/CQueryFields.java | 2 ++ .../sonia/scm/testing/DQueryFields.java | 2 ++ .../sonia/scm/testing/EQueryFields.java | 2 ++ .../sonia/scm/testing/FQueryFields.java | 2 ++ .../sonia/scm/testing/GQueryFields.java | 2 ++ .../sonia/scm/testing/HQueryFields.java | 2 ++ .../sonia/scm/testing/IQueryFields.java | 2 ++ .../sonia/scm/testing/KQueryFields.java | 2 ++ .../sonia/scm/testing/LQueryFields.java | 2 ++ .../sonia/scm/testing/MQueryFields.java | 2 ++ .../sonia/scm/testing/NQueryFields.java | 2 ++ .../sonia/scm/testing/OQueryFields.java | 2 ++ .../OneNonModelObjectParentStoreFactory.java | 2 ++ .../sonia/scm/testing/OneParentStoreFactory.java | 2 ++ .../scm/testing/ThreeParentsStoreFactory.java | 3 ++- .../scm/testing/TwoParentsStoreFactory.java | 3 +++ 23 files changed, 67 insertions(+), 3 deletions(-) diff --git a/scm-core-annotation-processor/src/main/java/sonia/scm/annotation/FactoryClassCreator.java b/scm-core-annotation-processor/src/main/java/sonia/scm/annotation/FactoryClassCreator.java index 209632a6a5..2627714d5b 100644 --- a/scm-core-annotation-processor/src/main/java/sonia/scm/annotation/FactoryClassCreator.java +++ b/scm-core-annotation-processor/src/main/java/sonia/scm/annotation/FactoryClassCreator.java @@ -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); diff --git a/scm-core-annotation-processor/src/main/java/sonia/scm/annotation/QueryFieldClassCreator.java b/scm-core-annotation-processor/src/main/java/sonia/scm/annotation/QueryFieldClassCreator.java index d342edba74..cf71fc4c9c 100644 --- a/scm-core-annotation-processor/src/main/java/sonia/scm/annotation/QueryFieldClassCreator.java +++ b/scm-core-annotation-processor/src/main/java/sonia/scm/annotation/QueryFieldClassCreator.java @@ -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); diff --git a/scm-core-annotation-processor/src/main/java/sonia/scm/annotation/QueryableTypeAnnotationProcessor.java b/scm-core-annotation-processor/src/main/java/sonia/scm/annotation/QueryableTypeAnnotationProcessor.java index 5d4827eb15..062e433ea6 100644 --- a/scm-core-annotation-processor/src/main/java/sonia/scm/annotation/QueryableTypeAnnotationProcessor.java +++ b/scm-core-annotation-processor/src/main/java/sonia/scm/annotation/QueryableTypeAnnotationProcessor.java @@ -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 annotations, RoundEnvironment roundEnvironment) { + if (roundEnvironment.processingOver()) { + return false; + } + // Only process elements that actually have the annotation + Set 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 getSupportedOptions() { + return Collections.emptySet(); + } + @SuppressWarnings("UnstableApiUsage") private void tryToCreateQueryFieldClass(Element element) { TypeElement typeElement = MoreElements.asType(element); diff --git a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/AQueryFields.java b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/AQueryFields.java index a7a6b23446..942a148459 100644 --- a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/AQueryFields.java +++ b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/AQueryFields.java @@ -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 INTERNAL_ID = new QueryableStore.IdQueryField<>(); diff --git a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/AStoreFactory.java b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/AStoreFactory.java index dde123472d..72b5813321 100644 --- a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/AStoreFactory.java +++ b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/AStoreFactory.java @@ -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; diff --git a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/BQueryFields.java b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/BQueryFields.java index 416c4694c3..d9b2fd4bcd 100644 --- a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/BQueryFields.java +++ b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/BQueryFields.java @@ -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 INTERNAL_ID = new QueryableStore.IdQueryField<>(); diff --git a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/BSubQueryFields.java b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/BSubQueryFields.java index bded15d0ce..ed70cf0316 100644 --- a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/BSubQueryFields.java +++ b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/BSubQueryFields.java @@ -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 INTERNAL_ID = new QueryableStore.IdQueryField<>(); diff --git a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/CQueryFields.java b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/CQueryFields.java index 46fb9f587e..b1c725e007 100644 --- a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/CQueryFields.java +++ b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/CQueryFields.java @@ -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 INTERNAL_ID = new QueryableStore.IdQueryField<>(); diff --git a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/DQueryFields.java b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/DQueryFields.java index 9e3c282894..0c4a7afd92 100644 --- a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/DQueryFields.java +++ b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/DQueryFields.java @@ -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 INTERNAL_ID = new QueryableStore.IdQueryField<>(); diff --git a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/EQueryFields.java b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/EQueryFields.java index 7c47110145..08caec5b12 100644 --- a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/EQueryFields.java +++ b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/EQueryFields.java @@ -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 INTERNAL_ID = new QueryableStore.IdQueryField<>(); diff --git a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/FQueryFields.java b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/FQueryFields.java index ebbc1396b7..2d5d9a5a74 100644 --- a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/FQueryFields.java +++ b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/FQueryFields.java @@ -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 INTERNAL_ID = new QueryableStore.IdQueryField<>(); diff --git a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/GQueryFields.java b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/GQueryFields.java index 9d777a6164..1dc1ac8abc 100644 --- a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/GQueryFields.java +++ b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/GQueryFields.java @@ -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 INTERNAL_ID = new QueryableStore.IdQueryField<>(); diff --git a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/HQueryFields.java b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/HQueryFields.java index 4390231937..134857a3f8 100644 --- a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/HQueryFields.java +++ b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/HQueryFields.java @@ -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 INTERNAL_ID = new QueryableStore.IdQueryField<>(); diff --git a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/IQueryFields.java b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/IQueryFields.java index 8a287ccbc5..0ff46a5de3 100644 --- a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/IQueryFields.java +++ b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/IQueryFields.java @@ -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 INTERNAL_ID = new QueryableStore.IdQueryField<>(); diff --git a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/KQueryFields.java b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/KQueryFields.java index c0b2675494..b58fde2d6a 100644 --- a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/KQueryFields.java +++ b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/KQueryFields.java @@ -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 REPOSITORY_ID = new QueryableStore.IdQueryField<>(Repository.class); diff --git a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/LQueryFields.java b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/LQueryFields.java index 32a5f41e63..b423ce427b 100644 --- a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/LQueryFields.java +++ b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/LQueryFields.java @@ -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 INTERNAL_ID = new QueryableStore.IdQueryField<>(); diff --git a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/MQueryFields.java b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/MQueryFields.java index bc02997b56..981a96e073 100644 --- a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/MQueryFields.java +++ b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/MQueryFields.java @@ -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 INTERNAL_ID = new QueryableStore.IdQueryField<>(); diff --git a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/NQueryFields.java b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/NQueryFields.java index 7600dcae84..f91642ffe2 100644 --- a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/NQueryFields.java +++ b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/NQueryFields.java @@ -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 INTERNAL_ID = new QueryableStore.IdQueryField<>(); diff --git a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/OQueryFields.java b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/OQueryFields.java index 4f575b470b..54474d85e1 100644 --- a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/OQueryFields.java +++ b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/OQueryFields.java @@ -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 INTERNAL_ID = new QueryableStore.IdQueryField<>(); diff --git a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/OneNonModelObjectParentStoreFactory.java b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/OneNonModelObjectParentStoreFactory.java index da6b4d7d41..4c728cd86a 100644 --- a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/OneNonModelObjectParentStoreFactory.java +++ b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/OneNonModelObjectParentStoreFactory.java @@ -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; diff --git a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/OneParentStoreFactory.java b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/OneParentStoreFactory.java index 0fb795e641..dd12178995 100644 --- a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/OneParentStoreFactory.java +++ b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/OneParentStoreFactory.java @@ -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; diff --git a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/ThreeParentsStoreFactory.java b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/ThreeParentsStoreFactory.java index d4a77cd787..74d81e497d 100644 --- a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/ThreeParentsStoreFactory.java +++ b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/ThreeParentsStoreFactory.java @@ -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; diff --git a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/TwoParentsStoreFactory.java b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/TwoParentsStoreFactory.java index 76c74a8c41..3dfd76dd9f 100644 --- a/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/TwoParentsStoreFactory.java +++ b/scm-core-annotation-processor/src/test/resources/sonia/scm/testing/TwoParentsStoreFactory.java @@ -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;