introspData, pda[i], clazz,
accessibleMethods);
}
if (exposureLevel < BeansWrapper.EXPOSE_PROPERTIES_ONLY) {
final MethodAppearanceDecision decision = new MethodAppearanceDecision();
MethodAppearanceDecisionInput decisionInput = null;
final MethodDescriptor[] mda = sortMethodDescriptors(beanInfo.getMethodDescriptors());
int mdaLength = mda != null ? mda.length : 0;
for (int i = mdaLength - 1; i >= 0; --i) {
final MethodDescriptor md = mda[i];
final Method method = getMatchingAccessibleMethod(md.getMethod(), accessibleMethods);
if (method != null && isAllowedToExpose(method)) {
decision.setDefaults(method);
if (methodAppearanceFineTuner != null) {
if (decisionInput == null) {
decisionInput = new MethodAppearanceDecisionInput();
}
decisionInput.setContainingClass(clazz);
decisionInput.setMethod(method);
methodAppearanceFineTuner.process(decisionInput, decision);
}
PropertyDescriptor propDesc = decision.getExposeAsProperty();
if (propDesc != null && !(introspData.get(propDesc.getName()) instanceof PropertyDescriptor)) {
addPropertyDescriptorToClassIntrospectionData(introspData, propDesc, clazz, accessibleMethods);
}
String methodKey = decision.getExposeMethodAs();
if (methodKey != null) {
Object previous = introspData.get(methodKey);
if (previous instanceof Method) {
// Overloaded method - replace Method with a OverloadedMethods
OverloadedMethods overloadedMethods = new OverloadedMethods(bugfixed);
overloadedMethods.addMethod((Method) previous);
overloadedMethods.addMethod(method);
introspData.put(methodKey, overloadedMethods);
// Remove parameter type information
getArgTypes(introspData).remove(previous);
} else if (previous instanceof OverloadedMethods) {
// Already overloaded method - add new overload
((OverloadedMethods) previous).addMethod(method);
} else if (decision.getMethodShadowsProperty()
|| !(previous instanceof PropertyDescriptor)) {
// Simple method (this far)
introspData.put(methodKey, method);
getArgTypes(introspData).put(method,
method.getParameterTypes());