package jetbrains.mps.build.util; /*Generated by MPS */ import java.util.Map; import jetbrains.mps.internal.collections.runtime.MapSequence; import java.util.HashMap; import jetbrains.mps.generator.template.TemplateQueryContext; import org.jetbrains.annotations.Nullable; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; import java.util.concurrent.ConcurrentMap; import org.jetbrains.annotations.NotNull; import org.jetbrains.mps.openapi.model.SModel; import jetbrains.mps.generator.TransientModelsModule; import org.jetbrains.mps.openapi.module.SModule; public class Context { private Map<String, Object> myProperties = MapSequence.fromMap(new HashMap<String, Object>()); private TemplateQueryContext myGenerationContext; public Context() { } public Context(TemplateQueryContext generationContext) { myGenerationContext = generationContext; } @Nullable public Object put(String key, Object value) { Object previousValue = MapSequence.fromMap(myProperties).get(key); MapSequence.fromMap(myProperties).put(key, value); return previousValue; } @Nullable public <T> T get(String key) { return ((T) MapSequence.fromMap(myProperties).get(key)); } protected SNode getBuildProject(SNode node) { return SNodeOperations.getNodeAncestor(node, MetaAdapterFactory.getConcept(0x798100da4f0a421aL, 0xb99171f8c50ce5d2L, 0x4df58c6f18f84a13L, "jetbrains.mps.build.structure.BuildProject"), true, false); } public MacroHelper getMacros(SNode context) { SNode buildProject = getBuildProject(context); if (buildProject == null) { return null; } buildProject = SNodeOperations.as(DependenciesHelper.getOriginalNode(buildProject, myGenerationContext), MetaAdapterFactory.getConcept(0x798100da4f0a421aL, 0xb99171f8c50ce5d2L, 0x4df58c6f18f84a13L, "jetbrains.mps.build.structure.BuildProject")); if (buildProject == null) { return null; } return new MacroHelper.MacroContext(buildProject, myGenerationContext).getMacros(buildProject); } public String getTempPath(SNode node, String name, String... categories) { assert myGenerationContext != null; SNode project = getBuildProject(node); ConcurrentMap<SNode, String> sessionMap = GenerationUtil.<SNode,String>getSessionMap(project, myGenerationContext, "Context_tempPath"); String result = sessionMap.get(node); if (result != null) { return result; } result = new PathProvider(myGenerationContext, project).createTempPath(name, categories); if (sessionMap.putIfAbsent(node, result) != null) { result = sessionMap.get(node); } return result; } public RelativePathHelper getRelativePathHelper(@NotNull SModel model) { if (model.getModule() instanceof TransientModelsModule && myGenerationContext != null) { model = myGenerationContext.getOriginalInputModel(); } SModule module = model.getModule(); if (module instanceof TransientModelsModule) { return null; } return RelativePathHelper.forModule(module); } public TemplateQueryContext getGenerationContext() { return myGenerationContext; } @NotNull public static Context defaultContext() { return new Context(); } @NotNull public static Context defaultContext(final TemplateQueryContext gencontext) { if (gencontext == null) { return defaultContext(); } return new Context(gencontext); } }