Paul Rogers created DRILL-5173:
----------------------------------

             Summary: ClassGenerator uses wrong constants to define child 
classes
                 Key: DRILL-5173
                 URL: https://issues.apache.org/jira/browse/DRILL-5173
             Project: Apache Drill
          Issue Type: Bug
    Affects Versions: 1.8.0
            Reporter: Paul Rogers
            Priority: Minor


The code in {{ClassGenerator}} defines classes to generate using 
{{JCodeModel}}. Some templates, such as {{PartitionerTemplate}}, include nested 
classes which must also be generated. {{ClassGenerator}} creates definitions 
for these subclasses, but in so doing, uses the wrong constants for the class 
modifiers:

{code}
      String innerClassName = child.getSignatureClass().getSimpleName();
      JDefinedClass innerClazz = clazz._class(Modifier.FINAL + 
Modifier.PRIVATE, innerClassName);
{code}

The constants used come from Java's own {{Modifier}} introspection class. But, 
{{JCodeModel}} uses its own modifiers defined in {{JMod}}. Unfortunately, the 
values are not the same:

{code}
Modifier.FINAL = 0x10 = JMod.STATIC
Modifier.PRIVATE = 0x02 = JMod.PROTECTED
{code}

Hence, the code thinks it is asking for a non-static, {{private final}} class 
but is actually getting a {{static protected}} class.

The result is that the generated nested classes are declared static when they 
should be non-static inner classes. This issues causes compile errors when 
generating the code as "plain-old Java."

This bug is marked as lower priority because the current code, though wrong, 
works with the byte-code manipulations Drill uses today. It is a bug, however, 
because it is wrong in concept, and is wrong when generating plain-old Java.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to