Polishing
This commit is contained in:
		
							parent
							
								
									045f78e6c5
								
							
						
					
					
						commit
						6021822ce4
					
				| 
						 | 
					@ -101,15 +101,14 @@ public class CachedIntrospectionResults {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Clear the introspection cache for the given ClassLoader, removing the
 | 
						 * Clear the introspection cache for the given ClassLoader, removing the
 | 
				
			||||||
	 * introspection results for all classes underneath that ClassLoader,
 | 
						 * introspection results for all classes underneath that ClassLoader, and
 | 
				
			||||||
	 * and deregistering the ClassLoader (and any of its children) from the
 | 
						 * removing the ClassLoader (and its children) from the acceptance list.
 | 
				
			||||||
	 * acceptance list.
 | 
					 | 
				
			||||||
	 * @param classLoader the ClassLoader to clear the cache for
 | 
						 * @param classLoader the ClassLoader to clear the cache for
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	public static void clearClassLoader(ClassLoader classLoader) {
 | 
						public static void clearClassLoader(ClassLoader classLoader) {
 | 
				
			||||||
		synchronized (classCache) {
 | 
							synchronized (classCache) {
 | 
				
			||||||
			for (Iterator<Class> it = classCache.keySet().iterator(); it.hasNext();) {
 | 
								for (Iterator<Class> it = classCache.keySet().iterator(); it.hasNext();) {
 | 
				
			||||||
				Class beanClass = it.next();
 | 
									Class<?> beanClass = it.next();
 | 
				
			||||||
				if (isUnderneathClassLoader(beanClass.getClassLoader(), classLoader)) {
 | 
									if (isUnderneathClassLoader(beanClass.getClassLoader(), classLoader)) {
 | 
				
			||||||
					it.remove();
 | 
										it.remove();
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
| 
						 | 
					@ -127,13 +126,11 @@ public class CachedIntrospectionResults {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Create CachedIntrospectionResults for the given bean class.
 | 
						 * Create CachedIntrospectionResults for the given bean class.
 | 
				
			||||||
	 * <P>We don't want to use synchronization here. Object references are atomic,
 | 
					 | 
				
			||||||
	 * so we can live with doing the occasional unnecessary lookup at startup only.
 | 
					 | 
				
			||||||
	 * @param beanClass the bean class to analyze
 | 
						 * @param beanClass the bean class to analyze
 | 
				
			||||||
	 * @return the corresponding CachedIntrospectionResults
 | 
						 * @return the corresponding CachedIntrospectionResults
 | 
				
			||||||
	 * @throws BeansException in case of introspection failure
 | 
						 * @throws BeansException in case of introspection failure
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	static CachedIntrospectionResults forClass(Class beanClass) throws BeansException {
 | 
						static CachedIntrospectionResults forClass(Class<?> beanClass) throws BeansException {
 | 
				
			||||||
		CachedIntrospectionResults results;
 | 
							CachedIntrospectionResults results;
 | 
				
			||||||
		Object value;
 | 
							Object value;
 | 
				
			||||||
		synchronized (classCache) {
 | 
							synchronized (classCache) {
 | 
				
			||||||
| 
						 | 
					@ -225,7 +222,7 @@ public class CachedIntrospectionResults {
 | 
				
			||||||
	 * @param beanClass the bean class to analyze
 | 
						 * @param beanClass the bean class to analyze
 | 
				
			||||||
	 * @throws BeansException in case of introspection failure
 | 
						 * @throws BeansException in case of introspection failure
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	private CachedIntrospectionResults(Class beanClass) throws BeansException {
 | 
						private CachedIntrospectionResults(Class<?> beanClass) throws BeansException {
 | 
				
			||||||
		try {
 | 
							try {
 | 
				
			||||||
			if (logger.isTraceEnabled()) {
 | 
								if (logger.isTraceEnabled()) {
 | 
				
			||||||
				logger.trace("Getting BeanInfo for class [" + beanClass.getName() + "]");
 | 
									logger.trace("Getting BeanInfo for class [" + beanClass.getName() + "]");
 | 
				
			||||||
| 
						 | 
					@ -248,7 +245,7 @@ public class CachedIntrospectionResults {
 | 
				
			||||||
			// garbage collection on class loader shutdown - we cache it here anyway,
 | 
								// garbage collection on class loader shutdown - we cache it here anyway,
 | 
				
			||||||
			// in a GC-friendly manner. In contrast to CachedIntrospectionResults,
 | 
								// in a GC-friendly manner. In contrast to CachedIntrospectionResults,
 | 
				
			||||||
			// Introspector does not use WeakReferences as values of its WeakHashMap!
 | 
								// Introspector does not use WeakReferences as values of its WeakHashMap!
 | 
				
			||||||
			Class classToFlush = beanClass;
 | 
								Class<?> classToFlush = beanClass;
 | 
				
			||||||
			do {
 | 
								do {
 | 
				
			||||||
				Introspector.flushFromCaches(classToFlush);
 | 
									Introspector.flushFromCaches(classToFlush);
 | 
				
			||||||
				classToFlush = classToFlush.getSuperclass();
 | 
									classToFlush = classToFlush.getSuperclass();
 | 
				
			||||||
| 
						 | 
					@ -286,7 +283,7 @@ public class CachedIntrospectionResults {
 | 
				
			||||||
		return this.beanInfo;
 | 
							return this.beanInfo;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Class getBeanClass() {
 | 
						Class<?> getBeanClass() {
 | 
				
			||||||
		return this.beanInfo.getBeanDescriptor().getBeanClass();
 | 
							return this.beanInfo.getBeanDescriptor().getBeanClass();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -314,7 +311,7 @@ public class CachedIntrospectionResults {
 | 
				
			||||||
		return pds;
 | 
							return pds;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private PropertyDescriptor buildGenericTypeAwarePropertyDescriptor(Class beanClass, PropertyDescriptor pd) {
 | 
						private PropertyDescriptor buildGenericTypeAwarePropertyDescriptor(Class<?> beanClass, PropertyDescriptor pd) {
 | 
				
			||||||
		try {
 | 
							try {
 | 
				
			||||||
			return new GenericTypeAwarePropertyDescriptor(beanClass, pd.getName(), pd.getReadMethod(),
 | 
								return new GenericTypeAwarePropertyDescriptor(beanClass, pd.getName(), pd.getReadMethod(),
 | 
				
			||||||
					pd.getWriteMethod(), pd.getPropertyEditorClass());
 | 
										pd.getWriteMethod(), pd.getPropertyEditorClass());
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Copyright 2002-2012 the original author or authors.
 | 
					 * Copyright 2002-2013 the original author or authors.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
					 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 * you may not use this file except in compliance with the License.
 | 
					 * you may not use this file except in compliance with the License.
 | 
				
			||||||
| 
						 | 
					@ -98,8 +98,8 @@ public abstract class ReflectionUtils {
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		catch (IllegalAccessException ex) {
 | 
							catch (IllegalAccessException ex) {
 | 
				
			||||||
			handleReflectionException(ex);
 | 
								handleReflectionException(ex);
 | 
				
			||||||
			throw new IllegalStateException("Unexpected reflection exception - " + ex.getClass().getName() + ": "
 | 
								throw new IllegalStateException(
 | 
				
			||||||
					+ ex.getMessage());
 | 
										"Unexpected reflection exception - " + ex.getClass().getName() + ": " + ex.getMessage());
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -153,8 +153,8 @@ public abstract class ReflectionUtils {
 | 
				
			||||||
		while (searchType != null) {
 | 
							while (searchType != null) {
 | 
				
			||||||
			Method[] methods = (searchType.isInterface() ? searchType.getMethods() : searchType.getDeclaredMethods());
 | 
								Method[] methods = (searchType.isInterface() ? searchType.getMethods() : searchType.getDeclaredMethods());
 | 
				
			||||||
			for (Method method : methods) {
 | 
								for (Method method : methods) {
 | 
				
			||||||
				if (name.equals(method.getName())
 | 
									if (name.equals(method.getName()) &&
 | 
				
			||||||
						&& (paramTypes == null || Arrays.equals(paramTypes, method.getParameterTypes()))) {
 | 
											(paramTypes == null || Arrays.equals(paramTypes, method.getParameterTypes()))) {
 | 
				
			||||||
					return method;
 | 
										return method;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue