package jetbrains.mps.testbench.junit.suites;
/*Generated by MPS */
import java.util.List;
import jetbrains.mps.checkers.IRootChecker;
import org.jetbrains.mps.openapi.model.SModel;
import java.util.ArrayList;
import jetbrains.mps.smodel.SModelStereotype;
import org.jetbrains.mps.openapi.model.SNode;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SModelOperations;
import java.util.Set;
import jetbrains.mps.errors.IErrorReporter;
import jetbrains.mps.checkers.ErrorReportUtil;
import jetbrains.mps.errors.MessageStatus;
import jetbrains.mps.util.SNodeOperations;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.AttributeOperations;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.IAttributeDescriptor;
import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SLinkOperations;
public class CheckingTestsUtil {
private final CheckingTestStatistic myStats;
public CheckingTestsUtil(CheckingTestStatistic statistic) {
myStats = statistic;
}
public List<String> applyChecker(final IRootChecker checker, final Iterable<SModel> models) {
final List<String> errors = new ArrayList<String>();
for (SModel sm : models) {
if (!(SModelStereotype.isUserModel(sm))) {
continue;
}
if (SModelStereotype.isGeneratorModel(sm)) {
continue;
}
for (SNode root : SModelOperations.roots(((SModel) sm), null)) {
Set<IErrorReporter> errorReporters = null;
try {
errorReporters = checker.getErrors(root, sm.getRepository());
} catch (IllegalStateException e) {
errors.add(e.getMessage());
}
for (IErrorReporter reporter : errorReporters) {
if (!(ErrorReportUtil.shouldReportError(reporter.getSNode()))) {
continue;
}
if (reporter.getMessageStatus().equals(MessageStatus.ERROR)) {
SNode node = reporter.getSNode();
if (!(CheckingTestsUtil.filterIssue(node))) {
continue;
}
myStats.reportError();
errors.add("Error message: " + reporter.reportError() + " model: " + SNodeOperations.getModelLongName(node.getModel()) + " root: " + node.getContainingRoot() + " node: " + node);
}
if (reporter.getMessageStatus().equals(MessageStatus.WARNING)) {
myStats.reportWarning();
}
}
}
}
return errors;
}
public static boolean filterIssue(SNode node) {
SNode container = AttributeOperations.getAttribute(node, new IAttributeDescriptor.NodeAttribute(MetaAdapterFactory.getConcept(0x8585453e6bfb4d80L, 0x98deb16074f1d86cL, 0x11b07a3d4b5L, "jetbrains.mps.lang.test.structure.NodeOperationsContainer")));
if (container == null) {
return true;
}
for (SNode property : SLinkOperations.getChildren(container, MetaAdapterFactory.getContainmentLink(0x8585453e6bfb4d80L, 0x98deb16074f1d86cL, 0x11b07a3d4b5L, 0x11b07abae7cL, "nodeOperations"))) {
if (jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations.isInstanceOf(property, MetaAdapterFactory.getConcept(0x8585453e6bfb4d80L, 0x98deb16074f1d86cL, 0x11b01e7283dL, "jetbrains.mps.lang.test.structure.NodeErrorCheckOperation"))) {
return false;
}
}
return true;
}
public static String formatErrors(List<String> errors) {
StringBuilder sb = new StringBuilder();
String sep = "";
for (String er : errors) {
sb.append(sep).append(er);
sep = "\n";
}
return sb.toString();
}
}