Hashira DocsLog in
Guides

Calls and Arithmetic

Protect calls and calculations

Configure InvokeDynamic routing, reference protection and instruction mutation. Each pass has its own control so you can enable only the transformations your application needs.

Configuration

These entries belong in the engine block of your RR configuration.

RR
engine ^ {
  linkedIndy true;
  skipReflection false;
  skipConstructorIndy false;
}

Keep the JVM target in mind

The condy backend requires ConstantDynamic support on the target JVM. Expression depth and expression families control different parts of arithmetic generation. Increasing either can add bytecode and execution cost.

Option reference

For options beginning with skip, false enables the pass.

InvokeDynamic Obfuscation

boolean
linkedIndy

Enables linked InvokeDynamic protection. Constants, references and constructors have separate controls.

Panel default true

Reference Encryption

boolean
skipReflection

Protects supported method and field references. Enabled exports skipReflection false.

Panel default false

Constructor calls

boolean
skipConstructorIndy

Transforms supported constructor calls through InvokeDynamic. JVM initialization rules can exclude individual call sites.

Panel default false

Distributed bootstrap

boolean
skipDistributedReferenceBootstrap

Includes distributed bootstrap generation for supported references.

Panel default false

Reference protocols

boolean
referenceProtocols

Enables the reference protocol option. Constant backend selection remains independent.

Panel default true

Caller metadata flow

boolean
callerMetadataFlow

Includes caller metadata in supported call transformations. Coverage depends on the selected engine profile.

Panel default true

Constant backend

enum
constantBackend

Selects InvokeDynamic compatibility mode or ConstantDynamic. The target JVM must support the chosen backend.

Panel default indyCompatValues indyCompat · condy

Constant transformation

boolean
bozarConst

Transforms numeric constants. Constant-only expressions may still be simplified by analysis tools.

Panel default true

Instruction Mutation

boolean
skipArithmetic

Replaces supported arithmetic instructions with equivalent bytecode sequences.

Panel default false

Chained MBA

boolean
chainedMba

Enables chained mixed Boolean arithmetic. Flow and InvokeDynamic are configured separately.

Panel default true

Expression depth

enum
expressionSteps

Sets expression depth from 0 to 8. Increasing depth can increase bytecode size and execution cost.

Panel default 0Values 0 · 1 · 2 · 3 · 4 · 5 · 6 · 7 · 8

Expression families

enum
expressionClasses

Sets the number of expression families from 0 to 6. This is separate from expression depth.

Panel default 5Values 0 · 1 · 2 · 3 · 4 · 5 · 6

Selective inlining

boolean
skipSelectiveInlining

Includes selective inlining at supported call sites.

Panel default false