From ca8b36f4e47fcd71429cd0f2703ab698f6aee3ef Mon Sep 17 00:00:00 2001 From: Siphalor Date: Sun, 2 Nov 2025 10:40:47 +0100 Subject: [PATCH] refactor(pojo-weaver): Move Tweed extension declarations in Weaving to own, inheritable, annotations --- .../testmod/TweedCoatBridgeTestModConfig.java | 24 ++---------- .../fabric-helper/build.gradle.kts | 5 +++ .../api/DefaultTweedMinecraftWeaving.java | 38 +++++++++++++++++++ .../fabric/helper/testmod/TestModConfig.java | 24 ++---------- .../AttributesPojoWeavingProcessorTest.java | 8 ++-- .../ReadWritePojoWeavingProcessorTest.java | 8 ++-- ...AutoReadWritePojoWeavingProcessorTest.java | 8 ++-- ...ableReadWritePojoWeavingProcessorTest.java | 9 ++--- .../ValidatorsPojoWeavingProcessorTest.java | 8 ++-- .../pojo/api/annotation/PojoWeaving.java | 6 --- .../pojo/api/annotation/TweedExtension.java | 10 +++++ .../pojo/api/annotation/TweedExtensions.java | 12 ++++++ .../weaving/TweedPojoWeaverBootstrapper.java | 7 +++- .../TweedPojoWeaverBootstrapperTest.java | 11 ++---- 14 files changed, 97 insertions(+), 81 deletions(-) create mode 100644 tweed5-minecraft/fabric-helper/src/main/java/de/siphalor/tweed5/fabric/helper/api/DefaultTweedMinecraftWeaving.java create mode 100644 tweed5/weaver-pojo/src/main/java/de/siphalor/tweed5/weaver/pojo/api/annotation/TweedExtension.java create mode 100644 tweed5/weaver-pojo/src/main/java/de/siphalor/tweed5/weaver/pojo/api/annotation/TweedExtensions.java diff --git a/tweed5-minecraft/coat-bridge/src/testmod/java/de/siphalor/tweed5/coat/bridge/testmod/TweedCoatBridgeTestModConfig.java b/tweed5-minecraft/coat-bridge/src/testmod/java/de/siphalor/tweed5/coat/bridge/testmod/TweedCoatBridgeTestModConfig.java index 1ef03db..7f47b8d 100644 --- a/tweed5-minecraft/coat-bridge/src/testmod/java/de/siphalor/tweed5/coat/bridge/testmod/TweedCoatBridgeTestModConfig.java +++ b/tweed5-minecraft/coat-bridge/src/testmod/java/de/siphalor/tweed5/coat/bridge/testmod/TweedCoatBridgeTestModConfig.java @@ -1,36 +1,18 @@ package de.siphalor.tweed5.coat.bridge.testmod; -import de.siphalor.tweed5.attributesextension.api.AttributesExtension; import de.siphalor.tweed5.coat.bridge.api.TweedCoatAttributes; -import de.siphalor.tweed5.coat.bridge.api.TweedCoatBridgeExtension; -import de.siphalor.tweed5.data.extension.api.ReadWriteExtension; -import de.siphalor.tweed5.defaultextensions.validation.api.ValidationExtension; +import de.siphalor.tweed5.fabric.helper.api.DefaultTweedMinecraftWeaving; import de.siphalor.tweed5.weaver.pojo.api.annotation.CompoundWeaving; -import de.siphalor.tweed5.weaver.pojo.api.annotation.DefaultWeavingExtensions; import de.siphalor.tweed5.weaver.pojo.api.annotation.PojoWeaving; -import de.siphalor.tweed5.weaver.pojo.api.annotation.PojoWeavingExtension; import de.siphalor.tweed5.weaver.pojoext.attributes.api.Attribute; -import de.siphalor.tweed5.weaver.pojoext.attributes.api.AttributesPojoWeavingProcessor; -import de.siphalor.tweed5.weaver.pojoext.serde.api.auto.AutoReadWritePojoWeavingProcessor; -import de.siphalor.tweed5.weaver.pojoext.serde.api.auto.DefaultReadWriteMappings; import de.siphalor.tweed5.weaver.pojoext.validation.api.Validator; -import de.siphalor.tweed5.weaver.pojoext.validation.api.ValidatorsPojoWeavingProcessor; import de.siphalor.tweed5.weaver.pojoext.validation.api.validators.WeavableNumberRangeValidator; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -@PojoWeaving(extensions = { - ReadWriteExtension.class, - TweedCoatBridgeExtension.class, - ValidationExtension.class, - AttributesExtension.class, -}) -@PojoWeavingExtension(AutoReadWritePojoWeavingProcessor.class) -@PojoWeavingExtension(ValidatorsPojoWeavingProcessor.class) -@PojoWeavingExtension(AttributesPojoWeavingProcessor.class) -@DefaultWeavingExtensions -@DefaultReadWriteMappings +@PojoWeaving +@DefaultTweedMinecraftWeaving @CompoundWeaving(namingFormat = "kebab_case") @Data public class TweedCoatBridgeTestModConfig { diff --git a/tweed5-minecraft/fabric-helper/build.gradle.kts b/tweed5-minecraft/fabric-helper/build.gradle.kts index d0676dc..fa1d01a 100644 --- a/tweed5-minecraft/fabric-helper/build.gradle.kts +++ b/tweed5-minecraft/fabric-helper/build.gradle.kts @@ -10,6 +10,11 @@ dependencies { compileOnly("de.siphalor.tweed5:tweed5-default-extensions") compileOnly("de.siphalor.tweed5:tweed5-serde-extension") compileOnly("de.siphalor.tweed5:tweed5-serde-gson") + compileOnly("de.siphalor.tweed5:tweed5-weaver-pojo") + compileOnly("de.siphalor.tweed5:tweed5-weaver-pojo-attributes-extension") + compileOnly("de.siphalor.tweed5:tweed5-weaver-pojo-serde-extension") + compileOnly("de.siphalor.tweed5:tweed5-weaver-pojo-validation-extension") + compileOnly("de.siphalor.tweed5:tweed5-weaver-pojo-presets-extension") listOf("fabric-networking-api-v1", "fabric-lifecycle-events-v1").forEach { modTestmodImplementation(fabricApi.module(it, mcLibs.versions.fabric.api.get())) diff --git a/tweed5-minecraft/fabric-helper/src/main/java/de/siphalor/tweed5/fabric/helper/api/DefaultTweedMinecraftWeaving.java b/tweed5-minecraft/fabric-helper/src/main/java/de/siphalor/tweed5/fabric/helper/api/DefaultTweedMinecraftWeaving.java new file mode 100644 index 0000000..b0b7d70 --- /dev/null +++ b/tweed5-minecraft/fabric-helper/src/main/java/de/siphalor/tweed5/fabric/helper/api/DefaultTweedMinecraftWeaving.java @@ -0,0 +1,38 @@ +package de.siphalor.tweed5.fabric.helper.api; + +import de.siphalor.tweed5.annotationinheritance.api.AnnotationInheritance; +import de.siphalor.tweed5.attributesextension.api.AttributesExtension; +import de.siphalor.tweed5.attributesextension.api.serde.filter.AttributesReadWriteFilterExtension; +import de.siphalor.tweed5.data.extension.api.ReadWriteExtension; +import de.siphalor.tweed5.defaultextensions.presets.api.PresetsExtension; +import de.siphalor.tweed5.defaultextensions.validation.api.ValidationExtension; +import de.siphalor.tweed5.defaultextensions.validationfallback.api.ValidationFallbackExtension; +import de.siphalor.tweed5.weaver.pojo.api.annotation.CompoundWeaving; +import de.siphalor.tweed5.weaver.pojo.api.annotation.DefaultWeavingExtensions; +import de.siphalor.tweed5.weaver.pojo.api.annotation.PojoWeavingExtension; +import de.siphalor.tweed5.weaver.pojo.api.annotation.TweedExtension; +import de.siphalor.tweed5.weaver.pojoext.attributes.api.AttributesPojoWeavingProcessor; +import de.siphalor.tweed5.weaver.pojoext.serde.api.auto.AutoReadWritePojoWeavingProcessor; +import de.siphalor.tweed5.weaver.pojoext.serde.api.auto.DefaultReadWriteMappings; +import de.siphalor.tweed5.weaver.pojoext.validation.api.ValidatorsPojoWeavingProcessor; + +@AnnotationInheritance(passOn = { + TweedExtension.class, + PojoWeavingExtension.class, + DefaultWeavingExtensions.class, + DefaultReadWriteMappings.class, + CompoundWeaving.class +}) +@TweedExtension(ReadWriteExtension.class) +@TweedExtension(ValidationExtension.class) +@TweedExtension(ValidationFallbackExtension.class) +@TweedExtension(AttributesExtension.class) +@TweedExtension(AttributesReadWriteFilterExtension.class) +@PojoWeavingExtension(AutoReadWritePojoWeavingProcessor.class) +@PojoWeavingExtension(ValidatorsPojoWeavingProcessor.class) +@PojoWeavingExtension(AttributesPojoWeavingProcessor.class) +@DefaultWeavingExtensions +@DefaultReadWriteMappings +@CompoundWeaving +public @interface DefaultTweedMinecraftWeaving { +} diff --git a/tweed5-minecraft/fabric-helper/src/testmod/java/de/siphalor/tweed5/fabric/helper/testmod/TestModConfig.java b/tweed5-minecraft/fabric-helper/src/testmod/java/de/siphalor/tweed5/fabric/helper/testmod/TestModConfig.java index af5316a..ea3f1db 100644 --- a/tweed5-minecraft/fabric-helper/src/testmod/java/de/siphalor/tweed5/fabric/helper/testmod/TestModConfig.java +++ b/tweed5-minecraft/fabric-helper/src/testmod/java/de/siphalor/tweed5/fabric/helper/testmod/TestModConfig.java @@ -1,31 +1,13 @@ package de.siphalor.tweed5.fabric.helper.testmod; -import de.siphalor.tweed5.attributesextension.api.AttributesExtension; -import de.siphalor.tweed5.attributesextension.api.serde.filter.AttributesReadWriteFilterExtension; -import de.siphalor.tweed5.commentloaderextension.api.CommentLoaderExtension; -import de.siphalor.tweed5.data.extension.api.ReadWriteExtension; -import de.siphalor.tweed5.defaultextensions.patch.api.PatchExtension; +import de.siphalor.tweed5.fabric.helper.api.DefaultTweedMinecraftWeaving; import de.siphalor.tweed5.weaver.pojo.api.annotation.CompoundWeaving; -import de.siphalor.tweed5.weaver.pojo.api.annotation.DefaultWeavingExtensions; import de.siphalor.tweed5.weaver.pojo.api.annotation.PojoWeaving; -import de.siphalor.tweed5.weaver.pojo.api.annotation.PojoWeavingExtension; import de.siphalor.tweed5.weaver.pojoext.attributes.api.Attribute; -import de.siphalor.tweed5.weaver.pojoext.attributes.api.AttributesPojoWeavingProcessor; -import de.siphalor.tweed5.weaver.pojoext.serde.api.auto.AutoReadWritePojoWeavingProcessor; -import de.siphalor.tweed5.weaver.pojoext.serde.api.auto.DefaultReadWriteMappings; import lombok.Data; -@PojoWeaving(extensions = { - CommentLoaderExtension.class, - ReadWriteExtension.class, - PatchExtension.class, - AttributesExtension.class, - AttributesReadWriteFilterExtension.class, -}) -@PojoWeavingExtension(AutoReadWritePojoWeavingProcessor.class) -@PojoWeavingExtension(AttributesPojoWeavingProcessor.class) -@DefaultWeavingExtensions -@DefaultReadWriteMappings +@PojoWeaving +@DefaultTweedMinecraftWeaving @CompoundWeaving(namingFormat = "kebab_case") @Data public class TestModConfig { diff --git a/tweed5/weaver-pojo-attributes-extension/src/test/java/de/siphalor/tweed5/weaver/pojoext/attributes/api/AttributesPojoWeavingProcessorTest.java b/tweed5/weaver-pojo-attributes-extension/src/test/java/de/siphalor/tweed5/weaver/pojoext/attributes/api/AttributesPojoWeavingProcessorTest.java index 7321655..5a3e2a2 100644 --- a/tweed5/weaver-pojo-attributes-extension/src/test/java/de/siphalor/tweed5/weaver/pojoext/attributes/api/AttributesPojoWeavingProcessorTest.java +++ b/tweed5/weaver-pojo-attributes-extension/src/test/java/de/siphalor/tweed5/weaver/pojoext/attributes/api/AttributesPojoWeavingProcessorTest.java @@ -4,10 +4,7 @@ import de.siphalor.tweed5.attributesextension.api.AttributesExtension; import de.siphalor.tweed5.core.api.container.ConfigContainer; import de.siphalor.tweed5.core.api.entry.CompoundConfigEntry; import de.siphalor.tweed5.core.api.entry.ConfigEntry; -import de.siphalor.tweed5.weaver.pojo.api.annotation.CompoundWeaving; -import de.siphalor.tweed5.weaver.pojo.api.annotation.DefaultWeavingExtensions; -import de.siphalor.tweed5.weaver.pojo.api.annotation.PojoWeaving; -import de.siphalor.tweed5.weaver.pojo.api.annotation.PojoWeavingExtension; +import de.siphalor.tweed5.weaver.pojo.api.annotation.*; import de.siphalor.tweed5.weaver.pojo.impl.weaving.TweedPojoWeaverBootstrapper; import org.junit.jupiter.api.Test; @@ -69,7 +66,8 @@ class AttributesPojoWeavingProcessorTest { ); } - @PojoWeaving(extensions = AttributesExtension.class) + @PojoWeaving + @TweedExtension(AttributesExtension.class) @DefaultWeavingExtensions @PojoWeavingExtension(AttributesPojoWeavingProcessor.class) @CompoundWeaving diff --git a/tweed5/weaver-pojo-serde-extension/src/test/java/de/siphalor/tweed5/weaver/pojoext/serde/api/ReadWritePojoWeavingProcessorTest.java b/tweed5/weaver-pojo-serde-extension/src/test/java/de/siphalor/tweed5/weaver/pojoext/serde/api/ReadWritePojoWeavingProcessorTest.java index 66d016d..e79a799 100644 --- a/tweed5/weaver-pojo-serde-extension/src/test/java/de/siphalor/tweed5/weaver/pojoext/serde/api/ReadWritePojoWeavingProcessorTest.java +++ b/tweed5/weaver-pojo-serde-extension/src/test/java/de/siphalor/tweed5/weaver/pojoext/serde/api/ReadWritePojoWeavingProcessorTest.java @@ -9,10 +9,7 @@ import de.siphalor.tweed5.data.hjson.HjsonReader; import de.siphalor.tweed5.data.hjson.HjsonWriter; import de.siphalor.tweed5.dataapi.api.TweedDataVisitor; import de.siphalor.tweed5.dataapi.api.TweedDataWriteException; -import de.siphalor.tweed5.weaver.pojo.api.annotation.CompoundWeaving; -import de.siphalor.tweed5.weaver.pojo.api.annotation.DefaultWeavingExtensions; -import de.siphalor.tweed5.weaver.pojo.api.annotation.PojoWeaving; -import de.siphalor.tweed5.weaver.pojo.api.annotation.PojoWeavingExtension; +import de.siphalor.tweed5.weaver.pojo.api.annotation.*; import de.siphalor.tweed5.weaver.pojo.impl.weaving.TweedPojoWeaverBootstrapper; import lombok.*; import org.jspecify.annotations.Nullable; @@ -79,7 +76,8 @@ class ReadWritePojoWeavingProcessorTest { } } - @PojoWeaving(extensions = ReadWriteExtension.class) + @PojoWeaving + @TweedExtension(ReadWriteExtension.class) @DefaultWeavingExtensions @PojoWeavingExtension(ReadWritePojoWeavingProcessor.class) @CompoundWeaving diff --git a/tweed5/weaver-pojo-serde-extension/src/test/java/de/siphalor/tweed5/weaver/pojoext/serde/api/auto/AutoReadWritePojoWeavingProcessorTest.java b/tweed5/weaver-pojo-serde-extension/src/test/java/de/siphalor/tweed5/weaver/pojoext/serde/api/auto/AutoReadWritePojoWeavingProcessorTest.java index 14f3996..5791dae 100644 --- a/tweed5/weaver-pojo-serde-extension/src/test/java/de/siphalor/tweed5/weaver/pojoext/serde/api/auto/AutoReadWritePojoWeavingProcessorTest.java +++ b/tweed5/weaver-pojo-serde-extension/src/test/java/de/siphalor/tweed5/weaver/pojoext/serde/api/auto/AutoReadWritePojoWeavingProcessorTest.java @@ -9,10 +9,7 @@ import de.siphalor.tweed5.data.extension.api.ReadWriteExtension; import de.siphalor.tweed5.data.extension.api.readwrite.TweedEntryReaderWriter; import de.siphalor.tweed5.data.extension.impl.TweedEntryReaderWriterImpls; import de.siphalor.tweed5.data.hjson.HjsonWriter; -import de.siphalor.tweed5.weaver.pojo.api.annotation.CompoundWeaving; -import de.siphalor.tweed5.weaver.pojo.api.annotation.DefaultWeavingExtensions; -import de.siphalor.tweed5.weaver.pojo.api.annotation.PojoWeaving; -import de.siphalor.tweed5.weaver.pojo.api.annotation.PojoWeavingExtension; +import de.siphalor.tweed5.weaver.pojo.api.annotation.*; import de.siphalor.tweed5.weaver.pojo.api.weaving.NullablePojoWeaver; import de.siphalor.tweed5.weaver.pojo.impl.weaving.TweedPojoWeaverBootstrapper; import lombok.Data; @@ -122,7 +119,8 @@ class AutoReadWritePojoWeavingProcessorTest { """); } - @PojoWeaving(extensions = ReadWriteExtension.class) + @PojoWeaving + @TweedExtension(ReadWriteExtension.class) @PojoWeavingExtension(NullablePojoWeaver.class) @DefaultWeavingExtensions @PojoWeavingExtension(AutoReadWritePojoWeavingProcessor.class) diff --git a/tweed5/weaver-pojo-serde-extension/src/test/java/de/siphalor/tweed5/weaver/pojoext/serde/api/nullable/AutoNullableReadWritePojoWeavingProcessorTest.java b/tweed5/weaver-pojo-serde-extension/src/test/java/de/siphalor/tweed5/weaver/pojoext/serde/api/nullable/AutoNullableReadWritePojoWeavingProcessorTest.java index f63d68a..6664aa5 100644 --- a/tweed5/weaver-pojo-serde-extension/src/test/java/de/siphalor/tweed5/weaver/pojoext/serde/api/nullable/AutoNullableReadWritePojoWeavingProcessorTest.java +++ b/tweed5/weaver-pojo-serde-extension/src/test/java/de/siphalor/tweed5/weaver/pojoext/serde/api/nullable/AutoNullableReadWritePojoWeavingProcessorTest.java @@ -8,10 +8,7 @@ import de.siphalor.tweed5.data.extension.api.TweedEntryWriteException; import de.siphalor.tweed5.data.extension.impl.TweedEntryReaderWriterImpls; import de.siphalor.tweed5.data.hjson.HjsonWriter; import de.siphalor.tweed5.defaultextensions.pather.api.PatherExtension; -import de.siphalor.tweed5.weaver.pojo.api.annotation.CompoundWeaving; -import de.siphalor.tweed5.weaver.pojo.api.annotation.DefaultWeavingExtensions; -import de.siphalor.tweed5.weaver.pojo.api.annotation.PojoWeaving; -import de.siphalor.tweed5.weaver.pojo.api.annotation.PojoWeavingExtension; +import de.siphalor.tweed5.weaver.pojo.api.annotation.*; import de.siphalor.tweed5.weaver.pojo.impl.weaving.TweedPojoWeaverBootstrapper; import de.siphalor.tweed5.weaver.pojoext.serde.api.ReadWritePojoWeavingProcessor; import de.siphalor.tweed5.weaver.pojoext.serde.api.auto.AutoReadWritePojoWeavingProcessor; @@ -144,7 +141,9 @@ class AutoNullableReadWritePojoWeavingProcessorTest { .hasMessageContaining("at .boxedInteger"); } - @PojoWeaving(extensions = {ReadWriteExtension.class, PatherExtension.class}) + @PojoWeaving + @TweedExtension(ReadWriteExtension.class) + @TweedExtension(PatherExtension.class) @DefaultWeavingExtensions @PojoWeavingExtension(AutoReadWritePojoWeavingProcessor.class) @PojoWeavingExtension(ReadWritePojoWeavingProcessor.class) diff --git a/tweed5/weaver-pojo-validation-extension/src/test/java/de/siphalor/tweed5/weaver/pojoext/validation/api/ValidatorsPojoWeavingProcessorTest.java b/tweed5/weaver-pojo-validation-extension/src/test/java/de/siphalor/tweed5/weaver/pojoext/validation/api/ValidatorsPojoWeavingProcessorTest.java index 3bdd337..6e38036 100644 --- a/tweed5/weaver-pojo-validation-extension/src/test/java/de/siphalor/tweed5/weaver/pojoext/validation/api/ValidatorsPojoWeavingProcessorTest.java +++ b/tweed5/weaver-pojo-validation-extension/src/test/java/de/siphalor/tweed5/weaver/pojoext/validation/api/ValidatorsPojoWeavingProcessorTest.java @@ -3,10 +3,7 @@ package de.siphalor.tweed5.weaver.pojoext.validation.api; import de.siphalor.tweed5.core.api.container.ConfigContainer; import de.siphalor.tweed5.defaultextensions.validation.api.ValidationExtension; import de.siphalor.tweed5.defaultextensions.validation.api.result.ValidationIssues; -import de.siphalor.tweed5.weaver.pojo.api.annotation.CompoundWeaving; -import de.siphalor.tweed5.weaver.pojo.api.annotation.DefaultWeavingExtensions; -import de.siphalor.tweed5.weaver.pojo.api.annotation.PojoWeaving; -import de.siphalor.tweed5.weaver.pojo.api.annotation.PojoWeavingExtension; +import de.siphalor.tweed5.weaver.pojo.api.annotation.*; import de.siphalor.tweed5.weaver.pojo.impl.weaving.TweedPojoWeaverBootstrapper; import de.siphalor.tweed5.weaver.pojoext.validation.api.validators.WeavableNumberRangeValidator; import lombok.AllArgsConstructor; @@ -36,7 +33,8 @@ class ValidatorsPojoWeavingProcessorTest { } } - @PojoWeaving(extensions = {ValidationExtension.class}) + @PojoWeaving + @TweedExtension(ValidationExtension.class) @DefaultWeavingExtensions @PojoWeavingExtension(ValidatorsPojoWeavingProcessor.class) @CompoundWeaving diff --git a/tweed5/weaver-pojo/src/main/java/de/siphalor/tweed5/weaver/pojo/api/annotation/PojoWeaving.java b/tweed5/weaver-pojo/src/main/java/de/siphalor/tweed5/weaver/pojo/api/annotation/PojoWeaving.java index e8f00aa..d789f2e 100644 --- a/tweed5/weaver-pojo/src/main/java/de/siphalor/tweed5/weaver/pojo/api/annotation/PojoWeaving.java +++ b/tweed5/weaver-pojo/src/main/java/de/siphalor/tweed5/weaver/pojo/api/annotation/PojoWeaving.java @@ -1,11 +1,7 @@ package de.siphalor.tweed5.weaver.pojo.api.annotation; import de.siphalor.tweed5.core.api.container.ConfigContainer; -import de.siphalor.tweed5.core.api.extension.TweedExtension; import de.siphalor.tweed5.core.impl.DefaultConfigContainer; -import de.siphalor.tweed5.weaver.pojo.api.weaving.CompoundPojoWeaver; -import de.siphalor.tweed5.weaver.pojo.api.weaving.TrivialPojoWeaver; -import de.siphalor.tweed5.weaver.pojo.api.weaving.TweedPojoWeavingExtension; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; @@ -16,6 +12,4 @@ import java.lang.annotation.Target; @Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE}) public @interface PojoWeaving { Class container() default DefaultConfigContainer.class; - - Class[] extensions() default {}; } diff --git a/tweed5/weaver-pojo/src/main/java/de/siphalor/tweed5/weaver/pojo/api/annotation/TweedExtension.java b/tweed5/weaver-pojo/src/main/java/de/siphalor/tweed5/weaver/pojo/api/annotation/TweedExtension.java new file mode 100644 index 0000000..fe18d9a --- /dev/null +++ b/tweed5/weaver-pojo/src/main/java/de/siphalor/tweed5/weaver/pojo/api/annotation/TweedExtension.java @@ -0,0 +1,10 @@ +package de.siphalor.tweed5.weaver.pojo.api.annotation; + +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE}) +@Repeatable(TweedExtensions.class) +public @interface TweedExtension { + Class value(); +} diff --git a/tweed5/weaver-pojo/src/main/java/de/siphalor/tweed5/weaver/pojo/api/annotation/TweedExtensions.java b/tweed5/weaver-pojo/src/main/java/de/siphalor/tweed5/weaver/pojo/api/annotation/TweedExtensions.java new file mode 100644 index 0000000..8f7ec54 --- /dev/null +++ b/tweed5/weaver-pojo/src/main/java/de/siphalor/tweed5/weaver/pojo/api/annotation/TweedExtensions.java @@ -0,0 +1,12 @@ +package de.siphalor.tweed5.weaver.pojo.api.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE}) +public @interface TweedExtensions { + TweedExtension[] value(); +} diff --git a/tweed5/weaver-pojo/src/main/java/de/siphalor/tweed5/weaver/pojo/impl/weaving/TweedPojoWeaverBootstrapper.java b/tweed5/weaver-pojo/src/main/java/de/siphalor/tweed5/weaver/pojo/impl/weaving/TweedPojoWeaverBootstrapper.java index ac8cbda..428b04a 100644 --- a/tweed5/weaver-pojo/src/main/java/de/siphalor/tweed5/weaver/pojo/impl/weaving/TweedPojoWeaverBootstrapper.java +++ b/tweed5/weaver-pojo/src/main/java/de/siphalor/tweed5/weaver/pojo/impl/weaving/TweedPojoWeaverBootstrapper.java @@ -8,6 +8,7 @@ import de.siphalor.tweed5.patchwork.api.PatchworkFactory; import de.siphalor.tweed5.typeutils.api.type.ActualType; import de.siphalor.tweed5.weaver.pojo.api.annotation.PojoWeaving; import de.siphalor.tweed5.weaver.pojo.api.annotation.PojoWeavingExtension; +import de.siphalor.tweed5.weaver.pojo.api.annotation.TweedExtension; import de.siphalor.tweed5.weaver.pojo.api.weaving.ProtoWeavingContext; import de.siphalor.tweed5.weaver.pojo.api.weaving.TweedPojoWeavingExtension; import de.siphalor.tweed5.weaver.pojo.api.weaving.WeavingContext; @@ -61,7 +62,11 @@ public class TweedPojoWeaverBootstrapper { configContainer = (ConfigContainer) createConfigContainer((Class>) rootWeavingConfig.container()); - configContainer.registerExtensions(rootWeavingConfig.extensions()); + TweedExtension[] tweedExtensions = pojoAnnotations.getAnnotationsByType(TweedExtension.class); + //noinspection unchecked + configContainer.registerExtensions( + Arrays.stream(tweedExtensions).map(TweedExtension::value).toArray(Class[]::new) + ); configContainer.finishExtensionSetup(); Collection extensions = loadWeavingExtensions( diff --git a/tweed5/weaver-pojo/src/test/java/de/siphalor/tweed5/weaver/pojo/impl/weaving/TweedPojoWeaverBootstrapperTest.java b/tweed5/weaver-pojo/src/test/java/de/siphalor/tweed5/weaver/pojo/impl/weaving/TweedPojoWeaverBootstrapperTest.java index add66ac..2d03893 100644 --- a/tweed5/weaver-pojo/src/test/java/de/siphalor/tweed5/weaver/pojo/impl/weaving/TweedPojoWeaverBootstrapperTest.java +++ b/tweed5/weaver-pojo/src/test/java/de/siphalor/tweed5/weaver/pojo/impl/weaving/TweedPojoWeaverBootstrapperTest.java @@ -1,11 +1,7 @@ package de.siphalor.tweed5.weaver.pojo.impl.weaving; import de.siphalor.tweed5.core.api.container.ConfigContainer; -import de.siphalor.tweed5.core.api.extension.TweedExtension; -import de.siphalor.tweed5.weaver.pojo.api.annotation.CompoundWeaving; -import de.siphalor.tweed5.weaver.pojo.api.annotation.DefaultWeavingExtensions; -import de.siphalor.tweed5.weaver.pojo.api.annotation.PojoWeaving; -import de.siphalor.tweed5.weaver.pojo.api.annotation.PojoWeavingExtension; +import de.siphalor.tweed5.weaver.pojo.api.annotation.*; import de.siphalor.tweed5.weaver.pojo.api.weaving.CollectionPojoWeaver; import lombok.Data; import org.junit.jupiter.api.Test; @@ -56,14 +52,15 @@ class TweedPojoWeaverBootstrapperTest { )); } - public static class DummyExtension implements TweedExtension { + public static class DummyExtension implements de.siphalor.tweed5.core.api.extension.TweedExtension { @Override public String getId() { return "dummy"; } } - @PojoWeaving(extensions = {DummyExtension.class}) + @PojoWeaving + @TweedExtension(DummyExtension.class) @DefaultWeavingExtensions @CompoundWeaving(namingFormat = "camel_case") @Data