package jetbrains.mps.tool.builder.make; /*Generated by MPS */ import jetbrains.mps.tool.builder.paths.IRedirects; import java.util.Map; import jetbrains.mps.internal.collections.runtime.MapSequence; import java.util.HashMap; import java.util.List; import jetbrains.mps.internal.collections.runtime.ListSequence; import java.util.ArrayList; import org.jetbrains.mps.openapi.model.SModel; import java.util.Collections; import jetbrains.mps.make.script.IScriptController; import jetbrains.mps.make.MakeSession; import jetbrains.mps.generator.IModifiableGenerationSettings; import jetbrains.mps.generator.GenerationSettingsProvider; import jetbrains.mps.generator.GenerationOptions; import jetbrains.mps.make.script.IPropertiesPool; import jetbrains.mps.make.facet.ITarget; import jetbrains.mps.make.resources.IResource; import jetbrains.mps.internal.make.cfg.GenerateFacetInitializer; import jetbrains.mps.baseLanguage.tuples.runtime.Tuples; import jetbrains.mps.internal.make.cfg.JavaCompileFacetInitializer; import jetbrains.mps.internal.make.cfg.MakeFacetInitializer; import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes; import jetbrains.mps.vfs.IFile; public class ReducedMakeFacetConfiguration { private boolean rebuild; private IRedirects outputPathRedirects; private Map<String, String> fileHashes = MapSequence.fromMap(new HashMap<String, String>()); private List<String> writtenFiles = ListSequence.fromList(new ArrayList<String>()); private List<String> deletedFiles = ListSequence.fromList(new ArrayList<String>()); private List<String> keptFiles = ListSequence.fromList(new ArrayList<String>()); private Map<String, SModel> sources = MapSequence.fromMap(new HashMap<String, SModel>()); public ReducedMakeFacetConfiguration(IRedirects pathRedirects) { this.outputPathRedirects = pathRedirects; } public ReducedMakeFacetConfiguration(IRedirects pathRedirects, boolean rebuild) { this.outputPathRedirects = pathRedirects; this.rebuild = rebuild; } public Map<String, String> getFileHashes() { return Collections.unmodifiableMap(fileHashes); } public List<String> getWrittenFiles() { return ListSequence.fromList(writtenFiles).asUnmodifiable(); } public List<String> getKeptFiles() { return ListSequence.fromList(keptFiles).asUnmodifiable(); } public List<String> getDeletedFiles() { return ListSequence.fromList(deletedFiles).asUnmodifiable(); } public SModel getSource(String filePath) { return MapSequence.fromMap(sources).get(filePath); } public IScriptController configureFacets(final MakeSession makeSession) { IModifiableGenerationSettings settings = GenerationSettingsProvider.getInstance().getGenerationSettings(); settings.setIncremental(true); settings.setIncrementalUseCache(false); final GenerationOptions.OptionsBuilder optBuilder = GenerationOptions.fromSettings(settings); return new IScriptController.Stub2(makeSession) { @Override public void setup(IPropertiesPool pp, Iterable<ITarget> toExecute, Iterable<? extends IResource> input) { // FIXME rebuild is actually part of MakeSession, not of this RMFC class. For unknown reason, however, idea plugin // uses distinct values for session's and generation's clean flag new GenerateFacetInitializer().cleanMake(rebuild).setGenerationOptions(optBuilder).populate(pp); Tuples._1<Boolean> skipCopyTraceinfo = (Tuples._1<Boolean>) pp.properties(new ITarget.Name("jetbrains.mps.lang.traceable.CopyTraceInfo.copyTraceInfo"), Object.class); if (skipCopyTraceinfo != null) { skipCopyTraceinfo._0(true); } new JavaCompileFacetInitializer().skipCompilation(true).populate(pp); Tuples._4<List<String>, List<String>, List<String>, Map<String, SModel>> report = (Tuples._4<List<String>, List<String>, List<String>, Map<String, SModel>>) pp.properties(new ITarget.Name("jetbrains.mps.make.reduced.ReportFiles.report"), Object.class); report._0(writtenFiles); report._1(deletedFiles); report._2(keptFiles); report._3(sources); Tuples._1<Map<String, String>> hashes = (Tuples._1<Map<String, String>>) pp.properties(new ITarget.Name("jetbrains.mps.make.reduced.CollectHashes.collect"), Object.class); hashes._0(fileHashes); MakeFacetInitializer makeFacetInit = new MakeFacetInitializer(); makeFacetInit.skipReconcile(true); // override solution's output path makeFacetInit.setPathToFile(new _FunctionTypes._return_P1_E0<IFile, String>() { public IFile invoke(String path) { return outputPathRedirects.getRedirect(path); } }); makeFacetInit.populate(pp); } }; } }