Whole Tomato Software Forums
Whole Tomato Software Forums
Main Site | Profile | Register | Active Topics | Members | Search | FAQ
 All Forums
 Visual Assist
 Technical Support
 Strange behavior of "Add Similar Member..."

You must be registered to post a reply.
Click here to register.

Screensize:
UserName:
Password:
Format: BoldItalicizeUnderlineStrikethrough Align leftCenterAlign right Insert horizontal ruleUpload and insert imageInsert hyperlinkInsert email addressInsert codeInsert quoted textInsert listInsert Emoji
   
Message:

Forum code is on.
Html is off.

 
Check to subscribe to this topic.
   

T O P I C    R E V I E W
mbobka Posted - Jun 27 2006 : 10:31:19 AM
When is called dialog for editing of member signature is showed. But I'm not need editing member signature! I want to assign only name for new member.
Also, after creating declaration VAX creates implementation in .h, but is wrong, I want create implementation self (by "Create Implementation") or automatically in .cpp.

VAX 1524, VS 2005 & VS 2002
22   L A T E S T    R E P L I E S    (Newest First)
feline Posted - Jul 06 2006 : 6:04:19 PM
there is a lot of confusion here

mbobka can you explain a real world example of what you want to do? maybe things will make more sense then.

if "add similar" simply adds the declaration, with no curly brackets (which seems to be what you want) then you will have invalid code that can never compile once you call the new function. you will get a linker error, but this will not take you to the source of the problem.

by inserting an empty body (in the header file) VA increases the odds of the code compiling, and if it is invalid at least you are taken to the source of the problem by the compiler error, e.g. nothing is being returned.
mbobka Posted - Jul 06 2006 : 01:43:03 AM
Eh...
jpizzi Posted - Jul 05 2006 : 10:31:50 PM
mbobka:
1. We think it common for someone to want to add a "Similar Method" that changed the parameters instead of the function name (e.g., a overloaded method). Your way of doing it would not work for those times.
2. Placing the implementation in the header is just an expedient way to not edit multiple files unless explicitly asked to do so (via "Move implementation to source file" or "Rename variable/function." or the like)
mbobka Posted - Jul 05 2006 : 04:23:53 AM
jpizzi:
1. Dialog selects entire text -- it's bad. Why not only function name?
2. Strange (for me) implementation in header -- also bad for me. I think AutoText should fix it for me.
jpizzi Posted - Jul 05 2006 : 02:04:51 AM
mbobka: I am reading this thread, and can't seem to understand what it is you are asking for.

Your first comment was that the dialog wasn't needed for you and you mention that creating the implementation in the header was wrong for you.

We explained that "similar" is too vague a word, and that at different times you may want it to mean different things. Therefore, we display the dialog box. Your description seems to indicate that you want to use this feature to create a new method with the same parameter list. We told you how you could accomplish this with the dialog as we implemented it (the CTRL-Home, then CTRL-Right arrow to move by words).

The creation of the implementation in the header file is not ideal in most situations, but that is one reason we came up with the "move implementation to source file." feline's response gave the reason for not just changing it to automatically place it in the source file to begin with.

In your last post, you mention being able to add a similar member from another class. What do you mean by this? How does it relate to the ongoing discussion?

I'm lost.
mbobka Posted - Jul 05 2006 : 01:00:38 AM
I can add similar member from other class, Copy-Paste for it will be slow option (find source code, copy, find target place, paste, return to place where I was before, compare it with two clicks...), I want do it fast, but junk code inserted after declaration slows me down. And I have no option to remove it.
feline Posted - Jul 04 2006 : 6:34:23 PM
the design behind "add similar member" is to produce an empty "stub" of a function, that you can them move to the cpp file if you prefer.

i expect people to use this refactoring when they are ready to produce the body of the function.

if what you want is to copy / paste an existing line in the header file, and make a small change to the parameter list then is it not quicker to actually just do this?

i am wondering if you are looking for something slightly different that the operation "add similar member" was designed for.
mbobka Posted - Jul 03 2006 : 02:43:23 AM
Linker will notify me which functions is not implemented.
mbobka Posted - Jul 03 2006 : 02:39:57 AM

class B {
public:
    B( int );
    B( float );
    B( B const& );
};

class A {
   B F() {}
};

How about this? It's correct? Which constructor to choose?

class B {
private:
    B();
    B( B const& );

public:
    static B& GetInstance();
};

class A {
   B& F() {}
};


And here?

And I just no need in junk code! I don't want it! Why I must do something to remove it? Why AutoText is not an option?
Sasa Posted - Jul 02 2006 : 7:04:30 PM
mbobka: I would rather see it not compile. What if the code produced is

class A {
int F() {return 1;}
};

Then the code will compile but you might forget toactuall correct the code and make it return something that has to do with logic instead of just plain 1. What if "1" is an error code in F()? the calling function will fail because it thinks there is an error code, etc...

I think the current behavior is just fine for that functionality.
mbobka Posted - Jul 02 2006 : 4:46:18 PM
new member "somewhere" may be invalid:

class A {
   int F() {}   // <-- invalid. have no return value
};

therefore no reason for creating it...

just sample. i assume that refactor must create valid code (compilable)
feline Posted - Jul 02 2006 : 2:06:36 PM
i don't follow.

with add similar member we have two options. we always put the new member "somewhere", or we ask the user what to do every time they trigger this refactoring. asking can quickly lead to more options, etc. even if we ask the user if they want the function placed in the header or the cpp file having an autotext entry is not going to make a difference.

the purpose of add similar member is to help when you are making a small change to an existing method or variable. i find it is most useful when i am sitting in a cpp file *using* a class, and decide that i need to modify the class i am using. i can then trigger this refacoring on the existing class member variable, which is a lot easier than navigating to the class header file and manually adding the new line.

as soon as we have any behaviour in VA, someone somewhere wants it to work differently. refactoring is just a very obvious example of this effect.

the design is to have refactoring operations that are very small and well defined, so they do not need options, and do not need to ask the user questions. "move implementation to cpp" exists specifically to help in cases such as this, so after using add similar you can move the new function to the cpp file.
mbobka Posted - Jul 02 2006 : 06:00:45 AM
I don't need autoimplementation in header file for added member. Also, coding standards may vary for different developers, and declaration "in one row" may be unacceptable.
feline Posted - Jul 01 2006 : 12:09:25 PM
what are you hoping to do with an autotext entry? the function name and parameters are available for you to edit in the dialog box, and this refactoring is only designed to insert an empty function body.

it could be you are looking for a different operation than add similar member.
mbobka Posted - Jun 29 2006 : 04:19:38 AM
I think AutoText template needed for "Add Similar Member"...
support Posted - Jun 28 2006 : 10:51:25 PM
Learn how to use Create Implementation effectively by reading the documentation available via:

www.wholetomato.com/products/matrixRefactoring.html
feline Posted - Jun 28 2006 : 5:57:04 PM
the basic reason for placing the new implementation in the .h file is to only modify one file. if refactoring modifies multiple files it gets confusing to watch, and to implement.

the basic idea is to have lots of very small, very simple operations, with the absolute minimum of questions and user interaction. short of asking all the time what the user wants we can never satisfy everyone, so there are small simple refactorings, and you can chain them together in the way that best suits you.

it does take a change in the way you think and work to get the most out of VA refactoring, something i am still working on myself, but it does save me a lot of typing and work.
feline Posted - Jun 28 2006 : 5:51:53 PM
quote:
Originally posted by mbobka

Becuase if I want to change return type or paramters I do it in IDE very well! But if I want to create a function with diffirent name, then you spend not few seconds but half of minute or even several minutes, while you will scroll throught kilometers of entire function signare


if you use this dialog to change the return type then both the header and the cpp file are modified for you, so less work.

in the dialog press the HOME key, to get to the beginning instantly. you can then use CTRL + Left Arrow to jump one word at a time to the function name.
damned Posted - Jun 28 2006 : 3:35:20 PM
What problem to have checkbox with meaning where create new member in the .h or in same .cpp as selected method?
I say 'same .cpp' because I have lots of methods in the class and want to group them in several .cpp files named with class name as prefix.
mbobka Posted - Jun 28 2006 : 04:12:44 AM
About autoimplementation... Why function implemetation is in .h? Why not in .cpp? I still don't understand it.
mbobka Posted - Jun 28 2006 : 04:10:01 AM
It's really bad design for me.

Becuase if I want to change return type or paramters I do it in IDE very well! But if I want to create a function with diffirent name, then you spend not few seconds but half of minute or even several minutes, while you will scroll throught kilometers of entire function signare (I have long signatures for functions which I want to "add similar" ).
I want to suggest not to remove entire signature, but select only function name text instead of entire signature in the text box.
feline Posted - Jun 27 2006 : 6:43:48 PM
this is by design.

the dialog is shown since we do not know what "similar" means. it may mean "same parameters, different name and return type", or it may mean "same return type, different name and parameters", or it may mean "different name, everything else the same"

the implementation is created in the .h to keep the refactoring operations simple. the idea is to avoid having to ask any more questions that required. the approach is to have lots of simple operations that the user can chain together however they want.

what ever default behaviour we choose will be wrong for someone *sigh* so the approach is to let you chain together as many, or as few, operations as you want.

© 2023 Whole Tomato Software, LLC Go To Top Of Page
Snitz Forums 2000