Reshaper Live Templates for validating arguments

I strongly agree with the ‘contract‘ mataphor in API design, hence my interest in Spec# (that I’ve blogged about before).  

To assist in this and to eliminate the tedium of writing argument checks, I’ve created 3 Resharper Live Templates.  These check for

  • null parameters for any object passed
  • invalid parameters for any object passed
  • null or empty check for any String passed. 

These templates are called ‘arg’, ‘argnull’ and ‘argempty’ respectivly.

Resharper 1.5 doesn’t allow importing or exporting of Live Templates from the GUI.  They are however stored in an XML file at %userprofile%Application DataJetBrainsReSharperUserSettings.xml.   Below is a chunk of XML that must be placed under the TemplateManagerTemplates node.  If you have any others, please let me know!

 

<Template text=”if( $TYPE$$EXPRESSION$ )&#xA; throw new ArgumentException( @&quot;Cannot $ACTION$ as the value passed was invalid. Please provide a valid value.&quot;, @&quot;$TYPE$&quot; ) ;&#xA;” shortcut=”arg” description=”Throws an ArgumentException” kind=”livetemplate” reformat=”false” fileMask=”” context=”Everywhere” fileContext=”CSharp” enabled=”False” id=”1723695683″>

<Variables>

<Variable name=”TYPE” expression=”variableOfType(&quot;System.Object&quot;)” initialRange=”0″ />

<Variable name=”EXPRESSION” expression=”constant(&quot; != 1&quot;)” initialRange=”0″ />

<Variable name=”ACTION” expression=”constant(&quot;PERFORM AN ACTION&quot;)” initialRange=”0″ />

</Variables>

</Template>

<Template text=”if( $TYPE$ == null || $TYPE$.Length == 0 )&#xA;throw new ArgumentNullException( @&quot;$TYPE$&quot;, @&quot;Cannot $ACTION$ as the value passed was null or empty. Please provide a valid non null value.&quot; ) ;&#xA;” shortcut=”argempty” description=”Throws an ArgumentNullException when a string is null or empty” kind=”livetemplate” reformat=”true” fileMask=”” context=”Everywhere” fileContext=”CSharp” enabled=”False” id=”1705884294″>

<Variables>

<Variable name=”TYPE” expression=”variableOfType(&quot;System.String&quot;)” initialRange=”0″ />

<Variable name=”ACTION” expression=”constant(&quot;PERFORM AN ACTION&quot;)” initialRange=”0″ />

</Variables>

</Template>

<Template text=”if( $TYPE$ == null )&#xA;throw new ArgumentNullException( @&quot;$TYPE$&quot;, @&quot;Cannot $ACTION$ as the value passed was null. Please provide a valid non-null value.&quot; ) ;&#xA;” shortcut=”argnull” description=”Throws an ArgumentNullException” kind=”livetemplate” reformat=”true” fileMask=”” context=”Everywhere” fileContext=”CSharp” enabled=”False” id=”1497171628″>

<Variables>

<Variable name=”TYPE” expression=”variableOfType(&quot;System.Object&quot;)” initialRange=”0″ />

<Variable name=”ACTION” expression=”constant(&quot;PERFORM AN ACTION&quot;)” initialRange=”0″ />

</Variables>

</Template>

Please follow and like us:

Spec#

Spec# is an addition to C# to allow specifications to be explicitly added to methods. Specifications can state that a method takes a string (which must be non-nul), an integer (which must be between 0 and n), or an array (of which all entries must be non null).  Previously in C#, this would have meant a fair few lines of code that manually checked parameters and threw the respective exceptions.  Furthermore, without specifications, you cannot force any over-ridden method to comply to the same specification.

Spec# is currently a research project and can be downloaded at http://research.microsoft.com/specsharp/

It can be installed to run in Visual Studio 2003 and 2005.  For both systems, it requires an application called Simplify.  This is a java application that can be downloaded at HP Labs Java Programming Toolkit page.  The zipped file that contains Simplify.exe can be found at http://www.hpl.hp.com/downloads/crl/jtk/download-escjava.html, but don’t forget to first read the licence at http://www.hpl.hp.com/downloads/crl/jtk/agreement.html 😉

Please follow and like us:

Quicky StringBuilder Tip

StringBuilder has an Append method that returns a reference to itself. This is useful for when you want to append several items in one go. The following code is an example. Obviously, you’ll get more benefit the more items you add:

      StringBuilder sb = new StringBuilder( ) ;
      string s = sb.Append( @”Hello ” )
        .Append( @”World” )
        .ToString( ) ;

If you’ve been forced into programming in VB, then check out the original text of this tip at devx.com:

http://www.devx.com/tips/Tip/28152

Please follow and like us:

Quicker loading of the Visual Studio .NET IDE

A handy tip from the Bug Slayer MSDN column:

Tip 57 – To hasten the startup of the Visual Studio .NET IDE, get rid of the Start Page. Because the Start Page requires all Web-browsing components to be loaded, you can chop off a considerable amount of startup time by skipping it. To turn off the Start Page, select Options from the Tools menu to bring up the Options dialog. In the Environment/General property page, select “Show empty environment” in the “at Startup” combobox.

Of course, with Resharper installed, this causes the the IDE’s start-up time to become terribly slow.  But it’s worth it!

Please follow and like us: