<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://community.devexpress.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Mark Miller</title><subtitle type="html" /><id>http://community.devexpress.com/blogs/markmiller/atom.aspx</id><link rel="alternate" type="text/html" href="http://community.devexpress.com/blogs/markmiller/default.aspx" /><link rel="self" type="application/atom+xml" href="http://community.devexpress.com/blogs/markmiller/atom.aspx" /><generator uri="http://communityserver.org" version="3.1.30415.43">Community Server</generator><updated>2011-03-23T14:33:47Z</updated><entry><title>CodeRush 13.1 - Enhancements to the Visual Studio Debugging Experience</title><link rel="alternate" type="text/html" href="http://community.devexpress.com/blogs/markmiller/archive/2013/06/12/coderush-13-1-enhancements-to-the-debug-visualizer.aspx" /><id>http://community.devexpress.com/blogs/markmiller/archive/2013/06/12/coderush-13-1-enhancements-to-the-debug-visualizer.aspx</id><published>2013-06-12T23:31:00Z</published><updated>2013-06-12T23:31:00Z</updated><content type="html">&lt;p&gt;With the release of CodeRush 13.1, we have made several significant enhancements to improve the Visual Studio debugging experience, shedding more light on some of the more challenging-to-discern aspects of debugging. &lt;/p&gt;  &lt;h2&gt;XAML Bindings in Silverlight 5&lt;/h2&gt;  &lt;p&gt;Now when stepping through Silverlight 5 XAML binding code you’ll see previews of the binding properties. Gone is the need to bring up the Locals window, open the BindingState object, and then find and open the FinalSource property. Now the information you need is right where you’re looking – in the code.&lt;/p&gt;  &lt;p&gt;&lt;img title="DV in SL5" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="DV in SL5" src="http://community.devexpress.com/blogs/markmiller/DV-in-SL5_5E74FEF2.png" width="859" height="229" /&gt;&amp;#160; &lt;br /&gt;&lt;font size="2"&gt;Instantly see binding properties without looking away from the code, reaching for the mouse, or pressing excessive keystrokes.&lt;/font&gt;&lt;/p&gt;  &lt;h2&gt;Improved Support for Exceptions and the Call Stack&lt;/h2&gt;  &lt;p&gt;To make finding bugs even easier we’ve added the Call Stack and Exceptions (CS&amp;amp;E) tool window. While at first it may appear to be simply an easier way to read call stacks, like CodeRush itself, it’s more than a pretty face. It is especially handy when debugging asynchronous code. &lt;/p&gt;  &lt;p&gt;To show how useful it is, first let’s look at the typical Visual Studio asynchronous code debugging experience. We’ll measure the impact on usability along the way – if this gets too crazy for you, you can jump ahead to the “Now let’s try it with CodeRush…” section below.&lt;/p&gt;  &lt;h3&gt;Async Debugging Experience in Visual Studio (without CodeRush)&lt;/h3&gt;  &lt;p&gt;First the exception is thrown. Visual Studio stops execution here:&lt;/p&gt;  &lt;p&gt;&lt;img title="ProgramExecutionStops" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="ProgramExecutionStops" src="http://community.devexpress.com/blogs/markmiller/ProgramExecutionStops_2ECB867D.png" width="574" height="143" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#9b00d3"&gt;VS Usability Impact so far: 1 target area visually scanned, 3 seconds invested&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Hmm. That’s not very helpful. Of course, Visual Studio also presents this dialog:&lt;/p&gt;  &lt;p&gt;&lt;img title="VisualStudioExceptionHelperDialog" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="VisualStudioExceptionHelperDialog" src="http://community.devexpress.com/blogs/markmiller/VisualStudioExceptionHelperDialog_27401710.png" width="598" height="388" /&gt;&lt;/p&gt;  &lt;p&gt;Where’s the useful information? We have no indication of what code caused the problem.&lt;/p&gt;  &lt;p&gt;&lt;font color="#9b00d3"&gt;VS Usability Impact so far: 2 target areas visually scanned, 7 seconds invested&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Next you look at the call stack. It looks like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/VisualStudioCallStack_54C136D3.png"&gt;&lt;img title="VisualStudioCallStack" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="VisualStudioCallStack" src="http://community.devexpress.com/blogs/markmiller/VisualStudioCallStack_thumb_6D50D423.png" width="640" height="120" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Also, not useful.&lt;/p&gt;  &lt;p&gt;&lt;font color="#9b00d3"&gt;VS Usability Impact so far: 3 target areas visually scanned, 11 seconds invested. We’re going nowhere fast.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;OK, let’s go back to that exception helper window. Let’s click the “&lt;strong&gt;View Detail…&lt;/strong&gt;” link.&lt;/p&gt;  &lt;p&gt;&lt;img title="ViewDetail" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="ViewDetail" src="http://community.devexpress.com/blogs/markmiller/ViewDetail_53E8D0E9.png" width="288" height="112" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#9b00d3"&gt;VS Usability Impact so far: 1 click, 3 target areas visually scanned, 12 seconds invested&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Here comes the &lt;strong&gt;View Detail&lt;/strong&gt; dialog. It looks like this:&lt;/p&gt;  &lt;p&gt;&lt;img title="ViewDetailWindow" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="ViewDetailWindow" src="http://community.devexpress.com/blogs/markmiller/ViewDetailWindow_4CC99471.png" width="592" height="318" /&gt;&lt;/p&gt;  &lt;p&gt;No useful information yet. Good thing our hand is on the mouse. Move it up to the triangle and click it.&lt;/p&gt;  &lt;p&gt;&lt;font color="#9b00d3"&gt;VS Usability Impact so far: 2 clicks, 4 target areas visually scanned, 14 seconds invested&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Now we see this:&lt;/p&gt;  &lt;p&gt;&lt;img title="DetailWindowDropDown" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="DetailWindowDropDown" src="http://community.devexpress.com/blogs/markmiller/DetailWindowDropDown_3A80CDAF.png" width="592" height="318" /&gt;&lt;/p&gt;  &lt;p&gt;Scanning this data, your eyes may have noticed the InnerException. What’s that all about? Let’s open it up. Click the triangle to the left of the InnerException node.&lt;/p&gt;  &lt;p&gt;&lt;font color="#9b00d3"&gt;VS Usability Impact so far: 3 clicks, 5 target areas visually scanned, 17 seconds invested&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;You probably have to resize and scroll to see this data.&lt;/p&gt;  &lt;p&gt;&lt;font color="#9b00d3"&gt;VS Usability Impact so far: 4 clicks, 1 scroll, 5 target areas visually scanned, 20 seconds invested&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The contents of that InnerException node look like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/InnerException_1346847A.png"&gt;&lt;img title="InnerException" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="InnerException" src="http://community.devexpress.com/blogs/markmiller/InnerException_thumb_32F55E42.png" width="640" height="356" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;OK, so it feels like we’re getting closer. After visually scanning the InnerException child nodes, we can see three important pieces of information:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/ImportantData_049BD895.png"&gt;&lt;img title="ImportantData" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="ImportantData" src="http://community.devexpress.com/blogs/markmiller/ImportantData_thumb_5D618F5F.png" width="660" height="215" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The InnerException of this InnerException is null (which means we’re near the root of the problem). The Message tells us a parameter called “address” is null, and we have a stack trace that may finally be useful.&lt;/p&gt; &lt;font color="#9b00d3"&gt;   &lt;p&gt;&lt;font color="#9b00d3"&gt;VS Usability Impact so far: 4 clicks, 1 scroll, 6 target areas visually scanned, 26 seconds invested, and it seems we’re almost there.&lt;/font&gt;&lt;/p&gt; &lt;/font&gt;  &lt;p&gt;Let’s open up that stack trace.&amp;#160; First, click anywhere on that StackTrace line in the dialog. Then click on the drop down button to the right. If your Visual Studio is like mine, you’ll see something like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/CallStackFromExceptionHelper_5CF55C6A.png"&gt;&lt;img title="CallStackFromExceptionHelper" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="CallStackFromExceptionHelper" src="http://community.devexpress.com/blogs/markmiller/CallStackFromExceptionHelper_thumb_7CA43632.png" width="640" height="213" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Lovely. As an exercise in futility, try to read that wrapped call stack to figure out where your problem is. There is actually more to the call stack than you see in this drop down, unfortunately there’s no scroll bar to tip you off to that fact. &lt;/p&gt;  &lt;p&gt;After more clicking, scrolling, and reading (both above and below the visible parts of the call stack above), we might infer that our problem is at the topmost position of the call stack that references our application code:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;WindowsFormsApplication1.MailSenderAsync.&amp;lt;SendEmail&amp;gt; in MailSenderAsync.cs (line 27)&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;font color="#9b00d3"&gt;VS Usability Impact so far: 7 clicks, 2 scrolls, 9 target areas visually scanned, 33 seconds invested, and it seems we’re farther away than we thought.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;So now we look at the code. Since there&amp;#39;s no navigation support built in, we need to close this stack of windows.&lt;/p&gt;  &lt;p&gt;&lt;font color="#9b00d3"&gt;VS Usability Impact so far: 10 clicks, 2 scrolls, 9 target areas visually scanned, 36 seconds invested.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Next we need to get to line 27 of MailSenderAsync.cs and take a look:&lt;/p&gt;  &lt;p&gt;&lt;font color="#9b00d3"&gt;VS Usability Impact so far: 11 clicks, 2 scrolls, 5 keystrokes, 9 target areas visually scanned, 41 seconds invested.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;img title="MailAsyncSender" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="MailAsyncSender" src="http://community.devexpress.com/blogs/markmiller/MailAsyncSender_112985B1.png" width="547" height="122" /&gt;&lt;/p&gt;  &lt;p&gt;Let’s press Ctrl+Shift+Space to see the parameter tool tip for the MailAddress constructor.&lt;/p&gt;  &lt;p&gt;&lt;img title="AddressParameter" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="AddressParameter" src="http://community.devexpress.com/blogs/markmiller/AddressParameter_2306197E.png" width="701" height="102" /&gt;&lt;/p&gt;  &lt;p&gt;Excellent! We’ve found the parameter named “address”. Getting closer.&lt;/p&gt;  &lt;p&gt;&lt;font color="#9b00d3"&gt;VS Usability Impact so far: 12 clicks, 2 scrolls, 8 keystrokes, 9 target areas visually scanned, 44 seconds invested.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;OK, so the “sender” parameter must be null. But how did we get here? How do we fix this? Unfortunately, after almost a full minute of clicking, scanning, and reading, we’ve only scratched the surface of understanding the problem. Typically the next step is to set a conditional breakpoint to stop when sender is null so we can investigate the call stack in more detail.&lt;/p&gt;  &lt;p&gt;From the Usability Count we’ve been maintaining it seems we’re investing a lot of development time going nowhere. We might need to set a breakpoint and try this again, or scan the call stack from the inner exception again to find out how we got here and find out how sender is getting a null value. Even a guru developer may be several seconds, if not minutes away from discovering the answer.&lt;/p&gt;  &lt;p&gt;Let’s compare this experience with Visual Studio on some serious family-friendly steroids, err CodeRush, plus our new CS&amp;amp;E window.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Now let’s try it with CodeRush…&lt;/h3&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;By the way, if you already have the latest version of CodeRush installed, we recommend starting a new debug session (create new project and run it) &lt;strong&gt;right now &lt;/strong&gt;and then open and dock the CS&amp;amp;E window at your favorite place in the editor while VS is in debug mode. This one-time step will get Visual Studio to remember this position and make sure the CS&amp;amp;E window is there for you in future debug sessions. &lt;/p&gt;  &lt;p&gt;I’ll wait while you do that. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;DevExpress &lt;/strong&gt;&lt;font color="#666666"&gt;|&lt;/font&gt; (CodeRush) &lt;font color="#666666"&gt;|&lt;/font&gt; &lt;strong&gt;Tool Windows &lt;/strong&gt;&lt;font color="#666666"&gt;|&lt;/font&gt; &lt;strong&gt;Call Stacks and Exceptions&lt;/strong&gt;. &lt;img class="wlEmoticon wlEmoticon-smile" style="border-top-style:none;border-left-style:none;border-bottom-style:none;border-right-style:none;" alt="Smile" src="http://community.devexpress.com/blogs/markmiller/wlEmoticon-smile_77C18276.png" /&gt;&lt;/p&gt;  &lt;p&gt;OK, ready? Here’s how easy it is to find the bug with CodeRush:&lt;/p&gt;  &lt;p&gt;Starting with the same code and the same place as the previous example, click this link:&lt;/p&gt;  &lt;p&gt;&lt;img title="CopyExceptionDetailToClipboard" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="CopyExceptionDetailToClipboard" src="http://community.devexpress.com/blogs/markmiller/CopyExceptionDetailToClipboard_57A675B9.png" width="598" height="388" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#028686"&gt;CR Usability Impact so far: 1 click, 1.5 seconds invested.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The CS&amp;amp;E window immediately looks like this:&lt;/p&gt;  &lt;p&gt;&lt;img title="CSE1" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="CSE1" src="http://community.devexpress.com/blogs/markmiller/CSE1_1B7AAA11.png" width="760" height="690" /&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;We’re debugging Async, so we know this outer call stack isn’t interesting. Instead we click the “&lt;strong&gt;&lt;font color="#0000ff"&gt;Show inner exception&lt;/font&gt;&lt;/strong&gt;” link above the stack. &lt;/p&gt;  &lt;p&gt;&lt;font color="#028686"&gt;CR Usability Impact so far: 2 clicks, 3 seconds invested.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Now we see this:&lt;/p&gt;  &lt;p&gt;&lt;img title="InnerExceptionCallStack" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="InnerExceptionCallStack" src="http://community.devexpress.com/blogs/markmiller/InnerExceptionCallStack_6916D691.png" width="730" height="613" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Do you see that?&lt;/strong&gt; The CS&amp;amp;E window is &lt;strong&gt;ACTUALLY HIGHLIGHTING &lt;/strong&gt;the line of code contributing to our “sender equals null” problem. No need to visually scan the call stack. Just click the “&lt;strong&gt;MailSenderAsync.cs line 21&lt;/strong&gt;” link, and we’re immediately inside this code:&lt;/p&gt;  &lt;p&gt;&lt;img title="SenderNullProblem" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="SenderNullProblem" src="http://community.devexpress.com/blogs/markmiller/SenderNullProblem_08C5B05A.png" width="978" height="201" /&gt;&lt;/p&gt;  &lt;p&gt;Are you kidding me? The &lt;strong&gt;Sender &lt;/strong&gt;field variable, the parameter to the SendMail overload is &lt;strong&gt;ACTUALLY SELECTED&lt;/strong&gt;. It’s actually selected, kids, drawing your eyes right onto the source of the problem, explaining how the &lt;strong&gt;sender parameter &lt;/strong&gt;became null – the &lt;strong&gt;Sender field variable&lt;/strong&gt;, passed into the method from line 21,&lt;strong&gt;&amp;#160;&lt;/strong&gt;was &lt;strong&gt;null&lt;/strong&gt;. Now we’re much closer to understanding the problem. Nice.&lt;/p&gt;  &lt;p&gt;&lt;font color="#028686"&gt;CR Usability Impact so far: 3 clicks, 5 seconds invested.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;When you’re debugging asynchronous code, the difference is &lt;strong&gt;huge&lt;/strong&gt;. Here are the usability totals for this example:&lt;/p&gt;  &lt;table style="background-color:#ffffff;" cellspacing="0" cellpadding="0"&gt;     &lt;tr&gt;       &lt;td&gt;&amp;nbsp;&lt;/td&gt;        &lt;td&gt;         &lt;table style="border-collapse:collapse;background-color:#ffffff;" cellspacing="1" cellpadding="3"&gt;             &lt;tr&gt;               &lt;td&gt;&amp;nbsp;&lt;/td&gt;                &lt;td&gt;&lt;strong&gt;Visual Studio &lt;/strong&gt;(alone)&lt;/td&gt;                &lt;td&gt;&lt;strong&gt;VS + CodeRush&lt;/strong&gt;&lt;/td&gt;             &lt;/tr&gt;              &lt;tr&gt;               &lt;td&gt;Clicks&lt;/td&gt;                &lt;td&gt;&lt;font color="#ff0000"&gt;12+&lt;/font&gt;&lt;/td&gt;                &lt;td&gt;3&lt;/td&gt;             &lt;/tr&gt;              &lt;tr&gt;               &lt;td&gt;Scrolls&lt;/td&gt;                &lt;td&gt;&lt;font color="#ff0000"&gt;2+&lt;/font&gt;&lt;/td&gt;                &lt;td&gt;0&lt;/td&gt;             &lt;/tr&gt;              &lt;tr&gt;               &lt;td&gt;Keystrokes&lt;/td&gt;                &lt;td&gt;&lt;font color="#ff0000"&gt;8+&lt;/font&gt;&lt;/td&gt;                &lt;td&gt;0&lt;/td&gt;             &lt;/tr&gt;              &lt;tr&gt;               &lt;td&gt;Areas Visually Scanned&lt;/td&gt;                &lt;td&gt;&lt;font color="#ff0000"&gt;9+&lt;/font&gt;&lt;/td&gt;                &lt;td&gt;0&lt;/td&gt;             &lt;/tr&gt;              &lt;tr&gt;               &lt;td&gt;Time invested&lt;/td&gt;                &lt;td&gt;&lt;font color="#ff0000"&gt;44+ seconds&lt;/font&gt;&lt;/td&gt;                &lt;td&gt;5 seconds&lt;/td&gt;             &lt;/tr&gt;           &lt;/table&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;This is good stuff. CodeRush helps you stay focused on the code instead of wasting time struggling with suboptimal UI.&lt;/p&gt;  &lt;p&gt;Important notes about the CS&amp;amp;E window:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Make sure you have the “Automatically paste exception or call stack from clipboard” button in the down state to get this seamless ease of use.      &lt;br /&gt;&lt;img title="AutoPasteDepressed" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="AutoPasteDepressed" src="http://community.devexpress.com/blogs/markmiller/AutoPasteDepressed_767CE997.png" width="437" height="123" /&gt;       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;You can copy call stacks and exception data from any location (including Visual Studio’s Call Stack window). &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;This last point means you can send a call stack to a team member and they can copy it to the clipboard and see it inside the CS&amp;amp;E window, and they can use it to explore the &lt;strong&gt;same version&lt;/strong&gt; of the code, &lt;strong&gt;EVEN IF THEY ARE NOT DEBUGGING&lt;/strong&gt;. Impressive.&lt;/p&gt;  &lt;h2&gt;Dead Path De-emphasis&lt;/h2&gt;  &lt;p&gt;CodeRush de-emphasizes code on dead paths (e.g., outside the current execution path). Conditional blocks that won’t be executed on the current pass are grayed out, so as you’re stepping through code it’s even easier to focus on the code that will be executed.&lt;/p&gt;  &lt;p&gt;&lt;img title="DeadPathDeemphasis" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="DeadPathDeemphasis" src="http://community.devexpress.com/blogs/markmiller/DeadPathDeemphasis_04D6E23E.png" width="530" height="367" /&gt;     &lt;br /&gt;&lt;font size="2"&gt;Code along the dead path (e.g., inside the conditional block) is grayed-out. We won’t be stepping into that block in this pass. &lt;/font&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;h2&gt;Recursive Method Depth Counter&lt;/h2&gt;  &lt;p&gt;CodeRush now displays a counter indicating the depth of recursive method calls. The counter appears when a method is called from itself at least one time.    &lt;br /&gt;    &lt;br /&gt;&lt;img title="RecursiveMethodCallCount" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="RecursiveMethodCallCount" src="http://community.devexpress.com/blogs/markmiller/RecursiveMethodCallCount_08597D65.png" width="709" height="61" /&gt;     &lt;br /&gt;&lt;font size="2"&gt;The Recursive Method Depth counter shows how deep you are into that method’s recursive call stack.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The recursive call indicator reveals how many times the method appears on the call stack, so “2” is shown on the first recursive call.&lt;/p&gt;  &lt;h2&gt;New Actions, New Options, and Other Debug Visualizer Improvements&lt;/h2&gt;  &lt;p&gt;The following actions and default shortcuts are now available: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Toggle Expression Values - &lt;strong&gt;Ctrl&lt;/strong&gt;+&lt;strong&gt;Shift&lt;/strong&gt;+&lt;strong&gt;Alt&lt;/strong&gt;+&lt;strong&gt;F10&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;Focus Next Expression - &lt;strong&gt;Tab&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;Focus Previous Expression - &lt;strong&gt;Shift&lt;/strong&gt;+&lt;strong&gt;Tab&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;ToggleDebugVisualizer - &lt;strong&gt;Ctrl&lt;/strong&gt;+&lt;strong&gt;Alt&lt;/strong&gt;+&lt;strong&gt;D&lt;/strong&gt; &lt;/li&gt; &lt;/ul&gt; &lt;strong&gt;&lt;/strong&gt;  &lt;p&gt;We have added a “Show historical values” option to the “Editor | Debug | Visualizer” options page. It specifies whether to show values only for the current code line or for all code lines within the current method. I prefer seeing a full history, however you may prefer a more compact display as you work.&lt;/p&gt;  &lt;p&gt;In Visual Basic, CodeRush now shows icons indicating whether the current Boolean expression is true or false for “case” statements. &lt;/p&gt;  &lt;p&gt;The Debug Visualizer is smarter and able to automatically preview more expression types than before.&lt;/p&gt;  &lt;p&gt;CodeRush smoothly adjusts line height when showing or hiding debug visualizer visual elements (expression values or Expression Explorer). This results in a smoother debugging experience and keeps your eyes on the important data. &lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=370407" width="1" height="1"&gt;</content><author><name>Mark Miller (DevExpress)</name><uri>http://community.devexpress.com/members/Mark-Miller-_2800_DevExpress_2900_.aspx</uri></author></entry><entry><title>New XAML features in CodeRush 13.1 for Visual Studio</title><link rel="alternate" type="text/html" href="http://community.devexpress.com/blogs/markmiller/archive/2013/06/07/new-xaml-features-in-coderush-13-1-for-visual-studio.aspx" /><id>http://community.devexpress.com/blogs/markmiller/archive/2013/06/07/new-xaml-features-in-coderush-13-1-for-visual-studio.aspx</id><published>2013-06-07T21:00:00Z</published><updated>2013-06-07T21:00:00Z</updated><content type="html">&lt;p&gt;CodeRush 13.1 includes a number of new features to make working with XAML easier.&lt;/p&gt;  &lt;h2&gt;Navigation Support&lt;/h2&gt;  &lt;p&gt;The Declaration navigation provider is available in XAML code now. You can use it to navigate to:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Control declarations &lt;/li&gt;    &lt;li&gt;Types&lt;/li&gt;    &lt;li&gt;Properties&lt;/li&gt;    &lt;li&gt;Resource keys&lt;/li&gt;    &lt;li&gt;Named controls&lt;/li&gt;    &lt;li&gt;xmlns aliases &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/JumpToDeclaration_1C883273.png"&gt;&lt;img title="JumpToDeclaration" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="JumpToDeclaration" src="http://community.devexpress.com/blogs/markmiller/JumpToDeclaration_thumb_57DB9831.png" width="640" height="168" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Code Completion&lt;/h2&gt;  &lt;p&gt;With CodeRush 13.1 installed, Visual Studio’s XAML Intellisense is smarter and more capable. CodeRush suggestions are integrated with the Intellisense window, and include:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Available continuations for Binding path expressions and TemplateBinding arguments&lt;/li&gt;    &lt;li&gt;Binding.ElementName, Setter.TargetName, and Trigger.SourceName values&lt;/li&gt;    &lt;li&gt;Resource key completions for StaticResource and DynamicResource markup extensions.     &lt;br /&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;img title="DevExpressIntellisense" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DevExpressIntellisense" src="http://community.devexpress.com/blogs/markmiller/DevExpressIntellisense_54A5B37C.png" width="471" height="214" /&gt;&lt;/p&gt;  &lt;h2&gt;New Code Cleanup Rules for XAML&lt;/h2&gt;  &lt;p&gt;The following XAML specific code cleanup rules are new for 13.1:    &lt;br /&gt;&lt;strong&gt;Remove All Comments&lt;/strong&gt; – removes all XAML comments.     &lt;br /&gt;&lt;strong&gt;Remove Default Values&lt;/strong&gt; – removes control attributes initialized to default values.&lt;/p&gt;  &lt;h2&gt;Code Providers&lt;/h2&gt;  &lt;h3&gt;Declare XAML Namespace Reference&lt;/h3&gt;  &lt;p&gt;This CodeProvider declares a new XAML namespace reference for the active qualifier.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/DeclareNamespaceReference_7B94BFCB.png"&gt;&lt;img title="DeclareNamespaceReference" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="DeclareNamespaceReference" src="http://community.devexpress.com/blogs/markmiller/DeclareNamespaceReference_thumb_1B439994.png" width="640" height="153" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If the type resolves to multiple locations, a submenu will appear allowing you to select the namespace to declare.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/DeclareNamespaceSubmenu_4FE3F5CF.png"&gt;&lt;img title="DeclareNamespaceSubmenu" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="DeclareNamespaceSubmenu" src="http://community.devexpress.com/blogs/markmiller/DeclareNamespaceSubmenu_thumb_28A9AC9A.png" width="640" height="183" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Declare All XAML Namespace References&lt;/h3&gt;  &lt;p&gt;This CodeProvider declares multiple namespace references for every qualified control that can resolve to a single declaration. This refactoring can be useful after pasting XAML fragments from another source.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/DeclareAllNamespaceReferences_615456A7.png"&gt;&lt;img title="DeclareAllNamespaceReferences" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="DeclareAllNamespaceReferences" src="http://community.devexpress.com/blogs/markmiller/DeclareAllNamespaceReferences_thumb_0ED5766B.png" width="640" height="235" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Seven New Grid CodeProviders&lt;/h2&gt;  &lt;p&gt;CodeRush 13.1 includes seven new Grid CodeProviders, which makes it much easier to work with controls inside XAML Grids.&lt;/p&gt;  &lt;h3&gt;Insert Columns/Rows&lt;/h3&gt;  &lt;p&gt;These CodeProviders insert the specified number of columns or rows at the specified location, shifting control position as needed. This CodeProvider can save a huge amount of time if you need to add a column or row to an existing grid. In the example below, we effortlessly add two rows to an already complex grid, shifting 50 control positions down automatically.&lt;/p&gt;  &lt;p&gt;&lt;img title="InsertRows3" style="display:inline;" alt="InsertRows3" src="http://community.devexpress.com/blogs/markmiller/InsertRows3_4060E400.gif" width="797" height="548" /&gt;&lt;/p&gt;  &lt;h3&gt;Position Control&lt;/h3&gt;  &lt;p&gt;This provider allows you to visually position a control inside the parent grid without reaching for the mouse or risking unintended changes (such as span and margins being set by the Visual Studio designer due to less-than-precise mouse operations).&lt;/p&gt;  &lt;p&gt;&lt;img title="PositionControl3" style="display:inline;" alt="PositionControl3" src="http://community.devexpress.com/blogs/markmiller/PositionControl3_0671A114.gif" width="759" height="560" /&gt;&lt;/p&gt;  &lt;h3&gt;Delete Columns/Rows&lt;/h3&gt;  &lt;p&gt;These CodeProviders remove the specified number of columns or rows at the specified location, shifting control position and span as needed. Controls contained entirely inside the deleted range will be removed unless the “(keep controls)” variation of this provider is applied.&lt;/p&gt;  &lt;p&gt;&lt;img title="DeleteColumnsRows" style="display:inline;" alt="DeleteColumnsRows" src="http://community.devexpress.com/blogs/markmiller/DeleteColumnsRows_7E16442C.gif" width="724" height="560" /&gt;&lt;/p&gt;  &lt;p&gt;All grid manipulation operations are intelligently performed so undo is simple: &lt;/p&gt;  &lt;p&gt;&lt;img title="DeleteUndo" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="DeleteUndo" src="http://community.devexpress.com/blogs/markmiller/DeleteUndo_12233E9F.png" width="306" height="132" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="color:#dd8484;"&gt;Note: the first 13.1 release omitted the delete column/row providers. The subsequent minor update (and daily builds) include this feature.&lt;/span&gt;&lt;/p&gt;  &lt;h2&gt;New Templates&lt;/h2&gt;  &lt;h3&gt;Setting Numeric Properties&lt;/h3&gt;  &lt;p&gt;Now setting common numeric properties is fast and easy. Here are your shortcuts:&lt;/p&gt;  &lt;p&gt;   &lt;/p&gt;&lt;table class="MsoTableGrid" style="border-width:medium;border-style:none;border-collapse:collapse;" cellspacing="0" cellpadding="0"&gt;       &lt;tr style="mso-yfti-irow:0;mso-yfti-firstrow:yes;"&gt;         &lt;td style="border-top:#95b3d7 1pt solid;border-right:#95b3d7 1pt solid;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;border-left:#95b3d7 1pt solid;padding-right:5.4pt;width:55.35pt;background-color:transparent;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;"&gt;           &lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong style="mso-bidi-font-weight:normal;"&gt;&lt;span style="color:#4f81bd;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="font-family:Calibri;"&gt;Shortcut &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-top:#95b3d7 1pt solid;border-right:#95b3d7 1pt solid;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;padding-right:5.4pt;width:72.35pt;background-color:transparent;border-left-color:#f0f0f0;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-left-alt:solid #95b3d7 .5pt;mso-border-left-themecolor:accent1;mso-border-left-themetint:153;"&gt;           &lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong style="mso-bidi-font-weight:normal;"&gt;&lt;span style="color:#4f81bd;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="font-family:Calibri;"&gt;Property&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="mso-yfti-irow:1;"&gt;         &lt;td style="border-right:#95b3d7 1pt solid;border-top-color:#f0f0f0;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;border-left:#95b3d7 1pt solid;padding-right:5.4pt;width:55.35pt;background-color:transparent;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-top-alt:solid #95b3d7 .5pt;mso-border-top-themecolor:accent1;mso-border-top-themetint:153;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;                   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;h&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;                 &lt;/td&gt;          &lt;td style="border-right:#95b3d7 1pt solid;border-top-color:#f0f0f0;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;padding-right:5.4pt;width:72.35pt;background-color:transparent;border-left-color:#f0f0f0;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-left-alt:solid #95b3d7 .5pt;mso-border-left-themecolor:accent1;mso-border-left-themetint:153;mso-border-top-alt:solid #95b3d7 .5pt;mso-border-top-themecolor:accent1;mso-border-top-themetint:153;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:153;mso-border-right-themecolor:accent1;mso-border-right-themetint:153;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;                   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;Height&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;                 &lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="mso-yfti-irow:2;"&gt;         &lt;td style="border-right:#95b3d7 1pt solid;border-top-color:#f0f0f0;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;border-left:#95b3d7 1pt solid;padding-right:5.4pt;width:55.35pt;background-color:transparent;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-top-alt:solid #95b3d7 .5pt;mso-border-top-themecolor:accent1;mso-border-top-themetint:153;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;                           &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;m&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;                         &lt;/td&gt;          &lt;td style="border-right:#95b3d7 1pt solid;border-top-color:#f0f0f0;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;padding-right:5.4pt;width:72.35pt;background-color:transparent;border-left-color:#f0f0f0;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-left-alt:solid #95b3d7 .5pt;mso-border-left-themecolor:accent1;mso-border-left-themetint:153;mso-border-top-alt:solid #95b3d7 .5pt;mso-border-top-themecolor:accent1;mso-border-top-themetint:153;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:153;mso-border-right-themecolor:accent1;mso-border-right-themetint:153;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;                           &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;Margin&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;                         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="mso-yfti-irow:3;"&gt;         &lt;td style="border-right:#95b3d7 1pt solid;border-top-color:#f0f0f0;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;border-left:#95b3d7 1pt solid;padding-right:5.4pt;width:55.35pt;background-color:transparent;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-top-alt:solid #95b3d7 .5pt;mso-border-top-themecolor:accent1;mso-border-top-themetint:153;"&gt;           &lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;p &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-right:#95b3d7 1pt solid;border-top-color:#f0f0f0;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;padding-right:5.4pt;width:72.35pt;background-color:transparent;border-left-color:#f0f0f0;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-left-alt:solid #95b3d7 .5pt;mso-border-left-themecolor:accent1;mso-border-left-themetint:153;mso-border-top-alt:solid #95b3d7 .5pt;mso-border-top-themecolor:accent1;mso-border-top-themetint:153;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:153;mso-border-right-themecolor:accent1;mso-border-right-themetint:153;"&gt;           &lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;Padding&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="mso-yfti-irow:4;"&gt;         &lt;td style="border-right:#95b3d7 1pt solid;border-top-color:#f0f0f0;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;border-left:#95b3d7 1pt solid;padding-right:5.4pt;width:55.35pt;background-color:transparent;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-top-alt:solid #95b3d7 .5pt;mso-border-top-themecolor:accent1;mso-border-top-themetint:153;"&gt;           &lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;w &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-right:#95b3d7 1pt solid;border-top-color:#f0f0f0;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;padding-right:5.4pt;width:72.35pt;background-color:transparent;border-left-color:#f0f0f0;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-left-alt:solid #95b3d7 .5pt;mso-border-left-themecolor:accent1;mso-border-left-themetint:153;mso-border-top-alt:solid #95b3d7 .5pt;mso-border-top-themecolor:accent1;mso-border-top-themetint:153;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:153;mso-border-right-themecolor:accent1;mso-border-right-themetint:153;"&gt;           &lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;Width&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/table&gt;   &lt;p&gt;Just follow these with a number (1-4 digits) and press the template expansion key. For example, the &lt;strong&gt;h149&lt;/strong&gt; template, when expanded inside a control’s tag, produces the following:&lt;/p&gt; &lt;span style="font-family:Consolas;color:#ff0000;"&gt;&lt;span style="font-family:Consolas;color:#ff0000;"&gt;     &lt;/span&gt;&lt;/span&gt;&lt;blockquote&gt;       &lt;p&gt;&lt;span style="font-size:18px;"&gt;&amp;nbsp; Height&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-size:18px;"&gt;=&amp;quot;149&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;     &lt;/p&gt;&lt;/blockquote&gt;     &lt;h3&gt;Creating Controls  &lt;/h3&gt;&lt;p&gt;CodeRush 13.1 includes a new set of dynamic code templates for creating common XAML layouts. New shortcuts for common controls:&lt;/p&gt;  &lt;p&gt;   &lt;/p&gt;&lt;table class="MsoTableGrid" style="border-width:medium;border-style:none;border-collapse:collapse;" cellspacing="0" cellpadding="0"&gt;       &lt;tr style="mso-yfti-irow:0;mso-yfti-firstrow:yes;"&gt;         &lt;td style="border-top:#95b3d7 1pt solid;border-right:#95b3d7 1pt solid;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;border-left:#95b3d7 1pt solid;padding-right:5.4pt;width:55.35pt;background-color:transparent;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;"&gt;           &lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong style="mso-bidi-font-weight:normal;"&gt;&lt;span style="color:#4f81bd;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="font-family:Calibri;"&gt;Shortcut &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-top:#95b3d7 1pt solid;border-right:#95b3d7 1pt solid;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;padding-right:5.4pt;width:72.35pt;background-color:transparent;border-left-color:#f0f0f0;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-left-alt:solid #95b3d7 .5pt;mso-border-left-themecolor:accent1;mso-border-left-themetint:153;"&gt;           &lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;strong style="mso-bidi-font-weight:normal;"&gt;&lt;span style="color:#4f81bd;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="font-family:Calibri;"&gt;Control &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="mso-yfti-irow:1;"&gt;         &lt;td style="border-right:#95b3d7 1pt solid;border-top-color:#f0f0f0;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;border-left:#95b3d7 1pt solid;padding-right:5.4pt;width:55.35pt;background-color:transparent;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-top-alt:solid #95b3d7 .5pt;mso-border-top-themecolor:accent1;mso-border-top-themetint:153;"&gt;           &lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;b &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-right:#95b3d7 1pt solid;border-top-color:#f0f0f0;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;padding-right:5.4pt;width:72.35pt;background-color:transparent;border-left-color:#f0f0f0;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-left-alt:solid #95b3d7 .5pt;mso-border-left-themecolor:accent1;mso-border-left-themetint:153;mso-border-top-alt:solid #95b3d7 .5pt;mso-border-top-themecolor:accent1;mso-border-top-themetint:153;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:153;mso-border-right-themecolor:accent1;mso-border-right-themetint:153;"&gt;           &lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;Button &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="mso-yfti-irow:2;"&gt;         &lt;td style="border-right:#95b3d7 1pt solid;border-top-color:#f0f0f0;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;border-left:#95b3d7 1pt solid;padding-right:5.4pt;width:55.35pt;background-color:transparent;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-top-alt:solid #95b3d7 .5pt;mso-border-top-themecolor:accent1;mso-border-top-themetint:153;"&gt;           &lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;bd &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-right:#95b3d7 1pt solid;border-top-color:#f0f0f0;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;padding-right:5.4pt;width:72.35pt;background-color:transparent;border-left-color:#f0f0f0;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-left-alt:solid #95b3d7 .5pt;mso-border-left-themecolor:accent1;mso-border-left-themetint:153;mso-border-top-alt:solid #95b3d7 .5pt;mso-border-top-themecolor:accent1;mso-border-top-themetint:153;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:153;mso-border-right-themecolor:accent1;mso-border-right-themetint:153;"&gt;           &lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;Border &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="mso-yfti-irow:3;"&gt;         &lt;td style="border-right:#95b3d7 1pt solid;border-top-color:#f0f0f0;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;border-left:#95b3d7 1pt solid;padding-right:5.4pt;width:55.35pt;background-color:transparent;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-top-alt:solid #95b3d7 .5pt;mso-border-top-themecolor:accent1;mso-border-top-themetint:153;"&gt;           &lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;cb &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-right:#95b3d7 1pt solid;border-top-color:#f0f0f0;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;padding-right:5.4pt;width:72.35pt;background-color:transparent;border-left-color:#f0f0f0;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-left-alt:solid #95b3d7 .5pt;mso-border-left-themecolor:accent1;mso-border-left-themetint:153;mso-border-top-alt:solid #95b3d7 .5pt;mso-border-top-themecolor:accent1;mso-border-top-themetint:153;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:153;mso-border-right-themecolor:accent1;mso-border-right-themetint:153;"&gt;           &lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;ComboBox &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="mso-yfti-irow:4;"&gt;         &lt;td style="border-right:#95b3d7 1pt solid;border-top-color:#f0f0f0;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;border-left:#95b3d7 1pt solid;padding-right:5.4pt;width:55.35pt;background-color:transparent;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-top-alt:solid #95b3d7 .5pt;mso-border-top-themecolor:accent1;mso-border-top-themetint:153;"&gt;           &lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;l &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-right:#95b3d7 1pt solid;border-top-color:#f0f0f0;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;padding-right:5.4pt;width:72.35pt;background-color:transparent;border-left-color:#f0f0f0;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-left-alt:solid #95b3d7 .5pt;mso-border-left-themecolor:accent1;mso-border-left-themetint:153;mso-border-top-alt:solid #95b3d7 .5pt;mso-border-top-themecolor:accent1;mso-border-top-themetint:153;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:153;mso-border-right-themecolor:accent1;mso-border-right-themetint:153;"&gt;           &lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;Label &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="mso-yfti-irow:5;"&gt;         &lt;td style="border-right:#95b3d7 1pt solid;border-top-color:#f0f0f0;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;border-left:#95b3d7 1pt solid;padding-right:5.4pt;width:55.35pt;background-color:transparent;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-top-alt:solid #95b3d7 .5pt;mso-border-top-themecolor:accent1;mso-border-top-themetint:153;"&gt;           &lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;lb &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-right:#95b3d7 1pt solid;border-top-color:#f0f0f0;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;padding-right:5.4pt;width:72.35pt;background-color:transparent;border-left-color:#f0f0f0;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-left-alt:solid #95b3d7 .5pt;mso-border-left-themecolor:accent1;mso-border-left-themetint:153;mso-border-top-alt:solid #95b3d7 .5pt;mso-border-top-themecolor:accent1;mso-border-top-themetint:153;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:153;mso-border-right-themecolor:accent1;mso-border-right-themetint:153;"&gt;           &lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;ListBox &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="mso-yfti-irow:6;"&gt;         &lt;td style="border-right:#95b3d7 1pt solid;border-top-color:#f0f0f0;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;border-left:#95b3d7 1pt solid;padding-right:5.4pt;width:55.35pt;background-color:transparent;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-top-alt:solid #95b3d7 .5pt;mso-border-top-themecolor:accent1;mso-border-top-themetint:153;"&gt;           &lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;rb &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-right:#95b3d7 1pt solid;border-top-color:#f0f0f0;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;padding-right:5.4pt;width:72.35pt;background-color:transparent;border-left-color:#f0f0f0;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-left-alt:solid #95b3d7 .5pt;mso-border-left-themecolor:accent1;mso-border-left-themetint:153;mso-border-top-alt:solid #95b3d7 .5pt;mso-border-top-themecolor:accent1;mso-border-top-themetint:153;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:153;mso-border-right-themecolor:accent1;mso-border-right-themetint:153;"&gt;           &lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;RadioButton &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="mso-yfti-irow:7;"&gt;         &lt;td style="border-right:#95b3d7 1pt solid;border-top-color:#f0f0f0;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;border-left:#95b3d7 1pt solid;padding-right:5.4pt;width:55.35pt;background-color:transparent;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-top-alt:solid #95b3d7 .5pt;mso-border-top-themecolor:accent1;mso-border-top-themetint:153;"&gt;           &lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;sl &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-right:#95b3d7 1pt solid;border-top-color:#f0f0f0;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;padding-right:5.4pt;width:72.35pt;background-color:transparent;border-left-color:#f0f0f0;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-left-alt:solid #95b3d7 .5pt;mso-border-left-themecolor:accent1;mso-border-left-themetint:153;mso-border-top-alt:solid #95b3d7 .5pt;mso-border-top-themecolor:accent1;mso-border-top-themetint:153;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:153;mso-border-right-themecolor:accent1;mso-border-right-themetint:153;"&gt;           &lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;Slider &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="mso-yfti-irow:8;"&gt;         &lt;td style="border-right:#95b3d7 1pt solid;border-top-color:#f0f0f0;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;border-left:#95b3d7 1pt solid;padding-right:5.4pt;width:55.35pt;background-color:transparent;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-top-alt:solid #95b3d7 .5pt;mso-border-top-themecolor:accent1;mso-border-top-themetint:153;"&gt;           &lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;sp &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-right:#95b3d7 1pt solid;border-top-color:#f0f0f0;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;padding-right:5.4pt;width:72.35pt;background-color:transparent;border-left-color:#f0f0f0;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-left-alt:solid #95b3d7 .5pt;mso-border-left-themecolor:accent1;mso-border-left-themetint:153;mso-border-top-alt:solid #95b3d7 .5pt;mso-border-top-themecolor:accent1;mso-border-top-themetint:153;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:153;mso-border-right-themecolor:accent1;mso-border-right-themetint:153;"&gt;           &lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;StackPanel &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="mso-yfti-irow:9;"&gt;         &lt;td style="border-right:#95b3d7 1pt solid;border-top-color:#f0f0f0;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;border-left:#95b3d7 1pt solid;padding-right:5.4pt;width:55.35pt;background-color:transparent;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-top-alt:solid #95b3d7 .5pt;mso-border-top-themecolor:accent1;mso-border-top-themetint:153;"&gt;           &lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;tb &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-right:#95b3d7 1pt solid;border-top-color:#f0f0f0;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;padding-right:5.4pt;width:72.35pt;background-color:transparent;border-left-color:#f0f0f0;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-left-alt:solid #95b3d7 .5pt;mso-border-left-themecolor:accent1;mso-border-left-themetint:153;mso-border-top-alt:solid #95b3d7 .5pt;mso-border-top-themecolor:accent1;mso-border-top-themetint:153;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:153;mso-border-right-themecolor:accent1;mso-border-right-themetint:153;"&gt;           &lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;TextBlock &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="mso-yfti-irow:10;"&gt;         &lt;td style="border-right:#95b3d7 1pt solid;border-top-color:#f0f0f0;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;border-left:#95b3d7 1pt solid;padding-right:5.4pt;width:55.35pt;background-color:transparent;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-top-alt:solid #95b3d7 .5pt;mso-border-top-themecolor:accent1;mso-border-top-themetint:153;"&gt;           &lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;tbx &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-right:#95b3d7 1pt solid;border-top-color:#f0f0f0;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;padding-right:5.4pt;width:72.35pt;background-color:transparent;border-left-color:#f0f0f0;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-left-alt:solid #95b3d7 .5pt;mso-border-left-themecolor:accent1;mso-border-left-themetint:153;mso-border-top-alt:solid #95b3d7 .5pt;mso-border-top-themecolor:accent1;mso-border-top-themetint:153;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:153;mso-border-right-themecolor:accent1;mso-border-right-themetint:153;"&gt;           &lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;TextBox &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="mso-yfti-irow:11;"&gt;         &lt;td style="border-right:#95b3d7 1pt solid;border-top-color:#f0f0f0;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;border-left:#95b3d7 1pt solid;padding-right:5.4pt;width:55.35pt;background-color:transparent;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-top-alt:solid #95b3d7 .5pt;mso-border-top-themecolor:accent1;mso-border-top-themetint:153;"&gt;           &lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;tc &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-right:#95b3d7 1pt solid;border-top-color:#f0f0f0;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;padding-right:5.4pt;width:72.35pt;background-color:transparent;border-left-color:#f0f0f0;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-left-alt:solid #95b3d7 .5pt;mso-border-left-themecolor:accent1;mso-border-left-themetint:153;mso-border-top-alt:solid #95b3d7 .5pt;mso-border-top-themecolor:accent1;mso-border-top-themetint:153;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:153;mso-border-right-themecolor:accent1;mso-border-right-themetint:153;"&gt;           &lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;TabControl &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="mso-yfti-irow:12;"&gt;         &lt;td style="border-right:#95b3d7 1pt solid;border-top-color:#f0f0f0;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;border-left:#95b3d7 1pt solid;padding-right:5.4pt;width:55.35pt;background-color:transparent;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-top-alt:solid #95b3d7 .5pt;mso-border-top-themecolor:accent1;mso-border-top-themetint:153;"&gt;           &lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;ti &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-right:#95b3d7 1pt solid;border-top-color:#f0f0f0;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;padding-right:5.4pt;width:72.35pt;background-color:transparent;border-left-color:#f0f0f0;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-left-alt:solid #95b3d7 .5pt;mso-border-left-themecolor:accent1;mso-border-left-themetint:153;mso-border-top-alt:solid #95b3d7 .5pt;mso-border-top-themecolor:accent1;mso-border-top-themetint:153;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:153;mso-border-right-themecolor:accent1;mso-border-right-themetint:153;"&gt;           &lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;TabItem &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="mso-yfti-irow:13;mso-yfti-lastrow:yes;"&gt;         &lt;td style="border-right:#95b3d7 1pt solid;border-top-color:#f0f0f0;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;border-left:#95b3d7 1pt solid;padding-right:5.4pt;width:55.35pt;background-color:transparent;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-top-alt:solid #95b3d7 .5pt;mso-border-top-themecolor:accent1;mso-border-top-themetint:153;"&gt;           &lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;vb &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-right:#95b3d7 1pt solid;border-top-color:#f0f0f0;border-bottom:#95b3d7 1pt solid;padding-bottom:0in;padding-top:0in;padding-left:5.4pt;padding-right:5.4pt;width:72.35pt;background-color:transparent;border-left-color:#f0f0f0;mso-border-alt:solid #95b3d7 .5pt;mso-border-themecolor:accent1;mso-border-themetint:153;mso-border-left-alt:solid #95b3d7 .5pt;mso-border-left-themecolor:accent1;mso-border-left-themetint:153;mso-border-top-alt:solid #95b3d7 .5pt;mso-border-top-themecolor:accent1;mso-border-top-themetint:153;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:153;mso-border-right-themecolor:accent1;mso-border-right-themetint:153;"&gt;           &lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;"&gt;&lt;span style="mso-no-proof:yes;"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:Calibri;"&gt;ViewBox &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/table&gt;   &lt;p&gt;The shortcuts above work anywhere a control is valid inside XAML. These templates will expand with a unique name. For example, pressing “b” followed by the Space or Tab key will produce the following:&lt;/p&gt;  &lt;p&gt;&lt;img title="ButtonExpansion" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="ButtonExpansion" src="http://community.devexpress.com/blogs/markmiller/ButtonExpansion_43782233.png" width="257" height="67" /&gt;&lt;/p&gt;  &lt;p&gt;I should emphasize the &lt;strong&gt;name &lt;/strong&gt;is &lt;strong&gt;unique&lt;/strong&gt;, which is useful when you’re quickly prototyping or presenting to other developers.&lt;/p&gt;  &lt;p&gt;If you want to omit the name from the expansion, just follow the template with a comma (the comma is used throughout the CodeRush template library to produce shorter versions of many templates). So if you want a nameless border, just expand the “bd,” template.&lt;/p&gt;  &lt;p&gt;&lt;img title="BorderExpansionNoName" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="BorderExpansionNoName" src="http://community.devexpress.com/blogs/markmiller/BorderExpansionNoName_3C6290D6.png" width="518" height="65" /&gt;&lt;/p&gt;  &lt;p&gt;If you’re expanding one of these controls inside a grid, you can optionally specify the location using one of these modifiers:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;r&lt;/strong&gt;&lt;em&gt;&lt;span style="color:#666666;"&gt;{RowNumber}&lt;/span&gt;&lt;/em&gt;&lt;strong&gt;c&lt;/strong&gt;&lt;em&gt;&lt;span style="color:#666666;"&gt;{ColumnNumber}&lt;/span&gt; &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;c&lt;/strong&gt;&lt;em&gt;&lt;span style="color:#666666;"&gt;{ColumnNumber}&lt;/span&gt;&lt;/em&gt;&lt;strong&gt;r&lt;/strong&gt;&lt;em&gt;&lt;span style="color:#666666;"&gt;{RowNumber}&lt;/span&gt;&lt;/em&gt;&lt;em&gt;&lt;span style="color:#666666;"&gt;&lt;/span&gt; &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;r&lt;/strong&gt;&lt;em&gt;&lt;span style="color:#666666;"&gt;{RowNumber}&lt;/span&gt;&lt;/em&gt;&lt;em&gt;&lt;span style="color:#666666;"&gt;&lt;/span&gt; &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;c&lt;/strong&gt;&lt;em&gt;&lt;span style="color:#666666;"&gt;{ColumnNumber}&lt;/span&gt;&lt;/em&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;So to place a &lt;strong&gt;T&lt;/strong&gt;ext&lt;strong&gt;B&lt;/strong&gt;lock inside &lt;strong&gt;r&lt;/strong&gt;ow &lt;strong&gt;1&lt;/strong&gt;, &lt;strong&gt;c&lt;/strong&gt;olumn &lt;strong&gt;2&lt;/strong&gt; of the parent grid, you can expand this template:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;tbr1c2&lt;/strong&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This template will do the same thing:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;tbc2r1&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;span style="color:#000000;"&gt;To omit the name, just follow the template with the comma.&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="color:#000000;"&gt;Modifying templates with grid position like we’ve seen above is optional. And as you might expect, with CodeRush, there is more than one way to get the job done…&lt;/span&gt;&lt;/p&gt;  &lt;h4&gt;&lt;span style="color:#000000;"&gt;Positioning Controls inside a Grid&lt;/span&gt;&lt;/h4&gt;  &lt;p&gt;The row and column modifiers seen above also work as stand-alone templates inside the main/start tag of a control. That means you can use any of these templates to set a control’s position within a grid:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;r&lt;/strong&gt;&lt;em&gt;&lt;span style="color:#666666;"&gt;{RowNumber}&lt;/span&gt;&lt;/em&gt;&lt;strong&gt;c&lt;/strong&gt;&lt;em&gt;&lt;span style="color:#666666;"&gt;{ColumnNumber}&lt;/span&gt; &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;c&lt;/strong&gt;&lt;em&gt;&lt;span style="color:#666666;"&gt;{ColumnNumber}&lt;/span&gt;&lt;/em&gt;&lt;strong&gt;r&lt;/strong&gt;&lt;em&gt;&lt;span style="color:#666666;"&gt;{RowNumber}&lt;/span&gt;&lt;/em&gt;&lt;em&gt;&lt;span style="color:#666666;"&gt;&lt;/span&gt; &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;r&lt;/strong&gt;&lt;em&gt;&lt;span style="color:#666666;"&gt;{RowNumber}&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;c&lt;/strong&gt;&lt;em&gt;&lt;span style="color:#666666;"&gt;{ColumnNumber}&lt;/span&gt;&lt;/em&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Also, don’t forget the &lt;strong&gt;Grid &lt;/strong&gt;| &lt;strong&gt;Position Control&lt;/strong&gt; provider shown above if you prefer a more visual approach.&lt;/p&gt;  &lt;h4&gt;Creating Grids&lt;/h4&gt;  &lt;p&gt;Need a &lt;strong&gt;g&lt;/strong&gt;rid that’s &lt;strong&gt;3x3&lt;/strong&gt;? Use the &lt;strong&gt;g3x3&lt;/strong&gt; template. &lt;/p&gt;  &lt;p&gt;Need a &lt;strong&gt;g&lt;/strong&gt;rid that’s &lt;strong&gt;2x5&lt;/strong&gt;? You guessed it – use the &lt;strong&gt;g2x5&lt;/strong&gt; template. Creating grids is easy. Just use this format:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;g&lt;/strong&gt;&lt;span style="color:#666666;"&gt;&lt;em&gt;{ColumnCount}&lt;/em&gt;&lt;strong&gt;x&lt;/strong&gt;&lt;em&gt;{RowCount}&lt;/em&gt;&lt;/span&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This animation shows how quickly you can set up a grid with the templates:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/g4x5_080EC22F.gif"&gt;&lt;img title="g4x5" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="g4x5" src="http://community.devexpress.com/blogs/markmiller/g4x5_thumb_40B96C3C.gif" width="467" height="338" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;&lt;span style="color:#dd8484;"&gt;Note: the initial 13.1 release of this template limits row and column counts to 9x9. Subsequent releases will increase this to 20x20.&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;What’s that you say? You’re more of a visual person? Typing &lt;strong&gt;g2x5&lt;/strong&gt; is too much work for you? &lt;strong&gt;It gets easier&lt;/strong&gt;. Here’s your new template:&lt;/p&gt;  &lt;blockquote&gt;   &lt;h1&gt;&amp;nbsp;&amp;nbsp; g&lt;/h1&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;span style="color:#000000;"&gt;     &lt;br /&gt;That’s right kids. You need a Grid of any size? Just hit the letter &lt;strong&gt;g &lt;/strong&gt;followed by the template expansion key (typically &lt;strong&gt;Space&lt;/strong&gt; or &lt;strong&gt;Tab&lt;/strong&gt;, depending on your settings). Here’s what you’ll get:&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="color:#000000;"&gt;&lt;img title="NewGTemplate" style="display:inline;" alt="NewGTemplate" src="http://community.devexpress.com/blogs/markmiller/NewGTemplate_02DF80DF.gif" width="681" height="560" /&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="color:#000000;"&gt;Exciting, isn’t it? On Monday I’ll show the cool new features we’ve added to the &lt;a href="http://community.devexpress.com/blogs/markmiller/archive/2012/12/03/here-s-your-game-changer-debug-visualizer-in-coderush-for-visual-studio.aspx" target="_blank"&gt;Debug Visualizer&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=370374" width="1" height="1"&gt;</content><author><name>Mark Miller (DevExpress)</name><uri>http://community.devexpress.com/members/Mark-Miller-_2800_DevExpress_2900_.aspx</uri></author></entry><entry><title>Here’s Your Game Changer: Debug Visualizer in CodeRush for Visual Studio</title><link rel="alternate" type="text/html" href="http://community.devexpress.com/blogs/markmiller/archive/2012/12/03/here-s-your-game-changer-debug-visualizer-in-coderush-for-visual-studio.aspx" /><id>http://community.devexpress.com/blogs/markmiller/archive/2012/12/03/here-s-your-game-changer-debug-visualizer-in-coderush-for-visual-studio.aspx</id><published>2012-12-04T01:22:00Z</published><updated>2012-12-04T01:22:00Z</updated><content type="html">&lt;p&gt;One of the goals of team CodeRush is to release something revolutionary, something with the power to change the way developers work, at least once a year. CodeRush 11.2 was the first tool on any platform to offer &lt;a href="http://community.devexpress.com/blogs/markmiller/archive/2011/11/29/duplicate-detection-and-consolidation-in-coderush-for-visual-studio.aspx" target="_blank"&gt;duplicate code consolidation&lt;/a&gt;. This year CodeRush 12.2 comes out of the gate with another powerful game changer: the Debug Visualizer.&lt;/p&gt;  &lt;p&gt;The Debug Visualizer attempts to eliminate a number of productivity barriers inherent with today’s debugging experience. You may have noticed:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;The debugging experience can be slow &lt;/li&gt;    &lt;li&gt;Your hands reaching for the mouse to add a watch or inspect a value &lt;/li&gt;    &lt;li&gt;Your eyes moving back and forth between code and watched values &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Sometimes when stepping through code you encounter unexpected results. Unexpected results are frequently interesting because they can reveal details about the code that were previously unknown, and they are a smell indicating a logic error or bad data. Unfortunately the time from the moment you see the unexpected result to the moment you understand why is frequently measured in minutes, not seconds. Drilling down into a complex expression or reviewing historical data leading to a potential issue involves way too many mouse clicks and keyboard shortcuts, and may even require a restart in an attempt to catch the problem where it happens. Unraveling complexity is often tedious and may require intense focus.&lt;/p&gt;  &lt;p&gt;The Debug Visualizer is here to dramatically reduce the time between unexpected data and complete understanding.&lt;/p&gt;  &lt;p&gt;Here’s how it works. &lt;/p&gt;  &lt;h3&gt;Historic Visual Record&lt;/h3&gt;  &lt;p&gt;As you step into a method the Debug Visualizer immediately gets to work, revealing values for any arguments passed into the method.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="DebugVisualizerMethodEntry" border="0" alt="DebugVisualizerMethodEntry" src="http://community.devexpress.com/blogs/markmiller/DebugVisualizerMethodEntry_6AE3F88C.png" width="460" height="92" /&gt;     &lt;br /&gt;Figure 1: The Debug Visualizer acting like a Locals window, but without the messy window.&lt;/p&gt;  &lt;p&gt;Those local values you see just below the arguments persist as you step through this method, serving as a sort of historical document on the original values on entry or assignment, which may be useful if those later change inside the method.&lt;/p&gt;  &lt;h3&gt;See Changes Right Where They Occur&lt;/h3&gt;  &lt;p&gt;When values change as you step through the code, you’ll see those changes immediately. For example, in the screenshot below we can see the value of surfaceAreaOfCylinder is 0.0.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="ValueOnLeftBeforeAssignment" border="0" alt="ValueOnLeftBeforeAssignment" src="http://community.devexpress.com/blogs/markmiller/ValueOnLeftBeforeAssignment_11B20ECD.png" width="654" height="75" /&gt;     &lt;br /&gt;Figure 2. An assignment statement before execution.&lt;/p&gt;  &lt;p&gt;Stepping over this line of code updates the local variable’s value, shown in red on the left:&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="ValueOnLeftAfterAssignment" border="0" alt="ValueOnLeftAfterAssignment" src="http://community.devexpress.com/blogs/markmiller/ValueOnLeftAfterAssignment_7EFD1515.png" width="641" height="74" /&gt;     &lt;br /&gt;Figure 3. Now we can easily see which line of code changed a variable.&lt;/p&gt;  &lt;h3&gt;Showing Function Results&lt;/h3&gt;  &lt;p&gt;One debugging task that takes far too many steps and too much time is determining the value of a function that returns a calculation. There seems to be no easy way to get to this important information quickly.&lt;/p&gt;  &lt;p&gt;Fortunately the Debug Visualizer makes this pain a thing of the past. Now when you step up to a return statement, you can see the value returned before you leave the function:&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="DebugVisualizerShowReturnResult" border="0" alt="DebugVisualizerShowReturnResult" src="http://community.devexpress.com/blogs/markmiller/DebugVisualizerShowReturnResult_1048C8A9.png" width="689" height="107" /&gt;     &lt;br /&gt;Figure 4: Easily see calculated values that functions return.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;h3&gt;Revealing the Future&lt;/h3&gt;  &lt;p&gt;In addition to documenting the past, the Debug Visualizer can also reveal the future. Step through the code and you’ll see the values for expressions on the active line &lt;strong&gt;before they are executed&lt;/strong&gt;. For example, in the code below, the Math.Sqrt() call has not been executed yet, however the future result, 42.0, can be seen right below the expression:&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="SeeTheFuture" border="0" alt="SeeTheFuture" src="http://community.devexpress.com/blogs/markmiller/SeeTheFuture_5D78C234.png" width="452" height="99" /&gt;     &lt;br /&gt;Figure 5:&amp;nbsp; The future revealed, and the answer is… 42?     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;If there is an unexpected value on the current line, many times it’s useful to know this &lt;strong&gt;before &lt;/strong&gt;the line executes. It’s much easier to step into a method call or property getter before the line executes than after:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;span style="color:#606060;"&gt;Stepping into a Method Call or Property Getter:&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="4"&gt;     &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;&lt;span style="color:#666666;"&gt;&lt;em&gt;Before &lt;/em&gt;the Line Executes&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;&lt;span style="color:#666666;"&gt;&lt;em&gt;After &lt;/em&gt;the Line Executes&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="OrangeDot" border="0" alt="OrangeDot" src="http://community.devexpress.com/blogs/markmiller/OrangeDot_78409F18.png" width="10" height="10" /&gt; Press F11 or &lt;a href="http://www.skorkin.com/2010/11/navigation-step-into-member/#.UL0eQ4M8B8E" target="_blank"&gt;Ctrl+Shift+F11&lt;/a&gt;&lt;/td&gt;        &lt;td&gt;         &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="OrangeDot" border="0" alt="OrangeDot" src="http://community.devexpress.com/blogs/markmiller/OrangeDot_78409F18.png" width="10" height="10" /&gt; Move the caret back to the problem line which might be far away if an exception occurred&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&amp;nbsp;&lt;/td&gt;        &lt;td&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="OrangeDot" border="0" alt="OrangeDot" src="http://community.devexpress.com/blogs/markmiller/OrangeDot_78409F18.png" width="10" height="10" /&gt; Press Ctrl+Shift+F10 to set the active line&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&amp;nbsp;&lt;/td&gt;        &lt;td&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="OrangeDot" border="0" alt="OrangeDot" src="http://community.devexpress.com/blogs/markmiller/OrangeDot_78409F18.png" width="10" height="10" /&gt; Wait for the line to become active&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&amp;nbsp;&lt;/td&gt;        &lt;td&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="OrangeDot" border="0" alt="OrangeDot" src="http://community.devexpress.com/blogs/markmiller/OrangeDot_78409F18.png" width="10" height="10" /&gt; Press F11 or &lt;a href="http://www.skorkin.com/2010/11/navigation-step-into-member/#.UL0eQ4M8B8E" target="_blank"&gt;Ctrl+Shift+F11&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;The future previews are here to save all those extra steps and waiting.&lt;/p&gt;  &lt;p&gt;Values of expressions involving potential side-effects that may impact program behavior are not predicted; you’ll see a Refresh button instead. Click the button or press &lt;strong&gt;Ctrl&lt;/strong&gt;+&lt;strong&gt;R&lt;/strong&gt; to see the values.&lt;/p&gt;  &lt;h3&gt;Expression Explorer&lt;/h3&gt;  &lt;p&gt;So, what happens when you encounter an unexpected value while debugging? For this section, we’ll use a simple code example, however you might want to imagine this working on an expression with greater complexity.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="UnexpectedValue" border="0" alt="UnexpectedValue" src="http://community.devexpress.com/blogs/markmiller/UnexpectedValue_50A38F68.png" width="456" height="108" /&gt;     &lt;br /&gt;Figure 6: An unexpected value.&lt;/p&gt;  &lt;p&gt;With the caret anywhere on the active statement, press &lt;strong&gt;Alt&lt;/strong&gt;+&lt;strong&gt;Down &lt;/strong&gt;to bring up the &lt;strong&gt;Expression Explorer&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="ExpressionExplorerDrillDown" border="0" alt="ExpressionExplorerDrillDown" src="http://community.devexpress.com/blogs/markmiller/ExpressionExplorerDrillDown_255EF861.png" width="484" height="155" /&gt;     &lt;br /&gt;Figure 7: Drilling into the expression.&lt;/p&gt;  &lt;p&gt;The Expression Explorer lets you drill into individual expression parts and see their corresponding values. In the screenshot above we can see the result of the call to &lt;strong&gt;Math.Sqrt()&lt;/strong&gt; is &lt;strong&gt;4.58&lt;/strong&gt; (we were expecting 5), and that the value of the expression passed into the &lt;strong&gt;Sqrt&lt;/strong&gt; call is &lt;strong&gt;21.0&lt;/strong&gt; (expecting 25).&lt;/p&gt;  &lt;p&gt;Once the Expression Explorer is up, you can move around and drill into expression parts with the arrow keys. For example, pressing the &lt;strong&gt;Down&lt;/strong&gt; arrow (using the example code above) reveals the children of the active expression:&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="ExpressionExplorerASide" border="0" alt="ExpressionExplorerASide" src="http://community.devexpress.com/blogs/markmiller/ExpressionExplorerASide_50375C73.png" width="484" height="155" /&gt;     &lt;br /&gt;Figure 8. Drilling further...&amp;nbsp; &lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;aSide * aSide == 9.0&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;The Node Map to the right shows a hierarchical representation of the expression.&amp;nbsp; You can click and drag this window to reposition it if necessary.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="NodeMap" border="0" alt="NodeMap" src="http://community.devexpress.com/blogs/markmiller/NodeMap_100142F9.png" width="112" height="112" /&gt;     &lt;br /&gt;Figure 9. The Node Map reveals the active node (emphasized with high-contrast), parent nodes in purple, other nodes in blue, and hidden child nodes in gray.&lt;/p&gt;  &lt;p&gt;Notice the high-contrast active node on the left contains two hidden children (in gray). Sometimes you just want to take a peek at the child node values without actually changing the active expression. We can toggle child expression visibility by pressing the &lt;strong&gt;spacebar&lt;/strong&gt;. Doing so in our example code produces the following:&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="ExpressionExplorerChildToggle" border="0" alt="ExpressionExplorerChildToggle" src="http://community.devexpress.com/blogs/markmiller/ExpressionExplorerChildToggle_08E20681.png" width="484" height="155" /&gt;     &lt;br /&gt;Figure 10. Spacebar toggles child expression visibility.&lt;/p&gt;  &lt;p&gt;In the screenshot above, we can see the 9.0 comes from 3.0 * 3.0.&lt;/p&gt;  &lt;p&gt;We can collapse all child expressions with the spacebar as well. Pressing spacebar again produces this:&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="ExpressionExplorerASide" border="0" alt="ExpressionExplorerASide" src="http://community.devexpress.com/blogs/markmiller/ExpressionExplorerASide_50375C73.png" width="484" height="155" /&gt;     &lt;br /&gt;Figure 11. Collapsing the child expressions with the spacebar.&lt;/p&gt;  &lt;p&gt;The “9.0” value shown above for the “aSide * aSide” expression is expected, and the child expression values look good. Our problem must be elsewhere. Let’s move right.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="ExpressionExplorerMovingRight" border="0" alt="ExpressionExplorerMovingRight" src="http://community.devexpress.com/blogs/markmiller/ExpressionExplorerMovingRight_4F5EF689.png" width="484" height="155" /&gt;     &lt;br /&gt;Figure 12. Continuing to explore…&lt;/p&gt;  &lt;p&gt;Expressions and their corresponding values are always left-aligned. &lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="ExpressionsLeftAligned" border="0" alt="ExpressionsLeftAligned" src="http://community.devexpress.com/blogs/markmiller/ExpressionsLeftAligned_0F28DD0F.png" width="126" height="67" /&gt;     &lt;br /&gt;Figure 13. Values are displayed below a horizontal line that matches the length of the corresponding expression.&lt;/p&gt;  &lt;p&gt;Let’s move down into the child expressions with the &lt;strong&gt;Down &lt;/strong&gt;arrow.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="ExpressionExplorerMovingDown" border="0" alt="ExpressionExplorerMovingDown" src="http://community.devexpress.com/blogs/markmiller/ExpressionExplorerMovingDown_1CFB230A.png" width="484" height="155" /&gt;     &lt;br /&gt;And to the right with the &lt;strong&gt;Right&lt;/strong&gt; arrow:&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="ExpressionExplorerMovingRightAgain" border="0" alt="ExpressionExplorerMovingRightAgain" src="http://community.devexpress.com/blogs/markmiller/ExpressionExplorerMovingRightAgain_5CC5098F.png" width="484" height="155" /&gt;&lt;/p&gt;  &lt;p&gt;And now we can see our problem. This reference to “&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;aSide&lt;/span&gt;” should have been a reference to “&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;bSide&lt;/span&gt;”. Now we just need to fix the code. You can close the Expression Explorer by pressing &lt;strong&gt;Escape&lt;/strong&gt;, or by clicking anywhere else in the editor. When the Expression Explorer closes, the code looks like this:&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="ExpressionExplorerClosed" border="0" alt="ExpressionExplorerClosed" src="http://community.devexpress.com/blogs/markmiller/ExpressionExplorerClosed_358AC05A.png" width="399" height="148" /&gt;     &lt;br /&gt;Figure 16. The Expression Explorer has closed, and we can still see the last values explored.&lt;/p&gt;  &lt;p&gt;With Edit and Continue enabled we can fix the code. As soon as we make any change to the code the Debug Visualizer clears the historical data in the method we’re modifying. &lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="ExpressionExplorerAfterCodeMod" border="0" alt="ExpressionExplorerAfterCodeMod" src="http://community.devexpress.com/blogs/markmiller/ExpressionExplorerAfterCodeMod_7554A6DF.png" width="393" height="71" /&gt;     &lt;br /&gt;Figure 17. After editing.&lt;/p&gt;  &lt;p&gt;Of course, after editing, you can show the Expression Explorer again by pressing &lt;strong&gt;Alt&lt;/strong&gt;+&lt;strong&gt;Down&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="ExpressionExplorerExpectedResults" border="0" alt="ExpressionExplorerExpectedResults" src="http://community.devexpress.com/blogs/markmiller/ExpressionExplorerExpectedResults_07313AAD.png" width="486" height="145" /&gt;     &lt;br /&gt;Figure 18. Results are now as expected.&lt;/p&gt;  &lt;p&gt;Here’s the Expression Explorer in action:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/Untitled_53F1E6A9.gif"&gt;&lt;img style="display:inline;" title="Untitled" alt="Untitled" src="http://community.devexpress.com/blogs/markmiller/Untitled_thumb_1A6ED6B2.gif" width="471" height="183" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And here’s the Expression Explorer scaling up to a more complex expression:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/ExpressionExplorerScalesToComplexity_6A69AF34.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="ExpressionExplorerScalesToComplexity" border="0" alt="ExpressionExplorerScalesToComplexity" src="http://community.devexpress.com/blogs/markmiller/ExpressionExplorerScalesToComplexity_thumb_10CB9280.png" width="640" height="261" /&gt;&lt;/a&gt;     &lt;br /&gt;Figure 19. The Expression Explorer scales to handle complex code.&lt;/p&gt;  &lt;h3&gt;Why is this Expression False (or True)?&lt;/h3&gt;  &lt;p&gt;Sometimes when stepping through code with Boolean expressions an unexpected result appears. For example, you expected the expression to be true, but it is false. Or maybe you expected it to be false, but it is true. When this happens, the Expression Explorer can help you quickly understand why. For example, in this method we want to rent/hire a car. However the Debug Visualizer tells us this won’t happen:&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="UnexpectedBoolean" border="0" alt="UnexpectedBoolean" src="http://community.devexpress.com/blogs/markmiller/UnexpectedBoolean_6ADED53A.png" width="747" height="266" /&gt;     &lt;br /&gt;Figure 20. The Debug Visualizer optionally adorns Boolean expressions with “&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="DebuggerVisualizerTrue" border="0" alt="DebuggerVisualizerTrue" src="http://community.devexpress.com/blogs/markmiller/DebuggerVisualizerTrue_154B0658.png" width="16" height="15" /&gt;” (true) or “&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="DebuggerVisualizerFalse" border="0" alt="DebuggerVisualizerFalse" src="http://community.devexpress.com/blogs/markmiller/DebuggerVisualizerFalse_09B54919.png" width="15" height="15" /&gt;” (false) icons.&lt;/p&gt;  &lt;p&gt;So the question is “why is this expression false?” To find out, press &lt;strong&gt;Alt&lt;/strong&gt;+&lt;strong&gt;Down&lt;/strong&gt; to bring up the Expression Explorer:&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="WhyFalse" border="0" alt="WhyFalse" src="http://community.devexpress.com/blogs/markmiller/WhyFalse_2244E669.png" width="729" height="150" /&gt;     &lt;br /&gt;Figure 21. Conclusive Boolean expressions are highlighted (in green) in the code and the Node Map (as squares)&lt;/p&gt;  &lt;p&gt;Now we can immediately see the problem. It’s here, highlighted in green:&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="ConclusiveBoolean" border="0" alt="ConclusiveBoolean" src="http://community.devexpress.com/blogs/markmiller/ConclusiveBoolean_4CB11786.png" width="264" height="49" /&gt;     &lt;br /&gt;Figure 22. Conclusive Boolean expressions determine the value of their parent expressions&lt;/p&gt;  &lt;p&gt;A parent Boolean expression might contain one or more conclusive Boolean child expressions. In this example there is only one. Let’s navigate into it to get more detail. Press the Right arrow to move right and select the conclusive Boolean expression:&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="ConclusiveBooleanSelected" border="0" alt="ConclusiveBooleanSelected" src="http://community.devexpress.com/blogs/markmiller/ConclusiveBooleanSelected_281F8A02.png" width="738" height="156" /&gt;     &lt;br /&gt;Figure 23. The conclusive Boolean expression, shown as a square in the Node Map, is selected.&lt;/p&gt;  &lt;p&gt;And now press the &lt;strong&gt;Down&lt;/strong&gt; arrow (or &lt;strong&gt;spacebar&lt;/strong&gt;) to see the children of this expression:&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="ConclusiveBooleanDetail" border="0" alt="ConclusiveBooleanDetail" src="http://community.devexpress.com/blogs/markmiller/ConclusiveBooleanDetail_07984A50.png" width="271" height="175" /&gt;     &lt;br /&gt;Figure 24. And now we see why we can’t rent/hire the car.&lt;/p&gt;  &lt;p&gt;Highlighting conclusive expressions is useful for understanding why Boolean expressions are true or false.&lt;/p&gt;  &lt;h3&gt;Evaluating Expressions with Side Effects&lt;/h3&gt;  &lt;p&gt;Sometimes an expression might contain a method call or property getter access with potential side-effects. If CodeRush is unable to verify that the call is free of side-effects, the Debug Visualizer will display a Refresh button. As long as the line of code is active you can click this button (or Press &lt;strong&gt;Ctrl&lt;/strong&gt;+&lt;strong&gt;R&lt;/strong&gt;) to call into the method and get the result.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="ClickToRefresh" border="0" alt="ClickToRefresh" src="http://community.devexpress.com/blogs/markmiller/ClickToRefresh_2027E7A0.png" width="546" height="92" /&gt;     &lt;br /&gt;Figure 25. Calls with potential side-effects (e.g., the call to “&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;Exists()&lt;/span&gt;”) are highlighted.&lt;/p&gt;  &lt;p&gt;Note that even though an expression preview may be marked with a Refresh button, it may still be possible to drill down into its children to see their values without refreshing. For example, in the screenshot above, the Exists call prevents evaluation of the parent expression, however you can still see an evaluation of the “drive + path” expression.&lt;/p&gt;  &lt;h3&gt;The Debug Visualizer is Here Now&lt;/h3&gt;  &lt;p&gt;So there’s your game-changer for 2012, kids. Faster expression evaluation, historical record of changes, future reveal, function return preview, expression drill down, conclusive Boolean highlighting and important data always right where you need it – right in the source code. It works in C# and Visual Basic and is available right now in CodeRush 12.2 for Visual Studio. JavaScript support is expected in the next minor update. Give it a try and let us know what you think.&lt;/p&gt;&lt;p&gt;...&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;UPDATE&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;A file lock issue experienced by some developers has been fixed since the 12.2 release. You can get the update &lt;a href="http://downloads.devexpress.com/Share/IDE/121205/CodeRush-12.2.4.12340.exe"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=369346" width="1" height="1"&gt;</content><author><name>Mark Miller (DevExpress)</name><uri>http://community.devexpress.com/members/Mark-Miller-_2800_DevExpress_2900_.aspx</uri></author></entry><entry><title>Consolidating Duplicate Code in Visual Studio – Easy with CodeRush</title><link rel="alternate" type="text/html" href="http://community.devexpress.com/blogs/markmiller/archive/2012/05/08/consolidating-duplicate-code-in-visual-studio-easy-with-coderush.aspx" /><id>http://community.devexpress.com/blogs/markmiller/archive/2012/05/08/consolidating-duplicate-code-in-visual-studio-easy-with-coderush.aspx</id><published>2012-05-08T20:00:00Z</published><updated>2012-05-08T20:00:00Z</updated><content type="html">&lt;p&gt;On Twitter last week a developer mentioned a competing developer tool, inferring its clone detection and consolidation abilities were similar to what we were already shipping with CodeRush. Skeptical (I had looked into this tool once before months ago), I decided to dig deeper and found a video showing how to consolidate code with the tool. I watched a developer show step-by-step how to &lt;strong&gt;manually consolidate duplicate code&lt;/strong&gt; found by the tool. Steps included determining the differences between the blocks of code and then manually removing them in each of the duplicated methods, then extracting one of the methods, then copying a method call and pasting it over each of the other duplicate methods. The entire process took &lt;strong&gt;nine minutes and 43 seconds&lt;/strong&gt;. Wow.&lt;/p&gt;  &lt;p&gt;In the video the developer only worked with &lt;strong&gt;two &lt;/strong&gt;duplicates, and those duplicates were both located in the same class; you could see the proposed solution would become incredibly difficult and error-prone to perform manually for duplicates in larger numbers or spread across classes.&lt;/p&gt;  &lt;p&gt;I consider the video a demonstration of &lt;strong&gt;how our ancestors used to consolidate code&lt;/strong&gt;, back in the old days when dinosaurs roamed the earth. &lt;/p&gt;  &lt;p&gt;Here’s how you do it today with CodeRush:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Open the project inside Visual Studio. The screenshots in this post are using the &lt;a href="http://codecampserver.codeplex.com/SourceControl/changeset/changes/4755c1386bff"&gt;same source code sample&lt;/a&gt; I saw in the demo.       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;CodeRush lists duplicates on the Duplicate Code tool window. Here are the duplicates CodeRush has found (on an extremely granular setting – you can adjust settings in Options):      &lt;br /&gt;      &lt;br /&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/DuplicatesFound_6D49496F.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="DuplicatesFound" alt="DuplicatesFound" src="http://community.devexpress.com/blogs/markmiller/DuplicatesFound_thumb_7D08DE73.png" border="0" height="430" width="640" /&gt;&lt;/a&gt;       &lt;br /&gt;In the screenshot above I’ve circled the important differences.       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Double-click one of the duplicates. This takes you to the code and brings up the Consolidate Duplicate Code UI.      &lt;br /&gt;      &lt;br /&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="ToTheCurrentClass" alt="ToTheCurrentClass" src="http://community.devexpress.com/blogs/markmiller/ToTheCurrentClass_507FAE8D.png" border="0" height="258" width="761" /&gt;       &lt;br /&gt;The preview hint shows you the duplication will be turned into a single method inside the class &lt;strong&gt;UINameHelper&lt;/strong&gt;.       &lt;br /&gt;      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Select “&lt;strong&gt;to the current class&lt;/strong&gt;”. The Target Picker (with a handy preview) lets you decide where to insert the new method:       &lt;br /&gt;      &lt;br /&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="TargetPicker" alt="TargetPicker" src="http://community.devexpress.com/blogs/markmiller/TargetPicker_68A318E8.png" border="0" height="257" width="1444" /&gt;       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;The &lt;strong&gt;Up/Down&lt;/strong&gt; arrows change the target location.&amp;nbsp; I press &lt;strong&gt;Enter &lt;/strong&gt;to accept the position and generate the consolidated method. Here it is:       &lt;br /&gt;      &lt;br /&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="ExtractedConsolidatedMethod" alt="ExtractedConsolidatedMethod" src="http://community.devexpress.com/blogs/markmiller/ExtractedConsolidatedMethod_2E47A307.png" border="0" height="123" width="881" /&gt;       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Let’s rename it to “BuildUINameFrom”. CodeRush updates the calling methods automatically:      &lt;br /&gt;      &lt;br /&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="ConsolidatedMethodCalls" alt="ConsolidatedMethodCalls" src="http://community.devexpress.com/blogs/markmiller/ConsolidatedMethodCalls_58B3D424.png" border="0" height="209" width="563" /&gt;       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Then I rename the parameters in the consolidated method:      &lt;br /&gt;      &lt;br /&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="RenameParameters" alt="RenameParameters" src="http://community.devexpress.com/blogs/markmiller/RenameParameters_5EFAAAB2.png" border="0" height="510" width="1099" /&gt;       &lt;br /&gt;      &lt;br /&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;strong&gt;And I’m done. &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Elapsed time: &lt;strong&gt;About two minutes &lt;/strong&gt;(which includes two full runs of all the test cases)&lt;strong&gt;. &lt;/strong&gt;Kids, let me tell you why it’s important to work in the future rather than the past: Because spending ten minutes making high-risk manual changes is senseless when you can do it safely in seconds with CodeRush.&lt;/p&gt;  &lt;p&gt;Here’s the video showing how fast it is:&lt;/p&gt;  &lt;p&gt;&lt;iframe src="http://www.youtube.com/embed/zBKMHzUvwIU" height="315" width="560"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;Note we start the video from an empty Visual Studio (no solution loaded). As we load the solution watch how quickly the Duplicate Code window fills up. You can also see the Test Runner collect unit tests and populate itself in seconds as well. &lt;strong&gt;Nothing is faster than CodeRush&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devexpress.com/Products/Visual_Studio_Add-in/Coding_Assistance/"&gt;CodeRush&lt;/a&gt; is still &lt;strong&gt;the only tool &lt;/strong&gt;that can consolidate your duplicate code automatically across classes and projects. For more information on CodeRush, &lt;a href="http://www.devexpress.com/coderush"&gt;click here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=367816" width="1" height="1"&gt;</content><author><name>Mark Miller (DevExpress)</name><uri>http://community.devexpress.com/members/Mark-Miller-_2800_DevExpress_2900_.aspx</uri></author></entry><entry><title>Duplicate Detection and Consolidation in CodeRush for Visual Studio</title><link rel="alternate" type="text/html" href="http://community.devexpress.com/blogs/markmiller/archive/2011/11/29/duplicate-detection-and-consolidation-in-coderush-for-visual-studio.aspx" /><id>http://community.devexpress.com/blogs/markmiller/archive/2011/11/29/duplicate-detection-and-consolidation-in-coderush-for-visual-studio.aspx</id><published>2011-11-29T09:45:00Z</published><updated>2011-11-29T09:45:00Z</updated><content type="html">&lt;p&gt;CodeRush 11.2 introduces a new feature we’re very excited about. It’s called Duplicate Detection and Consolidation (DDC) and it’s revolutionary.&lt;/p&gt;  &lt;h2&gt;Background&lt;/h2&gt;  &lt;p&gt;Duplicate code, sometimes referred to as clones, is a cluster of code blocks that are functionally equivalent (or nearly equivalent) spanning across two or more locations within a solution. Duplicate code is expensive to maintain because:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Multiplied bugs. A bug in one clone means there’s a bug in all the copies. This can lead to a continued, repeated release of previously-fixed bugs as each copy of the bug is individually discovered by a customer and then fixed by the team. &lt;/li&gt;    &lt;li&gt;Flexibility barriers. If the copied code needs to be more flexible, changes need to be made across all the copies or ideally, the copies need to be consolidated first. Unfortunately consolidation is a high-risk, error-prone, time-consuming activity. &lt;/li&gt;    &lt;li&gt;Increased ramp-up time. Copy the code and new developers trying to get up to speed will have twice as much code to read and understand. If discovered, duplicated code tends to be harder to understand than normal code because the reader must not only understand functionality, but also understand the reason behind the duplication. &lt;/li&gt; &lt;/ol&gt;  &lt;h2&gt;Reaching into the Future&lt;/h2&gt;  &lt;p&gt;Because duplicate code is such an expensive problem, for years tools have been developed to detect duplicate code, each achieving various degrees of success. So you might wonder, after so many years of development, what makes CodeRush’s DDC so revolutionary?&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;Speed&lt;/strong&gt;. CodeRush has the fastest duplicate code detection available for .NET. It’s &lt;strong&gt;17 times faster &lt;/strong&gt;than the duplicate code detection currently available in the Visual Studio 11 preview. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Integration&lt;/strong&gt;. DD runs in a background thread while you work in Visual Studio. Duplicate code is highlighted on screen so you know exactly what you’re working with before you change the code. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Functional Equivalence&lt;/strong&gt;. The CodeRush duplication detection engine is built to understand functionally equivalent code. In 11.2, we take baby steps in this direction. However, by 12.1 we expect to really be blowing minds in this area, matching structurally distinct yet functionally equivalent blocks of code. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Consolidation&lt;/strong&gt;. CodeRush is the first and only tool on this planet to offer the ability to immediately consolidate duplication into a single block of code, directly from the IDE. Not only is CodeRush first, but Team CodeRush has delivered an impressive solution. &lt;/li&gt; &lt;/ol&gt;  &lt;h2&gt;The Complexity of Consolidation&lt;/h2&gt;  &lt;h2&gt;&lt;/h2&gt;  &lt;p&gt;To give you an idea of just how impressive duplicate consolidation is, let’s take a look at what needs to happen to consolidate:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;You need to understand not only the similarities, but also the differences among the code blocks. Differences can be parameterized.&lt;/li&gt;    &lt;li&gt;If the duplicate blocks of code are functionally equivalent but structurally distinct, then a decision needs to be made - upon which of the duplicate blocks should we base the consolidation?&lt;/li&gt;    &lt;li&gt;You need to offer a variety of consolidation solutions so the developer can pick the one that fits best. For example, you could consolidate to a new method in a class, create a new ancestor class, or create a new helper class.&lt;/li&gt;    &lt;li&gt;You need to understand and respect project boundaries. In many cases duplication between projects survives beyond initial discovery because consolidating is time consuming and may require the creation of a new project.&amp;nbsp; If a new project is created, the appropriate references need to be added. Regardless of whether we’re creating a new project or moving code from one existing project to another, we need to verify that we can do this without creating any circular references.&lt;/li&gt;    &lt;li&gt;Types need to be correctly resolved. You might have two classes with the same name declared in different namespaces in your solution. The consolidated code must have the correct namespace imports to ensure that all the types are correctly resolved.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;As a result, the steps to consolidate by hand are many, complex, error-prone, and high-risk. Only the best developers are brave enough to venture forth in this domain, and if they do, they are best advised to bring a paired programmer along for the ride.&lt;/p&gt;  &lt;h2&gt;Enter CodeRush 11.2&lt;/h2&gt;  &lt;p&gt;This changes everything. From this day forward, the quality of code is going up. Let’s take a simple example. I have a class named Mortal, which looks like this:&lt;/p&gt; &lt;span style="font-family:Consolas;"&gt;   &lt;/span&gt;&lt;blockquote&gt;          &lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;class&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;Mortal         &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;{       &lt;br /&gt;&amp;nbsp; &lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;protected&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;List&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;Mortal&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;&amp;gt; friends = &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;List&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;Mortal&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;&amp;gt;();         &lt;br /&gt;&lt;/span&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; Name { &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;get&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;set&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;; }       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;}&lt;/span&gt;   &lt;p&gt;And a descendant named Human, which has a FindHuman method:&lt;/p&gt; &lt;span style="font-family:Consolas;"&gt;   &lt;/span&gt;&lt;blockquote&gt;          &lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;class&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;Human&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; : &lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;Mortal         &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;{       &lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;Mortal&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; FindHuman(&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; name)       &lt;br /&gt;&amp;nbsp; {        &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;Mortal&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; mortal = &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;null&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;;       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; (&lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;Mortal&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; friend &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;in&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; friends)       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {        &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; (&lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;String&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;.Compare(friend.Name, name, &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;false&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;) == 0)       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {        &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;Console&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;.WriteLine(&lt;/span&gt;&lt;span style="font-family:Consolas;color:#800000;"&gt;&lt;span style="font-family:Consolas;color:#800000;"&gt;&amp;quot;Found a Human: &amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; + friend.Name);       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mortal = friend;        &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;break&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;;       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }        &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }        &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;return&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; mortal;       &lt;br /&gt;&amp;nbsp; }        &lt;br /&gt;}&lt;/span&gt;   &lt;p&gt;So far so good. But now, let’s do something incredibly dangerous. We’re going to make a copy of this Human class and perform a search and replace, “Human” for “Martian”…&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;class&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;Martian&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; : &lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;Mortal         &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;{       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&amp;nbsp; public&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;Mortal&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; FindMartian(&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; name)       &lt;br /&gt;&amp;nbsp; {        &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Mortal&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; mortal = &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;null&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;;       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; (&lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;Mortal&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; friend &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;in&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; friends)       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {        &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; (&lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;String&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;.Compare(friend.Name, name, &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;false&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;) == 0)       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {        &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;.WriteLine(&lt;/span&gt;&lt;span style="font-family:Consolas;color:#800000;"&gt;&lt;span style="font-family:Consolas;color:#800000;"&gt;&amp;quot;Found a Martian: &amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; + friend.Name);       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mortal = friend;        &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;;       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }        &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }        &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; mortal;       &lt;br /&gt;&amp;nbsp; }        &lt;br /&gt;}&lt;/span&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;But let’s continue to change the code. Let’s introduce a few local variables, rename “mortal” to “myFavoriteMartian”, remove the unnecessary curly braces around the if-block, and change case-sensitivity of the String.Compare call so it ignores case (as one might expect with Martian names)…&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;class&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;Martian&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; : &lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;Mortal         &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;{       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&amp;nbsp; public&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;Mortal&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; FindMartian(&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; name)       &lt;br /&gt;&amp;nbsp; {        &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Mortal&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; myFavoriteMartian = &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;null&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;;       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;bool&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; ignoreCase = &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;true&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;;         &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; msg = &lt;/span&gt;&lt;span style="font-family:Consolas;color:#800000;"&gt;&lt;span style="font-family:Consolas;color:#800000;"&gt;&amp;quot;Found a Martian: &amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;;         &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;foreach&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; (&lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;Mortal&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; friend &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;in&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; friends)       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; (&lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;String&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;.Compare(friend.Name, name, &lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;&lt;span style="font-family:Consolas;"&gt;ignoreCase&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;) == 0)       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {        &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;.WriteLine(&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;&lt;span style="font-family:Consolas;"&gt;msg &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;+ friend.Name);       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myFavoriteMartian = friend;        &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;;       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }        &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; myFavoriteMartian;       &lt;br /&gt;&amp;nbsp; }        &lt;br /&gt;}&lt;/span&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;And now we have some code that is functionally equivalent, but structurally distinct. Can CodeRush find this? It can, providing we drop the Analysis Level down to 2, so the detection engine can see this smaller code block (the default level is set to 3, which is a slightly larger block):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/BlockSettings_67B43BB5.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="BlockSettings" border="0" alt="BlockSettings" src="http://community.devexpress.com/blogs/markmiller/BlockSettings_thumb_517E2063.png" width="680" height="481" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; Here’s what the code looks like inside Visual Studio:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/HumansAndMartians_44A3CA45.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="HumansAndMartians" border="0" alt="HumansAndMartians" src="http://community.devexpress.com/blogs/markmiller/HumansAndMartians_thumb_1C911B26.png" width="680" height="280" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;On the left of the gutter in each view, you see a thin purple vertical bar. This means duplicate code exists elsewhere. Also, in the bottom right, the “!!” icon signals CodeRush has detected duplicates inside the solution. If you hover over the icon in the bottom&amp;nbsp;right, a hint appears to explain the status.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="DuplicatesFound" border="0" alt="DuplicatesFound" src="http://community.devexpress.com/blogs/markmiller/DuplicatesFound_5CA8228E.png" width="386" height="157" /&gt;&lt;/p&gt;  &lt;p&gt;You can click the icon to see a summary of all duplicate clusters found inside the new Duplicate Code tool window. In this case, our simple example, only one cluster is found:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/DuplicateCodeWindow_6D5F2F8E.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="DuplicateCodeWindow" border="0" alt="DuplicateCodeWindow" src="http://community.devexpress.com/blogs/markmiller/DuplicateCodeWindow_thumb_1354DFE5.png" width="684" height="203" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;On the left is a list of all clusters found, sorted by redundancy (the total amount of redundant code that could be removed if consolidated). Note that because we are sorting by redundancy, it’s possible for a very small block of code (duplicated many times) to appear &lt;em&gt;above &lt;/em&gt;a very large duplicate block of code (that only appears twice).&lt;/p&gt;  &lt;p&gt;On the right is a preview of the duplicate code. You can double-click any duplicate code preview to be taken directly to that location. When you do this, CodeRush immediately presents the consolidation hint, which looks like this:&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="ConsolidationHint" border="0" alt="ConsolidationHint" src="http://community.devexpress.com/blogs/markmiller/ConsolidationHint_53D81A42.png" width="602" height="429" /&gt;&lt;/p&gt;  &lt;p&gt;Notice the mouse is positioned right over the “Next duplicate block” button, in case you want to navigate and compare the blocks. This might be useful when it’s time to consolidate. The block you consolidate from determines the structure of the consolidated block. So let’s consolidate from the FindMartian method. Click the “Next duplicate block” button, then move the mouse over the “to the base class” consolidation option. You’ll see a preview hint that looks like this:&lt;/p&gt;        &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/ConsolidationHint2_12104706.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="ConsolidationHint2" border="0" alt="ConsolidationHint2" src="http://community.devexpress.com/blogs/markmiller/ConsolidationHint2_thumb_231474E9.png" width="680" height="291" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Notice the parameters to FindMartianExtracted – CodeRush takes the code that differs between the blocks and turns them into parameters. Press &lt;strong&gt;Enter&lt;/strong&gt; to apply the consolidation. The target picker will appear letting you select the location of the consolidated method.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/TargetPicker_68B8FF07.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="TargetPicker" border="0" alt="TargetPicker" src="http://community.devexpress.com/blogs/markmiller/TargetPicker_thumb_67746628.png" width="680" height="198" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The target picker shows the block of code that will be inserted. It’s based upon the structure of the method where we initiated the consolidation (FindMartian). Let’s press &lt;strong&gt;Escape &lt;/strong&gt;to cancel and back out of this, and then see what happens when we initiate consolidation from the other duplicate…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/ConsolidateFromHuman_3F61B709.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="ConsolidateFromHuman" border="0" alt="ConsolidateFromHuman" src="http://community.devexpress.com/blogs/markmiller/ConsolidateFromHuman_thumb_6557675F.png" width="680" height="283" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now consolidate to the base class Mortal. We’ll see the target picker. Notice how the FindHumanExtracted consolidated code in the preview below differs from the&amp;nbsp;FindMartianExtracted&amp;nbsp;consolidated code in the preview shown two screen shots above.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/TargetPicker2_4B16FE3B.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="TargetPicker2" border="0" alt="TargetPicker2" src="http://community.devexpress.com/blogs/markmiller/TargetPicker2_thumb_782BEB09.png" width="680" height="201" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;nbsp;Just use the &lt;strong&gt;up&lt;/strong&gt;/&lt;strong&gt;down &lt;/strong&gt;arrow buttons to select a location and press &lt;strong&gt;Enter &lt;/strong&gt;to accept it. Now we’re left with a small task of coming up with good names for the consolidated method and its parameters.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="RenamingParameters" border="0" alt="RenamingParameters" src="http://community.devexpress.com/blogs/markmiller/RenamingParameters_7CB3097E.png" width="627" height="405" /&gt;&lt;/p&gt;  &lt;p&gt;And the calling code is simplified:&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="CallingCodeSimplified" border="0" alt="CallingCodeSimplified" src="http://community.devexpress.com/blogs/markmiller/CallingCodeSimplified_77FE9B1F.png" width="535" height="652" /&gt;&lt;/p&gt;          &lt;p&gt;And that’s it (for a simple consolidation example)! &lt;/p&gt;  &lt;h2&gt;An Even Bigger Example&lt;/h2&gt;  &lt;p&gt;But what happens when the project is much bigger? The good news is, that the detection scales well for large solutions, taking only seconds (at most a few minutes) to scan thousands of files for duplicates at the default settings (Analysis Level set to 3). Let’s take a look at DDC with the source to &lt;a href="http://umbraco.com/" target="_blank"&gt;Umbraco&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Here’s cluster #4 selected. The Lowest and Highest methods inside the ExsltMath class:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/Cluster4Umbraco_703448A7.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="Cluster4Umbraco" border="0" alt="Cluster4Umbraco" src="http://community.devexpress.com/blogs/markmiller/Cluster4Umbraco_thumb_75A2B94B.png" width="680" height="422" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Nearly identical blocks of code. However note the real difference is in the operator used to compare &lt;strong&gt;t &lt;/strong&gt;against &lt;strong&gt;min &lt;/strong&gt;(and &lt;strong&gt;max&lt;/strong&gt;). On the left you have “t &amp;lt; min”, and on the right you have “t &amp;gt; max”. Can CodeRush consolidate this duplicate? It can. Here’s the preview hint:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/PreviewHintUmbraco_33BBD3FD.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="PreviewHintUmbraco" border="0" alt="PreviewHintUmbraco" src="http://community.devexpress.com/blogs/markmiller/PreviewHintUmbraco_thumb_6B8E1820.png" width="684" height="256" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And after consolidation (and renaming the method, the “min” local, and the “func” parameter), I get this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/AfterConsolidation_49C23F8F.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="AfterConsolidation" border="0" alt="AfterConsolidation" src="http://community.devexpress.com/blogs/markmiller/AfterConsolidation_thumb_6898B36D.png" width="684" height="648" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And now the quality of the code is much higher than it was before.&lt;/p&gt;  &lt;p&gt;Remember, CodeRush has the &lt;strong&gt;fastest duplicate code detection available for .NET.&lt;/strong&gt; It works in the background and shows when you’re working inside a method that is cloned. Consolidation is based on the structure of the method you start from. While CodeRush can consolidate many kinds of duplicate blocks, not all duplicate blocks can be consolidated automatically (trust me, this is an incredibly challenging problem to solve). But we’re working on making the consolidation engine even smarter and even more extensive as we approach the 12.1 release (and we expect to blow your mind again with that one).&lt;/p&gt;  &lt;p&gt;Do me a favor, kids: Tell every developer you know about CodeRush’s Duplicate Detection and Consolidation. DDC is truly revolutionary; help us spread the word.&lt;/p&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=359570" width="1" height="1"&gt;</content><author><name>Mark Miller (DevExpress)</name><uri>http://community.devexpress.com/members/Mark-Miller-_2800_DevExpress_2900_.aspx</uri></author></entry><entry><title>Advanced CodeRush Plug-ins: Converting an Object Initializer into a Constructor</title><link rel="alternate" type="text/html" href="http://community.devexpress.com/blogs/markmiller/archive/2011/06/22/advanced-coderush-plug-ins-converting-an-object-initializer-into-a-constructor.aspx" /><id>http://community.devexpress.com/blogs/markmiller/archive/2011/06/22/advanced-coderush-plug-ins-converting-an-object-initializer-into-a-constructor.aspx</id><published>2011-06-22T16:16:00Z</published><updated>2011-06-22T16:16:00Z</updated><content type="html">&lt;p&gt;Today Rory Becker and I presented an Advanced CodeRush Plug-ins session, showing how to create CodeProviders and RefactoringProviders. These providers show up on the CodeRush/Refactor menu, like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/RefactoringMenu_26AFD837.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="RefactoringMenu" border="0" alt="RefactoringMenu" src="http://community.devexpress.com/blogs/markmiller/RefactoringMenu_thumb_37B4061A.png" width="646" height="294" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The session included several moments where we tasted sweet success, and at least one tough coding segment where we were pushing through some challenging code.&lt;/p&gt;  &lt;p&gt;The new feature converts code like this:&lt;/p&gt; &lt;span style="font:18px Consolas;"&gt;&lt;span&gt;&lt;span&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp; Box&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family:Consolas;font-size:18px;"&gt;box&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style="font:18px Consolas;"&gt;&lt;span&gt;&lt;span&gt;&lt;span style="color:#0000ff;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Box&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font:18px Consolas;"&gt;&lt;span style="font:18px Consolas;"&gt;&lt;span style="font:18px Consolas;"&gt;) { Height = 33, Width = 44, Depth = 22 };&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;  &lt;p&gt;into this:&lt;/p&gt; &lt;span style="color:#2b91af;"&gt;&lt;span style="color:#2b91af;"&gt;&lt;span style="color:#2b91af;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="font-size:18px;font-family:Consolas;color:#2b91af;"&gt;&amp;nbsp; Box&amp;nbsp;&lt;/span&gt;&lt;span style="font:18px Consolas;"&gt;&lt;span style="color:#000000;"&gt;box =&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family:Consolas;font-size:18px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="color:#0000ff;"&gt;new&amp;nbsp;&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Box&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font:18px Consolas;"&gt;&lt;span style="font:18px Consolas;"&gt;&lt;span style="color:#000000;"&gt;(33, 44, 22);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;and creates a constructor if needed.&lt;/p&gt;  &lt;p&gt;At the end of the two-hour session, we were left with a refactoring that worked, but a CodeProvider that needed more effort. The CodeProvider was challenging because it needed to modify code in two places (it is adding a constructor and replacing the object initializer with a call to new constructor), potentially in two files.&lt;/p&gt;  &lt;p&gt;Here’s an overview of the points we learned in the session:&lt;/p&gt;&lt;p&gt;1. The &lt;a href="http://www.devexpress.com/Support/Center/kb/p/K18031.aspx" target="_blank"&gt;Expressions Lab&lt;/a&gt;&amp;nbsp;can reveal many of the hidden details behind the source code you want to analyze or generate.&lt;/p&gt;&lt;p&gt;2.&amp;nbsp;The &lt;strong&gt;ObjectCreationExpression &lt;/strong&gt;class represents a call to a constructor.&lt;/p&gt;&lt;p&gt;3. &lt;strong&gt;ObjectCreationExpression &lt;/strong&gt;elements have three interesting properties:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;     &lt;li&gt;&lt;strong&gt;Arguments &lt;/strong&gt;– the parameters to the constructor call, if any&lt;/li&gt;      &lt;li&gt;&lt;strong&gt;ObjectType &lt;/strong&gt;– a reference to the type being constructed&lt;/li&gt;      &lt;li&gt;&lt;strong&gt;ObjectInitializer &lt;/strong&gt;– an ObjectInitializerExpression (if the constructor call includes an initializer).&lt;/li&gt;&lt;/ul&gt;4. &lt;strong&gt;ObjectInitializerExpression &lt;/strong&gt;has one interesting property:&lt;br /&gt;&lt;ul&gt;    &lt;/ul&gt;&lt;ul&gt;     &lt;li&gt;&lt;strong&gt;Initializers &lt;/strong&gt;– a collection of MemberInitializerExpressions&lt;/li&gt;&lt;/ul&gt;5. &lt;strong&gt;MemberInitializerExpression &lt;/strong&gt;has two interesting properties:&lt;br /&gt;&lt;ul&gt;     &lt;li&gt;&lt;strong&gt;Name &lt;/strong&gt;– the property name being assigned.&lt;/li&gt;      &lt;li&gt;&lt;strong&gt;Value &lt;/strong&gt;– the value assigned to the property in the initializer expression.&lt;/li&gt;   &lt;/ul&gt;6. &lt;strong&gt;MemberInitializerExpression &lt;/strong&gt;also has an interesting method, &lt;strong&gt;Resolve&lt;/strong&gt;, which allows us to determine the type of the initializer argument. &lt;p&gt;&lt;/p&gt;&lt;p&gt;7. We can use the &lt;strong&gt;FileChange &lt;/strong&gt;object to queue up changes to multiple files.   &lt;/p&gt;&lt;p&gt;At the end of the webinar, we encountered an issue where the CodeProvider wouldn’t generate any code. The problem was due to this line of code which set the source file &lt;strong&gt;Path &lt;/strong&gt;property of a &lt;strong&gt;FileChange &lt;/strong&gt;instance to the folder holding the text document (but not the actual file name):   &lt;br /&gt;    &lt;br /&gt;&lt;span style="font:18px Consolas;"&gt;&lt;span style="font:18px Consolas;"&gt;&amp;nbsp; newConstructor.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size:18px;font-family:Consolas;"&gt;Path =&amp;nbsp;&lt;span style="color:#2b91af;"&gt;&lt;span style="color:#2b91af;"&gt;&lt;span style="color:#2b91af;"&gt;CodeRush&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="color:#000000;"&gt;.Documents.ActiveTextDocument&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font:18px Consolas;"&gt;&lt;span style="font:18px Consolas;"&gt;.Path;&lt;/span&gt;&lt;/span&gt;    &lt;br /&gt;    &lt;br /&gt;it should have been this:    &lt;br /&gt;    &lt;br /&gt;&lt;span style="font:18px Consolas;"&gt;&lt;span style="font:18px Consolas;"&gt;&amp;nbsp; newConstructor.Path = &lt;span style="color:#2b91af;"&gt;&lt;span style="color:#2b91af;"&gt;&lt;span style="color:#2b91af;"&gt;CodeRush&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font:18px Consolas;"&gt;&lt;span style="font:18px Consolas;"&gt;&lt;span style="color:#000000;"&gt;.Documents.ActiveTextDocument.FileNode.Name&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span style="font:18px Consolas;"&gt;&lt;span style="font:18px Consolas;"&gt;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;Correcting the two places where we set FileChange’s Path property enabled the plug-in to generate code correctly. We’ll record a part 2 to this webinar where we’ll see this fix and wrap up all remaining issues:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Fix the FileChange code generation.&lt;/li&gt;    &lt;li&gt;Add code that transfers parameters to the properties.&lt;/li&gt;    &lt;li&gt;Declare parameters in the developer’s preferred style.&lt;/li&gt;    &lt;li&gt;Test, and handle any new issues found.&lt;/li&gt; &lt;/ol&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=347833" width="1" height="1"&gt;</content><author><name>Mark Miller (DevExpress)</name><uri>http://community.devexpress.com/members/Mark-Miller-_2800_DevExpress_2900_.aspx</uri></author></entry><entry><title>New CodeRush Feature: Quick Pair (Parens, Brackets, Quotes, etc.) for Visual Studio</title><link rel="alternate" type="text/html" href="http://community.devexpress.com/blogs/markmiller/archive/2011/06/01/new-coderush-feature-quick-pair-parens-brackets-quotes-etc-for-visual-studio.aspx" /><id>http://community.devexpress.com/blogs/markmiller/archive/2011/06/01/new-coderush-feature-quick-pair-parens-brackets-quotes-etc-for-visual-studio.aspx</id><published>2011-06-01T21:31:50Z</published><updated>2011-06-01T21:31:50Z</updated><content type="html">&lt;p&gt;Today was the first &lt;strong&gt;CodeRush Feature Wednesday&lt;/strong&gt; webinar presented by &lt;a href="http://www.devexpress.com/rory" target="_blank"&gt;Rory Becker&lt;/a&gt; and myself. And for our first feature we decided to implement something I wanted – a better way to enter paired delimiters in code. When entering paired delimiters, there seem to be a number of common scenarios:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Enter the pair and move on (for example, parens in a C# method call that takes no arguments) &lt;/li&gt;    &lt;li&gt;Enter the pair and place the caret between the pair (but then you have the challenge of moving outside the pair) &lt;/li&gt;    &lt;li&gt;Surround a selection with the pair &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;To implement this feature, in the webinar we created a new Action called QuickPair which accepts leading and trailing delimiters, and an optional third parameter to determine whether the caret goes inside the delimiters or to the right outside the delimiters.&lt;/p&gt;  &lt;p&gt;You can download and install the feature here:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://code.google.com/p/dxcorecommunityplugins/wiki/CR_QuickPair"&gt;http://code.google.com/p/dxcorecommunityplugins/wiki/CR_QuickPair&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This plug-in includes shortcut bindings based on the US keyboard. You may need to change these bindings to match your keyboard locale settings. For example, on a US keyboard, the parens are located above the 9 and 0 keys, respectively, like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/90_73752AD9.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="90" border="0" alt="90" src="http://community.devexpress.com/blogs/markmiller/90_thumb_7EBE3F16.png" width="244" height="164" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The curly braces are above the brackets:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/Brackets_688823C4.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Brackets" border="0" alt="Brackets" src="http://community.devexpress.com/blogs/markmiller/Brackets_thumb_54225E39.png" width="244" height="164" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The angle brackets are above the comma and period keys:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/AngleBrackets_39E1F515.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="AngleBrackets" border="0" alt="AngleBrackets" src="http://community.devexpress.com/blogs/markmiller/AngleBrackets_thumb_706FA059.png" width="244" height="164" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;And the double-quote is above the apostrophe (and the key to the left is the semi-colon):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/Quote_1D185A33.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Quote" border="0" alt="Quote" src="http://community.devexpress.com/blogs/markmiller/Quote_thumb_53A60577.png" width="244" height="164" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;With each of these key pairs, we’ve assigned two functionalities. The left key (e.g., &lt;strong&gt;Ctrl+[ &lt;/strong&gt;) places the caret &lt;em&gt;between &lt;/em&gt;the two delimiters (adding a field, so you can just press &lt;strong&gt;Enter &lt;/strong&gt;to get to the right of the delimiter pair), and the right key (e.g., &lt;strong&gt;Ctrl+] &lt;/strong&gt;) places the caret after the two delimiters (no fields needed). If there’s a selection, the left key will embed the selection within the delimiters (maintaining the original selection), and the right key will embed the selection within the delimiters, extending the selection to include the delimiters. Examples of all the bindings created in the webinar appear below.&lt;/p&gt;  &lt;p&gt;Given these key positions, the table below shows available functionality (the “&lt;font color="#d19049"&gt;|&lt;/font&gt;” character indicates the caret position and the blue background indicates the selection, &lt;em&gt;after &lt;/em&gt;code is inserted):&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2"&gt;     &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;&lt;font color="#5e78e1" size="4"&gt;On a US Keyboard, press this:&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;font color="#5e78e1"&gt;&lt;/font&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;&lt;font color="#5e78e1" size="4"&gt;to get this:              &lt;br /&gt;(no selection)&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;font color="#5e78e1"&gt;&lt;/font&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;&lt;font color="#5e78e1" size="4"&gt;or to modify a selection:&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;font size="4"&gt;Ctrl+(&lt;/font&gt;&lt;/td&gt;        &lt;td&gt;&amp;nbsp;&lt;/td&gt;        &lt;td&gt;&lt;font size="4"&gt;(&lt;font color="#d19049"&gt;|&lt;/font&gt;)&lt;/font&gt;&lt;/td&gt;        &lt;td&gt;&amp;nbsp;&lt;/td&gt;        &lt;td&gt;&lt;font size="4"&gt;(&lt;font style="background-color:#add6ff;"&gt;My Selection&lt;/font&gt;)&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;font size="4"&gt;Ctrl+)&lt;/font&gt;&lt;/td&gt;        &lt;td&gt;&amp;nbsp;&lt;/td&gt;        &lt;td&gt;&lt;font size="4"&gt;()&lt;font color="#d19049"&gt;|&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;        &lt;td&gt;&amp;nbsp;&lt;/td&gt;        &lt;td&gt;&lt;font style="background-color:#add6ff;" size="4"&gt;(My Selection)&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;font size="4"&gt;Ctrl+[&lt;/font&gt;&lt;/td&gt;        &lt;td&gt;&amp;nbsp;&lt;/td&gt;        &lt;td&gt;&lt;font size="4"&gt;[&lt;font color="#d19049"&gt;|&lt;/font&gt;]&lt;/font&gt;&lt;/td&gt;        &lt;td&gt;&amp;nbsp;&lt;/td&gt;        &lt;td&gt;&lt;font size="4"&gt;[&lt;font style="background-color:#add6ff;"&gt;My Selection&lt;/font&gt;]&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;font size="4"&gt;Ctrl+]&lt;/font&gt;&lt;/td&gt;        &lt;td&gt;&amp;nbsp;&lt;/td&gt;        &lt;td&gt;&lt;font size="4"&gt;[]&lt;font color="#d19049"&gt;|&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;        &lt;td&gt;&amp;nbsp;&lt;/td&gt;        &lt;td&gt;&lt;font style="background-color:#add6ff;" size="4"&gt;[My Selection]&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;font size="4"&gt;Ctrl+Shift+{&lt;/font&gt;&lt;/td&gt;        &lt;td&gt;&amp;nbsp;&lt;/td&gt;        &lt;td&gt;&lt;font size="4"&gt;{&lt;font color="#d19049"&gt;|&lt;/font&gt;}&lt;/font&gt;&lt;/td&gt;        &lt;td&gt;&amp;nbsp;&lt;/td&gt;        &lt;td&gt;&lt;font size="4"&gt;{&lt;font style="background-color:#add6ff;"&gt;My Selection&lt;/font&gt;}&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;font size="4"&gt;Ctrl+Shift+}&lt;/font&gt;&lt;/td&gt;        &lt;td&gt;&amp;nbsp;&lt;/td&gt;        &lt;td&gt;&lt;font size="4"&gt;{}&lt;font color="#d19049"&gt;|&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;        &lt;td&gt;&amp;nbsp;&lt;/td&gt;        &lt;td&gt;&lt;font style="background-color:#add6ff;" size="4"&gt;{My Selection}&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;font size="4"&gt;Ctrl+Shift+&amp;lt;&lt;/font&gt;&lt;/td&gt;        &lt;td&gt;&amp;nbsp;&lt;/td&gt;        &lt;td&gt;&lt;font size="4"&gt;&amp;lt;&lt;font color="#d19049"&gt;|&lt;/font&gt;&amp;gt;&lt;/font&gt;&lt;/td&gt;        &lt;td&gt;&amp;nbsp;&lt;/td&gt;        &lt;td&gt;&lt;font size="4"&gt;&amp;lt;&lt;font style="background-color:#add6ff;"&gt;My Selection&lt;/font&gt;&amp;gt;&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;font size="4"&gt;Ctrl+Shift+&amp;gt;&lt;/font&gt;&lt;/td&gt;        &lt;td&gt;&amp;nbsp;&lt;/td&gt;        &lt;td&gt;&lt;font size="4"&gt;&amp;lt;&amp;gt;&lt;font color="#d19049"&gt;|&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;        &lt;td&gt;&amp;nbsp;&lt;/td&gt;        &lt;td&gt;&lt;font style="background-color:#add6ff;" size="4"&gt;&amp;lt;My Selection&amp;gt;&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;font size="4"&gt;Ctrl+;&lt;/font&gt;&lt;/td&gt;        &lt;td&gt;&amp;nbsp;&lt;/td&gt;        &lt;td&gt;&lt;font size="4"&gt;&amp;quot;&lt;font color="#d19049"&gt;|&lt;/font&gt;&amp;quot;&lt;/font&gt;&lt;/td&gt;        &lt;td&gt;&amp;nbsp;&lt;/td&gt;        &lt;td&gt;&lt;font size="4"&gt;&amp;quot;&lt;font style="background-color:#add6ff;"&gt;My Selection&lt;/font&gt;&amp;quot;&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;font size="4"&gt;Ctrl+&amp;quot;&lt;/font&gt;&lt;/td&gt;        &lt;td&gt;&amp;nbsp;&lt;/td&gt;        &lt;td&gt;&lt;font size="4"&gt;&amp;quot;&amp;quot;&lt;font color="#d19049"&gt;|&lt;/font&gt;&lt;/font&gt;&lt;/td&gt;        &lt;td&gt;&amp;nbsp;&lt;/td&gt;        &lt;td&gt;&lt;font style="background-color:#add6ff;" size="4"&gt;“My Selection”&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;font size="4"&gt;Ctrl+=&lt;/font&gt;&lt;/td&gt;        &lt;td&gt;&amp;nbsp;&lt;/td&gt;        &lt;td&gt;&lt;font size="4"&gt;(&lt;font color="#d19049"&gt;|&lt;/font&gt;) =&amp;gt; &lt;/font&gt;&lt;/td&gt;        &lt;td&gt;&amp;nbsp;&lt;/td&gt;        &lt;td&gt;&lt;font size="4"&gt;(&lt;font style="background-color:#add6ff;"&gt;My Selection&lt;/font&gt;) =&amp;gt; &lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;You may notice a lack of symmetry with the Ctrl+= binding (there is no corresponding binding to place the caret to the right of the lambda operator). I omitted this binding due to a lack of a suitable neighboring key to the equals sign. If you want to correct this asymmetry and add your own binding, feel free to. After installing this plug-in, you may view or change the shortcuts bindings in the IDE\Shortcuts options page. The QuickPair bindings are in the Code\QuickPair folder:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/QuickPairBindings_7FE28C5B.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="QuickPairBindings" border="0" alt="QuickPairBindings" src="http://community.devexpress.com/blogs/markmiller/QuickPairBindings_thumb_5EEF19B4.png" width="365" height="418" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Have a request for a new feature? Email &lt;a href="mailto:roryb@devexpress.com"&gt;roryb@devexpress.com&lt;/a&gt; and let us know what you’d like to see us build for you on CodeRush Feature Wednesdays.&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=346176" width="1" height="1"&gt;</content><author><name>Mark Miller (DevExpress)</name><uri>http://community.devexpress.com/members/Mark-Miller-_2800_DevExpress_2900_.aspx</uri></author></entry><entry><title>Get Your CodeRush Training Here</title><link rel="alternate" type="text/html" href="http://community.devexpress.com/blogs/markmiller/archive/2011/05/04/get-your-coderush-training-here.aspx" /><id>http://community.devexpress.com/blogs/markmiller/archive/2011/05/04/get-your-coderush-training-here.aspx</id><published>2011-05-04T21:26:00Z</published><updated>2011-05-04T21:26:00Z</updated><content type="html">&lt;p style="margin:0in 0in 0pt;" class="MsoNormal"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="color:#000000;"&gt;Here’s a summary of CodeRush training videos created so far, to help you find relevant training quickly:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin:0in 0in 0pt;" class="MsoNormal"&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 0.5in;mso-list:l0 level1 lfo1;" class="MsoListParagraph"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font:16px Calibri;"&gt;1.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://tv.devexpress.com/#CodeRushGetStartedWebinar"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#0000ff;"&gt;Introduction to Features&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 1in;mso-list:l0 level2 lfo1;" class="MsoListParagraph"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font:16px Calibri;"&gt;a.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://tv.devexpress.com/CodeRush101.movie"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#0000ff;"&gt;Getting Started/Configuration&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 0.5in;mso-list:l0 level1 lfo1;" class="MsoListParagraph"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font:16px Calibri;"&gt;2.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://tv.devexpress.com/#CRNavigationWebinar"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#0000ff;"&gt;Navigation&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 0.5in;mso-list:l0 level1 lfo1;" class="MsoListParagraph"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font:16px Calibri;"&gt;3.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://tv.devexpress.com/#CRSelectionsAndClipboardWebinar"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#0000ff;"&gt;Working with Selections and the Clipboard&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 0.5in;mso-list:l0 level1 lfo1;" class="MsoListParagraph"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font:16px Calibri;"&gt;4.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://tv.devexpress.com/#CRConsumeFirstWebinar"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#0000ff;"&gt;Consume-first Declaration&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 0.5in;mso-list:l0 level1 lfo1;" class="MsoListParagraph"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="font:16px Calibri;"&gt;5.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="font-family:Calibri;"&gt;Declaring and Refactoring: &lt;/span&gt;&lt;/span&gt;      &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;     &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 1in;mso-list:l0 level2 lfo1;" class="MsoListParagraph"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font:16px Calibri;"&gt;a.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://tv.devexpress.com/#RefactoringPropertiesCodeRush"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#0000ff;"&gt;Properties&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 1in;mso-list:l0 level2 lfo1;" class="MsoListParagraph"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font:16px Calibri;"&gt;b.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://tv.devexpress.com/#CRDeclareRefactorEventsWebinar"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#0000ff;"&gt;Events&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 0.5in;mso-list:l0 level1 lfo1;" class="MsoListParagraph"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="font:16px Calibri;"&gt;6.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="font-family:Calibri;"&gt;Refactoring in-depth: &lt;/span&gt;&lt;/span&gt;      &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;     &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 1in;mso-list:l0 level2 lfo1;" class="MsoListParagraph"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font:16px Calibri;"&gt;a.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://tv.devexpress.com/RefactorIntro.movie"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#0000ff;"&gt;Introduction&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 1in;mso-list:l0 level2 lfo1;" class="MsoListParagraph"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font:16px Calibri;"&gt;b.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://tv.devexpress.com/ChangingSignatures.movie"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#0000ff;"&gt;Changing Signatures&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 1in;mso-list:l0 level2 lfo1;" class="MsoListParagraph"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font:16px Calibri;"&gt;c.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://tv.devexpress.com/RefactoringConditionals.movie"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#0000ff;"&gt;Conditionals&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 1in;mso-list:l0 level2 lfo1;" class="MsoListParagraph"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font:16px Calibri;"&gt;d.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://tv.devexpress.com/RefactoringDeclsAndInits.movie"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#0000ff;"&gt;Declaration and Initialization&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 1in;mso-list:l0 level2 lfo1;" class="MsoListParagraph"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font:16px Calibri;"&gt;e.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://tv.devexpress.com/RefactoringDeadCode.movie"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#0000ff;"&gt;Dead Code&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 1in;mso-list:l0 level2 lfo1;" class="MsoListParagraph"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font:16px Calibri;"&gt;f.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://tv.devexpress.com/RefactoringExpressions.movie"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#0000ff;"&gt;Expressions&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 1in;mso-list:l0 level2 lfo1;" class="MsoListParagraph"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font:16px Calibri;"&gt;g.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://tv.devexpress.com/RefactoringFormattingAndStructure.movie"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#0000ff;"&gt;Formatting and Structure&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 1in;mso-list:l0 level2 lfo1;" class="MsoListParagraph"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font:16px Calibri;"&gt;h.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://tv.devexpress.com/LambdaExpressions.movie"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#0000ff;"&gt;Lambda Expressions and Anonymous Methods&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 1in;mso-list:l0 level2 lfo1;" class="MsoListParagraph"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font:16px Calibri;"&gt;i.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://tv.devexpress.com/RefactoringLoopsAndBlocks.movie"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#0000ff;"&gt;Loops &amp;amp; Blocks&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 1in;mso-list:l0 level2 lfo1;" class="MsoListParagraph"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font:16px Calibri;"&gt;j.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://tv.devexpress.com/MovingAndExtractingMethods.movie"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#0000ff;"&gt;Moving and Extracting Methods&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 1in;mso-list:l0 level2 lfo1;" class="MsoListParagraph"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font:16px Calibri;"&gt;k.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://tv.devexpress.com/RefactoringPropsAndFields.movie"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#0000ff;"&gt;Properties and Fields&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 1in;mso-list:l0 level2 lfo1;" class="MsoListParagraph"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font:16px Calibri;"&gt;l.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://tv.devexpress.com/RefactoringStrings.movie"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#0000ff;"&gt;Strings&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 0.5in;mso-list:l0 level1 lfo1;" class="MsoListParagraph"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="font:16px Calibri;"&gt;7.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="font-family:Calibri;"&gt;Language/Framework follow-up: &lt;/span&gt;&lt;/span&gt;      &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;     &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 1in;mso-list:l0 level2 lfo1;" class="MsoListParagraph"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font:16px Calibri;"&gt;a.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://tv.devexpress.com/#CodeRushAspNet"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#0000ff;"&gt;ASP.NET&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 1in;mso-list:l0 level2 lfo1;" class="MsoListParagraph"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font:16px Calibri;"&gt;b.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://tv.devexpress.com/RefactorCPP.movie"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#0000ff;"&gt;C++&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 1in;mso-list:l0 level2 lfo1;" class="MsoListParagraph"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font:16px Calibri;"&gt;c.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://tv.devexpress.com/#CodeRushMVC"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#0000ff;"&gt;MVC&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 1in;mso-list:l0 level2 lfo1;" class="MsoListParagraph"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font:16px Calibri;"&gt;d.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://tv.devexpress.com/CodeRushColor.movie"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#0000ff;"&gt;Working with Color&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 1in;mso-list:l0 level2 lfo1;" class="MsoListParagraph"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font:16px Calibri;"&gt;e.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://tv.devexpress.com/#CodeRushForWpfSlWebinar"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#0000ff;"&gt;WPF and Silverlight&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 1in;mso-list:l0 level2 lfo1;" class="MsoListParagraph"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font:16px Calibri;"&gt;f.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://tv.devexpress.com/#CodeRushInXAFWebinar"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#0000ff;"&gt;XAF&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 0.5in;mso-list:l0 level1 lfo1;" class="MsoListParagraph"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="font:16px Calibri;"&gt;8.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="font-family:Calibri;"&gt;Advanced Topics &lt;/span&gt;&lt;/span&gt;      &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;     &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 1in;mso-list:l0 level2 lfo1;" class="MsoListParagraph"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font:16px Calibri;"&gt;a.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://tv.devexpress.com/#CodeRushDeepDiveWebinar"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#0000ff;"&gt;CodeRush Template Deep Dive&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 1in;mso-list:l0 level2 lfo1;" class="MsoListParagraph"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font:16px Calibri;"&gt;b.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://tv.devexpress.com/#AdvTextCommandsCodeRush"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#0000ff;"&gt;TextCommands&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;/span&gt;      &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;     &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 0.5in;mso-list:l0 level1 lfo1;" class="MsoListParagraph"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="font:16px Calibri;"&gt;9.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="font-family:Calibri;"&gt;Creating Plug-ins &lt;/span&gt;&lt;/span&gt;      &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;     &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 1in;mso-list:l0 level2 lfo1;" class="MsoListParagraph"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font:16px Calibri;"&gt;a.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://tv.devexpress.com/#CodeRushActionsToolWindows"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#0000ff;"&gt;Introduction – Actions and Tool Windows&lt;/span&gt;&lt;/span&gt; &lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 1in;mso-list:l0 level2 lfo1;" class="MsoListParagraph"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font:16px Calibri;"&gt;b.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://tv.devexpress.com/#CodeRushTextCommands"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#0000ff;"&gt;Text Commands, StringProviders and ContextProviders&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-indent:-0.25in;margin:0in 0in 0pt 1in;mso-list:l0 level2 lfo1;" class="MsoListParagraph"&gt;&lt;span style="mso-fareast-font-family:calibri;"&gt;&lt;span style="mso-list:ignore;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font:16px Calibri;"&gt;c.&lt;/span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://tv.devexpress.com/#CRPluginsTextDocTextView"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#0000ff;"&gt;TextDocument and TextView&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p style="margin:0in 0in 0pt;" class="MsoNormal"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p style="margin:0in 0in 0pt;" class="MsoNormal"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0in 0in 0pt;" class="MsoNormal"&gt;&lt;span style="font-size:16px;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0in 0in 0pt;" class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family:Calibri;font-size:16px;"&gt;Nearly every Tuesday at 12:00 noon Pacific time Rory Becker and I host a CodeRush training webinar, where we dive into a particular topic and answer questions from viewers. You can see a list of upcoming CodeRush webinars &lt;a href="http://www.devexpress.com/webinars" target="_blank"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=343586" width="1" height="1"&gt;</content><author><name>Mark Miller (DevExpress)</name><uri>http://community.devexpress.com/members/Mark-Miller-_2800_DevExpress_2900_.aspx</uri></author></entry><entry><title>Visual Studio Features Built Instantly for CodeRush Developers</title><link rel="alternate" type="text/html" href="http://community.devexpress.com/blogs/markmiller/archive/2011/04/07/visual-studio-features-built-instantly-for-coderush-developers.aspx" /><id>http://community.devexpress.com/blogs/markmiller/archive/2011/04/07/visual-studio-features-built-instantly-for-coderush-developers.aspx</id><published>2011-04-07T22:51:00Z</published><updated>2011-04-07T22:51:00Z</updated><content type="html">&lt;p&gt;This week Rory and I continue our &lt;strong&gt;path-rip through the space time continuum &lt;/strong&gt;by responding to customer requests yet again with mind-numbing development speed. &lt;/p&gt;
&lt;p&gt;Earlier today this question appeared on twitter:&lt;/p&gt;
&lt;p&gt;&lt;img height="87" width="293" src="http://community.devexpress.com/blogs/markmiller/Request_0B3A1CA1.png" alt="Request" border="0" title="Request" style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" /&gt;&lt;/p&gt;
&lt;p&gt;Joe needs to convert a method call with positional arguments (the old way of passing arguments), into a named argument call. For example, he wants to change something like this:&lt;/p&gt;
&lt;p&gt; &lt;span style="font-family:Consolas;font-size:small;"&gt;&lt;span style="font-family:Consolas;font-size:small;"&gt;     &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;span style="font-family:Consolas;font-size:small;"&gt;
&lt;p&gt;RegisterDev(&lt;span style="font-family:Consolas;color:#a31515;font-size:small;"&gt;&lt;font face="Consolas" size="3" color="#a31515"&gt;&lt;font face="Consolas" size="3" color="#a31515"&gt;&amp;quot;Mark&amp;quot;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:small;"&gt;&lt;font face="Consolas" size="3"&gt;, &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#a31515;font-size:small;"&gt;&lt;font face="Consolas" size="3" color="#a31515"&gt;&lt;font face="Consolas" size="3" color="#a31515"&gt;&amp;quot;Miller&amp;quot;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:small;"&gt;&lt;font face="Consolas" size="3"&gt;, 0);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;to this, in C#:&lt;/p&gt;
&lt;p&gt; &lt;span style="font-family:Consolas;font-size:small;"&gt;&lt;span style="font-family:Consolas;font-size:small;"&gt;     &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;span style="font-family:Consolas;font-size:small;"&gt;
&lt;p&gt;RegisterDev(firstName:&amp;nbsp;&lt;span style="font-family:Consolas;color:#a31515;font-size:small;"&gt;&lt;font face="Consolas" size="3" color="#a31515"&gt;&lt;font face="Consolas" size="3" color="#a31515"&gt;&amp;quot;Mark&amp;quot;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:small;"&gt;&lt;font face="Consolas" size="3"&gt;, lastName: &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#a31515;font-size:small;"&gt;&lt;font face="Consolas" size="3" color="#a31515"&gt;&lt;font face="Consolas" size="3" color="#a31515"&gt;&amp;quot;Miller&amp;quot;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:small;"&gt;&lt;font face="Consolas" size="3"&gt;, id: 0);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;Definitely a useful refactoring. Here&amp;rsquo;s how we built it:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a new plug-in.&lt;/li&gt;
&lt;li&gt;Drop a RefactoringProvider on the design surface&lt;/li&gt;
&lt;li&gt;Fill out properties for the refactoring (Name, Description, AutoUndo)&lt;/li&gt;
&lt;li&gt;Handle three events (CheckAvailability, Apply, &amp;amp; PreparePreview)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Within an hour &lt;/strong&gt;the feature was implemented and &lt;a href="http://code.google.com/p/dxcorecommunityplugins/wiki/Refactor_NamedParameters"&gt;published&lt;/a&gt; (working in C# and VB), ready for consumption by CodeRush devs, prompting this response from Joe:&lt;/p&gt;
&lt;p&gt;&lt;img height="92" width="301" src="http://community.devexpress.com/blogs/markmiller/ResponseFromJoe_5C7463FE.png" alt="ResponseFromJoe" border="0" title="ResponseFromJoe" style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;But this isn&amp;rsquo;t unique. &lt;/strong&gt;Over the last two weeks we&amp;rsquo;ve released a number of new features, all built and delivered on the same day they were requested (most in under an hour from the original request)&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;img height="91" width="303" src="http://community.devexpress.com/blogs/markmiller/SurlyDev_42A02DCF.png" alt="SurlyDev" border="0" title="SurlyDev" style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img height="90" width="301" src="http://community.devexpress.com/blogs/markmiller/pajacobs_610A6EB8.png" alt="pajacobs" border="0" title="pajacobs" style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img height="90" width="302" src="http://community.devexpress.com/blogs/markmiller/Apeoholic_7ADEA4E7.png" alt="Apeoholic" border="0" title="Apeoholic" style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" /&gt;&lt;/p&gt;
&lt;p&gt;Need a feature? Just let us know. &lt;strong&gt;CodeRush can do anything&lt;/strong&gt;, and if the feature isn&amp;rsquo;t there, we can likely add it easily. Tell us on Twitter what you want CodeRush to do (include the word &amp;ldquo;CodeRush&amp;rdquo; in your tweet), and lets see if we can keep up the pace. &lt;img src="http://community.devexpress.com/blogs/markmiller/wlEmoticon-smile_4016FC11.png" alt="Smile" class="wlEmoticon wlEmoticon-smile" style="border-bottom-style:none;border-right-style:none;border-top-style:none;border-left-style:none;" /&gt;&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=341367" width="1" height="1"&gt;</content><author><name>Mark Miller (DevExpress)</name><uri>http://community.devexpress.com/members/Mark-Miller-_2800_DevExpress_2900_.aspx</uri></author></entry><entry><title>Importing Namespace References for Extension Methods in CodeRush for Visual Studio</title><link rel="alternate" type="text/html" href="http://community.devexpress.com/blogs/markmiller/archive/2011/03/23/importing-namespace-references-for-extension-methods-in-coderush-for-visual-studio.aspx" /><id>http://community.devexpress.com/blogs/markmiller/archive/2011/03/23/importing-namespace-references-for-extension-methods-in-coderush-for-visual-studio.aspx</id><published>2011-03-23T21:33:47Z</published><updated>2011-03-23T21:33:47Z</updated><content type="html">&lt;p&gt;&lt;strong&gt;From feature request to binary delivery in less than four hours.&lt;/strong&gt; Here’s the timeline:&lt;/p&gt;  &lt;h3&gt;At 10:06 this morning, Apeoholic tweets the following question:&lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;Is there a way to get #CodeRush to suggest namespace usages for extension methods?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Which led to the following discussion with one of our CodeRush devs on IM:&lt;/p&gt;  &lt;p&gt;&lt;font color="#666666"&gt;[10:08] &lt;/font&gt;&lt;font color="#4f81bd"&gt;Mark:&lt;/font&gt; &lt;font color="#0000a0"&gt;Hey Alex, I have this question in a tweet -- &amp;quot;Is there a way to get #CodeRush to suggest namespace usages for extension methods?&amp;quot;     &lt;br /&gt;&lt;/font&gt;&lt;font color="#666666"&gt;[10:09] &lt;/font&gt;&lt;font color="#c0504d"&gt;Alex: &lt;/font&gt;&lt;font color="#800000"&gt;Hi Mark, I&amp;#39;m not sure what he means…&lt;/font&gt;    &lt;br /&gt;&lt;font color="#666666"&gt;[10:10] &lt;/font&gt;&lt;font color="#4f81bd"&gt;Mark:&lt;/font&gt; &lt;font color="#0000a0"&gt;I think he&amp;#39;s talking about adding namespace imports when an extension method is at the caret.     &lt;br /&gt;&lt;/font&gt;&lt;font color="#666666"&gt;[10:10] &lt;/font&gt;&lt;font color="#4f81bd"&gt;Mark:&lt;/font&gt; &lt;font color="#0000a0"&gt;I&amp;#39;m wondering if VS fails to do this.     &lt;br /&gt;&lt;/font&gt;&lt;font color="#666666"&gt;[10:10] &lt;/font&gt;&lt;font color="#c0504d"&gt;Alex: &lt;/font&gt;&lt;font color="#800000"&gt;I suppose VS does it, doesn’t it?     &lt;br /&gt;&lt;/font&gt;&lt;font color="#666666"&gt;[10:10] &lt;/font&gt;&lt;font color="#4f81bd"&gt;Mark:&lt;/font&gt; &lt;font color="#0000a0"&gt;Check it for me.     &lt;br /&gt;&lt;/font&gt;&lt;font color="#666666"&gt;[10:12] &lt;/font&gt;&lt;font color="#c0504d"&gt;Alex: &lt;/font&gt;&lt;font color="#800000"&gt;OK, VS fails to do this.     &lt;br /&gt;&lt;/font&gt;&lt;font color="#666666"&gt;[10:13] &lt;/font&gt;&lt;font color="#c0504d"&gt;Alex: &lt;/font&gt;&lt;font color="#800000"&gt;And we don&amp;#39;t have such feature     &lt;br /&gt;&lt;/font&gt;&lt;font color="#666666"&gt;[10:13] &lt;/font&gt;&lt;font color="#4f81bd"&gt;Mark:&lt;/font&gt; &lt;font color="#0000a0"&gt;Can we write this as a plug-in?     &lt;br /&gt;&lt;/font&gt;&lt;font color="#666666"&gt;[10:13] &lt;/font&gt;&lt;font color="#c0504d"&gt;Alex: &lt;/font&gt;&lt;font color="#800000"&gt;Of course, but this will take time.     &lt;br /&gt;&lt;/font&gt;&lt;font color="#666666"&gt;[10:14] &lt;/font&gt;&lt;font color="#4f81bd"&gt;Mark:&lt;/font&gt; &lt;font color="#0000a0"&gt;What&amp;#39;s the challenging part of this?     &lt;br /&gt;&lt;/font&gt;&lt;font color="#666666"&gt;[10:14] &lt;/font&gt;&lt;font color="#c0504d"&gt;Alex: &lt;/font&gt;&lt;font color="#800000"&gt;Find and resolve all the extension methods     &lt;br /&gt;&lt;/font&gt;&lt;font color="#666666"&gt;[10:15] &lt;/font&gt;&lt;font color="#4f81bd"&gt;Mark:&lt;/font&gt; &lt;font color="#0000a0"&gt;Create a spike -- work on this for an hour and see what you get.     &lt;br /&gt;&lt;/font&gt;&lt;font color="#666666"&gt;[10:15] &lt;/font&gt;&lt;font color="#4f81bd"&gt;Mark:&lt;/font&gt; &lt;font color="#0000a0"&gt;Then send me that source and I can finish it up     &lt;br /&gt;&lt;/font&gt;&lt;font color="#666666"&gt;[10:15] &lt;/font&gt;&lt;font color="#c0504d"&gt;Alex: &lt;/font&gt;&lt;font color="#800000"&gt;ok     &lt;br /&gt;&lt;/font&gt;&lt;font color="#666666"&gt;[10:15] &lt;/font&gt;&lt;font color="#4f81bd"&gt;Mark:&lt;/font&gt; &lt;font color="#0000a0"&gt;Then I&amp;#39;ll have Rory put it on the community site.     &lt;br /&gt;&lt;/font&gt;&lt;font color="#666666"&gt;[10:15] &lt;/font&gt;&lt;font color="#c0504d"&gt;Alex: &lt;/font&gt;&lt;font color="#800000"&gt;k&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Which led to the development of the feature, testing, a few changes, and then this IM with Rory Becker:&lt;/p&gt;  &lt;p&gt;&lt;font color="#666666"&gt;[13:06] &lt;/font&gt;&lt;font color="#4f81bd"&gt;Mark:&lt;/font&gt; &lt;font color="#000080"&gt;I had Alex create a plug-in spike for a feature request to add missing namespace references for extension methods (something VS does not do)&lt;/font&gt;    &lt;br /&gt;&lt;font color="#666666"&gt;[13:06] &lt;/font&gt;&lt;font color="#00a6a6"&gt;Rory: &lt;/font&gt;&lt;font color="#008040"&gt;cool&lt;/font&gt;    &lt;br /&gt;&lt;font color="#666666"&gt;[13:06] &lt;/font&gt;&lt;font color="#4f81bd"&gt;Mark:&lt;/font&gt; &lt;font color="#0000a0"&gt;I&amp;#39;m going to send this to you. Can you get this on the community plug-in site today?     &lt;br /&gt;&lt;/font&gt;&lt;font color="#666666"&gt;[13:06] &lt;/font&gt;&lt;font color="#00a6a6"&gt;Rory: &lt;/font&gt;&lt;font color="#008040"&gt;yeah sure, no problem&lt;/font&gt;&lt;/p&gt;  &lt;h3&gt;At 14:05, we published the feature on the community site.&lt;/h3&gt;  &lt;p&gt;Here’s the feature in action:&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="AddNamespaceReference" border="0" alt="AddNamespaceReference" src="http://community.devexpress.com/blogs/markmiller/AddNamespaceReference_15F5F653.png" width="608" height="738" /&gt;&lt;/p&gt;  &lt;p&gt;Here’s the link to the feature on the CodeRush community plug-ins site: &lt;a href="http://code.google.com/p/dxcorecommunityplugins/wiki/CR_ExtensionMethodsHelper"&gt;&lt;font color="#0066cc"&gt;http://code.google.com/p/dxcorecommunityplugins/wiki/CR_ExtensionMethodsHelper&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;We are likely to roll this functionality into a future version of CodeRush. If you have a CodeRush question or feature request, we want to hear from you. Post a comment below or include “#CodeRush” in your tweets and we’ll respond in a timely manner.&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=339924" width="1" height="1"&gt;</content><author><name>Mark Miller (DevExpress)</name><uri>http://community.devexpress.com/members/Mark-Miller-_2800_DevExpress_2900_.aspx</uri></author><category term="CodeRush" scheme="http://community.devexpress.com/blogs/markmiller/archive/tags/CodeRush/default.aspx" /></entry></feed>