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; }