package jetbrains.mps.make.dependencies;
/*Generated by MPS */
import jetbrains.mps.make.resources.IResource;
import org.jetbrains.mps.openapi.language.SLanguage;
import jetbrains.mps.smodel.language.LanguageRegistry;
import jetbrains.mps.make.script.IScript;
import org.jetbrains.annotations.NotNull;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import java.util.ArrayList;
import jetbrains.mps.make.script.ScriptBuilder;
import jetbrains.mps.smodel.language.LanguageRuntime;
import jetbrains.mps.smodel.runtime.MakeAspectDescriptor;
import jetbrains.mps.make.facet.IFacet;
import jetbrains.mps.internal.collections.runtime.Sequence;
import java.util.Collections;
import jetbrains.mps.internal.collections.runtime.ISelector;
import jetbrains.mps.make.facet.FacetRegistry;
import jetbrains.mps.make.facet.ITarget;
public class Cluster {
private final Iterable<IResource> myResources;
private final Iterable<SLanguage> myUsedLang;
private final LanguageRegistry myLanguageRegistry;
private IScript myScript;
/*package*/ Cluster(@NotNull Iterable<? extends IResource> resources, @NotNull Iterable<SLanguage> usedLang, @NotNull LanguageRegistry languageRegistry) {
myResources = ListSequence.fromListWithValues(new ArrayList<IResource>(), resources);
myUsedLang = usedLang;
myLanguageRegistry = languageRegistry;
}
public Iterable<SLanguage> allUsedLangNamespaces() {
return myUsedLang;
}
public Iterable<IResource> getResources() {
return myResources;
}
public ScriptBuilder createScriptBuilder() {
ScriptBuilder scb = new ScriptBuilder();
for (SLanguage ns : allUsedLangNamespaces()) {
LanguageRuntime lr = myLanguageRegistry.getLanguage(ns);
MakeAspectDescriptor aspect = (lr == null ? null : lr.getAspect(MakeAspectDescriptor.class));
Iterable<IFacet> fcts = (aspect == null ? Sequence.fromIterable(Collections.<IFacet>emptyList()) : aspect.getManifest().facets());
scb.withFacetNames(Sequence.fromIterable(fcts).select(new ISelector<IFacet, IFacet.Name>() {
public IFacet.Name select(IFacet fct) {
return fct.getName();
}
}));
scb.withFacetNames(Sequence.fromIterable(FacetRegistry.getInstance().getFacetsForLanguage(ns.getQualifiedName())).select(new ISelector<IFacet, IFacet.Name>() {
public IFacet.Name select(IFacet fct) {
return fct.getName();
}
}));
}
return scb.withFinalTarget(new ITarget.Name("jetbrains.mps.make.facets.Make.make"));
}
public void setScript(IScript script) {
myScript = script;
}
public IScript getScript() {
return myScript;
}
}