PropertyValue stores source object in common superclass field
Issue: SPR-8337
This commit is contained in:
parent
6f491bb319
commit
fa820bc0c9
|
|
@ -45,8 +45,6 @@ public class PropertyValue extends BeanMetadataAttributeAccessor implements Seri
|
||||||
|
|
||||||
private final Object value;
|
private final Object value;
|
||||||
|
|
||||||
private Object source;
|
|
||||||
|
|
||||||
private boolean optional = false;
|
private boolean optional = false;
|
||||||
|
|
||||||
private boolean converted = false;
|
private boolean converted = false;
|
||||||
|
|
@ -78,12 +76,12 @@ public class PropertyValue extends BeanMetadataAttributeAccessor implements Seri
|
||||||
Assert.notNull(original, "Original must not be null");
|
Assert.notNull(original, "Original must not be null");
|
||||||
this.name = original.getName();
|
this.name = original.getName();
|
||||||
this.value = original.getValue();
|
this.value = original.getValue();
|
||||||
this.source = original.getSource();
|
|
||||||
this.optional = original.isOptional();
|
this.optional = original.isOptional();
|
||||||
this.converted = original.converted;
|
this.converted = original.converted;
|
||||||
this.convertedValue = original.convertedValue;
|
this.convertedValue = original.convertedValue;
|
||||||
this.conversionNecessary = original.conversionNecessary;
|
this.conversionNecessary = original.conversionNecessary;
|
||||||
this.resolvedTokens = original.resolvedTokens;
|
this.resolvedTokens = original.resolvedTokens;
|
||||||
|
setSource(original.getSource());
|
||||||
copyAttributesFrom(original);
|
copyAttributesFrom(original);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -97,10 +95,10 @@ public class PropertyValue extends BeanMetadataAttributeAccessor implements Seri
|
||||||
Assert.notNull(original, "Original must not be null");
|
Assert.notNull(original, "Original must not be null");
|
||||||
this.name = original.getName();
|
this.name = original.getName();
|
||||||
this.value = newValue;
|
this.value = newValue;
|
||||||
this.source = original;
|
|
||||||
this.optional = original.isOptional();
|
this.optional = original.isOptional();
|
||||||
this.conversionNecessary = original.conversionNecessary;
|
this.conversionNecessary = original.conversionNecessary;
|
||||||
this.resolvedTokens = original.resolvedTokens;
|
this.resolvedTokens = original.resolvedTokens;
|
||||||
|
setSource(original);
|
||||||
copyAttributesFrom(original);
|
copyAttributesFrom(original);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -129,16 +127,28 @@ public class PropertyValue extends BeanMetadataAttributeAccessor implements Seri
|
||||||
*/
|
*/
|
||||||
public PropertyValue getOriginalPropertyValue() {
|
public PropertyValue getOriginalPropertyValue() {
|
||||||
PropertyValue original = this;
|
PropertyValue original = this;
|
||||||
while (original.source instanceof PropertyValue && original.source != original) {
|
Object source = getSource();
|
||||||
original = (PropertyValue) original.source;
|
while (source instanceof PropertyValue && source != original) {
|
||||||
|
original = (PropertyValue) source;
|
||||||
|
source = original.getSource();
|
||||||
}
|
}
|
||||||
return original;
|
return original;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set whether this is an optional value, that is, to be ignored
|
||||||
|
* when no corresponding property exists on the target class.
|
||||||
|
* @since 3.0
|
||||||
|
*/
|
||||||
public void setOptional(boolean optional) {
|
public void setOptional(boolean optional) {
|
||||||
this.optional = optional;
|
this.optional = optional;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reeurn whether this is an optional value, that is, to be ignored
|
||||||
|
* when no corresponding property exists on the target class.
|
||||||
|
* @since 3.0
|
||||||
|
*/
|
||||||
public boolean isOptional() {
|
public boolean isOptional() {
|
||||||
return this.optional;
|
return this.optional;
|
||||||
}
|
}
|
||||||
|
|
@ -180,7 +190,7 @@ public class PropertyValue extends BeanMetadataAttributeAccessor implements Seri
|
||||||
PropertyValue otherPv = (PropertyValue) other;
|
PropertyValue otherPv = (PropertyValue) other;
|
||||||
return (this.name.equals(otherPv.name) &&
|
return (this.name.equals(otherPv.name) &&
|
||||||
ObjectUtils.nullSafeEquals(this.value, otherPv.value) &&
|
ObjectUtils.nullSafeEquals(this.value, otherPv.value) &&
|
||||||
ObjectUtils.nullSafeEquals(this.source, otherPv.source));
|
ObjectUtils.nullSafeEquals(getSource(), otherPv.getSource()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue