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