Auto services

This commit is contained in:
2024-06-09 21:37:07 +02:00
parent 31d905b065
commit f95a5fd10e
10 changed files with 48 additions and 16 deletions

View File

@@ -25,6 +25,9 @@ allprojects {
testCompileOnly(lombok) testCompileOnly(lombok)
testAnnotationProcessor(lombok) testAnnotationProcessor(lombok)
compileOnly("com.google.auto.service:auto-service-annotations:${properties["auto_service.version"]}")
annotationProcessor("com.google.auto.service:auto-service:${properties["auto_service.version"]}")
implementation("org.jetbrains:annotations:${properties["jetbrains_annotations.version"]}") implementation("org.jetbrains:annotations:${properties["jetbrains_annotations.version"]}")
testImplementation(platform("org.junit:junit-bom:5.10.0")) testImplementation(platform("org.junit:junit-bom:5.10.0"))

View File

@@ -1,3 +1,4 @@
asm.version = 9.7 asm.version = 9.7
jetbrains_annotations.version = 24.1.0 jetbrains_annotations.version = 24.1.0
lombok.version = 1.18.32 lombok.version = 1.18.32
auto_service.version = 1.1.1

View File

@@ -0,0 +1,9 @@
package de.siphalor.tweed5.defaultextensions.comment.api;
import de.siphalor.tweed5.core.api.entry.ConfigEntry;
import de.siphalor.tweed5.core.api.extension.TweedExtension;
import org.jetbrains.annotations.Nullable;
public interface CommentExtension extends TweedExtension {
@Nullable String getFullComment(ConfigEntry<?> configEntry);
}

View File

@@ -1,5 +1,6 @@
package de.siphalor.tweed5.defaultextensions.comment.impl; package de.siphalor.tweed5.defaultextensions.comment.impl;
import com.google.auto.service.AutoService;
import de.siphalor.tweed5.core.api.entry.ConfigEntry; import de.siphalor.tweed5.core.api.entry.ConfigEntry;
import de.siphalor.tweed5.core.api.extension.EntryExtensionsData; import de.siphalor.tweed5.core.api.extension.EntryExtensionsData;
import de.siphalor.tweed5.core.api.extension.RegisteredExtensionData; import de.siphalor.tweed5.core.api.extension.RegisteredExtensionData;
@@ -10,13 +11,15 @@ import de.siphalor.tweed5.core.api.middleware.Middleware;
import de.siphalor.tweed5.data.extension.api.TweedEntryWriter; import de.siphalor.tweed5.data.extension.api.TweedEntryWriter;
import de.siphalor.tweed5.data.extension.api.extension.ReadWriteRelatedExtension; import de.siphalor.tweed5.data.extension.api.extension.ReadWriteRelatedExtension;
import de.siphalor.tweed5.defaultextensions.comment.api.AComment; import de.siphalor.tweed5.defaultextensions.comment.api.AComment;
import de.siphalor.tweed5.defaultextensions.comment.api.CommentExtension;
import de.siphalor.tweed5.defaultextensions.comment.api.CommentProducer; import de.siphalor.tweed5.defaultextensions.comment.api.CommentProducer;
import de.siphalor.tweed5.defaultextensions.comment.api.CommentModifyingExtension; import de.siphalor.tweed5.defaultextensions.comment.api.CommentModifyingExtension;
import lombok.Getter; import lombok.Getter;
import lombok.Value; import lombok.Value;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
public class CommentExtension implements TweedExtension, ReadWriteRelatedExtension { @AutoService(CommentExtension.class)
public class CommentExtensionImpl implements ReadWriteRelatedExtension, CommentExtension {
@Getter @Getter
private RegisteredExtensionData<EntryExtensionsData, InternalCommentEntryData> internalEntryDataExtension; private RegisteredExtensionData<EntryExtensionsData, InternalCommentEntryData> internalEntryDataExtension;
private DefaultMiddlewareContainer<CommentProducer> middlewareContainer; private DefaultMiddlewareContainer<CommentProducer> middlewareContainer;
@@ -61,8 +64,9 @@ public class CommentExtension implements TweedExtension, ReadWriteRelatedExtensi
internalEntryDataExtension.set(entryExtensionsData, new InternalCommentEntryDataImpl(middleware)); internalEntryDataExtension.set(entryExtensionsData, new InternalCommentEntryDataImpl(middleware));
} }
@Override
@Nullable @Nullable
String getComment(ConfigEntry<?> configEntry) { public String getFullComment(ConfigEntry<?> configEntry) {
String comment = ((InternalCommentEntryData) configEntry.extensionsData()).commentProducer().createComment(configEntry); String comment = ((InternalCommentEntryData) configEntry.extensionsData()).commentProducer().createComment(configEntry);
return comment.isEmpty() ? null : comment; return comment.isEmpty() ? null : comment;
} }

View File

@@ -0,0 +1,6 @@
package de.siphalor.tweed5.defaultextensions.pather.api;
import de.siphalor.tweed5.core.api.extension.TweedExtension;
public interface PatherExtension extends TweedExtension {
}

View File

@@ -1,5 +1,6 @@
package de.siphalor.tweed5.defaultextensions.pather.impl; package de.siphalor.tweed5.defaultextensions.pather.impl;
import com.google.auto.service.AutoService;
import de.siphalor.tweed5.core.api.entry.ConfigEntry; import de.siphalor.tweed5.core.api.entry.ConfigEntry;
import de.siphalor.tweed5.core.api.extension.RegisteredExtensionData; import de.siphalor.tweed5.core.api.extension.RegisteredExtensionData;
import de.siphalor.tweed5.core.api.extension.TweedExtension; import de.siphalor.tweed5.core.api.extension.TweedExtension;
@@ -13,10 +14,12 @@ import de.siphalor.tweed5.dataapi.api.TweedDataVisitor;
import de.siphalor.tweed5.defaultextensions.pather.api.PathTracking; import de.siphalor.tweed5.defaultextensions.pather.api.PathTracking;
import de.siphalor.tweed5.defaultextensions.pather.api.PathTrackingDataReader; import de.siphalor.tweed5.defaultextensions.pather.api.PathTrackingDataReader;
import de.siphalor.tweed5.defaultextensions.pather.api.PathTrackingDataVisitor; import de.siphalor.tweed5.defaultextensions.pather.api.PathTrackingDataVisitor;
import de.siphalor.tweed5.defaultextensions.pather.api.PatherExtension;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
public class PatherExtension implements TweedExtension, ReadWriteRelatedExtension { @AutoService(PatherExtension.class)
public class PatherExtensionImpl implements PatherExtension, TweedExtension, ReadWriteRelatedExtension {
private static final String PATHER_ID = "pather"; private static final String PATHER_ID = "pather";
private RegisteredExtensionData<ReadWriteContextExtensionsData, PathTracking> rwContextPathTrackingData; private RegisteredExtensionData<ReadWriteContextExtensionsData, PathTracking> rwContextPathTrackingData;

View File

@@ -1,5 +1,6 @@
package de.siphalor.tweed5.defaultextensions.validation.impl; package de.siphalor.tweed5.defaultextensions.validation.impl;
import com.google.auto.service.AutoService;
import de.siphalor.tweed5.core.api.entry.ConfigEntry; import de.siphalor.tweed5.core.api.entry.ConfigEntry;
import de.siphalor.tweed5.core.api.entry.ConfigEntryValueVisitor; import de.siphalor.tweed5.core.api.entry.ConfigEntryValueVisitor;
import de.siphalor.tweed5.core.api.extension.EntryExtensionsData; import de.siphalor.tweed5.core.api.extension.EntryExtensionsData;
@@ -21,7 +22,7 @@ import de.siphalor.tweed5.defaultextensions.comment.api.CommentProducer;
import de.siphalor.tweed5.defaultextensions.pather.api.PathTracking; import de.siphalor.tweed5.defaultextensions.pather.api.PathTracking;
import de.siphalor.tweed5.defaultextensions.pather.api.PathTrackingConfigEntryValueVisitor; import de.siphalor.tweed5.defaultextensions.pather.api.PathTrackingConfigEntryValueVisitor;
import de.siphalor.tweed5.defaultextensions.pather.api.PatherData; import de.siphalor.tweed5.defaultextensions.pather.api.PatherData;
import de.siphalor.tweed5.defaultextensions.pather.impl.PatherExtension; import de.siphalor.tweed5.defaultextensions.pather.impl.PatherExtensionImpl;
import de.siphalor.tweed5.defaultextensions.validation.api.ConfigEntryValidator; import de.siphalor.tweed5.defaultextensions.validation.api.ConfigEntryValidator;
import de.siphalor.tweed5.defaultextensions.validation.api.EntrySpecificValidation; import de.siphalor.tweed5.defaultextensions.validation.api.EntrySpecificValidation;
import de.siphalor.tweed5.defaultextensions.validation.api.ValidationExtension; import de.siphalor.tweed5.defaultextensions.validation.api.ValidationExtension;
@@ -39,6 +40,7 @@ import org.jetbrains.annotations.Nullable;
import java.util.*; import java.util.*;
@AutoService(ValidationExtension.class)
public class ValidationExtensionImpl implements ReadWriteRelatedExtension, ValidationExtension, CommentModifyingExtension { public class ValidationExtensionImpl implements ReadWriteRelatedExtension, ValidationExtension, CommentModifyingExtension {
private static final ValidationResult<?> PRIMITIVE_IS_NULL_RESULT = ValidationResult.withIssues( private static final ValidationResult<?> PRIMITIVE_IS_NULL_RESULT = ValidationResult.withIssues(
null, null,
@@ -83,7 +85,7 @@ public class ValidationExtensionImpl implements ReadWriteRelatedExtension, Valid
@Override @Override
public void setup(TweedExtensionSetupContext context) { public void setup(TweedExtensionSetupContext context) {
context.registerExtension(new PatherExtension()); context.registerExtension(new PatherExtensionImpl());
validationEntryDataExtension = context.registerEntryExtensionData(InternalValidationEntryData.class); validationEntryDataExtension = context.registerEntryExtensionData(InternalValidationEntryData.class);
context.registerEntryExtensionData(EntrySpecificValidation.class); context.registerEntryExtensionData(EntrySpecificValidation.class);

View File

@@ -17,6 +17,7 @@ import de.siphalor.tweed5.data.extension.impl.ReadWriteExtensionImpl;
import de.siphalor.tweed5.data.hjson.HjsonCommentType; import de.siphalor.tweed5.data.hjson.HjsonCommentType;
import de.siphalor.tweed5.data.hjson.HjsonWriter; import de.siphalor.tweed5.data.hjson.HjsonWriter;
import de.siphalor.tweed5.defaultextensions.comment.api.AComment; import de.siphalor.tweed5.defaultextensions.comment.api.AComment;
import de.siphalor.tweed5.defaultextensions.comment.api.CommentExtension;
import de.siphalor.tweed5.defaultextensions.comment.api.CommentProducer; import de.siphalor.tweed5.defaultextensions.comment.api.CommentProducer;
import de.siphalor.tweed5.defaultextensions.comment.api.CommentModifyingExtension; import de.siphalor.tweed5.defaultextensions.comment.api.CommentModifyingExtension;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@@ -29,7 +30,7 @@ import java.util.*;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*;
class CommentExtensionTest { class CommentExtensionImplTest {
private DefaultConfigContainer<Map<String, Object>> configContainer; private DefaultConfigContainer<Map<String, Object>> configContainer;
private CommentExtension commentExtension; private CommentExtension commentExtension;
@@ -41,7 +42,7 @@ class CommentExtensionTest {
void setupContainer(Collection<TweedExtension> extraExtensions) { void setupContainer(Collection<TweedExtension> extraExtensions) {
configContainer = new DefaultConfigContainer<>(); configContainer = new DefaultConfigContainer<>();
commentExtension = new CommentExtension(); commentExtension = new CommentExtensionImpl();
configContainer.registerExtension(commentExtension); configContainer.registerExtension(commentExtension);
extraExtensions.forEach(configContainer::registerExtension); extraExtensions.forEach(configContainer::registerExtension);
configContainer.finishExtensionSetup(); configContainer.finishExtensionSetup();
@@ -71,9 +72,9 @@ class CommentExtensionTest {
setupContainer(Collections.emptyList()); setupContainer(Collections.emptyList());
configContainer.initialize(); configContainer.initialize();
assertEquals("It is an integer", commentExtension.getComment(intEntry)); assertEquals("It is an integer", commentExtension.getFullComment(intEntry));
assertEquals("It is a string", commentExtension.getComment(stringEntry)); assertEquals("It is a string", commentExtension.getFullComment(stringEntry));
assertNull(commentExtension.getComment(noCommentEntry)); assertNull(commentExtension.getFullComment(noCommentEntry));
} }
@Test @Test
@@ -81,9 +82,9 @@ class CommentExtensionTest {
setupContainer(Collections.singletonList(new TestCommentModifyingExtension())); setupContainer(Collections.singletonList(new TestCommentModifyingExtension()));
configContainer.initialize(); configContainer.initialize();
assertEquals("The comment is:\nIt is an integer\nEND", commentExtension.getComment(intEntry)); assertEquals("The comment is:\nIt is an integer\nEND", commentExtension.getFullComment(intEntry));
assertEquals("The comment is:\nIt is a string\nEND", commentExtension.getComment(stringEntry)); assertEquals("The comment is:\nIt is a string\nEND", commentExtension.getFullComment(stringEntry));
assertEquals("The comment is:\n\nEND", commentExtension.getComment(noCommentEntry)); assertEquals("The comment is:\n\nEND", commentExtension.getFullComment(noCommentEntry));
} }
@Test @Test

View File

@@ -8,7 +8,8 @@ import de.siphalor.tweed5.core.impl.DefaultConfigContainer;
import de.siphalor.tweed5.core.impl.entry.SimpleConfigEntryImpl; import de.siphalor.tweed5.core.impl.entry.SimpleConfigEntryImpl;
import de.siphalor.tweed5.core.impl.entry.StaticMapCompoundConfigEntryImpl; import de.siphalor.tweed5.core.impl.entry.StaticMapCompoundConfigEntryImpl;
import de.siphalor.tweed5.defaultextensions.comment.api.AComment; import de.siphalor.tweed5.defaultextensions.comment.api.AComment;
import de.siphalor.tweed5.defaultextensions.comment.impl.CommentExtension; import de.siphalor.tweed5.defaultextensions.comment.api.CommentExtension;
import de.siphalor.tweed5.defaultextensions.comment.impl.CommentExtensionImpl;
import de.siphalor.tweed5.defaultextensions.validation.api.ConfigEntryValidator; import de.siphalor.tweed5.defaultextensions.validation.api.ConfigEntryValidator;
import de.siphalor.tweed5.defaultextensions.validation.api.EntrySpecificValidation; import de.siphalor.tweed5.defaultextensions.validation.api.EntrySpecificValidation;
import de.siphalor.tweed5.defaultextensions.validation.api.ValidationExtension; import de.siphalor.tweed5.defaultextensions.validation.api.ValidationExtension;
@@ -40,7 +41,7 @@ class ValidationExtensionImplTest {
void setUp() { void setUp() {
configContainer = new DefaultConfigContainer<>(); configContainer = new DefaultConfigContainer<>();
commentExtension = new CommentExtension(); commentExtension = new CommentExtensionImpl();
configContainer.registerExtension(commentExtension); configContainer.registerExtension(commentExtension);
validationExtension = new ValidationExtensionImpl(); validationExtension = new ValidationExtensionImpl();
configContainer.registerExtension(validationExtension); configContainer.registerExtension(validationExtension);

View File

@@ -1,5 +1,6 @@
package de.siphalor.tweed5.data.extension.impl; package de.siphalor.tweed5.data.extension.impl;
import com.google.auto.service.AutoService;
import de.siphalor.tweed5.core.api.entry.ConfigEntry; import de.siphalor.tweed5.core.api.entry.ConfigEntry;
import de.siphalor.tweed5.core.api.extension.EntryExtensionsData; import de.siphalor.tweed5.core.api.extension.EntryExtensionsData;
import de.siphalor.tweed5.core.api.extension.RegisteredExtensionData; import de.siphalor.tweed5.core.api.extension.RegisteredExtensionData;
@@ -26,6 +27,7 @@ import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@AutoService(ReadWriteExtension.class)
public class ReadWriteExtensionImpl implements ReadWriteExtension { public class ReadWriteExtensionImpl implements ReadWriteExtension {
private RegisteredExtensionData<EntryExtensionsData, ReadWriteEntryDataExtension> readWriteEntryDataExtension; private RegisteredExtensionData<EntryExtensionsData, ReadWriteEntryDataExtension> readWriteEntryDataExtension;