quarkusio/quarkus · error · java.lang.IllegalArgumentException

Unsupported @CheckedTemplate#defaultName() value: <defaultNa

Error message

Unsupported @CheckedTemplate#defaultName() value: <defaultNameStrategy>

What it means

@CheckedTemplate#defaultName() selects how method/fragment names are converted to template path segments (e.g. LOWERCASE, CAMEL_HUMPS, LOWER_UNCERTAIN style constants from CheckedTemplate.DefaultName). defaultedName throws IllegalArgumentException for any constant value the processor does not recognize — typically when compiling against a mismatched Qute version or passing a non-enum value.

Source

Thrown at extensions/qute/deployment/src/main/java/io/quarkus/qute/deployment/QuteProcessor.java:620

        return targetClass.nestingType() == NestingType.TOP_LEVEL ? targetClass.name().withoutPackagePrefix()
                : targetClass.simpleName();
    }

    private String defaultedName(String defaultNameStrategy, String value) {
        switch (defaultNameStrategy) {
            case CheckedTemplate.ELEMENT_NAME:
                return value;
            case CheckedTemplate.HYPHENATED_ELEMENT_NAME:
                return StringUtil.hyphenate(value);
            case CheckedTemplate.UNDERSCORED_ELEMENT_NAME:
                return String.join("_", new Iterable<String>() {
                    @Override
                    public Iterator<String> iterator() {
                        return StringUtil.lowerCase(StringUtil.camelHumpsIterator(value));
                    }
                });
            default:
                throw new IllegalArgumentException("Unsupported @CheckedTemplate#defaultName() value: " + defaultNameStrategy);
        }
    }

    private boolean isNotLocatedByCustomTemplateLocator(
            Collection<Pattern> locationPatterns, String templatePath) {
        if (!locationPatterns.isEmpty() && templatePath != null) {
            for (Pattern locationPattern : locationPatterns) {
                if (locationPattern.matcher(templatePath).matches()) {
                    return false;
                }
            }
        }
        return true;
    }

    @BuildStep
    EffectiveTemplatePathsBuildItem collectEffectiveTemplatePaths(QuteConfig config,
            List<TemplatePathBuildItem> templatePaths) {

View on GitHub (pinned to e1c734241f)

Solutions

  1. Use only documented constants from CheckedTemplate.DefaultName (e.g. CheckedTemplate.DefaultName.ELEMENT_NAME, .LOWER_HYPHENATED, .LOWER_SNAKE, .UPPER_SNAKE)
  2. Align Quarkus BOM/platform versions so the qute annotation and deployment processor come from the same release
  3. Clean and rebuild — stale classes from an older Quarkus version can carry removed constants

Example fix

// before
@CheckedTemplate(defaultName = CheckedTemplate.DefaultName.KEBAB) // non-existent/unsupported
// after
@CheckedTemplate(defaultName = CheckedTemplate.DefaultName.LOWER_HYPHENATED)
Defensive patterns

Strategy: validation

Validate before calling

// validate defaultName before use
CheckedTemplate.DefaultName dn = templateAnnotation.defaultName();
if (dn != CheckedTemplate.DefaultName.ELEMENT_NAME
    && dn != CheckedTemplate.DefaultName.LOWER_HYPHENATED
    && dn != CheckedTemplate.DefaultName.LOWER_SNAKE
    && dn != CheckedTemplate.DefaultName.UPPER_SNAKE) {
    throw new IllegalArgumentException("Unsupported defaultName: " + dn);
}

Prevention

When it happens

Trigger: defaultedName is called from getCheckedTemplateName/getCheckedFragmentId while processing @CheckedTemplate; the annotation's defaultName member holds a value outside the supported set handled by the switch statement.

Common situations: Quarkus/Qute version skew: annotation compiled against a newer io.quarkus.qute.CheckedTemplate with constants the deployment processor doesn't know; manually passing an invalid constant in a code generator; typos when constructing AnnotationValue in tests.

Related errors


AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05). Data as JSON: /api/errors/a250fe9591291c44. Report an issue: GitHub.