tag:blogger.com,1999:blog-90180540098980205632024-03-13T08:11:03.371-07:00Zombie ProgrammingKirill Skryganhttp://www.blogger.com/profile/00918057116292294682noreply@blogger.comBlogger5125tag:blogger.com,1999:blog-9018054009898020563.post-84318207824688043242014-12-04T06:44:00.000-08:002014-12-04T06:46:42.513-08:00My three real use cases of Type Dependency Diagram in ReSharper 9.0<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Hi all!<br />
<br />
As you may know, the new 9.0 version of ReSharper has the ability to show the dependencies between different types (classes, structs, interfaces, both from the source code or from assemblies) in a nicely layouted diagram. Frankly speaking, I'm not a big fan of diagrams, but it turned out that some cases can be really displayed in a diagram much more efficiently than via some old-school tools (tree presentation, or a plain list). For instance - 'Project Dependecny Diagram' in ReSharper 8 which can be really efficient in observing the architecture of my solution.<br />
<br />
Lots of stuff can be done, by using new ReSharper type dependency diagram, but in this short article I want to share my 3 real use cases of how the Type Dependency Diagram can be used. Used for a <b>real </b>software engineering tasks, not for useless formal reports.<br />
<h4 style="text-align: left;">
1. Observing</h4>
First of all this feature allows me to understand others code much more easily. Most often the specific subsystem's source code is located in a separate project or in a folder, or even in a bunch of projects located in a special solution folder. In all this cases I can build type dependency diagram easily from the Solution Explorer context menu.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFn7RLkNtkR1TqtmKpf_S0GYtNsvLv3DSa8BHUcoyaqZUCg1wxg-Le-QhhyphenhyphenVO4T-5ErwgH7g8_UevTxElQKSt21Ou0SSofxCqNE4wArGt1yHoSWRfiTx4KBTZLkDhtVpxDL7VhERCNLNXm/s1600/CM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFn7RLkNtkR1TqtmKpf_S0GYtNsvLv3DSa8BHUcoyaqZUCg1wxg-Le-QhhyphenhyphenVO4T-5ErwgH7g8_UevTxElQKSt21Ou0SSofxCqNE4wArGt1yHoSWRfiTx4KBTZLkDhtVpxDL7VhERCNLNXm/s1600/CM.png" height="311" width="320" /></a></div>
<br />
<br />
<br />
<br />
If my initial scope of types is not big (~15 types) the diagram can really help with understanding what is going on here. It shows usages, aggregation and inheritance dependencies by default and I can also include so called 'Return type' and 'Ctor injection' usages.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWVa_aR6GpHuUAkG_T5ho5mU12g04Mp7nYXQNaWGTDFQFg_K8PznWm6WRWqVKyIAYKJPWvLWtq0_vsYgEdbnjmqBGB8eB3f7B_76ko8gqtKEMiGXb_h1M1QKnwJfcSeepasFrEB2_f9Xfh/s1600/LayoutSimple.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWVa_aR6GpHuUAkG_T5ho5mU12g04Mp7nYXQNaWGTDFQFg_K8PznWm6WRWqVKyIAYKJPWvLWtq0_vsYgEdbnjmqBGB8eB3f7B_76ko8gqtKEMiGXb_h1M1QKnwJfcSeepasFrEB2_f9Xfh/s1600/LayoutSimple.png" height="165" width="320" /></a></div>
<br />
<br />
If the scope of types I'm going to investigate is too big, there is no sense to display all these in on diagram - it would be just a useless mess. However, what might be useful is to group the big diagram by project structure, so the diagram will show me which folders depends on which.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2Yf1HqV3cRCHKyaR4zismQdTUEkRR_9DP5i-S1HUSuUwdQ2Tncltei75n8_LS3s6F6QC_HDF1YHa3OEUIlVhGzrNEDidBA9Yz9OFwDs7wsh7QXO59RDQGyq4GKy3nuYRAxVeUjx2GEK8B/s1600/Folded.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2Yf1HqV3cRCHKyaR4zismQdTUEkRR_9DP5i-S1HUSuUwdQ2Tncltei75n8_LS3s6F6QC_HDF1YHa3OEUIlVhGzrNEDidBA9Yz9OFwDs7wsh7QXO59RDQGyq4GKy3nuYRAxVeUjx2GEK8B/s1600/Folded.png" height="191" width="320" /></a></div>
<br />
<br />
The popup on the screenshot above is shown just after I hover the mouse on a folded edge. It can show me briefly what types are referencing each other, but of course I can expand folded node and see whole overview.<br />
There are several ways to add more types to the diagram<br />
1. Drag n drop files, folders, projects from Solution Explorer to the Diagram<br />
2. Embedded Go-to-type that either navigates to already displayed types or adds new ones. Btw, I don't need even to place a caret there. Just start typing and that's it.<br />
3. Rich Popup UI that allows me to add all related types to the specified node (both type's and project folder's nodes)<br />
4. Drag'n'drop from text. For instance I can select the text with a type's name and drop it to the canvas.<br />
<br />
<h4 style="text-align: left;">
2. Understanding the usage of external modules</h4>
Actually you might already knew about 'Show Modules External to Scope' ReSharper's feature and used it to investigate external usages of a module. The problem with this feature is its representation. You cannot really display many-to-many relations in a tree view. So on diagram I can explore such relations much more easily. To do that I can open a context menu on assembly reference(s) in Solution Explorer and click 'Show Usages On Diagram' button<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsaFMQe7XDlnTpPqSWDVxtF1cd6yCrfNSgRrptQuFYJy5HSGzLmXSiHFrT_IyfDJf5xUMBJU5C6CxnQ70eElUhfPJm6Ql-puVzHUJzX8QGN9CRJlp43D7HRzSdyepvXyu8xQkf5CroERjW/s1600/referencesCM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsaFMQe7XDlnTpPqSWDVxtF1cd6yCrfNSgRrptQuFYJy5HSGzLmXSiHFrT_IyfDJf5xUMBJU5C6CxnQ70eElUhfPJm6Ql-puVzHUJzX8QGN9CRJlp43D7HRzSdyepvXyu8xQkf5CroERjW/s1600/referencesCM.png" height="320" width="304" /></a></div>
<br />
<br />
For instance, I would like to see how do I use WPF libraries in my project. And ReSharper 9.0 solves this task pretty well. The following screenshot illustrates what I've got on the diagram:<br />
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhW3K1U3yrMa63hDYGBfREB4gnQuSgXx1u__TvB1uZ2o5X3krb3JwuY8F1NqgyzZNjQ8Rv-asBcrAojeCbXm5yDxgm5WcgBO_-DZoFTyFpln6i98Vf8hIOOFgdKnDC6uO9nzxrPFWa3I9w9/s1600/references.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhW3K1U3yrMa63hDYGBfREB4gnQuSgXx1u__TvB1uZ2o5X3krb3JwuY8F1NqgyzZNjQ8Rv-asBcrAojeCbXm5yDxgm5WcgBO_-DZoFTyFpln6i98Vf8hIOOFgdKnDC6uO9nzxrPFWa3I9w9/s1600/references.png" height="188" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Observing such diagrams is super easy for me and definitely much easier that exploring a tree view based UI.<br />
<h4 style="text-align: left;">
3. Move to folder refactoring via Drag'n'Drop</h4>
<br />
ReSharper's 'Move to folder refactoring' is one of my favorites. It's priceless when I have to move lots of code between the projects in a big solution. In brief, ReSharper automatically analyzes and displays all possible conflicts for the desired move, then physically moves and updates all usages across the whole solution. So it turned out for me that this powerful refactoring is super efficient on a diagram! Mostly because I don't need to look through a huge Solution Explorer's tree to find a specific project folder - all needed project folders are already on the diagram.<br />
In the following example the class ReSharperDaemonVsBulbRemover is located in VB language folder - which is incorrect, it should be move up. Instead of searching the name of a parent folder, now I can perform a refactoring just with a single move.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUOqW9ynT8wIRi7Na4K72Vtfh3lQDxi7ykiGBPmhkohwsdgCBSDWLRr3DyznuzfsGkZcl4DF3frKQYDiY3dhtJSNb1JdctWCHKJgLVtGpJbo9kvpJeusHJEQSSrdfrGgupTrJJU4IS3_Ay/s1600/DragDrop1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUOqW9ynT8wIRi7Na4K72Vtfh3lQDxi7ykiGBPmhkohwsdgCBSDWLRr3DyznuzfsGkZcl4DF3frKQYDiY3dhtJSNb1JdctWCHKJgLVtGpJbo9kvpJeusHJEQSSrdfrGgupTrJJU4IS3_Ay/s1600/DragDrop1.png" height="320" width="253" /></a></div>
<br />
<br />
ReSharper will notice me on any refactoring to avoid unnecessary drops :) I can also uncheck the toggle button to disable this functionality at all. In this case move a dragged node will just expand the container which might be useful for layouting purposes.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbZMO18yPzZGA8L4M2C4mknibI5ZSaWkmV_2hqD7Ej8uz9xLx6i8ZAz9FOpaoC7Ptv1k_sG14oz4HqLPqnckwJWpTlQxToKS4mGuKeqRMHVzQyE0YapVDVhZSzg5iUbBaqa1q5WhS2yhLp/s1600/togglebutton.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbZMO18yPzZGA8L4M2C4mknibI5ZSaWkmV_2hqD7Ej8uz9xLx6i8ZAz9FOpaoC7Ptv1k_sG14oz4HqLPqnckwJWpTlQxToKS4mGuKeqRMHVzQyE0YapVDVhZSzg5iUbBaqa1q5WhS2yhLp/s1600/togglebutton.png" /></a></div>
<br />
These are the most used cases for me personally. However I think that this tool might be useful for other real use cases. If you have some - please share!:)<br />
<br />
<br /></div>
Kirill Skryganhttp://www.blogger.com/profile/00918057116292294682noreply@blogger.com0tag:blogger.com,1999:blog-9018054009898020563.post-83459782619556578012014-01-02T02:05:00.001-08:002014-01-02T02:05:57.688-08:00CodeFest 2013. Optimizing ReSharper performance (in Russian, mostly about memory pressure issues)<div dir="ltr" style="text-align: left;" trbidi="on">
<h1 class="yt" id="watch-headline-title" style="border: 0px; color: #222222; font-family: arial, sans-serif; font-size: 24px; font-weight: normal; margin: 0px 0px 5px; overflow: hidden; padding: 0px; text-overflow: ellipsis; white-space: nowrap; word-wrap: normal;">
</h1>
<iframe allowfullscreen="" frameborder="0" height="315" src="//www.youtube.com/embed/5wWMPn7zTlI" width="560"></iframe>
</div>
Kirill Skryganhttp://www.blogger.com/profile/00918057116292294682noreply@blogger.com0tag:blogger.com,1999:blog-9018054009898020563.post-131722705736142312011-12-24T09:29:00.000-08:002011-12-24T11:04:43.753-08:00Optimizing assembly references with ReSharper 6.1<div dir="ltr" style="text-align: left;" trbidi="on">Hi!<br />
<br />
Today I'm going to talk about new features of ReSharper 6.1th version, which allow you to easily manage your existing assembly references, see referenced assemblies usages, and remove unused references.<br />
<br />
Three new features are coming along with a new 6.1 version of ReSharper:<br />
<br />
<b>1. Optimize References</b><br />
<b><br />
</b><br />
Optimize References is a main feature for analyzing your referenced assemblies. This feature can be called on a single project and displays this module's unused and used assembly references. It does not require your project to be compiled, so you can call it even if your project is currently broken.<b><br />
</b><br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-56upSzY9D5g/TvX5VbhBZhI/AAAAAAAAAC8/Cs1WyizK4o0/s1600/opt1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="208" src="http://1.bp.blogspot.com/-56upSzY9D5g/TvX5VbhBZhI/AAAAAAAAAC8/Cs1WyizK4o0/s320/opt1.png" width="320" /></a></div><br />
<br />
One of the coolest things about this feature is that it allows you to see usages of a concrete referenced assembly, namespace or type, filter them by their kind, group them and navigate from them directly to your source code. On the screenshot below is illustrated why exactly my project references System.Drawing.dll and what types of that assembly are used and where.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-uqTxLTs3wn8/TvX6EnDvrcI/AAAAAAAAADI/XvDAdlZ3AzM/s1600/opt2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="272" src="http://2.bp.blogspot.com/-uqTxLTs3wn8/TvX6EnDvrcI/AAAAAAAAADI/XvDAdlZ3AzM/s320/opt2.png" width="320" /></a></div><i><br />
</i><br />
<br />
Different icons mean different usage kinds like read, write, attribute, invocation and other kinds of usages familiar to you from ReSharper's navigation features. However, one kind of usages is unique for Optimize References. This kind of usage is called 'compiler related usage' and indicates implicit (non-direct) assembly reference usages required for compiler.<br />
The simplest case is the case when related usages are caused by a type's hierarchy. That is, if you use a type, then you have to reference all assemblies containing this type's supertypes. Unfortunately, this is just one example of many other much more complicated ones... :)<b><br />
</b><br />
Besides just observing, you can delete unused assembly references directly from this tool window. You just need two buttons to remove all unused references or just selected.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-yLMZ6R8aASU/TvYEN5E822I/AAAAAAAAADU/KQfgQep5NEE/s1600/opt3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="143" src="http://3.bp.blogspot.com/-yLMZ6R8aASU/TvYEN5E822I/AAAAAAAAADU/KQfgQep5NEE/s320/opt3.png" width="320" /></a></div><br />
<br />
Note that this feature will also delete all <u>redundant</u> C#, VB.NET or XAML <u>namespace import directives</u>, which reference namespaces from the removed referenced assemblies.<br />
<br />
<b>2. Remove Unused References refactoring</b><br />
<br />
This refactoring quickly detects unused assembly references without displaying their usages. It works faster than Optimize References. It is very useful if you do not want to analyze usages but just want to quickly clean up your project references.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-JQGkBa1aErU/TvYGg3xrKRI/AAAAAAAAADg/K2CHlArlHKE/s1600/rem1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="233" src="http://3.bp.blogspot.com/-JQGkBa1aErU/TvYGg3xrKRI/AAAAAAAAADg/K2CHlArlHKE/s320/rem1.png" width="320" /></a></div><br />
'Analye Used References...' button will open Optimize References tool window.<br />
<br />
<b>3. Safe delete on assembly references refactoring</b><br />
That is, now you can press Alt+Del on the selected assembly references from Solution Explorer. They will be either silently removed, or you will get a window indicating that some of the selected references are used.<b><br />
</b><br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-B5NxhFmnPpg/TvYJPFQs5xI/AAAAAAAAADs/asAxbdOfnAw/s1600/safedelete.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="231" src="http://3.bp.blogspot.com/-B5NxhFmnPpg/TvYJPFQs5xI/AAAAAAAAADs/asAxbdOfnAw/s320/safedelete.png" width="320" /></a></div><br />
<br />
These three features introduced in ReSharper 6.1 will definitely help you to manage your references. By the way, if you want to observe code referenced in the scope, other than project (for example, folder or method's body), you can use ReSharper's 'Find Symbols External To Scope' and 'Find Dependent Code' features.</div>Kirill Skryganhttp://www.blogger.com/profile/00918057116292294682noreply@blogger.com1tag:blogger.com,1999:blog-9018054009898020563.post-16629024454274937382011-05-30T00:47:00.000-07:002011-05-30T01:13:47.872-07:00New 'Go To ...' features in ReSharper 6 and dotPeek<div dir="ltr" style="text-align: left;" trbidi="on">Hi all!<br />
<br />
If you are familiar with R# then you probably use its powerful navigation features - sophisticated context navigation (just look at 'Navigate To' dialog) and powerful 'Go To ...' navigation. All these features make you almost forget about Solution Explorer, allowing to instantly move through your solution. <br />
Today I'm writing about the new concept of 'Go To ...' navigation in R# 6, that will make your navigation even more precise and powerful.<br />
To be simple, in R# 6 you can type multiple words in 'Go To ...' dialogs. In different dialogs semantics of words is different, but the main idea remains the same : now you can search something inside something inside something and so on.<br />
<br />
Let's start with 'Go To Symbol' dialog. In this dialog words correspond with entities in your code model: <b>namespaces</b>, <b>type elements</b> (classes, structs, delegates) and <b>type members</b>. The words you type in a dialog match all of these entities in hierarchical order (from left to right).<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-koiFdz3BqA5nEa73dihiresIIa7N4CToKe12crp3RxkLkFUThaSkO-Lwv9lkLw1nXrD3hJCJk0PFF6N5yZFLNtA4H5OSpB9OEp8ava210yVj65klucyuFuCt6YuGaWUsTpXL-XAlDBU5/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="210" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-koiFdz3BqA5nEa73dihiresIIa7N4CToKe12crp3RxkLkFUThaSkO-Lwv9lkLw1nXrD3hJCJk0PFF6N5yZFLNtA4H5OSpB9OEp8ava210yVj65klucyuFuCt6YuGaWUsTpXL-XAlDBU5/s320/1.png" width="320" /></a><br />
<br />
You can search type members even inside namespace without typing an extra word for a type element. For example, this might be very useful in case you have a huge hierachy with a lot of clients overriding method with the same name.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTwFJ-K1IcSh9gIzqpxkKwS2Fgx3BD0vVRAybkaL3Oqk7MQM65iH06ZHP44YxK-8Cp-GEjEhahdTtMI5_9plLdQB9OIclL1RjNhUhcqC97xWgbC7rZJPibDG5OaYy5smzPH-RfFkJX_gGq/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="73" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTwFJ-K1IcSh9gIzqpxkKwS2Fgx3BD0vVRAybkaL3Oqk7MQM65iH06ZHP44YxK-8Cp-GEjEhahdTtMI5_9plLdQB9OIclL1RjNhUhcqC97xWgbC7rZJPibDG5OaYy5smzPH-RfFkJX_gGq/s320/3.png" width="320" /></a><br />
<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0lVpnFoETs5YpHRfTAUV-CsmILhRTjp_lqV6F_AQ6YHWP2czTyuhk7XTFgN9dY6PIge5hbuNjkonVnR9DMXmiBNkslwm-GRhk6LaCZF51tYM4TagG__o1FK-YOeGAjxAqniphdYulx29z/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="53" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0lVpnFoETs5YpHRfTAUV-CsmILhRTjp_lqV6F_AQ6YHWP2czTyuhk7XTFgN9dY6PIge5hbuNjkonVnR9DMXmiBNkslwm-GRhk6LaCZF51tYM4TagG__o1FK-YOeGAjxAqniphdYulx29z/s320/2.png" width="320" /></a><br />
<br />
Advanced users maybe know that in 5.1 version they could use a whitespace for 'tail matching'. Since in R#6 whitespace has other semantics, you can use '\' symbol for tail matching.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizCyFMOFXESRbzvmrgyWZfSKvkAQ60Yqw5LGMhrsQ6sRlaugtmxMzoYkSopRbeeD_WwlFK6FXfnegHxuILdTCQwvZQ3zy6X-eMM5ysOa8lOeBzXs8QJFF0p9gcArYpCp8NEPsyPTNL2jnw/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="127" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizCyFMOFXESRbzvmrgyWZfSKvkAQ60Yqw5LGMhrsQ6sRlaugtmxMzoYkSopRbeeD_WwlFK6FXfnegHxuILdTCQwvZQ3zy6X-eMM5ysOa8lOeBzXs8QJFF0p9gcArYpCp8NEPsyPTNL2jnw/s320/4.png" width="320" /></a><br />
<br />
Another productivity hint that for me personally saves a lot of time: often you want to navigate to a type's member, but you don't know the exact method's of file's name in that class. The common behaviour in R# 5.1 would be: Go to type -> Navigate to your type -> Go to File Member -> Navigate to your member. In R# 6, since you have combos, you can just type your type's name and add a whitespace after. You will get all type members without first navigating to a type.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiacUWKzjbeniLLZsQWhQzqaQsPDFMj2Y-aYabh3fOFQnaqxw9vL-0AhisCEt4wX_rP8Kd9Zr0bKEWfxQmKiKtxOC13M47B4an2sgnmkMxKelm8QF6YTFZucxFKUv7gRiJ_vMZsJw5I9S-F/s1600/5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="129" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiacUWKzjbeniLLZsQWhQzqaQsPDFMj2Y-aYabh3fOFQnaqxw9vL-0AhisCEt4wX_rP8Kd9Zr0bKEWfxQmKiKtxOC13M47B4an2sgnmkMxKelm8QF6YTFZucxFKUv7gRiJ_vMZsJw5I9S-F/s320/5.png" width="320" /></a><br />
<br />
Combos work for external sources as well, and you can use absolutely the same features in dotPeek - new .net Decompiler from JetBrains.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzGlVP9B2fF-2vOQHwe6g1mZw59WUZ1-dTJBVSvPd-fZnRPhaZHm1Db2VuD1rvl84vpvw-G3vNcdd4r5Oba5TsAh5pLOTgCiBhLk5usQT5MA5kEslqEo1D-4vghuSi6vl2K9Ch4dCBFwZt/s1600/6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="145" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzGlVP9B2fF-2vOQHwe6g1mZw59WUZ1-dTJBVSvPd-fZnRPhaZHm1Db2VuD1rvl84vpvw-G3vNcdd4r5Oba5TsAh5pLOTgCiBhLk5usQT5MA5kEslqEo1D-4vghuSi6vl2K9Ch4dCBFwZt/s320/6.png" width="320" /></a><br />
<br />
'Go To Type' dialog uses the same idea, but without navigating to your type members, words correspond to namespaces and type elements.<br />
Both in 'Go To Symbol' and 'Go To Symbol' you can use either ' ' or '.' as a delimiter. This means that these dialogs will find results by FQN.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiH6cUYulWmP8v38cWNUAjoLTwf-26Bw8XbJUfg4zeKOx436iffeWgqkTS65RdEjE1STdwkbQxALM5-76f3FxtzaFhqZUEVYCSM1Dt7mzdLNz_ZhlLUjN-8YBZzn064vfn98OF4Ru_bpnps/s1600/7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="76" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiH6cUYulWmP8v38cWNUAjoLTwf-26Bw8XbJUfg4zeKOx436iffeWgqkTS65RdEjE1STdwkbQxALM5-76f3FxtzaFhqZUEVYCSM1Dt7mzdLNz_ZhlLUjN-8YBZzn064vfn98OF4Ru_bpnps/s320/7.png" width="320" /></a><br />
<br />
'Go To File' dialog searches through your project model, allowing you to find files, projects and all kinds of folders inside each other. You can use ' ' or slashes ('\', '/') as a delimiters.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizCyFMOFXESRbzvmrgyWZfSKvkAQ60Yqw5LGMhrsQ6sRlaugtmxMzoYkSopRbeeD_WwlFK6FXfnegHxuILdTCQwvZQ3zy6X-eMM5ysOa8lOeBzXs8QJFF0p9gcArYpCp8NEPsyPTNL2jnw/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiacUWKzjbeniLLZsQWhQzqaQsPDFMj2Y-aYabh3fOFQnaqxw9vL-0AhisCEt4wX_rP8Kd9Zr0bKEWfxQmKiKtxOC13M47B4an2sgnmkMxKelm8QF6YTFZucxFKUv7gRiJ_vMZsJw5I9S-F/s1600/5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzGlVP9B2fF-2vOQHwe6g1mZw59WUZ1-dTJBVSvPd-fZnRPhaZHm1Db2VuD1rvl84vpvw-G3vNcdd4r5Oba5TsAh5pLOTgCiBhLk5usQT5MA5kEslqEo1D-4vghuSi6vl2K9Ch4dCBFwZt/s1600/6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiH6cUYulWmP8v38cWNUAjoLTwf-26Bw8XbJUfg4zeKOx436iffeWgqkTS65RdEjE1STdwkbQxALM5-76f3FxtzaFhqZUEVYCSM1Dt7mzdLNz_ZhlLUjN-8YBZzn064vfn98OF4Ru_bpnps/s1600/7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhb0VoUOlG9m3wGw_ii-P4qCzcE1mYaWCA4Dq41qxBbJU5ox03WrGpZ40R-Krv9kTnpZzQElMcEVxV2JnnXK1-lPS8MN7-lmkU7iuOd6C8lwtnu2kKcUPbgt9EtkELWvGcBjnOyGTMoEDS/s1600/8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="93" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhb0VoUOlG9m3wGw_ii-P4qCzcE1mYaWCA4Dq41qxBbJU5ox03WrGpZ40R-Krv9kTnpZzQElMcEVxV2JnnXK1-lPS8MN7-lmkU7iuOd6C8lwtnu2kKcUPbgt9EtkELWvGcBjnOyGTMoEDS/s320/8.png" width="320" /></a></div>All of these features improve global 'Go To ...' navigation and make it even more powerful than before.<br />
Stay tuned!</div>Kirill Skryganhttp://www.blogger.com/profile/00918057116292294682noreply@blogger.com1tag:blogger.com,1999:blog-9018054009898020563.post-27571856752851514372011-05-04T12:39:00.000-07:002011-05-04T12:42:47.106-07:00Greetings!:)<div dir="ltr" style="text-align: left;" trbidi="on">Hi all!<br />
My name is Kirill, I am working in JetBrains company in <a href="http://www.jetbrains.com/resharper/">ReSharper</a> team as a software developer. Mostly here I will try to post something about our great products but will write some stuff about zombies as well:)<br />
Hope this will be interesting!<br />
<br />
</div>Kirill Skryganhttp://www.blogger.com/profile/00918057116292294682noreply@blogger.com1