public override string GenerateInterfaceForClass(string newInterfaceName, string existingCode, IList<IMember> membersToKeep, IClass sourceClass, bool preserveComments) { Modifiers modifiers = CodeGenerator.ConvertModifier(sourceClass.Modifiers, new ClassFinder(membersToKeep[0])); // keep only visibility modifiers and 'unsafe' modifier // -> remove abstract,sealed,static modifiers &= Modifiers.Visibility | Modifiers.Unsafe; TypeDeclaration interfaceDef = new TypeDeclaration(modifiers, new List<AttributeSection>()); interfaceDef.Name = newInterfaceName; interfaceDef.Type = NR.Ast.ClassType.Interface; interfaceDef.Templates = CodeGenerator.ConvertTemplates(sourceClass.TypeParameters, new ClassFinder(membersToKeep[0])); foreach (IMember member in membersToKeep) { AttributedNode an = CodeGenerator.ConvertMember(member, new ClassFinder(member)); INode node = null; if (an is MethodDeclaration) { MethodDeclaration m = an as MethodDeclaration; m.Body = BlockStatement.Null; m.Modifier = Modifiers.None; node = m; } else { if (an is PropertyDeclaration) { PropertyDeclaration p = an as PropertyDeclaration; p.GetRegion.Block = BlockStatement.Null; p.SetRegion.Block= BlockStatement.Null; p.Modifier = Modifiers.None; node = p; } else { if (an is EventDeclaration) { EventDeclaration e = an as EventDeclaration; e.Modifier = Modifiers.None; node = e; } } } if (node == null) throw new NotSupportedException(); interfaceDef.AddChild(node); } IOutputAstVisitor printer = this.GetOutputVisitor(); interfaceDef.AcceptVisitor(printer, null); string codeForNewInterface = printer.Text; // wrap the new code in the same comments/usings/namespace as the the original class file. string newFileContent = CreateNewFileLikeExisting(existingCode, codeForNewInterface); return newFileContent; }