From 370ea93871c76f3138a8552391749e4de8342cb0 Mon Sep 17 00:00:00 2001 From: Bruno Medeiros Date: Fri, 1 Jul 2016 00:37:52 +0100 Subject: [PATCH] Refactor LangCore singletons --- .../lang/ide/core/AbstractLangCore.java | 97 +++++++++++++++++++ .../melnorme/lang/ide/core/LangCore.java | 30 +----- .../lang/ide/core/LangCorePlugin.java | 16 ++- .../lang/ide/core/operations/ToolManager.java | 5 +- .../utils/process/AbstractRunProcessTask.java | 2 +- .../core/operations/LANGUAGE_ToolManager.java | 5 + .../lang/ide/core/LangCore_Actual.java | 60 +++--------- 7 files changed, 137 insertions(+), 78 deletions(-) create mode 100644 plugin_ide.core/src-lang/melnorme/lang/ide/core/AbstractLangCore.java diff --git a/plugin_ide.core/src-lang/melnorme/lang/ide/core/AbstractLangCore.java b/plugin_ide.core/src-lang/melnorme/lang/ide/core/AbstractLangCore.java new file mode 100644 index 000000000..27c33701e --- /dev/null +++ b/plugin_ide.core/src-lang/melnorme/lang/ide/core/AbstractLangCore.java @@ -0,0 +1,97 @@ +/******************************************************************************* + * Copyright (c) 2016 Bruno Medeiros and other Contributors. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Bruno Medeiros - initial API and implementation + *******************************************************************************/ +package melnorme.lang.ide.core; + +import melnorme.lang.ide.core.engine.SourceModelManager; +import melnorme.lang.ide.core.operations.ToolManager; +import melnorme.lang.ide.core.operations.build.BuildManager; +import melnorme.lang.ide.core.project_model.BundleModelManager; +import melnorme.lang.ide.core.project_model.LangBundleModel; +import melnorme.utilbox.misc.ILogHandler; + +public abstract class AbstractLangCore { + + public static LangCore instance; + + public static LangCore get() { + return instance; + } + + /* ----------------- Owned singletons: ----------------- */ + protected final ILogHandler logHandler; + protected final CoreSettings coreSettings; + protected final ToolManager toolManager; + protected final BundleModelManager bundleManager; + protected final BuildManager buildManager; + protected final SourceModelManager sourceModelManager; + + public AbstractLangCore(ILogHandler logHandler) { + instance = (LangCore) this; + + this.logHandler = logHandler; + + coreSettings = createCoreSettings(); + toolManager = createToolManager(); + bundleManager = LangCore_Actual.createBundleModelManager(); + buildManager = createBuildManager(); + sourceModelManager = LangCore_Actual.createSourceModelManager(); + } + + protected void shutdown() { + buildManager.dispose(); + bundleManager.shutdownManager(); + sourceModelManager.dispose(); + toolManager.shutdownNow(); + } + + /* ----------------- ----------------- */ + + public static ILogHandler logHandler() { + return instance.logHandler; + } + + protected abstract CoreSettings createCoreSettings(); + + public static CoreSettings settings() { + return instance.coreSettings; + } + + protected abstract ToolManager createToolManager(); + + public static ToolManager getToolManager() { + return instance.toolManager; + } + + public static BundleModelManager getBundleModelManager() { + return instance.bundleManager; + } + public static LangBundleModel getBundleModel() { + return getBundleModelManager().getModel(); + } + + protected abstract BuildManager createBuildManager(); + + public static BuildManager getBuildManager() { + return instance.buildManager; + } + + public static SourceModelManager getSourceModelManager() { + return instance.sourceModelManager; + } + + /* ----------------- ----------------- */ + + /** Start core agents, and do other initizaliation after UI is started. */ + public void startAgentsAfterUIStart() { + bundleManager.startManager(); + } + +} \ No newline at end of file diff --git a/plugin_ide.core/src-lang/melnorme/lang/ide/core/LangCore.java b/plugin_ide.core/src-lang/melnorme/lang/ide/core/LangCore.java index 6b6989d53..1c8037ff0 100644 --- a/plugin_ide.core/src-lang/melnorme/lang/ide/core/LangCore.java +++ b/plugin_ide.core/src-lang/melnorme/lang/ide/core/LangCore.java @@ -10,45 +10,21 @@ *******************************************************************************/ package melnorme.lang.ide.core; -import org.eclipse.core.runtime.ILog; -import melnorme.lang.ide.core.utils.EclipseUtils; import melnorme.utilbox.misc.ILogHandler; import melnorme.utilbox.status.Severity; import melnorme.utilbox.status.StatusException; public class LangCore extends LangCore_Actual { - public LangCore() { - } - - protected void shutdown() { - buildManager.dispose(); - bundleManager.shutdownManager(); - sourceModelManager.dispose(); - toolManager.shutdownNow(); - } - - /** - * Start core agents, and do other initizaliation after UI is started. - */ - public void startAgentsAfterUIStart() { - bundleManager.startManager(); + public LangCore(ILogHandler logHandler) { + super(logHandler); } /* ----------------- Logging ----------------- */ - public static final ILogHandler LOG_HANDLER = new ILogHandler() { - @Override - public void logStatus(StatusException se) { - int severity = EclipseUtils.toEclipseSeverity(se); - ILog log = LangCorePlugin.getInstance().getLog(); - log.log(EclipseCore.createStatus(severity, se.getMessage(), se.getCause())); - } - }; - /** Logs status of given StatusException. */ public static void logStatusException(StatusException se) { - LOG_HANDLER.logStatus(se); + logHandler().logStatus(se); } public static void logInternalError(Throwable throwable) { diff --git a/plugin_ide.core/src-lang/melnorme/lang/ide/core/LangCorePlugin.java b/plugin_ide.core/src-lang/melnorme/lang/ide/core/LangCorePlugin.java index 0c039e286..8f1ac891c 100644 --- a/plugin_ide.core/src-lang/melnorme/lang/ide/core/LangCorePlugin.java +++ b/plugin_ide.core/src-lang/melnorme/lang/ide/core/LangCorePlugin.java @@ -10,9 +10,14 @@ *******************************************************************************/ package melnorme.lang.ide.core; +import org.eclipse.core.runtime.ILog; import org.eclipse.core.runtime.Plugin; import org.osgi.framework.BundleContext; +import melnorme.lang.ide.core.utils.EclipseUtils; +import melnorme.utilbox.misc.ILogHandler; +import melnorme.utilbox.status.StatusException; + public abstract class LangCorePlugin extends Plugin { public static final String PLUGIN_ID = LangCore_Actual.PLUGIN_ID; @@ -27,6 +32,15 @@ public static LangCorePlugin getInstance() { return pluginInstance; } + public static final ILogHandler LOG_HANDLER = new ILogHandler() { + @Override + public void logStatus(StatusException se) { + int severity = EclipseUtils.toEclipseSeverity(se); + ILog log = LangCorePlugin.getInstance().getLog(); + log.log(EclipseCore.createStatus(severity, se.getMessage(), se.getCause())); + } + }; + protected LangCore langCore; /* ----------------- ----------------- */ @@ -36,7 +50,7 @@ public static LangCorePlugin getInstance() { @Override public final void start(BundleContext context) throws Exception { pluginInstance = this; - langCore = new LangCore(); + langCore = new LangCore(LOG_HANDLER); super.start(context); doCustomStart(context); } diff --git a/plugin_ide.core/src-lang/melnorme/lang/ide/core/operations/ToolManager.java b/plugin_ide.core/src-lang/melnorme/lang/ide/core/operations/ToolManager.java index 5376fd6d3..5d20f8830 100644 --- a/plugin_ide.core/src-lang/melnorme/lang/ide/core/operations/ToolManager.java +++ b/plugin_ide.core/src-lang/melnorme/lang/ide/core/operations/ToolManager.java @@ -57,9 +57,10 @@ */ public abstract class ToolManager extends EventSource { - protected final CoreSettings settings = LangCore.settings(); + protected final CoreSettings settings; - public ToolManager() { + public ToolManager(CoreSettings settings) { + this.settings = assertNotNull(settings); } public void shutdownNow() { diff --git a/plugin_ide.core/src-lang/melnorme/lang/ide/core/utils/process/AbstractRunProcessTask.java b/plugin_ide.core/src-lang/melnorme/lang/ide/core/utils/process/AbstractRunProcessTask.java index acbe8ba30..81b7b1eea 100644 --- a/plugin_ide.core/src-lang/melnorme/lang/ide/core/utils/process/AbstractRunProcessTask.java +++ b/plugin_ide.core/src-lang/melnorme/lang/ide/core/utils/process/AbstractRunProcessTask.java @@ -67,7 +67,7 @@ public void addProcessListener(IProcessOutputListener listener) throws CommonExc }); try { - return new ExternalProcessNotifyingHelper(process, true, pm, processListeners, LangCore.LOG_HANDLER); + return new ExternalProcessNotifyingHelper(process, true, pm, processListeners, LangCore.logHandler()); } finally { processListeners = null; // Set to null to fail fast if anyone else tries to modify afterward. } diff --git a/plugin_ide.core/src/LANG_PROJECT_ID/ide/core/operations/LANGUAGE_ToolManager.java b/plugin_ide.core/src/LANG_PROJECT_ID/ide/core/operations/LANGUAGE_ToolManager.java index 106874aec..124c24e43 100644 --- a/plugin_ide.core/src/LANG_PROJECT_ID/ide/core/operations/LANGUAGE_ToolManager.java +++ b/plugin_ide.core/src/LANG_PROJECT_ID/ide/core/operations/LANGUAGE_ToolManager.java @@ -10,8 +10,13 @@ *******************************************************************************/ package LANG_PROJECT_ID.ide.core.operations; +import melnorme.lang.ide.core.CoreSettings; import melnorme.lang.ide.core.operations.ToolManager; public class LANGUAGE_ToolManager extends ToolManager { + public LANGUAGE_ToolManager(CoreSettings settings) { + super(settings); + } + } \ No newline at end of file diff --git a/plugin_ide.core/src/melnorme/lang/ide/core/LangCore_Actual.java b/plugin_ide.core/src/melnorme/lang/ide/core/LangCore_Actual.java index 7834f1878..cc206ffc0 100644 --- a/plugin_ide.core/src/melnorme/lang/ide/core/LangCore_Actual.java +++ b/plugin_ide.core/src/melnorme/lang/ide/core/LangCore_Actual.java @@ -5,13 +5,12 @@ import LANG_PROJECT_ID.ide.core.operations.LANGUAGE_BuildManager; import LANG_PROJECT_ID.ide.core.operations.LANGUAGE_ToolManager; import LANG_PROJECT_ID.tooling.toolchain.LANGUAGE_SDKLocationValidator; -import melnorme.lang.ide.core.engine.SourceModelManager; import melnorme.lang.ide.core.operations.ToolManager; import melnorme.lang.ide.core.operations.build.BuildManager; -import melnorme.lang.ide.core.project_model.BundleModelManager; import melnorme.lang.ide.core.project_model.LangBundleModel; +import melnorme.utilbox.misc.ILogHandler; -public class LangCore_Actual { +public class LangCore_Actual extends AbstractLangCore { public static final String PLUGIN_ID = "LANG_PROJECT_ID.ide.core"; public static final String NATURE_ID = PLUGIN_ID +".nature"; @@ -27,26 +26,11 @@ public class LangCore_Actual { public static final String VAR_NAME_SdkToolPath = "SDK_TOOL_PATH"; public static final String VAR_NAME_SdkToolPath_DESCRIPTION = "The path of the SDK tool"; - public static LangCore instance; - - /* ----------------- Owned singletons: ----------------- */ - - protected final CoreSettings coreSettings; - protected final ToolManager toolManager; - protected final LANGUAGE_BundleModelManager bundleManager; - protected final BuildManager buildManager; - protected final LANGUAGE_SourceModelManager sourceModelManager; - - public LangCore_Actual() { - instance = (LangCore) this; - - coreSettings = createCoreSettings(); - toolManager = createToolManagerSingleton(); - bundleManager = createBundleModelManager(); - buildManager = createBuildManager(bundleManager.getModel()); - sourceModelManager = createSourceModelManager(); + public LangCore_Actual(ILogHandler logHandler) { + super(logHandler); } - + + @Override protected CoreSettings createCoreSettings() { return new CoreSettings() { @Override @@ -56,44 +40,26 @@ public LANGUAGE_SDKLocationValidator getSDKLocationValidator() { }; } - public static LANGUAGE_ToolManager createToolManagerSingleton() { - return new LANGUAGE_ToolManager(); + @Override + protected ToolManager createToolManager() { + return new LANGUAGE_ToolManager(coreSettings); } public static LANGUAGE_BundleModelManager createBundleModelManager() { return new LANGUAGE_BundleModelManager(); } - public static BuildManager createBuildManager(LangBundleModel bundleModel) { - return new LANGUAGE_BuildManager(bundleModel, LangCore.getToolManager()); + + @Override + protected BuildManager createBuildManager() { + return new LANGUAGE_BuildManager(this.bundleManager.getModel(), toolManager); } public static LANGUAGE_SourceModelManager createSourceModelManager() { return new LANGUAGE_SourceModelManager(); } - /* ----------------- ----------------- */ - public static CoreSettings settings() { - return instance.coreSettings; - } - - public static ToolManager getToolManager() { - return instance.toolManager; - } - public static LANGUAGE_BundleModel getBundleModel() { - return instance.bundleManager.getModel(); - } - public static BuildManager getBuildManager() { - return instance.buildManager; - } - public static BundleModelManager getBundleModelManager() { - return instance.bundleManager; - } - public static SourceModelManager getSourceModelManager() { - return instance.sourceModelManager; - } - public static class LANGUAGE_BundleModel extends LangBundleModel { }