public bool VisitFunctionalNode(FunctionalNode functionalNode)
 {
     functionalNode.InputTerminals.ForEach(ValidateRequiredInputTerminal);
     // TODO: for functions with more than one data type parameter, it would be better
     // to report TypeNotDetermined on an output only if all inputs that use the same
     // type parameter(s) are connected.
     if (functionalNode.InputTerminals.All(terminal => terminal.IsConnected))
     {
         Signature signature = Signatures.GetSignatureForNIType(functionalNode.Signature);
         foreach (var outputTerminalPair in functionalNode.OutputTerminals.Zip(signature.Outputs)
                  .Where(pair => !pair.Value.IsPassthrough))
         {
             VariableReference outputVariable = outputTerminalPair.Key.GetTrueVariable();
             if (outputVariable.TypeVariableReference.IsOrContainsTypeVariable)
             {
                 outputTerminalPair.Key.SetDfirMessage(Messages.TypeNotDetermined);
             }
         }
     }
     if (functionalNode.RequiredFeatureToggles.Any(feature => !FeatureToggleSupport.IsFeatureEnabled(feature)))
     {
         functionalNode.SetDfirMessage(Messages.FeatureNotEnabled);
     }
     return(true);
 }
 public bool VisitFunctionalNode(FunctionalNode functionalNode)
 {
     VisitFunctionSignatureNode(functionalNode, functionalNode.Signature);
     if (functionalNode.RequiredFeatureToggles.Any(feature => !FeatureToggleSupport.IsFeatureEnabled(feature)))
     {
         functionalNode.SetDfirMessage(Messages.FeatureNotEnabled);
     }
     return(true);
 }