Whole Tomato Software Forums
Whole Tomato Software Forums
Main Site | Profile | Register | Active Topics | Members | Search | FAQ
User name:
Password:
Save Password
Forgot your password?

 All Forums
 Visual Assist
 Technical Support
 Refactor - Extract Method doesn't work as expected
 New Topic  Reply to Topic
 Printer Friendly
Author Previous Topic Topic Next Topic  

vishnu
New Member

6 Posts

Posted - Oct 07 2008 :  09:18:45 AM  Show Profile  Reply with Quote
In the latest release 1649, the problem with extract method is not fixed.
To reproduce the problem:

----Form1.cpp file------
13. void Form1::AddItem(TreeNode^ node)
14. {
15. this->treeView1->Nodes->Add(gcnew TreeNode("Test1"));
16.
17. for each (TreeNode^ node in treeView1->Nodes)
18. {
19. System::Console::WriteLine(node->Text);
20. }
21. }


1. Select the lines (17-20). Right click and select
"Refactor (VA X)"->"Extract Method..."
2. Type in a name and click OK (without the option "Extract to source" enabled)
3. It will extract and create a new method like below

13. void Form1::AddItem(TreeNode^ node)
14. {
15. this->treeView1->Nodes->Add(gcnew TreeNode("Test1"));
16.
17. MyMethod();
18. }
19.
20. void MyMethod()
21. {
22. for each (TreeNode^ node in treeView1->Nodes)
23. {
24. System::Console::WriteLine(node->Text);
25. }
26. }


As you can see there is no namesapce added to the new method, and no declaration added to the header file.

Now if you add the namespace and declaration manually. And select again few lines (from above snippet select 15-17) and call the extract method it will create the new method but inside the last created method, in this case it will be MyMethod and looks something like this:

void Form1::MyMethod()
{
for each (TreeNode^ node in treeView1->Nodes)
{
System::Console::WriteLine(node->Text);
}

void MyMethodNew()
{
this->treeView1->Nodes->Add(gcnew TreeNode("Test1"));

MyMethod();
}

}


This problem persists even if you reparse the file.

Yes, if you enable the option "Extract to source" in the dialog box, then it will create the function with the namespace but does not add any declaration to the header file.

Any tips or tricks or any options to enable/disable to make this work correctly??

regards
Vishnu

accord
Whole Tomato Software

United Kingdom
3287 Posts

Posted - Oct 07 2008 :  2:41:23 PM  Show Profile  Reply with Quote
Probably you have a "using namespace ..." before your example function.

For example when I created a default test project with the name "windows_forms" and I have added your example functions to the header, I got this after a create implementation:

void windows_forms::Form1::AddItem(TreeNode^ node);

Because Form1 is in a namespace by default. I think you have added a using before this function, like this:

using windows_forms;

void Form1::AddItem(TreeNode^ node);

so you can leave the "windows_forms" now.

In this case this is

case=20072

The second bug will not appear after case=20072 will be fixed.

Edited by - accord on Oct 07 2008 3:06:12 PM
Go to Top of Page
  Previous Topic Topic Next Topic  
 New Topic  Reply to Topic
 Printer Friendly
Jump To:
© 2023 Whole Tomato Software, LLC Go To Top Of Page
Snitz Forums 2000