mirror of
https://github.com/Minestom/Minestom.git
synced 2025-02-09 00:41:37 +01:00
Scope the dependency map
This commit is contained in:
parent
1de1fb062d
commit
b5728e2255
@ -313,37 +313,49 @@ public class ExtensionManager {
|
|||||||
@NotNull
|
@NotNull
|
||||||
private List<DiscoveredExtension> generateLoadOrder(@NotNull List<DiscoveredExtension> discoveredExtensions) {
|
private List<DiscoveredExtension> generateLoadOrder(@NotNull List<DiscoveredExtension> discoveredExtensions) {
|
||||||
// Do some mapping so we can map strings to extensions.
|
// Do some mapping so we can map strings to extensions.
|
||||||
Map<String, DiscoveredExtension> extensionMap = new HashMap<>();
|
|
||||||
Map<DiscoveredExtension, List<DiscoveredExtension>> dependencyMap = new HashMap<>();
|
Map<DiscoveredExtension, List<DiscoveredExtension>> dependencyMap = new HashMap<>();
|
||||||
|
|
||||||
|
// Put dependencies in dependency map
|
||||||
|
{
|
||||||
|
Map<String, DiscoveredExtension> extensionMap = new HashMap<>();
|
||||||
|
|
||||||
for (DiscoveredExtension discoveredExtension : discoveredExtensions) {
|
for (DiscoveredExtension discoveredExtension : discoveredExtensions) {
|
||||||
extensionMap.put(discoveredExtension.getName().toLowerCase(), discoveredExtension);
|
extensionMap.put(discoveredExtension.getName().toLowerCase(), discoveredExtension);
|
||||||
}
|
}
|
||||||
|
|
||||||
allExtensions: // label the loop
|
allExtensions:
|
||||||
|
// label the loop
|
||||||
for (DiscoveredExtension discoveredExtension : discoveredExtensions) {
|
for (DiscoveredExtension discoveredExtension : discoveredExtensions) {
|
||||||
|
|
||||||
List<DiscoveredExtension> dependencies = new ArrayList<>(discoveredExtension.getDependencies().length);
|
List<DiscoveredExtension> dependencies = new ArrayList<>(discoveredExtension.getDependencies().length);
|
||||||
|
|
||||||
// Map the dependencies into DiscoveredExtensions.
|
// Map the dependencies into DiscoveredExtensions.
|
||||||
for (String dependencyName : discoveredExtension.getDependencies()) {
|
for (String dependencyName : discoveredExtension.getDependencies()) {
|
||||||
|
|
||||||
DiscoveredExtension dependencyExtension = extensionMap.get(dependencyName.toLowerCase());
|
DiscoveredExtension dependencyExtension = extensionMap.get(dependencyName.toLowerCase());
|
||||||
// Specifies an extension we don't have.
|
// Specifies an extension we don't have.
|
||||||
if (dependencyExtension == null) {
|
if (dependencyExtension == null) {
|
||||||
|
|
||||||
// attempt to see if it is not already loaded (happens with dynamic (re)loading)
|
// attempt to see if it is not already loaded (happens with dynamic (re)loading)
|
||||||
if (extensions.containsKey(dependencyName.toLowerCase())) {
|
if (extensions.containsKey(dependencyName.toLowerCase())) {
|
||||||
|
|
||||||
dependencies.add(extensions.get(dependencyName.toLowerCase()).getOrigin());
|
dependencies.add(extensions.get(dependencyName.toLowerCase()).getOrigin());
|
||||||
continue; // Go to the next loop in this dependency loop, this iteration is done.
|
continue; // Go to the next loop in this dependency loop, this iteration is done.
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
// dependency isn't loaded, move on.
|
||||||
LOGGER.error("Extension {} requires an extension called {}.", discoveredExtension.getName(), dependencyName);
|
LOGGER.error("Extension {} requires an extension called {}.", discoveredExtension.getName(), dependencyName);
|
||||||
LOGGER.error("However the extension {} could not be found.", dependencyName);
|
LOGGER.error("However the extension {} could not be found.", dependencyName);
|
||||||
LOGGER.error("Therefore {} will not be loaded.", discoveredExtension.getName());
|
LOGGER.error("Therefore {} will not be loaded.", discoveredExtension.getName());
|
||||||
discoveredExtension.loadStatus = DiscoveredExtension.LoadStatus.MISSING_DEPENDENCIES;
|
discoveredExtension.loadStatus = DiscoveredExtension.LoadStatus.MISSING_DEPENDENCIES;
|
||||||
continue allExtensions; // the above labeled loop will go to the next extension as this dependency is invalid.
|
continue allExtensions; // the above labeled loop will go to the next extension as this dependency is invalid.
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// This will add null for an unknown-extension
|
// This will add null for an unknown-extension
|
||||||
dependencies.add(dependencyExtension);
|
dependencies.add(dependencyExtension);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencyMap.put(
|
dependencyMap.put(
|
||||||
@ -352,12 +364,14 @@ public class ExtensionManager {
|
|||||||
);
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// List containing the real load order.
|
// List containing the real load order.
|
||||||
LinkedList<DiscoveredExtension> sortedList = new LinkedList<>();
|
LinkedList<DiscoveredExtension> sortedList = new LinkedList<>();
|
||||||
|
|
||||||
// entries with empty lists
|
// entries with empty lists
|
||||||
List<Map.Entry<DiscoveredExtension, List<DiscoveredExtension>>> loadableExtensions;
|
List<Map.Entry<DiscoveredExtension, List<DiscoveredExtension>>> loadableExtensions;
|
||||||
|
|
||||||
// While there are entries with no more elements (no more dependencies)
|
// While there are entries with no more elements (no more dependencies)
|
||||||
while (!(
|
while (!(
|
||||||
loadableExtensions = dependencyMap.entrySet().stream().filter(entry -> areAllDependenciesLoaded(entry.getValue())).collect(Collectors.toList())
|
loadableExtensions = dependencyMap.entrySet().stream().filter(entry -> areAllDependenciesLoaded(entry.getValue())).collect(Collectors.toList())
|
||||||
|
Loading…
Reference in New Issue
Block a user