1*ac2a7c1bSSadaf Ebrahimidiff --git a/src/main/java/org/yaml/snakeyaml/introspector/PropertyUtils.java b/src/main/java/org/yaml/snakeyaml/introspector/PropertyUtils.java 2*ac2a7c1bSSadaf Ebrahimiindex 8afc5761..208c9351 100644 3*ac2a7c1bSSadaf Ebrahimi--- a/src/main/java/org/yaml/snakeyaml/introspector/PropertyUtils.java 4*ac2a7c1bSSadaf Ebrahimi+++ b/src/main/java/org/yaml/snakeyaml/introspector/PropertyUtils.java 5*ac2a7c1bSSadaf Ebrahimi@@ -13,12 +13,7 @@ 6*ac2a7c1bSSadaf Ebrahimi */ 7*ac2a7c1bSSadaf Ebrahimi package org.yaml.snakeyaml.introspector; 8*ac2a7c1bSSadaf Ebrahimi 9*ac2a7c1bSSadaf Ebrahimi-import java.beans.FeatureDescriptor; 10*ac2a7c1bSSadaf Ebrahimi-import java.beans.IntrospectionException; 11*ac2a7c1bSSadaf Ebrahimi-import java.beans.Introspector; 12*ac2a7c1bSSadaf Ebrahimi-import java.beans.PropertyDescriptor; 13*ac2a7c1bSSadaf Ebrahimi import java.lang.reflect.Field; 14*ac2a7c1bSSadaf Ebrahimi-import java.lang.reflect.Method; 15*ac2a7c1bSSadaf Ebrahimi import java.lang.reflect.Modifier; 16*ac2a7c1bSSadaf Ebrahimi import java.util.Collection; 17*ac2a7c1bSSadaf Ebrahimi import java.util.HashMap; 18*ac2a7c1bSSadaf Ebrahimi@@ -65,47 +60,14 @@ public class PropertyUtils { 19*ac2a7c1bSSadaf Ebrahimi } 20*ac2a7c1bSSadaf Ebrahimi 21*ac2a7c1bSSadaf Ebrahimi Map<String, Property> properties = new LinkedHashMap<String, Property>(); 22*ac2a7c1bSSadaf Ebrahimi- boolean inaccessableFieldsExist = false; 23*ac2a7c1bSSadaf Ebrahimi- if (bAccess == BeanAccess.FIELD) { 24*ac2a7c1bSSadaf Ebrahimi- for (Class<?> c = type; c != null; c = c.getSuperclass()) { 25*ac2a7c1bSSadaf Ebrahimi+ for (Class<?> c = type; c != null; c = c.getSuperclass()) { 26*ac2a7c1bSSadaf Ebrahimi for (Field field : c.getDeclaredFields()) { 27*ac2a7c1bSSadaf Ebrahimi- int modifiers = field.getModifiers(); 28*ac2a7c1bSSadaf Ebrahimi- if (!Modifier.isStatic(modifiers) && !Modifier.isTransient(modifiers) 29*ac2a7c1bSSadaf Ebrahimi- && !properties.containsKey(field.getName())) { 30*ac2a7c1bSSadaf Ebrahimi- properties.put(field.getName(), new FieldProperty(field)); 31*ac2a7c1bSSadaf Ebrahimi- } 32*ac2a7c1bSSadaf Ebrahimi- } 33*ac2a7c1bSSadaf Ebrahimi- } 34*ac2a7c1bSSadaf Ebrahimi- } else {// add JavaBean properties 35*ac2a7c1bSSadaf Ebrahimi- try { 36*ac2a7c1bSSadaf Ebrahimi- for (PropertyDescriptor property : Introspector.getBeanInfo(type) 37*ac2a7c1bSSadaf Ebrahimi- .getPropertyDescriptors()) { 38*ac2a7c1bSSadaf Ebrahimi- Method readMethod = property.getReadMethod(); 39*ac2a7c1bSSadaf Ebrahimi- if ((readMethod == null || !readMethod.getName().equals("getClass")) 40*ac2a7c1bSSadaf Ebrahimi- && !isTransient(property)) { 41*ac2a7c1bSSadaf Ebrahimi- properties.put(property.getName(), new MethodProperty(property)); 42*ac2a7c1bSSadaf Ebrahimi- } 43*ac2a7c1bSSadaf Ebrahimi- } 44*ac2a7c1bSSadaf Ebrahimi- } catch (IntrospectionException e) { 45*ac2a7c1bSSadaf Ebrahimi- throw new YAMLException(e); 46*ac2a7c1bSSadaf Ebrahimi- } 47*ac2a7c1bSSadaf Ebrahimi- 48*ac2a7c1bSSadaf Ebrahimi- // add public fields 49*ac2a7c1bSSadaf Ebrahimi- for (Class<?> c = type; c != null; c = c.getSuperclass()) { 50*ac2a7c1bSSadaf Ebrahimi- for (Field field : c.getDeclaredFields()) { 51*ac2a7c1bSSadaf Ebrahimi- int modifiers = field.getModifiers(); 52*ac2a7c1bSSadaf Ebrahimi- if (!Modifier.isStatic(modifiers) && !Modifier.isTransient(modifiers)) { 53*ac2a7c1bSSadaf Ebrahimi- if (Modifier.isPublic(modifiers)) { 54*ac2a7c1bSSadaf Ebrahimi- properties.put(field.getName(), new FieldProperty(field)); 55*ac2a7c1bSSadaf Ebrahimi- } else { 56*ac2a7c1bSSadaf Ebrahimi- inaccessableFieldsExist = true; 57*ac2a7c1bSSadaf Ebrahimi- } 58*ac2a7c1bSSadaf Ebrahimi- } 59*ac2a7c1bSSadaf Ebrahimi- } 60*ac2a7c1bSSadaf Ebrahimi- } 61*ac2a7c1bSSadaf Ebrahimi- } 62*ac2a7c1bSSadaf Ebrahimi- if (properties.isEmpty() && inaccessableFieldsExist) { 63*ac2a7c1bSSadaf Ebrahimi- throw new YAMLException("No JavaBean properties found in " + type.getName()); 64*ac2a7c1bSSadaf Ebrahimi+ int modifiers = field.getModifiers(); 65*ac2a7c1bSSadaf Ebrahimi+ if (!Modifier.isStatic(modifiers) && !Modifier.isTransient(modifiers) 66*ac2a7c1bSSadaf Ebrahimi+ && !properties.containsKey(field.getName())) { 67*ac2a7c1bSSadaf Ebrahimi+ properties.put(field.getName(), new FieldProperty(field)); 68*ac2a7c1bSSadaf Ebrahimi+ } 69*ac2a7c1bSSadaf Ebrahimi+ } 70*ac2a7c1bSSadaf Ebrahimi } 71*ac2a7c1bSSadaf Ebrahimi propertiesCache.put(type, properties); 72*ac2a7c1bSSadaf Ebrahimi return properties; 73*ac2a7c1bSSadaf Ebrahimi@@ -113,10 +75,6 @@ public class PropertyUtils { 74*ac2a7c1bSSadaf Ebrahimi 75*ac2a7c1bSSadaf Ebrahimi private static final String TRANSIENT = "transient"; 76*ac2a7c1bSSadaf Ebrahimi 77*ac2a7c1bSSadaf Ebrahimi- private boolean isTransient(FeatureDescriptor fd) { 78*ac2a7c1bSSadaf Ebrahimi- return Boolean.TRUE.equals(fd.getValue(TRANSIENT)); 79*ac2a7c1bSSadaf Ebrahimi- } 80*ac2a7c1bSSadaf Ebrahimi- 81*ac2a7c1bSSadaf Ebrahimi public Set<Property> getProperties(Class<? extends Object> type) { 82*ac2a7c1bSSadaf Ebrahimi return getProperties(type, beanAccess); 83*ac2a7c1bSSadaf Ebrahimi } 84