package jetbrains.mps.tool.gentest.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 java.util.stream.IntStream; import jetbrains.mps.internal.make.runtime.util.DeltaReconciler; import java.util.Set; import jetbrains.mps.internal.collections.runtime.SetSequence; import java.util.HashSet; import jetbrains.mps.internal.make.runtime.util.FilesDelta; import jetbrains.mps.vfs.IFile; import jetbrains.mps.smodel.SModelOperations; import jetbrains.mps.make.facets.Make_Facet.Target_make; import jetbrains.mps.make.script.IFeedback; 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.baseLanguage.closures.runtime._FunctionTypes; import java.io.File; import java.util.Map; import jetbrains.mps.internal.collections.runtime.MapSequence; public class Diff_Facet extends IFacet.Stub { private List<ITarget> targets = ListSequence.fromList(new ArrayList<ITarget>()); private IFacet.Name name = new IFacet.Name("jetbrains.mps.tool.gentest.Diff"); public Diff_Facet() { ListSequence.fromList(targets).addElement(new Diff_Facet.Target_diff()); } 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.TextGen"), 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 Diff_Facet.TargetProperties(); } public static class Target_diff implements ITargetEx2 { private static final ITarget.Name name = new ITarget.Name("jetbrains.mps.tool.gentest.Diff.diff"); public Target_diff() { } 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_mtqq_a0a = null; final Iterable<TResource> input = (Iterable<TResource>) (Iterable) rawInput; progressMonitor.start("", IntStream.of(1000).sum()); switch (0) { case 0: if (vars(pa.global()).fileToPath() != null) { final ProgressMonitor subProgress_a0a0a0a = progressMonitor.subTask(1000); subProgress_a0a0a0a.start("Diffing", 100 * Sequence.fromIterable(input).count()); for (TResource tgres : Sequence.fromIterable(input)) { String fqn = tgres.modelDescriptor().getName().getLongName(); subProgress_a0a0a0a.advance(1); subProgress_a0a0a0a.step(fqn); DeltaReconciler dr = new DeltaReconciler(tgres.delta()); final Set<String> retainedPaths = SetSequence.fromSet(new HashSet<String>()); dr.visitAll(new FilesDelta.Visitor() { @Override public boolean acceptKept(IFile file) { SetSequence.fromSet(retainedPaths).addElement(vars(pa.global()).fileToPath().invoke(file)); return true; } }); final Differ differ = new Differ(retainedPaths, vars(pa.global()).excludedFiles()); final StringBuilder errors = new StringBuilder(); final String outDirPath = SModelOperations.getOutputLocation(tgres.modelDescriptor()).getPath(); for (String diff : differ.diff(outDirPath, Target_make.vars(pa.global()).pathToFile().invoke(outDirPath).getPath())) { errors.append("\n").append(diff); } if (errors.length() > 0) { monitor.reportFeedback(new IFeedback.ERROR(String.valueOf("Differences\n" + errors.toString()))); } subProgress_a0a0a0a.advance(99); subProgress_a0a0a0a.step(fqn); } subProgress_a0a0a0a.done(); } default: progressMonitor.done(); return new IResult.SUCCESS(_output_mtqq_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.make.facets.Make.reconcile")}); } 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.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(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._2) t).assign((Tuples._2) copyFrom); } return t; } public int workEstimate() { return 500; } public static Diff_Facet.Target_diff.Parameters vars(IPropertiesPool ppool) { return ppool.properties(name, Diff_Facet.Target_diff.Parameters.class); } public static class Parameters extends MultiTuple._2<_FunctionTypes._return_P1_E0<? extends String, ? super IFile>, Set<File>> { public Parameters() { super(); } public Parameters(_FunctionTypes._return_P1_E0<? extends String, ? super IFile> fileToPath, Set<File> excludedFiles) { super(fileToPath, excludedFiles); } public _FunctionTypes._return_P1_E0<? extends String, ? super IFile> fileToPath(_FunctionTypes._return_P1_E0<? extends String, ? super IFile> value) { return super._0(value); } public Set<File> excludedFiles(Set<File> value) { return super._1(value); } public _FunctionTypes._return_P1_E0<? extends String, ? super IFile> fileToPath() { return super._0(); } public Set<File> excludedFiles() { return super._1(); } } } 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.tool.gentest.Diff.diff"); if (properties.hasProperties(name)) { Diff_Facet.Target_diff.Parameters props = properties.properties(name, Diff_Facet.Target_diff.Parameters.class); MapSequence.fromMap(store).put("jetbrains.mps.tool.gentest.Diff.diff.fileToPath", null); MapSequence.fromMap(store).put("jetbrains.mps.tool.gentest.Diff.diff.excludedFiles", null); } } } public void loadValues(Map<String, String> store, IPropertiesPool properties) { try { { ITarget.Name name = new ITarget.Name("jetbrains.mps.tool.gentest.Diff.diff"); Diff_Facet.Target_diff.Parameters props = properties.properties(name, Diff_Facet.Target_diff.Parameters.class); if (MapSequence.fromMap(store).containsKey("jetbrains.mps.tool.gentest.Diff.diff.fileToPath")) { props.fileToPath(null); } if (MapSequence.fromMap(store).containsKey("jetbrains.mps.tool.gentest.Diff.diff.excludedFiles")) { props.excludedFiles(null); } } } catch (RuntimeException re) { } } } }