From 1ee31e73d3b41a12326edea79c0a00dd0aad9d3f Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Mon, 10 Aug 2015 16:34:30 +0200 Subject: [PATCH] Avoid NPE if @ConfigurationProperties is not present The annotation processor detects `@ConfigurationProperties` bean or method definition and merges manual meta-data. The former step will fail with a NPE if the annotation is not present on the classpath. This could happen if the annotation processor is added to a module that is not actually using Spring Boot. We now have a defensive check that skips that steps but still attempts to merge manual meta-data if present. Closes gh-3720 --- .../ConfigurationMetadataAnnotationProcessor.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessor.java b/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessor.java index 6ae6db83bb5..f2659e6d2f2 100644 --- a/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessor.java +++ b/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessor.java @@ -118,9 +118,12 @@ public class ConfigurationMetadataAnnotationProcessor extends AbstractProcessor RoundEnvironment roundEnv) { this.metadataCollector.processing(roundEnv); Elements elementUtils = this.processingEnv.getElementUtils(); - for (Element element : roundEnv.getElementsAnnotatedWith(elementUtils - .getTypeElement(configurationPropertiesAnnotation()))) { - processElement(element); + TypeElement annotationType = elementUtils + .getTypeElement(configurationPropertiesAnnotation()); + if (annotationType != null) { // Is @ConfigurationProperties available + for (Element element : roundEnv.getElementsAnnotatedWith(annotationType)) { + processElement(element); + } } if (roundEnv.processingOver()) { writeMetaData();