refactor(pojo-weaver): Move Tweed extension declarations in Weaving to own, inheritable, annotations

This commit is contained in:
2025-11-02 10:40:47 +01:00
parent cd65c52538
commit ca8b36f4e4
14 changed files with 97 additions and 81 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -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<? extends ConfigContainer> container() default DefaultConfigContainer.class;
Class<? extends TweedExtension>[] extensions() default {};
}

View File

@@ -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<? extends de.siphalor.tweed5.core.api.extension.TweedExtension> value();
}

View File

@@ -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();
}

View File

@@ -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<T> {
configContainer
= (ConfigContainer<T>) createConfigContainer((Class<? extends ConfigContainer<?>>) 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<TweedPojoWeavingExtension> extensions = loadWeavingExtensions(

View File

@@ -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