com_opensymphony_xwork2_spring_SpringObjectFactoryTest_java
org.springframework.beans.factory.support.AbstractBeanFactory
@Override
    public Class<?> getType(String name) throws NoSuchBeanDefinitionException {
        Class<?> beanClass;
        String beanName = this.transformedBeanName(name);
        Object beanInstance = this.getSingleton(beanName, false);
        if (beanInstance != null) {
            if (beanInstance instanceof FactoryBean && !BeanFactoryUtils.isFactoryDereference(name)) {
                return this.getTypeForFactoryBean((FactoryBean)beanInstance);
            }
            return beanInstance.getClass();
        }
        if (this.containsSingleton(beanName) && !this.containsBeanDefinition(beanName)) {
            return null;
        }
        BeanFactory parentBeanFactory = this.getParentBeanFactory();
        if (parentBeanFactory != null && !this.containsBeanDefinition(beanName)) {
            return parentBeanFactory.getType(this.originalBeanName(name));
        }
        RootBeanDefinition mbd = this.getMergedLocalBeanDefinition(beanName);
        BeanDefinitionHolder dbd = mbd.getDecoratedDefinition();
        if (dbd != null && !BeanFactoryUtils.isFactoryDereference(name)) {
            RootBeanDefinition tbd = this.getMergedBeanDefinition(dbd.getBeanName(), dbd.getBeanDefinition(), mbd);
            Class<?> targetClass = this.predictBeanType(dbd.getBeanName(), tbd, new Class[0]);
            if (targetClass != null && !FactoryBean.class.isAssignableFrom(targetClass)) {
                return targetClass;
            }
        }
        if ((beanClass = this.predictBeanType(beanName, mbd, new Class[0])) != null && FactoryBean.class.isAssignableFrom(beanClass)) {
            if (!BeanFactoryUtils.isFactoryDereference(name)) {
                return this.getTypeForFactoryBean(beanName, mbd);
            }
            return beanClass;
        }
        return !BeanFactoryUtils.isFactoryDereference(name) ? beanClass : null;
    }
 -> java.lang.String.startsWith(java.lang.String): boolean -> java.util.Map.get(java.lang.Object): java.lang.Object -> java.util.Map.get(java.lang.Object): java.lang.Object -> java.util.Set.contains(java.lang.Object): boolean -> java.util.Map.containsKey(java.lang.Object): boolean -> java.util.Map.get(java.lang.Object): java.lang.Object -> java.lang.Class.isAssignableFrom(java.lang.Class): boolean -> java.lang.String.startsWith(java.lang.String): boolean
 [CALL] [CALL] [CALL] [CALL] [EXIT] -> java.lang.String.startsWith(java.lang.String): boolean [EXIT] [CALL] -> java.util.Map.get(java.lang.Object): java.lang.Object [EXIT] [EXIT] [CALL] -> java.util.Map.get(java.lang.Object): java.lang.Object [CALL] -> java.util.Set.contains(java.lang.Object): boolean [EXIT] [EXIT] [CALL] -> java.util.Map.containsKey(java.lang.Object): boolean [EXIT] [CALL] [EXIT] [CALL] -> java.util.Map.get(java.lang.Object): java.lang.Object [EXIT] [CALL] [EXIT] [CALL] [CALL] [CALL] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [EXIT] -> java.lang.Class.isAssignableFrom(java.lang.Class): boolean [CALL] -> java.lang.String.startsWith(java.lang.String): boolean [EXIT] [EXIT]