From 11ab36a8bd2cc0e196f8f51dad5352f8785c08ed Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Maurice=20Eisenbl=C3=A4tter?=
Date: Sun, 14 Dec 2025 04:08:54 +0100
Subject: [PATCH 01/14] chore: replace org.jetbrains.annotations with
org.jspecify.annotations
---
.../cache/AbstractRegionFileCache.java | 24 ++---
.../config/AbstractWorldConfig.java | 9 +-
.../orebfuscator/config/ConfigLookup.java | 39 ++++++---
.../config/OrebfuscatorAdvancedConfig.java | 2 +
.../config/OrebfuscatorBlockFlags.java | 16 ++--
.../config/OrebfuscatorCacheConfig.java | 4 +-
.../config/OrebfuscatorConfig.java | 50 ++++++-----
.../config/OrebfuscatorGeneralConfig.java | 2 +
.../config/OrebfuscatorObfuscationConfig.java | 2 +
.../config/OrebfuscatorProximityConfig.java | 2 +
.../config/api/AdvancedConfig.java | 3 +
.../orebfuscator/config/api/BlockFlags.java | 3 +
.../orebfuscator/config/api/CacheConfig.java | 2 +
.../orebfuscator/config/api/Config.java | 5 +-
.../config/api/GeneralConfig.java | 3 +
.../config/api/ObfuscationConfig.java | 2 +
.../config/api/ProximityConfig.java | 2 +
.../orebfuscator/config/api/WorldConfig.java | 3 +
.../config/api/WorldConfigBundle.java | 8 +-
.../config/components/BlockParser.java | 22 ++---
.../config/components/ConfigBlockValue.java | 19 ++--
.../components/ConfigFunctionValue.java | 10 +--
.../config/components/WeightedBlockList.java | 5 +-
.../config/components/WorldMatcher.java | 6 +-
.../config/context/ConfigMessage.java | 14 +--
.../config/context/ConfigParsingContext.java | 23 +++--
.../context/DefaultConfigParsingContext.java | 24 +++--
.../config/migrations/ConfigMigration.java | 9 +-
.../config/migrations/ConfigMigrationV1.java | 5 +-
.../config/migrations/ConfigMigrationV2.java | 8 +-
.../config/migrations/ConfigMigrationV3.java | 5 +-
.../config/migrations/ConfigMigrationV4.java | 8 +-
.../config/migrations/ConfigMigrator.java | 2 +
.../config/yaml/ConfigurationSection.java | 82 +++++++----------
.../yaml/InvalidConfigurationException.java | 4 +-
.../config/yaml/NodeCommentData.java | 22 ++---
.../config/yaml/YamlConfiguration.java | 25 +++---
.../interop/RegistryAccessor.java | 9 +-
.../orebfuscator/logging/LoggerAccessor.java | 7 +-
.../orebfuscator/logging/OfcLogger.java | 23 +++--
.../orebfuscator/logging/SystemLogger.java | 8 +-
.../orebfuscator/reflect/Reflector.java | 18 ++--
.../reflect/accessor/Accessors.java | 15 ++--
.../accessor/DefaultConstrutorAccessor.java | 6 +-
.../accessor/DefaultFieldAccessor.java | 8 +-
.../accessor/DefaultMethodAccessor.java | 7 +-
.../reflect/accessor/MemberAccessor.java | 4 +-
.../reflect/accessor/MethodAccessor.java | 1 -
.../AbstractExecutablePredicate.java | 49 ++++++-----
.../predicate/AbstractMemberPredicate.java | 71 ++++++++-------
.../reflect/predicate/ClassPredicate.java | 87 +++++++------------
.../predicate/ConstructorPredicate.java | 9 +-
.../reflect/predicate/FieldPredicate.java | 19 ++--
.../reflect/predicate/MethodPredicate.java | 19 ++--
.../predicate/RequirementCollector.java | 12 ++-
.../imprex/orebfuscator/util/BlockPos.java | 12 +--
.../orebfuscator/util/BlockProperties.java | 12 ++-
.../util/BlockStateProperties.java | 3 +
.../imprex/orebfuscator/util/BlockTag.java | 7 +-
.../orebfuscator/util/ChunkCacheKey.java | 14 ++-
.../orebfuscator/util/ChunkDirection.java | 3 +
.../orebfuscator/util/NamespacedKey.java | 43 +++++----
.../imprex/orebfuscator/util/SimpleCache.java | 2 -
.../dev/imprex/orebfuscator/util/Version.java | 2 +
.../orebfuscator/util/WeightedRandom.java | 9 +-
.../orebfuscator/nms/AbstractNmsManager.java | 13 +--
.../cache/AsyncChunkSerializer.java | 12 +--
.../orebfuscator/cache/ChunkSerializer.java | 25 ++----
.../orebfuscator/cache/ObfuscationCache.java | 35 ++++----
.../iterop/BukkitLoggerAccessor.java | 22 ++---
70 files changed, 552 insertions(+), 508 deletions(-)
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/cache/AbstractRegionFileCache.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/cache/AbstractRegionFileCache.java
index 46609b35..4edf76c5 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/cache/AbstractRegionFileCache.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/cache/AbstractRegionFileCache.java
@@ -1,5 +1,6 @@
package dev.imprex.orebfuscator.cache;
+import dev.imprex.orebfuscator.logging.OfcLogger;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
@@ -14,10 +15,13 @@
import dev.imprex.orebfuscator.reflect.accessor.MethodAccessor;
import dev.imprex.orebfuscator.util.ChunkCacheKey;
import dev.imprex.orebfuscator.util.SimpleCache;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
+@NullMarked
public abstract class AbstractRegionFileCache {
- private static MethodAccessor serverGetServer;
+ private static @Nullable MethodAccessor serverGetServer;
protected static T serverHandle(Object server, Class targetClass) {
if (serverGetServer == null) {
@@ -46,25 +50,25 @@ public AbstractRegionFileCache(CacheConfig cacheConfig) {
protected abstract void closeRegionFile(T t) throws IOException;
- protected abstract DataInputStream createInputStream(T t, ChunkCacheKey key) throws IOException;
+ protected abstract @Nullable DataInputStream createInputStream(T t, ChunkCacheKey key) throws IOException;
protected abstract DataOutputStream createOutputStream(T t, ChunkCacheKey key) throws IOException;
- public final DataInputStream createInputStream(ChunkCacheKey key) throws IOException {
+ public final @Nullable DataInputStream createInputStream(ChunkCacheKey key) throws IOException {
T t = this.get(this.cacheConfig.regionFile(key));
- return t != null ? this.createInputStream(t, key) : null;
+ return this.createInputStream(t, key);
}
public final DataOutputStream createOutputStream(ChunkCacheKey key) throws IOException {
T t = this.get(this.cacheConfig.regionFile(key));
- return t != null ? this.createOutputStream(t, key) : null;
+ return this.createOutputStream(t, key);
}
- private final void remove(Map.Entry entry) {
+ private void remove(Map.Entry entry) {
try {
this.closeRegionFile(entry.getValue());
} catch (IOException e) {
- e.printStackTrace();
+ OfcLogger.error(e);
}
}
@@ -123,11 +127,9 @@ public final void clear() {
try {
for (T t : this.regionFiles.values()) {
try {
- if (t != null) {
- this.closeRegionFile(t);
- }
+ this.closeRegionFile(t);
} catch (IOException e) {
- e.printStackTrace();
+ OfcLogger.error(e);
}
}
this.regionFiles.clear();
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/AbstractWorldConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/AbstractWorldConfig.java
index 175fd921..37492f96 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/AbstractWorldConfig.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/AbstractWorldConfig.java
@@ -1,8 +1,5 @@
package dev.imprex.orebfuscator.config;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
import com.google.gson.JsonObject;
import dev.imprex.orebfuscator.config.api.WorldConfig;
import dev.imprex.orebfuscator.config.components.BlockParser;
@@ -17,7 +14,12 @@
import dev.imprex.orebfuscator.util.BlockPos;
import dev.imprex.orebfuscator.util.MathUtil;
import dev.imprex.orebfuscator.util.WeightedRandom;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+import org.jspecify.annotations.NullMarked;
+@NullMarked
public abstract class AbstractWorldConfig implements WorldConfig {
private final String name;
@@ -138,7 +140,6 @@ public boolean shouldObfuscate(int y) {
return y >= this.minY && y <= this.maxY;
}
-
WeightedRandom[] createWeightedRandoms(WorldAccessor world) {
OfcLogger.debug(String.format("Creating weighted randoms for %s for world %s:", name, world));
return WeightedBlockList.create(world, this.weightedBlockLists);
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/ConfigLookup.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/ConfigLookup.java
index 3af7a23f..a344ac43 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/ConfigLookup.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/ConfigLookup.java
@@ -4,6 +4,7 @@
import java.io.InputStream;
import java.net.URI;
import java.nio.file.FileSystem;
+import java.nio.file.FileSystemNotFoundException;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
@@ -16,12 +17,15 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import dev.imprex.orebfuscator.util.Version;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
+@NullMarked
public class ConfigLookup {
private static final Pattern FILENAME_PATTERN = Pattern.compile("config-(?.*)\\.yml");
- public static Version getConfigVersion(Version version) throws IOException {
+ public static @Nullable Version getConfigVersion(Version version) throws IOException {
List versions = discoverConfigs().stream()
.map(FILENAME_PATTERN::matcher)
.filter(Matcher::find)
@@ -41,7 +45,7 @@ public static Version getConfigVersion(Version version) throws IOException {
return null;
}
- public static InputStream loadConfig(Version version) {
+ public static @Nullable InputStream loadConfig(Version version) {
String path = String.format("/config/config-%s.yml", version);
return ConfigLookup.class.getResourceAsStream(path);
}
@@ -61,17 +65,12 @@ private static List discoverConfigs() throws IOException {
if (location.getPath().endsWith(".jar")) {
URI jar = URI.create("jar:" + location);
- try (FileSystem fileSystem = FileSystems.newFileSystem(jar, Map.of())) {
- Path configDir = fileSystem.getPath("/config/");
- if (!Files.isDirectory(configDir)) {
- return Collections.emptyList();
- }
-
- try (var stream = Files.list(configDir)) {
- return stream
- .map(configDir::relativize)
- .map(Path::toString)
- .toList();
+ try {
+ FileSystem fileSystem = FileSystems.getFileSystem(jar);
+ return discoverConfigs(fileSystem);
+ } catch (FileSystemNotFoundException e) {
+ try (var fs = FileSystems.newFileSystem(jar, Map.of())) {
+ return discoverConfigs(fs);
}
}
}
@@ -97,4 +96,18 @@ private static List discoverConfigs() throws IOException {
.toList();
}
}
+
+ private static List discoverConfigs(FileSystem fileSystem) throws IOException {
+ Path configDir = fileSystem.getPath("/config/");
+ if (!Files.isDirectory(configDir)) {
+ return Collections.emptyList();
+ }
+
+ try (var stream = Files.list(configDir)) {
+ return stream
+ .map(configDir::relativize)
+ .map(Path::toString)
+ .toList();
+ }
+ }
}
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorAdvancedConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorAdvancedConfig.java
index a10a236b..e5f03eaa 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorAdvancedConfig.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorAdvancedConfig.java
@@ -5,7 +5,9 @@
import dev.imprex.orebfuscator.config.context.ConfigParsingContext;
import dev.imprex.orebfuscator.config.yaml.ConfigurationSection;
import dev.imprex.orebfuscator.logging.OfcLogger;
+import org.jspecify.annotations.NullMarked;
+@NullMarked
public class OrebfuscatorAdvancedConfig implements AdvancedConfig {
private boolean verbose = false;
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorBlockFlags.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorBlockFlags.java
index 81832563..12375797 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorBlockFlags.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorBlockFlags.java
@@ -6,15 +6,18 @@
import dev.imprex.orebfuscator.interop.RegistryAccessor;
import dev.imprex.orebfuscator.util.BlockProperties;
import dev.imprex.orebfuscator.util.BlockStateProperties;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
+@NullMarked
public class OrebfuscatorBlockFlags implements BlockFlags {
private static final BlockFlags EMPTY_FLAGS = new EmptyBlockFlags();
- static BlockFlags create(RegistryAccessor registry, OrebfuscatorObfuscationConfig worldConfig,
- OrebfuscatorProximityConfig proximityConfig) {
- if ((worldConfig != null && worldConfig.isEnabled()) || (proximityConfig != null
- && proximityConfig.isEnabled())) {
+ static BlockFlags create(RegistryAccessor registry,
+ @Nullable OrebfuscatorObfuscationConfig worldConfig,
+ @Nullable OrebfuscatorProximityConfig proximityConfig) {
+ if ((worldConfig != null && worldConfig.isEnabled()) || (proximityConfig != null && proximityConfig.isEnabled())) {
return new OrebfuscatorBlockFlags(registry, worldConfig, proximityConfig);
}
return EMPTY_FLAGS;
@@ -22,8 +25,9 @@ static BlockFlags create(RegistryAccessor registry, OrebfuscatorObfuscationConfi
private final int[] blockFlags;
- private OrebfuscatorBlockFlags(RegistryAccessor registry, OrebfuscatorObfuscationConfig worldConfig,
- OrebfuscatorProximityConfig proximityConfig) {
+ private OrebfuscatorBlockFlags(RegistryAccessor registry,
+ @Nullable OrebfuscatorObfuscationConfig worldConfig,
+ @Nullable OrebfuscatorProximityConfig proximityConfig) {
this.blockFlags = new int[registry.getUniqueBlockStateCount()];
if (worldConfig != null && worldConfig.isEnabled()) {
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorCacheConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorCacheConfig.java
index f4b83243..427f9d96 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorCacheConfig.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorCacheConfig.java
@@ -13,7 +13,9 @@
import dev.imprex.orebfuscator.interop.ServerAccessor;
import dev.imprex.orebfuscator.logging.OfcLogger;
import dev.imprex.orebfuscator.util.ChunkCacheKey;
+import org.jspecify.annotations.NullMarked;
+@NullMarked
public class OrebfuscatorCacheConfig implements CacheConfig {
private final Path worldDirectory;
@@ -145,7 +147,7 @@ public Path baseDirectory() {
@Override
public Path regionFile(ChunkCacheKey key) {
- return this.baseDirectory.resolve(key.world())
+ return this.baseDirectory.resolve(key.world().replace(":", "_"))
.resolve("r." + (key.x() >> 5) + "." + (key.z() >> 5) + ".mca");
}
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorConfig.java
index 6c2ca44b..a44aad63 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorConfig.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorConfig.java
@@ -13,6 +13,9 @@
import java.util.WeakHashMap;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
+import java.util.random.RandomGenerator;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
import com.google.common.hash.Hashing;
import com.google.gson.JsonObject;
import dev.imprex.orebfuscator.config.api.AdvancedConfig;
@@ -38,6 +41,7 @@
import dev.imprex.orebfuscator.util.Version;
import dev.imprex.orebfuscator.util.WeightedRandom;
+@NullMarked
public class OrebfuscatorConfig implements Config {
private static final int CONFIG_VERSION = 5;
@@ -49,15 +53,15 @@ public class OrebfuscatorConfig implements Config {
private final List obfuscationConfigs = new ArrayList<>();
private final List proximityConfigs = new ArrayList<>();
- private final Map worldConfigBundles = new WeakHashMap<>();
+ private final Map worldConfigBundles = new WeakHashMap<>();
private final ReadWriteLock lock = new ReentrantReadWriteLock();
private final ServerAccessor server;
private final Path path;
private final YamlConfiguration configuration;
- private byte[] systemHash;
- private String configReport;
+ private byte[] systemHash = new byte[0];
+ private @Nullable String configReport;
public OrebfuscatorConfig(ServerAccessor server) {
this.server = server;
@@ -75,6 +79,10 @@ public YamlConfiguration loadConfiguration() {
Version version = this.server.getMinecraftVersion();
Version configVersion = ConfigLookup.getConfigVersion(version);
+ if (configVersion == null) {
+ throw new InvalidConfigurationException(
+ "No config found and can't find default config for your version");
+ }
OfcLogger.info(
String.format("No config found, creating default config for version %s and above", configVersion));
@@ -91,12 +99,14 @@ public YamlConfiguration loadConfiguration() {
this.deserialize(configuration, context);
this.configReport = context.report();
- if (context.hasErrors()) {
- OfcLogger.error(this.configReport, null);
- throw new IllegalArgumentException(
- "Can't parse config due to errors, Orebfuscator will now disable itself!");
- } else if (this.configReport != null) {
- OfcLogger.warn(this.configReport);
+ if (this.configReport != null) {
+ if (context.hasErrors()) {
+ OfcLogger.error(this.configReport, null);
+ throw new InvalidConfigurationException(
+ "Can't parse config due to errors, Orebfuscator will now disable itself!");
+ } else {
+ OfcLogger.warn(this.configReport);
+ }
}
this.systemHash = this.calculateSystemHash(configuration);
@@ -120,7 +130,7 @@ public void store() {
private byte[] calculateSystemHash(YamlConfiguration configuration) throws IOException {
return Hashing.murmur3_128().newHasher()
- .putBytes(this.server.getOrebfuscatorVersion().getBytes(StandardCharsets.UTF_8))
+ .putBytes(this.server.getOrebfuscatorVersion().toString().getBytes(StandardCharsets.UTF_8))
.putBytes(this.server.getMinecraftVersion().toString().getBytes(StandardCharsets.UTF_8))
.putBytes(configuration.withoutComments().getBytes(StandardCharsets.UTF_8))
.hash().asBytes();
@@ -246,7 +256,7 @@ public byte[] systemHash() {
}
@Override
- public String report() {
+ public @Nullable String report() {
return configReport;
}
@@ -330,8 +340,8 @@ private OrebfuscatorWorldConfigBundle getWorldConfigBundle(WorldAccessor world)
private class OrebfuscatorWorldConfigBundle implements WorldConfigBundle {
- private final OrebfuscatorObfuscationConfig obfuscationConfig;
- private final OrebfuscatorProximityConfig proximityConfig;
+ private final @Nullable OrebfuscatorObfuscationConfig obfuscationConfig;
+ private final @Nullable OrebfuscatorProximityConfig proximityConfig;
private final BlockFlags blockFlags;
private final boolean needsObfuscation;
@@ -343,8 +353,8 @@ private class OrebfuscatorWorldConfigBundle implements WorldConfigBundle {
private final int maxSectionIndex;
private final WorldAccessor world;
- private final WeightedRandom[] obfuscationRandoms;
- private final WeightedRandom[] proximityRandoms;
+ private final WeightedRandom @Nullable [] obfuscationRandoms;
+ private final WeightedRandom @Nullable [] proximityRandoms;
public OrebfuscatorWorldConfigBundle(WorldAccessor world) {
String worldName = world.getName();
@@ -367,13 +377,13 @@ public OrebfuscatorWorldConfigBundle(WorldAccessor world) {
this.minSectionIndex = world.getSectionIndex(this.minY);
this.maxSectionIndex = world.getSectionIndex(this.maxY - 1) + 1;
- this.obfuscationRandoms = this.obfuscationConfig != null
+ this.obfuscationRandoms = obfuscationConfig != null && obfuscationConfig.isEnabled()
? this.obfuscationConfig.createWeightedRandoms(world) : null;
- this.proximityRandoms = this.proximityConfig != null
+ this.proximityRandoms = proximityConfig != null && proximityConfig.isEnabled()
? this.proximityConfig.createWeightedRandoms(world) : null;
}
- private T findConfig(Collection configs, String worldName,
+ private @Nullable T findConfig(Collection configs, String worldName,
String configType) {
List matchingConfigs = configs.stream()
.filter(config -> config.matchesWorldName(worldName))
@@ -398,12 +408,12 @@ public BlockFlags blockFlags() {
}
@Override
- public ObfuscationConfig obfuscation() {
+ public @Nullable ObfuscationConfig obfuscation() {
return this.obfuscationConfig;
}
@Override
- public ProximityConfig proximity() {
+ public @Nullable ProximityConfig proximity() {
return this.proximityConfig;
}
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorGeneralConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorGeneralConfig.java
index 4dea6850..647a950d 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorGeneralConfig.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorGeneralConfig.java
@@ -3,7 +3,9 @@
import dev.imprex.orebfuscator.config.api.GeneralConfig;
import dev.imprex.orebfuscator.config.context.ConfigParsingContext;
import dev.imprex.orebfuscator.config.yaml.ConfigurationSection;
+import org.jspecify.annotations.NullMarked;
+@NullMarked
public class OrebfuscatorGeneralConfig implements GeneralConfig {
private boolean checkForUpdates = true;
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorObfuscationConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorObfuscationConfig.java
index e1dc29b1..3ac4996a 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorObfuscationConfig.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorObfuscationConfig.java
@@ -11,7 +11,9 @@
import dev.imprex.orebfuscator.config.context.ConfigMessage;
import dev.imprex.orebfuscator.config.context.ConfigParsingContext;
import dev.imprex.orebfuscator.config.yaml.ConfigurationSection;
+import org.jspecify.annotations.NullMarked;
+@NullMarked
public class OrebfuscatorObfuscationConfig extends AbstractWorldConfig implements ObfuscationConfig {
private boolean layerObfuscation = false;
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorProximityConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorProximityConfig.java
index 509c8b7a..0ebab9bc 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorProximityConfig.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/OrebfuscatorProximityConfig.java
@@ -15,7 +15,9 @@
import dev.imprex.orebfuscator.config.context.ConfigParsingContext;
import dev.imprex.orebfuscator.config.yaml.ConfigurationSection;
import dev.imprex.orebfuscator.util.BlockProperties;
+import org.jspecify.annotations.NullMarked;
+@NullMarked
public class OrebfuscatorProximityConfig extends AbstractWorldConfig implements ProximityConfig {
private int distance = 24;
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/AdvancedConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/AdvancedConfig.java
index 93427ce5..83035c4b 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/AdvancedConfig.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/AdvancedConfig.java
@@ -1,5 +1,8 @@
package dev.imprex.orebfuscator.config.api;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
public interface AdvancedConfig {
int obfuscationThreads();
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/BlockFlags.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/BlockFlags.java
index 98e36a54..76db1352 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/BlockFlags.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/BlockFlags.java
@@ -1,5 +1,8 @@
package dev.imprex.orebfuscator.config.api;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
public interface BlockFlags {
int FLAG_OBFUSCATE = 1;
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/CacheConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/CacheConfig.java
index ae4569e7..b3c7ee57 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/CacheConfig.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/CacheConfig.java
@@ -2,7 +2,9 @@
import java.nio.file.Path;
import dev.imprex.orebfuscator.util.ChunkCacheKey;
+import org.jspecify.annotations.NullMarked;
+@NullMarked
public interface CacheConfig {
boolean enabled();
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/Config.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/Config.java
index 5cd05f26..e3544330 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/Config.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/Config.java
@@ -1,12 +1,15 @@
package dev.imprex.orebfuscator.config.api;
import dev.imprex.orebfuscator.interop.WorldAccessor;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
+@NullMarked
public interface Config {
byte[] systemHash();
- String report();
+ @Nullable String report();
GeneralConfig general();
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/GeneralConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/GeneralConfig.java
index 96a5972c..7f50c251 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/GeneralConfig.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/GeneralConfig.java
@@ -1,5 +1,8 @@
package dev.imprex.orebfuscator.config.api;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
public interface GeneralConfig {
boolean checkForUpdates();
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/ObfuscationConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/ObfuscationConfig.java
index ddb22cff..a8dd2a62 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/ObfuscationConfig.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/ObfuscationConfig.java
@@ -1,7 +1,9 @@
package dev.imprex.orebfuscator.config.api;
import dev.imprex.orebfuscator.config.components.ConfigBlockValue;
+import org.jspecify.annotations.NullMarked;
+@NullMarked
public interface ObfuscationConfig extends WorldConfig {
boolean layerObfuscation();
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/ProximityConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/ProximityConfig.java
index b529f4e0..ec31fa0e 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/ProximityConfig.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/ProximityConfig.java
@@ -5,7 +5,9 @@
import org.joml.Matrix4f;
import dev.imprex.orebfuscator.config.components.ConfigBlockValue;
+import org.jspecify.annotations.NullMarked;
+@NullMarked
public interface ProximityConfig extends WorldConfig {
int distance();
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/WorldConfig.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/WorldConfig.java
index 8b19b235..f0b3e2a0 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/WorldConfig.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/WorldConfig.java
@@ -1,5 +1,8 @@
package dev.imprex.orebfuscator.config.api;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
public interface WorldConfig {
boolean isEnabled();
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/WorldConfigBundle.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/WorldConfigBundle.java
index ba33f936..85603f68 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/WorldConfigBundle.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/api/WorldConfigBundle.java
@@ -1,12 +1,16 @@
package dev.imprex.orebfuscator.config.api;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
+
+@NullMarked
public interface WorldConfigBundle {
BlockFlags blockFlags();
- ObfuscationConfig obfuscation();
+ @Nullable ObfuscationConfig obfuscation();
- ProximityConfig proximity();
+ @Nullable ProximityConfig proximity();
boolean needsObfuscation();
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/BlockParser.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/BlockParser.java
index 92743c63..355082c8 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/BlockParser.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/BlockParser.java
@@ -3,29 +3,29 @@
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
-import org.jetbrains.annotations.NotNull;
import dev.imprex.orebfuscator.config.context.ConfigMessage;
import dev.imprex.orebfuscator.config.context.ConfigParsingContext;
import dev.imprex.orebfuscator.interop.RegistryAccessor;
import dev.imprex.orebfuscator.util.BlockProperties;
import dev.imprex.orebfuscator.util.BlockTag;
+import org.jspecify.annotations.NullMarked;
+@NullMarked
public class BlockParser {
public static BlockParser.Factory factory(RegistryAccessor registryAccessor) {
return new Factory(registryAccessor);
}
- private final @NotNull RegistryAccessor registry;
+ private final RegistryAccessor registry;
private final boolean excludeAir;
- private BlockParser(@NotNull RegistryAccessor registry, boolean excludeAir) {
+ private BlockParser(RegistryAccessor registry, boolean excludeAir) {
this.registry = Objects.requireNonNull(registry);
this.excludeAir = excludeAir;
}
- @NotNull
- public ConfigBlockValue parse(@NotNull ConfigParsingContext context, @NotNull String value) {
+ public ConfigBlockValue parse(ConfigParsingContext context, String value) {
var parsed = ConfigFunctionValue.parse(value);
if (parsed != null) {
return switch (parsed.function()) {
@@ -40,8 +40,7 @@ public ConfigBlockValue parse(@NotNull ConfigParsingContext context, @NotNull St
}
}
- @NotNull
- private ConfigBlockValue parseBlockTag(@NotNull ConfigParsingContext context, @NotNull String value) {
+ private ConfigBlockValue parseBlockTag(ConfigParsingContext context, String value) {
BlockTag tag = registry.getBlockTagByName(value);
if (tag == null) {
context.warn(ConfigMessage.BLOCK_TAG_UNKNOWN, value);
@@ -76,8 +75,7 @@ private ConfigBlockValue parseBlockTag(@NotNull ConfigParsingContext context, @N
return ConfigBlockValue.tag(tag, blocks);
}
- @NotNull
- private ConfigBlockValue parseBlock(@NotNull ConfigParsingContext context, @NotNull String value) {
+ private ConfigBlockValue parseBlock(ConfigParsingContext context, String value) {
BlockProperties block = registry.getBlockByName(value);
if (block == null) {
context.warn(ConfigMessage.BLOCK_UNKNOWN, value);
@@ -92,14 +90,10 @@ private ConfigBlockValue parseBlock(@NotNull ConfigParsingContext context, @NotN
public static class Factory {
- private final @NotNull RegistryAccessor registry;
-
private final BlockParser excludeAir;
private final BlockParser includeAir;
- public Factory(@NotNull RegistryAccessor registry) {
- this.registry = Objects.requireNonNull(registry);
-
+ public Factory(RegistryAccessor registry) {
this.excludeAir = new BlockParser(registry, true);
this.includeAir = new BlockParser(registry, false);
}
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/ConfigBlockValue.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/ConfigBlockValue.java
index 4bee4daf..ef90cdbb 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/ConfigBlockValue.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/ConfigBlockValue.java
@@ -4,15 +4,16 @@
import java.util.Collections;
import java.util.Objects;
import java.util.Set;
-import org.jetbrains.annotations.NotNull;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
import dev.imprex.orebfuscator.util.BlockProperties;
import dev.imprex.orebfuscator.util.BlockTag;
+import org.jspecify.annotations.NullMarked;
-public record ConfigBlockValue(@NotNull String value, @NotNull Set blocks) implements
+@NullMarked
+public record ConfigBlockValue(String value, Set blocks) implements
Comparable {
private static final JsonElement INVALID = new JsonPrimitive("invalid");
@@ -30,7 +31,7 @@ public static JsonObject toJson(Collection extends ConfigBlockValue> values) {
array.add(block.getKey().toString());
}
object.add(entry.value(), array);
- } else if (entry.blocks().size() > 0) {
+ } else if (!entry.blocks().isEmpty()) {
object.add(entry.value(), VALID);
} else {
object.add(entry.value(), INVALID);
@@ -40,23 +41,19 @@ public static JsonObject toJson(Collection extends ConfigBlockValue> values) {
return object;
}
- @NotNull
- public static ConfigBlockValue invalid(@NotNull String value) {
+ public static ConfigBlockValue invalid(String value) {
return new ConfigBlockValue(value, Collections.emptySet());
}
- @NotNull
- public static ConfigBlockValue block(@NotNull BlockProperties block) {
+ public static ConfigBlockValue block(BlockProperties block) {
return new ConfigBlockValue(block.getKey().toString(), Set.of(block));
}
- @NotNull
- public static ConfigBlockValue invalidTag(@NotNull String value) {
+ public static ConfigBlockValue invalidTag(String value) {
return new ConfigBlockValue(String.format("tag(%s)", value), Collections.emptySet());
}
- @NotNull
- public static ConfigBlockValue tag(@NotNull BlockTag tag, @NotNull Set blocks) {
+ public static ConfigBlockValue tag(BlockTag tag, Set blocks) {
return new ConfigBlockValue(String.format("tag(%s)", tag.key()), Collections.unmodifiableSet(blocks));
}
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/ConfigFunctionValue.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/ConfigFunctionValue.java
index 9f456bf7..dde3c4fc 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/ConfigFunctionValue.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/ConfigFunctionValue.java
@@ -2,15 +2,15 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
-public record ConfigFunctionValue(@NotNull String function, @NotNull String argument) {
+@NullMarked
+public record ConfigFunctionValue(String function, String argument) {
private static final Pattern CONFIG_FUNCTION_PATTERN = Pattern.compile("^(?\\w+)\\((?.+)\\)$");
- @Nullable
- public static ConfigFunctionValue parse(@NotNull String value) {
+ public static @Nullable ConfigFunctionValue parse(String value) {
Matcher matcher = CONFIG_FUNCTION_PATTERN.matcher(value);
if (matcher.find()) {
String function = matcher.group("function");
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WeightedBlockList.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WeightedBlockList.java
index 8973f914..6fec6405 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WeightedBlockList.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WeightedBlockList.java
@@ -1,5 +1,6 @@
package dev.imprex.orebfuscator.config.components;
+import dev.imprex.orebfuscator.util.BlockProperties;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
@@ -16,7 +17,9 @@
import dev.imprex.orebfuscator.util.BlockStateProperties;
import dev.imprex.orebfuscator.util.MathUtil;
import dev.imprex.orebfuscator.util.WeightedRandom;
+import org.jspecify.annotations.NullMarked;
+@NullMarked
public class WeightedBlockList {
public static WeightedRandom[] create(WorldAccessor world, List lists) {
@@ -45,7 +48,7 @@ public static WeightedRandom[] create(WorldAccessor world, List entry : list.blocks.entrySet()) {
// TODO: add support for other block states in future
var blockStates = entry.getKey().blocks().stream()
- .map(block -> block.getDefaultBlockState())
+ .map(BlockProperties::getDefaultBlockState)
.collect(Collectors.toSet());
double weight = (double) entry.getValue() / (double) blockStates.size();
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WorldMatcher.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WorldMatcher.java
index 40beacd3..be3b4dd4 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WorldMatcher.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/components/WorldMatcher.java
@@ -2,12 +2,12 @@
import java.util.function.Predicate;
import java.util.regex.Pattern;
-import org.jetbrains.annotations.NotNull;
+import org.jspecify.annotations.NullMarked;
+@NullMarked
public class WorldMatcher implements Predicate {
- @NotNull
- public static WorldMatcher parseMatcher(@NotNull String value) {
+ public static WorldMatcher parseMatcher(String value) {
var parsed = ConfigFunctionValue.parse(value);
if (parsed != null && parsed.function().equals("regex")) {
return new WorldMatcher(parseRegexMatcher(parsed.argument()), Type.REGEX);
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/context/ConfigMessage.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/context/ConfigMessage.java
index 2aa95355..8dcc4a71 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/context/ConfigMessage.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/context/ConfigMessage.java
@@ -1,9 +1,10 @@
package dev.imprex.orebfuscator.config.context;
import org.jetbrains.annotations.Contract;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
+@NullMarked
public class ConfigMessage {
public static final ConfigMessage MISSING_OR_EMPTY = fixed("is missing or empty");
@@ -30,25 +31,24 @@ public class ConfigMessage {
public static final ConfigMessage BLOCK_UNKNOWN = dynamic("skipping unknown block '%s'");
public static final ConfigMessage BLOCK_AIR = dynamic("skipping air block '%s'");
- private static ConfigMessage fixed(@NotNull String message) {
+ private static ConfigMessage fixed(String message) {
return new ConfigMessage(message, true);
}
- private static ConfigMessage dynamic(@NotNull String message) {
+ private static ConfigMessage dynamic(String message) {
return new ConfigMessage(message, false);
}
private final String message;
private final boolean fixed;
- private ConfigMessage(@NotNull String message, boolean fixed) {
+ private ConfigMessage(String message, boolean fixed) {
this.message = message;
this.fixed = fixed;
}
- @NotNull
@Contract(pure = true)
- public String format(@Nullable Object... arguments) {
+ public String format(Object @Nullable ... arguments) {
return this.fixed
? this.message
: String.format(this.message, arguments);
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/context/ConfigParsingContext.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/context/ConfigParsingContext.java
index 74f8a8cb..30164ec4 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/context/ConfigParsingContext.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/context/ConfigParsingContext.java
@@ -1,8 +1,8 @@
package dev.imprex.orebfuscator.config.context;
import org.jetbrains.annotations.Contract;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
/**
* Represents a context used during configuration parsing to track and collect warnings and errors.
@@ -16,6 +16,7 @@
* individually without affecting the entire configuration.
*
*/
+@NullMarked
public interface ConfigParsingContext {
/**
@@ -25,8 +26,7 @@ public interface ConfigParsingContext {
* @param isolateErrors Whether errors in this child context should be isolated from the parent.
* @return An existing or newly created {@code ConfigParsingContext} instance for the given path.
*/
- @NotNull
- ConfigParsingContext section(@NotNull String path, boolean isolateErrors);
+ ConfigParsingContext section(String path, boolean isolateErrors);
/**
* Creates or retrieves an existing child context for the specified path without isolating errors.
@@ -34,8 +34,7 @@ public interface ConfigParsingContext {
* @param path The relative path of the child context.
* @return An existing or newly created {@code ConfigParsingContext} instance for the given path.
*/
- @NotNull
- default ConfigParsingContext section(@NotNull String path) {
+ default ConfigParsingContext section(String path) {
return section(path, false);
}
@@ -45,7 +44,7 @@ default ConfigParsingContext section(@NotNull String path) {
* @param message The warning message to be logged.
* @param arguments Optional arguments used to format the message.
*/
- void warn(@NotNull ConfigMessage message, @Nullable Object... arguments);
+ void warn(ConfigMessage message, Object @Nullable ... arguments);
/**
* Adds a warning message to the context of the specified path.
@@ -54,7 +53,7 @@ default ConfigParsingContext section(@NotNull String path) {
* @param message The warning message to be logged.
* @param arguments Optional arguments used to format the message.
*/
- void warn(@NotNull String path, @NotNull ConfigMessage message, @Nullable Object... arguments);
+ void warn(String path, ConfigMessage message, Object @Nullable ... arguments);
/**
* Determines whether a subsystem should remain enabled based on the presence of errors.
@@ -82,7 +81,7 @@ default boolean disableIfError(boolean enabled) {
* @param message The error message to be logged.
* @param arguments Optional arguments used to format the message.
*/
- void error(@NotNull ConfigMessage message, @Nullable Object... arguments);
+ void error(ConfigMessage message, Object @Nullable ... arguments);
/**
* Adds an error message to the context of the specified path.
@@ -91,7 +90,7 @@ default boolean disableIfError(boolean enabled) {
* @param message The error message to be logged.
* @param arguments Optional arguments used to format the message.
*/
- void error(@NotNull String path, @NotNull ConfigMessage message, @Nullable Object... arguments);
+ void error(String path, ConfigMessage message, Object @Nullable ... arguments);
/**
* Adds an error if the specified value is below the minimum allowed value.
@@ -100,7 +99,7 @@ default boolean disableIfError(boolean enabled) {
* @param min The minimum allowed value.
* @param value The actual value to be checked.
*/
- default void errorMinValue(@NotNull String path, long min, long value) {
+ default void errorMinValue(String path, long min, long value) {
if (value < min) {
error(path, ConfigMessage.VALUE_MIN, value, min);
}
@@ -114,7 +113,7 @@ default void errorMinValue(@NotNull String path, long min, long value) {
* @param max The maximum allowed value.
* @param value The actual value to be checked.
*/
- default void errorMinMaxValue(@NotNull String path, long min, long max, long value) {
+ default void errorMinMaxValue(String path, long min, long max, long value) {
if (value < min || value > max) {
error(path, ConfigMessage.VALUE_MIN_MAX, value, min, max);
}
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/context/DefaultConfigParsingContext.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/context/DefaultConfigParsingContext.java
index b8404140..2ef1573a 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/context/DefaultConfigParsingContext.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/context/DefaultConfigParsingContext.java
@@ -6,11 +6,11 @@
import java.util.List;
import java.util.Map;
import java.util.Objects;
-
import org.jetbrains.annotations.Contract;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import org.jspecify.annotations.Nullable;
+import org.jspecify.annotations.NullMarked;
+@NullMarked
public class DefaultConfigParsingContext implements ConfigParsingContext {
private static final String ANSI_RESET = "\u001B[m";
@@ -34,34 +34,33 @@ private DefaultConfigParsingContext(@Nullable DefaultConfigParsingContext parent
}
@Override
- @NotNull
- public DefaultConfigParsingContext section(@NotNull String path, boolean isolateErrors) {
+ public DefaultConfigParsingContext section(String path, boolean isolateErrors) {
DefaultConfigParsingContext context = getContext(path);
context.isolateErrors = isolateErrors;
return context;
}
@Override
- public void warn(@NotNull ConfigMessage message, @Nullable Object... arguments) {
+ public void warn(ConfigMessage message, Object @Nullable ... arguments) {
Objects.requireNonNull(message, "message can't be null");
this.messages.add(new Message(false, message.format(arguments)));
}
@Override
- public void warn(@NotNull String path, @NotNull ConfigMessage message, @Nullable Object... arguments) {
+ public void warn(String path, ConfigMessage message, Object @Nullable ... arguments) {
getContext(path).warn(message, arguments);
}
@Override
- public void error(@NotNull ConfigMessage message, @Nullable Object... arguments) {
+ public void error(ConfigMessage message, Object @Nullable ... arguments) {
Objects.requireNonNull(message, "message can't be null");
this.messages.add(new Message(true, message.format(arguments)));
}
@Override
- public void error(@NotNull String path, @NotNull ConfigMessage message, @Nullable Object... arguments) {
+ public void error(String path, ConfigMessage message, Object @Nullable ... arguments) {
getContext(path).error(message, arguments);
}
@@ -83,7 +82,7 @@ public boolean hasErrors() {
return false;
}
- private DefaultConfigParsingContext getContext(@NotNull String path) {
+ private DefaultConfigParsingContext getContext(String path) {
Objects.requireNonNull(path, "context path can't be null");
DefaultConfigParsingContext context = this;
@@ -136,8 +135,7 @@ private StringBuilder buildReport(final StringBuilder builder) {
return builder;
}
- @Nullable
- public String report() {
+ public @Nullable String report() {
int messageCount = this.getMessageCount();
if (messageCount == 0) {
return null;
@@ -153,7 +151,7 @@ public String report() {
.toString();
}
- private record Message(boolean isError, @NotNull String content) implements Comparable {
+ private record Message(boolean isError, String content) implements Comparable {
@Override
public int compareTo(Message o) {
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/migrations/ConfigMigration.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/migrations/ConfigMigration.java
index d455e41b..3c02c110 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/migrations/ConfigMigration.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/migrations/ConfigMigration.java
@@ -4,18 +4,19 @@
import java.util.Map;
import java.util.Objects;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
import dev.imprex.orebfuscator.config.yaml.ConfigurationSection;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
+@NullMarked
interface ConfigMigration {
int sourceVersion();
- @NotNull ConfigurationSection migrate(@NotNull ConfigurationSection root);
+ ConfigurationSection migrate(ConfigurationSection root);
- static void migrateNames(@Nullable ConfigurationSection section, @NotNull List> mapping) {
+ static void migrateNames(@Nullable ConfigurationSection section, List> mapping) {
Objects.requireNonNull(mapping, "mappings can't be null");
if (section == null) {
return;
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/migrations/ConfigMigrationV1.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/migrations/ConfigMigrationV1.java
index e752b16f..f8565d91 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/migrations/ConfigMigrationV1.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/migrations/ConfigMigrationV1.java
@@ -5,10 +5,11 @@
import java.util.List;
import java.util.Map;
-import org.jetbrains.annotations.NotNull;
import dev.imprex.orebfuscator.config.yaml.ConfigurationSection;
+import org.jspecify.annotations.NullMarked;
+@NullMarked
class ConfigMigrationV1 implements ConfigMigration {
@Override
@@ -17,7 +18,7 @@ public int sourceVersion() {
}
@Override
- public @NotNull ConfigurationSection migrate(@NotNull ConfigurationSection root) {
+ public ConfigurationSection migrate(ConfigurationSection root) {
// check if config is still using old path
String obfuscationConfigPath = root.contains("world") ? "world" : "obfuscation";
convertSectionListToSection(root, obfuscationConfigPath);
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/migrations/ConfigMigrationV2.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/migrations/ConfigMigrationV2.java
index 4ceb1b3a..89e1ccb9 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/migrations/ConfigMigrationV2.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/migrations/ConfigMigrationV2.java
@@ -1,9 +1,11 @@
package dev.imprex.orebfuscator.config.migrations;
-import org.jetbrains.annotations.NotNull;
import dev.imprex.orebfuscator.config.yaml.ConfigurationSection;
import dev.imprex.orebfuscator.util.BlockPos;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
+@NullMarked
class ConfigMigrationV2 implements ConfigMigration {
@Override
@@ -12,13 +14,13 @@ public int sourceVersion() {
}
@Override
- public @NotNull ConfigurationSection migrate(@NotNull ConfigurationSection root) {
+ public ConfigurationSection migrate(ConfigurationSection root) {
convertRandomBlocksToSections(root.getSection("obfuscation"));
convertRandomBlocksToSections(root.getSection("proximity"));
return root;
}
- private static void convertRandomBlocksToSections(ConfigurationSection configContainer) {
+ private static void convertRandomBlocksToSections(@Nullable ConfigurationSection configContainer) {
if (configContainer == null) {
return;
}
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/migrations/ConfigMigrationV3.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/migrations/ConfigMigrationV3.java
index 460dab21..ec5c8b93 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/migrations/ConfigMigrationV3.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/migrations/ConfigMigrationV3.java
@@ -2,10 +2,11 @@
import java.util.List;
import java.util.Map;
-import org.jetbrains.annotations.NotNull;
import dev.imprex.orebfuscator.config.yaml.ConfigurationSection;
import dev.imprex.orebfuscator.util.BlockPos;
+import org.jspecify.annotations.NullMarked;
+@NullMarked
class ConfigMigrationV3 implements ConfigMigration {
@Override
@@ -14,7 +15,7 @@ public int sourceVersion() {
}
@Override
- public @NotNull ConfigurationSection migrate(@NotNull ConfigurationSection root) {
+ public ConfigurationSection migrate(ConfigurationSection root) {
migrateAdvancedConfig(root);
migrateCacheConfig(root);
migrateProximityConfigs(root);
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/migrations/ConfigMigrationV4.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/migrations/ConfigMigrationV4.java
index c72a40df..1f9882cd 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/migrations/ConfigMigrationV4.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/migrations/ConfigMigrationV4.java
@@ -1,8 +1,10 @@
package dev.imprex.orebfuscator.config.migrations;
-import org.jetbrains.annotations.NotNull;
import dev.imprex.orebfuscator.config.yaml.ConfigurationSection;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
+@NullMarked
class ConfigMigrationV4 implements ConfigMigration {
@Override
@@ -11,13 +13,13 @@ public int sourceVersion() {
}
@Override
- public @NotNull ConfigurationSection migrate(@NotNull ConfigurationSection root) {
+ public ConfigurationSection migrate(ConfigurationSection root) {
migrateWorlds(root.getSection("obfuscation"));
migrateWorlds(root.getSection("proximity"));
return root;
}
- private static void migrateWorlds(ConfigurationSection configContainer) {
+ private static void migrateWorlds(@Nullable ConfigurationSection configContainer) {
if (configContainer == null) {
return;
}
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/migrations/ConfigMigrator.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/migrations/ConfigMigrator.java
index a43ca11e..7474b6ca 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/migrations/ConfigMigrator.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/migrations/ConfigMigrator.java
@@ -5,7 +5,9 @@
import dev.imprex.orebfuscator.config.yaml.ConfigurationSection;
import dev.imprex.orebfuscator.logging.OfcLogger;
+import org.jspecify.annotations.NullMarked;
+@NullMarked
public class ConfigMigrator {
private static final Map MIGRATIONS = new HashMap<>();
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/yaml/ConfigurationSection.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/yaml/ConfigurationSection.java
index 966c6a5b..dac9fc34 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/yaml/ConfigurationSection.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/yaml/ConfigurationSection.java
@@ -15,9 +15,10 @@
import java.util.Set;
import org.jetbrains.annotations.Contract;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
+@NullMarked
public class ConfigurationSection {
static final char PATH_SEPARATOR = '.';
@@ -25,27 +26,25 @@ public class ConfigurationSection {
protected final Map map = new LinkedHashMap<>();
private final String path;
- protected ConfigurationSection(@NotNull String path) {
+ protected ConfigurationSection(String path) {
Objects.requireNonNull(path, "Path cannot be null");
this.path = path;
}
- @NotNull
public String getName() {
return path;
}
- @NotNull
public Set getKeys() {
return this.map.keySet();
}
- public boolean contains(@NotNull String path) {
+ public boolean contains(String path) {
return get(path, null) != null;
}
- public void set(@NotNull String path, @Nullable Object value) {
+ public void set(String path, @Nullable Object value) {
Objects.requireNonNull(path, "Path cannot be null");
int end = -1, start;
@@ -76,14 +75,13 @@ public void set(@NotNull String path, @Nullable Object value) {
}
}
- @Nullable
- public Object get(@NotNull String path) {
+ public @Nullable Object get(String path) {
return get(path, null);
}
- @Nullable
+
@Contract("_, !null -> !null")
- public Object get(@NotNull String path, @Nullable Object defaultValue) {
+ public @Nullable Object get(String path, @Nullable Object defaultValue) {
Objects.requireNonNull(path, "Path cannot be null");
if (path.isBlank()) {
@@ -107,8 +105,7 @@ public Object get(@NotNull String path, @Nullable Object defaultValue) {
return section.get(segment, defaultValue);
}
- @NotNull
- public ConfigurationSection createSection(@NotNull String path) {
+ public ConfigurationSection createSection(String path) {
Objects.requireNonNull(path, "Cannot create section at empty path");
if (path.isBlank()) {
@@ -136,108 +133,95 @@ public ConfigurationSection createSection(@NotNull String path) {
return section.createSection(segment);
}
- public boolean isBoolean(@NotNull String path) {
+ public boolean isBoolean(String path) {
return get(path) instanceof Boolean;
}
- @Nullable
- public Boolean getBoolean(@NotNull String path) {
+ public @Nullable Boolean getBoolean(String path) {
return getBoolean(path, null);
}
- @Nullable
@Contract("_, !null -> !null")
- public Boolean getBoolean(@NotNull String path, @Nullable Boolean defaultValue) {
+ public @Nullable Boolean getBoolean(String path, @Nullable Boolean defaultValue) {
return get(path, defaultValue) instanceof Boolean value
? value : defaultValue;
}
- public boolean isInt(@NotNull String path) {
+ public boolean isInt(String path) {
return get(path) instanceof Integer;
}
- @Nullable
- public Integer getInt(@NotNull String path) {
+ public @Nullable Integer getInt(String path) {
return getInt(path, null);
}
- @Nullable
@Contract("_, !null -> !null")
- public Integer getInt(@NotNull String path, @Nullable Integer defaultValue) {
+ public @Nullable Integer getInt(String path, @Nullable Integer defaultValue) {
return get(path, defaultValue) instanceof Number value
? Integer.valueOf(value.intValue()) : defaultValue;
}
- public boolean isLong(@NotNull String path) {
+ public boolean isLong(String path) {
return get(path) instanceof Long;
}
- @Nullable
- public Long getLong(@NotNull String path) {
+ public @Nullable Long getLong(String path) {
return getLong(path, null);
}
- @Nullable
@Contract("_, !null -> !null")
- public Long getLong(@NotNull String path, @Nullable Long defaultValue) {
+ public @Nullable Long getLong(String path, @Nullable Long defaultValue) {
return get(path, defaultValue) instanceof Number value
? Long.valueOf(value.longValue()) : defaultValue;
}
- public boolean isDouble(@NotNull String path) {
+ public boolean isDouble(String path) {
return get(path) instanceof Double;
}
- @Nullable
- public Double getDouble(@NotNull String path) {
+ public @Nullable Double getDouble(String path) {
return getDouble(path, null);
}
- @Nullable
@Contract("_, !null -> !null")
- public Double getDouble(@NotNull String path, @Nullable Double defaultValue) {
+ public @Nullable Double getDouble(String path, @Nullable Double defaultValue) {
return get(path, defaultValue) instanceof Number value
? Double.valueOf(value.doubleValue()) : defaultValue;
}
- public boolean isNumber(@NotNull String path) {
+ public boolean isNumber(String path) {
return get(path) instanceof Number;
}
- public boolean isString(@NotNull String path) {
+ public boolean isString(String path) {
return get(path) instanceof String;
}
- @Nullable
- public String getString(@NotNull String path) {
+ public @Nullable String getString(String path) {
return getString(path, null);
}
- @Nullable
@Contract("_, !null -> !null")
- public String getString(@NotNull String path, @Nullable String defaultValue) {
+ public @Nullable String getString(String path, @Nullable String defaultValue) {
return get(path, defaultValue) instanceof String value
? value : defaultValue;
}
- public boolean isList(@NotNull String path) {
+ public boolean isList(String path) {
return get(path) instanceof List;
}
- @Nullable
- public List> getList(@NotNull String path) {
+ public @Nullable List> getList(String path) {
return getList(path, null);
}
- @Nullable
@Contract("_, !null -> !null")
- public List> getList(@NotNull String path, List> defaultValue) {
+ public @Nullable List> getList(String path, @Nullable List> defaultValue) {
return get(path, defaultValue) instanceof List> value
? value : defaultValue;
}
- @NotNull
- public List getStringList(@NotNull String path) {
+ public List getStringList(String path) {
List> list = getList(path);
if (list == null) {
return Collections.emptyList();
@@ -254,17 +238,15 @@ public List getStringList(@NotNull String path) {
return result;
}
- public boolean isSection(@NotNull String path) {
+ public boolean isSection(String path) {
return get(path) instanceof ConfigurationSection;
}
- @Nullable
- public ConfigurationSection getSection(@NotNull String path) {
+ public @Nullable ConfigurationSection getSection(String path) {
return get(path) instanceof ConfigurationSection value
? value : null;
}
- @NotNull
public List getSubSections() {
List result = new ArrayList<>();
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/yaml/InvalidConfigurationException.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/yaml/InvalidConfigurationException.java
index 7cb14620..2c1f827f 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/yaml/InvalidConfigurationException.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/yaml/InvalidConfigurationException.java
@@ -6,7 +6,9 @@
*/
package dev.imprex.orebfuscator.config.yaml;
-@SuppressWarnings("serial")
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
public class InvalidConfigurationException extends Exception {
public InvalidConfigurationException(String message) {
diff --git a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/yaml/NodeCommentData.java b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/yaml/NodeCommentData.java
index 94822213..af3dac94 100644
--- a/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/yaml/NodeCommentData.java
+++ b/orebfuscator-core/src/main/java/dev/imprex/orebfuscator/config/yaml/NodeCommentData.java
@@ -4,9 +4,8 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
import org.yaml.snakeyaml.comments.CommentLine;
import org.yaml.snakeyaml.nodes.MappingNode;
import org.yaml.snakeyaml.nodes.Node;
@@ -14,14 +13,15 @@
import org.yaml.snakeyaml.nodes.ScalarNode;
import org.yaml.snakeyaml.nodes.SequenceNode;
+@NullMarked
class NodeCommentData {
private final List blockComments;
private final List inLineComments;
- private final List endComments;
+ private final @Nullable List endComments;
private final Map children = new HashMap<>();
- private final Map