package jetbrains.mps.lang.test.runtime; /*Generated by MPS */ import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.typesystem.inference.TypeCheckingContext; import jetbrains.mps.typesystem.inference.TypeContextManager; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; import org.jetbrains.mps.openapi.language.SAbstractConcept; import junit.framework.Assert; import jetbrains.mps.newTypesystem.TypesUtil; import jetbrains.mps.newTypesystem.state.State; import jetbrains.mps.newTypesystem.operation.AbstractOperation; import java.util.List; import java.util.Collections; import jetbrains.mps.newTypesystem.test.StateMatcher; public class TypeSystemCheckUtil { public TypeSystemCheckUtil() { } public static void checkGenerationMode(SNode node) { TypeCheckingContext typeCheckingContext = TypeContextManager.getInstance().createTypeCheckingContext(node.getContainingRoot()); typeCheckingContext.checkRoot(true); for (SNode child : SNodeOperations.getNodeDescendants(node, MetaAdapterFactory.getConcept(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x10802efe25aL, "jetbrains.mps.lang.core.structure.BaseConcept"), false, new SAbstractConcept[]{})) { TypeCheckingContext typeCheckingContext2 = TypeContextManager.getInstance().createTracingTypeCheckingContext(node.getContainingRoot()); SNode type1 = typeCheckingContext.getTypeDontCheck(child); if (type1 == null) { continue; } SNode type2 = typeCheckingContext2.getTypeInGenerationMode(child); Assert.assertTrue(TypesUtil.match(type1, type2)); } } public static void checkRollBacks(SNode node) { TypeCheckingContext typeCheckingContext = TypeContextManager.getInstance().createTracingTypeCheckingContext(node.getContainingRoot()); State state = typeCheckingContext.getState(); State state2 = new State(state.getTypeCheckingContext()); AbstractOperation rootOperation = state.getOperation(); List<AbstractOperation> operations = state.getOperationsAsList(); int num = operations.size() / 3; AbstractOperation operation = operations.get(num); Collections.reverse(operations); state2.executeOperationsBeforeAnchor(rootOperation, operation); for (AbstractOperation toRevert : operations) { if (toRevert.equals(operation)) { break; } toRevert.undo(state); } Assert.assertTrue(StateMatcher.match(state, state2)); } }