<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4439386706617871322</id><updated>2011-11-03T18:43:46.591+04:00</updated><category term='visual studio'/><category term='guidelines'/><category term='crash'/><category term='plans'/><category term='tools'/><category term='configuration'/><category term='jedi'/><category term='facts'/><category term='development'/><category term='languages'/><category term='features'/><category term='video'/><category term='events'/><category term='communication'/><category term='release'/><category term='about'/><category term='plugins'/><category term='links'/><category term='C# 3.0'/><category term='beta'/><title type='text'>ReSharper Horizons</title><subtitle type='html'>ReSharper Product Manager's Random Thoughts</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>70</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-8346357958549208186</id><published>2009-10-29T11:10:00.006+03:00</published><updated>2009-11-05T19:50:54.343+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='features'/><title type='text'>ReSharper 5 -- Less Shifting Means More Speed</title><content type='html'>&lt;a href="http://blogs.jetbrains.com/dotnet/"&gt;JetBrains .NET blog&lt;/a&gt; and web site are talking about major features in ReSharper 5, like showing metadata for library classes, downloading source code for .NET Framework, code inspections, ASP.NET MVC support and other great things. But there are many more improvements in ReSharper 5 which deserve attention and I thought I should blog about them. &lt;br /&gt;&lt;br /&gt;When ReSharper first introduced CamelHumps to .NET world (and then other tools and Visual Studio 2010 followed), it worked only in Go To Type and similar features. It is very convenient to type just "TMV" and see "&lt;strong&gt;T&lt;/strong&gt;ree&lt;strong&gt;M&lt;/strong&gt;odel&lt;strong&gt;V&lt;/strong &gt;iew" in the list. In previous version of ReSharper we added CamelHumps matching to intellisense and that increased productivity once again. In ReSharper-enabled teams one can often hear people talking abbreviations. &lt;br /&gt;&lt;br /&gt;But &lt;em&gt;original&lt;/em&gt; style of typing abbreviations has one issue - to much Shift use. Now, with ReSharper 5, it is no longer needed:&lt;br /&gt; &lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_jTxA0bWcv6k/SulVLC-oFnI/AAAAAAAAASI/OFpSCzG05K8/s1600-h/LowerCaseMatching.png"&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 75px;" src="http://4.bp.blogspot.com/_jTxA0bWcv6k/SulVLC-oFnI/AAAAAAAAASI/OFpSCzG05K8/s320/LowerCaseMatching.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5397939276646717042" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ReSharper can recognize CamelHumps and match them to lower case letters. This of course works in completion too:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_jTxA0bWcv6k/SulV20JslVI/AAAAAAAAASQ/13rddwtjoP0/s1600-h/LowerCaseCompletion.png"&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 256px; height: 66px;" src="http://3.bp.blogspot.com/_jTxA0bWcv6k/SulV20JslVI/AAAAAAAAASQ/13rddwtjoP0/s320/LowerCaseCompletion.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5397940028580861266" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;That tiny feature alone can increase code crafting speed and make you more productive, especially when you have longer descriptive type names. &lt;br /&gt;&lt;br /&gt;&lt;em&gt;ReSharper 5 early builds are currently available throught &lt;a href="http://www.jetbrains.net/confluence/display/ReSharper/ReSharper+Early+Access+Program"&gt;Early Access Program&lt;/a&gt;. ReSharper 4.5 purchases made on or after October 15, 2009, qualify for a FREE upgrade to ReSharper 5.0&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-8346357958549208186?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/8346357958549208186/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=8346357958549208186' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/8346357958549208186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/8346357958549208186'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2009/10/resharper-5-less-shifting-means-more.html' title='ReSharper 5 -- Less Shifting Means More Speed'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_jTxA0bWcv6k/SulVLC-oFnI/AAAAAAAAASI/OFpSCzG05K8/s72-c/LowerCaseMatching.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-6327834385061482869</id><published>2009-07-08T12:07:00.003+04:00</published><updated>2009-07-08T12:22:46.425+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='features'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='guidelines'/><title type='text'>Migrating Source -- Switching Unit Testing Framework</title><content type='html'>I noticed &lt;a href="http://blog.eweibel.net/?p=303"&gt;several&lt;/a&gt; &lt;a href="http://stackoverflow.com/questions/709331/switching-between-using-nunit-and-mstest-for-unit-testing"&gt;people&lt;/a&gt; are migrating their source code base from NUnit to MSTest and vice versa. I thought I could share a useful technique to automate this process with ReSharper, and it appears to be large enough topic to not fit my &lt;a href="http://twitter.com/orangy"&gt;my twitter&lt;/a&gt; feed. Obviously, it applies not just to Unit Testing Framework switching, but to almost any library migrations.&lt;br /&gt;&lt;br /&gt;If I were faced with the task to migrate NUnit to MSTest I wouldn't use search-and-replace, but instead migrate it via &lt;strong&gt;temporary stubs&lt;/strong&gt;. It would require me do several pretty easy steps:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Remove references to &lt;em&gt;nuint.framework.dll&lt;/em&gt;. I will get lots of red code, but we'll fix it in a minute. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;Add nunit.framework.dll source code to solution (if permitted by license), or write stubs for what I use, like TestFixture, Test, Setup and TearDown attributes and assertion classes. When I'm done with that, all code should be green again, which you can instantly verify with &lt;em&gt;Solution Wide Analysis&lt;/em&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Move all those types to MSTest namespaces.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Rename types to match MSTest types.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;For assertions, implement missing members using existing API and use &lt;em&gt;Inline Method&lt;/em&gt; refactoring to get rid of them.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Remove stubs and add references to MSTest assemblies.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Enjoy MSTest runner in ReSharper 4.5 to run your beloved tests.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Using this technique, or variation of it, you can easily migrate your source code to different API, library or technology, even if you don't have source code for it. &lt;br /&gt;&lt;br /&gt;&lt;em&gt;Develop with pleasure!&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-6327834385061482869?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/6327834385061482869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=6327834385061482869' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/6327834385061482869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/6327834385061482869'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2009/07/migrating-source-switching-unit-testing.html' title='Migrating Source -- Switching Unit Testing Framework'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-2651794528454374497</id><published>2009-04-08T16:18:00.005+04:00</published><updated>2009-04-08T21:33:08.817+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plans'/><category scheme='http://www.blogger.com/atom/ns#' term='release'/><category scheme='http://www.blogger.com/atom/ns#' term='events'/><title type='text'>ReSharper 4.5 Released</title><content type='html'>We just released ReSharper 4.5, minor version aimed at performance, stability, compatibility and less memory usage. All the same great features plus some &lt;a href="http://www.jetbrains.com/resharper/features/newfeatures.html"&gt;nice additions&lt;/a&gt;, free for owners of ReSharper 4.x licenses. You can read more about &lt;a href="http://resharper.blogspot.com/2009/03/resharper-45-what-were-we-doing.html"&gt;what we were doing&lt;/a&gt; to improve quality of our product for your pleasure. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.jetbrains.com/resharper/download/index.html"&gt;Download ReSharper 4.5&lt;/a&gt; and enjoy your productivity boost!&lt;br /&gt;&lt;br /&gt;From now on, we are going to focus on ReSharper 5 with the main goal to support Visual Studio 2010 and C# 4. But that is not the whole story about next major version! I will be blogging about ReSharper 5 cool new features during our way to the next release. &lt;br /&gt;&lt;br /&gt;&lt;em&gt;Develop with pleasure!&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-2651794528454374497?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/2651794528454374497/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=2651794528454374497' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/2651794528454374497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/2651794528454374497'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2009/04/resharper-45-released.html' title='ReSharper 4.5 Released'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-7024137002988211104</id><published>2009-04-06T12:48:00.018+04:00</published><updated>2009-04-08T00:47:23.479+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='languages'/><title type='text'>Mortal Kode -- Quite Simple Generics</title><content type='html'>It is very important for a tool to understand &lt;strong&gt;correctly&lt;/strong&gt; what is written in the code. You just can't underestimate the importance of this ability. If the code is not correctly parsed, resolved, analyzed and understood by the tool's core, any other feature of the tool can easily fail. Nobody wants Rename refactoring to miss changes, code completion to insert unavailable symbols and code navigation to put the caret in a wrong position. Actually, the most annoying thing would be wrong code analysis, when code is incorrectly flagged with error, when in fact it compiles just fine. This all can easily happen if underlying code model is wrong.&lt;br /&gt;&lt;br /&gt;That's why here at JetBrains, we put a lot of effort into our code model, language understanding and work hard to handle even most complex cases -- after all, they can easily be found in real applications.&lt;br /&gt;&lt;br /&gt;Today we will look at complexity of code involving generics in C#. Consider the following example (thanks to Vladimir for this one):&lt;br /&gt;&lt;br /&gt;&lt;div    style="   background: white;font-family:Courier New;font-size:9pt;color:black;"&gt;&lt;pre style="margin: 0px;"&gt;  &lt;span style="color:blue;"&gt;abstract&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;A&lt;/span&gt;&amp;lt;&lt;span style="color:#010001;"&gt;T&lt;/span&gt;&amp;gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;  {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;abstract&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; &lt;span style="color:#010001;"&gt;Foo&lt;/span&gt;(&lt;span style="color:#010001;"&gt;T&lt;/span&gt; &lt;span style="color:#010001;"&gt;x&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;abstract&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;B&lt;/span&gt;&amp;lt;&lt;span style="color:#010001;"&gt;S&lt;/span&gt;&amp;gt; : &lt;span style="color:#2b91af;"&gt;A&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;B&lt;/span&gt;&amp;lt;&lt;span style="color:#010001;"&gt;S&lt;/span&gt;&amp;gt;&amp;gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;      &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;C&lt;/span&gt;&amp;lt;&lt;span style="color:#010001;"&gt;U&lt;/span&gt;&amp;gt; : &lt;span style="color:#2b91af;"&gt;B&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;C&lt;/span&gt;&amp;lt;&lt;span style="color:#010001;"&gt;U&lt;/span&gt;&amp;gt;&amp;gt; &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;      {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt; &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;      }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;  }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;I think not too many people out there can easily say what would be the correct signature for the implementation of method Foo in the nested class C&amp;lt;U&amp;gt;. As for me, I can't. Doing it manually is simply too much.&lt;br /&gt;&lt;br /&gt;First, we try Visual Studio "override" helper and we get the following:&lt;br /&gt;&lt;br /&gt;&lt;div    style="   background: white;font-family:Courier New;font-size:9pt;color:black;"&gt;&lt;pre style="margin: 0px;"&gt;  &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;override&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; &lt;span style="color:#010001;"&gt;Foo&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;A&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;B&lt;/span&gt;&amp;lt;&lt;span style="color:#010001;"&gt;S&lt;/span&gt;&amp;gt;&amp;gt;.&lt;span style="color:#2b91af;"&gt;B&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;C&lt;/span&gt;&amp;lt;&lt;span style="color:#010001;"&gt;U&lt;/span&gt;&amp;gt;&amp;gt; &lt;span style="color:#010001;"&gt;x&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;  {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    &lt;span style="color:blue;"&gt;throw&lt;/span&gt; &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;NotImplementedException&lt;/span&gt;();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;  }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Complex enough, and not quite correct:&lt;br /&gt;&lt;pre&gt;error CS0115: 'A&amp;lt;T&amp;gt;.B&amp;lt;S&amp;gt;.C&amp;lt;U&amp;gt;.Foo(A&amp;lt;A&amp;lt;A&amp;lt;A&amp;lt;T&amp;gt;.B&amp;lt;S&amp;gt;&amp;gt;.B&amp;lt;A&amp;lt;T&amp;gt;.B&amp;lt;S&amp;gt;.C&amp;lt;U&amp;gt;&amp;gt;&amp;gt;.B&amp;lt;S&amp;gt;&amp;gt;.B&amp;lt;A&amp;lt;A&amp;lt;T&amp;gt;.B&amp;lt;S&amp;gt;&amp;gt;.B&amp;lt;A&amp;lt;T&amp;gt;.B&amp;lt;S&amp;gt;.C&amp;lt;U&amp;gt;&amp;gt;.C&amp;lt;U&amp;gt;&amp;gt;)': no suitable method found to override &lt;br /&gt;error CS0534: 'A&amp;lt;T&amp;gt;.B&amp;lt;S&amp;gt;.C&amp;lt;U&amp;gt;' does not implement inherited abstract member 'A&amp;lt;A&amp;lt;A&amp;lt;T&amp;gt;.B&amp;lt;S&amp;gt;&amp;gt;.B&amp;lt;A&amp;lt;T&amp;gt;.B&amp;lt;S&amp;gt;.C&amp;lt;U&amp;gt;&amp;gt;&amp;gt;.Foo(A&amp;lt;A&amp;lt;T&amp;gt;.B&amp;lt;S&amp;gt;&amp;gt;.B&amp;lt;A&amp;lt;T&amp;gt;.B&amp;lt;S&amp;gt;.C&amp;lt;U&amp;gt;&amp;gt;)'&lt;/pre&gt;&lt;br /&gt;Let's see what ReSharper 4.5 inserts when developer uses "Implement missing members" action from the "Generate" menu:&lt;br /&gt;&lt;br /&gt;&lt;div    style="   background: white;font-family:Courier New;font-size:9pt;color:black;"&gt;&lt;pre style="margin: 0px;"&gt;  &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;override&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; &lt;span style="color:#010001;"&gt;Foo&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;A&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;A&lt;/span&gt;&amp;lt;&lt;span style="color:#010001;"&gt;T&lt;/span&gt;&amp;gt;.&lt;span style="color:#2b91af;"&gt;B&lt;/span&gt;&amp;lt;&lt;span style="color:#010001;"&gt;S&lt;/span&gt;&amp;gt;&amp;gt;.&lt;span style="color:#2b91af;"&gt;B&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;A&lt;/span&gt;&amp;lt;&lt;span style="color:#010001;"&gt;T&lt;/span&gt;&amp;gt;.&lt;span style="color:#2b91af;"&gt;B&lt;/span&gt;&amp;lt;&lt;span style="color:#010001;"&gt;S&lt;/span&gt;&amp;gt;.&lt;span style="color:#2b91af;"&gt;C&lt;/span&gt;&amp;lt;&lt;span style="color:#010001;"&gt;U&lt;/span&gt;&amp;gt;&amp;gt; &lt;span style="color:#010001;"&gt;x&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;  {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;  }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;You can see that parameter type is exactly the same as expected by compiler. Needless to say the signature is &lt;strong&gt;correct&lt;/strong&gt;, and you don't have to compile it first.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Does &lt;strong&gt;your&lt;/strong&gt; tool understand non-trivial code?&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Next time, we'll take a look at some lambda fun.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-7024137002988211104?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/7024137002988211104/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=7024137002988211104' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/7024137002988211104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/7024137002988211104'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2009/04/mortal-kode-quite-simple-generics.html' title='Mortal Kode -- Quite Simple Generics'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-5106113144586807990</id><published>2009-03-20T10:50:00.005+03:00</published><updated>2009-03-20T16:30:09.701+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='beta'/><title type='text'>ReSharper 4.5 -- From Beta to Release</title><content type='html'>It's been a while since we released &lt;a href="http://www.jetbrains.com/resharper/beta.html"&gt;ReSharper 4.5 Beta&lt;/a&gt; and it went pretty cool. Those who like fresh bits &lt;a href="http://www.nablasoft.com/guardian/index.php/2009/03/19/resharper-45-beta-give/"&gt;posted&lt;/a&gt; &lt;a href="http://www.nablasoft.com/alkampfer/index.php/2009/03/18/reshaper-45-beta/"&gt;some&lt;/a&gt; &lt;a href="http://scipbe.wordpress.com/2009/03/18/resharper-45-beta/"&gt;feedback&lt;/a&gt; &lt;a href="http://leriksen71.wordpress.com/2009/03/18/resharper-45-first-impression/"&gt;about&lt;/a&gt; Beta already, and they like it! &lt;br /&gt;&lt;br /&gt;Of course, Beta is not Release and it has its own problems, which we are working on all days long. &lt;a href="http://www.jetbrains.net/confluence/display/ReSharper/ReSharper+4.5+Nightly+Builds"&gt;Nightly Builds&lt;/a&gt; are published and quality constantly improves. You can see community-based build rating improving from "Works" to "Stable", and we aim at five stars "No problems at all" for final version!&lt;br /&gt;&lt;br /&gt;There is only one issue with achieving best quality for everyone:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;strong&gt;Every combination of &lt;br /&gt;project, environment and developer &lt;br /&gt;is unique&lt;/strong&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;We thoroughly test lots of cases: various packages and extensions installed into Visual Studio, operating system versions, types and sizes of projects, configurations of the environment. But there are thousands other unique combinations of those things, and of course &lt;strong&gt;your&lt;/strong&gt; unique way of working with code. &lt;br /&gt;&lt;br /&gt;In our course from ReSharper 4.5 beta to release, we welcome you to participate in the process of making ReSharper best productivity tool &lt;strong&gt;for you&lt;/strong&gt;. Please, do not hide in shadows waiting for release. Tell us anything and everything you feel wrong about latests builds. Don't wait for someone else to report the problem, it can very well happen there is no someone else. Write in comments, post to &lt;a href="http://twitter.com/resharper"&gt;Twitter&lt;/a&gt;, submit requests to our &lt;a href="http://jetbrains.net/jira/browse/RSRP"&gt;issue tracker&lt;/a&gt;, or send email to support at JetBrains. We are in hunger for your feedback! And we &lt;strong&gt;promise&lt;/strong&gt; to &lt;a href="http://twitter.com/KatMagic/statuses/1354847943"&gt;do&lt;/a&gt; our &lt;a href="http://twitter.com/jpboodhoo/statuses/1323569920"&gt;best&lt;/a&gt; to &lt;a href="http://twitter.com/HowardvRooijen/statuses/1347249835"&gt;improve&lt;/a&gt; your experience with ReSharper. &lt;br /&gt;&lt;br /&gt;Thank you for your participation in the Early Access Program! &lt;br /&gt;&lt;br /&gt;PS: Try Scott's &lt;a href="http://sleepoverrated.com/archive/2009/02/downloader-for-resharper-nightly-builds/"&gt;Nightly Builds Updater&lt;/a&gt;, it will help you run the most recent bits of ReSharper.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-5106113144586807990?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/5106113144586807990/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=5106113144586807990' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/5106113144586807990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/5106113144586807990'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2009/03/resharper-45-from-beta-to-release.html' title='ReSharper 4.5 -- From Beta to Release'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-5143523275445613007</id><published>2009-03-12T18:00:00.013+03:00</published><updated>2009-03-13T01:06:24.201+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='features'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='beta'/><title type='text'>ReSharper 4.5 -- What Were We Doing?</title><content type='html'>&lt;a href="http://resharper.blogspot.com/2009/03/resharper-45-looking-in-past.html"&gt;Recently&lt;/a&gt; we looked at ReSharper's past. You probably noticed that we often have x.5 releases, aimed at performance and stabilization. After the big marathon run for C# 3.0 and VS2008, we finally got some time to perform housekeeping, clean out and sweeping tasks. Not just for beautiful code, but for &lt;strong&gt;improvements in speed and memory&lt;/strong&gt; that require architecture changes.&lt;br /&gt;&lt;br /&gt;Since ReSharper 4.1 release in September, we spent lots of time with &lt;a href="http://www.jetbrains.com/profiler/"&gt;dotTrace&lt;/a&gt;, running hundreds of use cases and analyzing results. We identified several major bottlenecks that hindered performance, and hundreds of smaller problems. We also analyzed managed and unmanaged memory usage in many types of solutions of different sizes. For many issues, small changes here and there just weren’t enough. We &lt;span style="font-weight:bold;"&gt;had to change&lt;/span&gt; data structures, algorithms, dependencies, ownership of objects, and sometimes even basic principles of our code.&lt;br /&gt;&lt;br /&gt;Tough decision, but we decided that performance, memory usage and building a &lt;span style="font-weight:bold;"&gt;foundation for further improvements&lt;/span&gt; were of a higher priority than API compatibility. Without that massive code cleanup we would have been spending more and more resources to make our product better for you, and without much success. Please accept our apologies, plug-in developers! We really had to do that to gain &lt;span style="font-weight:bold;"&gt;30% speed improvement&lt;/span&gt; overall, up to 60% in many cases if you use multicore processor. We‘re hoping to extend parallel processing capabilities in ReSharper 5 and improve speed even more, but we had to lay a foundation for this.&lt;br /&gt;&lt;br /&gt;Another big part of our work was dedicated to &lt;span style="font-weight:bold;"&gt;Visual Studio integration&lt;/span&gt;. It is too early to speak about Visual Studio 2010 integration at the moment, but even earlier versions required substantial efforts. We &lt;span style="font-weight:bold;"&gt;improved integration&lt;/span&gt; with various packages, provided fixes or workarounds for a good deal of problems. We spent lots of time doing low level debugging in mixed (managed/unmanaged) environment and I must admit -- it was fun but also very hard. Microsoft Development Tools Division did a great job helping us solve issues and answering our questions (which were far from being trivial, as you might guess). In fact, during the past year we got much more assistance from Microsoft than ever! Thank you guys, I hope you don't have my picture attached to your dartboards :)&lt;br /&gt;&lt;br /&gt;Developing &lt;span style="font-weight:bold;"&gt;new features&lt;/span&gt; and improving existing ones was the last, but not the least piece of our work. We reworked ReSharper &lt;span style="font-weight:bold;"&gt;naming system&lt;/span&gt; and, finally, you can configure a style for virtually any identifier . We added more functionality to &lt;span style="font-weight:bold;"&gt;Solution Wide Analysis&lt;/span&gt; -- it is now able to highlight globally unused symbols for you, redundant virtual keyword, parameters that are not used in any overrides, and much more. My favorite global inspection detects potential problems in cross-casts, like when you cast a variable of type IFoo to IBar, but there is no class in solution that implements both interfaces! New &lt;span style="font-weight:bold;"&gt;Go to Implementation&lt;/span&gt; feature allows you to jump straight to the code that might run, skipping all interfaces and abstract classes. &lt;span style="font-weight:bold;"&gt;Find Referenced Code&lt;/span&gt; can now run on any selection in Solution Explorer, quickly showing you dependencies of a particular part of your solution. &lt;span style="font-weight:bold;"&gt;MSTest&lt;/span&gt; is now built into ReSharper, &lt;span style="font-weight:bold;"&gt;Visual Basic .NET&lt;/span&gt; support has been greatly improved, and many reworked &lt;span style="font-weight:bold;"&gt;refactorings&lt;/span&gt; are now particularly rock solid.&lt;br /&gt;&lt;br /&gt;These days we are preparing to publish &lt;span style="font-weight:bold;"&gt;ReSharper 4.5 Beta&lt;/span&gt;. As more and more people download ReSharper 4.5 &lt;a href="http://www.jetbrains.net/confluence/display/ReSharper/ReSharper+4.5+Nightly+Builds"&gt;nightly builds&lt;/a&gt;, we get invaluable feedback to make this release really shiny. It is currently very stable, with several known glitches that we are fixing. Each new build is better than previous ones.&lt;br /&gt;&lt;br /&gt;Don’t hesitate to &lt;a href="http://www.jetbrains.net/confluence/display/ReSharper/ReSharper+4.5+Nightly+Builds"&gt;download it&lt;/a&gt;, try it yourself and &lt;a href="http://www.jetbrains.net/devnet/community/resharper/resharper_eap"&gt;tell us&lt;/a&gt; how it works for you!&lt;br /&gt;We mean it: we really, really need to know how it behaves in your unique environment with your unique solution, and it’s only you who can &lt;a href="http://jetbrains.net/jira/browse/RSRP"&gt;let&lt;/a&gt; &lt;a href="http://twitter.com/orangy"&gt;us&lt;/a&gt; &lt;a href="http://www.jetbrains.net/devnet/community/resharper/resharper_eap"&gt;know&lt;/a&gt; about it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-5143523275445613007?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/5143523275445613007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=5143523275445613007' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/5143523275445613007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/5143523275445613007'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2009/03/resharper-45-what-were-we-doing.html' title='ReSharper 4.5 -- What Were We Doing?'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-707511111229936896</id><published>2009-03-12T13:37:00.008+03:00</published><updated>2009-03-12T18:20:22.624+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='about'/><category scheme='http://www.blogger.com/atom/ns#' term='facts'/><category scheme='http://www.blogger.com/atom/ns#' term='plans'/><title type='text'>ReSharper 4.5 -- Looking in the Past</title><content type='html'>I didn't post anything for 4 months and I want to fix that. Where is my light bulb I wonder? Not that I had nothing to say, more like I was wearing developer's hat. Anyway, I thought I could explain what's been going on and what we've been doing for the upcoming release, ReSharper 4.5.&lt;br /&gt;&lt;br /&gt;But before I start talking about the new release, I'd like to look back at ReSharper history.&lt;br /&gt;&lt;br /&gt;2004, July: &lt;strong&gt;ReSharper 1.0&lt;/strong&gt;&lt;br /&gt;First release of JetBrains ReSharper, productivity add-in for Visual Studio 2003 and C# 1.1. &lt;em&gt;Code analysis&lt;/em&gt;, &lt;em&gt;quick fixes&lt;/em&gt; and &lt;em&gt;context actions&lt;/em&gt;, &lt;em&gt;refactorings&lt;/em&gt; and &lt;em&gt;templates&lt;/em&gt;, all in JetBrains' intelligent style. &lt;pre&gt;&lt;br /&gt;   System.Console.Out.WriteLine("Hello .NET world");&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;2005, March: &lt;strong&gt;ReSharper 1.5&lt;/strong&gt; &lt;br /&gt;Added 8 new refactorings. &lt;em&gt;Performance&lt;/em&gt; was significantly improved. &lt;br /&gt;&lt;br /&gt;2006, May: &lt;strong&gt;ReSharper 2.0&lt;/strong&gt;&lt;br /&gt;With this new release, ReSharper makes a step up from a simple add-in to a real development environment. Support for Visual Studio 2005 and C# 2.0, more &lt;em&gt;refactorings&lt;/em&gt;, &lt;em&gt;ASP.NET&lt;/em&gt; support, &lt;em&gt;Unit Testing&lt;/em&gt;, &lt;em&gt;build script&lt;/em&gt; support, additional navigation commands and more.&lt;br /&gt;&lt;br /&gt;2006, December: &lt;strong&gt;ReSharper 2.5&lt;/strong&gt;&lt;br /&gt;Focus on the &lt;em&gt;performance&lt;/em&gt; improvements and usability to improve developers' experience. Of course we couldn't resist a few new features as well: &lt;em&gt;null-reference analysis&lt;/em&gt;, &lt;em&gt;Navigate from Here&lt;/em&gt; and &lt;em&gt;Go to File Member&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;2007, June: &lt;strong&gt;ReSharper 3.0&lt;/strong&gt;&lt;br /&gt;Major feature-loaded release, bringing many productivity enhancements to the table. Many of them are now perceived as if they've been there forever. &lt;em&gt;Go to Symbol&lt;/em&gt;, find &lt;em&gt;referenced and dependent code&lt;/em&gt;, automatic &lt;em&gt;member reordering&lt;/em&gt;, rearranging statements and members, to-do browser. Code analysis got suggestions, VB got many of the features previously available only for C#, and XAML made it to the list of supported technologies.&lt;br /&gt;&lt;br /&gt;2008, June: &lt;strong&gt;ReSharper 4.0&lt;/strong&gt;&lt;br /&gt;This release introduced support for Visual Studio 2008 and C# 3.0 with vars, extension methods, lambdas, LINQ, object &amp; collection initializers, anonymous types, and partial methods. This alone would be sufficient for a new major release. However, we did more: &lt;em&gt;Solution-Wide Analysis&lt;/em&gt;, &lt;em&gt;Code Cleanup&lt;/em&gt;, &lt;em&gt;Complete Statement&lt;/em&gt;, more &lt;em&gt;refactorings&lt;/em&gt;, improved &lt;em&gt;IntelliSense&lt;/em&gt;, &lt;em&gt;recent edits&lt;/em&gt; and other tools to simplify everyday development tasks. &lt;br /&gt;&lt;br /&gt;That is how ReSharper have been evolving in the past. What's next?&lt;br /&gt;&lt;br /&gt;2009, March-April: &lt;strong&gt;&lt;a href="http://www.jetbrains.net/confluence/display/ReSharper/ReSharper+4.5+Nightly+Builds"&gt;ReSharper 4.5&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;To be continued...&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-707511111229936896?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/707511111229936896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=707511111229936896' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/707511111229936896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/707511111229936896'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2009/03/resharper-45-looking-in-past.html' title='ReSharper 4.5 -- Looking in the Past'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-8336044795668410374</id><published>2008-11-07T16:57:00.004+03:00</published><updated>2008-11-07T17:23:42.816+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plans'/><category scheme='http://www.blogger.com/atom/ns#' term='events'/><category scheme='http://www.blogger.com/atom/ns#' term='communication'/><title type='text'>Microsoft Tech·Ed EMEA 2008 / Developers</title><content type='html'>We'll be there, at Microsoft Tech·Ed EMEA 2008 Developers, Barcelona, booth E3. If you are going to be there come visit us and let's talk! Whether you like to learn about ReSharper or TeamCity or dotTrace, grab some tips and tricks, learn what we are going to do in future versions, or just talk about how wonderful the world is - you're welcome at our booth. See you!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-8336044795668410374?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/8336044795668410374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=8336044795668410374' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/8336044795668410374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/8336044795668410374'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2008/11/microsoft-teched-emea-2008-developers.html' title='Microsoft Tech·Ed EMEA 2008 / Developers'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-3996922812234541054</id><published>2008-11-01T15:00:00.000+03:00</published><updated>2008-11-01T15:00:00.941+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visual studio'/><category scheme='http://www.blogger.com/atom/ns#' term='crash'/><title type='text'>Wild World of Visual Studio -- Proxies confront Hooks</title><content type='html'>How can Internet Explorer settings interfere with productivity add-in to Visual Studio, such as ReSharper? And even lead to Visual Studio crash when doing some seemingly unrelated operations, like checking out source code from Team Foundation Server?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Story 3 -- Proxies confront Hooks&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We've got a number of reports about Visual Studio crash when doing repository operations using TFS. Of course, when ReSharper is disabled, no crashes occurs, which make users think ReSharper is guilty. We couldn't reproduce the problem in the labs, and we again tried to assert/log/verify everything we can think about. We even got some dumps with the crash, but could not find anything really useful there, besides evidence that there are numerous SecurityExceptions instances in the managed heap waiting to be collected. We needed reproducible case with WinDbg attached. Thanks to Vasily, we got one. &lt;br /&gt;&lt;br /&gt;It is funny how we were debugging this crash. Since we were not able to reproduce the problem in the labs, we needed access to the faulty computer. However, due to corporate rules on the user's side, we were not able to arrange real remote session. But we had WinDbg with command line interface, and we had instant messaging. So I was sending WinDbg commands, he copied them into WinDbg, executed, and then copied back the result. We laughed about it and were kidding about extension to WinDbg which would be Jabber client :)&lt;br /&gt;&lt;br /&gt;After several days being in this copy-paste process, we finally found the problem. Three components playing together made it explosive: &lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt; Connecting to web site with HTTP when automatic proxy configuration script is enabled (It is basically JScript function which gives proxy address for given host)&lt;br /&gt;&lt;li&gt; Managed hooks installed (here is ReSharper's role in the problem, but could be any other plugin)&lt;br /&gt;&lt;li&gt; Pumping messages during JScript code execution&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Remove one, and all is fine again. So, what is happening in our case? Now, watch my hands. &lt;ol&gt;&lt;br /&gt;&lt;li&gt; TeamFoundation client is going to communicate to server.&lt;br /&gt;&lt;li&gt; It initiates connection to web service.&lt;br /&gt;&lt;li&gt; HttpWebRequest is asking for proxy information.&lt;br /&gt;&lt;li&gt; WebProxy detects that automatic proxy configuration script is enabled.&lt;br /&gt;&lt;li&gt; AutoWebProxyScriptEngine downloads script and uses JScript engine to execute it&lt;br /&gt;&lt;li&gt; JScript engine restricts code permissions to execute only.&lt;br /&gt;&lt;li&gt; Exception happens while executing JScript and dialog is going to be shown with error information. This is who pumps messages.&lt;br /&gt;&lt;li&gt; Our managed hook is executed and attempts to use CallNextHookEx to pass data to other hooks.&lt;br /&gt;&lt;li&gt; Code Access Security system demands UnmanagedCode permission.&lt;br /&gt;&lt;li&gt; Due to restricted mode in which JScript executes, demand fails and SecurityException is rised.&lt;br /&gt;&lt;li&gt; Exception causes corruption of some internal Visual Studio COM objects, which instantly leads to Access Violation. &lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;Well, actually, this one was our fault. I added SecurityPermissionAttribute asserting UnmanagedCode permission to the hook procedure and ReSharper is shining like a diamond again. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Case closed, lessons learned.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-3996922812234541054?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/3996922812234541054/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=3996922812234541054' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/3996922812234541054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/3996922812234541054'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2008/11/wild-world-of-visual-studio-proxies.html' title='Wild World of Visual Studio -- Proxies confront Hooks'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-8176347961956177772</id><published>2008-10-31T09:00:00.000+03:00</published><updated>2008-10-31T09:00:00.481+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visual studio'/><category scheme='http://www.blogger.com/atom/ns#' term='crash'/><title type='text'>Wild World of Visual Studio -- Mysterious Component</title><content type='html'>This one was bugging us for a long time, until we got message from Jay (thanks!) who had similar problem and was willing to help. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Story 2 -- Mysterious Component&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The problem itself is mysterious. From time to time it happens that Visual Studio stops loading any add-ins. ReSharper is installed, but its menus are suddenly all gray and it is not listed in the "Tools \ Add-in manager" dialog. It happens after installing various products, it could be service pack, SQL server tools, Visual Studio components - anything! Some users install them and all works fine. Some users loose their favorite productivity tool. &lt;br /&gt;&lt;br /&gt;Logging, debugging, trying to reproduce for may be several years(!) led to no result. ReSharper was simply not loaded into the process, though all registration information appears to be in the right place. We checked encodings, verified files are not corrupted, verified registry access rights - all we can think of. As you can guess now, the reason was not anywhere near. &lt;br /&gt;&lt;br /&gt;After lots of email exchanges with Jay, including mini-dumps, Process Monitor traces, registry excerpts, configuration files and such we suddenly found ourselves staring at the right thing. It was msxml6.dll. Actually, it was the fact that there were no msxml6.dll in the call stack. Instead, there was msxml3.dll. &lt;br /&gt;&lt;br /&gt;We use .addin files to register our add-in in Visual Studio. It is XML file describing add-in, containing information about primary assembly, descriptions, load options and Visual Studio version compatibility information. The latter was that msxml3 was not able to process and thus Visual Studio refused add-in as non-compatible. In fact, msxml6 was there in System32, but it somehow happened to be not registered as COM object. Using regsvr32 on msxml6.dll repaired the system, resurrected ReSharper and enabled customers to enjoy our productivity add-in again. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Case closed.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-8176347961956177772?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/8176347961956177772/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=8176347961956177772' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/8176347961956177772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/8176347961956177772'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2008/10/wild-world-of-visual-studio-mysterious.html' title='Wild World of Visual Studio -- Mysterious Component'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-2547069832346183362</id><published>2008-10-30T13:52:00.015+03:00</published><updated>2008-10-30T16:16:23.610+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visual studio'/><category scheme='http://www.blogger.com/atom/ns#' term='crash'/><title type='text'>Wild World of Visual Studio -- Unfriendly Package</title><content type='html'>While developing "The Most Intelligent Add-In To Visual Studio" we often face issues that originates from the outside of our code. Being that Visual Studio itself, other packages and add-ins installed, OS components or other things added to the mix - it is always extremely hard to reproduce, debug and understand. Usually we have to perform post-mortem debugging, when all we have is mini-dump from the user experiencing the crash. And we are very happy when we have mini-dump! Often we have to resort to psychic debugging, speculating about what could have happened, trying this and that until we find the cause and issue the fix. &lt;br /&gt;&lt;br /&gt;I though I could share some stories of pure insanity we happened to participate in recently. May be another add-in developer is scratching his head in an attempt to understand the source of strange sounds from beneath the ground, and these stories will help. Or it may be just interesting reading for you. Or not :)&lt;br /&gt;&lt;br /&gt;The first one is the most recent one and is pretty simple. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Story 1 -- Unfriendly Package&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Our customers were complaining about Visual Studio crashing on start with ReSharper installed when running non-admin. Disabling ReSharper allows Visual Studio to load normally. When you see such behavior, you are absolutely sure ReSharper is guilty, aren't you? &lt;br /&gt;&lt;br /&gt;We've learned to be cautious in such cases. So I asked user (thanks Jon!) to capture mini-dump and send it to me for investigation. While downloading it, I was preparing myself to long hours of WinDbg magic, but !ClrStack revealed it in a second. SnippetDesigner was not able to access its files, since it placed it in privileged folder. It did so in the background thread and didn't catch exceptions. The result is CLR termination, which get Visual Studio to nowhere with itself. &lt;br /&gt;&lt;br /&gt;But wait! Why disabling ReSharper helped to avoid crash? Well, actually crash happens during SnippetDesigner package loading. Normally, it occurs when its window is opened (and it indeed crashes VS at this point without ReSharper). However, ReSharper uses Visual Studio API to get some configuration information, which can be extended with packages. So, by calling this API ReSharper caused those packages to load, essentially triggering the bug in SnippetDesigner on startup. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Case closed, opened &lt;a href="http://www.codeplex.com/SnippetDesigner/WorkItem/View.aspx?WorkItemId=531"&gt;another one&lt;/a&gt;.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-2547069832346183362?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/2547069832346183362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=2547069832346183362' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/2547069832346183362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/2547069832346183362'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2008/10/wild-world-of-visual-studio-unfriendly.html' title='Wild World of Visual Studio -- Unfriendly Package'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-8308791310715688122</id><published>2008-10-06T15:59:00.007+04:00</published><updated>2008-10-06T16:38:37.254+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='features'/><title type='text'>ReSharper Combos - Hiding Details</title><content type='html'>Today my day started with the question from Oleg Stepanov, Project Manager of ReSharper. He asked about avoiding huge amount of manual code changes, and after short discussion we got it done with ReSharper. I was very excited! We were able to solve refactoring task in seconds, invent new refactoring combo, and ReSharper was so smart to handle it absolutely right. &lt;strong&gt;No manual code changes&lt;/strong&gt; outside of the type being refactored. Here is simplified version of what we had, what we were to accomplish and how we did it. &lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Person&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; &lt;span style="color: #010001;"&gt;Name&lt;/span&gt; { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; &lt;span style="color: #010001;"&gt;Age&lt;/span&gt; { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;PersonInformation&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;readonly&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Person&lt;/span&gt; &lt;span style="color: #010001;"&gt;myPerson&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #010001;"&gt;PersonInformation&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;Person&lt;/span&gt; &lt;span style="color: #010001;"&gt;person&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #010001;"&gt;myPerson&lt;/span&gt; = &lt;span style="color: #010001;"&gt;person&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Person&lt;/span&gt; &lt;span style="color: #010001;"&gt;Person&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: #010001;"&gt;myPerson&lt;/span&gt;; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &lt;span style="color: blue;"&gt;internal&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Processor&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;readonly&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;PersonInformation&lt;/span&gt; &lt;span style="color: #010001;"&gt;myPersonInformation&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #010001;"&gt;Processor&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;PersonInformation&lt;/span&gt; &lt;span style="color: #010001;"&gt;personInformation&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #010001;"&gt;myPersonInformation&lt;/span&gt; = &lt;span style="color: #010001;"&gt;personInformation&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; &lt;span style="color: #010001;"&gt;Process&lt;/span&gt;()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;switch&lt;/span&gt; (&lt;span style="color: #010001;"&gt;myPersonInformation&lt;/span&gt;.&lt;span style="color: #010001;"&gt;Person&lt;/span&gt;.&lt;span style="color: #010001;"&gt;Name&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;case&lt;/span&gt; &lt;span style="color: #a31515;"&gt;"Mike"&lt;/span&gt;:&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; 1;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;case&lt;/span&gt; &lt;span style="color: #a31515;"&gt;"Sally"&lt;/span&gt;:&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: #010001;"&gt;myPersonInformation&lt;/span&gt;.&lt;span style="color: #010001;"&gt;Person&lt;/span&gt;.&lt;span style="color: #010001;"&gt;Age&lt;/span&gt; &amp;gt; 30 ? 2 : 3;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: #010001;"&gt;myPersonInformation&lt;/span&gt;.&lt;span style="color: #010001;"&gt;Person&lt;/span&gt;.&lt;span style="color: #010001;"&gt;Age&lt;/span&gt; &amp;lt; 20 ? 0 : 1;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Consider PersonInformation class above. We wanted to decouple it from Person class and make it store Name and Age itself. However, we had a lot of usages like in Processor.Process, where Person property was being used to access Name and Age. How would we do it?&lt;br /&gt;&lt;br /&gt;First, we use Generate (Alt-Ins) and select Delegating Members to generate Name and Age properties in PersonInformation class:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; &lt;span style="color: #010001;"&gt;Name&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: #010001;"&gt;myPerson&lt;/span&gt;.&lt;span style="color: #010001;"&gt;Name&lt;/span&gt;; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;set&lt;/span&gt; { &lt;span style="color: #010001;"&gt;myPerson&lt;/span&gt;.&lt;span style="color: #010001;"&gt;Name&lt;/span&gt; = &lt;span style="color: blue;"&gt;value&lt;/span&gt;; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; &lt;span style="color: #010001;"&gt;Age&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: #010001;"&gt;myPerson&lt;/span&gt;.&lt;span style="color: #010001;"&gt;Age&lt;/span&gt;; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;set&lt;/span&gt; { &lt;span style="color: #010001;"&gt;myPerson&lt;/span&gt;.&lt;span style="color: #010001;"&gt;Age&lt;/span&gt; = &lt;span style="color: blue;"&gt;value&lt;/span&gt;; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Then we change Person Property to return PersonInformation instead. Since there are all required properties already, usages are not broken. They are now routed through delegating members and use Name and Age properties of PersonInformation:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;PersonInformation&lt;/span&gt; &lt;span style="color: #010001;"&gt;Person&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;this&lt;/span&gt;; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;And here magic happens, we use Inline Property refactoring to get rid of the property!&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Person&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; &lt;span style="color: #010001;"&gt;Name&lt;/span&gt; { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; &lt;span style="color: #010001;"&gt;Age&lt;/span&gt; { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;PersonInformation&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;readonly&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Person&lt;/span&gt; &lt;span style="color: #010001;"&gt;myPerson&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #010001;"&gt;PersonInformation&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;Person&lt;/span&gt; &lt;span style="color: #010001;"&gt;person&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #010001;"&gt;myPerson&lt;/span&gt; = &lt;span style="color: #010001;"&gt;person&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; &lt;span style="color: #010001;"&gt;Name&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: #010001;"&gt;myPerson&lt;/span&gt;.&lt;span style="color: #010001;"&gt;Name&lt;/span&gt;; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;set&lt;/span&gt; { &lt;span style="color: #010001;"&gt;myPerson&lt;/span&gt;.&lt;span style="color: #010001;"&gt;Name&lt;/span&gt; = &lt;span style="color: blue;"&gt;value&lt;/span&gt;; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; &lt;span style="color: #010001;"&gt;Age&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: #010001;"&gt;myPerson&lt;/span&gt;.&lt;span style="color: #010001;"&gt;Age&lt;/span&gt;; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;set&lt;/span&gt; { &lt;span style="color: #010001;"&gt;myPerson&lt;/span&gt;.&lt;span style="color: #010001;"&gt;Age&lt;/span&gt; = &lt;span style="color: blue;"&gt;value&lt;/span&gt;; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &lt;span style="color: blue;"&gt;internal&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Processor&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;readonly&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;PersonInformation&lt;/span&gt; &lt;span style="color: #010001;"&gt;myPersonInformation&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #010001;"&gt;Processor&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;PersonInformation&lt;/span&gt; &lt;span style="color: #010001;"&gt;personInformation&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #010001;"&gt;myPersonInformation&lt;/span&gt; = &lt;span style="color: #010001;"&gt;personInformation&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; &lt;span style="color: #010001;"&gt;Process&lt;/span&gt;()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;switch&lt;/span&gt; (&lt;span style="color: #010001;"&gt;myPersonInformation&lt;/span&gt;.&lt;span style="color: #010001;"&gt;Name&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;case&lt;/span&gt; &lt;span style="color: #a31515;"&gt;"Mike"&lt;/span&gt;:&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; 1;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;case&lt;/span&gt; &lt;span style="color: #a31515;"&gt;"Sally"&lt;/span&gt;:&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: #010001;"&gt;myPersonInformation&lt;/span&gt;.&lt;span style="color: #010001;"&gt;Age&lt;/span&gt; &amp;gt; 30 ? 2 : 3;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: #010001;"&gt;myPersonInformation&lt;/span&gt;.&lt;span style="color: #010001;"&gt;Age&lt;/span&gt; &amp;lt; 20 ? 0 : 1;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Look how Processor now uses Name and Age directly on PersonInformation class and has no idea about Person class used inside! Now the fact that PersonInformation uses Person is implementation detail and we can change it any way we like. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Refactor With Pleasure!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-8308791310715688122?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/8308791310715688122/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=8308791310715688122' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/8308791310715688122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/8308791310715688122'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2008/10/resharper-combos-breaking-aggregation.html' title='ReSharper Combos - Hiding Details'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-6840128924276181295</id><published>2008-10-03T10:55:00.011+04:00</published><updated>2008-10-03T17:54:15.710+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='about'/><category scheme='http://www.blogger.com/atom/ns#' term='features'/><category scheme='http://www.blogger.com/atom/ns#' term='guidelines'/><title type='text'>ReSharper Guidelines -- First Time Users</title><content type='html'>Harry L. wrote in review of ReSharper on &lt;a href="http://visualstudiogallery.com/ExtensionDetails.aspx?ExtensionID=ea4ac039-1b5c-4d11-804e-9bede2e63ecf&amp;amp;tab=review&amp;amp;sort=3"&gt;Visual Studio Gallery&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;... I have found that I used the features of Resharper almost without knowing it. What amazed me was how many features I use without going up a long learning curve... &lt;/blockquote&gt;&lt;br /&gt;Indeed, most important ReSharper features can be instantly learned right from the code editor without reading any documentation. However, I thought that having some guidelines about where to look and how to improve own productivity would be nice anyway. So I'm going to write several posts about how to use ReSharper in a form of &lt;strong&gt;guidelines&lt;/strong&gt;. &lt;br /&gt;&lt;br /&gt;&lt;small&gt;&lt;em&gt;Shortcuts are given for Visual Studio keyboard scheme, but you can easily find shortcuts for your configuration in ReSharper menu.&lt;/em&gt; &lt;/small&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;First Time Users&lt;/strong&gt; guidelines:    &lt;br /&gt; &lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt; &lt;strong&gt;&lt;span style="color:#006600;"&gt;DO&lt;/span&gt;&lt;/strong&gt; open your real project in Visual Studio with ReSharper enabled. Playing with the productivity tool in a sandbox doesn't really give you understanding about its effect. It can take some time for ReSharper to analyze your solution for the first time, but it will be much faster during subsequent runs.&lt;br /&gt;&lt;br /&gt;&lt;li&gt; &lt;strong&gt;&lt;span style="color:#990000;"&gt;DO NOT&lt;/span&gt;&lt;/strong&gt; run away from your Visual Studio when you first open your source code with ReSharper :) You will see colored identifiers, a lot of squiggles indicating warnings and suggestions, redundant code painted in gray -- your code most likely will be overhighlighted. You will clean it up pretty fast with ReSharper. You can switch &lt;em&gt;Color Identifiers&lt;/em&gt; off if you wish (ReSharper / Options / Code Inspection / Settings).&lt;br /&gt;&lt;br /&gt;&lt;li&gt; &lt;strong&gt;&lt;span style="color:#006600;"&gt;DO&lt;/span&gt;&lt;/strong&gt; configure your naming (ReSharper / Options / Languages / Common / Naming Style) and formatting preferences (ReSharper / Options / Languages / C# / Formatting Style). ReSharper uses these settings when guessing on identifiers, while updating the code and doing other automatic code generation and transformation for you. &lt;br /&gt;&lt;br /&gt;&lt;li&gt; &lt;strong&gt;&lt;span style="color:#006600;"&gt;DO&lt;/span&gt;&lt;/strong&gt; learn 4 keyboard shortcuts to use in code editor:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt; &lt;strong&gt;Alt-Enter&lt;/strong&gt; - opens code transformation menu with &lt;em&gt;Quick Fixes&lt;/em&gt; and &lt;em&gt;Context Actions&lt;/em&gt;. Try it whenever you see light bulb to the left of your code, and see what you can do with it. &lt;br /&gt;&lt;li&gt; &lt;strong&gt;Alt-`&lt;/strong&gt; (Navigate from Here) to open menu with actions to navigate from currently selected symbol, like "Go to base", "Go to derived" and "Go to usages"&lt;br /&gt;&lt;li&gt; &lt;strong&gt;Alt-Ins&lt;/strong&gt; (Generate) -- generates type members, like properties, constructors, overrides and implementations, Equals, GetHashCode and ToString methods. &lt;br /&gt;&lt;li&gt; &lt;strong&gt;Ctrl-Shift-R&lt;/strong&gt; (Refactor This) -- opens menu with all refactorings available at current caret position (or current selection in any ReSharper tool window). &lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;li&gt; &lt;strong&gt;&lt;span style="color:#990000;"&gt;DO NOT&lt;/span&gt;&lt;/strong&gt; use Solution Explorer to find code, use "Go to Type" (Ctrl-T), "Go to File" (Ctrl-Shift-T), "Recent Files" (Ctrl-,) and other commands from ReSharper / Go To menu. This will help you navigate much faster.&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;After you familiarize yourself with these basic actions, &lt;a href="http://www.jetbrains.com/resharper/documentation/index.html"&gt;download&lt;/a&gt; and print key map and start exploring other commands.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-6840128924276181295?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/6840128924276181295/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=6840128924276181295' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/6840128924276181295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/6840128924276181295'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2008/10/resharper-guidelines-first-time-users.html' title='ReSharper Guidelines -- First Time Users'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-7935854201937314773</id><published>2008-08-13T17:56:00.000+04:00</published><updated>2008-08-13T17:00:07.452+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='features'/><title type='text'>ReSharper Combos -- Refactoring To Components</title><content type='html'>ReSharper has a number of features which are powerful by themselves, but reveal even more coolness when combined with other features. It's like Kung-Fu, when master can outperform enemies by wisely combining basic movements and strikes.&lt;br /&gt;&lt;br /&gt;Let's take for example a task of converting existing system, where all types are instantiated explicitly, to some &lt;em&gt;component container&lt;/em&gt; system. Without ReSharper, this task is &lt;span style="color:#cc0000;"&gt;SCARY&lt;/span&gt;! Just imagine, going through hundreds or even thousands of files, checking where particular component is used, where instance is created and how passed to clients and manually updating all that code. Days or weeks to complete? No, we aren't going to do this...&lt;br /&gt;&lt;br /&gt;With ReSharper the task is still not simple one, but it can be achieved in a reasonable amount of time. Here is simple example:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;TheManager&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; &lt;span style="color: #010001;"&gt;Manage&lt;/span&gt;(&lt;span style="color: blue;"&gt;string&lt;/span&gt; &lt;span style="color: #010001;"&gt;text&lt;/span&gt;) {&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;TheProcessor&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;readonly&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;TheManager&lt;/span&gt; &lt;span style="color: #010001;"&gt;myManager&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #010001;"&gt;TheProcessor&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;TheManager&lt;/span&gt; &lt;span style="color: #010001;"&gt;manager&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #010001;"&gt;myManager&lt;/span&gt; = &lt;span style="color: #010001;"&gt;manager&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; &lt;span style="color: #010001;"&gt;Process&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt; &lt;span style="color: #010001;"&gt;texts&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; &lt;span style="color: #010001;"&gt;text&lt;/span&gt; &lt;span style="color: blue;"&gt;in&lt;/span&gt; &lt;span style="color: #010001;"&gt;texts&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #010001;"&gt;myManager&lt;/span&gt;.&lt;span style="color: #010001;"&gt;Manage&lt;/span&gt;(&lt;span style="color: #010001;"&gt;text&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &lt;span style="color: blue;"&gt;internal&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Program&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; &lt;span style="color: #010001;"&gt;Main&lt;/span&gt;(&lt;span style="color: blue;"&gt;string&lt;/span&gt;[] &lt;span style="color: #010001;"&gt;args&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; &lt;span style="color: #010001;"&gt;processor&lt;/span&gt; = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;TheProcessor&lt;/span&gt;(&lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;TheManager&lt;/span&gt;());&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #010001;"&gt;processor&lt;/span&gt;.&lt;span style="color: #010001;"&gt;Process&lt;/span&gt;(&lt;span style="color: #010001;"&gt;args&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Now let's make it utilize some fictional ComponentContainer:&lt;br /&gt;&lt;br /&gt;1. Create temporary static class ComponentFactory to put factory methods in &lt;br /&gt;2. Execute &lt;strong&gt;Replace constructor with factory method&lt;/strong&gt; refactoring against component constructor, specify ComponentFactory as containing type.&lt;br /&gt;3. Use &lt;strong&gt;Extract Interface&lt;/strong&gt; refactoring from the component implementation. &lt;br /&gt;4. Utilize &lt;strong&gt;Use base type where possible&lt;/strong&gt; refactoring, select extracted interface. This should update all usages from specific class to interface. &lt;br /&gt;5. &lt;strong&gt;Find Usages&lt;/strong&gt; of component and verify you don't have any references to the class except instantiation inside ComponentFactory. Having other references mean interface was not complete, or there are dependencies on component implementation. Refactor as needed.&lt;br /&gt;&lt;br /&gt;Now you should have something like this:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ComponentFactory&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ITheManager&lt;/span&gt; &lt;span style="color: #010001;"&gt;CreateTheManager&lt;/span&gt;()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;TheManager&lt;/span&gt;();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;interface&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ITheManager&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;void&lt;/span&gt; &lt;span style="color: #010001;"&gt;Manage&lt;/span&gt;(&lt;span style="color: blue;"&gt;string&lt;/span&gt; &lt;span style="color: #010001;"&gt;text&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;TheManager&lt;/span&gt; : &lt;span style="color: #2b91af;"&gt;ITheManager&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; &lt;span style="color: #010001;"&gt;Manage&lt;/span&gt;(&lt;span style="color: blue;"&gt;string&lt;/span&gt; &lt;span style="color: #010001;"&gt;text&lt;/span&gt;) { }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;TheProcessor&lt;/span&gt; &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;readonly&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ITheManager&lt;/span&gt; &lt;span style="color: #010001;"&gt;myManager&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #010001;"&gt;TheProcessor&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;ITheManager&lt;/span&gt; &lt;span style="color: #010001;"&gt;manager&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #010001;"&gt;myManager&lt;/span&gt; = &lt;span style="color: #010001;"&gt;manager&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; &lt;span style="color: #010001;"&gt;Process&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt; &lt;span style="color: #010001;"&gt;texts&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; &lt;span style="color: #010001;"&gt;text&lt;/span&gt; &lt;span style="color: blue;"&gt;in&lt;/span&gt; &lt;span style="color: #010001;"&gt;texts&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #010001;"&gt;myManager&lt;/span&gt;.&lt;span style="color: #010001;"&gt;Manage&lt;/span&gt;(&lt;span style="color: #010001;"&gt;text&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &lt;span style="color: blue;"&gt;internal&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Program&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; &lt;span style="color: #010001;"&gt;Main&lt;/span&gt;(&lt;span style="color: blue;"&gt;string&lt;/span&gt;[] &lt;span style="color: #010001;"&gt;args&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; &lt;span style="color: #010001;"&gt;processor&lt;/span&gt; = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;TheProcessor&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;ComponentFactory&lt;/span&gt;.&lt;span style="color: #010001;"&gt;CreateTheManager&lt;/span&gt;());&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #010001;"&gt;processor&lt;/span&gt;.&lt;span style="color: #010001;"&gt;Process&lt;/span&gt;(&lt;span style="color: #010001;"&gt;args&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Note, how TheProcessor now uses ITheManager interface instead of specific implementation. &lt;br /&gt;&lt;br /&gt;What you do next depends on what framework for components you are going to use. If you plan to use one of the Dependency Injection frameworks out there, you will continue with other components (TheProcessor in our example) and let framework inject ITheManager dependency into constructor. If you are going to use component querying system, you will update component constructor to use factory method instead of parameters, and use &lt;strong&gt;Safe Delete&lt;/strong&gt; on parameters to remove them and update usages.&lt;br /&gt;&lt;br /&gt;After you finish with refactoring all component access to ComponentFactory static class, you can change the implementation of factory methods to query your component framework of choice. &lt;br /&gt;&lt;br /&gt;Finally, you are ready for the last strike to finish it off: use &lt;strong&gt;Inline Method&lt;/strong&gt; refactoring to get rid of temporary factory methods and finish conversion of your code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-7935854201937314773?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/7935854201937314773/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=7935854201937314773' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/7935854201937314773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/7935854201937314773'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2008/06/resharper-combos-refactoring-to.html' title='ReSharper Combos -- Refactoring To Components'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-5343985719349315813</id><published>2008-07-29T20:34:00.007+04:00</published><updated>2008-08-12T19:41:43.858+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='features'/><category scheme='http://www.blogger.com/atom/ns#' term='plans'/><title type='text'>What's Next? -- Life After Release</title><content type='html'>We released ReSharper 4 in June and I didn't post since then. First, I was on vacation and it was great. Then, our team left the city to spend 4 full days discussing ReSharper future, inventing new features, building plans and coordinating efforts. Awesome experience, I must say. After that, we focused on preparing maintenance release 4.0.1 which will be out as soon as we verify it against recently released Visual Studio 2008 SP1. Now we are starting to work towards 4.5 release, which is tentatively planned to be released by the end of the year, or may be at the beginning of year 2009. So, what are we going to do?&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Please note, that it is preliminary plan only and is subject to change at any time.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;1. More performance&lt;br /&gt;2. Less memory usage&lt;br /&gt;&lt;br /&gt;Yes, we are going to spend about four months tackling performance and memory issues, optimizing various parts of our product and improving architecture to prepare for the next major step forward. &lt;br /&gt;&lt;br /&gt;In addition to the overall product quality improvement, we are going to improve some existing features, based on your feedback, and add some new. &lt;br /&gt;&lt;br /&gt;3. New refactorings are being developed, which will allow you to perform more intelligent solution-wide code transformation. We didn't finalize the list yet, but most likely they will be from "Inline" family. &lt;br /&gt;&lt;br /&gt;4. Enhanced setup for naming conventions which will be supported by all ReSharper features. We are not going to implement all functionality of the &lt;a href="http://www.agentsmithplugin.com/"&gt;AgentSmith plugin&lt;/a&gt;, but we want to stop naming issues experienced by some of ReSharper users once and for all.&lt;br /&gt;&lt;br /&gt;5. Visual Build - new feature to display build process inside Visual Studio in a better way. Think "Unit Test Session" style, but for building your solution. This feature will also lay the foundation for future features, like optimizing build procedure.&lt;br /&gt;&lt;br /&gt;6. Visual Basic 9 support. Our cross-language refactorings and editing experience enhancements will fully support VB9 constructs, like anonymous functions and XML literals. &lt;br /&gt;&lt;br /&gt;As usual, once we perform all potentially dangerous changes to our code base and stabilize the build, we will start publishing nightly builds for your Early Access Pleasure.&lt;br /&gt;&lt;br /&gt;PS: If you didn't express your opinion about ReSharper 4 on &lt;a href="http://visualstudiogallery.com/ExtensionDetails.aspx?ExtensionID=ea4ac039-1b5c-4d11-804e-9bede2e63ecf"&gt;Visual Studio Gallery&lt;/a&gt;, you can let other people know what do you think via rating and review functionality recently added to this site.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-5343985719349315813?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/5343985719349315813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=5343985719349315813' title='42 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/5343985719349315813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/5343985719349315813'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2008/07/whats-next-life-after-release.html' title='What&apos;s Next? -- Life After Release'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>42</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-3521467629333847052</id><published>2008-06-09T20:18:00.006+04:00</published><updated>2008-06-10T01:31:02.044+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='release'/><title type='text'>ReSharper 4.0 Gone Diamond</title><content type='html'>Here it is, &lt;a href="http://www.jetbrains.com/resharper/"&gt;ReSharper 4.0&lt;/a&gt;. After faceting our diamond, we are finally ready to release it!&lt;br /&gt;&lt;br /&gt;In this new release, &lt;strong&gt;C# 3.0&lt;/strong&gt; is supported in all its power -- lambdas, extension methods, language integrated queries (aka LINQ), object and collection initializers, anonymous types, automatic properties and partial methods. Ah, of course implicitly typed locals ("vars") are there to argue for or against using them. I already wrote about some of the features, and you can find more information on the &lt;a href="http://www.jetbrains.com/resharper/features/newfeatures.html"&gt;New Features&lt;/a&gt; page. Here is small final touch about how deeeeep we dived into the language: try introducing parameter from expression which uses local variables and play with checkboxes for local variables. &lt;br /&gt;&lt;br /&gt;Except for new language support, we also improved our product in many other ways: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;We added &lt;strong&gt;new &lt;/strong&gt;powerful &lt;strong&gt;refactorings &lt;/strong&gt;and greatly improved existing.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;We extended typing helpers with &lt;strong&gt;CamelCase completion &lt;/strong&gt;and &lt;strong&gt;Complete Statement&lt;/strong&gt;. Now you can achieve more in less time.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;We analysed many .NET Framework assemblies for you, and maked them up for you with CanBeNull/NotNull attributes. And ReSharper's value analysis raised to the next level.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;We tested it with numerious other addons, plugins, SDKs and packages. And &lt;strong&gt;improved &lt;/strong&gt;ReSharper's &lt;strong&gt;integration &lt;/strong&gt;into Visual Studio ecosystem by a wonderful degree.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Of course we fixed a lot of problems and eliminated many performance bottlenecks.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;I can't really enumerate all the improvements in ReSharper 4.0 made during last year. It would take too much space on this blog. &lt;a href="http://www.jetbrains.com/resharper/download/index.html"&gt;Try it yourself&lt;/a&gt;! Feel the difference!&lt;br /&gt;&lt;br /&gt;&lt;em&gt;develop.With(pleasure =&gt; pleasure * 4.0);&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-3521467629333847052?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/3521467629333847052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=3521467629333847052' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/3521467629333847052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/3521467629333847052'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2008/06/resharper-40-gone-diamond.html' title='ReSharper 4.0 Gone Diamond'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-2345462118294274916</id><published>2008-06-03T16:32:00.003+04:00</published><updated>2008-06-03T17:55:51.807+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='release'/><title type='text'>ReSharper 4.0 Release Candidate</title><content type='html'>After extensive testing and fixing problems in Beta we are ready to publish &lt;a href="http://www.jetbrains.com/resharper/beta/beta.html"&gt;Release Candidate&lt;/a&gt; build. Some critical fixes can still happen in this branch, but otherwise we are almost ready to release. &lt;br /&gt;&lt;br /&gt;If you are using any nightly build or beta, please upgrade to Release Candidate. If by chance you find a problem that prevents ReSharper 4 from being used on a regular basis, please tell us! You can submit request into our &lt;a href="http://jetbrains.net/jira/browse/RSRP"&gt;issue tracking system&lt;/a&gt;, and we will try hard to fix any critical problem, if we can reproduce it. So &lt;strong&gt;please, please, please&lt;/strong&gt;, include as much information about your environment, projects and source files as you can. &lt;br /&gt;&lt;br /&gt;Thank you very much for participating in our Early Access Program!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-2345462118294274916?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/2345462118294274916/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=2345462118294274916' title='16 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/2345462118294274916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/2345462118294274916'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2008/06/resharper-40-release-candidate.html' title='ReSharper 4.0 Release Candidate'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-1240725242849093001</id><published>2008-05-26T22:01:00.003+04:00</published><updated>2008-05-26T22:12:40.008+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='features'/><category scheme='http://www.blogger.com/atom/ns#' term='C# 3.0'/><title type='text'>Functional Style -- Highlight Mutable Variables</title><content type='html'>Once you go for lambdas, lazy computations and other functional techniques in programming, you may want your code to be mostly &lt;a href="http://en.wikipedia.org/wiki/Immutable_object"&gt;immutable&lt;/a&gt;. With ReSharper 4 we didn't do much about data analysis, like do not detect immutable objects or methods. However, one analysis is already available to you: &lt;strong&gt;highlight mutable local variables&lt;/strong&gt;. Open &lt;em&gt;Tools&lt;/em&gt; menu, select &lt;em&gt;Options&lt;/em&gt;, browse for &lt;em&gt;Fonts and Colors&lt;/em&gt; under &lt;em&gt;Environment&lt;/em&gt; group. In the &lt;em&gt;Display items&lt;/em&gt; find &lt;strong&gt;ReSharper Mutable Local Variable&lt;/strong&gt; and change the appearance as you like. I use Bold font. ReSharper will now highlight every variable that changes its value after the value has been already used. &lt;br /&gt;&lt;br /&gt;Try it, and tell us what do you think!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-1240725242849093001?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/1240725242849093001/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=1240725242849093001' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/1240725242849093001'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/1240725242849093001'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2008/05/functional-style-highlight-mutable.html' title='Functional Style -- Highlight Mutable Variables'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-8158324722453954807</id><published>2008-05-21T16:34:00.010+04:00</published><updated>2008-05-21T19:20:16.925+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='features'/><category scheme='http://www.blogger.com/atom/ns#' term='release'/><category scheme='http://www.blogger.com/atom/ns#' term='C# 3.0'/><title type='text'>ReSharper 4 Beta</title><content type='html'>Did you use one of the nightly builds we publish for several months already? If you thought it is dangerous for you to run early development bits, today we present you &lt;a href="http://www.jetbrains.com/resharper/beta/beta.html"&gt;&lt;strong&gt;ReSharper 4 Beta&lt;/strong&gt;&lt;/a&gt;, which we optimized, stabilized and verified to be of better quality than ordinary nightlies. It is not complete product yet, we have some more work to do in various areas of product, but otherwise this build is pretty stable and usable.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#990000;"&gt;C# 3.0&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;This major language update was not an easy thing to support. It was tough to make it right, when tool knows the code inside out and understands every detail of what is written. There are many little things that you probably will not even notice, but which were well thought out and implemented to provide flawless code editing, navigating and refactoring experience. &lt;br /&gt;&lt;br /&gt;I'd like to highlight some features: global completion for extension methods, which inserts required namespace imports; optional parameter info in form of lambda, like "IEnumerable&amp;lt;string&amp;gt; =&gt; string" instead of Func&amp;lt;IEnumerable&amp;lt;string&amp;gt;,string&amp;gt;; refactorings specific to new language features, like creating named type from anonymous one or converting static method to extension method and updating usages. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#990000;"&gt;.NET Framework Annotations&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Since version 2.5 we have "Null Reference Analysis", which is capable to warn developer about potential NullReferenceException in the code. To aid this analysis, developers can annotate methods with NotNull or CanBeNull attributes, which ReSharper then uses to initialize variable states. That's cool enough by itself, but there are thousands of methods you can't annotate in source: the .NET Framework assemblies. We took up a challenge and implemented the way to annotate libraries with external annotations. And we made second step, too. We annotated most of .NET Framework (56 assemblies!), so that you can get potential NullReferenceException warning on the code like (SomeStruct)Marshal.PtrToStructure(...);&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#990000;"&gt;Completion-on-steroids&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;That's something I like most. No, wait, I love new refactorings, recent edits window, to-do browser understanding of NotImplementedException, and all &lt;a href="http://www.jetbrains.com/resharper/beta/beta_newfeatures.html"&gt;other features&lt;/a&gt; mentioned on the official site.&lt;br /&gt;&lt;br /&gt;Two things: "CamelHumps Completion" and "Complete Statement" bring my coding speed to a new level. I don't know what it would be called in Jedi hierarchy, but it seems to me that I can create code with &lt;strike&gt;lightning&lt;/strike&gt; teleportation speed. &lt;br /&gt;&lt;pre&gt;if(CVM.I.SV(SCV.FU &lt;em&gt;&amp;lt;Ctrl-Shift-Enter&amp;gt;&lt;/em&gt;&lt;/pre&gt;When I hit keys like above, it is completed into:&lt;br /&gt;&lt;pre&gt;if (CodeViewManager.Instance.SupportsView(StandardCodeViews.FindUsages))&lt;br /&gt;{&lt;br /&gt;}&lt;/pre&gt;And caret is inside braces for me to type in the body of the "if" statement.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#990000;"&gt;ASP.NET speed-up&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;The last, but not least thing I'd like to mention is our raid against ASP.NET problems. It is something that had speed and memory problems through all versions of ReSharper, and we finally managed to identify them, and fix. Now, if you develop ASP.NET web sites, go try ReSharper 4 Beta. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#990000;"&gt;Download&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;In this release we bring you the single installer for both Visual Studio 2005 and 2008, as well as all editions we have. &lt;a href="http://www.jetbrains.com/resharper/beta/beta.html"&gt;Download&lt;/a&gt;, install, select "Free Evaluation", choose edition - and you are ready to be productive.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-8158324722453954807?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/8158324722453954807/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=8158324722453954807' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/8158324722453954807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/8158324722453954807'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2008/05/resharper-4-beta.html' title='ReSharper 4 Beta'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-2733162576809375959</id><published>2008-04-08T13:53:00.004+04:00</published><updated>2008-04-08T18:36:03.564+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plugins'/><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><title type='text'>Extending the Extension -- ReSharper Plug-Ins</title><content type='html'>ReSharper, the ultimate productivity tool for Visual Studio, is not just pre-packaged set of features. ReSharper provides rich platform for intelligent extensions, which can read and modify code and provide even more productivity features to you. I thought I would compile list of known public plugins. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href="http://www.jetbrains.net/confluence/display/ReSharper/PowerToys+Pack+3.0+User+Guide"&gt;ReSharper PowerToys&lt;/a&gt;&lt;/strong&gt; - cyclomatic complexity analysis, explore type interface, find text, generate ToString, csUnit support. &lt;em&gt;Open Source&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href="http://www.safedevelop.com/"&gt;RGreatEx&lt;/a&gt;&lt;/strong&gt; - resource refactoring and string manipulation. &lt;em&gt;Commercial&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href="http://code.google.com/p/mbunit-resharper/"&gt;MbUnit&lt;/a&gt;&lt;/strong&gt; - support for MbUnit tests in ReSharper Unit Testing subsystem. &lt;em&gt;Open Source&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href="&lt;br /&gt;http://www.codeplex.com/xunit/Wiki/View.aspx?title=HowToUseResharper&amp;referringTitle=Home"&gt;xUnit&lt;/a&gt;&lt;/strong&gt; - support for xUnit tests in ReSharper Unit Testing subsystem. &lt;em&gt;Open Source&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href="http://exceptionz.wordpress.com/2007/04/20/resharper-unittestsupport-add-in-for-nspecify/"&gt;NSpecify&lt;/a&gt;&lt;/strong&gt; - support for NSpecify in ReSharper Unit Testing subsystem. &lt;em&gt;Open Source&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href="http://www.agentsmithplugin.com/"&gt;Agent Smith&lt;/a&gt;&lt;/strong&gt; - naming convention validation, spell checking, xml-comments validation, smart paste. &lt;em&gt;Open Source&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href="http://code.google.com/p/agentjohnsonplugin/"&gt;Agent Johnson&lt;/a&gt;&lt;/strong&gt; - documents exceptions, batch-annotate with NotNull/CanBeNull, favorite files. &lt;em&gt;Open Source&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href="http://scb.udsu.ru/~achmed/arp/trac/wiki"&gt;ARP&lt;/a&gt;&lt;/strong&gt; - log4net and NHibernate support. &lt;em&gt;Open Source&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href="http://www.lieser-online.de/blog/?p=78"&gt;Stefan Lieser’s NHibernate plugin&lt;/a&gt;&lt;/strong&gt; - NHibernate support. &lt;em&gt;Free&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href="http://code.google.com/p/scoutplugin/"&gt;Scout&lt;/a&gt;&lt;/strong&gt; - navigate to .NET Framework Reference Source. &lt;em&gt;Open Source&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you know any other public plugins to ReSharper, let us know!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-2733162576809375959?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/2733162576809375959/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=2733162576809375959' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/2733162576809375959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/2733162576809375959'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2008/04/extending-extension-resharper-plug-ins.html' title='Extending the Extension -- ReSharper Plug-Ins'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-5925864977255326862</id><published>2008-04-02T16:06:00.002+04:00</published><updated>2008-04-02T16:10:54.507+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='communication'/><title type='text'>We Read You, Anonymous</title><content type='html'>9 minutes ago I've received the following from anonymous user of our uninstall feedback form:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;I am uninstalling ReSharper because my licencse is only for C# :)&lt;br /&gt;Reinstall is waiting for me, so i can't lose my time typing some unuseful text that won't be read anyway.&lt;br /&gt;&lt;br /&gt;Have a good time, JetBrains Server! &lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Thank you, Anonymous, I will pass this to our administrators so they can decide which server to route information to :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-5925864977255326862?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/5925864977255326862/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=5925864977255326862' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/5925864977255326862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/5925864977255326862'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2008/04/we-read-you-anonymous.html' title='We Read You, Anonymous'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-5484077475653816278</id><published>2008-03-24T16:26:00.003+03:00</published><updated>2008-03-24T16:31:05.664+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plugins'/><title type='text'>MbUnit for ReSharper 4</title><content type='html'>&lt;a href="http://der-albert.com/"&gt;Albert Weinert&lt;/a&gt; ported MbUnit plugin to ReSharper 4 API, so you can try it with latest ReSharper 4 &lt;a href="http://www.jetbrains.net/confluence/display/ReSharper/ReSharper+4.0+Nightly+Builds"&gt;nightly builds&lt;/a&gt;. &lt;a href="http://der-albert.com/archive/2008/03/24/mbunit-plugin-for-r-4.0-available.aspx"&gt;Read more&lt;/a&gt; and download Beta 7.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-5484077475653816278?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/5484077475653816278/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=5484077475653816278' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/5484077475653816278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/5484077475653816278'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2008/03/mbunit-for-resharper-4.html' title='MbUnit for ReSharper 4'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-3724570450969566534</id><published>2008-03-04T12:58:00.009+03:00</published><updated>2008-03-04T14:41:39.729+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='languages'/><title type='text'>Varification -- Using Implicitly Typed Locals</title><content type='html'>With the &lt;a href="http://resharper.blogspot.com/2008/02/resharper-4-nightly-builds-are-you-geek.html"&gt;ReSharper 4 nightly builds&lt;/a&gt; available, some people are complaining about numerious suggestions to convert explicit type to "var" keyword. Of course, you can hide this suggestion by using Options / Code Inspection / Inspection Severity, or by using Alt-Enter and selecting "Change severity" option. But what's the deal with implicitly typed locals, anyway? &lt;strong&gt;Using var keyword can significantly improve your code&lt;/strong&gt;, not just save you some typing. However, it may require discipline to apply good practices when using implicitly typed variables. Here is my list:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;It is required to express variables of anonymous type&lt;/strong&gt;. This is pretty obvious - you cannot declare local variable of anonymous type without using var. &lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;It induces better naming for local variables&lt;/strong&gt;. When you read local variable declaration with explicit type, you have more information at that moment and something like "IUnitTestElement current" makes sense. However, when this local variable is used later, you read "current" which takes some time to figure out the meaning. Using "var currentElement" makes it easier to read at any place. &lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;It induces better API&lt;/strong&gt;. When you let compiler deduce type from method return type or property type, you have to have good types in the first place. When you don't have explicit type in the initialization expression, you have to have best names for members. &lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;It induces variable initialization&lt;/strong&gt;. It is generally a good practice to initialize variable in the declaration, and compiler needs initializer to infer type for local variable declared with "var" keyword.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;It removes code noise&lt;/strong&gt;. There are a lot of cases, when implicitly typed local will reduce amount of text developer needs to read, or rather skip. Declaring local variable from new object expression or cast expression requires specifying type twice, if we don't use "var". With generics it can lead to a lot of otherwise redundant code. Another example would be iteration variable in foreach over Dictionary&amp;lt;TKey,TValue&amp;gt;. &lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;It doesn't require using directive&lt;/strong&gt;. With var, you don't have explicit reference to type, as compiler infers type for you, so you don't need to import namespace when you need a temporary variable.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;To summarize the list above, by actively using var keyword and refactoring your code as needed you &lt;strong&gt;improve the way your code speaks for itself&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;PS: Visit &lt;a href="http://visualstudiogallery.com/ExtensionDetails.aspx?ExtensionId=ea4ac039-1b5c-4d11-804e-9bede2e63ecf" onclick="javascript:urchinTracker('/outgoing/vsgallery');" &gt;ReSharper at Visual Studio Gallery&lt;/a&gt;!&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-3724570450969566534?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/3724570450969566534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=3724570450969566534' title='45 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/3724570450969566534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/3724570450969566534'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2008/03/varification-using-implicitly-typed.html' title='Varification -- Using Implicitly Typed Locals'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>45</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-5987418522943883038</id><published>2008-02-20T21:00:00.002+03:00</published><updated>2008-02-20T21:06:14.568+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visual studio'/><category scheme='http://www.blogger.com/atom/ns#' term='features'/><category scheme='http://www.blogger.com/atom/ns#' term='configuration'/><title type='text'>Visual Studio 2005 and ReSharper 4 Nightly Builds</title><content type='html'>ReSharper 4 should work with Visual Studio 2005, and it will support C# 2.0 language features. If you happen to participate in our early access program, and you are using Visual Studio 2005, please note that you have to have &lt;strong&gt;.NET Framework 3.5&lt;/strong&gt; installed.&lt;br /&gt;&lt;br /&gt;Also, we would be happy if you were reporting any features that belong to C# 3.0 but appear in Visual Studio 2005, like suggestions for lambdas or var. Please read information about our &lt;a href="http://www.jetbrains.net/confluence/display/ReSharper/ReSharper+Issue+Tracker"&gt;issue tracker&lt;/a&gt; beforehand. &lt;br /&gt;&lt;br /&gt;Thank you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-5987418522943883038?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/5987418522943883038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=5987418522943883038' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/5987418522943883038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/5987418522943883038'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2008/02/visual-studio-2005-and-resharper-4.html' title='Visual Studio 2005 and ReSharper 4 Nightly Builds'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-5866101435720320851</id><published>2008-02-18T18:49:00.004+03:00</published><updated>2008-02-18T19:30:17.094+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='about'/><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><title type='text'>Better Development Tools -- Building Together</title><content type='html'>Dear early adopters!&lt;br /&gt;&lt;br /&gt;We thank you kindly for your participation in ReSharper 4 early access program. It is going to be wonderful release for everyone, because of you. This time we receive the best response ever, and we are so excited about it! &lt;br /&gt;&lt;br /&gt;Many brave developers, who are trying ReSharper 4 early builds with Visual Studio 2008, registered in our &lt;a href="http://www.jetbrains.net/confluence/display/ReSharper/ReSharper+Issue+Tracker"&gt;issue tracker&lt;/a&gt; and provided us with detailed, specific and very important information. This is really great, because we were able to reproduce many issues that were lurking around our code base for some time now. It is very important that you registered and provide us with non-anonymous feedback: bidirectional communication is at least 16 times more effective than one way exception submitting. One sample solution which manifests the problem is 256 times better than 1024 exceptions without a comment. And it is invaluable when you submit instructions to reproduce the problem (well, at least var value = int.MaxValue). &lt;br /&gt;&lt;br /&gt;Thank you very much, we really appreciate your effort! With that kind of feedback we receive today, I believe we can build the best release of ReSharper, ever. Everybody wants better tools, right? ;)&lt;br /&gt;&lt;br /&gt;Sincerely Yours, Ilya.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-5866101435720320851?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/5866101435720320851/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=5866101435720320851' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/5866101435720320851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/5866101435720320851'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2008/02/better-development-tools-building.html' title='Better Development Tools -- Building Together'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-4168421303853939244</id><published>2008-02-14T14:52:00.009+03:00</published><updated>2008-02-15T22:40:53.114+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='release'/><category scheme='http://www.blogger.com/atom/ns#' term='events'/><title type='text'>ReSharper 4 Nightly Builds - Are You Geek Enough?</title><content type='html'>&lt;div align="right"&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;-- When ReSharper 4 will be ready?&lt;br /&gt;-- It is ready when it is ready!&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;We in ReSharper team want to make sure that C# 3.0 language is fully supported by the product. We spend a lot of time on features and look deep into details of every language quirk. You know, compilers and language standards may have very strange relationships, sometimes very weird. Still, we want to ensure maximum pleasure developing in C# 3.0 when ReSharper is ready. And it is not ready yet.&lt;br /&gt;&lt;br /&gt;However, due to the popular demand amongst professional developers using ReSharper and C# 3.0, we are going to open nightly builds to the public. That is, not fully fledged tool, but rather our current development bits. Which could be very well broken, buggy, hanging, slow and useless at times. We will not take any responsibility if the tool wipes out all your source code! But you have a version control system in place, don't you? &lt;br /&gt;&lt;br /&gt;So, &lt;strong&gt;are you geek enough&lt;/strong&gt; to take the pill and &lt;strong&gt;try ReSharper 4&lt;/strong&gt; early builds? Read the &lt;a href="http://www.jetbrains.net/confluence/display/ReSharper/ReSharper+4.0+EAP+Notes"&gt;ReSharper 4 EAP notes&lt;/a&gt; before you decide!&lt;br /&gt;&lt;br /&gt;If you feel you can survive pre-release build, you can go to &lt;a href="http://www.jetbrains.net/confluence/display/ReSharper/ReSharper+4.0+Nightly+Builds"&gt;ReSharper 4 Nightly Builds&lt;/a&gt; and download your copy of ReSharper development bits. &lt;br /&gt;&lt;br /&gt;Good luck!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-4168421303853939244?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/4168421303853939244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=4168421303853939244' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/4168421303853939244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/4168421303853939244'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2008/02/resharper-4-nightly-builds-are-you-geek.html' title='ReSharper 4 Nightly Builds - Are You Geek Enough?'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-4606786862980817937</id><published>2008-02-04T21:25:00.001+03:00</published><updated>2008-02-04T22:04:11.254+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='features'/><category scheme='http://www.blogger.com/atom/ns#' term='C# 3.0'/><title type='text'>Compiler Optimizations May Be Dangerous</title><content type='html'>Consider the following code:&lt;br /&gt;&lt;br /&gt;&lt;pre   style="font-size:10pt;color:black;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; Test&lt;br /&gt;{&lt;br /&gt;  &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; IEnumerable&amp;lt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&amp;gt; Select&amp;lt;T&amp;gt;(&lt;span style="color:blue;"&gt;this&lt;/span&gt; IEnumerable&amp;lt;T&amp;gt; list, Func&amp;lt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;, &lt;span style="color:blue;"&gt;int&lt;/span&gt;&amp;gt; f)&lt;br /&gt;  {&lt;br /&gt;    &lt;span style="color:blue;"&gt;foreach&lt;/span&gt; (var item &lt;span style="color:blue;"&gt;in&lt;/span&gt; list)&lt;br /&gt;      &lt;span style="color:blue;"&gt;yield&lt;/span&gt; &lt;span style="color:blue;"&gt;return&lt;/span&gt; f(item.GetHashCode());&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; IEnumerable&amp;lt;&lt;span style="color:blue;"&gt;bool&lt;/span&gt;&amp;gt; Where&amp;lt;T&amp;gt;(&lt;span style="color:blue;"&gt;this&lt;/span&gt; IEnumerable&amp;lt;T&amp;gt; list, Func&amp;lt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;, &lt;span style="color:blue;"&gt;bool&lt;/span&gt;&amp;gt; f)&lt;br /&gt;  {&lt;br /&gt;    &lt;span style="color:blue;"&gt;foreach&lt;/span&gt; (var item &lt;span style="color:blue;"&gt;in&lt;/span&gt; list)&lt;br /&gt;      &lt;span style="color:blue;"&gt;yield&lt;/span&gt; &lt;span style="color:blue;"&gt;return&lt;/span&gt; f(item.GetHashCode());&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; Foo(IList&amp;lt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;&amp;gt; list, IList&amp;lt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;&amp;gt; list2)&lt;br /&gt;  {&lt;br /&gt;    var lengths = from hashCode &lt;span style="color:blue;"&gt;in&lt;/span&gt; list&lt;br /&gt;                   &lt;span style="color:blue;"&gt;where&lt;/span&gt; hashCode * 2 &amp;gt; 10&lt;br /&gt;                   select hashCode;&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This code doesn't use System.Linq extensions methods to do LINQ, and instead declares own Select and Where methods, which are rather crazy. This code compiles, but what is the type of "lengths" variable? It should be IEnumerable&amp;lt;int&amp;gt;, because that is what Select method returns. But if you look at actual compilation output, it turns out that compiler decided "select hashCode" to be very simple (actually, transforms into identity lambda hashCode =&gt; hashCode). And it removes the call to Select() method. And &lt;strong&gt;&lt;span style="color:#ff0000;"&gt;breaks my code&lt;/span&gt;&lt;/strong&gt;. One can have some hard time understanding why their code doesn't work, or even doesn't compile. &lt;br /&gt;&lt;br /&gt;I can force compiler to call my Select() method by surrounding hashCode in select clause with parenthesis:&lt;br /&gt;&lt;pre   style="font-size:10pt;color:black;"&gt;&lt;br /&gt;    var lengths = from hashCode &lt;span style="color:blue;"&gt;in&lt;/span&gt; list&lt;br /&gt;                   &lt;span style="color:blue;"&gt;where&lt;/span&gt; hashCode * 2 &amp;gt; 10&lt;br /&gt;                   select (hashCode);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;It is not &lt;em&gt;trivial&lt;/em&gt; to compiler anymore, and thus it emits correct code.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;: This behaviour is by design. See 7.15.2.5 Select clauses:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;A query expression of the form&lt;br /&gt;&lt;em&gt;from x in e select v&lt;/em&gt;&lt;br /&gt;is translated into&lt;br /&gt;&lt;em&gt;( e ) . Select ( x =&gt; v )&lt;/em&gt;&lt;br /&gt;except when v is the identifier x, the translation is simply&lt;br /&gt;&lt;em&gt;( e )&lt;/em&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;I still find this very error prone...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-4606786862980817937?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/4606786862980817937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=4606786862980817937' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/4606786862980817937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/4606786862980817937'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2008/02/compiler-optimizations-may-be-dangerous.html' title='Compiler Optimizations May Be Dangerous'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-4121483909340795830</id><published>2008-01-31T19:53:00.000+03:00</published><updated>2008-01-31T19:57:08.525+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='release'/><category scheme='http://www.blogger.com/atom/ns#' term='events'/><title type='text'>ReSharper 4 EAP Will Start in Two Weeks</title><content type='html'>ReSharper 4 Early Access Program will start within next two weeks, before Feb 15.&lt;br /&gt;&lt;br /&gt;The delay is caused mostly by the complexity of lambda implementation, which we really want to do right so that the power of C# 3.0 and ReSharper can be utilized at a full rate. Now, when we have lambdas working, we will finish with LINQ processing, polish the code a bit and start nightly builds. &lt;br /&gt;&lt;br /&gt;I'm going to post some feature highlights here during that period. This will cover C# 3.0 new features support, new features like Complete Statement and Recent Edits, improvements in intellisense like CamelHumps completion and other. &lt;br /&gt;&lt;br /&gt;Stay tuned.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-4121483909340795830?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/4121483909340795830/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=4121483909340795830' title='29 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/4121483909340795830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/4121483909340795830'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2008/01/resharper-4-eap-will-start-in-two-weeks.html' title='ReSharper 4 EAP Will Start in Two Weeks'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>29</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-8097087425801705276</id><published>2008-01-25T13:19:00.000+03:00</published><updated>2008-01-25T13:28:16.211+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='features'/><title type='text'>One Line - Navigation in Parameter Information</title><content type='html'>When ReSharper's parameter information is displayed for a method, TAB and SHIFT-TAB will navigate caret through arguments you are passing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-8097087425801705276?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/8097087425801705276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=8097087425801705276' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/8097087425801705276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/8097087425801705276'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2008/01/one-line-navigation-in-parameter.html' title='One Line - Navigation in Parameter Information'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-7532295828514922621</id><published>2008-01-14T12:58:00.000+03:00</published><updated>2008-01-14T13:04:20.576+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='features'/><title type='text'>One Line - Find Usages Advanced</title><content type='html'>When you want to search for all overloads of a method, or search for type and its members usages, or search in referenced libaries in addition to source code - use Find Usages Advanced command (ReSharper | Search | Find Usages Advanced...).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-7532295828514922621?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/7532295828514922621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=7532295828514922621' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/7532295828514922621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/7532295828514922621'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2008/01/one-line-find-usages-advanced.html' title='One Line - Find Usages Advanced'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-1493440376948011585</id><published>2007-12-20T23:31:00.000+03:00</published><updated>2007-12-21T03:43:06.064+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='release'/><title type='text'>ReSharper 3.1 is Released!</title><content type='html'>We are proud to announce the release of ReSharper 3.1. The new version not only brings many bugfixes, improved stability and new features, but also provides the opportunity of free upgrade to v4.0 for new purchases.&lt;br /&gt;&lt;br /&gt;This minor - but extremely upgrade-worthy - release extends support for various technologies and languages including ASP.NET, VB.NET and XAML, and introduces the amazingly powerful Solution-Wide Analysis. The new feature lets you instantly find compilation errors in your whole solution - not just in the currently opened file.&lt;br /&gt;&lt;br /&gt;&lt;a  onClick="javascript:urchinTracker('/outgoing/resharper31/download');" href="http://www.jetbrains.com/resharper/download/index.html"&gt;Download it now&lt;/a&gt; and review &lt;a  onClick="javascript:urchinTracker('/outgoing/resharper31/releaseNotes');" href="http://www.jetbrains.com/resharper/releaseNotes31.html"&gt;release notes&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-1493440376948011585?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/1493440376948011585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=1493440376948011585' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/1493440376948011585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/1493440376948011585'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/12/resharper-31-is-released.html' title='ReSharper 3.1 is Released!'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-391889485183031320</id><published>2007-12-18T19:47:00.001+03:00</published><updated>2007-12-18T19:55:44.454+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='features'/><title type='text'>One Line - Filtering Popup Lists</title><content type='html'>When recent files list is open, you can start typing and list will get filtered to show only items which contains entered text. This feature also works in all "Go to" popup lists, like Go To Usage or Go To Inheritors.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-391889485183031320?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/391889485183031320/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=391889485183031320' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/391889485183031320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/391889485183031320'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/12/one-line-filtering-popup-lists.html' title='One Line - Filtering Popup Lists'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-6094312196054612475</id><published>2007-12-17T18:22:00.001+03:00</published><updated>2007-12-17T18:26:26.705+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='features'/><title type='text'>One Line - Moving Code Around</title><content type='html'>Holding Ctrl-Alt-Shift and pressing arrow keys moves code around. It can move members up and down, reorder parameters in place, move statement within a block, move statement out of block or into block, and move XML tags around. Note, that it is just textual editing, it doesn't check if such move would be valid or fix any references.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-6094312196054612475?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/6094312196054612475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=6094312196054612475' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/6094312196054612475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/6094312196054612475'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/12/one-line-moving-code-around.html' title='One Line - Moving Code Around'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-8472376700903246272</id><published>2007-12-16T15:55:00.000+03:00</published><updated>2007-12-16T15:58:53.973+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='features'/><title type='text'>One Line - Naming Style</title><content type='html'>If you configure your field naming preferences in options (Options / Languages / Common / Naming Style), ReSharper will derive better names for properties and other entities when generating code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-8472376700903246272?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/8472376700903246272/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=8472376700903246272' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/8472376700903246272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/8472376700903246272'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/12/one-line-naming-style.html' title='One Line - Naming Style'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-1094287304226817948</id><published>2007-12-12T01:49:00.000+03:00</published><updated>2007-12-12T01:53:16.841+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='features'/><title type='text'>One Line - Create File From Template</title><content type='html'>You can use Alt-Ins in Solution Explorer to create file from one of your File Templates in the current folder.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Feature of ReSharper 3&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-1094287304226817948?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/1094287304226817948/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=1094287304226817948' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/1094287304226817948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/1094287304226817948'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/12/one-line-create-file-from-template.html' title='One Line - Create File From Template'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-8965591061390681733</id><published>2007-12-11T16:44:00.001+03:00</published><updated>2008-02-13T12:08:17.141+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visual studio'/><title type='text'>ReSharper and Visual Studio crash on x64</title><content type='html'>For those who experience problems running ReSharper on x64 machines, here is &lt;a href="https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=311712"&gt;the bug description&lt;/a&gt; on Microsoft Connect. &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;It turns out that this crash is the result of a bug in the Wow64 layer of Windows x64 (XP/2003 – it has been fixed in Vista x64) and only manifests itself when another app globally hooks all Windows messages.&lt;br /&gt;We are currently working with the Windows servicing folks to get a hotfix produced. &lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Updated 13 Feb&lt;/b&gt;:&lt;br /&gt;Deep in the comments to the aforementioned request there is information about how to obtain hotfix:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;If you are experiencing this issue you will need to contact Microsoft Customer &lt;br /&gt;Service &amp; Support (http://support.microsoft.com) and ask for the Windows &lt;br /&gt;Hotfix with ID 947841. If you have any difficulty in obtaining the patch &lt;br /&gt;ask the CSS representative to contact me (Sean Laberee). &lt;br /&gt;&lt;br /&gt;I am also pleased to announce that we have created a workaround in VS 2008 SP1 which eliminates this problem and the need for the patch. That workaround is queued for checkin to our build process and will be available in the Beta of the service pack. &lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;And also:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;A quick update on the windows patch. I've confirmed with our support team that if you call in for this hotfix you will not be charged. They will set up a "Hot Fix" case for you. I've also received a report that there was some confusion as to whether this fix is for Win2003 or XP. I've confirmed that this fix does in fact apply to both releases.&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-8965591061390681733?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/8965591061390681733/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=8965591061390681733' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/8965591061390681733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/8965591061390681733'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/12/resharper-and-visual-studio-crash-on.html' title='ReSharper and Visual Studio crash on x64'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-9135000209292806024</id><published>2007-11-28T17:44:00.000+03:00</published><updated>2007-12-12T01:52:37.796+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='events'/><category scheme='http://www.blogger.com/atom/ns#' term='links'/><title type='text'>ReSharper Club - Are You In?</title><content type='html'>Well, not really a club, but we thought you may wish to have cute ReSharper banner on the side bar of your blog, or project site, or may be print it and put on the wind-screen of your Porsche :) I have one right here, in my blog! Ah, well, I mean banner, not Porsche...&lt;br /&gt;&lt;br /&gt;Want it? Go to &lt;a onClick="javascript:urchinTracker('/outgoing/resharper_banner_builder');" href="http://www.jetbrains.com/resharper/features/linklogos.jsp"&gt;The Banner Builder&lt;/a&gt; page and assemble it as you like. Don't forget to put the result on your website!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-9135000209292806024?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/9135000209292806024/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=9135000209292806024' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/9135000209292806024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/9135000209292806024'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/11/resharper-club-are-you-in.html' title='ReSharper Club - Are You In?'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-696268917173740330</id><published>2007-11-22T18:19:00.000+03:00</published><updated>2007-12-12T01:52:52.601+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visual studio'/><category scheme='http://www.blogger.com/atom/ns#' term='facts'/><title type='text'>ReSharper and Visual Studio 2008</title><content type='html'>Since there is a lot of buzz about Visual Studio 2008 release, I thought I would stand and say about &lt;a onClick="javascript:urchinTracker('/outgoing/resharper');" href="http://www.jetbrains.com/resharper"&gt;ReSharper&lt;/a&gt; in relation to this fact.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Released version&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;ReSharper 3 can be installed with Visual Studio 2008 and works fine, unless you are using C# 3.0 new features, like lambdas, LINQ, extension methods and such. This constructs are not parsed by ReSharper 3, which was developed to support C# 2.0 only. It is not only highlighting which doesn't support C# 3.0, it is all the core and code intelligence. For example, rename refactoring will not find usages of extension methods and will not update them. &lt;br /&gt;There also could be some glitches, even if you don't use new C# 3.0 constructs. This is due to the fact that C# 3.0 compiler is always used in Visual Studio 2008 C# projects, regardless of target framework. It it is not widely discussed, but changes in language are wider than just several new features. There are differences in type inference in generics and candidates lookup for binding, to name few. If you happen to hit this special cases, ReSharper could behave incorrectly.&lt;br /&gt;&lt;br /&gt;If you are really-really going to immediately jump C# 3.0 wagon, you can disable highlighting (Options / Code Inspection / Settings) and switch to Visual Studio native intellisense (Options / Environment / IntelliSense / General). This will help a bit, but still you cannot trust find usages results, refactorings and many other features. &lt;br /&gt;&lt;br /&gt;There was also reported weird problem with Visual Studio 2008 and ReSharper installed on x64 computers - opening Visual Studio's Find dialog crashes. We are currently trying to reproduce this problem. If you experience this problem, please tell us!&lt;br /&gt;&lt;br /&gt;Some people tend to ask for quick-and-dirty hack for ReSharper 3 so that it just parses the code and don't do anything intelligent with C# 3.0 code. It is not possible. Details are not important here and are pure technical.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Next version&lt;/strong&gt;&lt;br /&gt;ReSharper 4 is in very active development. Its main purpose is to support C# 3.0 in all of its beauty. This means not only parsing and code intelligence, but also new analysis, refactorings, context actions and quick fixes. We are concentrated on making your development experience with C# 3.0 as smooth and pleasant as possible.&lt;br /&gt;&lt;br /&gt;Currently, we have support for implicity typed variables and arrays, extension methods, object and collection initializers and automatic properties. As soon as we complete support for lambdas, queries and anonymous types, we will open Early Access Program. We plan to achieve this goal in &lt;strong&gt;January, 2008&lt;/strong&gt;. &lt;br /&gt;From this point you will be able to download EAP or even nightly builds and try full power of ReSharper 4 with your new C# 3.0 code.&lt;br /&gt;&lt;br /&gt;In regards of upgrade policy, we are currently in the process of deciding upgrade cost, who qualifies for free upgrade, or if we want to do something special about this release. I will post about it as soon as I can. &lt;br /&gt;&lt;br /&gt;As for release plans, we are aiming at 2008'Q1, hopefully sometime soon after Visual Studio 2008 launch event in February. ReSharper 4 will be available to general public via &lt;a href="http://resharper.blogspot.com/2007/07/resharper-302-early-access-program.html"&gt;Early Access Program&lt;/a&gt; at least for 2 months before release. &lt;br /&gt;&lt;br /&gt;If you have any questions, do not hesitate to ask in comments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-696268917173740330?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/696268917173740330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=696268917173740330' title='46 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/696268917173740330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/696268917173740330'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/11/resharper-and-visual-studio-2008.html' title='ReSharper and Visual Studio 2008'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>46</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-5612421723692094004</id><published>2007-10-16T19:56:00.000+04:00</published><updated>2007-10-16T20:41:38.031+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='features'/><category scheme='http://www.blogger.com/atom/ns#' term='C# 3.0'/><title type='text'>C# 3.0 Automatic Properties - Incomplete Feature?</title><content type='html'>Well, C# 3.0 is nice language. However, digging into details of every new language feature while developing ReSharper support make me wonder about little things that look like incompleteness. Today I'm going to wonder about automatic properties.&lt;br /&gt;&lt;br /&gt;&lt;div style="BACKGROUND: white;font-family:Courier New;font-size:10pt;color:black;"   &gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; Name { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;; }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;This code is correct in C# 3.0, there are no missing "abstract" or get/set bodies. It simply means that compiler will create field and accessors code for you:&lt;br /&gt;&lt;br /&gt;&lt;div style="BACKGROUND: white;font-family:Courier New;font-size:10pt;color:black;"   &gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; __someGeneratedFieldName;&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; Name&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;{&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;  &lt;span style="color:blue;"&gt;get&lt;/span&gt; { &lt;span style="color:blue;"&gt;return&lt;/span&gt; __someGeneratedFieldName; }&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;  &lt;span style="color:blue;"&gt;set&lt;/span&gt; { __someGeneratedFieldName = &lt;span style="color:blue;"&gt;value&lt;/span&gt;; }&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;What is cool about automatic properties? Obviously, ReSharper users don't benefit much from shorter code - who types properties by hand these days? However there is one very important thing:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;strong&gt;&lt;span style="color:#cc0000;"&gt;Less complexity to manage.&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;If you want to know how this property gets its value, you no longer need to search for both field and property usages. You don't need to synchronize field and property types, once you decide to change it. Also, access to the class attribute (in OOP sense) is fully controlled right at the place of the declaration. You can limit it as you wish:&lt;br /&gt;&lt;br /&gt;&lt;div style="BACKGROUND: white;font-family:Courier New;font-size:10pt;color:black;"   &gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; Name { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;set&lt;/span&gt;; }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;This way you declare that "Name" can be modified only within the class itself, but can be read from outside.&lt;br /&gt;&lt;br /&gt;So, what is missing from this language feature?&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Initializer&lt;/strong&gt;.&lt;br /&gt;I may wish to initilize property to some non-default value. Like this:&lt;br /&gt;&lt;br /&gt;&lt;div style="BACKGROUND: white;font-family:Courier New;font-size:10pt;color:black;"   &gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Person&lt;/span&gt;&amp;gt; Persons { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;set&lt;/span&gt;; } = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Person&lt;/span&gt;&amp;gt;();&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;strong&gt;Read-only automatic property&lt;/strong&gt;&lt;br /&gt;In the example above, I don't actually need setter. &lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;Person&lt;/span&gt;&amp;gt; Persons { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; } = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;Person&lt;/span&gt;&amp;gt;();&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Obviously, you don't need read-only automatic property without initializer. Also note, that such property can never change its value, even in constructor, unlike readonly fields.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Attributes on generated fields&lt;/strong&gt;&lt;br /&gt;If you use simple event form and compiler generates field for storing delegate, you can apply attribute to the generated field by using attribute target:&lt;br /&gt;&lt;br /&gt;&lt;div style="BACKGROUND: white;font-family:Courier New;font-size:10pt;color:black;"   &gt;&lt;pre style="MARGIN: 0px"&gt;[field: &lt;span style="color:#2b91af;"&gt;NonSerialized&lt;/span&gt;]&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;event&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;EventHandler&lt;/span&gt; Closed;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;I wish I could do the same with automatic properties:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;[field: &lt;span style="color: #2b91af;"&gt;NonSerialized&lt;/span&gt;]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;Person&lt;/span&gt;&amp;gt; Persons { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; } = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;Person&lt;/span&gt;&amp;gt;();&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br /&gt;Few simple improvements over existing implementation could make automatic properties much more useful in everyday professional .NET development. Unfortunately, language designers &lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2262783&amp;SiteID=1"&gt;decided&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;&lt;em&gt;they would work in the "common case" which among other things means no attributes on the generated field. The idea behind that is keeping them simple and not slowly mutating them into full properties.&lt;/em&gt;&lt;/blockquote&gt;&lt;br /&gt;I'd prefer the advanced version, if I had a chance to choose.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-5612421723692094004?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/5612421723692094004/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=5612421723692094004' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/5612421723692094004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/5612421723692094004'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/10/c-30-automatic-properties-incomplete.html' title='C# 3.0 Automatic Properties - Incomplete Feature?'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-227942771937658595</id><published>2007-09-07T17:45:00.001+04:00</published><updated>2007-09-07T17:56:56.300+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='features'/><category scheme='http://www.blogger.com/atom/ns#' term='release'/><title type='text'>ReSharper 3.0.3 EAP and Solution-wide Error Analysis</title><content type='html'>The ReSharper team is actively working on next version with C# 3.0 support, but we are still fixing things for ReSharper 3.0 and even add new features!&lt;br /&gt;&lt;br /&gt;Among with various bug-fixes, ReSharper 3.0.3 features "Global Error Analysis" feature that finds compilation errors in your solution on-the-fly. It was available in early ReSharper 3.0 EAP builds, but then we decided that it is not mature enough to put it into release. Now, we've improved it and are going to include it in ReSharper 3.0.3 update. &lt;br /&gt;&lt;br /&gt;You can get ReSharper 3.0.3 EAP build at &lt;a href="http://www.jetbrains.net/confluence/display/ReSharper/Download"&gt;download page&lt;/a&gt;. Take a look at &lt;a href="http://resharper.blogspot.com/2007/07/resharper-302-early-access-program.html"&gt;post about Early Access Program&lt;/a&gt;, if you want to learn more about participating. &lt;br /&gt;&lt;br /&gt;To enable analysis of all errors in solution, double-click a red crossing lines symbol at the very right of the status bar and check the "Analyze errors in whole solution" checkbox. Note, that it is per-solution setting. It may take quite a while to analyze your solution for the first time (you can continue your work), but once the solution has been analyzed only those files that may be affected by the changes made are reanalyzed. Tool window with all errors in your solution can be opened using &lt;em&gt;ReSharper | Windows | Errors in Solution&lt;/em&gt; menu command. Also, next/previous error command walks through all solution errors, if solution-wide error analysis is enabled. &lt;br /&gt;&lt;br /&gt;We would like to hear from you about this feature! Do you like it or not? Does it work fine for you? Do you have any problems? You can leave comments to this post, or drop a message in our &lt;a href="news://news.jetbrains.com/jetbrains.resharper.eap"&gt;EAP newsgroup&lt;/a&gt;. Thanks in advance!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-227942771937658595?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/227942771937658595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=227942771937658595' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/227942771937658595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/227942771937658595'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/09/resharper-303-eap-and-solution-wide.html' title='ReSharper 3.0.3 EAP and Solution-wide Error Analysis'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-5227052154991526852</id><published>2007-09-06T18:02:00.000+04:00</published><updated>2007-09-06T19:00:35.962+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='features'/><category scheme='http://www.blogger.com/atom/ns#' term='C# 3.0'/><title type='text'>C# 3.0 Collection Initializers - Incomplete Feature?</title><content type='html'>I was really confused when I learned that "collection initializer" is so limited. I thought it was so natural to support extension methods for "Add" method, but it doesn't.&lt;br /&gt;&lt;br /&gt;In short, collection initializer is the following syntax:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;var list = new List&amp;lt;int&amp;gt; { 1, 2, 3 };&lt;br /&gt;var dic = new Dictionary&amp;lt;int,string&amp;gt; { { 1, "a" }, { 2, "b" }, { 3, "c" } };&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br/&gt;&lt;br /&gt;Each item in the braces is simply transformed to the call of Add method with appropriate signature.&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;br /&gt;var list = new List&amp;lt;int&amp;gt;();&lt;br /&gt;list.Add(1);&lt;br /&gt;list.Add(2);&lt;br /&gt;list.Add(3);&lt;br /&gt;var dic = new Dictionary&amp;lt;int,string&amp;gt;();&lt;br /&gt;dic.Add(1,"a");&lt;br /&gt;dic.Add(2,"b");&lt;br /&gt;dic.Add(3,"c");&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br/&gt;&lt;br /&gt;It's a bit more complex in reality, but it doesn't matter here.&lt;br /&gt;So, when I first saw description of the feature I thought: How cool! I can specify extension method "Add" for "StringBuilder" and get the following:&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;br /&gt;var sb = new StringBuilder { "Text = ", Text, ";", "Value = ", Value };&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br/&gt;&lt;br /&gt;But, restrictions are too strong - type being constructed should implement IEnumerable and have &lt;em&gt;instance&lt;/em&gt; method "Add". IEnumerable is not of a big deal, but inability to use extension methods for Add is deal breaker.&lt;br /&gt;&lt;br /&gt;How about this?&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;br /&gt;XmlDocument doc = new XmlDocument&lt;br /&gt;{&lt;br /&gt;  new Node("person") { Attributes = { { "name", "John" }, { "age", "42" } },&lt;br /&gt;    Nodes =&lt;br /&gt;    {&lt;br /&gt;      new Node("phones") { Nodes =&lt;br /&gt;      {&lt;br /&gt;        new Node("number") { Value = "123 45 678" },&lt;br /&gt;        new Node("number") { Value = "777 77 777" },&lt;br /&gt;        new Node("number") { Value = "987 65 432" }&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br/&gt;&lt;br /&gt;No way. You can't use collection initializer for XmlDocument, because it doesn't have Add methods. It is IEnumerable, though.&lt;br /&gt;&lt;br /&gt;May be this?&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;br /&gt;var set = new PermissionSet( new ZoneIdentityPermission(...), new PrincipalPermission(...) };&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br/&gt;&lt;br /&gt;No way. PermissionSet is IEnumerable too, but does have AddPermission instead of Add method.&lt;br /&gt;&lt;br /&gt;If it only were searching for candidates as follows:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;If type implements "IEnumerable", look for instance Add method with appropriate parameters,&lt;/il&gt;&lt;br /&gt;&lt;li&gt;If not found, if type implements "IEnumerable", look for extension method Add with appropriate parameters,&lt;/il&gt;&lt;br /&gt;&lt;li&gt;If not found, look for extension method AddToSequence with appropriate parameters.&lt;/il&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;This change, or something similar, would turn the otherwise very limited collection initializers into really powerfull object initialization feature.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-5227052154991526852?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/5227052154991526852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=5227052154991526852' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/5227052154991526852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/5227052154991526852'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/09/c-30-collection-initializers-incomplete.html' title='C# 3.0 Collection Initializers - Incomplete Feature?'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-3976281892098751600</id><published>2007-09-04T14:14:00.000+04:00</published><updated>2007-09-04T14:32:10.602+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visual studio'/><category scheme='http://www.blogger.com/atom/ns#' term='features'/><title type='text'>Visualize Right Margin in Visual Studio</title><content type='html'>ReSharper has formatting option to keep your source code lines below certain limit. &lt;br /&gt;In Options, go to Languages / C# / Formatting Style / Line Breaks and Wrapping, find "Wrap long lines" below "Line Wrapping" group and enable it, then set "Right margin (columns)" to the desired value. That's pretty cool, but how can one see which lines will be wrapped? &lt;br /&gt;&lt;br /&gt;Meet Visual Studio secret feature: &lt;strong&gt;Guides&lt;/strong&gt;!&lt;br /&gt;&lt;br /&gt;As described in &lt;a href="http://terboven.spaces.live.com/Blog/cns!EA3D3C756483FECB!194.entry"&gt;this blog post&lt;/a&gt;, you can play a bit with registry and make Visual Studio display nice dotted vertical lines at specific column:&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Open "HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\Text Editor" key&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Create new string value "Guides"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Set its value to something like "RGB(192,192,192) 119" (columns in registry are zero-based)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Restart Visual Studio&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Now you will be able to see when your lines are too long, and probably make manual formatting before ReSharper will split lines at next reformat.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-3976281892098751600?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/3976281892098751600/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=3976281892098751600' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/3976281892098751600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/3976281892098751600'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/09/visualize-right-margin-in-visual-studio.html' title='Visualize Right Margin in Visual Studio'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-4814982369366393472</id><published>2007-08-30T12:22:00.001+04:00</published><updated>2007-08-30T13:08:09.985+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='features'/><category scheme='http://www.blogger.com/atom/ns#' term='C# 3.0'/><title type='text'>ReSharper vs C# 3.0 - Implicitly Typed Locals</title><content type='html'>Last month I was on vacation, living in the country, with no access to Internet, doing no programming, reading non-technical books, walking, swimming and otherwise enjoying my life, my family and the nature. It was really-really cool! However, I admit I was thinking a bit about ReSharper features for C# 3.0 and one of the things that puzzled me was&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;span style="color:#990000;"&gt;&lt;strong&gt;To var or not to var?&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Obviously, developer have to use var keyword in case of anonymous types, and can't use var if local variable's type cannot be inferred at the declaration point. But most locals are suitable for both forms - explicit type and var keyword. Context action to switch from explicit type to var and back is okay, but we would like to analyse the code and suggest using var in cases where it will improve the code.&lt;br /&gt;&lt;br /&gt;Some cases where it seems just fine to suggest var are:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;New object creation expression: var dictionary = new Dictionary&amp;lt;int, string&amp;gt;();&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Cast expression: var element = (IElement)obj;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Safe Cast expression: var element = obj as IElement;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Generic method call with explicit type arguments, when return type is generic: var manager = serviceProvider.GetService&amp;lt;IManager&amp;gt;()&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Generic static method call or property with explicit type arguments, when return type is generic: var manager = Singleton&amp;lt;Manager&amp;gt;.Instance;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;However, various code styles may need to suggest in other cases. For example, programming in functional style with small methods can benefit from suggesting every suitable local variable to be converted to var style. Or may be your project has IElement root interface and you just know that every variable with "element" name is IElement and you don't want explicit types for this case. Probably, any method with the name GetTreeNode() always return ITreeNode and you want vars for all such local variable. &lt;br /&gt;&lt;br /&gt;Currently, we have two suggestions: one that suggests every suitable explicitly typed local to be converted to implicityly typed var, and another that suggests according to rules above. They work fine within the team. I hope &lt;a href="http://resharper.blogspot.com/2007/07/resharper-302-early-access-program.html"&gt;EAP&lt;/a&gt; will give us some feedback about how it works, but Early Access Program for ReSharper 4.0 will be opened later this year. &lt;br /&gt;&lt;br /&gt;Meanwhile, do you have any ideas, suggestions or examples where you'd like to see suggestion to convert explicitly typed local variable to the var form?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-4814982369366393472?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/4814982369366393472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=4814982369366393472' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/4814982369366393472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/4814982369366393472'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/08/resharper-vs-c-30-implicitly-typed.html' title='ReSharper vs C# 3.0 - Implicitly Typed Locals'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-6793221157777724177</id><published>2007-07-25T20:19:00.000+04:00</published><updated>2007-07-25T22:22:34.319+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='features'/><category scheme='http://www.blogger.com/atom/ns#' term='C# 3.0'/><title type='text'>ReSharper vs C# 3.0 - Extension Methods</title><content type='html'>I'm going to do several posts about how are we going to support C# 3.0 in ReSharper. I will not dig into much technical details, instead I will discuss end-user experience and product decisions we have to make. These posts are not meant to be description of features, they are rather invitation to discussion - &lt;strong&gt;what do you want &lt;/strong&gt;to see in ReSharper for C# 3.0.&lt;br /&gt;&lt;br /&gt;Today I'm going to discuss &lt;strong&gt;Extension Methods&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Note: Information, features and ideas contained in this post are preliminary and subject to change in the release version of ReSharper with C# 3.0 support. &lt;/em&gt;&lt;br /&gt;&lt;br /&gt;In short, extension methods feature provides ability to pseudo-extend some type's public interface via static member. Compiler looks for static methods marked with System.Runtime.CompilerServices.ExtensionAttribute in the static class with the same attribute. It then converts obj.ExtensionMethod(params) into ExtensionClass.ExtensionMethod(obj, params) while compiling. There is also syntactic sugar to mark methods as extensions - you prefix first parameter of ExtensionMethod with "this" keyword:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="BACKGROUND: white;font-family:Courier New;font-size:10pt;color:black;"   &gt;&lt;pre style="MARGIN: 0px"&gt;  &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ListExtensions&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;  {&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; Process(&lt;span style="color:blue;"&gt;&lt;strong&gt;this&lt;/strong&gt;&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&amp;gt; list, &lt;span style="color:blue;"&gt;int&lt;/span&gt; p) {}&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;  }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;As soon as you have instance of List&lt;int&gt;, namespace of ExtensionClass imported into current file and System.Core assembly referenced you can use it as follows:&lt;br /&gt;&lt;br /&gt;&lt;div style="BACKGROUND: white;font-family:Courier New;font-size:10pt;color:black;"   &gt;&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="color:blue;"&gt;void&lt;/span&gt; Foo(&lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&amp;gt; list)&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;    {&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;      list.Process(1);&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;    }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;What does it mean for ReSharper? Well, besides parsing and resolving, it mostly means updating many features to support extension methods, like parameter information, navigation and search. &lt;br /&gt;&lt;br /&gt;There will be a number of context actions, analyses and quick fixes to help with extension methods. For example, you already added "this" to the first parameter of the static member, but still using it in the form of a static method in your code, like this: ListExtensions.Process(list,1). In this case suggestion could be issued to convert to the pseudo-instance form: list.Process(1);&lt;br /&gt;&lt;br /&gt;There are also some things that should be done specifically for Extension Methods feature. It would be very handy to have completion feature which lists non-imported extensions and insert using directives when you select one, much like Type Name Completion. Most likely we will extend existing feature to work after "dot" and rename it as "Import Name Completion". &lt;br /&gt;&lt;br /&gt;It would be nice to have a refactoring to convert existing static member in a static class into extension method and update all usages to the pseudo-instance form.&lt;br /&gt;&lt;br /&gt;When implementing interfaces, ReSharper could also look for extension methods that match interface members and current type, and suggest to use them as default implementation instead of throwing NotImplementedException. &lt;br /&gt;&lt;br /&gt;&lt;em&gt;If you have any other ideas about supporting Extension Methods in ReSharper, you are welcome to comment on this post.&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-6793221157777724177?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/6793221157777724177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=6793221157777724177' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/6793221157777724177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/6793221157777724177'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/07/resharper-vs-c-30-extension-methods.html' title='ReSharper vs C# 3.0 - Extension Methods'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-968750868223384241</id><published>2007-07-23T18:39:00.000+04:00</published><updated>2007-07-23T18:39:37.085+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='events'/><title type='text'>ReSharper 3.0 Screencast Contest</title><content type='html'>Are you experienced ReSharper user and want to demonstrate the &lt;strong&gt;productivity boost &lt;/strong&gt;you gain with ReSharper? &lt;br /&gt;Do you &lt;strong&gt;like it&lt;/strong&gt;, but cannot afford to pay the cost?&lt;br /&gt;May be you think &lt;strong&gt;you are the BEST &lt;/strong&gt;in using Visual Studio with ReSharper?&lt;br /&gt;Probably, you are evaluating ReSharper 3.0 and have some time to &lt;strong&gt;share your experience&lt;/strong&gt;? &lt;br /&gt;&lt;br /&gt;Even if you don't want to compete for &lt;strong&gt;free personal license for ReSharper 3.0 Full Edition&lt;/strong&gt;, you can help us make the most intelligent add-in for Visual Studio even better, smarter and handy. Participate in &lt;a href="http://blogs.jetbrains.com/dotnet/2007/07/video-contest/"&gt;video contest&lt;/a&gt; - show us your coding session!&lt;br /&gt;&lt;br /&gt;P.S. If you already spent your 30 days evaluation time, you can download latests &lt;a href="http://resharper.blogspot.com/2007/07/resharper-302-early-access-program.html"&gt;ReSharper 3.0.2 EAP builds&lt;/a&gt;, which has renewed evaluation period.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-968750868223384241?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/968750868223384241/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=968750868223384241' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/968750868223384241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/968750868223384241'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/07/resharper-30-screencast-contest.html' title='ReSharper 3.0 Screencast Contest'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-9020595180970117871</id><published>2007-07-12T15:59:00.000+04:00</published><updated>2007-07-12T18:15:59.616+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='about'/><title type='text'>ReSharper 3.0.2 Early Access Program</title><content type='html'>We opened ReSharper 3.0.2 Early Access Program and now you can download &lt;a href="http://www.jetbrains.net/confluence/display/ReSharper/Nightly+Builds"&gt;nightly builds&lt;/a&gt; of the next bugfix update for ReSharper 3.0.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#cc0000;"&gt;&lt;strong&gt;What is EAP and why do you want to participate?&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;There are two major benefits in using early builds and participating in the program:&lt;ul&gt;&lt;br /&gt;&lt;li&gt;You get the cutting edge technologies, new features, productivity improvements and bug fixes as soon as they are implemented. You don't have to wait for release, you can start working more effective immediately.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;You can influence product development and make sure it works right for you, in your environment, for your development style.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Of course, participating in early access program has its disadvantages, mainly no guarantee that particular nightly or EAP build will work for your project (is there any software currently on the market which does guarantee anything?). However, we install nightly builds every day and rarely have fatal problems preventing us from using Visual Studio and ReSharper.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#cc0000;"&gt;&lt;strong&gt;Why do we need EAP?&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;We need EAPers for the one simple reason - we can't setup that many test environments people have around the world. Various technologies, libraries, plugins, regional and cultural differences, operation systems and more and more. We can't cover it all. We also can't learn all that styles people do development in. With EAP we can listen to you, and listen early.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#cc0000;"&gt;&lt;strong&gt;How to get most from EAP?&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Be proactive&lt;/strong&gt;. If you see something you don't like - tell us. If you feel something works slow - tell us. If you miss a feature, if you think ReSharper should be smarter in particular case, if you find a typo - file a request in our &lt;a href="http://jetbrains.net/jira/browse/RSRP"&gt;JIRA database&lt;/a&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Communicate&lt;/strong&gt;. It doesn't work in a "fire and forget" style. Don't be anonymous, answer the questions team may ask. Explain why the feature is important and how it should work, give code examples to reproduce a bug, make screenshot when you think you see something wrong.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Update and share&lt;/strong&gt;. I know, it takes some time to download and install new build. I wouldn't suggest to update daily, but if you are interested in taking most from EAP you'd update at least weekly. Tell us and other EAPers how the build is going. Discuss improvements and degradations. Share your experience.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;span style="color:#cc0000;"&gt;&lt;strong&gt;Do you want to join today?&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Subscribe to &lt;a href="news://news.jetbrains.com/jetbrains.resharper.eap"&gt;newsgroup&lt;/a&gt; or bookmark &lt;a href="http://www.intellij.net/forums/forum.jspa?forumID=37"&gt;forums&lt;/a&gt;. They are synchronized, so you can use whatever you like most.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Read &lt;a href="http://www.jetbrains.net/confluence/display/ReSharper/ReSharper+Issue+Tracker"&gt;about creating requests&lt;/a&gt; in our JIRA database. Register in JIRA.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Download and install &lt;a href="http://www.jetbrains.net/confluence/display/ReSharper/Nightly+Builds"&gt;ReSharper 3.0.2 nightly build&lt;/a&gt;.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;Start EAPing with pleasure! :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-9020595180970117871?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/9020595180970117871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=9020595180970117871' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/9020595180970117871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/9020595180970117871'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/07/resharper-302-early-access-program.html' title='ReSharper 3.0.2 Early Access Program'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-1326154396375377965</id><published>2007-07-08T23:42:00.000+04:00</published><updated>2007-07-08T23:54:37.899+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='links'/><title type='text'>News of the Weekend</title><content type='html'>Albert Weinert &lt;a href="http://www.der-albert.com/archives/106-MbUnit-PlugIn-Alpha-for-ReSharper-3.0.1.html"&gt;releases alpha version&lt;/a&gt; of the MbUnit plugin for ReSharper 3.0&lt;br /&gt;&lt;br /&gt;Dmitry Lomov, ReSharper tech lead, starts blogging about &lt;a href="http://resharper-adventures.blogspot.com/"&gt;development adventures&lt;/a&gt; in the ReSharper project. I'm sure I will learn a lot myself.&lt;br /&gt;&lt;br /&gt;I've discovered "draft.blogger.com" and now you can see the poll at the right side of this blog. Would you like to answer?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-1326154396375377965?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/1326154396375377965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=1326154396375377965' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/1326154396375377965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/1326154396375377965'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/07/news-of-weekend.html' title='News of the Weekend'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-8630145183405351441</id><published>2007-07-02T13:51:00.000+04:00</published><updated>2007-07-07T18:41:29.968+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='languages'/><title type='text'>Of Tools and Languages</title><content type='html'>People often discuss tools for languages, often discuss languages, but rarely discuss languages for tools. If you haven't checked the NBL - &lt;a href="http://steve-yegge.blogspot.com/2007/02/next-big-language.html"&gt;The Next Big Language&lt;/a&gt; - go read it. Until, of course, you don't care about new languages. Here is small quotation:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;em&gt;Most programmers don't realize how often they need to deal with code that processes code. It's an important case that comes up in many, many everyday situations, but we don't have particularly good tools for dealing with it, because the syntax itself prevents it from being easy.&lt;/em&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Being tool developer myself, I must say that it is often extremely hard to make desired feature. Not that it is hard to implement the feature, but rather understand how it should work in a particular language and how to "fix" the language. Few examples to illustrate the problem:&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#cc0000;"&gt;&lt;strong&gt;Braces in C#&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;C# block delimiters are braces, symbols "{" and "}", and they are used everywhere, and thus has context-dependent semantics. For a class body they surround methods and properties; for a method they designate start and end of implementation code; inside method they are used for conditional and loop blocks. The problem is that they can easily become unmatched, and thus &lt;strong&gt;closing braces change their meaning&lt;/strong&gt;. The one which was at the method end suddenly becomes closing brace for the loop, method borrows its closing brace from class and all the code looks broken. ReSharper's code analysis goes crazy and highlights the rest of the file in red. &lt;br /&gt;&lt;br /&gt;Note, that we don't have such problem in Visual Basic .NET, because we have different "braces" for different constructs and we can detect unmatched "brace" early. However, VB.NET has own problems...&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#cc0000;"&gt;&lt;strong&gt;Name suggesting in VB.NET&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;ReSharper always had name suggesting feature for C# - when you have name of the type in the editor plus space and hit Control+Space you're presented with generated names for local variable or field:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_jTxA0bWcv6k/RojSu9EETYI/AAAAAAAAAFM/8yH_kGzPxrQ/s1600-h/ToolsLanguages1.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_jTxA0bWcv6k/RojSu9EETYI/AAAAAAAAAFM/8yH_kGzPxrQ/s400/ToolsLanguages1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5082543883595042178" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Those names are generated from type name to the left. Note the order - type name first, than declaring symbol name. In VB.NET the order is the opposite. You first give name to the declaring symbol and then specify what type is it. &lt;br /&gt;&lt;br /&gt;ReSharper can't help you find the type for the specified name, it would be too slow. We have to invert the order, and we do so by providing "dim" Live Template:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_jTxA0bWcv6k/RojTI9EETZI/AAAAAAAAAFU/adKr_lh4px0/s1600-h/ToolsLanguages2.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_jTxA0bWcv6k/RojTI9EETZI/AAAAAAAAAFU/adKr_lh4px0/s400/ToolsLanguages2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5082544330271640978" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We have similar problem in C# with interface implementation, actually. &lt;br /&gt;&lt;br /&gt;&lt;span style="color:#cc0000;"&gt;&lt;strong&gt;So what?&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;No modern software development process can exist without tools. Continous integration and version control, refactoring and code editing, error detection and code analysis - all these require tools. If the language doesn't support tools, tools cannot support language very well. It requires significant effort to develop tools for unfriendly language and thus less tools appear on the market. At times tool vendors attempt to "fix" language editing expirience with techniques that are not natural to the language itself, because at some moment they need information not typed in yet. In order to get maximum information about developer's intention, we create special features for each intention (like "surround with") instead of understanding what is being typed; just because language forces us to do so. &lt;br /&gt;&lt;br /&gt;That said, if you are creating your own language, or even the Next Big Language, be sure to consider tools as a major thing influencing language design.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-8630145183405351441?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/8630145183405351441/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=8630145183405351441' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/8630145183405351441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/8630145183405351441'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/07/of-tools-and-languages.html' title='Of Tools and Languages'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_jTxA0bWcv6k/RojSu9EETYI/AAAAAAAAAFM/8yH_kGzPxrQ/s72-c/ToolsLanguages1.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-5591844163210068599</id><published>2007-06-29T18:45:00.000+04:00</published><updated>2007-07-07T18:41:29.968+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='release'/><title type='text'>ReSharper Critical Update 3.0.1 is Out</title><content type='html'>As you've probably noticed, we had some nasty bugs which prevented some people from enjoying great new features of ReSharper 3.0. We addressed most of the critical issues in about a week and here is the result: ReSharper 3.0.1 which you can get on the official &lt;a href="http://www.jetbrains.com/resharper/download/index.html"&gt;download page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If you had problems with ASP.NET user controls, To-do Explorer, Unit Testing or any of &lt;a href="http://jetbrains.net/jira/secure/IssueNavigator.jspa?reset=true&amp;&amp;pid=10241&amp;fixfor=11303&amp;status=5&amp;status=6&amp;sorter/field=issuekey&amp;sorter/order=DESC&amp;sorter/field=priority&amp;sorter/order=DESC"&gt;these bugs&lt;/a&gt; -- you may want to give another try with ReSharper 3.0.1&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-5591844163210068599?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/5591844163210068599/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=5591844163210068599' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/5591844163210068599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/5591844163210068599'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/06/resharper-critical-update-301-is-out.html' title='ReSharper Critical Update 3.0.1 is Out'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-176796094020078364</id><published>2007-06-25T14:35:00.000+04:00</published><updated>2007-07-07T18:41:29.969+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='facts'/><title type='text'>ReSharper Curious Facts - Unit Testing</title><content type='html'>&lt;a href="http://www.jetbrains.com/resharper/"&gt;ReSharper&lt;/a&gt; 3.0 was released after passing 8518 tests. It took the total of 1 hour 46 minutes to compile, run all tests, prepare help, build installation packages for all three editions, package sources and binaries for archiving -- all without user interaction, automatically by &lt;a href="http://www.jetbrains.com/teamcity/index.html"&gt;TeamCity&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-176796094020078364?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/176796094020078364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=176796094020078364' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/176796094020078364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/176796094020078364'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/06/resharper-curious-facts-unit-testing.html' title='ReSharper Curious Facts - Unit Testing'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-297532490399594385</id><published>2007-06-21T17:24:00.000+04:00</published><updated>2007-07-07T18:41:29.969+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='release'/><title type='text'>ReSharper 3.0 Live!</title><content type='html'>&lt;a href="http://www.jetbrains.com/resharper/"&gt;ReSharper 3.0&lt;/a&gt; is released!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-297532490399594385?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/297532490399594385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=297532490399594385' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/297532490399594385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/297532490399594385'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/06/resharper-30-live.html' title='ReSharper 3.0 Live!'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-2658308057683381338</id><published>2007-06-21T15:43:00.000+04:00</published><updated>2007-07-07T18:41:29.969+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='facts'/><title type='text'>ReSharper Curious Facts - Ancient Request</title><content type='html'>Oldest request fixed in ReSharper 3.0 is number &lt;a href="http://jetbrains.net/jira/browse/RSRP-2235"&gt;2235&lt;/a&gt;, the one about intellisense in app.config files, originally filed on May 06, 2004. Interesting, it was me who submitted it when I was not working at JetBrains but already loved ReSharper and used it in my daily work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-2658308057683381338?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/2658308057683381338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=2658308057683381338' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/2658308057683381338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/2658308057683381338'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/06/resharper-curious-facts-ancient-request.html' title='ReSharper Curious Facts - Ancient Request'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-722673331841146137</id><published>2007-06-19T23:08:00.001+04:00</published><updated>2007-07-07T18:41:29.970+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='features'/><category scheme='http://www.blogger.com/atom/ns#' term='release'/><title type='text'>ReSharper 3.0 for C# Developer</title><content type='html'>While I have a few spare minutes before reviewing another document being built for web site, marketing and such, I'd like to share brief list of new features in ReSharper 3.0 that will help C# developers to be even more productive. This list is not complete and doesn't go into details about ASP.NET support or XML and XAML features. Instead, these are core C# language productivity boosters that can be used immediately in any C# project.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Go to Symbol&lt;/em&gt; -- navigate to any type, field, method, property or event by its name. Of course, camels are here with their humps ready to save you some typing.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Go to next or previous error&lt;/em&gt; -- skip warnings and suggestions and put caret immediately on the red code.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Automatic type member layout&lt;/em&gt; -- sort and group fields, constructors, properties, inner types, members implementing interface and other members when your reformat code. You can specify custom code layouting patterns in options dialog.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Smart Completion&lt;/em&gt; -- smart-complete type arguments and type parameters, infer types and suggest applicable symbols. Also, a nice little helper to give the name to unnamed exception in catch block when smart-completing in place where Exception is expected.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Advanced type choosing&lt;/em&gt; -- in refactorings and other places where you have to enter type name ReSharper now provides experience similar to Go to Type.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Find symbols referenced in type or method&lt;/em&gt; -- useful for getting big picture about what is using inside a type or method, and drill-down to details in familiar Find Usages style.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Find dependent code&lt;/em&gt; -- an advanced version of former Find Module Usages command, which is capable of searching code depending on specific project throughout the solution. If you need to find how particular assembly reference is used (or not used), invoke it on reference in Solution Explorer.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Filter found usages of attributes&lt;/em&gt; -- attributes has two distinct categories of places where they are used. One is where they are applied to an entity and the other is where they are analysed via GetCustomAttributes() methods. If you work with attributes a lot, you will find new filter in Find Usages saving you a lot of browsing time.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Highlight usages of expression&lt;/em&gt; -- select expression and see where the same expression is used in a method or in a file. &lt;br /&gt;&lt;br /&gt;&lt;em&gt;Improved Type Hiearchy&lt;/em&gt; -- member preview pane for selected type and two new view modes for deep hierarchies. One mode shows instantiatable types of the hierarchy as roots and their bases as subnodes. The other shows leaf interfaces - those that have only classes as derived types.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Moving things around&lt;/em&gt; -- no need to copy/paste code in order to move statement few lines below, move out of "if" statement or push into "for" loop. Much like manual member reordering, which of course still works. Can reorder enum members, though it is not always safe - know what you are doing. Reorders parameters though not changing call sites - thus not a refactoring. Works in XML to reorder nodes too.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Generating equality&lt;/em&gt; -- when generating Equals &amp; GetHashCode, you can now optionally generate equality and inequality operators, implement strongly typed IEquatable&lt;T&gt; interface.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Improved Stack Trace Explorer&lt;/em&gt; -- now highlights types, methods and source code paths, deals better with broken stacktraces, works for localized stacktraces. Also doesn't show "paste" dialog - less one key to hit.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Generate from Solution Explorer&lt;/em&gt; -- hit Alt-Ins while you are on the folder, file or project in solution explorer and bring instant New File From Template menu. Combine with new &lt;em&gt;Locate in Solution Explorer&lt;/em&gt; action to find your currently open file in Solution.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Unit Test Explorer&lt;/em&gt; -- browse all unit tests in solution, form arbitrary set of tests, multiple sessions with different sets (with simultaneous run!), better output presentation, and the foundation for more features in future versions.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;To-do Explorer&lt;/em&gt; -- keeps an up-to-date list of comments matching specified patterns for the whole solution, like "TODO:", "BUG:" , "To John:", "Don't forget to remove it before release!" and so on. Processes comments in C#, VB.NET, XML, XAML and ASP.NET pages (both HTML and code).&lt;br /&gt;&lt;br /&gt;&lt;em&gt;XML support&lt;/em&gt; -- enables almost all editor enhancement in XML files, like expand/shrink selection, highlight and navigate to matching tag, move tags, split and join, replace tags and attributes. Provides type completion and can automatically insert assembly qualification to avoid annoying typing in files like app.config. &lt;br /&gt;&lt;br /&gt;&lt;em&gt;Custom string.Format methods&lt;/em&gt; -- tell ReSharper about your own format-like methods and get full featured analysis, context actions and quick fixes for them.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;New code inspections&lt;/em&gt; -- more checks for redundancy, useful suggestions and warnings. Supports #pragma directives and project settings to suppress warnings. &lt;br /&gt;&lt;br /&gt;&lt;em&gt;New quick fixes and context actions&lt;/em&gt; -- less manual typing, more focus on your primary task. New quick fixes provide alternative ways to fix errors, remove redundancies and deal with type parameters and constaints. New context actions give you more power for ad-hoc code transformations.&lt;br /&gt;&lt;br /&gt;So, these are highlights. Complete list will be available short after ReSharper 3.0 is released - either on official site or here, in my blog. There are many subtle changes and nice little additions that make up the product. I don't know some of them myself! But I strongly feel that ReSharper 3.0 is another step up to the ideal development environment.&lt;br /&gt;&lt;br /&gt;Develop with pleasure!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-722673331841146137?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/722673331841146137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=722673331841146137' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/722673331841146137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/722673331841146137'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/06/resharper-30-for-c-developer.html' title='ReSharper 3.0 for C# Developer'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-5245404969163923711</id><published>2007-06-19T21:57:00.000+04:00</published><updated>2007-07-07T18:44:06.273+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='release'/><title type='text'>ReSharper 3.0 Release Candidate 2</title><content type='html'>I'd like to give our big THANKS to those brave people who tried out Beta, Beta2 or Release Candidate, provided invaluable feedback and revealed blocking problems in the upcoming ReSharper 3.0. We really appreciate your effort and doing our best to fix bugs and problems breaking your productivity and flow.&lt;br /&gt;&lt;br /&gt;We have a new RC2 build published for you. I ask you to &lt;a href="http://www.jetbrains.com/resharper/beta.html"&gt;download&lt;/a&gt; and try the build.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-5245404969163923711?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/5245404969163923711/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=5245404969163923711' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/5245404969163923711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/5245404969163923711'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/06/resharper-30-release-candidate-2.html' title='ReSharper 3.0 Release Candidate 2'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-8434077248772802478</id><published>2007-06-17T17:58:00.000+04:00</published><updated>2007-07-07T18:44:06.273+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='release'/><title type='text'>ReSharper 3.0 Release Candidate</title><content type='html'>We are getting really close to ReSharper 3.0 release so we have a Release Candidate build published for you. It has LOTS of improvements over Beta2 particularly in language-specific editions. I recommend everyone to &lt;a href="http://www.jetbrains.com/resharper/beta.html"&gt;download the build&lt;/a&gt;. This might well be your last chance before relase to make sure it works perfectly for you. &lt;br /&gt;&lt;br /&gt;Consequently, I will have more time for blogging next week, so if you have some particular topic in mind you would like me to write about -- drop me a comment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-8434077248772802478?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/8434077248772802478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=8434077248772802478' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/8434077248772802478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/8434077248772802478'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/06/resharper-30-release-candidate.html' title='ReSharper 3.0 Release Candidate'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-2370148404403637466</id><published>2007-06-16T15:03:00.000+04:00</published><updated>2007-07-07T18:44:06.273+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='release'/><title type='text'>ReSharper 3.0 - Coming Soon</title><content type='html'>It's been quite a while since I wrote about ReSharper features, but there was a reason -- we are building final bits of ReSharper 3.0. We passed not-so-good Beta milestone, a much better &lt;a href="http://www.jetbrains.com/resharper/beta.html"&gt;Beta2 update&lt;/a&gt; and currently working on last changes for Release Candidate. If you didn't yet try ReSharper 3.0 pre-release builds -- download almost-release-quality &lt;a href="http://www.jetbrains.net/confluence/display/ReSharper/Nightly+Builds"&gt;Nightly Builds&lt;/a&gt; now and tell us what do you think!&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Note: ReSharper 3.0 Visual Basic .NET edition has known problems with ASP.NET.&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-2370148404403637466?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/2370148404403637466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=2370148404403637466' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/2370148404403637466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/2370148404403637466'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/06/resharper-30-coming-soon.html' title='ReSharper 3.0 - Coming Soon'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-7390589231637657334</id><published>2007-05-23T12:46:00.000+04:00</published><updated>2007-07-07T18:41:29.971+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jedi'/><title type='text'>Jedi Way - Coding in Reverse</title><content type='html'>It &lt;a href="http://blogsearch.google.com/blogsearch?hl=ru&amp;lr=&amp;amp;q=jedi+resharper&amp;ie=UTF-8&amp;amp;scoring=d"&gt;looks like&lt;/a&gt; "ReSharper Jedi" term is beginning to spread! So here is ReSharper Jedi Code, converted from original &lt;a href="http://en.wikipedia.org/wiki/Jedi#The_Jedi_Code"&gt;Jedi Code&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;ReSharper Jedi are the guardians of quality and productivity in the .NET world.&lt;br /&gt;ReSharper Jedi use their powers to improve and advance source code, never to degrade.&lt;br /&gt;ReSharper Jedi respect all developers, in any language, with any tools.&lt;br /&gt;ReSharper Jedi serve others rather than ruling over them, for the good of the .NET world.&lt;br /&gt;ReSharper Jedi seek to improve themselves through knowledge and training.&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;So what would be the major skill ReSharper Jedi should master? I think it is Coding in Reverse. This technique is widely used in &lt;a href="http://en.wikipedia.org/wiki/Test_driven_development"&gt;test-driven development&lt;/a&gt;, I believe. However, it is so effective that every developer should master this skill regardless of programming style. Main principle could be described as follows:&lt;br /&gt;&lt;p align="center"&gt;&lt;em&gt;&lt;strong&gt;Use Before Declare. &lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;1. Learn to like &lt;span style="color:#ff0000;"&gt;red&lt;/span&gt; code. &lt;br /&gt;2. Always begin with expressing your goal. &lt;br /&gt;3. De&lt;span style="color:#ff0000;"&gt;red&lt;/span&gt;ify your code. &lt;br /&gt;&lt;br /&gt;There is one thing to dislike, though. Automatic completion as you type doesn't work well when there are undefined symbols. However it seems to be more about lack of support in tools than fundamental limitation of the technique.&lt;br /&gt;&lt;br /&gt;Let's see how does it work.&lt;br /&gt;&lt;p align="center"&gt;&lt;a href="http://1.bp.blogspot.com/_jTxA0bWcv6k/RlQWnf2xGcI/AAAAAAAAAEU/iFpV6gDpANk/s1600-h/CodingInReverse1.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5067700348520569282" style="CURSOR: hand" alt="" src="http://1.bp.blogspot.com/_jTxA0bWcv6k/RlQWnf2xGcI/AAAAAAAAAEU/iFpV6gDpANk/s400/CodingInReverse1.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;Code in &lt;span style="color:#ff0000;"&gt;red &lt;/span&gt; indicates unresolved symbols which are just not there yet. At this point I can easily continue writing code for Main method and change my mind any time.&lt;br /&gt;&lt;p align="center"&gt;&lt;a href="http://3.bp.blogspot.com/_jTxA0bWcv6k/RlQXz_2xGeI/AAAAAAAAAEk/vCksQjxlns8/s1600-h/CodingInReverse2.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5067701662780561890" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_jTxA0bWcv6k/RlQXz_2xGeI/AAAAAAAAAEk/vCksQjxlns8/s400/CodingInReverse2.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;I've expressed my goal pretty well. See how I changed &lt;span style="color:#ff0000;"&gt;CommandLineParameter&lt;/span&gt; to &lt;span style="color:#ff0000;"&gt;ICommandLineParameter&lt;/span&gt;, when I decided that interface would be better. Also, I was able to use "foreach" Live Template to iterate over collection of undefined type. &lt;br /&gt;&lt;br /&gt;Okay, now I have to de&lt;span style="color:#ff0000;"&gt;red&lt;/span&gt;ify my code and create some methods and types. Where is my light &lt;strike&gt;saber&lt;/strike&gt; bulb and powerful quick-fixes?&lt;br /&gt;&lt;p align="center"&gt;&lt;a href="http://4.bp.blogspot.com/_jTxA0bWcv6k/RlQe5P2xGfI/AAAAAAAAAEs/4itgoN7ZkUY/s1600-h/CodingInReverse3.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5067709449556269554" style="CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_jTxA0bWcv6k/RlQe5P2xGfI/AAAAAAAAAEs/4itgoN7ZkUY/s400/CodingInReverse3.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;Now we need to fill methods with real code, and I will show how to use the Force by implementing ParseCommandLine. We again begin with typing our goal:&lt;br /&gt;&lt;p align="center"&gt;&lt;a href="http://1.bp.blogspot.com/_jTxA0bWcv6k/RlQfef2xGgI/AAAAAAAAAE0/EFVXla7rEd0/s1600-h/CodingInReverse4.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5067710089506396674" style="CURSOR: hand" alt="" src="http://1.bp.blogspot.com/_jTxA0bWcv6k/RlQfef2xGgI/AAAAAAAAAE0/EFVXla7rEd0/s400/CodingInReverse4.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;Several keystrokes, quick fixes, live templates, some typing and we get to another point:&lt;br /&gt;&lt;p align="center"&gt;&lt;a href="http://2.bp.blogspot.com/_jTxA0bWcv6k/RlQgTv2xGhI/AAAAAAAAAE8/97ZpsD5KhfQ/s1600-h/CodingInReverse5.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5067711004334430738" style="CURSOR: hand" alt="" src="http://2.bp.blogspot.com/_jTxA0bWcv6k/RlQgTv2xGhI/AAAAAAAAAE8/97ZpsD5KhfQ/s400/CodingInReverse5.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;I use the Force and create class which not only contains required constructor, but also implements interface!&lt;br /&gt;&lt;p align="center"&gt;&lt;a href="http://3.bp.blogspot.com/_jTxA0bWcv6k/RlQhE_2xGiI/AAAAAAAAAFE/jl_DE6AO2k4/s1600-h/CodingInReverse6.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5067711850442988066" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_jTxA0bWcv6k/RlQhE_2xGiI/AAAAAAAAAFE/jl_DE6AO2k4/s400/CodingInReverse6.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;I leave it as an exercise to finish the sample code for anyone who want to practice this technique. Implement ProcessParameter by using some ICommandLineParameter members before declaring them, then quick-fix your way into declaring them, then use &lt;a href="http://resharper.blogspot.com/2007/04/jedi-way-implementing-members.html"&gt;Jedi skills&lt;/a&gt; and implement members on the SimpleParameter. &lt;br /&gt;&lt;br /&gt;Have fun and may the Force be with you!&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Note: Some or all of the features mentioned in this article may be available only in latest EAP versions of ReSharper.&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-7390589231637657334?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/7390589231637657334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=7390589231637657334' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/7390589231637657334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/7390589231637657334'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/05/jedi-way-coding-in-reverse.html' title='Jedi Way - Coding in Reverse'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_jTxA0bWcv6k/RlQWnf2xGcI/AAAAAAAAAEU/iFpV6gDpANk/s72-c/CodingInReverse1.png' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-5705597871681594545</id><published>2007-05-22T16:01:00.000+04:00</published><updated>2007-11-29T12:45:24.947+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><title type='text'>Coding Session with ReSharper</title><content type='html'>ReSharper team is approaching Feature Freeze milestone for version 3.0, so I didn't have time to write thoughtful posts. However, I needed to write primitive utility for doing some batch operations on the file system structure recursively, and I decided to record a small screen cast for part of the real coding session. It is about 8 minutes long and shows many things I use daily during development. I hope you will enjoy the movie :)&lt;br /&gt;&lt;br /&gt;Download "Jedi Coding" from &lt;a href="http://www.jetbrains.com/resharper/documentation/index.html"&gt;ReSharper Demo page&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Quality is not very good to keep size small. Music in background is "Voodoo People" by Prodigy from "Music For The Jilted Generation" album, I only repeated ending so it fit movie time. &lt;br /&gt;&lt;br /&gt;&lt;i&gt;Note: Some or all of the features seen in this movie may be available only in latest EAP versions of ReSharper.&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-5705597871681594545?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/5705597871681594545/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=5705597871681594545' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/5705597871681594545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/5705597871681594545'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/05/coding-session-with-resharper.html' title='Coding Session with ReSharper'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-3533744177132913006</id><published>2007-05-08T15:23:00.000+04:00</published><updated>2007-07-07T18:41:29.972+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='features'/><title type='text'>Code Completion with ReSharper</title><content type='html'>Completion with ReSharper is very different from what you have in Visual Studio. Some people refer to it as "broken". Indeed, when you start using ReSharper's intellisense, you may feel that something is "wrong". But it's just a little &lt;strong&gt;different and much better&lt;/strong&gt;. I will describe completion features in ReSharper and you'll see how superior they are to what Visual Studio offers.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#cc0000;"&gt;Look&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Visually, completion list is not that different with default ReSharper settings. Here is original Visual Studio completion for type System.String, without any prefix:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_jTxA0bWcv6k/RkBk4YBZSOI/AAAAAAAAACs/kkA82dAfZe0/s1600-h/Completion1.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5062156900848191714" style="CURSOR: hand" alt="" src="http://1.bp.blogspot.com/_jTxA0bWcv6k/RkBk4YBZSOI/AAAAAAAAACs/kkA82dAfZe0/s400/Completion1.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here is what ReSharper displays:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_jTxA0bWcv6k/RkBk4oBZSPI/AAAAAAAAAC0/4TnI-hPzO5I/s1600-h/Completion2.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5062156905143159026" style="CURSOR: hand" alt="" src="http://2.bp.blogspot.com/_jTxA0bWcv6k/RkBk4oBZSPI/AAAAAAAAAC0/4TnI-hPzO5I/s400/Completion2.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;First evident difference is usage of bold font face. It emphasizes &lt;strong&gt;immediate members&lt;/strong&gt; of type, those declared exactly in type for which completion was called. Note how GetType() is not bold, because it was inherited from System.Object. In large hierarchies, like windows controls, it is &lt;strong&gt;huge timesaver&lt;/strong&gt; to be able to spot members specific to current type.&lt;br /&gt;&lt;br /&gt;Another obvious difference is ability to show &lt;strong&gt;all overloads for a member&lt;/strong&gt; in a signature popup, not just some random one with cryptic message (+2 overload(s)). You can instantly see that you can test end of line against string in a case-insensitive way and that it would be second boolean parameter.&lt;br /&gt;&lt;br /&gt;You can also see, that ReSharper can suggest indexer (and correctly remove dot when inserting brackets). We also have some custom icons for parameters and local variables to distinguish them from fields.&lt;br /&gt;&lt;br /&gt;If you wish, you can set completion font to match font in Editor and thus align completion items with what you type. You can tweak it on ReSharper/Options/IntelliSense/Code Completion page.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#cc0000;"&gt;Narrow Down&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;More differences become visible when you start typing while completion list is open.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_jTxA0bWcv6k/RkB3LYBZSRI/AAAAAAAAADE/x37G-wF9ge4/s1600-h/Completion3.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5062177018475006226" style="CURSOR: hand" alt="" src="http://1.bp.blogspot.com/_jTxA0bWcv6k/RkB3LYBZSRI/AAAAAAAAADE/x37G-wF9ge4/s400/Completion3.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As you can see, list has &lt;strong&gt;become smaller&lt;/strong&gt; and contains only items with the specified &lt;strong&gt;prefix&lt;/strong&gt;, which is highlighted. For a large completion list, such as when you have windows control, it helps you quickly find what you need. It is even more important for type completion, but later about it.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#cc0000;"&gt;Replace and Insert&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;The most confusing part and most difficult thing to adopt in ReSharper completion behavior is choosing between replacing and inserting. When you write new code, it doesn't matter, but if you are using completion inside existing expression it makes big difference. Consider the following example: we have method that replaces all spaces with underscores. Imagine that you need to modify the body to remove leading and trailing spaces before doing replacement.&lt;br /&gt;&lt;br /&gt;&lt;div style="BACKGROUND: white;font-family:Courier New;font-size:10pt;color:black;"   &gt;&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; QuoteSpaces(&lt;span style="color:blue;"&gt;string&lt;/span&gt; text)&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;        {&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="color:blue;"&gt;return&lt;/span&gt; text.Replace(&lt;span style="color:#a31515;"&gt;' '&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;'_'&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;        }&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;You position caret right after "text." and hit Ctrl-Space, then type few letters to locate Trim method.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_jTxA0bWcv6k/RkB7GoBZSSI/AAAAAAAAADM/SwR82wBCrro/s1600-h/Completion4.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5062181334917138722" style="CURSOR: hand" alt="" src="http://2.bp.blogspot.com/_jTxA0bWcv6k/RkB7GoBZSSI/AAAAAAAAADM/SwR82wBCrro/s400/Completion4.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now, if you hit "Tab" key to complete the identifier it will &lt;strong&gt;remove&lt;/strong&gt; "Replace" and &lt;strong&gt;insert&lt;/strong&gt; "Trim", then put caret into parenthesis. Very useful when you need to &lt;strong&gt;change existing identifier&lt;/strong&gt; to another one. Note the light red highlighting which denotes text to be removed, if you hit Tab. If you hit "Enter" key, it will just insert "Trim()" and let you specify parameters, if needed.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#cc0000;"&gt;Name Suggestion&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;One more thing that ReSharper does for you is suggesting variable names when typing declaration.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_jTxA0bWcv6k/RkCA9IBZSTI/AAAAAAAAADU/rVpRvLCikuM/s1600-h/Completion5.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5062187768778148146" style="CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_jTxA0bWcv6k/RkCA9IBZSTI/AAAAAAAAADU/rVpRvLCikuM/s400/Completion5.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It works for fields, parameters, variables, members and alike. Saves a lot of typing, I have to say. Name suggestion completion takes naming conventions into account, so be sure to set them in ReSharper/Options/Code Style/ C# or Visual Basic / Naming Convention.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#cc0000;"&gt;Type Completion&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Whenever you need a type at the caret position and you only have basic completion at hands, you have to type full type name and then import type via some sort of fix, e.g. Visual Studio smart-tag action. You also have to match case, and can you remember which one is right - DESCryptoServiceProvider or DesCryptoServiceProvider?&lt;br /&gt;&lt;br /&gt;ReSharper comes to rescue with Type Completion, which shows &lt;strong&gt;all types matching prefix&lt;/strong&gt; regardless of (un-)imported namespaces and &lt;strong&gt;inserts required using directives&lt;/strong&gt; when you select a type.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_jTxA0bWcv6k/RkCDWoBZSUI/AAAAAAAAADc/6zJ97SFOD0g/s1600-h/Completion6.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5062190405888067906" style="CURSOR: hand" alt="" src="http://2.bp.blogspot.com/_jTxA0bWcv6k/RkCDWoBZSUI/AAAAAAAAADc/6zJ97SFOD0g/s400/Completion6.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Default shortcut is Ctrl-Alt-Space. Start using it now!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#cc0000;"&gt;Smart Completion&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;ReSharper has deep knowledge about your code. Really! When you see variable declaration in gray, it is ReSharper who analysed execution flow and figured out that particular variable is not used. Some of this knowledge is available to you in completion. When it is known what type is expected at specific point, you may get filtered list of available symbols by invoking Smart Complete (default shortcut Ctrl-Shift-Space):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_jTxA0bWcv6k/RkCEZoBZSVI/AAAAAAAAADk/xT8B1vdfL0E/s1600-h/Completion7.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_jTxA0bWcv6k/RkCEZoBZSVI/AAAAAAAAADk/xT8B1vdfL0E/s400/Completion7.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5062191556939303250" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You can see that ReSharper suggested some static members of System.String and parameter "text". Well, you were going to return something of string type, so here you are! &lt;br /&gt;&lt;br /&gt;Smart Completion is also smart enough to suggest &lt;strong&gt;anonymous&lt;/strong&gt; and regular &lt;strong&gt;method creation&lt;/strong&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_jTxA0bWcv6k/RkCHgoBZSWI/AAAAAAAAADs/oxWDx_mVGKg/s1600-h/Completion8.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_jTxA0bWcv6k/RkCHgoBZSWI/AAAAAAAAADs/oxWDx_mVGKg/s400/Completion8.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5062194975733270882" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Or even local &lt;strong&gt;variable creation&lt;/strong&gt; in place of out parameter:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_jTxA0bWcv6k/RkCIYoBZSXI/AAAAAAAAAD0/iMxy-otCJQo/s1600-h/Completion9.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_jTxA0bWcv6k/RkCIYoBZSXI/AAAAAAAAAD0/iMxy-otCJQo/s400/Completion9.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5062195937805945202" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#cc0000;"&gt;Conclusion&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;When you type code, completion is your best friend. Master all three completion kinds, practice for second-nature and you can achieve marvellous code generation speed.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Note: Some or all of the features mentioned in this article may be available only in latest EAP versions of ReSharper.&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-3533744177132913006?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/3533744177132913006/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=3533744177132913006' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/3533744177132913006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/3533744177132913006'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/05/code-completion-with-resharper.html' title='Code Completion with ReSharper'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_jTxA0bWcv6k/RkBk4YBZSOI/AAAAAAAAACs/kkA82dAfZe0/s72-c/Completion1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-4182144856373152105</id><published>2007-04-30T17:18:00.000+04:00</published><updated>2007-07-07T18:41:29.972+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='features'/><title type='text'>Format Strings -- Episode Two</title><content type='html'>Last time I wrote about &lt;a href="http://resharper.blogspot.com/2007/04/format-strings-episode-one.html"&gt;using string.Format&lt;/a&gt; as you type. What if you already have some code and want to transform it to string.Format?&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; ToString()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: #a31515;"&gt;"Folder: '"&lt;/span&gt; + myPath + &lt;span style="color: #a31515;"&gt;"'"&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;When you position caret inside such string expression, ReSharper displays light bulb and suggests few context actions (caret was on myPath in this case):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_jTxA0bWcv6k/RjXuP4BZSNI/AAAAAAAAACk/X3RDbnxJwaQ/s1600-h/StringFormat5.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_jTxA0bWcv6k/RjXuP4BZSNI/AAAAAAAAACk/X3RDbnxJwaQ/s400/StringFormat5.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5059211712924305618" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It is not surprizing that the first item in menu does what we want:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; ToString()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515;"&gt;"Folder: '{0}'"&lt;/span&gt;, myPath);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;If there is known method overload that fits format style, it will be used instead of creating extra string.Format call:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Write(&lt;span style="color: #2b91af;"&gt;StreamWriter&lt;/span&gt; writer)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; writer.Write(&lt;span style="color: #a31515;"&gt;"Folder: '"&lt;/span&gt; + myPath + &lt;span style="color: #a31515;"&gt;"'"&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;ReSharper converts it to:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Write(&lt;span style="color: #2b91af;"&gt;StreamWriter&lt;/span&gt; writer)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; writer.Write(&lt;span style="color: #a31515;"&gt;"Folder: '{0}'"&lt;/span&gt;, myPath);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Note: Some or all of the features mentioned in this article may be available only in latest EAP versions of ReSharper.&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-4182144856373152105?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/4182144856373152105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=4182144856373152105' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/4182144856373152105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/4182144856373152105'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/04/format-strings-episode-two.html' title='Format Strings -- Episode Two'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_jTxA0bWcv6k/RjXuP4BZSNI/AAAAAAAAACk/X3RDbnxJwaQ/s72-c/StringFormat5.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-8654965005425969451</id><published>2007-04-27T21:12:00.000+04:00</published><updated>2007-07-07T18:41:29.972+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='features'/><title type='text'>Transforming Conditionals</title><content type='html'>Testing conditions is at least 50% of code in a typical program. When developer writes code, he not always knows in advance how method will look like at the end. Let's look at some typical cases.&lt;br /&gt;&lt;br /&gt;This one is pretty simple method, which takes care of null object:&lt;br /&gt;&lt;br /&gt;&lt;div style="BACKGROUND: white;font-family:Courier New;font-size:10pt;color:black;"   &gt;&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; ConvertToString(&lt;span style="color:blue;"&gt;object&lt;/span&gt; obj)&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;    {&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;      &lt;span style="color:blue;"&gt;if&lt;/span&gt; (obj != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="color:blue;"&gt;return&lt;/span&gt; obj.ToString();&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;      &lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:blue;"&gt;null&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;    }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Then I decided to add special handling for IConvertible:&lt;br /&gt;&lt;br /&gt;&lt;div style="BACKGROUND: white;font-family:Courier New;font-size:10pt;color:black;"   &gt;&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; ConvertToString(&lt;span style="color:blue;"&gt;object&lt;/span&gt; obj)&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;    {&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;      &lt;span style="color:blue;"&gt;if&lt;/span&gt; (obj != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;      {&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="color:#2b91af;"&gt;IConvertible&lt;/span&gt; convertible = obj &lt;span style="color:blue;"&gt;as&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;IConvertible&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="color:blue;"&gt;if&lt;/span&gt; (convertible != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;          &lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Convert&lt;/span&gt;.ToString(convertible);&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="color:blue;"&gt;return&lt;/span&gt; obj.ToString();&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;      }&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;      &lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:blue;"&gt;null&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;    }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Now it seems that it would have been better idea to check and return null immediately instead of placing all the code in the block. How can we fix this? I put caret on an "if" keyword and hit Alt-Enter.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_jTxA0bWcv6k/RjIzTYBZSLI/AAAAAAAAACU/NU2uxlPcY_E/s1600-h/IfActions1.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5058161739449321650" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_jTxA0bWcv6k/RjIzTYBZSLI/AAAAAAAAACU/NU2uxlPcY_E/s400/IfActions1.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After context action is executed I get what I need:&lt;br /&gt;&lt;br /&gt;&lt;div style="BACKGROUND: white;font-family:Courier New;font-size:10pt;color:black;"   &gt;&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; ConvertToString(&lt;span style="color:blue;"&gt;object&lt;/span&gt; obj)&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;    {&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;      &lt;span style="color:blue;"&gt;if&lt;/span&gt; (obj == &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:blue;"&gt;null&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;      &lt;span style="color:#2b91af;"&gt;IConvertible&lt;/span&gt; convertible = obj &lt;span style="color:blue;"&gt;as&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;IConvertible&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;      &lt;span style="color:blue;"&gt;if&lt;/span&gt; (convertible != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Convert&lt;/span&gt;.ToString(convertible);&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;      &lt;span style="color:blue;"&gt;return&lt;/span&gt; obj.ToString();&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;    }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;If you like shorter methods, you can further transform the code:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_jTxA0bWcv6k/RjI0PYBZSMI/AAAAAAAAACc/_EKiyo-C2xU/s1600-h/IfActions2.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5058162770241472706" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_jTxA0bWcv6k/RjI0PYBZSMI/AAAAAAAAACc/_EKiyo-C2xU/s400/IfActions2.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Accepting convertion to conditional makes it even smaller:&lt;br /&gt;&lt;br /&gt;&lt;div style="BACKGROUND: white;font-family:Courier New;font-size:10pt;color:black;"   &gt;&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; ConvertToString(&lt;span style="color:blue;"&gt;object&lt;/span&gt; obj)&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;    {&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;      &lt;span style="color:blue;"&gt;if&lt;/span&gt; (obj == &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:blue;"&gt;null&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;      &lt;span style="color:#2b91af;"&gt;IConvertible&lt;/span&gt; convertible = obj &lt;span style="color:blue;"&gt;as&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;IConvertible&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;      &lt;span style="color:blue;"&gt;return&lt;/span&gt; convertible != &lt;span style="color:blue;"&gt;null&lt;/span&gt; ? &lt;span style="color:#2b91af;"&gt;Convert&lt;/span&gt;.ToString(convertible) : obj.ToString();&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;    }&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Note: Some or all of the features mentioned in this article may be available only in latest EAP versions of ReSharper.&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-8654965005425969451?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/8654965005425969451/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=8654965005425969451' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/8654965005425969451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/8654965005425969451'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/04/transforming-conditionals.html' title='Transforming Conditionals'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_jTxA0bWcv6k/RjIzTYBZSLI/AAAAAAAAACU/NU2uxlPcY_E/s72-c/IfActions1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-6222214259308918523</id><published>2007-04-27T18:18:00.000+04:00</published><updated>2007-07-07T18:42:00.977+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='features'/><title type='text'>Highlight Usages Of What?</title><content type='html'>Many people know about Find Usages (default shortcut Alt-F7), which find usages of element under caret. Some people known about Highlight Usages (default shortcut Ctrl-Shift-F7), which places highlighting markers in current file on element usages. However, ReSharper can highlight usages of different things as well.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#cc0000;"&gt;Usages of Namespaces&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Position caret on "using" directive (Imports in Visual Basic) and invoke Highlight Usages command. ReSharper will highlight all symbols which depend on namespace in question.&lt;br /&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;a href="http://3.bp.blogspot.com/_jTxA0bWcv6k/RjIJ2YBZSJI/AAAAAAAAACE/gPXN9wmUmW4/s1600-h/HighlightUsages1.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5058116161256376466" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_jTxA0bWcv6k/RjIJ2YBZSJI/AAAAAAAAACE/gPXN9wmUmW4/s400/HighlightUsages1.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;strong&gt;&lt;span style="color:#cc0000;"&gt;Usages of Expressions &lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Select expression in code and invoke Highlight Usages command. ReSharper will highlight same expressions in other places in code.&lt;br /&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;a href="http://4.bp.blogspot.com/_jTxA0bWcv6k/RjIJ2oBZSKI/AAAAAAAAACM/IwpvI203L8A/s1600-h/HighlightUsages2.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5058116165551343778" style="CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_jTxA0bWcv6k/RjIJ2oBZSKI/AAAAAAAAACM/IwpvI203L8A/s400/HighlightUsages2.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;em&gt;Note: Some or all of the features mentioned in this article may be available only in latest EAP versions of ReSharper.&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-6222214259308918523?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/6222214259308918523/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=6222214259308918523' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/6222214259308918523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/6222214259308918523'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/04/highlight-usages-of-what.html' title='Highlight Usages Of What?'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_jTxA0bWcv6k/RjIJ2YBZSJI/AAAAAAAAACE/gPXN9wmUmW4/s72-c/HighlightUsages1.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-607957188729281872</id><published>2007-04-24T21:02:00.000+04:00</published><updated>2007-07-07T18:41:29.973+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jedi'/><category scheme='http://www.blogger.com/atom/ns#' term='features'/><title type='text'>Jedi Way -- Implementing Members</title><content type='html'>Object-oriented program is easy to read, if written properly. At every point you deal with appropriate level of abstractness and you don't have to deal with implementation specific details most of the time. However, when you have large type hierarchies and you are going to modify some aspect of a top level interface -- you may be in trouble. You have to thoroughly investigate all implementing types and provide method body for each one. ReSharper can help, of course.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#cc0000;"&gt;Jedi Trick Level 1&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Invoke &lt;strong&gt;Type Hierarchy&lt;/strong&gt; and select Derived Types in the toolbar. You will see hierarchy of types derived from the interface. Use "Go To Next/Previous Occurence" command (Ctrl-Alt-Down/Up) to navigate between types. As soon as you have type which requires implementation in the code editor, Code Analysis will show red squiggly. Invoke Quick Fix to implement member and type in method body.&lt;br /&gt;&lt;p align="center"&gt;&lt;a href="http://1.bp.blogspot.com/_jTxA0bWcv6k/Ri5CU9StNMI/AAAAAAAAABs/1C-bJhDO3RA/s1600-h/ImplementMembers1.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5057052359401485506" style="CURSOR: hand" alt="" src="http://1.bp.blogspot.com/_jTxA0bWcv6k/Ri5CU9StNMI/AAAAAAAAABs/1C-bJhDO3RA/s400/ImplementMembers1.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;strong&gt;&lt;span style="color:#cc0000;"&gt;Jedi Trick Level 2&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Use &lt;strong&gt;Context Action&lt;/strong&gt;'s power to implement members. Position caret on the newely created member, IsAvailable in this case. You will see the light &lt;strike&gt;saber&lt;/strike&gt; bulb which is activated with Alt-Enter. Select "Implement member" and you will be prompted with the list of types. You can select "All above types" and get method body throwing NotImplementedException for every type.&lt;br /&gt;&lt;p align="center"&gt;&lt;a href="http://3.bp.blogspot.com/_jTxA0bWcv6k/Ri5EGdStNNI/AAAAAAAAAB0/Qqgr1SYnQqk/s1600-h/ImplementMembers2.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5057054309316637906" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_jTxA0bWcv6k/Ri5EGdStNNI/AAAAAAAAAB0/Qqgr1SYnQqk/s400/ImplementMembers2.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;strong&gt;&lt;span style="color:#cc0000;"&gt;Jedi Trick Level 3&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Use &lt;strong&gt;Quick Fix&lt;/strong&gt; power to implement members. Type in method body right in the interface, as if it were implementation. Code Analysis will show red squiggly, because interface member cannot have body. But you will also get two Quick Fixes via red light bulb - remove method body or use body for implementations. As soon as you select second one, body will be copied to appropriate implementations and removed from interface.&lt;br /&gt;&lt;p align="center"&gt;&lt;a href="http://1.bp.blogspot.com/_jTxA0bWcv6k/Ri5FL9StNOI/AAAAAAAAAB8/Vp6G8NL1LZU/s1600-h/ImplementMembers3.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5057055503317546210" style="CURSOR: hand" alt="" src="http://1.bp.blogspot.com/_jTxA0bWcv6k/Ri5FL9StNOI/AAAAAAAAAB8/Vp6G8NL1LZU/s400/ImplementMembers3.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div align="left"&gt;&lt;strong&gt;&lt;span style="color:#cc0000;"&gt;Jedi Trick Level 4&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div align="left"&gt;Available to Yoda only.&lt;/div&gt;&lt;p align="left"&gt;&lt;em&gt;Note: Some or all of the features mentioned in this article may be available only in latest EAP versions of ReSharper.&lt;/em&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-607957188729281872?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/607957188729281872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=607957188729281872' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/607957188729281872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/607957188729281872'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/04/jedi-way-implementing-members.html' title='Jedi Way -- Implementing Members'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_jTxA0bWcv6k/Ri5CU9StNMI/AAAAAAAAABs/1C-bJhDO3RA/s72-c/ImplementMembers1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-6275132448649233552</id><published>2007-04-24T18:23:00.000+04:00</published><updated>2007-07-07T18:42:00.977+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='features'/><title type='text'>Format Strings -- Episode One</title><content type='html'>Are you going to override ToString? You do this from time to time, definitely.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_jTxA0bWcv6k/Ri4Va9StNBI/AAAAAAAAAAU/o21KG3GsB2U/s1600-h/StringFormat1.png"&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/_jTxA0bWcv6k/Ri4XkdStNHI/AAAAAAAAABE/aQrTPSYLux0/s1600-h/StringFormat1.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5057005346689463410" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_jTxA0bWcv6k/Ri4XkdStNHI/AAAAAAAAABE/aQrTPSYLux0/s400/StringFormat1.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You begin typing format string and immediately see ReSharper coming to rescue in an absolutely non-invasive way. First the light bulb will appear.&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_jTxA0bWcv6k/Ri4WXNStNFI/AAAAAAAAAA0/kuTpmC1s_s8/s1600-h/StringFormat3.png"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_jTxA0bWcv6k/Ri4XkdStNII/AAAAAAAAABM/efwlnUgpRVI/s1600-h/StringFormat2.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5057005346689463426" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_jTxA0bWcv6k/Ri4XkdStNII/AAAAAAAAABM/efwlnUgpRVI/s400/StringFormat2.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Second, you hit Alt-Enter to see the list of available context actions. Only one is available here, but it is exactly the one we need.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_jTxA0bWcv6k/Ri4XkdStNJI/AAAAAAAAABU/B_Jg0f8IC1g/s1600-h/StringFormat3.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5057005346689463442" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_jTxA0bWcv6k/Ri4XkdStNJI/AAAAAAAAABU/B_Jg0f8IC1g/s400/StringFormat3.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Accept it with Enter and you can start typing arguments.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_jTxA0bWcv6k/Ri4XktStNKI/AAAAAAAAABc/X3L6-6jB8Nc/s1600-h/StringFormat4.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5057005350984430754" style="CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_jTxA0bWcv6k/Ri4XktStNKI/AAAAAAAAABc/X3L6-6jB8Nc/s400/StringFormat4.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Note: Some or all of the features mentioned in this article may be available only in latest EAP versions of ReSharper.&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-6275132448649233552?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/6275132448649233552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=6275132448649233552' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/6275132448649233552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/6275132448649233552'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/04/format-strings-episode-one.html' title='Format Strings -- Episode One'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_jTxA0bWcv6k/Ri4XkdStNHI/AAAAAAAAABE/aQrTPSYLux0/s72-c/StringFormat1.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-668607875124474756</id><published>2007-04-24T14:36:00.000+04:00</published><updated>2007-07-07T18:42:00.978+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='configuration'/><title type='text'>Customizing ReSharper Colors</title><content type='html'>Sometimes people complain that they don't like ReSharper's colors, or default colors do not math their personal scheme, or identifier highlighting gets too much in the way. Luckily, you can &lt;strong&gt;configure colors&lt;/strong&gt;. &lt;br /&gt;Color configuration for ReSharper items can be changed in the Visual Studio Options (Tools  Options menu), in the Fonts and Colors section. Select "Text Editor" in the settings combobox and scroll down to "Resharper" items. You will see color and font settings for identifiers of different kinds, error and warning highlighting, navigation targets, read/write usages and much more.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-668607875124474756?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/668607875124474756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=668607875124474756' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/668607875124474756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/668607875124474756'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/04/customizing-resharper-colors.html' title='Customizing ReSharper Colors'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-7412793204556453551</id><published>2007-04-20T17:13:00.000+04:00</published><updated>2007-07-07T18:41:29.974+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='features'/><title type='text'>The Horizon Comes Closer</title><content type='html'>It's been a while since I last wrote about ReSharper future. That's because we are actively working on ReSharper 3.0, the upcoming new version of our intelligent Visual Studio add-in. Besides numerous bug fixes, improvements and greater performance, we are adding more functionality to our product. In the upcoming posts I'm going to reveal what is going to be included in ReSharper 3.0 in more detail. Now I'll just list the most important things we are planning for this release:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#cc0000;"&gt;Visual Basic .NET&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;C# developers already know how fast one can work with source code when ReSharper is installed. Now we bring the same pleasure to VB.NET developers. &lt;strong&gt;Editor improvements&lt;/strong&gt;, such as expand/collapse selection, navigate next/prev member, duplicate line, comment/uncomment block/line and other small features, make code editing more enjoyable. &lt;strong&gt;Completion &lt;/strong&gt;brings Smart Completion and Type Completion flavors to VB.NET along with automatic Imports inserting and all other bells and whistles. &lt;strong&gt;Code generation&lt;/strong&gt; with Alt-Ins provides a quick means for generating properties, constructors, overriding and implementing members and works with the same level of cleverness as it does in C#. &lt;strong&gt;Live Templates &lt;/strong&gt;now understand VB.NET and have smart iteration and cast templates, such as For Each or TryCast. Of course, we have &lt;strong&gt;Refactoring&lt;/strong&gt; support for VB.NET in this version, which includes the most important refactorings like Rename, Move and Copy Type, Change Signature, Introduct and Inline Variable, and many others.&lt;br /&gt;&lt;br /&gt;If you are a &lt;strong&gt;VB.NET developer &lt;/strong&gt;and if you've ever seen how fast ReSharper-powered C# developers work, you owe yourself to try our EAP versions of ReSharper 3.0.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#cc0000;"&gt;XML support&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;We are adding a number of useful &lt;strong&gt;editor improvements &lt;/strong&gt;to Visual Studio XML support. They include expand selection, navigate to next/previous tag, replace tags, and some others. &lt;strong&gt;Live Templates &lt;/strong&gt;are now supported in XML files and have some useful macros. &lt;strong&gt;Type completion&lt;/strong&gt; works in XML, so that you can write configuration files easier. You can also navigate to type from XML.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#cc0000;"&gt;XAML support&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Being a language for user interface definition, it is still a compilation unit and it defines types and fields which are visible from other code. ReSharper is now capable of &lt;strong&gt;parsing XAML &lt;/strong&gt;files, navigating, searching, and otherwise providing data for code exploration tools. We also plan to support &lt;strong&gt;smart completion&lt;/strong&gt; and &lt;strong&gt;type completion&lt;/strong&gt; in specific places, like event handlers, namespace aliases and tags/attributes where a control type is expected. &lt;strong&gt;Refactoring &lt;/strong&gt;support in XAML will be limited in this version, but will allow renaming and moving types between namespaces without breaking code.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#cc0000;"&gt;Tools&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Besides all the languages support listed above, we are adding a number of useful tools and upgrading some existing tools. We've included &lt;strong&gt;To-do Explorer&lt;/strong&gt;,&lt;strong&gt; &lt;/strong&gt;which hunts for comments according to specified patterns and displays them in a dedicated tool window for quick access. We've improved &lt;strong&gt;Type Hierarchy &lt;/strong&gt;to show members of selected type, either all or just polymorphic, and added some new hierarchy browsing capabilities. &lt;strong&gt;Unit Testing &lt;/strong&gt;system is undergoing a major update to support multiple sessions, better support for various testing frameworks like mbUnit, VSTS and NSpecify, improved debugging usability and allow browsing solution for tests in dedicated Unit Test Explorer tool window. The "Go to by name" family of features, which already includes Go To Type, File or File member, is supplemented with &lt;strong&gt;Go To Symbol&lt;/strong&gt; - your best friend when you remember a method's name, but not that util class it was seen in.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#cc0000;"&gt;Improvements and bug fixes &lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;I'm not going to give you a list of hundreds of bugs and exceptions fixed since previous release. I can't even remember all those small improvements here and there, which makes development with ReSharper even smoother and helps support development flow. Numerous &lt;strong&gt;context actions&lt;/strong&gt; help craft code faster in many new use cases. New &lt;strong&gt;code analysis &lt;/strong&gt;helps keep code clean and spot various problems as soon as you create them (accidentaly, of course). New &lt;strong&gt;quick fixes &lt;/strong&gt;provide yet more automatic code corrections.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#cc0000;"&gt;&lt;strong&gt;What next?&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;I'm going to blog in details about some of the new features in ReSharper 3.0 and show you some screen casts. I will probably break announced rules of this blog and start publishing &lt;strong&gt;tips and tricks&lt;/strong&gt;, &lt;strong&gt;combos &lt;/strong&gt;and advanced techniques in &lt;strong&gt;code generation&lt;/strong&gt;, &lt;strong&gt;analysis&lt;/strong&gt; and &lt;strong&gt;refactoring&lt;/strong&gt;.&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#cc0000;"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#cc0000;"&gt;Stay tuned!&lt;/span&gt;&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-7412793204556453551?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/7412793204556453551/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=7412793204556453551' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/7412793204556453551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/7412793204556453551'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2007/04/horizon-comes-closer.html' title='The Horizon Comes Closer'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-8761336242061000827</id><published>2006-12-11T23:39:00.000+03:00</published><updated>2007-07-07T18:41:29.975+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='release'/><title type='text'>ReSharper 2.5 Released</title><content type='html'>We are proud to announce ReSharper 2.5 release! You can read about what's new in this version in my recent post &lt;a href="http://resharper.blogspot.com/2006/11/near-future-resharper-25.html"&gt;Near Future&lt;/a&gt;, and on official &lt;a href="http://www.jetbrains.com/resharper/features/newfeatures.html"&gt;New Features page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Current users of ReSharper 2.0 can use new version for free - just &lt;a href="http://www.jetbrains.com/resharper/download/index.html"&gt;download&lt;/a&gt; and install it. If you didn't yet try ReSharper - you owe yourself to download a 30-day evaluation of ReSharper, obtain a &lt;a href="http://www.jetbrains.com/resharper/download/evaluate.html"&gt;free evaluation license&lt;/a&gt; and increase you productivity with C# and VB.NET projects.&lt;br /&gt;&lt;br /&gt;Develop with pleasure!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-8761336242061000827?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/8761336242061000827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=8761336242061000827' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/8761336242061000827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/8761336242061000827'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2006/12/resharper-25-released.html' title='ReSharper 2.5 Released'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-6695520687146010181</id><published>2006-11-29T18:48:00.000+03:00</published><updated>2007-07-07T18:41:29.975+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='features'/><title type='text'>Near future - ReSharper 2.5</title><content type='html'>We at ReSharper team are building version 2.5, which is superior to 2.0.* series in quite few things. These things are so important, that I want to outline them here.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;First&lt;/span&gt;, we did a tremendous amount of work to reduce Visual Studio slowdown caused by ReSharper. I don't have specific numbers at hand, but I believe that it is at least &lt;strong&gt;ten times smoother&lt;/strong&gt;, than previous versions. Notable areas that were sped up include typing, code completion, parameter information, Visual Studio startup and solution loading, debugger stepping, Live Templates and code formatting.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;Second&lt;/span&gt;, we did many &lt;strong&gt;UI and usability improvements&lt;/strong&gt; including fonts, colors, tree views handling, forms and popups. Here is how new Find Results looks like with code preview:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/x/blogger2/3034/541917322585189/1600/242863/Find%20Results.png"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/x/blogger2/3034/541917322585189/320/821444/Find%20Results.png" border="0" /&gt;&lt;/a&gt;Next picture shows both new popup window's style and new feature "Navigate from Here", which shows various navigation options for selected code.&lt;br /&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/x/blogger2/3034/541917322585189/320/707693/NavigateFromHere.png" border="0" /&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="color:#ff0000;"&gt;Third&lt;/span&gt;, we've added a lot of &lt;strong&gt;new context actions and quickfixes&lt;/strong&gt;. They include various code generations and transformations, which increases code building speed even more! Look for complete list of quickfixes and context actions when ReSharper 2.5 releases.&lt;/p&gt;&lt;p&gt;&lt;span style="color:#ff0000;"&gt;Fourth&lt;/span&gt;, we extended the &lt;strong&gt;power of code analysis&lt;/strong&gt; to provide more erorrs, warnings and insights into potential problems. One of the most powerful new features is &lt;strong&gt;null reference analysis, &lt;/strong&gt;which detects possibility of NullReferenceException in your code and alerts you with appropriate warning. Indeed, we eliminated many potential problems in ReSharper itself using this analysis.&lt;/p&gt;&lt;p&gt;&lt;span style="color:#ff0000;"&gt;Last, but not least, &lt;/span&gt;&lt;span style="color:#000000;"&gt;we supported subset of ReSharper features for &lt;strong&gt;VB.NET&lt;/strong&gt;. In this version this subset is limited to code navigation and search features (go to declaration, base, inheritor(s); find usages; go to type/file; etc.). Some other features like expand selection and quick-doc is also included. Modification actions, like quick fixes, refactorings, automatic namespace import and so on will be supported in subsequent release.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;In addition, ReSharper 2.5 will support XAML-generated files to some degree, though full XAML support is planned for next version. ReSharper's handling of new technologies like Windows Communication Foundation is being tested these days and we believe it will work fine by the release date.&lt;/p&gt;&lt;p&gt;Complete roadmap is published on our &lt;a href="http://www.jetbrains.net/confluence/display/ReSharper/ReSharper+2.5+Roadmap"&gt;EAP site&lt;/a&gt;, feel free to participate in EAP program and tell us how it goes. Currently we are in the final stage of pre-release product stabilization and clean up. &lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;PS: ReSharper 2.5 does not work with Visual Studio 2003, nor it is planned to build any new major release for this version of Visual Studio. There will be bugfix updates for ReSharper 2.0.* for both VS2005 and VS2003 though.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;30 Nov: post updated based on feedback.&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-6695520687146010181?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/6695520687146010181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=6695520687146010181' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/6695520687146010181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/6695520687146010181'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2006/11/near-future-resharper-25.html' title='Near future - ReSharper 2.5'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-4529115762075619530</id><published>2006-11-10T16:06:00.000+03:00</published><updated>2007-07-07T18:43:28.982+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='features'/><title type='text'>Code Metrics</title><content type='html'>Many people ask, if we are going to implement &lt;strong&gt;code metrics&lt;/strong&gt; in ReSharper. Most people talk here about cyclomatic complexity, some mention maintainability index or even Halstead complexity measures. In fact, there are two major cases when people need code metrics.&lt;br /&gt;&lt;br /&gt;One case is part of &lt;strong&gt;global measurement &lt;/strong&gt;process in software development company. That is, when company &lt;strong&gt;measures and tracks &lt;/strong&gt;requirements, design and architecture, implementation, tests, deployment, support and operations, etc. Obviously, this is &lt;strong&gt;out of ReSharper scope&lt;/strong&gt;. It won't track history of measurements (as it doesn't track history of errors found in source code), it doesn't integrate with corporate database, it doesn't provide any help in fixing these measures. Someday this case will be &lt;strong&gt;covered by TeamCity&lt;/strong&gt;, I think.&lt;br /&gt;&lt;br /&gt;Another case is helping developer spot "&lt;strong&gt;code smells&lt;/strong&gt;". This would &lt;strong&gt;suit ReSharper&lt;/strong&gt;'s nature perfectly, but why then just talk about code metrics? Why people want just "have a warning about too complex method", and not about "method belongs to different class"? Many of such "code smells" can be automated, and can aid developer in building &lt;strong&gt;Good Code&lt;/strong&gt;. The problem with such warnings is that they often can give false positive. False positives are very frustrating, people will think something like this: "Well, I know, this code is complex. It should be. It was optimized for speed, implements complex algorithm and maintained by experienced Senior Developer. I DON"T want this warning here!". Thus, system that issues such warnings should have "ignore specific warning in specific place" mechanism, otherwise these warnings will be switched off globally most of the time.&lt;br /&gt;&lt;br /&gt;I believe &lt;strong&gt;ReSharper &lt;/strong&gt;team&lt;strong&gt; &lt;/strong&gt;most likely will &lt;strong&gt;introduce suggestion system&lt;/strong&gt; sooner or later, and then implement "code smells", including code metrics, and other useful suggestions that will help you write &lt;strong&gt;better code&lt;/strong&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-4529115762075619530?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/4529115762075619530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=4529115762075619530' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/4529115762075619530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/4529115762075619530'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2006/11/code-metrics.html' title='Code Metrics'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4439386706617871322.post-7868900760165378347</id><published>2006-11-08T16:40:00.000+03:00</published><updated>2007-07-07T18:41:29.976+04:00</updated><title type='text'>Introduction</title><content type='html'>I'm not sure if this blog will be regular, but I have many ideas, thoughts and just random talks about ReSharper. ReSharper is undoubtedly the most intelligent add-in to Visual Studio .NET 2005. I joined the team in 2006 and I'm doing my best to make this product not only smarter, but also be more usable, have better look and feel and improve interaction experience. And, as I look at the code and features, I undestand that a lot more should be done to make developer's life even easier and pleasurable.&lt;br /&gt;&lt;br /&gt;This blog is not for supporting ReSharper users, visit &lt;a href="http://www.jetbrains.com/support/resharper/index.html"&gt;Support Page&lt;/a&gt; if you need help. It's not about past days of ReSharper, nor about bugs or incomplete features. It is all about &lt;strong&gt;future, ideas, horizons and trends&lt;/strong&gt; for productivity boosting tools in general and, of course, with ReSharper in focus.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4439386706617871322-7868900760165378347?l=resharper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://resharper.blogspot.com/feeds/7868900760165378347/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4439386706617871322&amp;postID=7868900760165378347' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/7868900760165378347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4439386706617871322/posts/default/7868900760165378347'/><link rel='alternate' type='text/html' href='http://resharper.blogspot.com/2006/11/introduction.html' title='Introduction'/><author><name>Ilya Ryzhenkov</name><uri>http://www.blogger.com/profile/14966746474791511643</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://cs27.vkontakte.ru/u1595091/a_41d8e17.jpg'/></author><thr:total>0</thr:total></entry></feed>
