package jetbrains.mps.lang.core.plugin; /*Generated by MPS */ import jetbrains.mps.make.facet.IFacet; import java.util.List; import jetbrains.mps.make.facet.ITarget; import jetbrains.mps.internal.collections.runtime.ListSequence; import java.util.ArrayList; import jetbrains.mps.internal.collections.runtime.Sequence; import jetbrains.mps.make.resources.IPropertiesPersistence; import jetbrains.mps.make.facet.ITargetEx; import jetbrains.mps.make.script.IJob; import jetbrains.mps.make.script.IResult; import jetbrains.mps.make.resources.IResource; import jetbrains.mps.make.script.IJobMonitor; import jetbrains.mps.make.resources.IPropertiesAccessor; import org.jetbrains.annotations.NotNull; import org.jetbrains.mps.openapi.util.ProgressMonitor; import jetbrains.mps.make.script.IConfig; import jetbrains.mps.baseLanguage.tuples.runtime.Tuples; import jetbrains.mps.make.script.IPropertiesPool; import jetbrains.mps.baseLanguage.tuples.runtime.MultiTuple; import jetbrains.mps.make.MakeSession; import jetbrains.mps.make.facet.ITargetEx2; import jetbrains.mps.smodel.resources.GResource; import java.util.stream.IntStream; import jetbrains.mps.internal.collections.runtime.IWhereFilter; import jetbrains.mps.make.script.IFeedback; import jetbrains.mps.smodel.SModelOperations; import jetbrains.mps.messages.IMessageHandler; import jetbrains.mps.project.Project; import jetbrains.mps.text.TextGeneratorEngine; import java.util.concurrent.ArrayBlockingQueue; import jetbrains.mps.text.TextGenResult; import java.util.Map; import org.jetbrains.mps.openapi.model.SModel; import java.util.HashMap; import jetbrains.mps.make.delta.IDelta; import jetbrains.mps.internal.make.runtime.java.FileProcessor; import java.util.concurrent.TimeUnit; import jetbrains.mps.text.TextUnit; import jetbrains.mps.generator.GenerationFacade; import jetbrains.mps.make.facets.Make_Facet.Target_make; import jetbrains.mps.internal.collections.runtime.MapSequence; import jetbrains.mps.vfs.IFile; import jetbrains.mps.generator.impl.DefaultStreamManager; import jetbrains.mps.internal.make.runtime.util.StaleFilesCollector; import jetbrains.mps.internal.make.runtime.java.FileDeltaCollector; import jetbrains.mps.generator.impl.dependencies.GenerationDependencies; import java.util.HashSet; import jetbrains.mps.textgen.trace.TracingUtil; import jetbrains.mps.generator.impl.dependencies.GenerationRootDependencies; import jetbrains.mps.generator.impl.cache.CacheGenLayout; import jetbrains.mps.make.java.BLDependenciesCache; import jetbrains.mps.text.impl.BLDependenciesBuilder; import jetbrains.mps.generator.impl.dependencies.GenerationDependenciesCache; import jetbrains.mps.textgen.trace.TraceInfoCache; import jetbrains.mps.text.impl.DebugInfoBuilder; import jetbrains.mps.generator.ModelExports; import jetbrains.mps.generator.impl.plan.CrossModelEnvironment; import jetbrains.mps.util.IStatus; import jetbrains.mps.vfs.FileSystem; import jetbrains.mps.internal.collections.runtime.SetSequence; import jetbrains.mps.smodel.resources.TResource; import org.jetbrains.mps.openapi.model.SNodeReference; import jetbrains.mps.smodel.resources.FResource; import jetbrains.mps.util.JavaNameUtil; public class TextGen_Facet extends IFacet.Stub { private List<ITarget> targets = ListSequence.fromList(new ArrayList<ITarget>()); private IFacet.Name name = new IFacet.Name("jetbrains.mps.lang.core.TextGen"); public TextGen_Facet() { ListSequence.fromList(targets).addElement(new TextGen_Facet.Target_configure()); ListSequence.fromList(targets).addElement(new TextGen_Facet.Target_textGen()); ListSequence.fromList(targets).addElement(new TextGen_Facet.Target_textGenToMemory()); } public Iterable<ITarget> targets() { return targets; } public Iterable<IFacet.Name> optional() { return null; } public Iterable<IFacet.Name> required() { return Sequence.fromArray(new IFacet.Name[]{new IFacet.Name("jetbrains.mps.lang.core.Generate"), new IFacet.Name("jetbrains.mps.make.facets.Make")}); } public Iterable<IFacet.Name> extended() { return null; } public IFacet.Name getName() { return this.name; } public IPropertiesPersistence propertiesPersistence() { return new TextGen_Facet.TargetProperties(); } public static class Target_configure implements ITargetEx { private static final ITarget.Name name = new ITarget.Name("jetbrains.mps.lang.core.TextGen.configure"); public Target_configure() { } public IJob createJob() { return new IJob.Stub() { @Override public IResult execute(final Iterable<IResource> rawInput, final IJobMonitor monitor, final IPropertiesAccessor pa, @NotNull final ProgressMonitor progressMonitor) { Iterable<IResource> _output_21gswx_a0a = null; final Iterable<IResource> input = (Iterable) (Iterable) rawInput; switch (0) { case 0: // FIXME drop MakeSession property after 2017.2 // no-op now default: progressMonitor.done(); return new IResult.SUCCESS(_output_21gswx_a0a); } } }; } public IConfig createConfig() { return null; } public Iterable<ITarget.Name> notAfter() { return null; } public Iterable<ITarget.Name> after() { return null; } public Iterable<ITarget.Name> notBefore() { return null; } public Iterable<ITarget.Name> before() { return Sequence.fromArray(new ITarget.Name[]{new ITarget.Name("jetbrains.mps.lang.core.TextGen.textGen"), new ITarget.Name("jetbrains.mps.lang.core.TextGen.textGenToMemory")}); } public ITarget.Name getName() { return name; } public boolean isOptional() { return false; } public boolean requiresInput() { return false; } public boolean producesOutput() { return false; } public Iterable<Class<? extends IResource>> expectedInput() { List<Class<? extends IResource>> rv = ListSequence.fromList(new ArrayList<Class<? extends IResource>>()); return rv; } public Iterable<Class<? extends IResource>> expectedOutput() { return null; } public <T> T createParameters(Class<T> cls) { return cls.cast(new Parameters()); } public <T> T createParameters(Class<T> cls, T copyFrom) { T t = createParameters(cls); if (t != null) { ((Tuples._1) t).assign((Tuples._1) copyFrom); } return t; } public static TextGen_Facet.Target_configure.Parameters vars(IPropertiesPool ppool) { return ppool.properties(name, TextGen_Facet.Target_configure.Parameters.class); } public static class Parameters extends MultiTuple._1<MakeSession> { public Parameters() { super(); } public Parameters(MakeSession unused) { super(unused); } public MakeSession unused(MakeSession value) { return super._0(value); } public MakeSession unused() { return super._0(); } } } public static class Target_textGen implements ITargetEx2 { private static final ITarget.Name name = new ITarget.Name("jetbrains.mps.lang.core.TextGen.textGen"); public Target_textGen() { } public IJob createJob() { return new IJob.Stub() { @Override public IResult execute(final Iterable<IResource> rawInput, final IJobMonitor monitor, final IPropertiesAccessor pa, @NotNull final ProgressMonitor progressMonitor) { Iterable<IResource> _output_21gswx_a0b = null; final Iterable<GResource> input = (Iterable<GResource>) (Iterable) rawInput; progressMonitor.start("", IntStream.of(1000).sum()); switch (0) { case 0: if (Sequence.fromIterable(input).any(new IWhereFilter<GResource>() { public boolean accept(GResource it) { return !(it.status().isOk()); } })) { monitor.reportFeedback(new IFeedback.ERROR(String.valueOf("Generation was not OK"))); return new IResult.FAILURE(_output_21gswx_a0b); } for (GResource resource : Sequence.fromIterable(input)) { if (SModelOperations.getOutputLocation(resource.model()) == null) { monitor.reportFeedback(new IFeedback.ERROR(String.valueOf("no output location for " + resource.model().getName()))); } } final IMessageHandler messageHandler = monitor.getSession().getMessageHandler(); final Project mpsProject = monitor.getSession().getProject(); final TextGeneratorEngine tgEngine = new TextGeneratorEngine(messageHandler); // Perhaps, shall check res.status.isError(), however not sure if there // couldn't be an output model with error state, and we'd like to see erroneous text to localize error final Iterable<GResource> resourcesWithOutput = Sequence.fromIterable(input).where(new IWhereFilter<GResource>() { public boolean accept(GResource it) { return SModelOperations.getOutputLocation(it.model()) != null && it.status().getOutputModel() != null; } }); // configure final boolean _generateDebugInfo = vars(pa.global()).generateDebugInfo() == null || vars(pa.global()).generateDebugInfo(); int modelsCount = Sequence.fromIterable(resourcesWithOutput).count(); final ProgressMonitor subProgress_p0a0b = progressMonitor.subTask(1000); subProgress_p0a0b.start("Writing", modelsCount + 3); try { final ArrayBlockingQueue<TextGenResult> resultQueue = new ArrayBlockingQueue<TextGenResult>(modelsCount); final Map<SModel, GResource> textGenInput2Resource = new HashMap<SModel, GResource>(modelsCount * 2); mpsProject.getModelAccess().runReadAction(new Runnable() { public void run() { for (GResource res : Sequence.fromIterable(resourcesWithOutput)) { SModel model2generate = res.status().getOutputModel(); textGenInput2Resource.put(model2generate, res); tgEngine.schedule(model2generate, resultQueue); } } }); subProgress_p0a0b.advance(3); final Map<GResource, List<IDelta>> deltas2 = new HashMap<GResource, List<IDelta>>(); final List<FileProcessor> fileProcessors2 = ListSequence.fromList(new ArrayList<FileProcessor>()); while (modelsCount-- > 0) { final TextGenResult tgr = resultQueue.poll(3, TimeUnit.MINUTES); if (tgr == null) { monitor.reportFeedback(new IFeedback.ERROR(String.valueOf("Timeout while waiting for model text outcome, model skipped"))); continue; } for (TextUnit tu : tgr.getUnits()) { if (tu.getState() == TextUnit.Status.Failed) { monitor.reportFeedback(new IFeedback.ERROR(String.valueOf("Failed to generate text for " + tu.getFileName()))); } } subProgress_p0a0b.advance(1); subProgress_p0a0b.step(tgr.getModel().getReference().getModelName()); final GResource inputResource = textGenInput2Resource.get(tgr.getModel()); _output_21gswx_a0b = Sequence.fromIterable(_output_21gswx_a0b).concat(Sequence.fromIterable(Sequence.<IResource>singleton(new TextGenOutcomeResource(inputResource.model(), inputResource.module(), tgr)))); mpsProject.getModelAccess().runReadAction(new Runnable() { public void run() { Iterable<IDelta> retainedFilesDelta = RetainedUtil.retainedDeltas(inputResource.module(), Sequence.fromIterable(inputResource.retainedModels()).where(new IWhereFilter<SModel>() { public boolean accept(SModel smd) { return GenerationFacade.canGenerate(smd); } }), Target_make.vars(pa.global()).pathToFile()); MapSequence.fromMap(deltas2).put(inputResource, ListSequence.fromListWithValues(new ArrayList<IDelta>(), retainedFilesDelta)); final IFile javaOutputDir = Target_make.vars(pa.global()).pathToFile().invoke(DefaultStreamManager.Provider.getOutputDir(inputResource.model()).getPath()); final IFile cacheOutputDir = Target_make.vars(pa.global()).pathToFile().invoke(DefaultStreamManager.Provider.getCachesDir(inputResource.model()).getPath()); StaleFilesCollector staleFileCollector = new StaleFilesCollector(javaOutputDir); staleFileCollector.recordGeneratedChildren(inputResource.model()); FileProcessor fp = new FileProcessor(); ListSequence.fromList(fileProcessors2).addElement(fp); FileDeltaCollector javaSourcesLoc = new FileDeltaCollector(javaOutputDir, fp); FileDeltaCollector cachesLocation = new FileDeltaCollector(cacheOutputDir, fp); // // Serialize outcome GenerationDependencies genDeps = inputResource.status().getDependencies(); HashSet<String> seenFileNames = new HashSet<String>(); for (TextUnit tu : tgr.getUnits()) { TextUnit.Status tgState = tu.getState(); assert tgState != TextUnit.Status.Undefined; genDeps.update(TracingUtil.getInput(tu.getStartNode()), tu.getFileName()); if (tgState == TextUnit.Status.Empty) { continue; } if (tgState == TextUnit.Status.Failed) { monitor.reportFeedback(new IFeedback.ERROR(String.valueOf(String.format("Text outcome for %s has been generated with errors", tu.getFileName())))); // fall through } if (!(seenFileNames.add(tu.getFileName()))) { monitor.reportFeedback(new IFeedback.WARNING(String.valueOf(String.format("Duplicate unit name %s in model %s, output likely corrupt", tu.getFileName(), tgr.getModel().getName())))); } javaSourcesLoc.saveStream(tu.getFileName(), tu.getBytes()); } // let the world know unchanged files are still in use for (GenerationRootDependencies rdep : genDeps.getUnchangedDependencies()) { for (String fname : rdep.getFiles()) { javaSourcesLoc.touch(fname); } } // // Update caches and auxiliary artifacts CacheGenLayout cgl = new CacheGenLayout(messageHandler); cgl.register(cachesLocation, BLDependenciesCache.getInstance().newCacheGenerator(new BLDependenciesBuilder().build(tgr))); cgl.register(cachesLocation, GenerationDependenciesCache.getInstance().getGenerator()); if (_generateDebugInfo) { cgl.register(javaSourcesLoc, TraceInfoCache.getInstance().newCacheGenerator(new DebugInfoBuilder(mpsProject.getRepository()).build(tgr))); } cgl.register(javaSourcesLoc, new ModelExports.CacheGen()); cgl.register(javaSourcesLoc, new CrossModelEnvironment.CacheGen()); IStatus status = cgl.serialize(inputResource.status()); if (status.isError()) { monitor.reportFeedback(new IFeedback.ERROR(String.valueOf(status.getMessage()))); } staleFileCollector.updateDelta(javaSourcesLoc.getDelta()); new StaleFilesCollector(cacheOutputDir).updateDelta(cachesLocation.getDelta()); ListSequence.fromList(MapSequence.fromMap(deltas2).get(inputResource)).addElement(javaSourcesLoc.getDelta()); ListSequence.fromList(MapSequence.fromMap(deltas2).get(inputResource)).addElement(cachesLocation.getDelta()); fp.invalidateModel(inputResource.model()); } }); } // flush stream handlers if (!(FileSystem.getInstance().runWriteTransaction(new Runnable() { public void run() { for (FileProcessor fp : ListSequence.fromList(fileProcessors2)) { fp.flushChanges(); } } }))) { monitor.reportFeedback(new IFeedback.ERROR(String.valueOf("Failed to save files"))); return new IResult.FAILURE(_output_21gswx_a0b); } // output result for (GResource resource : SetSequence.fromSet(MapSequence.fromMap(deltas2).keySet())) { Iterable<IDelta> delta = MapSequence.fromMap(deltas2).get(resource); _output_21gswx_a0b = Sequence.fromIterable(_output_21gswx_a0b).concat(Sequence.fromIterable(Sequence.<IResource>singleton(new TResource(delta, resource.module(), resource.model())))); } } catch (InterruptedException ex) { monitor.reportFeedback(new IFeedback.ERROR(String.valueOf("TextGen interrupted"))); return new IResult.FAILURE(_output_21gswx_a0b); } catch (Exception ex) { // FIXME need an expression in ReportFeedbackStatement that would take Throwable and pass it to IFeedback ex.printStackTrace(); monitor.reportFeedback(new IFeedback.ERROR(String.valueOf("Exception during TextGen:" + ex.toString()))); return new IResult.FAILURE(_output_21gswx_a0b); } finally { tgEngine.shutdown(); subProgress_p0a0b.done(); } default: progressMonitor.done(); return new IResult.SUCCESS(_output_21gswx_a0b); } } }; } public IConfig createConfig() { return null; } public Iterable<ITarget.Name> notAfter() { return null; } public Iterable<ITarget.Name> after() { return Sequence.fromArray(new ITarget.Name[]{new ITarget.Name("jetbrains.mps.lang.core.Generate.generate"), new ITarget.Name("jetbrains.mps.lang.core.TextGen.configure")}); } public Iterable<ITarget.Name> notBefore() { return null; } public Iterable<ITarget.Name> before() { return Sequence.fromArray(new ITarget.Name[]{new ITarget.Name("jetbrains.mps.make.facets.Make.reconcile"), new ITarget.Name("jetbrains.mps.make.facets.Make.make")}); } public ITarget.Name getName() { return name; } public boolean isOptional() { return false; } public boolean requiresInput() { return true; } public boolean producesOutput() { return true; } public Iterable<Class<? extends IResource>> expectedInput() { List<Class<? extends IResource>> rv = ListSequence.fromList(new ArrayList<Class<? extends IResource>>()); ListSequence.fromList(rv).addElement(GResource.class); return rv; } public Iterable<Class<? extends IResource>> expectedOutput() { return null; } public <T> T createParameters(Class<T> cls) { return cls.cast(new Parameters()); } public <T> T createParameters(Class<T> cls, T copyFrom) { T t = createParameters(cls); if (t != null) { ((Tuples._2) t).assign((Tuples._2) copyFrom); } return t; } public int workEstimate() { return 400; } public static TextGen_Facet.Target_textGen.Parameters vars(IPropertiesPool ppool) { return ppool.properties(name, TextGen_Facet.Target_textGen.Parameters.class); } public static class Parameters extends MultiTuple._2<Boolean, Boolean> { public Parameters() { super(); } public Parameters(Boolean unused, Boolean generateDebugInfo) { super(unused, generateDebugInfo); } public Boolean unused(Boolean value) { return super._0(value); } public Boolean generateDebugInfo(Boolean value) { return super._1(value); } public Boolean unused() { return super._0(); } public Boolean generateDebugInfo() { return super._1(); } } } public static class Target_textGenToMemory implements ITargetEx2 { private static final ITarget.Name name = new ITarget.Name("jetbrains.mps.lang.core.TextGen.textGenToMemory"); public Target_textGenToMemory() { } public IJob createJob() { return new IJob.Stub() { @Override public IResult execute(final Iterable<IResource> rawInput, final IJobMonitor monitor, final IPropertiesAccessor pa, @NotNull final ProgressMonitor progressMonitor) { Iterable<IResource> _output_21gswx_a0c = null; final Iterable<GResource> input = (Iterable<GResource>) (Iterable) rawInput; switch (0) { case 0: final TextGeneratorEngine tgEngine = new TextGeneratorEngine(monitor.getSession().getMessageHandler()); try { int modelsCount = Sequence.fromIterable(input).count(); final ArrayBlockingQueue<TextGenResult> resultQueue = new ArrayBlockingQueue<TextGenResult>(modelsCount); for (GResource resource : Sequence.fromIterable(input)) { final SModel model = resource.status().getOutputModel(); if (model == null) { modelsCount--; monitor.reportFeedback(new IFeedback.ERROR(String.valueOf("Generated model in null"))); // used to be a 'failure', with text generation result collected so far. // Now, 'failure' here would yield empty result, always. // It looks like 'best effort' (generate all possible) is reasonable alternative. continue; } monitor.getSession().getProject().getModelAccess().runReadAction(new Runnable() { public void run() { tgEngine.schedule(model, resultQueue); } }); } while (modelsCount-- > 0) { final TextGenResult tgr = resultQueue.poll(1, TimeUnit.MINUTES); if (tgr == null) { monitor.reportFeedback(new IFeedback.ERROR(String.valueOf("Timeout while waiting for model text outcome, model skipped"))); continue; } Map<String, Object> texts = MapSequence.fromMap(new HashMap<String, Object>()); Map<SNodeReference, String> rootNodeToFileName = MapSequence.fromMap(new HashMap<SNodeReference, String>()); _output_21gswx_a0c = Sequence.fromIterable(_output_21gswx_a0c).concat(Sequence.fromIterable(Sequence.<IResource>singleton(new TextGenOutcomeResource(tgr.getModel(), tgr.getModel().getModule(), tgr)))); for (TextUnit tu : tgr.getUnits()) { if (tu.getState() == TextUnit.Status.Failed) { monitor.reportFeedback(new IFeedback.ERROR(String.valueOf("Failed to generate text for " + tu.getFileName()))); continue; } // compatibility code until all uses of FResource from TextGen are removed String fname = tu.getFileName(); MapSequence.fromMap(texts).put(fname, tu); SNodeReference sourceNode = TracingUtil.getInput(tu.getStartNode()); if (sourceNode != null) { if ((MapSequence.fromMap(rootNodeToFileName).get(sourceNode) == null) || (fname.compareTo(MapSequence.fromMap(rootNodeToFileName).get(sourceNode)) < 0)) { MapSequence.fromMap(rootNodeToFileName).put(sourceNode, fname); } } } _output_21gswx_a0c = Sequence.fromIterable(_output_21gswx_a0c).concat(Sequence.fromIterable(Sequence.<IResource>singleton(new FResource(JavaNameUtil.packageName(tgr.getModel()), texts, rootNodeToFileName, null, tgr.getModel())))); } } catch (InterruptedException ex) { // fine, no more text generation monitor.reportFeedback(new IFeedback.ERROR(String.valueOf("TextGen interrupted"))); } finally { tgEngine.shutdown(); } default: progressMonitor.done(); return new IResult.SUCCESS(_output_21gswx_a0c); } } }; } public IConfig createConfig() { return null; } public Iterable<ITarget.Name> notAfter() { return null; } public Iterable<ITarget.Name> after() { return Sequence.fromArray(new ITarget.Name[]{new ITarget.Name("jetbrains.mps.lang.core.Generate.generate"), new ITarget.Name("jetbrains.mps.lang.core.TextGen.configure")}); } public Iterable<ITarget.Name> notBefore() { return null; } public Iterable<ITarget.Name> before() { return null; } public ITarget.Name getName() { return name; } public boolean isOptional() { return false; } public boolean requiresInput() { return true; } public boolean producesOutput() { return true; } public Iterable<Class<? extends IResource>> expectedInput() { List<Class<? extends IResource>> rv = ListSequence.fromList(new ArrayList<Class<? extends IResource>>()); ListSequence.fromList(rv).addElement(GResource.class); return rv; } public Iterable<Class<? extends IResource>> expectedOutput() { return null; } public <T> T createParameters(Class<T> cls) { return null; } public <T> T createParameters(Class<T> cls, T copyFrom) { T t = createParameters(cls); return t; } public int workEstimate() { return 400; } } public static class TargetProperties implements IPropertiesPersistence { public TargetProperties() { } public void storeValues(Map<String, String> store, IPropertiesPool properties) { { ITarget.Name name = new ITarget.Name("jetbrains.mps.lang.core.TextGen.configure"); if (properties.hasProperties(name)) { TextGen_Facet.Target_configure.Parameters props = properties.properties(name, TextGen_Facet.Target_configure.Parameters.class); MapSequence.fromMap(store).put("jetbrains.mps.lang.core.TextGen.configure.unused", null); } } { ITarget.Name name = new ITarget.Name("jetbrains.mps.lang.core.TextGen.textGen"); if (properties.hasProperties(name)) { TextGen_Facet.Target_textGen.Parameters props = properties.properties(name, TextGen_Facet.Target_textGen.Parameters.class); MapSequence.fromMap(store).put("jetbrains.mps.lang.core.TextGen.textGen.unused", String.valueOf(props.unused())); MapSequence.fromMap(store).put("jetbrains.mps.lang.core.TextGen.textGen.generateDebugInfo", String.valueOf(props.generateDebugInfo())); } } } public void loadValues(Map<String, String> store, IPropertiesPool properties) { try { { ITarget.Name name = new ITarget.Name("jetbrains.mps.lang.core.TextGen.configure"); TextGen_Facet.Target_configure.Parameters props = properties.properties(name, TextGen_Facet.Target_configure.Parameters.class); if (MapSequence.fromMap(store).containsKey("jetbrains.mps.lang.core.TextGen.configure.unused")) { props.unused(null); } } { ITarget.Name name = new ITarget.Name("jetbrains.mps.lang.core.TextGen.textGen"); TextGen_Facet.Target_textGen.Parameters props = properties.properties(name, TextGen_Facet.Target_textGen.Parameters.class); if (MapSequence.fromMap(store).containsKey("jetbrains.mps.lang.core.TextGen.textGen.unused")) { props.unused(Boolean.valueOf(MapSequence.fromMap(store).get("jetbrains.mps.lang.core.TextGen.textGen.unused"))); } if (MapSequence.fromMap(store).containsKey("jetbrains.mps.lang.core.TextGen.textGen.generateDebugInfo")) { props.generateDebugInfo(Boolean.valueOf(MapSequence.fromMap(store).get("jetbrains.mps.lang.core.TextGen.textGen.generateDebugInfo"))); } } } catch (RuntimeException re) { } } } }