{"record":{"id":"b6da62934bce588d","repo":"quarkusio/quarkus","slug":"a-synthetic-injection-point-was-not-declared-for-r","errorCode":null,"errorMessage":"A synthetic injection point was not declared for required type [${requiredType} and qualifiers: ${qualifiers}","messagePattern":"A synthetic injection point was not declared for required type \\[(.+?) and qualifiers: (.+?)","errorType":"exception","errorClass":"java.lang.IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"independent-projects/arc/runtime/src/main/java/io/quarkus/arc/impl/SyntheticCreationalContextImpl.java","lineNumber":76,"sourceCode":"    @Override\n    public <R> InterceptionProxy<R> getInterceptionProxy() {\n        for (Map.Entry<TypeAndQualifiers, Object> entry : injectedReferences.entrySet()) {\n            if (entry.getKey().requiredType.getTypeName().startsWith(InterceptionProxy.class.getName())) {\n                return (InterceptionProxy<R>) entry.getValue();\n            }\n        }\n        throw new IllegalArgumentException(\n                \"No InterceptionProxy registered for this synthetic bean; call injectInterceptionProxy()\");\n    }\n\n    @SuppressWarnings(\"unchecked\")\n    private <R> R getReference(Type requiredType, Annotation... qualifiers) {\n        if (qualifiers.length == 0) {\n            qualifiers = new Annotation[] { Default.Literal.INSTANCE };\n        }\n        R ref = (R) injectedReferences.get(new TypeAndQualifiers(requiredType, qualifiers));\n        if (ref == null) {\n            throw new IllegalArgumentException(\"A synthetic injection point was not declared for required type [\" + requiredType\n                    + \" and qualifiers: \" + Arrays.toString(qualifiers));\n        }\n        return ref;\n    }\n\n    public final static class TypeAndQualifiers {\n\n        private final Type requiredType;\n        private final Annotation[] qualifiers;\n\n        public TypeAndQualifiers(Type requiredType, Annotation[] qualifiers) {\n            this.requiredType = Objects.requireNonNull(requiredType);\n            this.qualifiers = qualifiers == null ? new Annotation[] { Default.Literal.INSTANCE } : qualifiers;\n        }\n\n        @Override\n        public int hashCode() {\n            final int prime = 31;","sourceCodeStart":58,"sourceCodeEnd":94,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/arc/runtime/src/main/java/io/quarkus/arc/impl/SyntheticCreationalContextImpl.java#L58-L94","documentation":"SyntheticCreationalContextImpl.getReference() (used by getInjectedReference) looks up a previously declared synthetic injection point by required type and qualifiers. If no such reference was injected into the synthetic bean, it throws this IllegalArgumentException. Synthetic beans must declare every injection point they intend to consume at build time.","triggerScenarios":"Calling creationalContext.getInjectedReference(SomeType.class, qualifiers...) inside a synthetic bean's create() when SomeType with those qualifiers was never declared via addInjectionPoint (or equivalent) on the SyntheticBeanBuildItem.","commonSituations":"Quarkifier extension authors adding a new dependency to a synthetic bean but forgetting to add the matching injection point declaration; qualifier mismatch (e.g. missing @Named value or missing @Default handling); type mismatch due to generics/boxed types.","solutions":["Declare the injection point on the SyntheticBeanBuildItem (e.g. .addInjectionPoint(TypeAndQualifiers)) before building","Match the required type exactly (including generics) and qualifiers used in getInjectedReference","Remember qualifiers default to @Default when none are passed — declare accordingly","Check for typos in qualifier values such as @Named strings"],"exampleFix":"// before\nSyntheticBeanBeanBuildItem.builder(Bean.class).createWith(ctx -> new Impl(ctx.getInjectedReference(Greet.class)))\n// after\nSyntheticBeanBeanBuildItem.builder(Bean.class)\n    .addInjectionPoint(new TypeAndQualifiers(Greet.class))\n    .createWith(ctx -> new Impl(ctx.getInjectedReference(Greet.class)))","handlingStrategy":"validation","validationCode":"// declare at build time:\n// .addInjectionPoint(new TypeAndQualifiers(requiredType, qualifiers))\n// runtime pre-check via a try of the lookup is not offered; instead declare deterministically","typeGuard":null,"tryCatchPattern":"try { return ctx.getInjectedReference(Type.class, quals); }\ncatch (IllegalArgumentException e) { throw new IllegalStateException(\"Declare this injection point on the SyntheticBeanBuildItem: \" + e.getMessage(), e); }","preventionTips":["Declare every type+qualifier combination consumed in the create function","Mind @Default qualifier when none passed","Keep generic types exact"],"tags":["cdi","synthetic-bean","injection-point","quarkus-arc"],"backgroundTag":"undeclared-injection-point","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}