quarkusio/quarkus · error · RuntimeException
All parameters have already been loaded, it is too late to c
Error message
All parameters have already been loaded, it is too late to call loadObjectInstance
What it means
BytecodeRecorderImpl serializes all recorded parameters during writeBytecode(); once that phase finishes, the loadComplete flag is set and the deferred-parameter array size is fixed. Calling loadObjectInstance afterwards would need a new array slot that no longer exists, so it is rejected. This is a guard against programmer error inside Quarkus itself, not usually a user-facing failure.
Source
Thrown at core/deployment/src/main/java/io/quarkus/deployment/recording/BytecodeRecorderImpl.java:596
throw new RuntimeException("unknown type " + set);
}
}
context.close();
mainMethod.returnValue(null);
var createArray = file.getMethodCreator(createArrayDescriptor);
createArray.returnValue(createArray.newArray(Object.class, deferredParameterCount));
file.close();
}
/**
* Returns a representation of a serialized parameter.
*/
private DeferredParameter loadObjectInstance(Object param, Map<Object, DeferredParameter> existing, Class<?> expectedType,
boolean relaxedValidation) {
if (loadComplete) {
throw new RuntimeException("All parameters have already been loaded, it is too late to call loadObjectInstance");
}
if (existing.containsKey(param)) {
return existing.get(param);
}
DeferredParameter ret = loadObjectInstanceImpl(param, existing, expectedType, relaxedValidation);
existing.put(param, ret);
return ret;
}
/**
* Returns a representation of a serialized parameter.
*/
private DeferredParameter loadObjectInstanceImpl(Object param, Map<Object, DeferredParameter> existing,
Class<?> expectedType, boolean relaxedValidation) {
//null is easy
if (param == null) {
return new DeferredParameter() {
@OverrideView on GitHub (pinned to e1c734241f)
Solutions
- Ensure all parameters are recorded before writeBytecode() runs; never record new objects from preWrite()/prepare() callbacks
- Move object creation out of the late phase: serialize the object eagerly when the recorder method is invoked
- If you control the DeferredParameter, capture needed values at construction time rather than loading them lazily
- Reproduce with a minimal recorder; if it occurs on released Quarkus without custom code, file a bug
Example fix
// before: loading a new object inside prepare()
void prepare(MethodContext ctx) { ctx.loadDeferred(loadObjectInstance(newValue, ...)); }
// after: register the deferred parameter during the recording phase
DeferredParameter dp = recorder.loadParam(newValue); // done before writeBytecode completes
void prepare(MethodContext ctx) { ctx.loadDeferred(dp); } Defensive patterns
Strategy: validation
Validate before calling
// ensure all recorder invocations happen in build steps, before writeBytecode() // never load new parameters inside DeferredParameter.prepare()/preWrite() callbacks assert !writeBytecodeStarted : "Recording new parameters after writeBytecode() began";
Prevention
- Record all parameters eagerly when the recorder method is invoked in a build step
- Never trigger additional recording from prepare(), preWrite() or substitution callbacks
- Keep custom LoadedBytecodeRecorder/DeferredParameter values registered before the write phase
When it happens
Trigger: Code invoked during the later instruction-emission phase (after loadComplete=true) calls back into loadObjectInstance — e.g. a lazy supplier, custom loaded-object handler, or substitution whose serialize()/callback triggers new parameter recording after writeBytecode has started writing methods.
Common situations: Quarkus core/extension development where a LoadedBytecodeRecorder value or custom DeferredParameter recursively records new objects during prepare()/preWrite() instead of at parameter-load time.
Related errors
- Failed to record call to method ${call.method}
- String too large to record: ${param}
- Unsupported wildcard type: ${wildcard}
- Cannot call getValue() at deployment time
- Failed to open path tree with root %s
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/57f84a9f9295e1ae.
Report an issue: GitHub.