Author: fejj
Date: 2007-05-03 15:33:12 -0400 (Thu, 03 May 2007)
New Revision: 76642

Modified:
   trunk/monodevelop/Core/src/MonoDevelop.Projects/ChangeLog
   trunk/monodevelop/Core/src/MonoDevelop.Projects/Makefile.am
   
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.CodeGeneration/BaseRefactorer.cs
   
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.CodeGeneration/CodeRefactorer.cs
   
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.CodeGeneration/IRefactorer.cs
   
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.CodeGeneration/RefactorOperations.cs
Log:
2007-05-03  Jeffrey Stedfast  <[EMAIL PROTECTED]>

        * MonoDevelop.Projects.CodeGeneration/IRefactorer.cs: Added
        methods for renaming and finding LocalVariable and IParameter
        references.

        * MonoDevelop.Projects.CodeGeneration/BaseRefactorer.cs
        (RenameVariable): New.
        (FindVariableReferences): New.
        (RenameParameter): New.
        (FindParameterReferences): New.
        (GetVariableNamePosition): New.
        (GetParameterNamePosition): New.

        * MonoDevelop.Projects.CodeGeneration/RefactorOperations.cs: Added
        RenameVariable and RenameParameter.

        * MonoDevelop.Projects.CodeGeneration/CodeRefactorer.cs: Added 2
        new classes for finding LocalVariable and IParameter references.
        (RenameVariable): New method.
        (RenameParameter): Also new.
        (Refactor): Added 2 new overloads for Refactor() which will
        refactor LocalVariables and Methods (for this purpose, method
        parameters).



Modified: trunk/monodevelop/Core/src/MonoDevelop.Projects/ChangeLog
===================================================================
--- trunk/monodevelop/Core/src/MonoDevelop.Projects/ChangeLog   2007-05-03 
19:16:40 UTC (rev 76641)
+++ trunk/monodevelop/Core/src/MonoDevelop.Projects/ChangeLog   2007-05-03 
19:33:12 UTC (rev 76642)
@@ -1,3 +1,28 @@
+2007-05-03  Jeffrey Stedfast  <[EMAIL PROTECTED]>
+
+       * MonoDevelop.Projects.CodeGeneration/IRefactorer.cs: Added
+       methods for renaming and finding LocalVariable and IParameter
+       references.
+
+       * MonoDevelop.Projects.CodeGeneration/BaseRefactorer.cs
+       (RenameVariable): New.
+       (FindVariableReferences): New.
+       (RenameParameter): New.
+       (FindParameterReferences): New.
+       (GetVariableNamePosition): New.
+       (GetParameterNamePosition): New.
+
+       * MonoDevelop.Projects.CodeGeneration/RefactorOperations.cs: Added
+       RenameVariable and RenameParameter.
+
+       * MonoDevelop.Projects.CodeGeneration/CodeRefactorer.cs: Added 2
+       new classes for finding LocalVariable and IParameter references.
+       (RenameVariable): New method.
+       (RenameParameter): Also new.
+       (Refactor): Added 2 new overloads for Refactor() which will
+       refactor LocalVariables and Methods (for this purpose, method
+       parameters).
+
 2007-05-03  David Makovský (Yakeen) <[EMAIL PROTECTED]> 
 
        * MonoDevelop.Projects.Parser/DefaultParserService.cs: use .Net 2.0

Modified: trunk/monodevelop/Core/src/MonoDevelop.Projects/Makefile.am
===================================================================
--- trunk/monodevelop/Core/src/MonoDevelop.Projects/Makefile.am 2007-05-03 
19:16:40 UTC (rev 76641)
+++ trunk/monodevelop/Core/src/MonoDevelop.Projects/Makefile.am 2007-05-03 
19:33:12 UTC (rev 76642)
@@ -220,9 +220,9 @@
        MonoDevelop.Projects/ProjectReferenceCollection.cs \
        MonoDevelop.Projects/ProjectReferenceEventArgs.cs \
        MonoDevelop.Projects/ProjectRenameEventArgs.cs \
-       MonoDevelop.Projects/ProjectsServices.cs \
        MonoDevelop.Projects/ProjectService.cs \
        MonoDevelop.Projects/ProjectServiceExtension.cs \
+       MonoDevelop.Projects/ProjectsServices.cs \
        MonoDevelop.Projects/SharpDevelopFileFormat.cs \
        MonoDevelop.Projects/TypelibImporter.cs \
        MonoDevelop.Projects/UnknownCombineEntry.cs \

Modified: 
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.CodeGeneration/BaseRefactorer.cs
===================================================================
--- 
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.CodeGeneration/BaseRefactorer.cs
       2007-05-03 19:16:40 UTC (rev 76641)
+++ 
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.CodeGeneration/BaseRefactorer.cs
       2007-05-03 19:33:12 UTC (rev 76642)
@@ -56,7 +56,7 @@
                        StreamWriter sw = new StreamWriter (file);
                        
                        ICodeGenerator gen = GetGenerator ();
-                       gen.GenerateCodeFromCompileUnit (unit, sw, GetOpions 
());
+                       gen.GenerateCodeFromCompileUnit (unit, sw, GetOptions 
());
                        
                        sw.Close ();
                        
@@ -193,7 +193,6 @@
 
                /// Field overridables ////////////////////////////
                
-               
                protected virtual IField RenameField (RefactorerContext ctx, 
IClass cls, IField field, string newName)
                {
                        return null;
@@ -215,9 +214,8 @@
                protected virtual MemberReferenceCollection 
FindPropertyReferences (RefactorerContext ctx, string fileName, IClass cls, 
IProperty property)
                {
                        return null;
-               }               
+               }
 
-               
                /// Event overridables ////////////////////////////             
                
                protected virtual IEvent RenameEvent (RefactorerContext ctx, 
IClass cls, IEvent evnt, string newName)
@@ -228,8 +226,68 @@
                protected virtual MemberReferenceCollection FindEventReferences 
(RefactorerContext ctx, string fileName, IClass cls, IEvent evnt)
                {
                        return null;
-               }               
+               }
 
+
+               /// LocalVariable overridables /////////////////////
+               
+               public virtual LocalVariable RenameVariable (RefactorerContext 
ctx, LocalVariable var, string newName)
+               {
+                       IEditableTextFile file = ctx.GetFile 
(var.Region.FileName);
+                       if (file == null)
+                               return null;
+                       
+                       int pos = GetVariableNamePosition (file, var);
+                       if (pos == -1)
+                               return null;
+                       
+                       string txt = file.GetText (pos, pos + var.Name.Length);
+                       if (txt != var.Name)
+                               return null;
+                       
+                       file.DeleteText (pos, txt.Length);
+                       file.InsertText (pos, newName);
+                       
+                       // FIXME: return the new variable
+                       
+                       return null;
+               }
+
+               public virtual MemberReferenceCollection FindVariableReferences 
(RefactorerContext ctx, string fileName, LocalVariable var)
+               {
+                       return null;
+               }
+
+
+               /// Parameter overridables /////////////////////
+               
+               public virtual IParameter RenameParameter (RefactorerContext 
ctx, IMethod method, IParameter param, string newName)
+               {
+                       IEditableTextFile file = ctx.GetFile 
(method.DeclaringType.Region.FileName);
+                       if (file == null)
+                               return null;
+                       
+                       int pos = GetParameterNamePosition (file, method, 
param);
+                       if (pos == -1)
+                               return null;
+                       
+                       string txt = file.GetText (pos, pos + 
param.Name.Length);
+                       if (txt != param.Name)
+                               return null;
+                       
+                       file.DeleteText (pos, txt.Length);
+                       file.InsertText (pos, newName);
+                       
+                       // FIXME: return the new IParameter
+                       
+                       return null;
+               }
+
+               public virtual MemberReferenceCollection 
FindParameterReferences (RefactorerContext ctx, string fileName, IMethod 
method, IParameter param)
+               {
+                       return null;
+               }
+
                /// Helper overridables ////////////////////////////
 
                protected virtual int GetMemberNamePosition (IEditableTextFile 
file, IMember member)
@@ -237,6 +295,16 @@
                        return -1;
                }
 
+               protected virtual int GetVariableNamePosition 
(IEditableTextFile file, LocalVariable var)
+               {
+                       return -1;
+               }
+               
+               protected virtual int GetParameterNamePosition 
(IEditableTextFile file, IMethod method, IParameter param)
+               {
+                       return -1;
+               }
+
                protected virtual IRegion GetMemberBounds (IMember member)
                {
                        int minLin = member.Region.BeginLine;
@@ -268,7 +336,7 @@
                        type.Members.Add (member);
                        ICodeGenerator gen = GetGenerator ();
                        StringWriter sw = new StringWriter ();
-                       gen.GenerateCodeFromType (type, sw, GetOpions ());
+                       gen.GenerateCodeFromType (type, sw, GetOptions ());
                        string code = sw.ToString ();
                        int i = code.IndexOf ('{');
                        int j = code.LastIndexOf ('}');
@@ -504,7 +572,7 @@
                        return buffer.GetText (ipos, pos);
                }
                
-               CodeGeneratorOptions GetOpions ()
+               CodeGeneratorOptions GetOptions ()
                {
                        CodeGeneratorOptions ops = new CodeGeneratorOptions ();
                        ops.IndentString = "\t";

Modified: 
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.CodeGeneration/CodeRefactorer.cs
===================================================================
--- 
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.CodeGeneration/CodeRefactorer.cs
       2007-05-03 19:16:40 UTC (rev 76641)
+++ 
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.CodeGeneration/CodeRefactorer.cs
       2007-05-03 19:33:12 UTC (rev 76642)
@@ -141,6 +141,34 @@
                        return m;
                }
                
+               public LocalVariable RenameVariable (IProgressMonitor monitor, 
LocalVariable var, string newName)
+               {
+                       MemberReferenceCollection refs = new 
MemberReferenceCollection ();
+                       Refactor (monitor, var, new RefactorDelegate (new 
RefactorFindVariableReferences (var, refs).Refactor));
+                       refs.RenameAll (newName);
+                       
+                       RefactorerContext gctx = GetGeneratorContext (var);
+                       IRefactorer r = GetGeneratorForVariable (var);
+                       LocalVariable v = r.RenameVariable (gctx, var, newName);
+                       gctx.Save ();
+                       
+                       return v;
+               }
+               
+               public IParameter RenameParameter (IProgressMonitor monitor, 
IMethod method, IParameter param, string newName)
+               {
+                       MemberReferenceCollection refs = new 
MemberReferenceCollection ();
+                       Refactor (monitor, method, new RefactorDelegate (new 
RefactorFindParameterReferences (method, param, refs).Refactor));
+                       refs.RenameAll (newName);
+                       
+                       RefactorerContext gctx = GetGeneratorContext 
(method.DeclaringType);
+                       IRefactorer r = GetGeneratorForClass 
(method.DeclaringType);
+                       IParameter p = r.RenameParameter (gctx, method, param, 
newName);
+                       gctx.Save ();
+                       
+                       return p;
+               }
+               
                public IClass[] FindDerivedClasses (IClass baseClass)
                {
                        ArrayList list = new ArrayList ();
@@ -202,6 +230,32 @@
                        }
                }
                
+               void Refactor (IProgressMonitor monitor, LocalVariable var, 
RefactorDelegate refactorDelegate)
+               {
+                       RefactorerContext gctx = GetGeneratorContext (var);
+                       string file = var.Region.FileName;
+                       
+                       IRefactorer gen = 
Services.Languages.GetRefactorerForFile (file);
+                       if (gen == null)
+                               return;
+                       
+                       refactorDelegate (monitor, gctx, gen, file);
+                       gctx.Save ();
+               }
+               
+               void Refactor (IProgressMonitor monitor, IMethod method, 
RefactorDelegate refactorDelegate)
+               {
+                       RefactorerContext gctx = GetGeneratorContext 
(method.DeclaringType);
+                       string file = method.DeclaringType.Region.FileName;
+                       
+                       IRefactorer gen = 
Services.Languages.GetRefactorerForFile (file);
+                       if (gen == null)
+                               return;
+                       
+                       refactorDelegate (monitor, gctx, gen, file);
+                       gctx.Save ();
+               }
+               
                void RefactorCombine (IProgressMonitor monitor, CombineEntry 
ce, RefactorDelegate refactorDelegate)
                {
                        if (ce is Combine) {
@@ -236,6 +290,11 @@
                        return new RefactorerContext (GetParserContext (cls), 
fileProvider);
                }
                
+               RefactorerContext GetGeneratorContext (LocalVariable var)
+               {
+                       return new RefactorerContext (GetParserContext (var), 
fileProvider);
+               }
+               
                IParserContext GetParserContext (IClass cls)
                {
                        Project p = GetProjectForFile (cls.Region.FileName);
@@ -245,6 +304,15 @@
                                return pdb.GetFileParserContext 
(cls.Region.FileName);
                }
                
+               IParserContext GetParserContext (LocalVariable var)
+               {
+                       Project p = GetProjectForFile (var.Region.FileName);
+                       if (p != null)
+                               return pdb.GetProjectParserContext (p);
+                       else
+                               return pdb.GetFileParserContext 
(var.Region.FileName);
+               }
+               
                Project GetProjectForFile (string file)
                {
                        if (rootCombine == null)
@@ -260,6 +328,11 @@
                {
                        return Services.Languages.GetRefactorerForFile 
(cls.Region.FileName);
                }
+               
+               IRefactorer GetGeneratorForVariable (LocalVariable var)
+               {
+                       return Services.Languages.GetRefactorerForFile 
(var.Region.FileName);
+               }
        }
        
        class RefactorFindClassReferences
@@ -310,6 +383,54 @@
                }
        }
        
+       class RefactorFindVariableReferences
+       {
+               MemberReferenceCollection references;
+               LocalVariable var;
+               
+               public RefactorFindVariableReferences (LocalVariable var, 
MemberReferenceCollection references)
+               {
+                       this.references = references;
+                       this.var = var;
+               }
+               
+               public void Refactor (IProgressMonitor monitor, 
RefactorerContext rctx, IRefactorer r, string fileName)
+               {
+                       try {
+                               MemberReferenceCollection refs = 
r.FindVariableReferences (rctx, fileName, var);
+                               if (refs != null)
+                                       references.AddRange (refs);
+                       } catch (Exception ex) {
+                               monitor.ReportError (GettextCatalog.GetString 
("Could not look for references in file '{0}': {1}", fileName, ex.Message), ex);
+                       }
+               }
+       }
+       
+       class RefactorFindParameterReferences
+       {
+               MemberReferenceCollection references;
+               IParameter param;
+               IMethod method;
+               
+               public RefactorFindParameterReferences (IMethod method, 
IParameter param, MemberReferenceCollection references)
+               {
+                       this.references = references;
+                       this.method = method;
+                       this.param = param;
+               }
+               
+               public void Refactor (IProgressMonitor monitor, 
RefactorerContext rctx, IRefactorer r, string fileName)
+               {
+                       try {
+                               MemberReferenceCollection refs = 
r.FindParameterReferences (rctx, fileName, method, param);
+                               if (refs != null)
+                                       references.AddRange (refs);
+                       } catch (Exception ex) {
+                               monitor.ReportError (GettextCatalog.GetString 
("Could not look for references in file '{0}': {1}", fileName, ex.Message), ex);
+                       }
+               }
+       }
+       
        public enum RefactoryScope
        {
                File,

Modified: 
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.CodeGeneration/IRefactorer.cs
===================================================================
--- 
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.CodeGeneration/IRefactorer.cs
  2007-05-03 19:16:40 UTC (rev 76641)
+++ 
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.CodeGeneration/IRefactorer.cs
  2007-05-03 19:33:12 UTC (rev 76642)
@@ -47,6 +47,12 @@
                IMember RenameMember (RefactorerContext ctx, IClass cls, 
IMember member, string newName);
                IMember ReplaceMember (RefactorerContext ctx, IClass cls, 
IMember oldMember, CodeTypeMember memberInfo);
                MemberReferenceCollection FindMemberReferences 
(RefactorerContext ctx, string fileName, IClass cls, IMember member);
+               
+               LocalVariable RenameVariable (RefactorerContext ctx, 
LocalVariable var, string newName);
+               MemberReferenceCollection FindVariableReferences 
(RefactorerContext ctx, string fileName, LocalVariable var);
+               
+               IParameter RenameParameter (RefactorerContext ctx, IMethod 
method, IParameter param, string newName);
+               MemberReferenceCollection FindParameterReferences 
(RefactorerContext ctx, string fileName, IMethod method, IParameter param);
        }
        
        public class MemberReference

Modified: 
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.CodeGeneration/RefactorOperations.cs
===================================================================
--- 
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.CodeGeneration/RefactorOperations.cs
   2007-05-03 19:16:40 UTC (rev 76641)
+++ 
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.CodeGeneration/RefactorOperations.cs
   2007-05-03 19:33:12 UTC (rev 76642)
@@ -39,6 +39,8 @@
                AddField = 0x08,
                RemoveField = 0x10,
                RenameField = 0x20,
+               RenameVariable = 0x40,
+               RenameParameter = 0x80,
                All = 0xff
        }
 }

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to