// TODO Error / Warning Logging
        public IEnumerable<CodeGenerationResult> Generate(CodeGenerationUnit codeGenerationUnit) {
            // TODO Diagnostic check

            foreach(var taskDefinition in codeGenerationUnit.TaskDefinitions) {
                var result = Generate(taskDefinition);
                yield return result;
            }
        }
        protected ImmutableList<string> GetCodeUsingNamespaces(CodeGenerationUnit codeGenerationUnit) {

            if(codeGenerationUnit == null) {
                return ImmutableList<string>.Empty;
            }

            var namespaces = codeGenerationUnit.Syntax
                                               .CodeUsings
                                               .Select(cu => cu.Namespace?.Text)
                                               .Where(ns => ns != null)
                                               .Distinct()
                                               .OrderBy(ns => ns.Length);

            return namespaces.ToImmutableList();
        }