[ https://issues.apache.org/jira/browse/GROOVY-7473?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17446604#comment-17446604 ]
Eric Milles commented on GROOVY-7473: ------------------------------------- {{BinaryExpressionTransformer#convertInOperatorToTernary}} changes "o.p in ['x','y','z']" to "['x','y','z'] == null ? o.p == null : ['x','y','z'].isCase(o.p)". This could be made simpler for the times where right expression cannot be null. And if {{isCase}} is overridden for {{{}NullObject{}}}, it could be "['x','y','z']?.isCase(o.p)" instead of a ternary. > ineffient code generation > ------------------------- > > Key: GROOVY-7473 > URL: https://issues.apache.org/jira/browse/GROOVY-7473 > Project: Groovy > Issue Type: Bug > Components: Static compilation > Affects Versions: 2.4.3 > Reporter: Laurenz Tontsch > Priority: Major > Labels: performance > > Groovy 2.4.3 generates not the most effient byte code of a simple statement > like "in". > e.g. The following statement: > If object.stringProperty in ["State1", "State2", "State3" > gets complied in: > if > (DefaultTypeTransformation.booleanUnbox((ScriptBytecodeAdapter.createList(new > Object[] { "State1", "State2", "State3" }) == null ? 1 : 0) != 0 ? > Boolean.valueOf(object.getStringProperty() == null) : > Boolean.valueOf(DefaultGroovyMethods.isCase(ScriptBytecodeAdapter.createList(new > Object[] { "State1", "State2 ", "State3" }), object. getStringProperty ())))) > instead of this a more effient construct would be the usage of an static list > e.g. > static List<String> l1; > static { > l1 = new LinkedList<String>(); > l1.add("State1"); > l1.add("State2"); > l1.add("State3"); > } > if (DefaultTypeTransformation.booleanUnbox((l1 == null ? 1 : 0) != 0 ? > Boolean.valueOf(object.getStringProperty() == null) : > Boolean.valueOf(DefaultGroovyMethods.isCase(l1, object. getStringProperty > ())))) -- This message was sent by Atlassian Jira (v8.20.1#820001)