class SofaParameterNameDiscoverer implements ParameterNameDiscoverer {

    private final ParameterNameDiscoverer          parameterNameDiscoverer;

    private final AnnotationWrapper<SofaReference> referenceAnnotationWrapper;

    public SofaParameterNameDiscoverer(ParameterNameDiscoverer parameterNameDiscoverer,
                                       AnnotationWrapper<SofaReference> referenceAnnotationWrapper) {
        this.parameterNameDiscoverer = parameterNameDiscoverer;
        this.referenceAnnotationWrapper = referenceAnnotationWrapper;
    }

    @Override
    public String[] getParameterNames(Method method) {
        String[] parameterNames = parameterNameDiscoverer.getParameterNames(method);
        Class<?>[] parameterTypes = method.getParameterTypes();
        Annotation[][] annotations = method.getParameterAnnotations();
        return transformParameterNames(parameterNames, parameterTypes, annotations);
    }

    @Override
    public String[] getParameterNames(Constructor<?> ctor) {<FILL_FUNCTION_BODY>}

    @SuppressWarnings("unchecked")
    protected String[] transformParameterNames(String[] parameterNames, Class<?>[] parameterType,
                                               Annotation[][] annotations) {
        if (parameterNames == null) {
            return null;
        }
        for (int i = 0; i < annotations.length; ++i) {
            for (Annotation annotation : annotations[i]) {
                if (annotation instanceof SofaReference) {
                    SofaReference delegate = referenceAnnotationWrapper
                        .wrap((SofaReference) annotation);
                    Class<?> interfaceType = delegate.interfaceType();
                    if (interfaceType.equals(void.class)) {
                        interfaceType = parameterType[i];
                    }
                    String uniqueId = delegate.uniqueId();
                    parameterNames[i] = SofaBeanNameGenerator.generateSofaReferenceBeanName(
                        interfaceType, uniqueId);
                }
            }
        }
        return parameterNames;
    }
}

        String[] parameterNames = parameterNameDiscoverer.getParameterNames(ctor);
        Class<?>[] parameterTypes = ctor.getParameterTypes();
        Annotation[][] annotations = ctor.getParameterAnnotations();
        return transformParameterNames(parameterNames, parameterTypes, annotations);
    
<no_super_class>