package jetbrains.mps.lang.traceable.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.ITargetEx2; 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.smodel.resources.TResource; import jetbrains.mps.vfs.IFile; import jetbrains.mps.baseLanguage.tuples.runtime.Tuples; import jetbrains.mps.project.facets.JavaModuleFacet; import jetbrains.mps.internal.collections.runtime.IVisitor; import jetbrains.mps.make.delta.IDelta; import jetbrains.mps.internal.make.runtime.util.FilesDelta; import jetbrains.mps.textgen.trace.TraceInfoCache; import jetbrains.mps.baseLanguage.tuples.runtime.MultiTuple; import jetbrains.mps.vfs.FileSystem; import jetbrains.mps.vfs.IFileUtils; import jetbrains.mps.make.script.IConfig; import jetbrains.mps.make.script.IPropertiesPool; import java.util.Map; import jetbrains.mps.internal.collections.runtime.MapSequence; public class CopyTraceInfo_Facet extends IFacet.Stub { private List<ITarget> targets = ListSequence.fromList(new ArrayList<ITarget>()); private IFacet.Name name = new IFacet.Name("jetbrains.mps.lang.traceable.CopyTraceInfo"); public CopyTraceInfo_Facet() { ListSequence.fromList(targets).addElement(new CopyTraceInfo_Facet.Target_copyTraceInfo()); } 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 CopyTraceInfo_Facet.TargetProperties(); } public static class Target_copyTraceInfo implements ITargetEx2 { private static final ITarget.Name name = new ITarget.Name("jetbrains.mps.lang.traceable.CopyTraceInfo.copyTraceInfo"); public Target_copyTraceInfo() { } 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_zgz0lb_a0a = null; final Iterable<TResource> input = (Iterable<TResource>) (Iterable) rawInput; switch (0) { case 0: if (Boolean.TRUE.equals(vars(pa.global()).skipCopying())) { return new IResult.SUCCESS(_output_zgz0lb_a0a); } progressMonitor.start("Copying resources", 2); progressMonitor.step("trace.info"); try { final List<IFile> toCreate = ListSequence.fromList(new ArrayList<IFile>()); final List<Tuples._2<IFile, IFile>> toCopy = ListSequence.fromList(new ArrayList<Tuples._2<IFile, IFile>>()); for (TResource tres : Sequence.fromIterable(input)) { JavaModuleFacet facet = tres.module().getFacet(JavaModuleFacet.class); if (facet == null) { // not java module // todo: do something?! continue; } if (!(facet.isCompileInMps())) { // idea copies trace.info files continue; } final IFile destination = facet.getClassesLocation(tres.modelDescriptor()); if (!(destination.exists())) { ListSequence.fromList(toCreate).addElement(destination); } Sequence.fromIterable(tres.delta()).visitAll(new IVisitor<IDelta>() { public void visit(IDelta it) { it.acceptVisitor(new FilesDelta.Visitor() { @Override public boolean acceptWritten(IFile file) { if (file.getName().equals(TraceInfoCache.TRACE_FILE_NAME)) { IFile copy = destination.getDescendant(file.getName()); ListSequence.fromList(toCopy).addElement(MultiTuple.<IFile,IFile>from(file, copy)); } return true; } }); } }); _output_zgz0lb_a0a = Sequence.fromIterable(_output_zgz0lb_a0a).concat(Sequence.fromIterable(Sequence.<IResource>singleton(tres))); } FileSystem.getInstance().runWriteTransaction(new Runnable() { public void run() { ListSequence.fromList(toCreate).visitAll(new IVisitor<IFile>() { public void visit(IFile it) { it.mkdirs(); } }); ListSequence.fromList(toCopy).visitAll(new IVisitor<Tuples._2<IFile, IFile>>() { public void visit(Tuples._2<IFile, IFile> ftc) { IFileUtils.copyFileContent(ftc._0(), ftc._1()); } }); } }); } finally { progressMonitor.done(); } default: progressMonitor.done(); return new IResult.SUCCESS(_output_zgz0lb_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 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(TResource.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._1) t).assign((Tuples._1) copyFrom); } return t; } public int workEstimate() { return 30; } public static CopyTraceInfo_Facet.Target_copyTraceInfo.Parameters vars(IPropertiesPool ppool) { return ppool.properties(name, CopyTraceInfo_Facet.Target_copyTraceInfo.Parameters.class); } public static class Parameters extends MultiTuple._1<Boolean> { public Parameters() { super(); } public Parameters(Boolean skipCopying) { super(skipCopying); } public Boolean skipCopying(Boolean value) { return super._0(value); } public Boolean skipCopying() { return super._0(); } } } 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.traceable.CopyTraceInfo.copyTraceInfo"); if (properties.hasProperties(name)) { CopyTraceInfo_Facet.Target_copyTraceInfo.Parameters props = properties.properties(name, CopyTraceInfo_Facet.Target_copyTraceInfo.Parameters.class); MapSequence.fromMap(store).put("jetbrains.mps.lang.traceable.CopyTraceInfo.copyTraceInfo.skipCopying", String.valueOf(props.skipCopying())); } } } public void loadValues(Map<String, String> store, IPropertiesPool properties) { try { { ITarget.Name name = new ITarget.Name("jetbrains.mps.lang.traceable.CopyTraceInfo.copyTraceInfo"); CopyTraceInfo_Facet.Target_copyTraceInfo.Parameters props = properties.properties(name, CopyTraceInfo_Facet.Target_copyTraceInfo.Parameters.class); if (MapSequence.fromMap(store).containsKey("jetbrains.mps.lang.traceable.CopyTraceInfo.copyTraceInfo.skipCopying")) { props.skipCopying(Boolean.valueOf(MapSequence.fromMap(store).get("jetbrains.mps.lang.traceable.CopyTraceInfo.copyTraceInfo.skipCopying"))); } } } catch (RuntimeException re) { } } } }