[*] Migrate to jspecify annotations
This commit is contained in:
@@ -2,7 +2,7 @@ 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;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
|
||||
public interface CommentExtension extends TweedExtension {
|
||||
@Nullable String getFullComment(ConfigEntry<?> configEntry);
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
@NullMarked
|
||||
package de.siphalor.tweed5.defaultextensions.comment.api;
|
||||
|
||||
import org.jspecify.annotations.NullMarked;
|
||||
@@ -13,9 +13,12 @@ import de.siphalor.tweed5.data.extension.api.extension.ReadWriteRelatedExtension
|
||||
import de.siphalor.tweed5.defaultextensions.comment.api.*;
|
||||
import lombok.Getter;
|
||||
import lombok.Value;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jspecify.annotations.NonNull;
|
||||
import org.jspecify.annotations.NullUnmarked;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
|
||||
@AutoService(CommentExtension.class)
|
||||
@NullUnmarked
|
||||
public class CommentExtensionImpl implements ReadWriteRelatedExtension, CommentExtension {
|
||||
@Getter
|
||||
private RegisteredExtensionData<EntryExtensionsData, InternalCommentEntryData> internalEntryDataExtension;
|
||||
@@ -62,8 +65,7 @@ public class CommentExtensionImpl implements ReadWriteRelatedExtension, CommentE
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public String getFullComment(ConfigEntry<?> configEntry) {
|
||||
public @Nullable String getFullComment(@NonNull ConfigEntry<?> configEntry) {
|
||||
String comment = ((InternalCommentEntryData) configEntry.extensionsData()).commentProducer().createComment(configEntry);
|
||||
return comment.isEmpty() ? null : comment;
|
||||
}
|
||||
|
||||
@@ -6,8 +6,8 @@ import de.siphalor.tweed5.core.api.middleware.Middleware;
|
||||
import de.siphalor.tweed5.data.extension.api.TweedEntryWriter;
|
||||
import de.siphalor.tweed5.dataapi.api.TweedDataVisitor;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jspecify.annotations.NonNull;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
|
||||
class TweedEntryWriterCommentMiddleware implements Middleware<TweedEntryWriter<?, ?>> {
|
||||
public static final TweedEntryWriterCommentMiddleware INSTANCE = new TweedEntryWriterCommentMiddleware();
|
||||
@@ -20,8 +20,8 @@ class TweedEntryWriterCommentMiddleware implements Middleware<TweedEntryWriter<?
|
||||
@Override
|
||||
public TweedEntryWriter<?, ?> process(TweedEntryWriter<?, ?> inner) {
|
||||
//noinspection unchecked
|
||||
TweedEntryWriter<Object, ConfigEntry<Object>> innerCasted = (TweedEntryWriter<Object, ConfigEntry<Object>>) inner;
|
||||
return (TweedEntryWriter<Object, ConfigEntry<Object>>) (writer, value, entry, context) -> {
|
||||
TweedEntryWriter<Object, ConfigEntry<Object>> innerCasted = (TweedEntryWriter<Object, @NonNull ConfigEntry<Object>>) inner;
|
||||
return (TweedEntryWriter<Object, @NonNull ConfigEntry<Object>>) (writer, value, entry, context) -> {
|
||||
if (writer instanceof CompoundDataVisitor) {
|
||||
// Comment is already written in front of the key by the CompoundDataWriter,
|
||||
// so we don't have to write it here.
|
||||
@@ -94,7 +94,7 @@ class TweedEntryWriterCommentMiddleware implements Middleware<TweedEntryWriter<?
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitString(@NotNull String value) {
|
||||
public void visitString(String value) {
|
||||
delegate.visitString(value);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
@ApiStatus.Internal
|
||||
@NullMarked
|
||||
package de.siphalor.tweed5.defaultextensions.comment.impl;
|
||||
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jspecify.annotations.NullMarked;
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package de.siphalor.tweed5.defaultextensions.pather.api;
|
||||
|
||||
import org.jspecify.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.Deque;
|
||||
|
||||
@@ -9,7 +11,7 @@ public class PathTracking implements PatherData {
|
||||
private final Deque<String> pathParts = new ArrayDeque<>(50);
|
||||
private final Deque<Integer> listIndexes = new ArrayDeque<>(10);
|
||||
|
||||
public Context currentContext() {
|
||||
public @Nullable Context currentContext() {
|
||||
return contextStack.peek();
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@ package de.siphalor.tweed5.defaultextensions.pather.api;
|
||||
|
||||
import de.siphalor.tweed5.dataapi.api.TweedDataVisitor;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class PathTrackingDataVisitor implements TweedDataVisitor {
|
||||
@@ -58,7 +57,7 @@ public class PathTrackingDataVisitor implements TweedDataVisitor {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitString(@NotNull String value) {
|
||||
public void visitString(String value) {
|
||||
delegate.visitString(value);
|
||||
valueVisited();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
@NullMarked
|
||||
package de.siphalor.tweed5.defaultextensions.pather.api;
|
||||
|
||||
import org.jspecify.annotations.NullMarked;
|
||||
@@ -15,10 +15,13 @@ import de.siphalor.tweed5.defaultextensions.pather.api.PathTracking;
|
||||
import de.siphalor.tweed5.defaultextensions.pather.api.PathTrackingDataReader;
|
||||
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.Nullable;
|
||||
import lombok.val;
|
||||
import org.jspecify.annotations.NonNull;
|
||||
import org.jspecify.annotations.NullUnmarked;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
|
||||
@AutoService(PatherExtension.class)
|
||||
@NullUnmarked
|
||||
public class PatherExtensionImpl implements PatherExtension, TweedExtension, ReadWriteRelatedExtension {
|
||||
private static final String PATHER_ID = "pather";
|
||||
|
||||
@@ -39,7 +42,7 @@ public class PatherExtensionImpl implements PatherExtension, TweedExtension, Rea
|
||||
entryWriterMiddleware = createEntryWriterMiddleware();
|
||||
}
|
||||
|
||||
private @NotNull Middleware<TweedEntryReader<?, ?>> createEntryReaderMiddleware() {
|
||||
private @NonNull Middleware<TweedEntryReader<?, ?>> createEntryReaderMiddleware() {
|
||||
return new Middleware<TweedEntryReader<?, ?>>() {
|
||||
@Override
|
||||
public String id() {
|
||||
@@ -49,7 +52,7 @@ public class PatherExtensionImpl implements PatherExtension, TweedExtension, Rea
|
||||
@Override
|
||||
public TweedEntryReader<?, ?> process(TweedEntryReader<?, ?> inner) {
|
||||
//noinspection unchecked
|
||||
TweedEntryReader<Object, ConfigEntry<Object>> castedInner = (TweedEntryReader<Object, ConfigEntry<Object>>) inner;
|
||||
val castedInner = (TweedEntryReader<Object, @NonNull ConfigEntry<Object>>) inner;
|
||||
|
||||
return (TweedDataReader reader, ConfigEntry<Object> entry, TweedReadContext context) -> {
|
||||
if (context.extensionsData().isPatchworkPartSet(PathTracking.class)) {
|
||||
@@ -74,7 +77,7 @@ public class PatherExtensionImpl implements PatherExtension, TweedExtension, Rea
|
||||
@Override
|
||||
public TweedEntryWriter<?, ?> process(TweedEntryWriter<?, ?> inner) {
|
||||
//noinspection unchecked
|
||||
TweedEntryWriter<Object, ConfigEntry<Object>> castedInner = (TweedEntryWriter<Object, ConfigEntry<Object>>) inner;
|
||||
val castedInner = (TweedEntryWriter<Object, @NonNull ConfigEntry<Object>>) inner;
|
||||
|
||||
return (TweedDataVisitor writer, Object value, ConfigEntry<Object> entry, TweedWriteContext context) -> {
|
||||
if (context.extensionsData().isPatchworkPartSet(PathTracking.class)) {
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
@ApiStatus.Internal
|
||||
@NullMarked
|
||||
package de.siphalor.tweed5.defaultextensions.pather.impl;
|
||||
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jspecify.annotations.NullMarked;
|
||||
@@ -2,11 +2,10 @@ package de.siphalor.tweed5.defaultextensions.validation.api;
|
||||
|
||||
import de.siphalor.tweed5.core.api.entry.ConfigEntry;
|
||||
import de.siphalor.tweed5.defaultextensions.validation.api.result.ValidationResult;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
|
||||
public interface ConfigEntryValidator {
|
||||
<T> ValidationResult<T> validate(ConfigEntry<T> configEntry, T value);
|
||||
<T extends @Nullable Object> ValidationResult<T> validate(ConfigEntry<T> configEntry, T value);
|
||||
|
||||
@NotNull
|
||||
<T> String description(ConfigEntry<T> configEntry);
|
||||
}
|
||||
|
||||
@@ -3,7 +3,8 @@ package de.siphalor.tweed5.defaultextensions.validation.api;
|
||||
import de.siphalor.tweed5.core.api.entry.ConfigEntry;
|
||||
import de.siphalor.tweed5.core.api.extension.TweedExtension;
|
||||
import de.siphalor.tweed5.defaultextensions.validation.api.result.ValidationIssues;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
|
||||
public interface ValidationExtension extends TweedExtension {
|
||||
<T> ValidationIssues validate(ConfigEntry<T> entry, T value);
|
||||
<T extends @Nullable Object> ValidationIssues validate(ConfigEntry<T> entry, T value);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
@NullMarked
|
||||
package de.siphalor.tweed5.defaultextensions.validation.api;
|
||||
|
||||
import org.jspecify.annotations.NullMarked;
|
||||
@@ -3,7 +3,6 @@ package de.siphalor.tweed5.defaultextensions.validation.api.result;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
@@ -14,7 +13,6 @@ import java.util.function.Function;
|
||||
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public class ValidationResult<T> {
|
||||
private final T value;
|
||||
@NotNull
|
||||
private final Collection<ValidationIssue> issues;
|
||||
private final boolean hasError;
|
||||
|
||||
@@ -22,7 +20,7 @@ public class ValidationResult<T> {
|
||||
return new ValidationResult<>(value, Collections.emptyList(), false);
|
||||
}
|
||||
|
||||
public static <T> ValidationResult<T> withIssues(T value, @NotNull Collection<ValidationIssue> issues) {
|
||||
public static <T> ValidationResult<T> withIssues(T value, Collection<ValidationIssue> issues) {
|
||||
return new ValidationResult<>(value, issues, issuesContainError(issues));
|
||||
}
|
||||
|
||||
|
||||
@@ -5,13 +5,13 @@ import de.siphalor.tweed5.defaultextensions.validation.api.ConfigEntryValidator;
|
||||
import de.siphalor.tweed5.defaultextensions.validation.api.result.ValidationIssue;
|
||||
import de.siphalor.tweed5.defaultextensions.validation.api.result.ValidationIssueLevel;
|
||||
import de.siphalor.tweed5.defaultextensions.validation.api.result.ValidationResult;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
public class NonNullValidator implements ConfigEntryValidator {
|
||||
@Override
|
||||
public <T> ValidationResult<T> validate(ConfigEntry<T> configEntry, T value) {
|
||||
public <T extends @Nullable Object> ValidationResult<T> validate(ConfigEntry<T> configEntry, T value) {
|
||||
if (value == null) {
|
||||
return ValidationResult.withIssues(null, Collections.singleton(
|
||||
new ValidationIssue("Value must not be null", ValidationIssueLevel.ERROR)
|
||||
@@ -21,7 +21,7 @@ public class NonNullValidator implements ConfigEntryValidator {
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull <T> String description(ConfigEntry<T> configEntry) {
|
||||
public <T> String description(ConfigEntry<T> configEntry) {
|
||||
return "Must be set (not null).";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,23 +7,20 @@ import de.siphalor.tweed5.defaultextensions.validation.api.result.ValidationIssu
|
||||
import de.siphalor.tweed5.defaultextensions.validation.api.result.ValidationResult;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Value;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jspecify.annotations.NonNull;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
@Value
|
||||
@AllArgsConstructor
|
||||
public class NumberRangeValidator<N extends Number> implements ConfigEntryValidator {
|
||||
@NotNull
|
||||
public class NumberRangeValidator<N extends @NonNull Number> implements ConfigEntryValidator {
|
||||
Class<N> numberClass;
|
||||
@Nullable
|
||||
N minimum;
|
||||
@Nullable
|
||||
N maximum;
|
||||
@Nullable N minimum;
|
||||
@Nullable N maximum;
|
||||
|
||||
@Override
|
||||
public <T> ValidationResult<T> validate(ConfigEntry<T> configEntry, T value) {
|
||||
public <T extends @Nullable Object> ValidationResult<T> validate(ConfigEntry<T> configEntry, T value) {
|
||||
if (!(value instanceof Number)) {
|
||||
return ValidationResult.withIssues(value, Collections.singleton(
|
||||
new ValidationIssue("Value must be numeric", ValidationIssueLevel.ERROR)
|
||||
@@ -56,7 +53,7 @@ public class NumberRangeValidator<N extends Number> implements ConfigEntryValida
|
||||
return ValidationResult.ok(value);
|
||||
}
|
||||
|
||||
private int compare(@NotNull Number a, @NotNull Number b) {
|
||||
private int compare(Number a, Number b) {
|
||||
if (numberClass == Byte.class) {
|
||||
return Byte.compare(a.byteValue(), b.byteValue());
|
||||
} else if (numberClass == Short.class) {
|
||||
@@ -73,7 +70,7 @@ public class NumberRangeValidator<N extends Number> implements ConfigEntryValida
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull <T> String description(ConfigEntry<T> configEntry) {
|
||||
public <T> String description(ConfigEntry<T> configEntry) {
|
||||
if (minimum == null) {
|
||||
if (maximum == null) {
|
||||
return "";
|
||||
|
||||
@@ -6,7 +6,7 @@ import de.siphalor.tweed5.defaultextensions.validation.api.ConfigEntryValidator;
|
||||
import de.siphalor.tweed5.defaultextensions.validation.api.result.ValidationResult;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
@@ -18,12 +18,12 @@ public class SimpleValidatorMiddleware implements Middleware<ConfigEntryValidato
|
||||
public ConfigEntryValidator process(ConfigEntryValidator inner) {
|
||||
return new ConfigEntryValidator() {
|
||||
@Override
|
||||
public <T> ValidationResult<T> validate(ConfigEntry<T> configEntry, T value) {
|
||||
public <T extends @Nullable Object> ValidationResult<T> validate(ConfigEntry<T> configEntry, T value) {
|
||||
return inner.validate(configEntry, value).andThen(v -> validator.validate(configEntry, v));
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull <T> String description(ConfigEntry<T> configEntry) {
|
||||
public <T extends @Nullable Object> String description(ConfigEntry<T> configEntry) {
|
||||
String description = validator.description(configEntry);
|
||||
if (description.isEmpty()) {
|
||||
return inner.description(configEntry);
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
@NullMarked
|
||||
package de.siphalor.tweed5.defaultextensions.validation.api.validators;
|
||||
|
||||
import org.jspecify.annotations.NullMarked;
|
||||
@@ -35,11 +35,13 @@ import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.Value;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jspecify.annotations.NullUnmarked;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@AutoService(ValidationExtension.class)
|
||||
@NullUnmarked
|
||||
public class ValidationExtensionImpl implements ReadWriteRelatedExtension, ValidationExtension, CommentModifyingExtension {
|
||||
private static final ValidationResult<?> PRIMITIVE_IS_NULL_RESULT = ValidationResult.withIssues(
|
||||
null,
|
||||
@@ -47,7 +49,7 @@ public class ValidationExtensionImpl implements ReadWriteRelatedExtension, Valid
|
||||
);
|
||||
private static final ConfigEntryValidator PRIMITIVE_VALIDATOR = new ConfigEntryValidator() {
|
||||
@Override
|
||||
public <T> ValidationResult<T> validate(ConfigEntry<T> configEntry, T value) {
|
||||
public <T> ValidationResult<T> validate(@NotNull ConfigEntry<T> configEntry, @Nullable T value) {
|
||||
if (value == null) {
|
||||
//noinspection unchecked
|
||||
return (ValidationResult<T>) PRIMITIVE_IS_NULL_RESULT;
|
||||
@@ -56,18 +58,18 @@ public class ValidationExtensionImpl implements ReadWriteRelatedExtension, Valid
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull <T> String description(ConfigEntry<T> configEntry) {
|
||||
public <T> String description(@NotNull ConfigEntry<T> configEntry) {
|
||||
return "Value must not be null.";
|
||||
}
|
||||
};
|
||||
private static final ConfigEntryValidator NOOP_VALIDATOR = new ConfigEntryValidator() {
|
||||
@Override
|
||||
public <T> ValidationResult<T> validate(ConfigEntry<T> configEntry, T value) {
|
||||
public <T> ValidationResult<T> validate(@NotNull ConfigEntry<T> configEntry, @Nullable T value) {
|
||||
return ValidationResult.ok(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull <T> String description(ConfigEntry<T> configEntry) {
|
||||
public <T> String description(@NotNull ConfigEntry<T> configEntry) {
|
||||
return "";
|
||||
}
|
||||
};
|
||||
@@ -166,7 +168,7 @@ public class ValidationExtensionImpl implements ReadWriteRelatedExtension, Valid
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> ValidationIssues validate(ConfigEntry<T> entry, T value) {
|
||||
public <T> ValidationIssues validate(@NotNull ConfigEntry<T> entry, @Nullable T value) {
|
||||
PathTracking pathTracking = new PathTracking();
|
||||
ValidatingConfigEntryVisitor validatingVisitor = new ValidatingConfigEntryVisitor(pathTracking);
|
||||
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
@ApiStatus.Internal
|
||||
@NullMarked
|
||||
package de.siphalor.tweed5.defaultextensions.validation.impl;
|
||||
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jspecify.annotations.NullMarked;
|
||||
@@ -1,5 +1,7 @@
|
||||
package de.siphalor.tweed5.defaultextensions.validationfallback.api;
|
||||
|
||||
import org.jspecify.annotations.Nullable;
|
||||
|
||||
public interface ValidationFallbackValue {
|
||||
Object validationFallbackValue();
|
||||
@Nullable Object validationFallbackValue();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
@NullMarked
|
||||
package de.siphalor.tweed5.defaultextensions.validationfallback.api;
|
||||
|
||||
import org.jspecify.annotations.NullMarked;
|
||||
@@ -11,7 +11,7 @@ import de.siphalor.tweed5.defaultextensions.validation.api.result.ValidationIssu
|
||||
import de.siphalor.tweed5.defaultextensions.validation.api.result.ValidationResult;
|
||||
import de.siphalor.tweed5.defaultextensions.validationfallback.api.ValidationFallbackExtension;
|
||||
import de.siphalor.tweed5.defaultextensions.validationfallback.api.ValidationFallbackValue;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
@@ -55,7 +55,7 @@ public class ValidationFallbackExtensionImpl implements ValidationFallbackExtens
|
||||
public ConfigEntryValidator process(ConfigEntryValidator inner) {
|
||||
return new ConfigEntryValidator() {
|
||||
@Override
|
||||
public <T> ValidationResult<T> validate(ConfigEntry<T> configEntry, T value) {
|
||||
public <T extends @Nullable Object> ValidationResult<T> validate(ConfigEntry<T> configEntry, T value) {
|
||||
ValidationResult<T> result = inner.validate(configEntry, value);
|
||||
if (!result.hasError()) {
|
||||
return result;
|
||||
@@ -90,7 +90,7 @@ public class ValidationFallbackExtensionImpl implements ValidationFallbackExtens
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull <T> String description(ConfigEntry<T> configEntry) {
|
||||
public <T> String description(ConfigEntry<T> configEntry) {
|
||||
if (!configEntry.extensionsData().isPatchworkPartSet(ValidationFallbackValue.class)) {
|
||||
return inner.description(configEntry);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
@ApiStatus.Internal
|
||||
@NullMarked
|
||||
package de.siphalor.tweed5.defaultextensions.validationfallback.impl;
|
||||
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jspecify.annotations.NullMarked;
|
||||
Reference in New Issue
Block a user