Commit 75c248dc authored by Stephane Nicoll's avatar Stephane Nicoll

Move setter attribute in PropertyDescriptor proper

parent a90c8d01
...@@ -21,8 +21,6 @@ import javax.lang.model.element.TypeElement; ...@@ -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; ...@@ -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> { ...@@ -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> { ...@@ -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> { ...@@ -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> { ...@@ -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> { ...@@ -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> { ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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);
} }
} }
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