Skip to content

Commit e0415a9

Browse files
committed
Bump dependencies and add jspecify annotations
1 parent 6d77f38 commit e0415a9

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+184
-104
lines changed

.editorconfig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
[*.java]
2-
ij_continuation_indent_size = 4
2+
ij_continuation_indent_size = 8
33
ij_any_keep_simple_classes_in_one_line = true
44
insert_final_newline = true

common/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
dependencies {
22
compileOnlyApi(libs.bundles.adventure)
33
compileOnlyApi(libs.configurate.yaml)
4+
compileOnlyApi(libs.jspecify)
45
}

common/src/main/java/dev/booky/cloudcore/config/ComponentSerializer.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@
33

44
import net.kyori.adventure.text.Component;
55
import net.kyori.adventure.text.minimessage.MiniMessage;
6+
import org.jspecify.annotations.NullMarked;
67
import org.spongepowered.configurate.serialize.ScalarSerializer;
78
import org.spongepowered.configurate.serialize.SerializationException;
89
import org.spongepowered.configurate.serialize.TypeSerializer;
910

1011
import java.lang.reflect.Type;
1112
import java.util.function.Predicate;
1213

14+
@NullMarked
1315
public final class ComponentSerializer extends ScalarSerializer<Component> {
1416

1517
public static final TypeSerializer<Component> INSTANCE = new ComponentSerializer();

common/src/main/java/dev/booky/cloudcore/config/ConfigurateLoader.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
// Created by booky10 in CloudCore (04:36 10.05.2024.)
33

44
import io.leangen.geantyref.TypeToken;
5-
import org.checkerframework.checker.nullness.qual.Nullable;
5+
import org.jspecify.annotations.NullMarked;
6+
import org.jspecify.annotations.Nullable;
67
import org.spongepowered.configurate.ConfigurationNode;
78
import org.spongepowered.configurate.loader.AbstractConfigurationLoader;
89
import org.spongepowered.configurate.serialize.TypeSerializerCollection;
@@ -22,6 +23,7 @@
2223

2324
import static dev.booky.cloudcore.config.IConfigurateLoaderPlatform.PLATFORM;
2425

26+
@NullMarked
2527
public class ConfigurateLoader<
2628
L extends AbstractConfigurationLoader<?>,
2729
B extends AbstractConfigurationLoader.Builder<B, L>

common/src/main/java/dev/booky/cloudcore/config/EnumSerializer.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@
33

44
import io.leangen.geantyref.GenericTypeReflector;
55
import io.leangen.geantyref.TypeToken;
6+
import org.jspecify.annotations.NullMarked;
67
import org.spongepowered.configurate.serialize.ScalarSerializer;
78
import org.spongepowered.configurate.serialize.SerializationException;
89
import org.spongepowered.configurate.serialize.TypeSerializer;
910

1011
import java.lang.reflect.Type;
1112
import java.util.function.Predicate;
1213

14+
@NullMarked
1315
public final class EnumSerializer extends ScalarSerializer<Enum<?>> {
1416

1517
public static final TypeSerializer<Enum<?>> INSTANCE = new EnumSerializer();

common/src/main/java/dev/booky/cloudcore/config/IConfigurateLoaderPlatform.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@
55
import net.kyori.adventure.key.Key;
66
import net.kyori.adventure.text.Component;
77
import org.jetbrains.annotations.ApiStatus;
8+
import org.jspecify.annotations.NullMarked;
89
import org.spongepowered.configurate.serialize.TypeSerializerCollection;
910

1011
import java.util.Locale;
1112

1213
import static net.kyori.adventure.util.Services.serviceWithFallback;
1314

15+
@NullMarked
1416
@ApiStatus.Internal
1517
public interface IConfigurateLoaderPlatform {
1618

common/src/main/java/dev/booky/cloudcore/config/KeySerializer.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@
22
// Created by booky10 in CloudCore (14:17 10.05.2024.)
33

44
import net.kyori.adventure.key.Key;
5+
import org.jspecify.annotations.NullMarked;
56
import org.spongepowered.configurate.serialize.ScalarSerializer;
67
import org.spongepowered.configurate.serialize.SerializationException;
78
import org.spongepowered.configurate.serialize.TypeSerializer;
89

910
import java.lang.reflect.Type;
1011
import java.util.function.Predicate;
1112

13+
@NullMarked
1214
public class KeySerializer extends ScalarSerializer<Key> {
1315

1416
public static final TypeSerializer<Key> INSTANCE = new KeySerializer();

common/src/main/java/dev/booky/cloudcore/config/LocaleSerializer.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// Created by booky10 in CloudCore (13:15 18.07.23)
33

44
import net.kyori.adventure.translation.Translator;
5+
import org.jspecify.annotations.NullMarked;
56
import org.spongepowered.configurate.serialize.ScalarSerializer;
67
import org.spongepowered.configurate.serialize.SerializationException;
78
import org.spongepowered.configurate.serialize.TypeSerializer;
@@ -10,6 +11,7 @@
1011
import java.util.Locale;
1112
import java.util.function.Predicate;
1213

14+
@NullMarked
1315
public final class LocaleSerializer extends ScalarSerializer<Locale> {
1416

1517
public static final TypeSerializer<Locale> INSTANCE = new LocaleSerializer();
@@ -20,7 +22,11 @@ private LocaleSerializer() {
2022

2123
@Override
2224
public Locale deserialize(Type type, Object obj) throws SerializationException {
23-
return Translator.parseLocale(String.valueOf(obj));
25+
Locale locale = Translator.parseLocale(String.valueOf(obj));
26+
if (locale == null) {
27+
throw new SerializationException("Invalid locale: " + obj);
28+
}
29+
return locale;
2430
}
2531

2632
@Override

common/src/main/java/dev/booky/cloudcore/i18n/AdvancedTagFormatter.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
1111
import net.kyori.adventure.util.Index;
1212
import net.kyori.adventure.util.TriState;
13-
import org.jetbrains.annotations.Nullable;
13+
import org.jspecify.annotations.NullMarked;
14+
import org.jspecify.annotations.Nullable;
1415

1516
import java.text.DecimalFormat;
1617
import java.text.DecimalFormatSymbols;
@@ -20,6 +21,7 @@
2021

2122
import static net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer.plainText;
2223

24+
@NullMarked
2325
final class AdvancedTagFormatter implements TagResolver {
2426

2527
private final List<TranslationArgument> args;
@@ -54,7 +56,7 @@ public AdvancedTagFormatter(List<TranslationArgument> args) {
5456
}
5557
String dynamicFormattingName = args.pop().value();
5658
DynamicFormatting dynamicFormatting = DynamicFormatting.INDEX.valueOr(
57-
dynamicFormattingName, DynamicFormatting.NONE);
59+
dynamicFormattingName, DynamicFormatting.NONE);
5860
return dynamicFormatting.format(args, ctx, arg);
5961
}
6062

@@ -100,7 +102,7 @@ public Tag format(ArgumentQueue args, Context ctx, TranslationArgument arg) {
100102
String value;
101103
do {
102104
value = args.popOr(
103-
() -> "No argument found for " + state).value();
105+
() -> "No argument found for " + state).value();
104106
} while (argOffset-- > 0);
105107
return Tag.inserting(ctx.deserialize(value));
106108
}
@@ -121,8 +123,8 @@ private static NumberFormat getDecimalFormat(ArgumentQueue args) {
121123
}
122124

123125
return localeStr.indexOf('.') < 0
124-
? DecimalFormat.getInstance(Locale.forLanguageTag(localeStr))
125-
: new DecimalFormat(localeStr, DecimalFormatSymbols.getInstance());
126+
? DecimalFormat.getInstance(Locale.forLanguageTag(localeStr))
127+
: new DecimalFormat(localeStr, DecimalFormatSymbols.getInstance());
126128
}
127129

128130
@Override
@@ -140,7 +142,7 @@ public Tag format(ArgumentQueue args, Context ctx, TranslationArgument arg) {
140142
};
141143

142144
private static final Index<String, DynamicFormatting> INDEX =
143-
Index.create(DynamicFormatting::getId, values());
145+
Index.create(DynamicFormatting::getId, values());
144146

145147
private final String id;
146148

@@ -153,8 +155,8 @@ protected static Number asNumber(TranslationArgument arg) {
153155
return (Number) arg.value();
154156
}
155157
String string = arg.value() instanceof Component
156-
? plainText().serialize((Component) arg.value())
157-
: String.valueOf(arg.value());
158+
? plainText().serialize((Component) arg.value())
159+
: String.valueOf(arg.value());
158160
return Double.parseDouble(string);
159161
}
160162

common/src/main/java/dev/booky/cloudcore/i18n/CloudTranslator.java

Lines changed: 33 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
import net.kyori.adventure.translation.GlobalTranslator;
99
import net.kyori.adventure.translation.Translator;
1010
import net.kyori.adventure.util.TriState;
11-
import org.jetbrains.annotations.NotNull;
12-
import org.jetbrains.annotations.Nullable;
11+
import org.jspecify.annotations.NullMarked;
12+
import org.jspecify.annotations.Nullable;
1313

1414
import java.text.MessageFormat;
1515
import java.util.Collection;
@@ -23,6 +23,7 @@
2323
import java.util.stream.Collectors;
2424
import java.util.stream.Stream;
2525

26+
@NullMarked
2627
public final class CloudTranslator implements Translator {
2728

2829
private final ClassLoader classLoader;
@@ -33,20 +34,20 @@ public final class CloudTranslator implements Translator {
3334
final Locale defaultLocale;
3435

3536
private final ReadWriteLock lock = new ReentrantReadWriteLock();
36-
private Map<String, Translation> translations;
37+
private @Nullable Map<String, Translation> translations;
3738

3839
public CloudTranslator(
39-
ClassLoader classLoader,
40-
Keyed translatorName,
41-
Locale... locales
40+
ClassLoader classLoader,
41+
Keyed translatorName,
42+
Locale... locales
4243
) {
4344
this(classLoader, translatorName, List.of(locales));
4445
}
4546

4647
public CloudTranslator(
47-
ClassLoader classLoader,
48-
Keyed translatorName,
49-
Collection<Locale> locales
48+
ClassLoader classLoader,
49+
Keyed translatorName,
50+
Collection<Locale> locales
5051
) {
5152
if (locales.isEmpty()) {
5253
throw new IllegalArgumentException("At least one locale has to be provided");
@@ -97,21 +98,21 @@ private void load0() {
9798
}
9899

99100
this.translations = rawTranslations.entrySet().stream()
100-
// flatten raw translations
101-
.flatMap(rawEntry -> rawEntry.getValue().entrySet().stream()
101+
// flatten raw translations
102+
.flatMap(rawEntry -> rawEntry.getValue().entrySet().stream()
103+
.map(entry -> Map.entry(entry.getKey(),
104+
Map.entry(rawEntry.getKey(), entry.getValue()))))
105+
// group by translation key
106+
.collect(Collectors.toMap(
107+
Map.Entry::getKey,
108+
entry -> Stream.of(entry.getValue()),
109+
Stream::concat
110+
))
111+
.entrySet().stream()
112+
// create translation objects and collect them
102113
.map(entry -> Map.entry(entry.getKey(),
103-
Map.entry(rawEntry.getKey(), entry.getValue()))))
104-
// group by translation key
105-
.collect(Collectors.toMap(
106-
Map.Entry::getKey,
107-
entry -> Stream.of(entry.getValue()),
108-
Stream::concat
109-
))
110-
.entrySet().stream()
111-
// create translation objects and collect them
112-
.map(entry -> Map.entry(entry.getKey(),
113-
new Translation(this, entry.getValue())))
114-
.collect(Collectors.toUnmodifiableMap(Map.Entry::getKey, Map.Entry::getValue));
114+
new Translation(this, entry.getValue())))
115+
.collect(Collectors.toUnmodifiableMap(Map.Entry::getKey, Map.Entry::getValue));
115116

116117
// add as global translator source after loading
117118
GlobalTranslator.translator().addSource(this);
@@ -131,31 +132,34 @@ private Map<String, String> processBundle(Locale locale, ClassLoader classLoader
131132
}
132133

133134
@Override
134-
public @NotNull Key name() {
135+
public Key name() {
135136
return this.translatorName;
136137
}
137138

138139
@Override
139-
public @NotNull TriState hasAnyTranslations() {
140+
public TriState hasAnyTranslations() {
140141
this.lock.readLock().lock();
141142
try {
142-
return TriState.byBoolean(!this.translations.isEmpty());
143+
if (this.translations != null) {
144+
return TriState.byBoolean(!this.translations.isEmpty());
145+
}
146+
return TriState.FALSE;
143147
} finally {
144148
this.lock.readLock().unlock();
145149
}
146150
}
147151

148152
@Override
149-
public @Nullable MessageFormat translate(@NotNull String key, @NotNull Locale locale) {
153+
public @Nullable MessageFormat translate(String key, Locale locale) {
150154
return null; // this translator only supports component translations
151155
}
152156

153157
@Override
154-
public @Nullable Component translate(@NotNull TranslatableComponent component, @NotNull Locale locale) {
158+
public @Nullable Component translate(TranslatableComponent component, Locale locale) {
155159
Translation translation;
156160
this.lock.readLock().lock();
157161
try {
158-
translation = this.translations.get(component.key());
162+
translation = this.translations != null ? this.translations.get(component.key()) : null;
159163
} finally {
160164
this.lock.readLock().unlock();
161165
}

0 commit comments

Comments
 (0)