ClassDeclarationSyntax TransformForPipeliningSupport(GenFile file) { var classDecl = default(ClassDeclarationSyntax); var q = new Queue <TypeDefinition>(); foreach (var inner in file.NestedTypes) { q.Enqueue(inner); } while (q.Count > 0) { var cur = q.Dequeue(); if (cur.Tag == TypeTag.Interface && _interfaceGen.RequiresPipeliningSupport(cur)) { var members = _interfaceGen.MakePipeliningSupport(cur).ToArray(); if (members.Length > 0) { if (classDecl == null) { classDecl = ClassDeclaration(_names.MakePipeliningSupportExtensionClassName(file).Identifier) .AddModifiers(Public, Static, Partial); } classDecl = classDecl.AddMembers(members); } } foreach (var inner in cur.NestedTypes) { q.Enqueue(inner); } } return(classDecl); }