summaryrefslogtreecommitdiff
path: root/src/main/java/com/amazon/carbonado/raw/GenericEncodingStrategy.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/amazon/carbonado/raw/GenericEncodingStrategy.java')
-rw-r--r--src/main/java/com/amazon/carbonado/raw/GenericEncodingStrategy.java26
1 files changed, 20 insertions, 6 deletions
diff --git a/src/main/java/com/amazon/carbonado/raw/GenericEncodingStrategy.java b/src/main/java/com/amazon/carbonado/raw/GenericEncodingStrategy.java
index 7cf3468..edb54d8 100644
--- a/src/main/java/com/amazon/carbonado/raw/GenericEncodingStrategy.java
+++ b/src/main/java/com/amazon/carbonado/raw/GenericEncodingStrategy.java
@@ -48,6 +48,7 @@ import com.amazon.carbonado.info.ChainedProperty;
import com.amazon.carbonado.info.Direction;
import com.amazon.carbonado.info.OrderedProperty;
import com.amazon.carbonado.info.StorableIndex;
+import com.amazon.carbonado.info.StorableInfo;
import com.amazon.carbonado.info.StorableIntrospector;
import com.amazon.carbonado.info.StorableProperty;
import com.amazon.carbonado.info.StorablePropertyAdapter;
@@ -2347,18 +2348,31 @@ public class GenericEncodingStrategy<S extends Storable> {
doDrop: {
Class instanceVarClass = instanceVarType.toClass();
if (instanceVarClass != null) {
- Map<String, BeanProperty> props =
- BeanIntrospector.getAllProperties(instanceVarClass);
- BeanProperty prop = props.get(info.getPropertyName());
- if (prop != null) {
- if (prop.getType() == type.toClass()) {
+ Class propertyClass;
+ {
+ Class inferredType = StorableIntrospector.inferType(instanceVarClass);
+ if (inferredType != null) {
+ StorableInfo propInfo = StorableIntrospector.examine(inferredType);
+ Map<String, StorableProperty> props = propInfo.getAllProperties();
+ StorableProperty prop = props.get(info.getPropertyName());
+ propertyClass = prop == null ? null : prop.getType();
+ } else {
+ Map<String, BeanProperty> props =
+ BeanIntrospector.getAllProperties(instanceVarClass);
+ BeanProperty prop = props.get(info.getPropertyName());
+ propertyClass = prop == null ? null : prop.getType();
+ }
+ }
+
+ if (propertyClass != null) {
+ if (propertyClass == type.toClass()) {
break doDrop;
}
// Types differ, but if primitive types, perform conversion.
TypeDesc primType = type.toPrimitiveType();
if (primType != null) {
- TypeDesc propType = TypeDesc.forClass(prop.getType());
+ TypeDesc propType = TypeDesc.forClass(propertyClass);
TypeDesc primPropType = propType.toPrimitiveType();
if (primPropType != null) {
// Apply conversion and store property.