From e12f258a33cc8963de141369b9600b727d8245f0 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Sat, 29 Sep 2018 13:21:54 +0300 Subject: [PATCH] [Debt] PlanAPI getInstance uses a static holder. This is close to a Singleton pattern, but not quite. Testing required to know impact of using static here. - Is it possible to set null? --- .../java/com/djrapitops/plan/api/CommonAPI.java | 3 ++- .../main/java/com/djrapitops/plan/api/PlanAPI.java | 13 +++++++++++-- .../java/com/djrapitops/plan/system/PlanSystem.java | 6 ------ 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/api/CommonAPI.java b/Plan/src/main/java/com/djrapitops/plan/api/CommonAPI.java index 9f602e726..0f6ecd529 100644 --- a/Plan/src/main/java/com/djrapitops/plan/api/CommonAPI.java +++ b/Plan/src/main/java/com/djrapitops/plan/api/CommonAPI.java @@ -23,9 +23,10 @@ public abstract class CommonAPI implements PlanAPI { private final UUIDUtility uuidUtility; private final ErrorHandler errorHandler; - public CommonAPI(UUIDUtility uuidUtility, ErrorHandler errorHandler) { + CommonAPI(UUIDUtility uuidUtility, ErrorHandler errorHandler) { this.uuidUtility = uuidUtility; this.errorHandler = errorHandler; + PlanAPIHolder.set(this); } @Override diff --git a/Plan/src/main/java/com/djrapitops/plan/api/PlanAPI.java b/Plan/src/main/java/com/djrapitops/plan/api/PlanAPI.java index 739910c6b..465d51633 100644 --- a/Plan/src/main/java/com/djrapitops/plan/api/PlanAPI.java +++ b/Plan/src/main/java/com/djrapitops/plan/api/PlanAPI.java @@ -5,10 +5,10 @@ package com.djrapitops.plan.api; import com.djrapitops.plan.data.plugin.PluginData; -import com.djrapitops.plan.system.PlanSystem; import com.djrapitops.plan.system.database.databases.operation.FetchOperations; import java.util.Map; +import java.util.Optional; import java.util.UUID; /** @@ -19,7 +19,16 @@ import java.util.UUID; public interface PlanAPI { static PlanAPI getInstance() { - return PlanSystem.getInstance().getPlanAPI(); + return Optional.ofNullable(PlanAPIHolder.API) + .orElseThrow(() -> new IllegalStateException("PlanAPI has not been initialised yet.")); + } + + class PlanAPIHolder { + static PlanAPI API; + + static void set(PlanAPI api) { + PlanAPIHolder.API = api; + } } void addPluginDataSource(PluginData pluginData); diff --git a/Plan/src/main/java/com/djrapitops/plan/system/PlanSystem.java b/Plan/src/main/java/com/djrapitops/plan/system/PlanSystem.java index d2e295674..e702d5e01 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/PlanSystem.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/PlanSystem.java @@ -4,7 +4,6 @@ */ package com.djrapitops.plan.system; -import com.djrapitops.plan.PlanPlugin; import com.djrapitops.plan.api.PlanAPI; import com.djrapitops.plan.api.exceptions.EnableException; import com.djrapitops.plan.data.plugin.HookHandler; @@ -97,11 +96,6 @@ public class PlanSystem implements SubSystem { this.errorHandler = errorHandler; } - @Deprecated - public static PlanSystem getInstance() { - return PlanPlugin.getInstance().getSystem(); - } - @Override public void enable() throws EnableException { enableSystems(