Use @AliasFor in @AutoConfigureRestDocs

Replace custom alias logic in @AutoConfigureRestDocs with @AliasFor.

Closes gh-6403
This commit is contained in:
Phillip Webb 2016-07-15 16:24:58 -07:00
parent c889c09066
commit c265de2535
3 changed files with 11 additions and 20 deletions

View File

@ -25,6 +25,7 @@ import java.lang.annotation.Target;
import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
import org.springframework.boot.test.autoconfigure.properties.PropertyMapping; import org.springframework.boot.test.autoconfigure.properties.PropertyMapping;
import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Import;
import org.springframework.core.annotation.AliasFor;
/** /**
* Annotation that can be applied to a test class to enable and configure * Annotation that can be applied to a test class to enable and configure
@ -46,17 +47,19 @@ import org.springframework.context.annotation.Import;
public @interface AutoConfigureRestDocs { public @interface AutoConfigureRestDocs {
/** /**
* The output directory to which generated snippets will be written. A synonym for * The output directory to which generated snippets will be written. A alias for
* {@link #outputDir}. * {@link #outputDir}.
* @return the output directory * @return the output directory
*/ */
@AliasFor("outputDir")
String value() default ""; String value() default "";
/** /**
* The output directory to which generated snippets will be written. A synonym for * The output directory to which generated snippets will be written. A alias for
* {@link #value}. * {@link #value}.
* @return the output directory * @return the output directory
*/ */
@AliasFor("value")
String outputDir() default ""; String outputDir() default "";
/** /**

View File

@ -24,38 +24,26 @@ import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar; import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata; import org.springframework.core.type.AnnotationMetadata;
import org.springframework.restdocs.ManualRestDocumentation; import org.springframework.restdocs.ManualRestDocumentation;
import org.springframework.util.StringUtils;
/** /**
* {@link ImportBeanDefinitionRegistrar} used by {@link AutoConfigureRestDocs}. * {@link ImportBeanDefinitionRegistrar} used by {@link AutoConfigureRestDocs}.
* *
* @author Andy Wilkinson * @author Andy Wilkinson
* @see AutoConfigureRestDocs
*/ */
class RestDocumentationContextProviderRegistrar implements ImportBeanDefinitionRegistrar { class RestDocumentationContextProviderRegistrar implements ImportBeanDefinitionRegistrar {
@Override @Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata,
BeanDefinitionRegistry registry) { BeanDefinitionRegistry registry) {
Map<String, Object> annotationAttributes = importingClassMetadata
.getAnnotationAttributes(AutoConfigureRestDocs.class.getName());
String outputDir = (String) annotationAttributes.get("outputDir");
AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder
.genericBeanDefinition(ManualRestDocumentation.class) .genericBeanDefinition(ManualRestDocumentation.class)
.addConstructorArgValue(determineOutputDir(importingClassMetadata)) .addConstructorArgValue(outputDir).getBeanDefinition();
.getBeanDefinition();
registry.registerBeanDefinition(ManualRestDocumentation.class.getName(), registry.registerBeanDefinition(ManualRestDocumentation.class.getName(),
beanDefinition); beanDefinition);
} }
private String determineOutputDir(AnnotationMetadata annotationMetadata) {
Map<String, Object> annotationAttributes = annotationMetadata
.getAnnotationAttributes(AutoConfigureRestDocs.class.getName());
String outputDir = (String) annotationAttributes.get("outputDir");
if (!StringUtils.hasText(outputDir)) {
outputDir = (String) annotationAttributes.get("value");
if (!StringUtils.hasText(outputDir)) {
throw new IllegalStateException(
"Either value or outputDir must be specified on @AutoConfigureRestDocs");
}
}
return outputDir;
}
} }

View File

@ -47,7 +47,7 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilder
*/ */
@RunWith(SpringRunner.class) @RunWith(SpringRunner.class)
@WebMvcTest(controllers = RestDocsTestController.class, secure = false) @WebMvcTest(controllers = RestDocsTestController.class, secure = false)
@AutoConfigureRestDocs(outputDir = "target/generated-snippets") @AutoConfigureRestDocs("target/generated-snippets")
public class RestDocsAutoConfigurationAdvancedConfigurationIntegrationTests { public class RestDocsAutoConfigurationAdvancedConfigurationIntegrationTests {
@Before @Before