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