コード例 #1
0
 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));
         }
     }
 }
コード例 #2
0
        private static IEnumerable <DfirDependency> EnumerateRequiredDependencies(DfirDependencyName targetDependencyName, NIType targetSignature)
        {
            yield return(new SignatureDependency(targetDependencyName, targetSignature));

            yield return(new RunnableExistenceDependency(targetDependencyName));
        }