[jboss-jira] [JBoss JIRA] (DROOLS-5126) JavaDialectConfiguration.LANGUAGE_LEVELS being strings causes binary search to not properly locate version 9

Nikola Atanasov (Jira) issues at jboss.org
Wed Mar 4 20:33:53 EST 2020


Nikola Atanasov created DROOLS-5126:
---------------------------------------

             Summary: JavaDialectConfiguration.LANGUAGE_LEVELS being strings causes binary search to not properly locate version 9
                 Key: DROOLS-5126
                 URL: https://issues.redhat.com/browse/DROOLS-5126
             Project: Drools
          Issue Type: Bug
    Affects Versions: 7.33.0.Final
            Reporter: Nikola Atanasov
            Assignee: Mario Fusco


When i created a simple drools project (version 7.33.0.final) in eclipse (plugin version 7.32.0 final), i ran into the following error.
(Note: drools file didn't specify "dialect java")


{code:java}
java.lang.RuntimeException: Unable to load dialect 'org.drools.compiler.rule.builder.dialect.java.JavaDialectConfiguration:java:org.drools.compiler.rule.builder.dialect.java.JavaDialectConfiguration'
	at org.drools.compiler.builder.impl.KnowledgeBuilderConfigurationImpl.addDialect(KnowledgeBuilderConfigurationImpl.java:405)
	at org.drools.compiler.builder.impl.KnowledgeBuilderConfigurationImpl.buildDialectConfigurationMap(KnowledgeBuilderConfigurationImpl.java:391)
	at org.drools.compiler.builder.impl.KnowledgeBuilderConfigurationImpl.init(KnowledgeBuilderConfigurationImpl.java:239)
	at org.drools.compiler.builder.impl.KnowledgeBuilderConfigurationImpl.init(KnowledgeBuilderConfigurationImpl.java:191)
	at org.drools.compiler.builder.impl.KnowledgeBuilderConfigurationImpl.<init>(KnowledgeBuilderConfigurationImpl.java:159)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.getBuilderConfiguration(AbstractKieProject.java:302)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.createKnowledgeBuilder(AbstractKieProject.java:288)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:213)
	at org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:75)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:274)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:242)
	at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:192)
	at com.sample.RunnableTest.createKieBase(RunnableTest.java:67)
	at com.sample.RunnableTest.run(RunnableTest.java:36)
	at java.base/java.lang.Thread.run(Thread.java:844)
Caused by: java.lang.RuntimeException: value '9' is not a valid language level
	at org.drools.compiler.rule.builder.dialect.java.JavaDialectConfiguration.setJavaLanguageLevel(JavaDialectConfiguration.java:102)
	at org.drools.compiler.rule.builder.dialect.java.JavaDialectConfiguration.init(JavaDialectConfiguration.java:80)
	at org.drools.compiler.builder.impl.KnowledgeBuilderConfigurationImpl.addDialect(KnowledgeBuilderConfigurationImpl.java:401)
	... 14 more
{code}

Once debugged, i saw that the "LANGUAGE_LEVEL" array in "JavaDialectConfiguration" stores the java versions as strings, and in the method that throws the exception "setJavaLanguageLevel", it uses binary search to locate the version from that array.
The problem with this is that it compares them lexicographically, so java version 9 would be greater than versions 10, 11 and 12.

So, out of the array {"1.5", "1.6", "1.7", "1.8", "9", "10", "11", "12"}, to find 9, the following values are tried out:
# Start: low=0, high=7
# Middle (index 3) is 1.8, smaller than 9, move middle to 10, low=4(mid + 1), high=7
# Middle (index 5) is 10, smaller than 9, move middle to 11, low=6(mid + 1), high=7
# Middle (index 6) is 11, smaller than 9, move middle to 12, low=7(mid + 1), high=7
# Middle is 12, smaller than 9, low > high, end search

The fix would be simple enough, either they should be sorted (lexicographically), or they should be floats.

My default workspace jre is 9.0.1.



--
This message was sent by Atlassian Jira
(v7.13.8#713008)


More information about the jboss-jira mailing list