{"record":{"id":"2792de6fa5f133d7","repo":"quarkusio/quarkus","slug":"target-can-only-be-a-class-a-field-or-a-method","errorCode":null,"errorMessage":"'target' can only be a class, a field or a method: <target>","messagePattern":"'target' can only be a class, a field or a method: <target>","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"extensions/arc/deployment/src/main/java/io/quarkus/arc/deployment/BuildTimeConditionBuildItem.java","lineNumber":20,"sourceCode":"\nimport org.jboss.jandex.AnnotationTarget;\n\nimport io.quarkus.builder.item.MultiBuildItem;\n\npublic final class BuildTimeConditionBuildItem extends MultiBuildItem {\n\n    private final AnnotationTarget target;\n    private final boolean enabled;\n\n    public BuildTimeConditionBuildItem(AnnotationTarget target, boolean enabled) {\n        switch (target.kind()) {\n            case CLASS:\n            case METHOD:\n            case FIELD:\n                this.target = target;\n                break;\n            default:\n                throw new IllegalArgumentException(\"'target' can only be a class, a field or a method: \" + target);\n        }\n        this.enabled = enabled;\n    }\n\n    public AnnotationTarget getTarget() {\n        return target;\n    }\n\n    public boolean isEnabled() {\n        return enabled;\n    }\n}\n","sourceCodeStart":2,"sourceCodeEnd":33,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/arc/deployment/src/main/java/io/quarkus/arc/deployment/BuildTimeConditionBuildItem.java#L2-L33","documentation":"BuildTimeConditionBuildItem wraps the target of an @IfBuildTimeClass/@IfBuildTimeProfile-style annotation evaluation, and only CLASS, METHOD and FIELD annotation targets are supported. Any other AnnotationTarget.Kind (e.g. PARAMETER, TYPE) passed to the constructor throws IllegalArgumentException.","triggerScenarios":"Constructing BuildTimeConditionBuildItem with an AnnotationTarget whose kind is not CLASS, METHOD or FIELD — typically when a transformer/processor incorrectly forwards a parameter- or type-annotated target.","commonSituations":"Custom Arc transformers handling @IfBuildXxx annotations on method parameters or type uses and creating a build item from them; library upgrades changing where an annotation can be placed.","solutions":["Only create the build item for CLASS, METHOD or FIELD targets","Filter/ignore targets of other kinds before constructing the item","Move the conditional annotation to a supported target (class/field/method)"],"exampleFix":"// before\nconditions.produce(new BuildTimeConditionBuildItem(paramTarget, enabled));\n// after\nif (EnumSet.of(Kind.CLASS, Kind.METHOD, Kind.FIELD).contains(target.kind())) {\n    conditions.produce(new BuildTimeConditionBuildItem(target, enabled));\n}","handlingStrategy":"type-guard","validationCode":"if (!EnumSet.of(AnnotationTarget.Kind.CLASS, AnnotationTarget.Kind.METHOD, AnnotationTarget.Kind.FIELD).contains(target.kind())) { skip; }","typeGuard":"boolean isSupportedTarget(AnnotationTarget t) {\n    return t.kind() == AnnotationTarget.Kind.CLASS\n        || t.kind() == AnnotationTarget.Kind.METHOD\n        || t.kind() == AnnotationTarget.Kind.FIELD;\n}","tryCatchPattern":null,"preventionTips":["Check AnnotationTarget.kind() before constructing the item","Only place @IfBuildXxx annotations on class/field/method","Add unit tests for custom transformers covering all target kinds"],"tags":["quarkus","arc","build-time","illegal-argument"],"backgroundTag":"unsupported-annotation-target","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"}