Properly handle class reference
Previously, a condition on a class targeting an inner class would generate an invalid String representation of it. Unfortunately, the `toString` representation misses the `$` sign between the outer class and the inner class name. This commit post-processes the values to generate the appropriate representation. Closes gh-11282
This commit is contained in:
parent
654fe9a31c
commit
846e642631
|
@ -166,17 +166,24 @@ public class AutoConfigureAnnotationProcessor extends AbstractProcessor {
|
|||
Object value = entry.getValue().getValue();
|
||||
if (value instanceof List) {
|
||||
for (AnnotationValue annotationValue : (List<AnnotationValue>) value) {
|
||||
result.add(annotationValue.getValue());
|
||||
result.add(processValue(annotationValue.getValue()));
|
||||
}
|
||||
}
|
||||
else {
|
||||
result.add(value);
|
||||
result.add(processValue(value));
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private Object processValue(Object value) {
|
||||
if (value instanceof DeclaredType) {
|
||||
return getQualifiedName(((DeclaredType) value).asElement());
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
private String getQualifiedName(Element element) {
|
||||
if (element != null) {
|
||||
TypeElement enclosingElement = getEnclosingTypeElement(element.asType());
|
||||
|
|
|
@ -54,12 +54,12 @@ public class AutoConfigureAnnotationProcessorTests {
|
|||
@Test
|
||||
public void annotatedClass() throws Exception {
|
||||
Properties properties = compile(TestClassConfiguration.class);
|
||||
System.out.println(properties);
|
||||
assertThat(properties).hasSize(3);
|
||||
assertThat(properties).containsEntry(
|
||||
"org.springframework.boot.autoconfigureprocessor."
|
||||
+ "TestClassConfiguration.ConditionalOnClass",
|
||||
"java.io.InputStream,java.io.OutputStream");
|
||||
"java.io.InputStream,org.springframework.boot.autoconfigureprocessor."
|
||||
+ "TestClassConfiguration$Nested");
|
||||
assertThat(properties).containsKey(
|
||||
"org.springframework.boot.autoconfigureprocessor.TestClassConfiguration");
|
||||
assertThat(properties).containsKey(
|
||||
|
|
|
@ -16,15 +16,13 @@
|
|||
|
||||
package org.springframework.boot.autoconfigureprocessor;
|
||||
|
||||
import java.io.OutputStream;
|
||||
|
||||
/**
|
||||
* Test configuration with an annotated class.
|
||||
*
|
||||
* @author Madhura Bhave
|
||||
*/
|
||||
@TestConfiguration
|
||||
@TestConditionalOnClass(name = "java.io.InputStream", value = OutputStream.class)
|
||||
@TestConditionalOnClass(name = "java.io.InputStream", value = TestClassConfiguration.Nested.class)
|
||||
public class TestClassConfiguration {
|
||||
|
||||
@TestAutoConfigureOrder
|
||||
|
|
Loading…
Reference in New Issue