[jboss-jira] [JBoss JIRA] (DROOLS-5126) JavaDialectConfiguration.LANGUAGE_LEVELS being strings causes binary search to not properly locate version 9
Mario Fusco (Jira)
issues at jboss.org
Thu Mar 5 04:39:59 EST 2020
[ https://issues.redhat.com/browse/DROOLS-5126?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Mario Fusco resolved DROOLS-5126.
---------------------------------
Resolution: Done
Fixed by https://github.com/kiegroup/drools/commit/dde2f16d1a01a5c84983a9913576e02313425664
> 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
> Priority: Minor
> Original Estimate: 1 hour
> Remaining Estimate: 1 hour
>
> 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