Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2002-2008 the original author or authors.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 package org.springframework.beans;
 
 
Extension of the standard JavaBeans PropertyDescriptor class, overriding getPropertyType() such that a generically declared type will be resolved against the containing bean class.

Author(s):
Juergen Hoeller
Since:
2.5.2
 
 
 	private final Class beanClass;
 
 	private final Method readMethod;
 
 	private final Method writeMethod;
 
 	private final Class propertyEditorClass;
 
 	private Class propertyType;
 
 
 
 	public GenericTypeAwarePropertyDescriptor(Class beanClassString propertyName,
 			Method readMethodMethod writeMethodClass propertyEditorClass)
 
 		super(propertyNamenullnull);
 		this. = beanClass;
 		Method readMethodToUse = BridgeMethodResolver.findBridgedMethod(readMethod);
 		Method writeMethodToUse = BridgeMethodResolver.findBridgedMethod(writeMethod);
 		if (writeMethodToUse == null && readMethodToUse != null) {
 			// Fallback: Original JavaBeans introspection might not have found matching setter
 			// method due to lack of bridge method resolution, in case of the getter using a
 			// covariant return type whereas the setter is defined for the concrete property type.
 			writeMethodToUse = ClassUtils.getMethodIfAvailable(this.,
 					"set" + StringUtils.capitalize(getName()), new Class[] {readMethodToUse.getReturnType()});
 		}
 		this. = readMethodToUse;
 		this. = writeMethodToUse;
 		this. = propertyEditorClass;
 	}
 
 
 	public Method getReadMethod() {
 		return this.;
 	}
 
 	public Method getWriteMethod() {
 		return this.;
 	}
 
 		return this.;
 	}
 
 	public synchronized Class getPropertyType() {
 		if (this. == null) {
 			if (this. != null) {
 				this. = GenericTypeResolver.resolveReturnType(this.this.);
 			}
 			else {
 				MethodParameter writeMethodParam = getWriteMethodParameter();
 				if (writeMethodParam != null) {
 					this. = writeMethodParam.getParameterType();
 				}
 				else {
 					this. = super.getPropertyType();
 				}
 			}
 		}
		return this.;
	}
	public synchronized MethodParameter getWriteMethodParameter() {
		if (this. == null) {
			return null;
		}
		if (this. == null) {
			GenericTypeResolver.resolveParameterType(this.this.);
		}
	}
New to GrepCode? Check out our FAQ X