FileDocCategorySizeDatePackage
MethodDescriptor.javaAPI DocJava SE 5 API5534Fri Aug 26 14:56:56 BST 2005java.beans

MethodDescriptor

public class MethodDescriptor extends FeatureDescriptor
A MethodDescriptor describes a particular method that a Java Bean supports for external access from other components.

Fields Summary
private Reference
methodRef
private String[]
paramNames
private List
params
private ParameterDescriptor[]
parameterDescriptors
Constructors Summary
public MethodDescriptor(Method method)
Constructs a MethodDescriptor from a Method.

param
method The low-level method information.

	this(method, null);
    
MethodDescriptor(MethodDescriptor x, MethodDescriptor y)

	super(x,y);

	methodRef = x.methodRef;
	if (y.methodRef != null) {
	    methodRef = y.methodRef;
	}
	params = x.params;
	if (y.params != null) {
	    params = y.params;
	}
	paramNames = x.paramNames;
	if (y.paramNames != null) {
	    paramNames = y.paramNames;
	}

	parameterDescriptors = x.parameterDescriptors;
	if (y.parameterDescriptors != null) {
	    parameterDescriptors = y.parameterDescriptors;
	}
    
MethodDescriptor(MethodDescriptor old)

	super(old);

	methodRef = old.methodRef;
	params = old.params;
	paramNames = old.paramNames;

	if (old.parameterDescriptors != null) {
	    int len = old.parameterDescriptors.length;
	    parameterDescriptors = new ParameterDescriptor[len];
	    for (int i = 0; i < len ; i++) {
	        parameterDescriptors[i] = new ParameterDescriptor(old.parameterDescriptors[i]);
	    }
	}
    
public MethodDescriptor(Method method, ParameterDescriptor[] parameterDescriptors)
Constructs a MethodDescriptor from a Method providing descriptive information for each of the method's parameters.

param
method The low-level method information.
param
parameterDescriptors Descriptive information for each of the method's parameters.

	setName(method.getName());
	setMethod(method);
	this.parameterDescriptors = parameterDescriptors;
    
Methods Summary
public synchronized java.lang.reflect.MethodgetMethod()
Gets the method that this MethodDescriptor encapsualtes.

return
The low-level description of the method

	Method method = getMethod0();
	if (method == null) {
	    Class cls = getClass0();
	    if (cls != null) {
		Class[] params = getParams();
		if (params == null) {
		    for (int i = 0; i < 3; i++) {
			// Find methods for up to 2 params. We are guessing here.
			// This block should never execute unless the classloader
			// that loaded the argument classes disappears.
			method = Introspector.findMethod(cls, getName(), i, null);
			if (method != null) {
			    break;
			}
		    }
		} else {
		    method = Introspector.findMethod(cls, getName(), 
						     params.length, params);
		}
		setMethod(method);
	    }
	}
	return method;
    
private java.lang.reflect.MethodgetMethod0()

	return (Method)getObject(methodRef);
    
java.lang.String[]getParamNames()

	return paramNames;
    
public java.beans.ParameterDescriptor[]getParameterDescriptors()
Gets the ParameterDescriptor for each of this MethodDescriptor's method's parameters.

return
The locale-independent names of the parameters. May return a null array if the parameter names aren't known.

	return parameterDescriptors;
    
private synchronized java.lang.Class[]getParams()

	Class[] clss = new Class[params.size()];

	for (int i = 0; i < params.size(); i++) {
	    Reference ref = (Reference)params.get(i);
	    Class cls = (Class)ref.get();
	    if (cls == null) {
		return null;
	    } else {
		clss[i] = cls;
	    }
	}
	return clss;
    
private synchronized voidsetMethod(java.lang.reflect.Method method)

	if (method == null) {
	    return;
	}
	if (getClass0() == null) {
	    setClass0(method.getDeclaringClass());
	}
	setParams(method.getParameterTypes());
	methodRef = createReference(method, true);
    
private synchronized voidsetParams(java.lang.Class[] param)

	if (param == null) {
	    return;
	}
	paramNames = new String[param.length];
	params = new ArrayList(param.length);
	for (int i = 0; i < param.length; i++) {
	    paramNames[i] = param[i].getName();
	    params.add(new WeakReference(param[i]));
	}