package jetbrains.mps.checkers;
/*Generated by MPS */
import jetbrains.mps.typesystem.inference.DefaultTypecheckingContextOwner;
import java.util.Set;
import jetbrains.mps.errors.IErrorReporter;
import org.jetbrains.mps.openapi.model.SNode;
import org.jetbrains.mps.openapi.module.SRepository;
import jetbrains.mps.internal.collections.runtime.SetSequence;
import java.util.HashSet;
import jetbrains.mps.typesystem.inference.TypeContextManager;
import jetbrains.mps.typesystem.inference.ITypechecking;
import jetbrains.mps.typesystem.inference.TypeCheckingContext;
import jetbrains.mps.util.Pair;
import java.util.List;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import org.jetbrains.mps.openapi.util.Processor;
import jetbrains.mps.internal.collections.runtime.IVisitor;
public class TypesystemChecker implements IRootChecker {
private DefaultTypecheckingContextOwner myContextOwner = new DefaultTypecheckingContextOwner();
public TypesystemChecker() {
}
@Override
public Set<IErrorReporter> getErrors(SNode root, SRepository repository) {
final Set<IErrorReporter> errors = SetSequence.fromSet(new HashSet<IErrorReporter>());
TypeContextManager.getInstance().runTypeCheckingAction(myContextOwner, root, new ITypechecking.Action() {
public void run(TypeCheckingContext typeContext) {
for (Pair<SNode, List<IErrorReporter>> pair : typeContext.checkRootAndGetErrors(true)) {
SetSequence.fromSet(errors).addSequence(ListSequence.fromList(pair.o2));
}
}
});
return errors;
}
@Override
public void processErrors(SNode root, SRepository repository, final Processor<IErrorReporter> processor) {
SetSequence.fromSet(getErrors(root, repository)).visitAll(new IVisitor<IErrorReporter>() {
public void visit(IErrorReporter it) {
processor.process(it);
}
});
}
}