[ https://issues.apache.org/jira/browse/CALCITE-5839?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
ASF GitHub Bot updated CALCITE-5839: ------------------------------------ Labels: pull-request-available (was: ) > EnumerableInterpretable#StaticFieldDetector can overwrite its flag and return > an incorrect result > ------------------------------------------------------------------------------------------------- > > Key: CALCITE-5839 > URL: https://issues.apache.org/jira/browse/CALCITE-5839 > Project: Calcite > Issue Type: Bug > Components: core > Reporter: Ruben Q L > Assignee: Ruben Q L > Priority: Major > Labels: pull-request-available > Fix For: 1.35.0 > > > In EnumerableInterpretable, before using the bindable cache, it is verified > whether the class contains static fields (because in that case, the cache > shall not be used): > {code} > static Bindable getBindable(ClassDeclaration expr, ...) { > ... > if (CalciteSystemProperty.BINDABLE_CACHE_MAX_SIZE.value() != 0) { > StaticFieldDetector detector = new StaticFieldDetector(); > expr.accept(detector); > if (!detector.containsStaticField) { > return BINDABLE_CACHE.get(classBody, () -> > compileToBindable(expr.name, s, compiler)); > } > } > .... > /** > * A visitor detecting if the Java AST contains static fields. > */ > static class StaticFieldDetector extends VisitorImpl<Void> { > boolean containsStaticField = false; > @Override public Void visit(final FieldDeclaration fieldDeclaration) { > containsStaticField = (fieldDeclaration.modifier & Modifier.STATIC) != > 0; > return containsStaticField ? null : super.visit(fieldDeclaration); > } > } > {code} > However, it seem that the {{containsStaticField}} flag in > {{{StaticFieldDetector}} can be overwritten when inspecting the field > declarations of the class, so that, if a non-static field is inspected after > a static field, the flag will be then (re)set to false; and the final result > of the shuttle will be wrong (false, when it should have been true). -- This message was sent by Atlassian Jira (v8.20.10#820010)