Bug Report T644796
Visible to All Users

Code Cleanup - The "Braces in Statements Style" rule removes braces incorrectly

created 7 years ago

Code Cleanup is incorrectly removing Curly braces from code for some else if statements. This changes the logic of the code and causes bugs.

For Example the following code:

public IEnumerable<bool> ValidateHeight(int? HeightFeet, int? HeightInches)
        {
            if (HeightFeet.HasValue)
            {
                if (HeightInches.HasValue)
                {
                    //Height Feet:
                    //1. Cannot be zero or less
                    //2. Cannot be greater than 8
                    if (HeightFeet.Value <= 0)
                    {
                        yield return false;
                    }
                    else if (HeightFeet.Value > 8)
                    {
                        yield return false;
                    }
                    else
                    {
                        //Height Inches:
                        //1. Cannot be less than zero
                        //2. Cannot be greater than 11
                        if (HeightInches.Value < 0)
                        {
                            yield return false;
                        }
                        else if (HeightInches.Value > 11)
                        {
                            yield return false;
                        }
                    }
                }
                else
                {
                    yield return false;
                }
            }
            else if (HeightInches.HasValue)
            {
                yield return false;
            }
            yield break;
        }

Gets Cleaned up to:
        public IEnumerable<bool> ValidateHeight(int? HeightFeet, int? HeightInches)
        {
            if (HeightFeet.HasValue)
                if (HeightInches.HasValue)
                    //Height Feet:
                    //1. Cannot be zero or less
                    //2. Cannot be greater than 8
                    if (HeightFeet.Value <= 0)
                        yield return false;
                    else if (HeightFeet.Value > 8)
                        yield return false;
                    else
                        //Height Inches:
                        //1. Cannot be less than zero
                        //2. Cannot be greater than 11
                        if (HeightInches.Value < 0)
                        yield return false;
                    else if (HeightInches.Value > 11)
                        yield return false;
                    else
                        yield return false;
                else if (HeightInches.HasValue)
                    yield return false;
            yield break;
        }

It Should be:
        public IEnumerable<bool> ValidateHeight(int? HeightFeet, int? HeightInches)
        {
            if (HeightFeet.HasValue)
            {
                if (HeightInches.HasValue)
                    //Height Feet:
                    //1. Cannot be zero or less
                    //2. Cannot be greater than 8
                    if (HeightFeet.Value <= 0)
                        yield return false;
                    else if (HeightFeet.Value > 8)
                        yield return false;
                    else
                    {
                        //Height Inches:
                        //1. Cannot be less than zero
                        //2. Cannot be greater than 11
                        if (HeightInches.Value < 0)
                            yield return false;
                        else if (HeightInches.Value > 11)
                            yield return false;
                        else
                            yield return false;
                    }
            }
            else if (HeightInches.HasValue)
                yield return false;
            yield break;
        }

Comments (1)
DevExpress Support Team 7 years ago

    Hi Ben,

    Thank you for pointing out this issue and providing the code sample. I have reproduced this issue with the 'Apply 'Braces in statements' style' Code Cleanup rule. We are working on it and will inform you of our progress.

    Answers approved by DevExpress Support

    created 7 years ago (modified 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.