/* * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */ package org.mule.runtime.module.extension.internal.loader.java.type.runtime; import static java.lang.String.format; import static org.springframework.core.ResolvableType.forMethodParameter; import org.mule.runtime.module.extension.internal.loader.java.type.ParameterElement; import java.lang.annotation.Annotation; import java.lang.reflect.Method; import java.lang.reflect.Parameter; import java.lang.reflect.Type; import java.util.Optional; /** * Wrapper for {@link Parameter} that provide utility methods to facilitate the introspection of a {@link Parameter} * * @since 4.0 */ public final class ParameterWrapper implements ParameterElement { private final Parameter parameter; private final Method owner; private final int index; public ParameterWrapper(Method owner, int index) { this.index = index; this.parameter = owner.getParameters()[index]; this.owner = owner; } /** * @return the wrapped {@link Parameter} */ @Override public Parameter getParameter() { return parameter; } /** * {@inheritDoc} */ @Override public TypeWrapper getType() { return new TypeWrapper(parameter.getType()); } /** * {@inheritDoc} */ @Override public Annotation[] getAnnotations() { return parameter.getAnnotations(); } /** * {@inheritDoc} */ @Override public <A extends Annotation> Optional<A> getAnnotation(Class<A> annotationClass) { return Optional.ofNullable(parameter.getAnnotation(annotationClass)); } /** * {@inheritDoc} */ @Override public String getName() { return parameter.getName(); } /** * {@inheritDoc} */ @Override public String getOwnerDescription() { return format("Method: '%s'", owner.getName()); } /** * {@inheritDoc} */ @Override public Type getJavaType() { return forMethodParameter(owner, index).getType(); } }