Browse Source

PropertyValue stores source object in common superclass field

Issue: SPR-8337
(cherry picked from commit 367949e)
pull/1195/head
Juergen Hoeller 9 years ago
parent
commit
53dc996be8
  1. 24
      spring-beans/src/main/java/org/springframework/beans/PropertyValue.java

24
spring-beans/src/main/java/org/springframework/beans/PropertyValue.java

@ -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…
Cancel
Save