Aryan Ganjoo created BCEL-379:
---------------------------------

             Summary: BCELifier emits invalid generated code for boolean 
ConstantValue fields
                 Key: BCEL-379
                 URL: https://issues.apache.org/jira/browse/BCEL-379
             Project: Commons BCEL
          Issue Type: Bug
            Reporter: Aryan Ganjoo


A class with `public static final boolean ON = true;` has a 
CONSTANT_Integer-backed ConstantValue attribute. BCELifier.visitField currently 
prints that integer in its generated creator, producing 
`field.setInitValue(1);`. FieldGen then selects its int overload and rejects 
the boolean field with `ClassGenException: Types are not compatible: boolean 
vs. int` when the creator runs. The same issue applies to a false ConstantValue 
(0).

Reproduction: compile a class containing a static final boolean, run 
`org.apache.bcel.util.BCELifier` on it, compile the emitted creator, then run 
that creator. Expected: a rebuilt class with the boolean field. Actual: the 
creator throws the ClassGenException above. This is distinct from BCEL-221 
(invokedynamic constant-pool index) and BCEL-135 (float/long method constants).

A local fix renders boolean literals for boolean fields. The added fixture 
covers true and false and runs through the existing BCELifier compile/run/javap 
round-trip test. The focused `BCELifierTest` suite passed locally (51 tests, 1 
skipped); full validation and independent final review are in progress. No 
patch is public yet.

AI assistance used for code and test drafting.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to