replace AtomicInteger usage with single-element array
This commit is contained in:
parent
b6d904595a
commit
39ba054fcb
|
@ -2,7 +2,6 @@ package dev.frogmc.frogloader.impl;
|
||||||
|
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
|
||||||
|
|
||||||
import dev.frogmc.frogloader.api.FrogLoader;
|
import dev.frogmc.frogloader.api.FrogLoader;
|
||||||
import dev.frogmc.frogloader.api.mod.ModProperties;
|
import dev.frogmc.frogloader.api.mod.ModProperties;
|
||||||
|
@ -25,8 +24,8 @@ public class PluginLoader {
|
||||||
|
|
||||||
List<ModProvider> providers = new ArrayList<>(ServiceLoader.load(ModProvider.class).stream().map(ServiceLoader.Provider::get).toList()); // we need mutability & random access
|
List<ModProvider> providers = new ArrayList<>(ServiceLoader.load(ModProvider.class).stream().map(ServiceLoader.Provider::get).toList()); // we need mutability & random access
|
||||||
Map<String, Collection<ModProperties>> properties = new HashMap<>();
|
Map<String, Collection<ModProperties>> properties = new HashMap<>();
|
||||||
AtomicInteger size = new AtomicInteger(providers.size()); // use a separate size variable to not have to iterate over the list over and over again
|
int[] size = new int[providers.size()]; // use a separate size variable to not have to iterate over the list over and over again
|
||||||
for (int i = 0; i < size.get(); i++) {
|
for (int i = 0; i < size[0]; i++) {
|
||||||
ModProvider plugin = providers.get(i); // use random access to work around concurrent access (through modifications during iteration)
|
ModProvider plugin = providers.get(i); // use random access to work around concurrent access (through modifications during iteration)
|
||||||
LOGGER.debug("Found mod provider: {}", plugin.getClass().getName());
|
LOGGER.debug("Found mod provider: {}", plugin.getClass().getName());
|
||||||
if (!plugin.isApplicable()) {
|
if (!plugin.isApplicable()) {
|
||||||
|
@ -46,7 +45,7 @@ public class PluginLoader {
|
||||||
LOGGER.debug("Loaded {} mod(s) from provider: {}", loadedMods.size(), plugin.id());
|
LOGGER.debug("Loaded {} mod(s) from provider: {}", loadedMods.size(), plugin.id());
|
||||||
loadedMods.forEach(p -> p.extensions().runIfPresent(BuiltinExtensions.MOD_PROVIDER, ModProvider.class, provider -> {
|
loadedMods.forEach(p -> p.extensions().runIfPresent(BuiltinExtensions.MOD_PROVIDER, ModProvider.class, provider -> {
|
||||||
providers.add(provider);
|
providers.add(provider);
|
||||||
size.getAndIncrement();
|
size[0]++;
|
||||||
}));
|
}));
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
LOGGER.error("Error during plugin initialisation: ", e);
|
LOGGER.error("Error during plugin initialisation: ", e);
|
||||||
|
@ -55,7 +54,7 @@ public class PluginLoader {
|
||||||
|
|
||||||
Collection<ModProperties> flattened = properties.values().stream().flatMap(Collection::stream).toList();
|
Collection<ModProperties> flattened = properties.values().stream().flatMap(Collection::stream).toList();
|
||||||
try {
|
try {
|
||||||
Collection<ModProperties> solved = new ModDependencyResolver(flattened).solve();
|
Collection<ModProperties> solved = new ModDependencyResolver(flattened).solve();
|
||||||
properties.forEach((s, c) -> c.retainAll(solved));
|
properties.forEach((s, c) -> c.retainAll(solved));
|
||||||
properties.forEach((s, c) -> {
|
properties.forEach((s, c) -> {
|
||||||
Map<String, ModProperties> map = mods.computeIfAbsent(s, u -> new HashMap<>());
|
Map<String, ModProperties> map = mods.computeIfAbsent(s, u -> new HashMap<>());
|
||||||
|
|
Loading…
Reference in a new issue