Commit 64b90666 authored by Phillip Webb's avatar Phillip Webb

Refine additional metadata detection logic

Update the additional metadata detection logic to deal with Gradle
folder layouts.

Fixes gh-2271
parent 735b96dd
...@@ -16,6 +16,10 @@ ...@@ -16,6 +16,10 @@
package org.springframework.boot.configurationprocessor; package org.springframework.boot.configurationprocessor;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.util.Collections; import java.util.Collections;
...@@ -75,6 +79,10 @@ public class ConfigurationMetadataAnnotationProcessor extends AbstractProcessor ...@@ -75,6 +79,10 @@ public class ConfigurationMetadataAnnotationProcessor extends AbstractProcessor
static final String LOMBOK_SETTER_ANNOTATION = "lombok.Setter"; static final String LOMBOK_SETTER_ANNOTATION = "lombok.Setter";
private static final String RESOURCES_FOLDER = "resources";
private static final String CLASSES_FOLDER = "classes";
private ConfigurationMetadata metadata; private ConfigurationMetadata metadata;
private TypeUtils typeUtils; private TypeUtils typeUtils;
...@@ -316,7 +324,7 @@ public class ConfigurationMetadataAnnotationProcessor extends AbstractProcessor ...@@ -316,7 +324,7 @@ public class ConfigurationMetadataAnnotationProcessor extends AbstractProcessor
} }
protected void writeMetaData(ConfigurationMetadata metadata) { protected void writeMetaData(ConfigurationMetadata metadata) {
metadata = mergeManualMetadata(metadata); metadata = mergeAdditionalMetadata(metadata);
if (!metadata.getItems().isEmpty()) { if (!metadata.getItems().isEmpty()) {
try { try {
FileObject resource = this.processingEnv.getFiler().createResource( FileObject resource = this.processingEnv.getFiler().createResource(
...@@ -336,12 +344,9 @@ public class ConfigurationMetadataAnnotationProcessor extends AbstractProcessor ...@@ -336,12 +344,9 @@ public class ConfigurationMetadataAnnotationProcessor extends AbstractProcessor
} }
} }
private ConfigurationMetadata mergeManualMetadata(ConfigurationMetadata metadata) { private ConfigurationMetadata mergeAdditionalMetadata(ConfigurationMetadata metadata) {
try { try {
FileObject manualMetadata = this.processingEnv.getFiler().createResource( InputStream inputStream = getAdditionalMetadata();
StandardLocation.CLASS_OUTPUT, "",
"META-INF/additional-spring-configuration-metadata.json");
InputStream inputStream = manualMetadata.toUri().toURL().openStream();
try { try {
ConfigurationMetadata merged = new ConfigurationMetadata(metadata); ConfigurationMetadata merged = new ConfigurationMetadata(metadata);
try { try {
...@@ -356,12 +361,34 @@ public class ConfigurationMetadataAnnotationProcessor extends AbstractProcessor ...@@ -356,12 +361,34 @@ public class ConfigurationMetadataAnnotationProcessor extends AbstractProcessor
inputStream.close(); inputStream.close();
} }
} }
catch (FileNotFoundException ex) {
// No additional metadata
return metadata;
}
catch (Exception ex) { catch (Exception ex) {
logWarning("Unable to merge additional-spring-configuration-metadata.json"); logWarning("Unable to merge additional-spring-configuration-metadata.json");
return metadata; return metadata;
} }
} }
private InputStream getAdditionalMetadata() throws IOException {
// Most build systems will have copied the file to the class output location
FileObject fileObject = this.processingEnv.getFiler().createResource(
StandardLocation.CLASS_OUTPUT, "",
"META-INF/additional-spring-configuration-metadata.json");
File file = new File(fileObject.toUri());
if (!file.exists()) {
// Gradle keeps things separate
String path = file.getPath();
int index = path.lastIndexOf(CLASSES_FOLDER);
path = path.substring(0, index) + RESOURCES_FOLDER
+ path.substring(index + CLASSES_FOLDER.length());
file = new File(path);
}
return (file.exists() ? new FileInputStream(file) : fileObject.toUri().toURL()
.openStream());
}
private void logWarning(String msg) { private void logWarning(String msg) {
this.processingEnv.getMessager().printMessage(Kind.WARNING, msg); this.processingEnv.getMessager().printMessage(Kind.WARNING, msg);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment