{"record":{"id":"2386367bb03eb98b","repo":"quarkusio/quarkus","slug":"unable-to-determine-the-name-of-the-parameter-at-p","errorCode":null,"errorMessage":"Unable to determine the name of the parameter at position {position} in method {class}#{method}() - compile the class with debug info enabled (-g) or parameter names recorded (-parameters), or use @MessageParam to specify the value","messagePattern":"Unable to determine the name of the parameter at position (.+?) in method (.+?)#(.+?)\\(\\) - compile the class with debug info enabled \\(-g\\) or parameter names recorded \\(-parameters\\), or use @MessageParam to specify the value","errorType":"exception","errorClass":"MessageBundleException","httpStatus":null,"severity":"error","filePath":"extensions/qute/deployment/src/main/java/io/quarkus/qute/deployment/MessageBundleProcessor.java","lineNumber":1318,"sourceCode":"            }\n        }\n        return messageValue.asString();\n    }\n\n    static String getParameterName(MethodInfo method, int position) {\n        String name = method.parameterName(position);\n        AnnotationInstance paramAnnotation = Annotations\n                .find(Annotations.getParameterAnnotations(method.annotations()).stream()\n                        .filter(a -> a.target().asMethodParameter().position() == position).collect(Collectors.toList()),\n                        Names.MESSAGE_PARAM);\n        if (paramAnnotation != null) {\n            AnnotationValue paramAnnotationValue = paramAnnotation.value();\n            if (paramAnnotationValue != null && !paramAnnotationValue.asString().equals(Message.ELEMENT_NAME)) {\n                name = paramAnnotationValue.asString();\n            }\n        }\n        if (name == null) {\n            throw new MessageBundleException(\"Unable to determine the name of the parameter at position \" + position\n                    + \" in method \"\n                    + method.declaringClass().name() + \"#\" + method.name()\n                    + \"() - compile the class with debug info enabled (-g) or parameter names recorded (-parameters), or use @MessageParam to specify the value\");\n        }\n        return name;\n    }\n\n    private void implementResolve(String defaultBundleImpl, ClassCreator bundleCreator, Map<String, MessageMethod> keyMap,\n            String resolveMethodPrefix, String generatedClassName) {\n\n        // We do group messages to workaround limits of a JVM method body\n        int groupLimit = 300;\n        List<List<Entry<String, MessageMethod>>> resolveGroups = new ArrayList<>();\n        List<Entry<String, MessageMethod>> resolveGroup = new ArrayList<>(groupLimit);\n        for (Entry<String, MessageMethod> entry : keyMap.entrySet()) {\n            if (resolveGroup.size() >= groupLimit) {\n                resolveGroups.add(resolveGroup);\n                resolveGroup = new ArrayList<>(groupLimit);","sourceCodeStart":1300,"sourceCodeEnd":1336,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/qute/deployment/src/main/java/io/quarkus/qute/deployment/MessageBundleProcessor.java#L1300-L1336","documentation":"Qute needs parameter names of message bundle methods to bind template parameters. If the compiled class lacks parameter name info (no -parameters / debug info) and no @MessageParam annotation names the parameter, MessageBundleException is thrown.","triggerScenarios":"A @MessageBundle interface method compiled without the -parameters javac flag (and without debug info) whose parameters lack @MessageParam annotations.","commonSituations":"Building with default Maven compiler settings without -parameters; using prebuilt dependency JARs of bundle interfaces; adding a new parameter to a bundle method in a library compiled without parameter names.","solutions":["Compile the bundle interface with -parameters (and -g) javac flags","Annotate each method parameter with @MessageParam(\"name\") to specify the name explicitly","Configure maven-compiler-plugin <parameters>true</parameters> in the module containing the bundle"],"exampleFix":"// before\n@Message(\"Hello {name}\")\nString hello(String name); // compiled without -parameters\n// after\n@Message(\"Hello {name}\")\nString hello(@MessageParam(\"name\") String name);\n","handlingStrategy":"validation","validationCode":"// build check: enforce -parameters\n// pom.xml\n// <compilerArgs><arg>-parameters</arg></compilerArgs>","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Enable -parameters globally in maven-compiler-plugin","Annotate bundle method parameters with @MessageParam when names cannot be guaranteed","Avoid consuming bundle interfaces from JARs built without parameter names"],"tags":["qute","message-bundle","compiler-flags","reflection"],"backgroundTag":"missing-parameter-names","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"}