package jetbrains.mps.ide.modelchecker.platform.actions;
/*Generated by MPS */
import org.apache.log4j.Logger;
import org.apache.log4j.LogManager;
import jetbrains.mps.ide.findusages.model.SearchResults;
import java.util.List;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.mps.openapi.model.SModel;
import org.jetbrains.mps.openapi.util.ProgressMonitor;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import org.jetbrains.mps.openapi.module.SModule;
import org.apache.log4j.Level;
import jetbrains.mps.ide.findusages.model.SearchResult;
import org.jetbrains.mps.openapi.util.SubProgressKind;
public class ModelChecker {
private static final Logger LOG = LogManager.getLogger(ModelChecker.class);
public static final String SEVERITY_ERROR = "Errors";
public static final String SEVERITY_WARNING = "Warnings";
public static final String SEVERITY_INFO = "Infos";
private final SearchResults<ModelCheckerIssue> myResults;
private final List<SpecificChecker> mySpecificCheckers;
public ModelChecker(@NotNull List<SpecificChecker> specificCheckers) {
myResults = new SearchResults<ModelCheckerIssue>();
mySpecificCheckers = specificCheckers;
}
public void checkModel(SModel model, ProgressMonitor monitor) {
monitor.start("Checking " + model.getName(), ListSequence.fromList(mySpecificCheckers).count());
try {
SModule module = model.getModule();
if (module == null) {
if (LOG.isEnabledFor(Level.WARN)) {
LOG.warn("Module is null for " + model.getName() + " model");
}
return;
}
for (SpecificChecker specificChecker : ListSequence.fromList(mySpecificCheckers)) {
try {
List<SearchResult<ModelCheckerIssue>> specificCheckerResults = specificChecker.checkModel(model, monitor.subTask(1, SubProgressKind.AS_COMMENT));
myResults.getSearchResults().addAll(specificCheckerResults);
} catch (Throwable t) {
if (LOG.isEnabledFor(Level.ERROR)) {
LOG.error("Error while " + model.getName() + " model checking", t);
}
}
if (monitor.isCanceled()) {
break;
}
}
} finally {
monitor.done();
}
}
public SearchResults<ModelCheckerIssue> getSearchResults() {
return myResults;
}
}