public void ProbeAsSimpleField() { FldInfo info = new CSharpRefactor().ProbeAsField(" int test;"); Assert.True(info.IsValid); Assert.AreEqual("test", info.Name); Assert.AreEqual("int", info.AccessModifiersAndType); Assert.True(string.IsNullOrEmpty(info.Intitializer)); }
public void Execute() { IWpfTextView textView = GetTextView(); ITextSnapshot snapshot = textView.TextSnapshot; if (snapshot != snapshot.TextBuffer.CurrentSnapshot) return; if (!textView.Selection.IsEmpty) return; int caretGlobalPos = textView.Caret.Position.BufferPosition.Position; int caretLineGlobalStartPos = textView.GetTextViewLineContainingBufferPosition(textView.Caret.Position.BufferPosition).Start.Position; int initialCaretXPosition = caretGlobalPos - caretLineGlobalStartPos; int startLineNumber = snapshot.GetLineNumberFromPosition(textView.Caret.Position.BufferPosition); string lineText = snapshot.GetLineFromLineNumber(startLineNumber).GetText(); var refactor = new CSharpRefactor(); string replacementCode = ""; CSharpRefactor.FldInfo info = refactor.ProbeAsField(lineText); if (!info.IsValid) { return; } else { replacementCode = refactor.EmittFullProperty(info); } if (replacementCode == "") return; //double initialStartPosition = textView.Caret.Left; //replace existing property definition ITextEdit edit = snapshot.TextBuffer.CreateEdit(); ITextSnapshotLine currentLine = snapshot.GetLineFromLineNumber(startLineNumber); edit.Delete(currentLine.Start.Position, currentLine.LengthIncludingLineBreak); edit.Insert(snapshot.GetLineFromLineNumber(startLineNumber).Start.Position, replacementCode); edit.Apply(); int caretLineOffset = 2; //shift caret to the property definition ITextSnapshotLine line = textView.TextSnapshot.GetLineFromLineNumber(startLineNumber + caretLineOffset); SnapshotPoint point = new SnapshotPoint(line.Snapshot, line.Start.Position + initialCaretXPosition); textView.Caret.MoveTo(point); }
public void ProbeAsFieldWithInitializer() { var reflector = new CSharpRefactor(); FldInfo info = reflector.ProbeAsField(" int test = 0;"); Assert.True(info.IsValid); Assert.AreEqual("test", info.Name); Assert.AreEqual("int", info.AccessModifiersAndType); Assert.AreEqual("= 0", info.Intitializer); var property = reflector.EmittFullProperty(info); }
public void Execute() { IWpfTextView textView = GetTextView(); ITextSnapshot snapshot = textView.TextSnapshot; if (snapshot != snapshot.TextBuffer.CurrentSnapshot) return; if (!textView.Selection.IsEmpty) return; int caretGlobalPos = textView.Caret.Position.BufferPosition.Position; int caretLineGlobalStartPos = textView.GetTextViewLineContainingBufferPosition(textView.Caret.Position.BufferPosition).Start.Position; int initialCaretXPosition = caretGlobalPos - caretLineGlobalStartPos; int startLineNumber = snapshot.GetLineNumberFromPosition(textView.Caret.Position.BufferPosition); int currentLineNumber = startLineNumber; var refactor = new CSharpRefactor(); int l = currentLineNumber; string originalCode = refactor.AgregateCodeBlock(() => { try { return snapshot.GetLineFromLineNumber(l++).GetText(); } catch { return null; } }); currentLineNumber += originalCode.TrimEnd().Split('\n').Length; string replacementCode = ""; CSharpRefactor.PropInfo info = refactor.ProbeAsProperty(originalCode); string fieldDeclarationToDelete = null; int newCaretLineOffset = 0; if (!info.IsValid) { return; } else { if (info.IsAuto) { newCaretLineOffset = 2; //FullProperty has extra two lines (field declaration) //on top of the property definition replacementCode = refactor.EmittFullProperty(info); } else if (!info.IsAuto) { //look only above and only a primitive declarations without initialization fieldDeclarationToDelete = info.AccessModifiers.Split(' ').LastOrDefault() + " " + char.ToLower(info.Name[0]) + info.Name.Substring(1) + ";"; //if (info.IsCompleteAndSimple) replacementCode = refactor.EmittAutoProperty(info); //else // WriteToOutput("Error: Only primitive get/set properties can be \"collapsed\"."); } } if (replacementCode == "") return; //double initialStartPosition = textView.Caret.Left; //replace existing property definition ITextEdit edit = snapshot.TextBuffer.CreateEdit(); for (int i = startLineNumber; i < currentLineNumber; i++) { ITextSnapshotLine currentLine = snapshot.GetLineFromLineNumber(i); edit.Delete(currentLine.Start.Position, currentLine.LengthIncludingLineBreak); } edit.Insert(snapshot.GetLineFromLineNumber(startLineNumber).Start.Position, replacementCode); if (fieldDeclarationToDelete != null) { ITextSnapshotLine lineBelow = null; for (int i = startLineNumber; i > 0; i--) { ITextSnapshotLine currentLine = snapshot.GetLineFromLineNumber(i); if (currentLine.GetText().EndsWith(fieldDeclarationToDelete)) { if (lineBelow != null && string.IsNullOrWhiteSpace(lineBelow.GetText())) { newCaretLineOffset--; edit.Delete(lineBelow.Start.Position, lineBelow.LengthIncludingLineBreak); } newCaretLineOffset--; edit.Delete(currentLine.Start.Position, currentLine.LengthIncludingLineBreak); break; } lineBelow = currentLine; } } edit.Apply(); ITextSnapshotLine line = textView.TextSnapshot.GetLineFromLineNumber(startLineNumber + newCaretLineOffset); SnapshotPoint point = new SnapshotPoint(line.Snapshot, line.Start.Position + initialCaretXPosition); textView.Caret.MoveTo(point); if (!info.IsAuto && info.FullPropFieldExpectatedPattern != "") { ITextEdit edit1 = snapshot.TextBuffer.CreateEdit(); for (int i = startLineNumber; i >= 0; i--) { ITextSnapshotLine currentLine = snapshot.GetLineFromLineNumber(i); string lineText = currentLine.GetText(); if (lineText.Trim().ToLower().StartsWith(info.FullPropFieldExpectatedPattern)) { edit1.Delete(currentLine.Start.Position, currentLine.LengthIncludingLineBreak); break; } } edit1.Apply(); } }