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)