[Fix] Prevented NPE due in PluginData

This exception was caused by analysisData being null during PluginData
analysis - This should not occur unless two analysis are being performed
concurrently & first analysis finishes and clears the variable.

Additional work is required for preventing two concurrent analysis.

Affected issues: #711
This commit is contained in:
Rsl1122 2018-09-29 12:16:07 +03:00
parent 93951f1f25
commit a18dc2d3f2
6 changed files with 19 additions and 15 deletions

View File

@ -72,7 +72,8 @@ public class FactionsData extends PluginData {
if (!factions.isEmpty()) {
FactionsAccordion factionsAccordion = new FactionsAccordion(
factions,
analysisData.getValue(AnalysisKeys.PLAYERS_MUTATOR).orElse(new PlayersMutator(new ArrayList<>()))
Optional.ofNullable(analysisData).flatMap(c -> c.getValue(AnalysisKeys.PLAYERS_MUTATOR))
.orElse(new PlayersMutator(new ArrayList<>()))
);
analysisContainer.addHtml("factionAccordion", factionsAccordion.toHtml());

View File

@ -1,4 +1,4 @@
/*
/*
* Licence is provided in the jar as license.yml also here:
* https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/license.yml
*/
@ -62,7 +62,8 @@ public class KingdomsData extends PluginData {
if (!kingdoms.isEmpty()) {
KingdomsAccordion kingdomsAccordion = new KingdomsAccordion(
kingdoms,
analysisData.getValue(AnalysisKeys.PLAYERS_MUTATOR).orElse(new PlayersMutator(new ArrayList<>()))
Optional.ofNullable(analysisData).flatMap(c -> c.getValue(AnalysisKeys.PLAYERS_MUTATOR))
.orElse(new PlayersMutator(new ArrayList<>()))
);
analysisContainer.addHtml("kingdomsAccordion", kingdomsAccordion.toHtml());

View File

@ -179,7 +179,8 @@ public class LiteBansData extends PluginData implements BanData {
if (objects.isEmpty()) {
table.addRow("No Data");
} else {
Map<UUID, String> playerNames = analysisData.getValue(AnalysisKeys.PLAYER_NAMES).orElse(new HashMap<>());
Map<UUID, String> playerNames = Optional.ofNullable(analysisData)
.flatMap(c -> c.getValue(AnalysisKeys.PLAYER_NAMES)).orElse(new HashMap<>());
for (LiteBansDBObj object : objects) {
UUID uuid = object.getUuid();
String name = playerNames.getOrDefault(uuid, uuid.toString());

View File

@ -97,7 +97,8 @@ public class TownyData extends PluginData {
TownsAccordion townsAccordion = new TownsAccordion(
towns,
analysisData.getValue(AnalysisKeys.PLAYERS_MUTATOR).orElse(new PlayersMutator(new ArrayList<>()))
Optional.ofNullable(analysisData).flatMap(c -> c.getValue(AnalysisKeys.PLAYERS_MUTATOR))
.orElse(new PlayersMutator(new ArrayList<>()))
);
analysisContainer.addHtml("townAccordion", townsAccordion.toHtml());

View File

@ -9,7 +9,6 @@ import com.djrapitops.plan.data.element.InspectContainer;
import com.djrapitops.plan.data.plugin.ContainerSize;
import com.djrapitops.plan.data.plugin.PluginData;
import com.djrapitops.plan.data.store.keys.AnalysisKeys;
import com.djrapitops.plan.data.store.mutators.PlayersMutator;
import com.djrapitops.plan.system.cache.DataCache;
import com.djrapitops.plan.utilities.FormatUtils;
import com.djrapitops.plan.utilities.html.icon.Color;
@ -50,10 +49,11 @@ public class VaultEcoData extends PluginData {
@Override
public AnalysisContainer getServerData(Collection<UUID> collection, AnalysisContainer analysisContainer) {
List<FakeOfflinePlayer> offlinePlayers = analysisData.getValue(AnalysisKeys.PLAYERS_MUTATOR)
.map(PlayersMutator::all).orElse(new ArrayList<>())
.stream().map(FakeOfflinePlayer::new)
.collect(Collectors.toList());
List<FakeOfflinePlayer> offlinePlayers = Optional.ofNullable(analysisData)
.flatMap(c -> c.getValue(AnalysisKeys.PLAYERS_MUTATOR))
.map(mutator -> mutator.all().stream().map(FakeOfflinePlayer::new)
.collect(Collectors.toList()))
.orElse(new ArrayList<>());
Map<UUID, String> balances = new HashMap<>();
double totalBalance = 0.0;

View File

@ -9,7 +9,6 @@ import com.djrapitops.plan.data.element.InspectContainer;
import com.djrapitops.plan.data.plugin.ContainerSize;
import com.djrapitops.plan.data.plugin.PluginData;
import com.djrapitops.plan.data.store.keys.AnalysisKeys;
import com.djrapitops.plan.data.store.mutators.PlayersMutator;
import com.djrapitops.plan.system.cache.DataCache;
import com.djrapitops.pluginbridge.plan.FakeOfflinePlayer;
import net.milkbowl.vault.permission.Permission;
@ -49,10 +48,11 @@ public class VaultPermData extends PluginData {
@Override
public AnalysisContainer getServerData(Collection<UUID> collection, AnalysisContainer analysisContainer) {
List<FakeOfflinePlayer> offlinePlayers = analysisData.getValue(AnalysisKeys.PLAYERS_MUTATOR)
.map(PlayersMutator::all).orElse(new ArrayList<>())
.stream().map(FakeOfflinePlayer::new)
.collect(Collectors.toList());
List<FakeOfflinePlayer> offlinePlayers = Optional.ofNullable(analysisData)
.flatMap(c -> c.getValue(AnalysisKeys.PLAYERS_MUTATOR))
.map(mutator -> mutator.all().stream().map(FakeOfflinePlayer::new)
.collect(Collectors.toList()))
.orElse(new ArrayList<>());
Map<UUID, String> groups = new HashMap<>();
for (FakeOfflinePlayer p : offlinePlayers) {