protected void InsertPostConditionEdges(BlockWithLabels <Label> previousBlock, BlockWithLabels <Label> newBlock) { var methodCallBlock = previousBlock as MethodCallBlock <Label>; if (methodCallBlock == null) { return; } if (CurrentSubroutine.IsMethod) { var methodInfo = CurrentSubroutine as IMethodInfo; Property property; if (methodInfo != null && MetaDataProvider.IsConstructor(methodInfo.Method) && MetaDataProvider.IsPropertyGetter(methodCallBlock.CalledMethod, out property) && MetaDataProvider.IsAutoPropertyMember(methodCallBlock.CalledMethod)) { return; } } EdgeTag callTag = methodCallBlock.IsNewObj ? EdgeTag.AfterNewObj : EdgeTag.AfterCall; Subroutine ensures = this.SubroutineFacade.GetEnsures(methodCallBlock.CalledMethod); CurrentSubroutine.AddEdgeSubroutine(previousBlock, newBlock, ensures, callTag); }
protected void InsertPreConditionEdges(BlockWithLabels <Label> previousBlock, BlockWithLabels <Label> newBlock) { var methodCallBlock = newBlock as MethodCallBlock <Label>; if (methodCallBlock == null || CurrentSubroutine.IsContract || CurrentSubroutine.IsOldValue) { return; } if (CurrentSubroutine.IsMethod) { var methodInfo = CurrentSubroutine as IMethodInfo; Property property; if (methodInfo != null && MetaDataProvider.IsConstructor(methodInfo.Method) && MetaDataProvider.IsPropertySetter(methodCallBlock.CalledMethod, out property) && MetaDataProvider.IsAutoPropertyMember(methodCallBlock.CalledMethod)) { return; } } EdgeTag callTag = methodCallBlock.IsNewObj ? EdgeTag.BeforeNewObj : EdgeTag.BeforeCall; Subroutine requires = this.SubroutineFacade.GetRequires(methodCallBlock.CalledMethod); CurrentSubroutine.AddEdgeSubroutine(previousBlock, newBlock, requires, callTag); }
private int OldStartDepth(Subroutine subroutine) { Method method = ((IMethodInfo)subroutine).Method; int count = MetaDataProvider.Parameters(method).Count; if (!MetaDataProvider.IsConstructor(method) && !MetaDataProvider.IsStatic(method)) { ++count; } return(count); }