public MethodCallNode( Node parentNode, CompilableDefinitionName targetName, NIType signature) : base( parentNode, EnumerateRequiredDependencies(DfirDependencyName.CreateFromCompilableDefinitionName(targetName, parentNode.DfirRoot.BuildSpec), signature)) { TargetName = targetName; Signature = signature; foreach (var parameter in signature.GetParameters()) { NIType dataType = parameter.GetDataType(); string name = parameter.GetUserVisibleParameterName(); Terminal inputTerminal, outputTerminal; if (parameter.IsInputOnlyParameter()) { inputTerminal = CreateTerminal(Direction.Input, dataType, name); _terminalParameters[inputTerminal] = parameter; } else if (parameter.IsOutputOnlyParameter()) { outputTerminal = CreateTerminal(Direction.Output, dataType, name); _terminalParameters[outputTerminal] = parameter; } else { inputTerminal = CreateTerminal(Direction.Input, dataType, name); outputTerminal = CreateTerminal(Direction.Output, dataType, name); _terminalParameters[inputTerminal] = parameter; _terminalParameters[outputTerminal] = parameter; _passthroughTerminalPairs = _passthroughTerminalPairs ?? new List <PassthroughTerminalPair>(); _passthroughTerminalPairs.Add(new PassthroughTerminalPair(inputTerminal, outputTerminal)); } } }
private static IEnumerable <DfirDependency> EnumerateRequiredDependencies(DfirDependencyName targetDependencyName, NIType targetSignature) { yield return(new SignatureDependency(targetDependencyName, targetSignature)); yield return(new RunnableExistenceDependency(targetDependencyName)); }