{"record":{"id":"fac60af6c79b3d0f","repo":"quarkusio/quarkus","slug":"could-not-find-registered-enumdefinition-for-nam","errorCode":null,"errorMessage":"Could not find registered EnumDefinition for ${name}","messagePattern":"Could not find registered EnumDefinition for (.+?)","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"core/processor/src/main/java/io/quarkus/annotation/processor/documentation/config/scanner/ConfigCollector.java","lineNumber":87,"sourceCode":"    }\n\n    public void addResolvedEnum(EnumDefinition enumDefinition) {\n        resolvedEnums.put(enumDefinition.qualifiedName(), enumDefinition);\n    }\n\n    public boolean isEnum(String className) {\n        return isResolvedEnum(className);\n    }\n\n    public boolean isResolvedEnum(String className) {\n        return resolvedEnums.containsKey(className);\n    }\n\n    public EnumDefinition getResolvedEnum(String name) {\n        EnumDefinition enumDefinition = resolvedEnums.get(name);\n\n        if (enumDefinition == null) {\n            throw new IllegalStateException(\"Could not find registered EnumDefinition for \" + name);\n        }\n\n        return enumDefinition;\n    }\n\n    public Map<String, EnumDefinition> getResolvedEnums() {\n        return resolvedEnums;\n    }\n\n    @Override\n    public String toString() {\n        StringBuilder sb = new StringBuilder();\n\n        sb.append(\"=======================================================\\n\");\n        sb.append(\"= Config roots\\n\");\n        sb.append(\"=======================================================\\n\\n\");\n\n        for (DiscoveryConfigRoot configRoot : configRoots.values()) {","sourceCodeStart":69,"sourceCodeEnd":105,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/core/processor/src/main/java/io/quarkus/annotation/processor/documentation/config/scanner/ConfigCollector.java#L69-L105","documentation":"ConfigCollector.getResolvedEnum looks up an EnumDefinition previously registered via registerEnum during scanning; if the enum name was never registered, it throws. The scanner registers enums as it discovers them in config properties, so a lookup miss means a property referenced an enum that was never scanned/registered before being resolved.","triggerScenarios":"Resolving a config property whose type is an enum for which no EnumDefinition was registered — the enum was used in a config class but not encountered/registered during the scan (e.g. enum referenced through an unusual type path, nested/generic usage the scanner didn't traverse, or scan ordering issue), or a custom listener omitted registerEnum.","commonSituations":"Extension authors with custom scanning logic or custom listeners that skip enum registration; enums referenced indirectly (inside maps/collections of generic types) in older Quarkus versions with known processor gaps; duplicated processor runs where registration state was reset mid-compilation.","solutions":["Ensure the enum is a plain Java enum directly used as the property type so the scanner registers it.","If you implement a ConfigAnnotationListener, call registerEnum on the collector for every enum your properties reference.","Upgrade Quarkus — several enum-registration gaps in nested/generic property types have been fixed.","Clean rebuild to rule out partial compilation where the enum's class was not yet visible to the scanner.","If it persists, isolate the property/enum pair from the message and file a Quarkus annotation-processor issue."],"exampleFix":"// before: custom listener forgets registration\nonConfigProperty(property) { /* handle property, never register enum */ }\n\n// after\ncollector.registerEnum(new EnumDefinition(myEnumTypeElement));\nonConfigProperty(property) { ... }","handlingStrategy":"validation","validationCode":"// ensure every enum used in config properties gets registered before resolution\nfor (Class<? extends Enum<?>> e : enumsUsedInConfig) {\n    if (!collector.getResolvedEnums().containsKey(e.getName()))\n        collector.registerEnum(new EnumDefinition(elementUtils.getTypeElement(e.getName())));\n}","typeGuard":"static boolean isRegistered(Collector collector, String enumName) {\n    return collector.getResolvedEnums().containsKey(enumName);\n}","tryCatchPattern":"try {\n    EnumDefinition def = collector.getResolvedEnum(name);\n} catch (IllegalStateException e) {\n    if (e.getMessage().startsWith(\"Could not find registered EnumDefinition\")) {\n        log.error(\"Register the enum before resolving it, or use it directly as a property type\");\n    }\n    throw e;\n}","preventionTips":["Use enums directly as property types so the scanner registers them automatically.","If writing custom listeners/scanners, always call registerEnum before resolving properties.","Keep Quarkus up to date — enum registration gaps get fixed.","Clean build after changes to config class structure."],"tags":["quarkus","annotation-processing","enum","config","internal"],"backgroundTag":"unregistered-enum-definition","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}