Class BytecodeNormalizer
java.lang.Object
org.ek9lang.compiler.backend.jvm.BytecodeNormalizer
Normalizes JVM bytecode output from javap for stable test comparisons.
Normalization removes fragile elements like constant pool indices, line number tables, and debug information while preserving essential instruction sequences and method signatures.
This utility is specifically designed for testing bytecode generation by enabling reliable comparison of expected vs actual bytecode output.
-
Method Summary
Modifier and TypeMethodDescriptionstatic Stringnormalize(byte[] classBytes) Normalize bytecode from .class file bytes with default settings.static Stringnormalize(byte[] classBytes, boolean includeLineNumberTable, boolean includeSourceDebugExtension) Normalize bytecode from .class file bytes with configuration options.static StringrawJavap(byte[] classBytes) The RAWjavap -c -p -l -voutput for the given class bytes, with no normalization at all.
-
Method Details
-
normalize
Normalize bytecode from .class file bytes with default settings. Includes debug information (LineNumberTable and SourceDebugExtension).- Parameters:
classBytes- Compiled .class file bytes- Returns:
- Normalized bytecode text suitable for test comparison
- Throws:
RuntimeException- if normalization fails
-
normalize
public static String normalize(byte[] classBytes, boolean includeLineNumberTable, boolean includeSourceDebugExtension) Normalize bytecode from .class file bytes with configuration options.- Parameters:
classBytes- Compiled .class file bytesincludeLineNumberTable- Include LineNumberTable debug informationincludeSourceDebugExtension- Include SourceDebugExtension (SMAP) information- Returns:
- Normalized bytecode text suitable for test comparison
- Throws:
RuntimeException- if normalization fails
-
rawJavap
The RAWjavap -c -p -l -voutput for the given class bytes, with no normalization at all.This is the shared entry point for callers that want to slice ONE section out of javap's output (the
@DEBUGdirective, viaJavapSectionExtractor) rather than the whole-class normalized formnormalize(byte[])produces. Keeping the temp-file + process handling in one place means@DEBUGdoes not re-derive the javap invocation.- Parameters:
classBytes- Compiled .class file bytes- Returns:
- Raw javap output
- Throws:
RuntimeException- if javap execution fails
-