package org.erlide.backend; import org.eclipse.jdt.annotation.NonNull; import org.erlide.backend.api.IBackendManager; import org.erlide.backend.internal.EpmdWatchJob; import org.erlide.backend.runtimeinfo.RuntimeInfoPreferencesSerializer; import org.erlide.engine.model.root.IErlProject; import org.erlide.runtime.api.RuntimeCore; import org.erlide.runtime.epmd.EpmdWatcher; import org.erlide.runtime.rpc.IOtpRpc; import org.erlide.runtime.runtimeinfo.IRuntimeInfoCatalog; public class BackendCore { private static IBackendManager backendManager; private static EpmdWatcher epmdWatcher; private static EpmdWatchJob epmdWatcherJob; public static void init(final IBackendManager aBackendManager) { backendManager = aBackendManager; } public static final IBackendManager getBackendManager() { return backendManager; } public static IRuntimeInfoCatalog getRuntimeInfoCatalog() { return RuntimeCore.getRuntimeInfoCatalog(new RuntimeInfoPreferencesSerializer()); } public static IOtpRpc getBuildBackend(@NonNull final IErlProject project) { final IBackendManager manager = getBackendManager(); return manager.getBuildBackend(project).getOtpRpc(); } public static EpmdWatcher getEpmdWatcher() { if (epmdWatcher == null) { // tryStartEpmdProcess(); startEpmdWatcher(); } return epmdWatcher; } private static void startEpmdWatcher() { epmdWatcher = new EpmdWatcher(); epmdWatcher.addEpmdListener(getBackendManager()); epmdWatcherJob = new EpmdWatchJob(epmdWatcher); epmdWatcherJob.schedule(1000); } public static void stop() { if (epmdWatcherJob != null) { epmdWatcherJob.stop(); } } }