package jetbrains.mps.testbench.junit.suites;
/*Generated by MPS */
import java.util.Set;
import org.jetbrains.mps.openapi.model.SModel;
import java.util.HashSet;
import org.jetbrains.mps.openapi.module.SModule;
import jetbrains.mps.smodel.Language;
import jetbrains.mps.smodel.Generator;
import java.util.Collection;
import jetbrains.mps.smodel.SModelStereotype;
import jetbrains.mps.generator.GenerationFacade;
public class ModelsExtractor {
private Set<SModel> models = new HashSet<SModel>();
private final SModule module;
private final boolean myIncludeDoNotGenerate;
public ModelsExtractor(SModule module, boolean includeDoNotGenerate) {
this.module = module;
this.myIncludeDoNotGenerate = includeDoNotGenerate;
extractModels(module);
}
public ModelsExtractor includingGenerators() {
if (module instanceof Language) {
for (Generator gen : ((Language) module).getGenerators()) {
extractModels(gen);
}
}
return this;
}
public Collection<SModel> getModels() {
return models;
}
private void extractModels(SModule m) {
for (SModel d : m.getModels()) {
if (includeModel(d)) {
models.add(d);
}
}
}
private boolean includeModel(SModel model) {
return SModelStereotype.isUserModel(model) && (myIncludeDoNotGenerate || GenerationFacade.canGenerate(model));
}
}