package io.micronaut.annotation.processing.visitor;
import io.micronaut.core.annotation.AnnotationMetadata;
import io.micronaut.core.annotation.Internal;
import io.micronaut.inject.ast.ClassElement;
import io.micronaut.inject.ast.ParameterElement;
import edu.umd.cs.findbugs.annotations.NonNull;
import javax.lang.model.element.VariableElement;
import javax.lang.model.type.TypeMirror;
import java.util.Map;
@Internal
class JavaParameterElement extends AbstractJavaElement implements ParameterElement {
private final JavaVisitorContext visitorContext;
private final JavaClassElement declaringClass;
JavaParameterElement(JavaClassElement declaringClass, VariableElement element, AnnotationMetadata annotationMetadata, JavaVisitorContext visitorContext) {
super(element, annotationMetadata, visitorContext);
this.declaringClass = declaringClass;
this.visitorContext = visitorContext;
}
@Override
@NonNull
public ClassElement getType() {
TypeMirror parameterType = getNativeType().asType();
return mirrorToClassElement(parameterType, visitorContext);
}
@NonNull
@Override
public ClassElement getGenericType() {
TypeMirror returnType = getNativeType().asType();
Map<String, Map<String, TypeMirror>> declaredGenericInfo = declaringClass.getGenericTypeInfo();
return parameterizedClassElement(returnType, visitorContext, declaredGenericInfo);
}
@Override
public VariableElement getNativeType() {
return (VariableElement) super.getNativeType();
}
}