oracle/graal · error · JVMCIError

unresolved RecordComponent %s

Error message

unresolved RecordComponent %s

What it means

Error "unresolved RecordComponent %s" thrown in oracle/graal.

Source

Thrown at espresso-compiler-stub/src/com.oracle.truffle.espresso.vmaccess/src/com/oracle/truffle/espresso/vmaccess/EspressoExternalVMAccess.java:720

    @Override
    public ResolvedJavaRecordComponent asResolvedJavaRecordComponent(Constant constant) {
        if (constant instanceof EspressoExternalObjectConstant espressoConstant &&
                        "java.lang.reflect.RecordComponent".equals(espressoConstant.getValue().getMetaObject().getMetaQualifiedName())) {
            Value value = espressoConstant.getValue();
            /*
             * The default JVMCI lookup accepts a host RecordComponent. Mirror its matching logic for
             * this guest reflection object.
             */
            ResolvedJavaType declaringRecord = EspressoExternalConstantReflectionProvider.classAsType(value.invokeMember("getDeclaringRecord"), this);
            String name = value.invokeMember("getName").asString();
            ResolvedJavaType type = EspressoExternalConstantReflectionProvider.classAsType(value.invokeMember("getType"), this);
            for (ResolvedJavaRecordComponent component : declaringRecord.getRecordComponents()) {
                if (component.getName().equals(name) && component.getType().equals(type)) {
                    return component;
                }
            }
            throw new JVMCIError("unresolved RecordComponent %s", value);
        }
        return null;
    }

    @Override
    public JavaConstant asFieldConstant(ResolvedJavaField field) {
        if (!(field instanceof EspressoExternalResolvedJavaField espressoField)) {
            throw new IllegalArgumentException("Expected an EspressoExternalResolvedJavaMethod, got " + safeGetClass(field));
        }
        if (field.isInternal()) {
            return null;
        }
        Value value = espressoField.getReflectFieldMirror();
        if (value.isNull()) {
            return null;
        }
        return new EspressoExternalObjectConstant(this, value);
    }

View on GitHub (pinned to a66e9ccd1d)

Solutions

  1. Fix the condition reported by the error: unresolved RecordComponent {}
  2. Check the throwing call site and ensure its documented preconditions (argument values, types, environment, or configuration) are satisfied before the call.

Example fix

Validate inputs and environment so that the failing condition does not occur: unresolved RecordComponent {}

When it happens

Trigger: Thrown at espresso-compiler-stub/src/com.oracle.truffle.espresso.vmaccess/src/com/oracle/truffle/espresso/vmaccess/EspressoExternalVMAccess.java:720 when the library encounters an invalid state.

Common situations: Occurs when a caller violates the contract guarded by this check: unresolved RecordComponent {}


AI-assisted analysis of oracle/graal@a66e9ccd1d (2026-08-14). Data as JSON: /api/errors/32b29ba51c7d529f. Report an issue: GitHub.