112
108
resolveResult = GetResolveResult (doc, editor);
113
109
if (resolveResult is AggregatedResolveResult)
114
110
resolveResult = ((AggregatedResolveResult)resolveResult).PrimaryResult;
117
112
if (resolveResult is ParameterResolveResult) {
118
113
item = ((ParameterResolveResult)resolveResult).Parameter;
233
if (doc.CompilationUnit != null && doc.CompilationUnit.Usings.Any (u => !u.IsFromNamespace && u.Region.Contains (line, column))) {
226
var unit = doc.CompilationUnit;
227
if (unit != null && unit.Usings != null && unit.Usings.Any (u => !u.IsFromNamespace && u.Region.Contains (line, column))) {
234
228
CommandInfoSet organizeUsingsMenu = new CommandInfoSet ();
235
229
organizeUsingsMenu.Text = GettextCatalog.GetString ("_Organize Usings");
236
230
organizeUsingsMenu.CommandInfos.Add (IdeApp.CommandService.GetCommandInfo (RefactoryCommands.RemoveUnusedImports), new RefactoryOperation (delegate {
251
245
foreach (var refactoring in RefactoringService.Refactorings) {
252
246
if (refactoring.IsValid (options)) {
253
247
CommandInfo info = new CommandInfo (refactoring.GetMenuDescription (options));
254
info.AccelKey = KeyBindingManager.BindingToDisplayLabel (refactoring.AccelKey, true);
248
info.AccelKey = refactoring.AccelKey;
255
249
ciset.CommandInfos.Add (info, new RefactoryOperation (new RefactoringOperationWrapper (refactoring, options).Operation));
352
346
// ciset.CommandInfos.Add (GettextCatalog.GetString ("_Rename"), new RefactoryOperation (refactorer.Rename));
354
348
if (canRename && cls.ClassType == ClassType.Interface && eclass != null) {
355
// An interface is selected, so just need to provide these 2 submenu items
356
ciset.CommandInfos.Add (GettextCatalog.GetString ("Implement Interface (implicit)"), new RefactoryOperation (refactorer.ImplementImplicitInterface));
357
ciset.CommandInfos.Add (GettextCatalog.GetString ("Implement Interface (explicit)"), new RefactoryOperation (refactorer.ImplementExplicitInterface));
349
// is now provided by the refactoring command infrastructure:
350
// ciset.CommandInfos.Add (GettextCatalog.GetString ("Implement Interface (explicit)"), new RefactoryOperation (refactorer.ImplementExplicitInterface));
351
// ciset.CommandInfos.Add (GettextCatalog.GetString ("Implement Interface (implicit)"), new RefactoryOperation (refactorer.ImplementImplicitInterface));
358
352
} else if (canRename && includeModifyCommands && cls.BaseType != null && cls.ClassType != ClassType.Interface && cls == eclass) {
359
353
// Class might have interfaces... offer to implement them
360
354
CommandInfoSet impset = new CommandInfoSet ();
518
512
public void ResolveName ()
520
// TODO: Move this to a expression refactorer !!!!
521
int pos = doc.TextEditor.GetPositionFromLineColumn (resolveResult.ResolvedExpression.Region.Start.Line, resolveResult.ResolvedExpression.Region.Start.Column);
522
doc.TextEditor.InsertText (pos, ns +"." );
514
int pos = doc.Editor.Document.LocationToOffset (resolveResult.ResolvedExpression.Region.Start.Line, resolveResult.ResolvedExpression.Region.Start.Column);
516
LoggingService.LogError ("Invalie expression position: " + resolveResult.ResolvedExpression);
519
doc.Editor.Insert (pos, ns + ".");
520
if (doc.Editor.Caret.Offset >= pos)
521
doc.Editor.Caret.Offset += (ns + ".").Length;
522
doc.Editor.Document.CommitLineUpdate (resolveResult.ResolvedExpression.Region.Start.Line);
652
652
foreach (var refactoring in RefactoringService.Refactorings) {
653
653
if (refactoring.IsValid (options)) {
654
654
CommandInfo info = new CommandInfo (refactoring.GetMenuDescription (options));
655
info.AccelKey = KeyBindingManager.BindingToDisplayLabel (refactoring.AccelKey, true);
655
info.AccelKey = refactoring.AccelKey;
656
656
ciset.CommandInfos.Add (info, new RefactoryOperation (new RefactoringOperationWrapper (refactoring, options).Operation));
836
836
System.IO.TextReader textReader = provider.Open ();
837
837
doc.Text = textReader.ReadToEnd ();
838
838
textReader.Close ();
839
int position = doc.LocationToOffset (part.Location.Line - 1, part.Location.Column - 1);
839
int position = doc.LocationToOffset (part.Location.Line, part.Location.Column);
840
840
while (position + part.Name.Length < doc.Length) {
841
841
if (doc.GetTextAt (position, part.Name.Length) == part.Name)
855
855
public void FindReferences ()
857
857
monitor = IdeApp.Workbench.ProgressMonitors.GetSearchProgressMonitor (true, true);
858
Thread t = new Thread (new ThreadStart (FindReferencesThread));
859
t.Name = "Find references";
860
t.IsBackground = true;
858
ThreadPool.QueueUserWorkItem (FindReferencesThread);
864
void FindReferencesThread ()
861
void FindReferencesThread (object state)
867
CodeRefactorer refactorer = IdeApp.Workspace.GetCodeRefactorer (IdeApp.ProjectOperations.CurrentSelectedSolution);
869
references = refactorer.FindClassReferences (monitor, (IType)item, RefactoryScope.Solution, true);
870
} else if (item is LocalVariable) {
871
references = refactorer.FindVariableReferences (monitor, (LocalVariable)item);
872
} else if (item is IParameter) {
873
references = refactorer.FindParameterReferences (monitor, (IParameter)item, true);
874
} else if (item is IMember) {
875
IMember member = (IMember)item;
876
/* references = new MemberReferenceCollection ();
877
foreach (IMember m in MonoDevelop.Refactoring.Rename.RenameRefactoring.CollectMembers (member.DeclaringType.SourceProjectDom, member)) {
878
foreach (MemberReference r in refactorer.FindMemberReferences (monitor, m.DeclaringType, m, true)) {
883
references = refactorer.FindMemberReferences (monitor, member.DeclaringType, member, true);
885
if (references != null) {
886
foreach (MemberReference mref in references) {
887
monitor.ReportResult (new MonoDevelop.Ide.FindInFiles.SearchResult (new FileProvider (mref.FileName), mref.Position, mref.Name.Length));
864
foreach (MemberReference mref in ReferenceFinder.FindReferences (IdeApp.ProjectOperations.CurrentSelectedSolution, item, monitor)) {
865
monitor.ReportResult (new MonoDevelop.Ide.FindInFiles.SearchResult (new FileProvider (mref.FileName), mref.Position, mref.Name.Length));
890
867
} catch (Exception ex) {
891
868
if (monitor != null)
905
882
foreach (IReturnType bc in cls.BaseTypes) {
906
883
IType bcls = ctx.GetType (bc);
907
884
if (bcls != null && bcls.ClassType != ClassType.Interface && !bcls.Location.IsEmpty) {
908
IdeApp.Workbench.OpenDocument (bcls.CompilationUnit.FileName, bcls.Location.Line, bcls.Location.Column, true);
885
IdeApp.Workbench.OpenDocument (bcls.CompilationUnit.FileName, bcls.Location.Line, bcls.Location.Column);
926
903
if (baseMethod != null)
927
IdeApp.Workbench.OpenDocument (bcls.CompilationUnit.FileName, baseMethod.Location.Line, baseMethod.Location.Column, true);
904
IdeApp.Workbench.OpenDocument (bcls.CompilationUnit.FileName, baseMethod.Location.Line, baseMethod.Location.Column);
935
912
public void FindDerivedClasses ()
937
monitor = IdeApp.Workbench.ProgressMonitors.GetSearchProgressMonitor (true, true);
938
Thread t = new Thread (new ThreadStart (FindDerivedThread));
939
t.Name = "Find subclasses";
940
t.IsBackground = true;
914
ThreadPool.QueueUserWorkItem (FindDerivedThread);
944
void FindDerivedThread ()
917
void FindDerivedThread (object state)
919
monitor = IdeApp.Workbench.ProgressMonitors.GetSearchProgressMonitor (true, true);
946
920
using (monitor) {
947
921
IType cls = (IType) item;
948
922
if (cls == null) return;
963
937
void ImplementInterface (bool explicitly)
965
CodeRefactorer refactorer = IdeApp.Workspace.GetCodeRefactorer (IdeApp.ProjectOperations.CurrentSelectedSolution);
966
IType iface = item as IType;
974
IEditableTextBuffer editor = IdeApp.Workbench.ActiveDocument.GetContent <IEditableTextBuffer>();
976
editor.BeginAtomicUndo ();
979
refactorer.ImplementInterface (pinfo, klass, iface, explicitly, iface, this.hintReturnType);
982
editor.EndAtomicUndo ();
939
var doc = IdeApp.Workbench.ActiveDocument;
940
var editor = doc.Editor.Parent;
941
IType interfaceType = item as IType;
942
IType declaringType = klass;
944
var mode = new Mono.TextEditor.InsertionCursorEditMode (editor, CodeGenerationService.GetInsertionPoints (doc, declaringType));
945
var helpWindow = new Mono.TextEditor.PopupWindow.ModeHelpWindow ();
946
helpWindow.TransientFor = IdeApp.Workbench.RootWindow;
947
helpWindow.TitleText = GettextCatalog.GetString ("<b>Implement Interface -- Targeting</b>");
948
helpWindow.Items.Add (new KeyValuePair<string, string> (GettextCatalog.GetString ("<b>Key</b>"), GettextCatalog.GetString ("<b>Behavior</b>")));
949
helpWindow.Items.Add (new KeyValuePair<string, string> (GettextCatalog.GetString ("<b>Up</b>"), GettextCatalog.GetString ("Move to <b>previous</b> target point.")));
950
helpWindow.Items.Add (new KeyValuePair<string, string> (GettextCatalog.GetString ("<b>Down</b>"), GettextCatalog.GetString ("Move to <b>next</b> target point.")));
951
helpWindow.Items.Add (new KeyValuePair<string, string> (GettextCatalog.GetString ("<b>Enter</b>"), GettextCatalog.GetString ("<b>Declare interface implementation</b> at target point.")));
952
helpWindow.Items.Add (new KeyValuePair<string, string> (GettextCatalog.GetString ("<b>Esc</b>"), GettextCatalog.GetString ("<b>Cancel</b> this refactoring.")));
953
mode.HelpWindow = helpWindow;
954
mode.CurIndex = mode.InsertionPoints.Count - 1;
956
mode.Exited += delegate(object s, Mono.TextEditor.InsertionCursorEventArgs args) {
958
var generator = doc.CreateCodeGenerator ();
959
args.InsertionPoint.Insert (doc.Editor, generator.CreateInterfaceImplementation (declaringType, interfaceType, explicitly));
986
964
public void ImplementImplicitInterface ()
996
974
public void ImplementAbstractMembers ()
998
CodeRefactorer refactorer = IdeApp.Workspace.GetCodeRefactorer (IdeApp.ProjectOperations.CurrentSelectedSolution);
999
IType aclass = item as IType;
1007
IEditableTextBuffer editor = IdeApp.Workbench.ActiveDocument.GetContent <IEditableTextBuffer>();
1009
editor.BeginAtomicUndo ();
1012
List<KeyValuePair<IMember,IReturnType>> members = new List<KeyValuePair<IMember, IReturnType>> ();
1013
foreach (IMember member in aclass.Members) {
1014
if (member.IsAbstract && !klass.Members.Any (m => member.Name == m.Name))
1015
members.Add (new KeyValuePair<IMember,IReturnType> (member, null));
1017
refactorer.ImplementMembers (klass, members, "implemented abstract members of " + aclass.FullName);
1020
editor.EndAtomicUndo ();
976
var doc = IdeApp.Workbench.ActiveDocument;
977
IType interfaceType = item as IType;
978
MonoDevelop.Refactoring.ImplementInterface.ImplementAbstractMembers.Implement (doc, interfaceType);
1024
981
public void EncapsulateField ()
1026
983
EncapsulateFieldDialog dialog;
1027
984
if (item is IField) {
1028
dialog = new EncapsulateFieldDialog (IdeApp.Workbench.ActiveDocument.TextEditorData.Parent, ctx, (IField) item);
985
dialog = new EncapsulateFieldDialog (IdeApp.Workbench.ActiveDocument, ctx, (IField) item);
1030
dialog = new EncapsulateFieldDialog (IdeApp.Workbench.ActiveDocument.TextEditorData.Parent, ctx, (IType) item);
987
dialog = new EncapsulateFieldDialog (IdeApp.Workbench.ActiveDocument, ctx, (IType) item);
1032
989
MessageService.ShowCustomDialog (dialog);
1035
992
public void OverrideOrImplementMembers ()
1037
MessageService.ShowCustomDialog (new OverridesImplementsDialog (IdeApp.Workbench.ActiveDocument.TextEditorData.Parent, (IType)item));
994
MessageService.ShowCustomDialog (new OverridesImplementsDialog (IdeApp.Workbench.ActiveDocument, (IType)item));
1040
997
public void Rename ()