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