package jetbrains.mps.tool.environment; /*Generated by MPS */ import org.apache.log4j.Logger; import org.apache.log4j.LogManager; import jetbrains.mps.core.platform.Platform; import org.jetbrains.annotations.NotNull; import jetbrains.mps.core.platform.PlatformFactory; import jetbrains.mps.core.platform.PlatformOptionsBuilder; import jetbrains.mps.generator.GenerationSettingsProvider; import jetbrains.mps.generator.DefaultModifiableGenerationSettings; import jetbrains.mps.library.LibraryInitializer; import org.jetbrains.mps.openapi.module.FacetsFacade; import jetbrains.mps.classloading.DumbIdeaPluginFacet; import org.jetbrains.mps.openapi.module.SModuleFacet; import org.jetbrains.annotations.Nullable; import jetbrains.mps.project.Project; import java.io.File; import jetbrains.mps.core.tool.environment.util.FileMPSProject; import jetbrains.mps.util.FileUtil; public class MpsEnvironment extends EnvironmentBase { private static final Logger LOG = LogManager.getLogger(MpsEnvironment.class); private Platform myPlatform; static { EnvironmentBase.initializeLog4j(); } protected MpsEnvironment(@NotNull EnvironmentConfig config) { super(config); } /** * creates a new MpsEnvironment or returns the cached one */ @NotNull public static Environment getOrCreate(@NotNull EnvironmentConfig config) { Environment currentEnv = EnvironmentContainer.get(); if (currentEnv != null) { currentEnv.retain(); return currentEnv; } else { MpsEnvironment mpsEnv = new MpsEnvironment(config); mpsEnv.init(); assert EnvironmentContainer.get() == mpsEnv; return mpsEnv; } } @Override public void init() { if (LOG.isInfoEnabled()) { LOG.info("Creating MPS environment"); } myPlatform = PlatformFactory.initPlatform(PlatformOptionsBuilder.ALL); GenerationSettingsProvider.getInstance().setGenerationSettings(new DefaultModifiableGenerationSettings()); registerFacetFactory(); super.init(myPlatform.findComponent(LibraryInitializer.class)); } private void registerFacetFactory() { FacetsFacade.FacetFactory dumbFactory = FacetsFacade.getInstance().getFacetFactory(DumbIdeaPluginFacet.FACET_TYPE); assert dumbFactory != null; FacetsFacade.getInstance().removeFactory(dumbFactory); FacetsFacade.getInstance().addFactory(DumbIdeaPluginFacet.FACET_TYPE, new FacetsFacade.FacetFactory() { @Override public SModuleFacet create() { return new DumbIdeaPluginFacet() { @Override @Nullable public ClassLoader getClassLoader() { return rootClassLoader(); } }; } }); } @Override @NotNull public Project doOpenProject(@NotNull File projectFile) { FileMPSProject project = new FileMPSProject(projectFile); return project; } @NotNull @Override public Project createEmptyProject() { checkInitialized(); if (LOG.isInfoEnabled()) { LOG.info("Creating an empty project"); } File projectFile = FileUtil.createTmpDir(); projectFile.deleteOnExit(); Project project = openProject(projectFile); return project; } @Override public void doDispose() { myPlatform.dispose(); myPlatform = null; } @Override public void flushAllEvents() { // do nothing checkInitialized(); } @Override public Platform getPlatform() { return myPlatform; } @Nullable protected ClassLoader rootClassLoader() { return MpsEnvironment.class.getClassLoader(); } }