/*
* 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.resources.ExtensionResourcesGeneratorAnnotationProcessor.EXTENSION_ELEMENT;
import static org.mule.runtime.module.extension.internal.resources.ExtensionResourcesGeneratorAnnotationProcessor.PROCESSING_ENVIRONMENT;
import static org.mule.runtime.module.extension.internal.resources.ExtensionResourcesGeneratorAnnotationProcessor.ROUND_ENVIRONMENT;
import org.mule.runtime.api.meta.model.declaration.fluent.ExtensionDeclaration;
import org.mule.runtime.extension.api.loader.DeclarationEnricher;
import org.mule.runtime.extension.api.loader.ExtensionLoadingContext;
import org.mule.runtime.module.extension.internal.resources.BaseExtensionResourcesGeneratorAnnotationProcessor;
import javax.annotation.processing.ProcessingEnvironment;
import javax.annotation.processing.RoundEnvironment;
import javax.lang.model.element.TypeElement;
/**
* Implementation of {@link DeclarationEnricher} that fills the descriptions for all the components in the
* {@link ExtensionDeclaration} that is being declared.
* <p>
* When the source code is available uses the APT to access the AST tree and extract the extensions javadocs which are
* used to enrich the extension's descriptions.
* <p/>
* For this to be possible, the context should have as custom parameters a {@link ProcessingEnvironment} and the corresponding
* {@link TypeElement}, which will be fetched in the provided context under the keys
* {@link BaseExtensionResourcesGeneratorAnnotationProcessor#PROCESSING_ENVIRONMENT} and
* {@link BaseExtensionResourcesGeneratorAnnotationProcessor#EXTENSION_ELEMENT}.
*
* @since 4.0
*/
public final class DescriptionDeclarationEnricher implements DeclarationEnricher {
@Override
public void enrich(ExtensionLoadingContext loadingContext) {
ProcessingEnvironment processingEnv = getParameterOrFail(loadingContext, PROCESSING_ENVIRONMENT);
TypeElement extensionElement = getParameterOrFail(loadingContext, EXTENSION_ELEMENT);
RoundEnvironment roundEnvironment = getParameterOrFail(loadingContext, ROUND_ENVIRONMENT);
ExtensionDescriptionDocumenter declarer = new ExtensionDescriptionDocumenter(processingEnv, roundEnvironment);
declarer.document(loadingContext.getExtensionDeclarer().getDeclaration(), extensionElement);
}
private <T> T getParameterOrFail(ExtensionLoadingContext loadingContext, String key) {
return loadingContext.<T>getParameter(key)
.orElseThrow(() -> new IllegalStateException("Couldn't obtain [" + key + "] from the Extension Loading Context"));
}
}