private OuterFlowEdge(OuterFlowEdgeId id, OuterFlowEdgeKind kind, FlowNode from, FlowNode to) : base(from, to) { Contract.Requires(id.IsValid); Contract.Requires(kind != OuterFlowEdgeKind.MethodCall || (from is CallFlowNode && to is EnterFlowNode)); Contract.Requires(kind != OuterFlowEdgeKind.Return || (from is ReturnFlowNode && to is CallFlowNode)); this.Id = id; this.Kind = kind; }