/// <summary>
        /// Performs the code generation
        /// </summary>
        /// <param name="diagram">The diagram this node is on</param>
        /// <param name="terminalAssociator">Our terminal association manager</param>
        /// <param name="targetInfo">Semantic analysis target</param>
        /// <param name="cancellationToken">Cancelation token</param>
        public override Task DecomposeAsync(Diagram diagram, DecompositionTerminalAssociator terminalAssociator, ISemanticAnalysisTargetInfo targetInfo, CompileCancellationToken cancellationToken)
        {
            NIType methodType = CreateMethodType();
            var    methodCall = MethodCall.CreateWithErrorTerminals(diagram, methodType.GetDeclaringType(), methodType);

            methodCall.UpdateTerminals();
            terminalAssociator.AssociateTerminalByName("names", methodCall.GetTerminalByName("names"));
            terminalAssociator.AssociateTerminalByName("extra name", methodCall.GetTerminalByName("extraName"));
            terminalAssociator.AssociateTerminalByName("length", methodCall.OutputTerminals.Last());
            return(AsyncHelpers.CompletedTask);
        }