Updating Plug-ins on the Community Site

Mark Miller
17 February 2011

Update: The content at the community site has been updated, and nearly all the plug-ins there currently build with 10.2.

 

Binary plug-in compatibility across versions of the DXCore is a huge priority for us. For most of our releases, we’ve delivered on that intention; after updating you could simply continue to use a plug-in compiled for a previous version. In a few releases, we required a recompile but no source code changes to the plug-in. In 2010, we introduced changes that meant the code had to change in a few plug-ins that were still using the obsolete architecture, and we moved our parsers out to a separate DLL.

 

 

There are CodeRush and DXCore plug-ins out on the community site in need of updates to match the architectural changes introduced in 10.1 and 10.2. Here’s where things currently stand at the community site:

 

No Changes Needed

The following plug-ins compile:

  • CR_BlockPainterPlus
  • CR_CCConsole
  • CR_ClearAllMarkers
  • CR_CodeIssuesContrib
  • CR_CreateTestMethod
  • CR_DeclareClassInProject
  • CR_DrawLinesBetweenMethods
  • CR_ExecuteScript
  • CR_GenerateTest
  • CR_JumpToImplementation
  • CR_Loop
  • CR_MetricShader
  • CR_NavigateToTest

Need References

The following plug-ins need to add a reference to DevExpress.DXCore.Parser:

 

  • CR_CodeBlockContentProviders 
  • CR_ColorizeMemberNames 
  • CR_CreateDelegate
  • CR_CreateHeader
  • CR_DumbAss_Issues
  • CR_EnhancedForEach
  • CR_EasyGoto – also Specific Version needs to be set to false for DevExpress.CodeRush.Library
  • CR_EventHandlerCheckTC
  • CR_ExceptionHelper – also needs ambiguous Xml references changed to System.Xml and needs a change to DxCoreEvents1_EditorPaintForeground handler which uses m_Highlighter
  • CR_Execute
  • CR_MoveFile
  • CR_MsdnBclHelp
  • CR_MultiFileTemplates
  • CR_NavigationContrib
The following plug-ins need references to both DevExpress.DXCore.Controls.Utils.v6.3 and DevExpress.DXCore.Parser.
  • CR_Initials
  • CR_MarkerExtensions
  • CR_mdMarkerExtensions (also needs to change LocatorBeacon to GdiLocatorBeacon)

 
The following plug-ins need to set the Specific Version property to false for DevExpress.DXCore.Parser:

  • CR_NavigateToDefinition
  • CR_MethodNameReformatting
  • CR_MethodPreview


 
The following plug-in needs a reference to DevExpress.DXCore.Controls.Utils.v6.3 (with its Specific Version property to false)

  • CR_ClassCleaner

 

Code Changes Required

These plug-ins require some changes to the source code to meet the recent architecture changes.

CR_Colorizer

Needs reference to DevExpress.DXCore.Parser.
Adding this reference and recompiling produces this error:
Error    1    'DevExpress.CodeRush.Core.TextView' does not contain a definition for 'Repaint' and no extension method 'Repaint' accepting a first argument of type 'DevExpress.CodeRush.Core.TextView' could be found
 
We recommend fixing with this code:

    IGdiTextView gdiTextView = CodeRush.TextViews.Active as IGdiTextView;
    if (gdiTextView != null)

      gdiTextView.Repaint();


CR_NCover
Could not locate the assembly "Typemock.ArrangeActAssert, Version=5.3.1.0, Culture=neutral, PublicKeyToken=3dae460033b8d8e2, processorArchitecture=MSIL".

It also needs DevExpress.DXCore.Parser and DevExpress.DXCore.Platform references.


CR_ExtractHqlNamedQuery
Specific Version needs to be set to False for all DXCore assemblies
Needs references to DevExpress.DXCore.Controls.Utils.v6.3 and DevExpress.DXCore.Parser.
Also, the findFileInSolution method needs this change:

    SolutionElement solution = currentProject.Solution as SolutionElement;

    foreach (var project in solution.AllProjects)

And this:

    SourceFile namedQueriesXmlFile = getNamedQueriesXmlFile(hqlQueryElement.Project as ProjectElement);


Working to Make this Better

Both Rory Becker (CodeRush evangelist) and the CodeRush team are working right now to update the plug-ins at the community site. If you’re an author of one of these plug-ins, I encourage you to update your source code using the hints on this page (it might be a good idea to check first to make sure the fix hasn’t already been submitted). I want to thank you for your patience and support as we go through the 50+ plug-ins and update them accordingly. In the future as we prepare to release, the CodeRush team will check the new build against all the plug-ins on the community site and if there are any issues, we’ll either change things on our side or connect with the plug-in author and get them to change their code before we ship.

Our commitment is to a strong plug-in community. We will invest whatever it takes to support the plug-in community and make transitions to future versions as painless as possible.

6 comment(s)
SimonMartin
SimonMartin

Wow, that's quite a powerful, and jolly decent commitment Mark; many companies just simply say they don't support 3rd party add-ons and it's none of their concern if plug-in A doesn't work with the latest version of their product, so to check the community plugins in advance and offer to help sort things out is nothing short of amazing.

I am a huge fan of CR_ClassCleaner, I've used it for as long as I've used CR itself. I've used it to "sell" the idea of plugins to quite a few teams who have been skeptical by getting them to install the Xpress edition and the plugin so the whole team has code structured in a consistent manner. Today I wouldn't be without CodeRush or ClassCleaner - they are both just awesome.

The weak point has always been the need to recompile it against the new versions of CR as you've released them. I like to use the latest version and update as soon as you release it and always forget to rebuilt CR_ClassCleaner, so fire up Visual Studio write some code, try to clean the class and... nothing... hmmn, oh yeah! I forgot to recompile the plugin. So rebuild it, close VS, drop the new dll in place and relaunch VS then clean the class. The additional friction that generates is frustrating and unnecessary - CR_ClassCleaner has not had (m)any updates in 4years or more. Steve Bohlen has modified it to integrate with the mouse menus - but that was well over a year ago.

So the dependency on specific versions has been a royal pain in the ass.

Its functionality seems to overlap with existing CR functionality though, specifically the "Move to Region" refactoring. I have previously suggested DevExpress adopt this plugin - www.devexpress.com/.../ViewIssue.aspx - it doesn't need (at least I don't think so) further work doing, so if you can make it a built in refactoring that would be super awesome. Going back to the Move to Region refactoring, expanding the set of regions CR_ClassCleaner works with / creates automatically would be a nice bonus feature (I'm just not sure how you'd detect which methods to move there...)

18 February, 2011
Ralf Warnat
Ralf Warnat

My little decorative plugin "MiniCodeColumn" was not mentioned, but I changed the references already.

(code.google.com/.../MiniCodeColumn)

As a side-note:

The DevExpress-Project-Converter should leave "Specific Version" property to false. That would make some things easier.

18 February, 2011
Przemyslaw Wlodarczak
Przemyslaw Wlodarczak

Wow, that's huge - this kind of support from DevExpress Team.

Does such involvement mean, that we can expect some kind of Extension Manager for CR plugins in the future? You know, one similar to VS-builtin, with support for automatic updates of plugins, easy search, popularity (download count, ratings) etc?

18 February, 2011
Mark Miller (DevExpress)
Mark Miller (DevExpress)

Przemyslaw, an Extension Manager is a definite possibility we've discussed. We like the idea a lot, it's simply a matter of prioritizing it.

18 February, 2011
Rory Becker - DevExpress
Rory Becker - DevExpress

I have just finished uploading correcting the references of over 90 plugins and uploading the relevant binaries to the community site.

This does not constitute having finished. There are ~20 more plugins to look at. These last few have slightly larger issues to deal with. Some are still needing rewrites since the API changes in 10.1

Finally ~8 non-plugins and obsolete plugins are going to be deleted from the main trunk. (I'll branch first so that these aren't lost entirely first).

21 February, 2011
Przemyslaw Wlodarczak
Przemyslaw Wlodarczak

Mark, regarding EXtension Manager - look at this: vsprivategallery.codeplex.com

Brilliant integration with standard Extension Manager.

1 March, 2011

Please login or register to post comments.