Move setter attribute in PropertyDescriptor proper
This commit is contained in:
parent
a90c8d01a9
commit
75c248dcba
|
@ -21,8 +21,6 @@ import javax.lang.model.element.TypeElement;
|
||||||
import javax.lang.model.element.VariableElement;
|
import javax.lang.model.element.VariableElement;
|
||||||
import javax.lang.model.type.TypeMirror;
|
import javax.lang.model.type.TypeMirror;
|
||||||
|
|
||||||
import org.springframework.boot.configurationprocessor.metadata.ItemDeprecation;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A {@link PropertyDescriptor} for a standard JavaBean property.
|
* A {@link PropertyDescriptor} for a standard JavaBean property.
|
||||||
*
|
*
|
||||||
|
@ -30,17 +28,10 @@ import org.springframework.boot.configurationprocessor.metadata.ItemDeprecation;
|
||||||
*/
|
*/
|
||||||
class JavaBeanPropertyDescriptor extends PropertyDescriptor<ExecutableElement> {
|
class JavaBeanPropertyDescriptor extends PropertyDescriptor<ExecutableElement> {
|
||||||
|
|
||||||
private final ExecutableElement setter;
|
|
||||||
|
|
||||||
JavaBeanPropertyDescriptor(TypeElement ownerElement, ExecutableElement factoryMethod,
|
JavaBeanPropertyDescriptor(TypeElement ownerElement, ExecutableElement factoryMethod,
|
||||||
ExecutableElement getter, String name, TypeMirror type, VariableElement field,
|
ExecutableElement getter, String name, TypeMirror type, VariableElement field,
|
||||||
ExecutableElement setter) {
|
ExecutableElement setter) {
|
||||||
super(ownerElement, factoryMethod, getter, name, type, field, getter);
|
super(ownerElement, factoryMethod, getter, name, type, field, getter, setter);
|
||||||
this.setter = setter;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ExecutableElement getSetter() {
|
|
||||||
return this.setter;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -50,13 +41,4 @@ class JavaBeanPropertyDescriptor extends PropertyDescriptor<ExecutableElement> {
|
||||||
&& (getSetter() != null || isCollection);
|
&& (getSetter() != null || isCollection);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected ItemDeprecation resolveItemDeprecation(
|
|
||||||
MetadataGenerationEnvironment environment) {
|
|
||||||
boolean deprecated = environment.isDeprecated(getGetter())
|
|
||||||
|| environment.isDeprecated(getSetter())
|
|
||||||
|| environment.isDeprecated(getFactoryMethod());
|
|
||||||
return deprecated ? environment.resolveItemDeprecation(getGetter()) : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,9 +43,9 @@ class LombokPropertyDescriptor extends PropertyDescriptor<VariableElement> {
|
||||||
private static final String LOMBOK_ACCESS_LEVEL_PUBLIC = "PUBLIC";
|
private static final String LOMBOK_ACCESS_LEVEL_PUBLIC = "PUBLIC";
|
||||||
|
|
||||||
LombokPropertyDescriptor(TypeElement typeElement, ExecutableElement factoryMethod,
|
LombokPropertyDescriptor(TypeElement typeElement, ExecutableElement factoryMethod,
|
||||||
VariableElement field, String name, TypeMirror type,
|
VariableElement field, String name, TypeMirror type, ExecutableElement getter,
|
||||||
ExecutableElement getter) {
|
ExecutableElement setter) {
|
||||||
super(typeElement, factoryMethod, field, name, type, field, getter);
|
super(typeElement, factoryMethod, field, name, type, field, getter, setter);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -69,14 +69,15 @@ class LombokPropertyDescriptor extends PropertyDescriptor<VariableElement> {
|
||||||
protected ItemDeprecation resolveItemDeprecation(
|
protected ItemDeprecation resolveItemDeprecation(
|
||||||
MetadataGenerationEnvironment environment) {
|
MetadataGenerationEnvironment environment) {
|
||||||
boolean deprecated = environment.isDeprecated(getField())
|
boolean deprecated = environment.isDeprecated(getField())
|
||||||
|
|| environment.isDeprecated(getGetter())
|
||||||
|| environment.isDeprecated(getFactoryMethod());
|
|| environment.isDeprecated(getFactoryMethod());
|
||||||
return deprecated ? new ItemDeprecation() : null;
|
return deprecated ? environment.resolveItemDeprecation(getGetter()) : null;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean hasSetter(MetadataGenerationEnvironment env) {
|
private boolean hasSetter(MetadataGenerationEnvironment env) {
|
||||||
return !getField().getModifiers().contains(Modifier.FINAL)
|
boolean nonFinalPublicField = !getField().getModifiers().contains(Modifier.FINAL)
|
||||||
&& hasLombokPublicAccessor(env, false);
|
&& hasLombokPublicAccessor(env, false);
|
||||||
|
return getSetter() != null || nonFinalPublicField;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -49,9 +49,11 @@ abstract class PropertyDescriptor<S> {
|
||||||
|
|
||||||
private final ExecutableElement getter;
|
private final ExecutableElement getter;
|
||||||
|
|
||||||
|
private final ExecutableElement setter;
|
||||||
|
|
||||||
protected PropertyDescriptor(TypeElement ownerElement,
|
protected PropertyDescriptor(TypeElement ownerElement,
|
||||||
ExecutableElement factoryMethod, S source, String name, TypeMirror type,
|
ExecutableElement factoryMethod, S source, String name, TypeMirror type,
|
||||||
VariableElement field, ExecutableElement getter) {
|
VariableElement field, ExecutableElement getter, ExecutableElement setter) {
|
||||||
this.ownerElement = ownerElement;
|
this.ownerElement = ownerElement;
|
||||||
this.factoryMethod = factoryMethod;
|
this.factoryMethod = factoryMethod;
|
||||||
this.source = source;
|
this.source = source;
|
||||||
|
@ -59,6 +61,7 @@ abstract class PropertyDescriptor<S> {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
this.field = field;
|
this.field = field;
|
||||||
this.getter = getter;
|
this.getter = getter;
|
||||||
|
this.setter = setter;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TypeElement getOwnerElement() {
|
public TypeElement getOwnerElement() {
|
||||||
|
@ -89,11 +92,20 @@ abstract class PropertyDescriptor<S> {
|
||||||
return this.getter;
|
return this.getter;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract ItemDeprecation resolveItemDeprecation(
|
public ExecutableElement getSetter() {
|
||||||
MetadataGenerationEnvironment environment);
|
return this.setter;
|
||||||
|
}
|
||||||
|
|
||||||
protected abstract boolean isProperty(MetadataGenerationEnvironment environment);
|
protected abstract boolean isProperty(MetadataGenerationEnvironment environment);
|
||||||
|
|
||||||
|
protected ItemDeprecation resolveItemDeprecation(
|
||||||
|
MetadataGenerationEnvironment environment) {
|
||||||
|
boolean deprecated = environment.isDeprecated(getGetter())
|
||||||
|
|| environment.isDeprecated(getSetter())
|
||||||
|
|| environment.isDeprecated(getFactoryMethod());
|
||||||
|
return deprecated ? environment.resolveItemDeprecation(getGetter()) : null;
|
||||||
|
}
|
||||||
|
|
||||||
protected boolean isNested(MetadataGenerationEnvironment environment) {
|
protected boolean isNested(MetadataGenerationEnvironment environment) {
|
||||||
Element typeElement = environment.getTypeUtils().asElement(getType());
|
Element typeElement = environment.getTypeUtils().asElement(getType());
|
||||||
if (!(typeElement instanceof TypeElement)
|
if (!(typeElement instanceof TypeElement)
|
||||||
|
|
|
@ -61,8 +61,9 @@ class PropertyDescriptorResolver {
|
||||||
members.getFields().forEach((name, field) -> {
|
members.getFields().forEach((name, field) -> {
|
||||||
TypeMirror returnType = field.asType();
|
TypeMirror returnType = field.asType();
|
||||||
ExecutableElement getter = members.getPublicGetter(name, returnType);
|
ExecutableElement getter = members.getPublicGetter(name, returnType);
|
||||||
|
ExecutableElement setter = members.getPublicSetter(name, returnType);
|
||||||
candidates.add(new LombokPropertyDescriptor(type, factoryMethod, field, name,
|
candidates.add(new LombokPropertyDescriptor(type, factoryMethod, field, name,
|
||||||
returnType, getter));
|
returnType, getter, setter));
|
||||||
});
|
});
|
||||||
return candidates.stream().filter(this::isCandidate);
|
return candidates.stream().filter(this::isCandidate);
|
||||||
}
|
}
|
||||||
|
|
|
@ -191,7 +191,7 @@ public class LombokPropertyDescriptorTests extends PropertyDescriptorTests {
|
||||||
VariableElement field = getField(ownerElement, "third");
|
VariableElement field = getField(ownerElement, "third");
|
||||||
ExecutableElement getter = getMethod(ownerElement, "getThird");
|
ExecutableElement getter = getMethod(ownerElement, "getThird");
|
||||||
LombokPropertyDescriptor property = new LombokPropertyDescriptor(ownerElement,
|
LombokPropertyDescriptor property = new LombokPropertyDescriptor(ownerElement,
|
||||||
null, field, "third", field.asType(), getter);
|
null, field, "third", field.asType(), getter, null);
|
||||||
assertItemMetadata(metadataEnv, property).isGroup().hasName("test.third")
|
assertItemMetadata(metadataEnv, property).isGroup().hasName("test.third")
|
||||||
.hasType(
|
.hasType(
|
||||||
"org.springframework.boot.configurationsample.lombok.SimpleLombokPojo")
|
"org.springframework.boot.configurationsample.lombok.SimpleLombokPojo")
|
||||||
|
@ -303,8 +303,10 @@ public class LombokPropertyDescriptorTests extends PropertyDescriptorTests {
|
||||||
VariableElement field = getField(ownerElement, name);
|
VariableElement field = getField(ownerElement, name);
|
||||||
ExecutableElement getter = getMethod(ownerElement,
|
ExecutableElement getter = getMethod(ownerElement,
|
||||||
createAccessorMethodName("get", name));
|
createAccessorMethodName("get", name));
|
||||||
|
ExecutableElement setter = getMethod(ownerElement,
|
||||||
|
createAccessorMethodName("set", name));
|
||||||
return new LombokPropertyDescriptor(ownerElement, null, field, name,
|
return new LombokPropertyDescriptor(ownerElement, null, field, name,
|
||||||
field.asType(), getter);
|
field.asType(), getter, setter);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue