If condition failing with expression too complex

11,752

Yes that's a known issue - see also this answer.

The solution is to store the logical expression into a variable, using a multiline statement:

else {
    var logicalExpression = contains(JSONDict.keys.array, "id") &&
            contains(JSONDict.keys.array, "part_number") &&
            contains(JSONDict.keys.array, "sales_part_number") &&
            contains(JSONDict.keys.array, "include_in_search")
    logicalExpression = logicalExpression && contains(JSONDict.keys.array, "description") &&
            contains(JSONDict.keys.array, "brand") &&
            contains(JSONDict.keys.array, "product_group") &&
            contains(JSONDict.keys.array, "product_design")
    // ... etc.
    if logicalExpression {
    }
}

A little weird for such a powerful language... but it's a (hopefully temporary) trade off.

Share:
11,752

Related videos on Youtube

steventnorris
Author by

steventnorris

Applications developer with a preference for object-oriented languages. Currently working at FortyAU, a development firm in Nashville, TN. http://www.fortyau.com

Updated on September 15, 2022

Comments

  • steventnorris
    steventnorris over 1 year

    I have a conditional statement that claims the 'Expression was too complex to be solved in reasonable time. If there are any more than around 5 contains statements in my conditional, it fails with that error. This does not seem like something that should be happening on compile, seeing as the statement isn't all that complex. Is this a bug that anyone else has run into? Is there a solution other than splitting up my conditions?

    else if(
                    contains(JSONDict.keys.array, "id") &&
                    contains(JSONDict.keys.array, "part_number") &&
                    contains(JSONDict.keys.array, "sales_part_number") &&
                    contains(JSONDict.keys.array, "include_in_search") &&
                    contains(JSONDict.keys.array, "description") &&
                    contains(JSONDict.keys.array, "brand") &&
                    contains(JSONDict.keys.array, "product_group") &&
                    contains(JSONDict.keys.array, "product_design") &&
                    contains(JSONDict.keys.array, "material") &&
                    contains(JSONDict.keys.array, "line") &&
                    contains(JSONDict.keys.array, "unit_of_mass") &&
                    contains(JSONDict.keys.array, "coating") &&
                    contains(JSONDict.keys.array, "pcs_converstion") &&
                    contains(JSONDict.keys.array, "appRim") &&
                    contains(JSONDict.keys.array, "appSegment") &&
                    contains(JSONDict.keys.array, "series") &&
                    contains(JSONDict.keys.array, "product_application")
                    ){
    
                }