Merge branch '2.6.x' into 2.7.x

Closes gh-31484
This commit is contained in:
Phillip Webb
2022-06-21 19:10:23 -07:00
9 changed files with 303 additions and 9 deletions

View File

@@ -180,7 +180,7 @@ public class ConfigurationMetadataAnnotationProcessor extends AbstractProcessor
}
if (roundEnv.processingOver()) {
try {
writeMetaData();
writeMetadata();
}
catch (Exception ex) {
throw new IllegalStateException("Failed to write metadata", ex);
@@ -327,7 +327,7 @@ public class ConfigurationMetadataAnnotationProcessor extends AbstractProcessor
return null;
}
protected ConfigurationMetadata writeMetaData() throws Exception {
protected ConfigurationMetadata writeMetadata() throws Exception {
ConfigurationMetadata metadata = this.metadataCollector.getMetadata();
metadata = mergeAdditionalMetadata(metadata);
if (!metadata.getItems().isEmpty()) {

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2012-2019 the original author or authors.
* Copyright 2012-2022 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -119,7 +119,7 @@ abstract class PropertyDescriptor<S extends Element> {
if (isCyclePresent(typeElement, getOwnerElement())) {
return false;
}
return isParentTheSame(typeElement, getOwnerElement());
return isParentTheSame(environment, typeElement, getOwnerElement());
}
ItemMetadata resolveItemMetadata(String prefix, MetadataGenerationEnvironment environment) {
@@ -169,11 +169,20 @@ abstract class PropertyDescriptor<S extends Element> {
return isCyclePresent(returnType, element.getEnclosingElement());
}
private boolean isParentTheSame(Element returnType, TypeElement element) {
private boolean isParentTheSame(MetadataGenerationEnvironment environment, Element returnType,
TypeElement element) {
if (returnType == null || element == null) {
return false;
}
return getTopLevelType(returnType).equals(getTopLevelType(element));
returnType = getTopLevelType(returnType);
Element candidate = element;
while (candidate != null && candidate instanceof TypeElement) {
if (returnType.equals(getTopLevelType(candidate))) {
return true;
}
candidate = environment.getTypeUtils().asElement(((TypeElement) candidate).getSuperclass());
}
return false;
}
private Element getTopLevelType(Element element) {