[MonoDevelop] Refactoring

Lluis Sanchez lluis at ximian.com
Sun Jul 3 19:03:20 EDT 2005


Hi,

I generally agree with your proposals. Some comments inline:

> Like some of you already know, i'm working on refactoring support in
> MonoDevelop.
> Now, my question to you all is, how should the refactoring behave in MD ?
> 
> my current ideas (some of them are partially implemented):
> 
> * Encapsulate fields : http://tremor.be/encapsulate_fields.png
>    - if inside a class, show a dialog with all fields, method
> visibility, field visibility, insertion point, only select the fields
> without an existing property
>    - if one or more fields are selected, generate the properties
> without any other user input if a shortcut is pressed, or show the
> dialog with the getter and setter of the fields selected when
> selecting "encapsulate fields" from a popup menu
>    - insertion point: after constructor, before first property, after
> last property, end of file, "Properties" region, current position
>    - do we need preview (no) ? should it be undoable by 1 undo command (yes)?
> 
> * Generate constructor : http://tremor.be/generate_constructor.png
>    - the combobox lists the available constructors from the current
> class and the base class, and there is a listview with all fields from
> the current class, and the selected constructor
>    - generate a constructor without any user input when 1 or more
> fields are selected ?
>    - insertion point: start of file, before first constructor, after
> last constructor, "Constructor" region, current position
>    - do we need preview (no) ? should it be undoable by 1 undo command (yes)?
> 
> * Rename
>    - rename types, variables, fields, properties, ...

Renaming namespaces would be also useful (it would update all namespace
declarations and imports).

A "Remove unneeded namespace imports" option would be also useful.

>    - when renaming fields, there is an extra option to also rename the
> properties
>    - do we need preview (yes)? should it be undoable by 1 undo command
> ? --> can we even undo, since it is possible that we modify more then
> 1 file, so should we set preview on by default ?

What the preview would look like? I think that a list of files/lines
that are going to be modified could be enough (something similar to what
you get when running "find in files").

> 
> * Implement interface
>    - create a keyboard shortcut to generate all methods of the
> implemented interfaces + abstract methods of the base class
>    - show a checklist with all properties and/or methods from an interface
>    - posibility to make the class abstract if not all the members of
> the interface are selected (+ posibility to change the constructor
> access modifier from public to protected/internal)
>    - insertion point: after last constructor, region with the name of
> the interface at the end of the file, end of file, current position
>    - do we need preview (no) ? should it be undoable by 1 undo command ? (yes)
> 
> * Generate method stub
>    - insertion point: after last constructor, before first method,
> after last method, end of file, , current position
>    - do we need preview (no) ? should it be undoable by 1 undo command ? (yes)
> 
> * Change variable
>    - change the type of a variable, and automatically change all
> corresponding casts, ... to the new type
>    - do we need preview (yes) ? should it be undoable by 1 undo command ? (yes)
> 
> * Sort members
>    - posibility to sort all members of the class
>    - sort in regions, sort alphabetically, sort members according to
> their type (field, constructor, method, ...)
>    - do we need preview (yes) ? should it be undoable by 1 undo
> command ? (no idea)
> 
> * Format code : http://tremor.be/codeformat_settings.png
>    - preferences that can be changed by the users, used by the
> refactoring service to generate code according to the user preferences
>    - "Format Code" command, to reformat the current file according to
> the user preferences
> 
> * ...
> 
> * Resources:
>    - http://bugzilla.ximian.com/show_bug.cgi?id=62616
>    - http://bugzilla.ximian.com/show_bug.cgi?id=62621
>    - http://www-128.ibm.com/developerworks/library/os-ecref/
>    - http://www.refactoring.com/
>    - http://www.intellij.org/twiki/bin/view/Main/RefactoringSuggestionsForIDEA
>    - http://refactoring.netbeans.org/refactorings/specifications.html
>    - http://java.sun.com/developer/technicalArticles/tools/refactoring/
>    - http://www.devexpress.com/Support/BestPractices/IDE/Refactor/
> 
> * Random facts
>    - refactor service is language independant, so other languages like
> vb.net and boo can benefit from it (offcourse, they have to implement
> a parser first)
>    - the code format settings are also language independant, all the
> settings are defined in an .xml file and the preferences dialog is
> created dynamically, so adding preferences for another language is
> nothing more then creating an .xml file
>    - since the C# parser in monodevelop isn't completely finished, i
> have no idea how long it is going to take to finish refactoring
> support, since i never looked at the parser service in detail i was
> hoping i could get some help with it, or maybe port the changes in the
> parser from sharpdevelop into monodevelop (if there are any changes)
> 
> Let me know what you think, what features would you like to see in
> monodevelop, ...
> -- Ben
> _______________________________________________
> Monodevelop-list mailing list
> Monodevelop-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/monodevelop-list



More information about the Monodevelop-list mailing list