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