/* * 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.capability.xml.description; import static org.mule.runtime.module.extension.internal.util.IntrospectionUtils.getField; import org.mule.runtime.api.meta.model.declaration.fluent.ParameterizedDeclaration; import org.mule.runtime.extension.api.annotation.param.Parameter; import org.mule.runtime.extension.api.annotation.param.ParameterGroup; import org.mule.runtime.module.extension.internal.capability.xml.schema.MethodDocumentation; import java.util.Map; import javax.annotation.processing.ProcessingEnvironment; import javax.lang.model.element.TypeElement; import javax.lang.model.element.VariableElement; /** * {@link AbstractDescriptionDocumenter} implementation that fills {@link ParameterizedDeclaration}s * * @since 4.0 */ final class ParameterDescriptionDocumenter extends AbstractDescriptionDocumenter<ParameterizedDeclaration<?>> { ParameterDescriptionDocumenter(ProcessingEnvironment processingEnv) { super(processingEnv); } /** * Describes parameters that are defined as Method parameters. */ void document(ParameterizedDeclaration<?> parameterized, MethodDocumentation documentation) { parameterized.getAllParameters().forEach(p -> { String description = documentation.getParameters().get(p.getName()); if (description != null) { p.setDescription(description); } }); } @Override void document(ParameterizedDeclaration<?> parameterized, final TypeElement element) { final Map<String, VariableElement> variableElements = processor.getFieldsAnnotatedWith(element, Parameter.class); TypeElement traversingElement = element; while (traversingElement != null && !Object.class.getName().equals(traversingElement.getQualifiedName().toString())) { Class<?> declaringClass = processor.classFor(traversingElement, processingEnv).get(); parameterized.getAllParameters() .forEach(param -> getField(declaringClass, param) .filter(field -> variableElements.containsKey(field.getName())) .ifPresent(field -> { String summary = processor.getJavaDocSummary(processingEnv, variableElements.get(field.getName())); param.setDescription(summary); })); traversingElement = (TypeElement) processingEnv.getTypeUtils().asElement(traversingElement.getSuperclass()); } for (VariableElement variableElement : processor.getFieldsAnnotatedWith(element, ParameterGroup.class) .values()) { TypeElement typeElement = (TypeElement) processingEnv.getTypeUtils().asElement(variableElement.asType()); document(parameterized, typeElement); } } }