Jdk8ConstructorParameterNameAnnotationIntrospector.java

package com.fasterxml.jackson.databind.records;

import com.fasterxml.jackson.databind.introspect.AnnotatedConstructor;
import com.fasterxml.jackson.databind.introspect.AnnotatedMember;
import com.fasterxml.jackson.databind.introspect.AnnotatedParameter;
import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector;

public class Jdk8ConstructorParameterNameAnnotationIntrospector extends JacksonAnnotationIntrospector
{
    private static final long serialVersionUID = 1L;

    @Override
    public String findImplicitPropertyName(AnnotatedMember member) {
        if (!(member instanceof AnnotatedParameter)) {
            return null;
        }
        AnnotatedParameter parameter = (AnnotatedParameter) member;
        if (!(parameter.getOwner() instanceof AnnotatedConstructor)) {
            return null;
        }
        AnnotatedConstructor constructor = (AnnotatedConstructor) parameter.getOwner();
        String parameterName = constructor.getAnnotated().getParameters()[parameter.getIndex()].getName();

        if (parameterName == null || parameterName.isBlank()) {
            throw new IllegalArgumentException("Unable to extract constructor parameter name for: " + member);
        }

        return parameterName;
    }
}