Inheritance: MonoDevelop.Ide.TypeSystem.CodeGenerator
		void TestCreateInterface (string interfacecode, string outputString, string stubString = null)
		{
			var project = new UnknownProject ();
			project.FileName = "test.csproj";
			
			TypeSystemService.LoadProject (project);
			
			TypeSystemService.ParseFile (project, "program.cs", "text/x-csharp", interfacecode);
			TypeSystemService.ParseFile (project, "stub.cs", "text/x-csharp", "class Stub {\n "+stubString+"}\n");
			
			var wrapper = TypeSystemService.GetProjectContentWrapper (project);
			wrapper.UpdateContent (c => c.AddAssemblyReferences (new [] { Mscorlib, SystemCore }));
			
			var pctx = TypeSystemService.GetCompilation (project);
			
			var stubType = pctx.MainAssembly.GetTypeDefinition ("", "Stub", 0);
			var iface = pctx.MainAssembly.GetTypeDefinition ("", "ITest", 0);
			
			var gen = new CSharpCodeGenerator ();
			gen.EolMarker = "\n";
			gen.Compilation = pctx;
			string generated = gen.CreateInterfaceImplementation (stubType, stubType.Parts.First (), iface, false);
			Assert.IsNotEmpty (generated);
			// crop #region
			generated = generated.Substring (generated.IndexOf ("implementation") + "implementation".Length);
			generated = generated.Substring (0, generated.LastIndexOf ("#"));
			generated = generated.Trim ();
			if (outputString != generated)
				Console.WriteLine (generated);
			Assert.AreEqual (outputString, generated);
		}
		void TestCreateInterface (string interfacecode, string outputString)
		{
			var dom = new SimpleProjectDom ();
			
			var parser = new McsParser ();
			var unit = parser.Parse (dom, "Interface.cs", interfacecode);
			
			DomType stubType = new DomType ("Stub");
			stubType.SourceProjectDom = dom;
			stubType.CompilationUnit = new CompilationUnit ("Stub.cs");
			var iface = unit.CompilationUnit.Types[0];
			var gen = new CSharpCodeGenerator ();
			gen.EolMarker = "\n";
			string generated = gen.CreateInterfaceImplementation (stubType, iface, false);
			// crop #region
			generated = generated.Substring (generated.IndexOf ("implementation") + "implementation".Length);
			generated = generated.Substring (0, generated.LastIndexOf ("#"));
			generated = generated.Trim ();
			System.Console.WriteLine (generated);
			Assert.AreEqual (outputString, generated);
		}
		public override void InsertCompletionText (CompletionListWindow window)
		{
			var generator = new CSharpCodeGenerator ();
			var result = generator.CreateMemberImplementation (type, member, false);
			string sb = result.Code.TrimStart ();
			int trimStart = result.Code.Length - sb.Length;
			sb = sb.TrimEnd ();
			
			var lastRegion = result.BodyRegions.LastOrDefault ();
			var region = lastRegion == null? null
				: new CodeGeneratorBodyRegion (lastRegion.StartOffset - trimStart, lastRegion.EndOffset - trimStart);
			
			int targetCaretPosition;
			int selectionEndPosition = -1;
			if (region != null && region.IsValid) {
				targetCaretPosition = declarationBegin + region.StartOffset;
				if (region.Length > 0) {
					if (GenerateBody) {
						selectionEndPosition = declarationBegin + region.EndOffset;
					} else {
						//FIXME: if there are multiple regions, remove all of them
						sb = sb.Substring (0, region.StartOffset) + sb.Substring (region.EndOffset); 
					}
				}
			} else {
				targetCaretPosition = declarationBegin + sb.Length;
			}
			
			editor.Replace (declarationBegin, editor.Caret.Offset - declarationBegin, sb);
			if (selectionEndPosition > 0) {
				editor.Caret.Offset = selectionEndPosition;
				editor.SetSelection (targetCaretPosition, selectionEndPosition);
			} else {
				editor.Caret.Offset = targetCaretPosition;
			}
		}
 public OutputVisitor(CSharpCodeGenerator generator)
 {
     this.generator = generator;
 }