package jetbrains.mps.smodel.resources;
/*Generated by MPS */
import org.jetbrains.mps.openapi.model.SModel;
import jetbrains.mps.make.resources.IResource;
import jetbrains.mps.internal.collections.runtime.Sequence;
import jetbrains.mps.internal.collections.runtime.ISelector;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import java.util.ArrayList;
import jetbrains.mps.generator.GenerationFacade;
import jetbrains.mps.baseLanguage.closures.runtime.Wrappers;
import java.util.List;
import jetbrains.mps.internal.collections.runtime.ITranslator2;
import java.util.Iterator;
import jetbrains.mps.baseLanguage.closures.runtime.YieldingIterator;
import jetbrains.mps.project.AbstractModule;
public class ModelsToResources {
private final Iterable<SModel> models;
public ModelsToResources(Iterable<SModel> models) {
this.models = models;
}
public Iterable<IResource> resources(boolean dirtyOnly) {
Iterable<SModel> smds = Sequence.fromIterable(models).distinct();
smds = Sequence.fromIterable(smds).sort(new ISelector<SModel, String>() {
public String select(SModel desc) {
return desc.getModule().getModuleName();
}
}, true);
if (dirtyOnly) {
smds = ListSequence.fromListWithValues(new ArrayList<SModel>(), (Iterable<SModel>) GenerationFacade.getModifiedModels(Sequence.fromIterable(smds).toListSequence()));
}
return arrangeByModule(smds);
}
private Iterable<IResource> arrangeByModule(Iterable<SModel> smds) {
final Wrappers._T<List<SModel>> models = new Wrappers._T<List<SModel>>(null);
return (Iterable<IResource>) Sequence.fromIterable(smds).concat(Sequence.fromIterable(Sequence.<SModel>singleton(null))).translate(new ITranslator2<SModel, MResource>() {
public Iterable<MResource> translate(final SModel smd) {
return new Iterable<MResource>() {
public Iterator<MResource> iterator() {
return new YieldingIterator<MResource>() {
private int __CP__ = 0;
protected boolean moveToNext() {
__loop__:
do {
__switch__:
switch (this.__CP__) {
case -1:
assert false : "Internal error";
return false;
case 2:
if (smd == null) {
this.__CP__ = 3;
break;
}
this.__CP__ = 8;
break;
case 5:
if (models.value != null) {
this.__CP__ = 6;
break;
}
this.__CP__ = 1;
break;
case 9:
if (models.value != null) {
this.__CP__ = 10;
break;
}
this.__CP__ = 11;
break;
case 12:
if (ListSequence.fromList(models.value).last().getModule() == smd.getModule()) {
this.__CP__ = 13;
break;
}
this.__CP__ = 15;
break;
case 11:
if (models.value == null) {
this.__CP__ = 18;
break;
}
this.__CP__ = 1;
break;
case 7:
this.__CP__ = 1;
this.yield(new MResource((AbstractModule) ListSequence.fromList(models.value).last().getModule(), (Iterable<SModel>) (Iterable) models.value));
return true;
case 16:
this.__CP__ = 17;
this.yield(new MResource((AbstractModule) ListSequence.fromList(models.value).last().getModule(), (Iterable<SModel>) (Iterable) models.value));
return true;
case 0:
this.__CP__ = 2;
break;
case 3:
// end marker reached
this.__CP__ = 5;
break;
case 6:
this.__CP__ = 7;
break;
case 8:
this.__CP__ = 9;
break;
case 10:
this.__CP__ = 12;
break;
case 13:
ListSequence.fromList(models.value).addElement(smd);
this.__CP__ = 11;
break;
case 15:
this.__CP__ = 16;
break;
case 17:
models.value = null;
this.__CP__ = 11;
break;
case 18:
models.value = ListSequence.fromListAndArray(new ArrayList<SModel>(), smd);
this.__CP__ = 1;
break;
default:
break __loop__;
}
} while (true);
return false;
}
};
}
};
}
}).select(new ISelector<MResource, IResource>() {
public IResource select(MResource r) {
return (IResource) r;
}
}).toListSequence();
}
}