test_class.declarator: LOG = LoggerFactory.getLogger(ObjectPropertyUtilsTest.class)
test_class.modifier: final
test_class.original_string: final Logger LOG = LoggerFactory.getLogger(ObjectPropertyUtilsTest.class);
test_class.type: Logger
test_class.var_name: LOG
test_class.file: rice-framework/krad-web-framework/src/test/java/org/kuali/rice/krad/uif/util/ObjectPropertyUtilsTest.java
test_class.identifier: ObjectPropertyUtilsTest
test_class.superclass: extends ProcessLoggingUnitTest
test_case.body: @Test
      public void testGetterInInterfaceOrSuperHasWiderType() {
          Method readMethod = null;
  
          readMethod = ObjectPropertyUtils.getReadMethod(ComparableHolderImpl.class, "comparable");
          //System.out.println(readMethod.getReturnType());
          assertEquals(Integer.class, readMethod.getReturnType());
  
          readMethod = ObjectPropertyUtils.getReadMethod(NumberedImplOne.class, "number");
          //System.out.println(readMethod.getReturnType());
          assertEquals(Integer.class, readMethod.getReturnType());
  
          readMethod = ObjectPropertyUtils.getReadMethod(ConcreteNarrowedNumberHolder.class, "number");
          //System.out.println(readMethod.getReturnType());
          assertEquals(Integer.class, readMethod.getReturnType());
  
          readMethod = ObjectPropertyUtils.getReadMethod(ConcreteNarrowedNumberHolderSub.class, "number");
          //System.out.println(readMethod.getReturnType());
          assertEquals(Integer.class, readMethod.getReturnType());
  
          // This case is *not* covered by our workaround, and would fail w/ JDK 6 on Linux if enabled.
          // The interface has a concrete superclass, which will be returned in JDK6 on Linux where the
          // Method order returned by reflection on a class is different, and the Introspector isn't smart
          // enough to ask which Method return type is more specific.
          for (int i = 0; i < 1; ++i) {
              readMethod = ObjectPropertyUtils.getReadMethod(KualiPercentHolder.class, "decimal");
              //System.out.println(readMethod.getReturnType());
              //System.out.println(readMethod.getReturnType() == KualiDecimal.class);
          }
  
          if (readMethod.getReturnType() == KualiDecimal.class) {
              LOG.info("I bet you're using JDK6 on Linux");
          }
  
          //System.out.println("==============================================");
          //System.out.println("ObjectPropertyUtils.getReadMethod(Base.class, \"value\")");
          readMethod = ObjectPropertyUtils.getReadMethod(Base.class, "value");
          //System.out.println(readMethod.getReturnType());
          assertEquals(Number.class, readMethod.getReturnType());
  
          //System.out.println("==============================================");
          //System.out.println("ObjectPropertyUtils.getReadMethod(Int.class, \"value\")");
          readMethod = ObjectPropertyUtils.getReadMethod(Int.class, "value");
          //System.out.println(readMethod.getReturnType());
          assertEquals(Integer.class, readMethod.getReturnType());
  
          //        System.out.println("==============================================");
          //        try {
          //            // lookup bean info for given class
          //            BeanInfo info = Introspector.getBeanInfo(Int.class);
          //            if (info != null) {
          //                // get list of descriptors and iterate to validate each property
          //                PropertyDescriptor[] descriptors = info.getPropertyDescriptors();
          //                for (int i = 0; i < descriptors.length; i++) {
          //                    System.out.println("--------------------------");
          //                    PropertyDescriptor descriptor = descriptors [i];
          //                    System.out.println(descriptor.getName());
          //
          //                    // check if read method is bridge and lookup real method
          //                    readMethod = descriptor.getReadMethod();
          //                    System.out.println(readMethod.getReturnType());
          //                    System.out.println("readMethod.isBridge()=>" + readMethod.isBridge());
          //                    if (readMethod != null && readMethod.isBridge()) {
          //                        Method method = Int.class.getMethod(readMethod.getName(), readMethod.getParameterTypes());
          //                        System.out.println(method.getReturnType());
          //
          //                        // if method found, update read method
          //                        // which also updates property type
          //                        if (method != null) {
          //                            descriptor.setReadMethod(method);
          //
          //                            // TODO: lookup write method with same type in case the write
          //                            // method is the bridge method
          //                        }
          //                    }
          //                }
          //            }
          //        } catch (IntrospectionException e) {
          //            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
          //        } catch (NoSuchMethodException e) {
          //            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
          //        }
  
          // Other cases to test if we have to refine this functionality:
          // * similar to the ConcreteNarrowedNumberHolder,
          //   but creating an abstract impl of AbstractKualiDecimalHolder as the intermediate class
          // * similar to ConcreteNarrowedNumberHolderSub, but ConcreteNarrowedKualiDecimalHolderSub
      }
test_case.class_method_signature: ObjectPropertyUtilsTest.testGetterInInterfaceOrSuperHasWiderType()
test_case.full_signature: @Test public void testGetterInInterfaceOrSuperHasWiderType()
test_case.identifier: testGetterInInterfaceOrSuperHasWiderType
test_case.invocations: getReadMethod assertEquals getReturnType getReadMethod assertEquals getReturnType getReadMethod assertEquals getReturnType getReadMethod assertEquals getReturnType getReadMethod getReturnType info getReadMethod assertEquals getReturnType getReadMethod assertEquals getReturnType
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void testGetterInInterfaceOrSuperHasWiderType()
focal_class.declarator: LOG = Logger.getLogger(ObjectPropertyUtils.class)
focal_class.modifier: private static final
focal_class.original_string: private static final Logger LOG = Logger.getLogger(ObjectPropertyUtils.class);
focal_class.type: Logger
focal_class.var_name: LOG
focal_class.declarator: METADATA_CACHE = Collections
              .synchronizedMap(new WeakHashMap<Class<?>, ObjectPropertyMetadata>(2048))
focal_class.modifier: private static final
focal_class.original_string: private static final Map<Class<?>, ObjectPropertyMetadata> METADATA_CACHE = Collections
              .synchronizedMap(new WeakHashMap<Class<?>, ObjectPropertyMetadata>(2048));
focal_class.type: Map<Class<?>, ObjectPropertyMetadata>
focal_class.var_name: METADATA_CACHE
focal_class.declarator: SPLIT_PROPERTY_PATH_ENTRY = new SplitPropertyPathEntry()
focal_class.modifier: private static final
focal_class.original_string: private static final SplitPropertyPathEntry SPLIT_PROPERTY_PATH_ENTRY = new SplitPropertyPathEntry();
focal_class.type: SplitPropertyPathEntry
focal_class.var_name: SPLIT_PROPERTY_PATH_ENTRY
focal_class.declarator: EMPTY_STRING_ARRAY = new String[0]
focal_class.modifier: private static final
focal_class.original_string: private static final String[] EMPTY_STRING_ARRAY = new String[0];
focal_class.type: String[]
focal_class.var_name: EMPTY_STRING_ARRAY
focal_class.file: rice-framework/krad-web-framework/src/main/java/org/kuali/rice/krad/uif/util/ObjectPropertyUtils.java
focal_class.identifier: ObjectPropertyUtils
focal_class.class_method_signature: ObjectPropertyUtils.getPropertyDescriptors(Class<?> beanClass)
focal_class.full_signature: public static Map<String, PropertyDescriptor> getPropertyDescriptors(Class<?> beanClass)
focal_class.identifier: getPropertyDescriptors
focal_class.modifiers: public static
focal_class.parameters: (Class<?> beanClass)
focal_class.return: Map<String, PropertyDescriptor>
focal_class.signature: Map<String, PropertyDescriptor> getPropertyDescriptors(Class<?> beanClass)
focal_class.class_method_signature: ObjectPropertyUtils.getPropertyDescriptor(Class<?> beanClass, String propertyName)
focal_class.full_signature: public static PropertyDescriptor getPropertyDescriptor(Class<?> beanClass, String propertyName)
focal_class.identifier: getPropertyDescriptor
focal_class.modifiers: public static
focal_class.parameters: (Class<?> beanClass, String propertyName)
focal_class.return: PropertyDescriptor
focal_class.signature: PropertyDescriptor getPropertyDescriptor(Class<?> beanClass, String propertyName)
focal_class.class_method_signature: ObjectPropertyUtils.registerPropertyEditors(PropertyEditorRegistry registry)
focal_class.full_signature: public static void registerPropertyEditors(PropertyEditorRegistry registry)
focal_class.identifier: registerPropertyEditors
focal_class.modifiers: public static
focal_class.parameters: (PropertyEditorRegistry registry)
focal_class.return: void
focal_class.signature: void registerPropertyEditors(PropertyEditorRegistry registry)
focal_class.class_method_signature: ObjectPropertyUtils.getReadablePropertyNames(Class<?> beanClass)
focal_class.full_signature: public static Set<String> getReadablePropertyNames(Class<?> beanClass)
focal_class.identifier: getReadablePropertyNames
focal_class.modifiers: public static
focal_class.parameters: (Class<?> beanClass)
focal_class.return: Set<String>
focal_class.signature: Set<String> getReadablePropertyNames(Class<?> beanClass)
focal_class.class_method_signature: ObjectPropertyUtils.getReadMethod(Class<?> beanClass, String propertyName)
focal_class.full_signature: public static Method getReadMethod(Class<?> beanClass, String propertyName)
focal_class.identifier: getReadMethod
focal_class.modifiers: public static
focal_class.parameters: (Class<?> beanClass, String propertyName)
focal_class.return: Method
focal_class.signature: Method getReadMethod(Class<?> beanClass, String propertyName)
focal_class.class_method_signature: ObjectPropertyUtils.getWriteMethod(Class<?> beanClass, String propertyName)
focal_class.full_signature: public static Method getWriteMethod(Class<?> beanClass, String propertyName)
focal_class.identifier: getWriteMethod
focal_class.modifiers: public static
focal_class.parameters: (Class<?> beanClass, String propertyName)
focal_class.return: Method
focal_class.signature: Method getWriteMethod(Class<?> beanClass, String propertyName)
focal_class.class_method_signature: ObjectPropertyUtils.copyPropertiesToObject(Map<String, String> properties, Object object)
focal_class.full_signature: public static void copyPropertiesToObject(Map<String, String> properties, Object object)
focal_class.identifier: copyPropertiesToObject
focal_class.modifiers: public static
focal_class.parameters: (Map<String, String> properties, Object object)
focal_class.return: void
focal_class.signature: void copyPropertiesToObject(Map<String, String> properties, Object object)
focal_class.class_method_signature: ObjectPropertyUtils.getPropertyType(Class<?> beanClass, String propertyPath)
focal_class.full_signature: public static Class<?> getPropertyType(Class<?> beanClass, String propertyPath)
focal_class.identifier: getPropertyType
focal_class.modifiers: public static
focal_class.parameters: (Class<?> beanClass, String propertyPath)
focal_class.return: Class<?>
focal_class.signature: Class<?> getPropertyType(Class<?> beanClass, String propertyPath)
focal_class.class_method_signature: ObjectPropertyUtils.getPropertyType(Object object, String propertyPath)
focal_class.full_signature: public static Class<?> getPropertyType(Object object, String propertyPath)
focal_class.identifier: getPropertyType
focal_class.modifiers: public static
focal_class.parameters: (Object object, String propertyPath)
focal_class.return: Class<?>
focal_class.signature: Class<?> getPropertyType(Object object, String propertyPath)
focal_class.class_method_signature: ObjectPropertyUtils.getReadablePropertyNamesByType(Object bean, Class<?> propertyType)
focal_class.full_signature: public static Set<String> getReadablePropertyNamesByType(Object bean, Class<?> propertyType)
focal_class.identifier: getReadablePropertyNamesByType
focal_class.modifiers: public static
focal_class.parameters: (Object bean, Class<?> propertyType)
focal_class.return: Set<String>
focal_class.signature: Set<String> getReadablePropertyNamesByType(Object bean, Class<?> propertyType)
focal_class.class_method_signature: ObjectPropertyUtils.getReadablePropertyNamesByType(Class<?> beanClass, Class<?> propertyType)
focal_class.full_signature: public static Set<String> getReadablePropertyNamesByType(Class<?> beanClass, Class<?> propertyType)
focal_class.identifier: getReadablePropertyNamesByType
focal_class.modifiers: public static
focal_class.parameters: (Class<?> beanClass, Class<?> propertyType)
focal_class.return: Set<String>
focal_class.signature: Set<String> getReadablePropertyNamesByType(Class<?> beanClass, Class<?> propertyType)
focal_class.class_method_signature: ObjectPropertyUtils.getReadablePropertyNamesByAnnotationType(Object bean,
              Class<? extends Annotation> annotationType)
focal_class.full_signature: public static Set<String> getReadablePropertyNamesByAnnotationType(Object bean,
              Class<? extends Annotation> annotationType)
focal_class.identifier: getReadablePropertyNamesByAnnotationType
focal_class.modifiers: public static
focal_class.parameters: (Object bean,
              Class<? extends Annotation> annotationType)
focal_class.return: Set<String>
focal_class.signature: Set<String> getReadablePropertyNamesByAnnotationType(Object bean,
              Class<? extends Annotation> annotationType)
focal_class.class_method_signature: ObjectPropertyUtils.getReadablePropertyNamesByAnnotationType(
              Class<?> beanClass, Class<? extends Annotation> annotationType)
focal_class.full_signature: public static Set<String> getReadablePropertyNamesByAnnotationType(
              Class<?> beanClass, Class<? extends Annotation> annotationType)
focal_class.identifier: getReadablePropertyNamesByAnnotationType
focal_class.modifiers: public static
focal_class.parameters: (
              Class<?> beanClass, Class<? extends Annotation> annotationType)
focal_class.return: Set<String>
focal_class.signature: Set<String> getReadablePropertyNamesByAnnotationType(
              Class<?> beanClass, Class<? extends Annotation> annotationType)
focal_class.class_method_signature: ObjectPropertyUtils.getReadablePropertyNamesByCollectionType(Object bean, Class<?> collectionType)
focal_class.full_signature: public static Set<String> getReadablePropertyNamesByCollectionType(Object bean, Class<?> collectionType)
focal_class.identifier: getReadablePropertyNamesByCollectionType
focal_class.modifiers: public static
focal_class.parameters: (Object bean, Class<?> collectionType)
focal_class.return: Set<String>
focal_class.signature: Set<String> getReadablePropertyNamesByCollectionType(Object bean, Class<?> collectionType)
focal_class.class_method_signature: ObjectPropertyUtils.getWritablePropertyNames(Object bean)
focal_class.full_signature: public static Set<String> getWritablePropertyNames(Object bean)
focal_class.identifier: getWritablePropertyNames
focal_class.modifiers: public static
focal_class.parameters: (Object bean)
focal_class.return: Set<String>
focal_class.signature: Set<String> getWritablePropertyNames(Object bean)
focal_class.class_method_signature: ObjectPropertyUtils.getReadablePropertyNamesByCollectionType(Class<?> beanClass, Class<?> collectionType)
focal_class.full_signature: public static Set<String> getReadablePropertyNamesByCollectionType(Class<?> beanClass, Class<?> collectionType)
focal_class.identifier: getReadablePropertyNamesByCollectionType
focal_class.modifiers: public static
focal_class.parameters: (Class<?> beanClass, Class<?> collectionType)
focal_class.return: Set<String>
focal_class.signature: Set<String> getReadablePropertyNamesByCollectionType(Class<?> beanClass, Class<?> collectionType)
focal_class.class_method_signature: ObjectPropertyUtils.getPropertyValue(Object object, String propertyPath)
focal_class.full_signature: @SuppressWarnings("unchecked") public static T getPropertyValue(Object object, String propertyPath)
focal_class.identifier: getPropertyValue
focal_class.modifiers: @SuppressWarnings("unchecked") public static
focal_class.parameters: (Object object, String propertyPath)
focal_class.return: T
focal_class.signature: T getPropertyValue(Object object, String propertyPath)
focal_class.class_method_signature: ObjectPropertyUtils.getPropertyValueAsText(Object bean, String path)
focal_class.full_signature: public static String getPropertyValueAsText(Object bean, String path)
focal_class.identifier: getPropertyValueAsText
focal_class.modifiers: public static
focal_class.parameters: (Object bean, String path)
focal_class.return: String
focal_class.signature: String getPropertyValueAsText(Object bean, String path)
focal_class.class_method_signature: ObjectPropertyUtils.getPropertyEditorRegistry()
focal_class.full_signature: public static PropertyEditorRegistry getPropertyEditorRegistry()
focal_class.identifier: getPropertyEditorRegistry
focal_class.modifiers: public static
focal_class.parameters: ()
focal_class.return: PropertyEditorRegistry
focal_class.signature: PropertyEditorRegistry getPropertyEditorRegistry()
focal_class.class_method_signature: ObjectPropertyUtils.getPrimitiveType(Class<?> type)
focal_class.full_signature: public static Class<?> getPrimitiveType(Class<?> type)
focal_class.identifier: getPrimitiveType
focal_class.modifiers: public static
focal_class.parameters: (Class<?> type)
focal_class.return: Class<?>
focal_class.signature: Class<?> getPrimitiveType(Class<?> type)
focal_class.class_method_signature: ObjectPropertyUtils.getPropertyEditor(Object bean, String path)
focal_class.full_signature: public static PropertyEditor getPropertyEditor(Object bean, String path)
focal_class.identifier: getPropertyEditor
focal_class.modifiers: public static
focal_class.parameters: (Object bean, String path)
focal_class.return: PropertyEditor
focal_class.signature: PropertyEditor getPropertyEditor(Object bean, String path)
focal_class.class_method_signature: ObjectPropertyUtils.getPropertyEditor(Class<?> propertyType)
focal_class.full_signature: public static PropertyEditor getPropertyEditor(Class<?> propertyType)
focal_class.identifier: getPropertyEditor
focal_class.modifiers: public static
focal_class.parameters: (Class<?> propertyType)
focal_class.return: PropertyEditor
focal_class.signature: PropertyEditor getPropertyEditor(Class<?> propertyType)
focal_class.class_method_signature: ObjectPropertyUtils.initializeProperty(Object object, String propertyPath)
focal_class.full_signature: public static void initializeProperty(Object object, String propertyPath)
focal_class.identifier: initializeProperty
focal_class.modifiers: public static
focal_class.parameters: (Object object, String propertyPath)
focal_class.return: void
focal_class.signature: void initializeProperty(Object object, String propertyPath)
focal_class.class_method_signature: ObjectPropertyUtils.setPropertyValue(Object object, String propertyPath, Object propertyValue)
focal_class.full_signature: public static void setPropertyValue(Object object, String propertyPath, Object propertyValue)
focal_class.identifier: setPropertyValue
focal_class.modifiers: public static
focal_class.parameters: (Object object, String propertyPath, Object propertyValue)
focal_class.return: void
focal_class.signature: void setPropertyValue(Object object, String propertyPath, Object propertyValue)
focal_class.class_method_signature: ObjectPropertyUtils.setPropertyValue(Object object, String propertyPath, Object propertyValue, boolean ignoreUnknown)
focal_class.full_signature: public static void setPropertyValue(Object object, String propertyPath, Object propertyValue, boolean ignoreUnknown)
focal_class.identifier: setPropertyValue
focal_class.modifiers: public static
focal_class.parameters: (Object object, String propertyPath, Object propertyValue, boolean ignoreUnknown)
focal_class.return: void
focal_class.signature: void setPropertyValue(Object object, String propertyPath, Object propertyValue, boolean ignoreUnknown)
focal_class.class_method_signature: ObjectPropertyUtils.isReadableProperty(Object object, String propertyPath)
focal_class.full_signature: public static boolean isReadableProperty(Object object, String propertyPath)
focal_class.identifier: isReadableProperty
focal_class.modifiers: public static
focal_class.parameters: (Object object, String propertyPath)
focal_class.return: boolean
focal_class.signature: boolean isReadableProperty(Object object, String propertyPath)
focal_class.class_method_signature: ObjectPropertyUtils.isWritableProperty(Object object, String propertyPath)
focal_class.full_signature: public static boolean isWritableProperty(Object object, String propertyPath)
focal_class.identifier: isWritableProperty
focal_class.modifiers: public static
focal_class.parameters: (Object object, String propertyPath)
focal_class.return: boolean
focal_class.signature: boolean isWritableProperty(Object object, String propertyPath)
focal_class.class_method_signature: ObjectPropertyUtils.getAllFields(List<Field> fields, Class<?> type, Class<?> stopAt)
focal_class.full_signature: public static List<Field> getAllFields(List<Field> fields, Class<?> type, Class<?> stopAt)
focal_class.identifier: getAllFields
focal_class.modifiers: public static
focal_class.parameters: (List<Field> fields, Class<?> type, Class<?> stopAt)
focal_class.return: List<Field>
focal_class.signature: List<Field> getAllFields(List<Field> fields, Class<?> type, Class<?> stopAt)
focal_class.class_method_signature: ObjectPropertyUtils.getComponentType(Type type)
focal_class.full_signature: public static Type getComponentType(Type type)
focal_class.identifier: getComponentType
focal_class.modifiers: public static
focal_class.parameters: (Type type)
focal_class.return: Type
focal_class.signature: Type getComponentType(Type type)
focal_class.class_method_signature: ObjectPropertyUtils.getUpperBound(Type valueType)
focal_class.full_signature: public static Class<?> getUpperBound(Type valueType)
focal_class.identifier: getUpperBound
focal_class.modifiers: public static
focal_class.parameters: (Type valueType)
focal_class.return: Class<?>
focal_class.signature: Class<?> getUpperBound(Type valueType)
focal_class.class_method_signature: ObjectPropertyUtils.findGenericType(Class<?> sourceClass, Class<?> targetClass)
focal_class.full_signature: public static Type findGenericType(Class<?> sourceClass, Class<?> targetClass)
focal_class.identifier: findGenericType
focal_class.modifiers: public static
focal_class.parameters: (Class<?> sourceClass, Class<?> targetClass)
focal_class.return: Type
focal_class.signature: Type findGenericType(Class<?> sourceClass, Class<?> targetClass)
focal_class.class_method_signature: ObjectPropertyUtils.rejoinTrailingIndexReference(List<String> tokenList, String path)
focal_class.full_signature: private static void rejoinTrailingIndexReference(List<String> tokenList, String path)
focal_class.identifier: rejoinTrailingIndexReference
focal_class.modifiers: private static
focal_class.parameters: (List<String> tokenList, String path)
focal_class.return: void
focal_class.signature: void rejoinTrailingIndexReference(List<String> tokenList, String path)
focal_class.class_method_signature: ObjectPropertyUtils.splitPropertyPath(String path)
focal_class.full_signature: public static String[] splitPropertyPath(String path)
focal_class.identifier: splitPropertyPath
focal_class.modifiers: public static
focal_class.parameters: (String path)
focal_class.return: String[]
focal_class.signature: String[] splitPropertyPath(String path)
focal_class.class_method_signature: ObjectPropertyUtils.getPathTail(String path)
focal_class.full_signature: public static String getPathTail(String path)
focal_class.identifier: getPathTail
focal_class.modifiers: public static
focal_class.parameters: (String path)
focal_class.return: String
focal_class.signature: String getPathTail(String path)
focal_class.class_method_signature: ObjectPropertyUtils.removePathTail(String path)
focal_class.full_signature: public static String removePathTail(String path)
focal_class.identifier: removePathTail
focal_class.modifiers: public static
focal_class.parameters: (String path)
focal_class.return: String
focal_class.signature: String removePathTail(String path)
focal_class.class_method_signature: ObjectPropertyUtils.getCanonicalPath(String path)
focal_class.full_signature: public static String getCanonicalPath(String path)
focal_class.identifier: getCanonicalPath
focal_class.modifiers: public static
focal_class.parameters: (String path)
focal_class.return: String
focal_class.signature: String getCanonicalPath(String path)
focal_class.class_method_signature: ObjectPropertyUtils.ObjectPropertyUtils()
focal_class.full_signature: private  ObjectPropertyUtils()
focal_class.identifier: ObjectPropertyUtils
focal_class.modifiers: private
focal_class.parameters: ()
focal_class.signature:  ObjectPropertyUtils()
focal_class.class_method_signature: ObjectPropertyUtils.getReadMethodByName(Class<?> beanClass, String propertyName)
focal_class.full_signature: private static Method getReadMethodByName(Class<?> beanClass, String propertyName)
focal_class.identifier: getReadMethodByName
focal_class.modifiers: private static
focal_class.parameters: (Class<?> beanClass, String propertyName)
focal_class.return: Method
focal_class.signature: Method getReadMethodByName(Class<?> beanClass, String propertyName)
focal_class.class_method_signature: ObjectPropertyUtils.getMetadata(Class<?> beanClass)
focal_class.full_signature: private static ObjectPropertyMetadata getMetadata(Class<?> beanClass)
focal_class.identifier: getMetadata
focal_class.modifiers: private static
focal_class.parameters: (Class<?> beanClass)
focal_class.return: ObjectPropertyMetadata
focal_class.signature: ObjectPropertyMetadata getMetadata(Class<?> beanClass)
focal_method.body: public static Method getReadMethod(Class<?> beanClass, String propertyName) {
          return getMetadata(beanClass).readMethods.get(propertyName);
      }
focal_method.class_method_signature: ObjectPropertyUtils.getReadMethod(Class<?> beanClass, String propertyName)
focal_method.full_signature: public static Method getReadMethod(Class<?> beanClass, String propertyName)
focal_method.identifier: getReadMethod
focal_method.invocations: get getMetadata
focal_method.modifiers: public static
focal_method.parameters: (Class<?> beanClass, String propertyName)
focal_method.return: Method
focal_method.signature: Method getReadMethod(Class<?> beanClass, String propertyName)