package jetbrains.mps.build.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.lang.core.plugin.TextGenOutcomeResource; import java.util.stream.IntStream; import jetbrains.mps.internal.make.runtime.java.FileProcessor; import jetbrains.mps.internal.make.runtime.util.FilesDelta; import jetbrains.mps.text.TextGenResult; import jetbrains.mps.text.TextUnit; import jetbrains.mps.util.CopyFacetUtil; import jetbrains.mps.make.script.IFeedback; import jetbrains.mps.vfs.IFile; import jetbrains.mps.vfs.FileSystem; import jetbrains.mps.make.delta.IDelta; import jetbrains.mps.internal.collections.runtime.ILeftCombinator; import jetbrains.mps.smodel.resources.DResource; import jetbrains.mps.make.script.IConfig; import java.util.Map; import jetbrains.mps.make.script.IPropertiesPool; public class CopyGeneratedScripts_Facet extends IFacet.Stub { private List<ITarget> targets = ListSequence.fromList(new ArrayList<ITarget>()); private IFacet.Name name = new IFacet.Name("jetbrains.mps.build.CopyGeneratedScripts"); public CopyGeneratedScripts_Facet() { ListSequence.fromList(targets).addElement(new CopyGeneratedScripts_Facet.Target_copyFiles()); } 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.lang.core.TextGen")}); } public Iterable<IFacet.Name> extended() { return null; } public IFacet.Name getName() { return this.name; } public IPropertiesPersistence propertiesPersistence() { return new CopyGeneratedScripts_Facet.TargetProperties(); } public static class Target_copyFiles implements ITargetEx { private static final ITarget.Name name = new ITarget.Name("jetbrains.mps.build.CopyGeneratedScripts.copyFiles"); public Target_copyFiles() { } 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_ixa0pj_a0a = null; final Iterable<TextGenOutcomeResource> input = (Iterable<TextGenOutcomeResource>) (Iterable) rawInput; progressMonitor.start("", IntStream.of(1000).sum()); switch (0) { case 0: final FileProcessor fp = new FileProcessor(); List<FilesDelta> deltas = ListSequence.fromList(new ArrayList<FilesDelta>()); final ProgressMonitor subProgress_c0a0a = progressMonitor.subTask(1000); subProgress_c0a0a.start("Build language ANT files", Sequence.fromIterable(input).count() + 2); for (TextGenOutcomeResource res : Sequence.fromIterable(input)) { subProgress_c0a0a.advance(1); subProgress_c0a0a.step(res.getModel().getModelName()); TextGenResult textGenResult = res.getTextGenResult(); for (TextUnit tu : textGenResult.getUnits()) { String targetXml = CopyFacetUtil.getTargetPath(tu.getStartNode()); if (targetXml != null) { String fileName = tu.getFileName(); if (!(fileName.endsWith(".xml"))) { String ext = Utils.getExtensionWithDot(fileName); if ((ext == null || ext.length() == 0)) { // do not copy monitor.reportFeedback(new IFeedback.WARNING(String.valueOf("Ignored " + fileName))); continue; } targetXml = Utils.withoutExtension(targetXml) + ext; } monitor.reportFeedback(new IFeedback.INFORMATION(String.valueOf(String.format("copy generated script: %s --> %s", fileName, targetXml)))); IFile destFile = FileSystem.getInstance().getFileByPath(targetXml); boolean changed = fp.saveContent(destFile, tu.getBytes()); FilesDelta d = new FilesDelta(destFile.getParent()); if (changed) { d.written(destFile); } else { d.kept(destFile); } ListSequence.fromList(deltas).addElement(d); } } } if (ListSequence.fromList(deltas).isNotEmpty()) { IDelta folded = ListSequence.fromList(deltas).ofType(IDelta.class).reduceLeft(new ILeftCombinator<IDelta, IDelta>() { public IDelta combine(IDelta a, IDelta b) { return a.merge(b); } }); _output_ixa0pj_a0a = Sequence.fromIterable(_output_ixa0pj_a0a).concat(Sequence.fromIterable(Sequence.<IResource>singleton(new DResource(Sequence.<IDelta>singleton(folded))))); } subProgress_c0a0a.advance(1); subProgress_c0a0a.step("writing..."); FileSystem.getInstance().runWriteTransaction(new Runnable() { @Override public void run() { fp.flushChanges(); } }); subProgress_c0a0a.done(); default: progressMonitor.done(); return new IResult.SUCCESS(_output_ixa0pj_a0a); } } }; } 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.TextGen.textGen")}); } 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")}); } public ITarget.Name getName() { return name; } public boolean isOptional() { return true; } 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(TextGenOutcomeResource.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 static class TargetProperties implements IPropertiesPersistence { public TargetProperties() { } public void storeValues(Map<String, String> store, IPropertiesPool properties) { } public void loadValues(Map<String, String> store, IPropertiesPool properties) { try { } catch (RuntimeException re) { } } } }