Bug: Java true/false boolean literals not classified as Halstead operands
Summary
True (kind_id=8) and False (kind_id=9) exist in the Java grammar enum (src/languages/language_java.rs:8-9) but are not listed in the get_op_type operand match arm (src/getter.rs:557). Every other language with boolean literals correctly classifies them as operands. All boolean literals in Java are invisible to Halstead metrics.
Root Cause
src/getter.rs:556-559:
// Operands: variables, constants, literals
Identifier | NullLiteral | ClassLiteral | StringLiteral | CharacterLiteral
| HexIntegerLiteral | OctalIntegerLiteral | BinaryIntegerLiteral
| DecimalIntegerLiteral | HexFloatingPointLiteral | DecimalFloatingPointLiteral => {
HalsteadType::Operand
},
True and False are absent. They fall through to _ => HalsteadType::Unknown.
Cross-language comparison
| Language |
True/False classified? |
Location |
| Python |
Yes |
getter.rs:74 |
| C++ |
Yes |
getter.rs:504 |
| JavaScript/Mozjs/TS/TSX |
Yes |
getter.rs:153 etc. |
| Rust |
Yes (as BooleanLiteral) |
getter.rs:424 |
| Go |
Yes |
getter.rs:661 |
| Kotlin |
N/A (parsed as Identifier) |
— |
| Perl |
Yes |
getter.rs:713 |
| Java |
No |
getter.rs:557 |
Fix
Add True and False to the Java operand match arm in src/getter.rs:557:
Identifier | NullLiteral | ClassLiteral | True | False | StringLiteral | CharacterLiteral
| HexIntegerLiteral | OctalIntegerLiteral | BinaryIntegerLiteral
| DecimalIntegerLiteral | HexFloatingPointLiteral | DecimalFloatingPointLiteral => {
HalsteadType::Operand
},
Key Files
| File |
Lines |
Role |
src/getter.rs |
556-559 |
Java operand list — add True, False |
src/languages/language_java.rs |
8-9 |
Confirms True/False enum variants exist |
Test
Update the Java Halstead test (src/metrics/halstead.rs:682-718) with code containing boolean literals and verify they appear as operands. Run cargo insta test --review.
Bug: Java
true/falseboolean literals not classified as Halstead operandsSummary
True(kind_id=8) andFalse(kind_id=9) exist in the Java grammar enum (src/languages/language_java.rs:8-9) but are not listed in theget_op_typeoperand match arm (src/getter.rs:557). Every other language with boolean literals correctly classifies them as operands. All boolean literals in Java are invisible to Halstead metrics.Root Cause
src/getter.rs:556-559:TrueandFalseare absent. They fall through to_ => HalsteadType::Unknown.Cross-language comparison
True/Falseclassified?getter.rs:74getter.rs:504getter.rs:153etc.BooleanLiteral)getter.rs:424getter.rs:661Identifier)getter.rs:713getter.rs:557Fix
Add
TrueandFalseto the Java operand match arm insrc/getter.rs:557:Key Files
src/getter.rsTrue,Falsesrc/languages/language_java.rsTrue/Falseenum variants existTest
Update the Java Halstead test (
src/metrics/halstead.rs:682-718) with code containing boolean literals and verify they appear as operands. Runcargo insta test --review.