ReSharper Ultimate 2016.3 EAP 7

Posted on by Dmitry Matveev

Another build of ReSharper Ultimate 2016.3 EAP is out. Build number 7 fixes dozens of issues and brings a set of new and improved features.

ReSharper

New code generation actions for C# and VB.NET

The Generate menu (Alt+Insert in a class) gets 3 new actions:

  • Relational members helps you automatically overload relational opeartors (>, <, , ) and/or implement IComparable and IComparable<T> using selected fields and properties. Optionally, you can choose from several string comparison algorithms and generate nullability checks.
  • Relational comparer creates a comparer class derived from Comparer<T> using selected fields and properties. In addition to choosing a string comparison algorithm and generating nullability checks, you can opt for generating a static property that will expose the comparer class to consumers.
  • Dispose pattern helps you generate the canonical implementation of IDisposable with optional nullability checks and destructor for unmanaged members.

All the new generation actions work both in C# and VB.NET. Even better, actions that help you implement IDisposable and IComparable<T> are also available with Alt+Enter on highlighted code:
A quik-fix that helps implement a dispose pattern for IDisposable

Usage search goes async

The updated usage search mechanism makes finding references of heavily used symbols easier in two ways:

  • The Show in Find Results button becomes available in the pop up as soon as you invoke Usages of Symbol (Shift+Alt+F12). So if you see that the the search for usages is going to take some time, you can just click this button or press + on the numeric keypad and go on working with the code while the search continues in the Find Results window.
    Opening Find Results from 'Go to Usage'
  • The Find Results window now works asynchronously too, meaning that you can work with the resuls tree while usages search is still in progress.

Improved support of C# 7.0 and VB.NET 14

  • Deeper analysis of C# local functions enables a lot of code inspections in their context, such as 'possible null reference exception', 'access to disposed closure', and 'access to modified closure'.
  • ReSharper now respects the new #Disable Warning/#Enable Warning directives in VB.NET.

Support of UWP RelativePanel control

ReSharper now correctly resolves element name references, detecs binding errors, and provides code completion for the RelativePanel control in Windows 10 Universal apps.

Code completion in RelativePanel control

ReSharper C++

  • The postfix completion that we announced in EAP 6 now also works after ->.
  • New options for C++ formatter: 'Spaces wihin parentheses in cast expressions' and 'Place enumerators on new line'.

dotTrace

In addition to multiple performance improvements, dotTrace also delivers a number of new features in this build.

Call Stack improvements

Call Stack Before 2016.3
Call Stack After
The Call Stack tool window in dotTrace Timeline gets a whole bunch of enhancements in 2016.3. This window consists of two sections: Top Methods for displaying methods with the highest execution time and Call Tree for digging into the call tree. Each of the sections gets improved in this release:

  • We returned the Show system functions option that was helpful when analyzing methods’ own execution time. If you select this option, system calls are shown separately in the Top Methods list and user methods don't include their time. Otherwise, user method’s own time includes the own time of child system calls.
  • The Top Methods list now shows not only methods’ own time but total time as well (total time includes the execution time of the entire call subtree).
  • Moreover, now you can click on a method’s own or total time in Top Methods or Call Tree. This will apply a filter by a corresponding method (if you clicked on the own time link) or by a method and its subtree (if you clicked on the total time link).
  • The Top Methods list now follows your selection in Call Tree. When you select a particular method in Call Tree, Top Methods is rebuild to show you only child calls of the selected method.
    Call Stack. Follow selection

Download ReSharper Ultimate 2016.3 EAP

As ever, we welcome you to download the latest ReSharper Ultimate 2016.3 EAP build.

If you spot any problems with this build, please do report them to issue trackers of affected products: ReSharper, ReSharper C++, dotTrace.

Comments below can no longer be edited.

10 Responses to ReSharper Ultimate 2016.3 EAP 7

  1. tobi says:

    November 8, 2016

    Can you post sample code for the dispose pattern? There are a few variants. The Microsoft endorsed pattern with the virtual Dispose(bool) method often is not the right choice.

    • Dmitry Matveev says:

      November 8, 2016

      Hello,
      ReSharper will generate both Dispose(bool) and Dispose(). So if you have a single filed IDisposable Logger in your class, the generated dispose pattern will look like this:

      class MyClass : IDisposable
      {
      private IDisposable Logger;
      protected virtual void Dispose(bool disposing)
      {
      if (disposing)
      {
      Logger?.Dispose();
      }
      }
      public void Dispose()
      {
      Dispose(true);
      }
      }

      If you have unmanaged members, ReSharper will additionally generate a destructor:

      class MyClass : IDisposable
      {
      private IDisposable Logger;
      private bool _disposed;
      protected virtual void Dispose(bool disposing)
      {
      if (_disposed) return;
      if (disposing)
      {
      Logger?.Dispose();
      }
      // TODO free unmanaged resources here
      _disposed = true;
      }
      public void Dispose()
      {
      Dispose(true);
      GC.SuppressFinalize(this);
      }
      ~MyClass()
      {
      Dispose(false);
      }
      }

      • tobi says:

        November 8, 2016

        Alright, the virtual thing is only needed in case of inheritance. 99% of all classes are not inherited from, yet are not sealed (out of habit/ignorance). It’s not a good idea to include all this noise. In your example, it triples the line count.

        This should be default-off and a check box in the generate dialog. What’s your opinion? Could you please register this as a feature request?

  2. Chris Owens says:

    November 8, 2016

    Please start giving a longer expiration on the eap builds. 2016.3 eap 6 & 7 both have a significant performance degradation to the point of dramatically slowing my typing down or making me wait after clicking things.

    I tried to uninstall 7 and revert to 5 where I didn’t notice as much of a delay, but 5 is expired already and unusable – so I either have to give up on eap releases until you fix the performance hit, or revert back to the non-eap release just to be able to work at all.

  3. Dew Dump - November 8, 2016 (#2362) - Morning Dew says:

    November 8, 2016

    […] ReSharper Ultimate 2016.3 EAP 7 (Dmitry Matveev) […]

  4. Auf dem Weg zu ReSharper Ultimate 2016.3 - entwickler.de says:

    November 9, 2016

    […] gewohnt finden sich alle Neuerungen und Änderungen ausführlich aufbereitet im JetBrains-Blog; dort steht ReSharper Ultimate 2016.3 EAP 7 auch zum Download […]

  5. Dissapointed resharper user :( says:

    November 10, 2016

    A disappointing issue.
    When a “run all tests” command is chosen from a solution level tree – execution of tests is fast.
    But when one test or project is chosen from a window “unit test session”.
    An Execution is very, very slow. One test is longer than one minute for no reason.
    In this case, testing with Resharper are almost unusable.

    • Dmitry Matveev says:

      November 16, 2016

      We’ll be happy to investigate that if you could help us by taking a performance snapshot of your actions. Alternatively, you could log an issue and attach a sample solution where this behavior could be reproduced.

Subscribe

Subscribe to .NET Tools updates