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(); } }