refactor(pojo-weaver): Move Tweed extension declarations in Weaving to own, inheritable, annotations
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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()))
|
||||
|
||||
@@ -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 {
|
||||
}
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {};
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
@@ -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(
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user