10

We have a sanity check method

void IsNotNull<T>(T obj){...}

invocation

IsNotNull(obj); 

I want to replace this to invoke the other overload that takes a second param of type string (message)

void IsNotNull<T>(T obj, string message){...}

So I want to change the invocation as

IsNotNull(obj, "obj is null");

I'm trying to achieve this using resharper's find pattern and replace.

So my find pattern is : IsNotNull($args$) - This works fine and it finds the method calls

Replace pattern: IsNotNull($args$, "$args$ is null") - This doesn't do anything

I also tried this IsNotNull($args$, """" + $args$ + """")

--Edited-- The suggestion box showing the correct wording(for both argument and identifier), but once applied it's different. I'm using Resharper 6

enter image description here

After applying the suggestion I get this enter image description here

When I click Edit Pattern enter image description here

1
  • 1
    What R# are you using? I have tried version proposed by @hmemcpy and it all worked fine. R# 7.1 Commented Jan 6, 2013 at 14:59

3 Answers 3

7

What is your $args$ parameter defined as in the Search and Replace? If you make it to be Identifier, then you replace should work:

Find: IsNotNull($args$) - where $args$ is an Identifier
Replace: IsNotNull($args$, "$args$ is null")

You should have the result you want, i.e. IsNotNull(obj, "obj is null").

Sign up to request clarification or add additional context in comments.

2 Comments

thanks, unfortunately it didn't solve the problem it still prints IsNotNull(obj, obj). I want my second param enclosed within double quotes
"where $args$ is an Identifier" is the important part.
1

You can consider trying to use this pattern:

IsNotNull($args$, string.Format("{0} is null", $args$))

It works perfectly for me with ReSharper 7.1.

It seems, that R# doesn't want to evaluate argument expression inside of string literals normally. Given your pattern

IsNotNull($args$, "$args$ is null")

It replaced IsNotNull(5); by IsNotNull(5, 5); which is odd

2 Comments

In this instance I need the name of the args, not the value of args as args.ToString(). I basically need to enclose my args with double quotes
I see, sorry for misunderstanding, because I've used to trace parameter values, not the name of the arguments. I will try to see if I can modify a solution to fit your need
1
+50

The easiest method would be to rewrite the original method like so:

void IsNotNull<T>(T obj){
    IsNotNull(obj, "obj is null");
}

Then click on the method signature, and choose Refactor->Inline Method (Ctrl+R, Ctrl+I). If you need to keep the original method signature around, you can, or you can check the box for "Remove inlined method declaration."

EDIT: Looks like hmemcpy's solution works in 7.1, so I'd suggest an upgrade. If that's not possible, however, try the following regular expression find-and-replace in Visual Studio.

Find: IsNotNull\(([^\),]+)\);
Replace: IsNotNull($1, "$1 is null");

Make sure "Use Regular Expressions" is checked, and "Look in:" should be "Entire Solution".

8 Comments

Thanks for the reply, but your suggestion not solving my problem in the context of Resharper-Replacement-Pattern or in general. I want specific message to be diplayed. Not just 'obj is null', in my question it was just an example
@NasmiSabeer: No problem. Actually, just figured it out, and am updating my solution.
@NasmiSabeer: Actually, it looks like hmemcpy's solution is correct. The key is that $args$ has to be defined as an Identifier in the Search With Pattern dialog, and not an Argument. I'm not sure why they have the quote limitation for Argument placeholders, but Identifier placeholders appear to work just fine.
Can you give an example that it didn't work on, and what version of Resharper you're using? It appears to work correctly on my system.
Thanks. Can you show what comes up if you click the "Edit pattern" link?
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.