~ubuntu-branches/ubuntu/trusty/monodevelop/trusty-proposed

« back to all changes in this revision

Viewing changes to src/addins/CSharpBinding/MonoDevelop.CSharp.Refactoring.CodeActions/Actions/MoveTypeToFile.cs

  • Committer: Package Import Robot
  • Author(s): Jo Shields
  • Date: 2013-05-12 09:46:03 UTC
  • mto: This revision was merged to the branch mainline in revision 29.
  • Revision ID: package-import@ubuntu.com-20130512094603-mad323bzcxvmcam0
Tags: upstream-4.0.5+dfsg
ImportĀ upstreamĀ versionĀ 4.0.5+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
42
42
{
43
43
        public class MoveTypeToFile : MonoDevelop.CodeActions.CodeActionProvider
44
44
        {
45
 
                public override IEnumerable<MonoDevelop.CodeActions.CodeAction> GetActions (MonoDevelop.Ide.Gui.Document document, TextLocation loc, CancellationToken cancellationToken)
 
45
                public override IEnumerable<MonoDevelop.CodeActions.CodeAction> GetActions (MonoDevelop.Ide.Gui.Document document, object refactoringContext, TextLocation loc, CancellationToken cancellationToken)
46
46
                {
47
 
                        var context = new MDRefactoringContext (document, loc);
 
47
                        var context = (MDRefactoringContext)refactoringContext;
48
48
                        return GetActions (context);
49
49
                }
50
50
                protected IEnumerable<MonoDevelop.CodeActions.CodeAction> GetActions (MDRefactoringContext context)
54
54
                        var type = GetTypeDeclaration (context);
55
55
                        if (type == null)
56
56
                                yield break;
57
 
                        if (Path.GetFileNameWithoutExtension (context.Document.FileName) == type.Name)
 
57
                        if (Path.GetFileNameWithoutExtension (context.TextEditor.FileName) == type.Name)
58
58
                                yield break;
59
59
                        string title;
60
60
                        if (IsSingleType (context)) {
61
 
                                title = String.Format (GettextCatalog.GetString ("_Rename file to '{0}'"), Path.GetFileName (GetCorrectFileName (context, type)));
 
61
                                title = String.Format (GettextCatalog.GetString ("Rename file to '{0}'"), Path.GetFileName (GetCorrectFileName (context, type)));
62
62
                        } else {
63
 
                                title = String.Format (GettextCatalog.GetString ("_Move type to file '{0}'"), Path.GetFileName (GetCorrectFileName (context, type)));
 
63
                                title = String.Format (GettextCatalog.GetString ("Move type to file '{0}'"), Path.GetFileName (GetCorrectFileName (context, type)));
64
64
                        }
65
65
                        yield return new MonoDevelop.CodeActions.DefaultCodeAction (title, (d, l) => {
66
66
                                var ctx = new MDRefactoringContext (d, l);
67
67
                                string correctFileName = GetCorrectFileName (ctx, type);
68
68
                                if (IsSingleType (ctx)) {
69
 
                                        FileService.RenameFile (ctx.Document.FileName, correctFileName);
70
 
                                        if (ctx.Document.Project != null)
71
 
                                                ctx.Document.Project.Save (new NullProgressMonitor ());
 
69
                                        FileService.RenameFile (ctx.TextEditor.FileName, correctFileName);
 
70
                                        if (ctx.Project != null)
 
71
                                                ctx.Project.Save (new NullProgressMonitor ());
72
72
                                        return;
73
73
                                }
74
74
                                
81
81
 
82
82
                static void CreateNewFile (MDRefactoringContext context, TypeDeclaration type, string correctFileName)
83
83
                {
84
 
                        var content = context.Document.Editor.Text;
 
84
                        var content = context.TextEditor.Text;
85
85
                        
86
 
                        var types = new List<TypeDeclaration> (context.Unit.GetTypes ().Where (t => t.StartLocation != type.StartLocation));
 
86
                        var types = new List<EntityDeclaration> (context.Unit.GetTypes ().Where (t => t.StartLocation != type.StartLocation));
87
87
                        types.Sort ((x, y) => y.StartLocation.CompareTo (x.StartLocation));
88
88
 
89
89
                        foreach (var removeType in types) {
92
92
                                content = content.Remove (start, end - start);
93
93
                        }
94
94
                        
95
 
                        if (context.Document.Project is MonoDevelop.Projects.DotNetProject) {
96
 
                                string header = StandardHeaderService.GetHeader (context.Document.Project, correctFileName, true);
 
95
                        if (context.Project != null) {
 
96
                                string header = StandardHeaderService.GetHeader (context.Project, correctFileName, true);
97
97
                                if (!string.IsNullOrEmpty (header))
98
 
                                        content = header + context.Document.Editor.EolMarker + StripHeader (content);
 
98
                                        content = header + context.TextEditor.EolMarker + StripHeader (content);
99
99
                        }
100
100
                        content = StripDoubleBlankLines (content);
101
101
                        
102
102
                        File.WriteAllText (correctFileName, content);
103
 
                        context.Document.Project.AddFile (correctFileName);
104
 
                        MonoDevelop.Ide.IdeApp.ProjectOperations.Save (context.Document.Project);
 
103
                        context.Project.AddFile (correctFileName);
 
104
                        MonoDevelop.Ide.IdeApp.ProjectOperations.Save (context.Project);
105
105
                }
106
106
 
107
107
                static bool IsBlankLine (TextDocument doc, int i)
157
157
                internal static string GetCorrectFileName (MDRefactoringContext context, EntityDeclaration type)
158
158
                {
159
159
                        if (type == null)
160
 
                                return context.Document.FileName;
161
 
                        return Path.Combine (Path.GetDirectoryName (context.Document.FileName), type.Name + Path.GetExtension (context.Document.FileName));
 
160
                                return context.TextEditor.FileName;
 
161
                        return Path.Combine (Path.GetDirectoryName (context.TextEditor.FileName), type.Name + Path.GetExtension (context.TextEditor.FileName));
162
162
                }
163
163
        }
164
164
}