Bug Report T746250
Visible to All Users

Code Actions – The "Add Contract - Throw Exceptions Contract" code action generates incorrect code in Visual Basic

created 6 years ago

The code contract generated by the Code Action "Add Contract" - "Throw Exceptions Contract" is incorrect. The generated code will throw an exception when the application is run/tested.

For example, given this method:

Visual Basic
Public Sub DoSomething(values() As Integer) End Sub

Click on "values()" and select the code action "Add Contract" - "Throw Exceptions Contract". The code generated by CR is:

Visual Basic
Public Sub DoSomething(values() As Integer) If values Is Nothing Or values.Length = 0 Then Throw New ArgumentException($"{NameOf(values)} is nothing or empty.", NameOf(values)) End If End Sub

If the values parameter is null (Nothing ), a NullReferenceException will be thrown when the method is run or tested. This is because VB.NET does not short-circuit the logical "OR" as C# does.

The correct VB.NET contract should be:

Visual Basic
Public Sub DoSomething(values() As Integer) If values Is Nothing OrElse values.Length = 0 Then Throw New ArgumentException($"{NameOf(values)} is nothing or empty.", NameOf(values)) End If End Sub

Note the change of "Or" to "OrElse".

Comments (1)
AE AE
Alex Eg (DevExpress) 6 years ago

    Hi William,
    Thank you for the code sample and detailed explanation. I have reproduced the issue and we are working on it.

    Answers approved by DevExpress Support

    created 6 years ago

    We have fixed the issue described in this ticket and will include the fix in our next maintenance update. To apply this solution before the official update, request a hotfix by clicking the corresponding link for product versions you require.

    Note: Hotfixes may be unavailable for beta versions and updates that are about to be released.

      Disclaimer: The information provided on DevExpress.com and affiliated web properties (including the DevExpress Support Center) is provided "as is" without warranty of any kind. Developer Express Inc disclaims all warranties, either express or implied, including the warranties of merchantability and fitness for a particular purpose. Please refer to the DevExpress.com Website Terms of Use for more information in this regard.

      Confidential Information: Developer Express Inc does not wish to receive, will not act to procure, nor will it solicit, confidential or proprietary materials and information from you through the DevExpress Support Center or its web properties. Any and all materials or information divulged during chats, email communications, online discussions, Support Center tickets, or made available to Developer Express Inc in any manner will be deemed NOT to be confidential by Developer Express Inc. Please refer to the DevExpress.com Website Terms of Use for more information in this regard.