Add exclusion for well-known property types
Previously, any valid property was added to the meta-data of the current group. This can be annoying for types that are not meant to be bound from a simple string value. ClassLoader is one example. A list of well-known types has been added: if the property type matches an element of this list, it is ignored. Fixes gh-2012
This commit is contained in:
committed by
Phillip Webb
parent
4c7cc58a19
commit
3922808de0
@@ -75,6 +75,8 @@ public class ConfigurationMetadataAnnotationProcessor extends AbstractProcessor
|
||||
|
||||
private FieldValuesParser fieldValuesParser;
|
||||
|
||||
private ElementExcludeFilter elementExcludeFilter = new ElementExcludeFilter();
|
||||
|
||||
protected String configurationPropertiesAnnotation() {
|
||||
return CONFIGURATION_PROPERTIES_ANNOTATION;
|
||||
}
|
||||
@@ -177,10 +179,11 @@ public class ConfigurationMetadataAnnotationProcessor extends AbstractProcessor
|
||||
VariableElement field = members.getFields().get(name);
|
||||
Element returnType = this.processingEnv.getTypeUtils().asElement(
|
||||
getter.getReturnType());
|
||||
boolean isExcluded = this.elementExcludeFilter.isExcluded(returnType);
|
||||
boolean isNested = isNested(returnType, field, element);
|
||||
boolean isCollection = this.typeUtils.isCollectionOrMap(getter
|
||||
.getReturnType());
|
||||
if (!isNested && (setter != null || isCollection)) {
|
||||
if (!isExcluded && !isNested && (setter != null || isCollection)) {
|
||||
String dataType = this.typeUtils.getType(getter.getReturnType());
|
||||
String sourceType = this.typeUtils.getType(element);
|
||||
String description = this.typeUtils.getJavaDoc(field);
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Copyright 2012-2014 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.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.configurationprocessor;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.lang.model.element.Element;
|
||||
|
||||
/**
|
||||
* Filter to excluded elements that don't make sense to process.
|
||||
*
|
||||
* @author Stephane Nicoll
|
||||
* @since 1.2.0
|
||||
*/
|
||||
class ElementExcludeFilter {
|
||||
|
||||
private final Set<String> excludes = new HashSet<String>();
|
||||
|
||||
public ElementExcludeFilter() {
|
||||
add("java.io.Writer");
|
||||
add("java.io.PrintWriter");
|
||||
add("javax.sql.DataSource");
|
||||
add("java.lang.ClassLoader");
|
||||
}
|
||||
|
||||
private void add(String className) {
|
||||
this.excludes.add(className);
|
||||
}
|
||||
|
||||
public boolean isExcluded(Element element) {
|
||||
if (element == null) {
|
||||
return false;
|
||||
}
|
||||
return this.excludes.contains(element.toString());
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user