home *** CD-ROM | disk | FTP | other *** search
- package com.ibm.cs.util;
-
- import com.ibm.cs.event.EventAdapter;
- import com.ibm.cs.event.EventAdapterRegistry;
- import com.ibm.cs.event.EventProcessor;
- import java.beans.BeanInfo;
- import java.beans.Beans;
- import java.beans.EventSetDescriptor;
- import java.beans.FeatureDescriptor;
- import java.beans.IntrospectionException;
- import java.beans.Introspector;
- import java.io.IOException;
- import java.lang.reflect.Constructor;
- import java.lang.reflect.InvocationTargetException;
- import java.lang.reflect.Method;
- import java.lang.reflect.Modifier;
-
- public class ReflectionUtils {
- static boolean debug;
-
- private static FeatureDescriptor findFeatureByName(String var0, String var1, FeatureDescriptor[] var2) {
- for(int var3 = 0; var3 < var2.length; ++var3) {
- if (var1.equals(var2[var3].getName())) {
- return var2[var3];
- }
- }
-
- return null;
- }
-
- public static Object createBean(ClassLoader var0, String var1, Class[] var2, Object[] var3) throws ClassNotFoundException, NoSuchMethodException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, IOException {
- if (var2 != null) {
- Class var4 = var0 != null ? var0.loadClass(var1) : Class.forName(var1);
- Constructor var5 = getConstructor(var4, var2);
- return var5.newInstance(var3);
- } else {
- return Beans.instantiate(var0, var1);
- }
- }
-
- public static Object createBean(ClassLoader var0, String var1, Object[] var2) throws ClassNotFoundException, NoSuchMethodException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, IOException {
- Class[] var3 = null;
- if (var2 != null) {
- var3 = new Class[var2.length];
-
- for(int var4 = 0; var4 < var2.length; ++var4) {
- var3[var4] = var2[var4] != null ? var2[var4].getClass() : null;
- }
- }
-
- return createBean(var0, var1, var3, var2);
- }
-
- private static Object getEntryPoint(Class var0, String var1, Class[] var2, boolean var3) throws SecurityException, NoSuchMethodException {
- Object var4 = null;
-
- try {
- if (var1 != null) {
- Method var13 = var0.getMethod(var1, var2);
- if (var3 && !Modifier.isStatic(entryGetModifiers(var13))) {
- throw new NoSuchMethodException(callToString(var0, var1, var2, var3) + " resolved to instance " + var13);
- } else {
- return var13;
- }
- } else {
- return var0.getConstructor(var2);
- }
- } catch (NoSuchMethodException var11) {
- if (var2 != null && var2.length != 0) {
- Object var5;
- Object var6;
- if (var1 != null) {
- var5 = var0.getDeclaredMethods();
- var6 = var0.getMethods();
- } else {
- var5 = var0.getDeclaredConstructors();
- var6 = var0.getConstructors();
- }
-
- if (((Object[])var5).length + ((Object[])var6).length == 0) {
- throw new NoSuchMethodException("No methods!");
- } else {
- Object[] var7 = new Object[((Object[])var5).length + ((Object[])var6).length];
- System.arraycopy(var5, 0, var7, 0, ((Object[])var5).length);
- System.arraycopy(var6, 0, var7, ((Object[])var5).length, ((Object[])var6).length);
- MoreSpecific var8 = new MoreSpecific();
-
- for(int var9 = 0; var9 < var7.length; ++var9) {
- Object var10 = var7[var9];
- if (Modifier.isPublic(entryGetModifiers(var10)) && (var1 == null || entryGetName(var10).equals(var1)) && areMethodConvertable(entryGetParameterTypes(var10), var2)) {
- var8.addItem(var10);
- }
- }
-
- var4 = var8.getMostSpecific(var0, var1, var2, var3);
- if (var1 != null && var3 && !Modifier.isStatic(entryGetModifiers(var4))) {
- throw new NoSuchMethodException(callToString(var0, var1, var2, var3) + " resolved to instance: " + var4);
- } else if (var4 == null) {
- throw new NoSuchMethodException(callToString(var0, var1, var2, var3) + " -- no signature match");
- } else {
- return var4;
- }
- }
- } else {
- throw var11;
- }
- }
- }
-
- private static String callToString(Class var0, String var1, Class[] var2, boolean var3) {
- StringBuffer var4 = new StringBuffer();
- if (var3) {
- var4.append("static ");
- }
-
- var4.append(var0.getName());
- if (var1 != null) {
- var4.append(".").append(var1);
- }
-
- var4.append("(");
- if (var2 != null && var2.length > 0) {
- var4.append(var2[0]);
-
- for(int var5 = 1; var5 < var2.length; ++var5) {
- var4.append(",").append(var2[var5]);
- }
- } else {
- var4.append("[none]");
- }
-
- var4.append(")");
- return var4.toString();
- }
-
- private static boolean isMethodConvertable(Class var0, Class var1) {
- if (var0.equals(var1)) {
- return true;
- } else if (var1 == null) {
- return !var0.isPrimitive();
- } else {
- while(var0.isArray()) {
- if (!var1.isArray()) {
- return false;
- }
-
- var0 = var0.getComponentType();
- var1 = var1.getComponentType();
- }
-
- if (var1.isArray()) {
- return false;
- } else if (var0.isAssignableFrom(var1)) {
- return true;
- } else if (!var0.equals(Void.TYPE) && !var0.equals(Boolean.TYPE) && !var1.equals(Void.TYPE) && !var1.equals(Boolean.TYPE)) {
- Class[] var2 = new Class[]{Character.TYPE, Byte.TYPE, Short.TYPE, Integer.TYPE, Long.TYPE, Float.TYPE, Double.TYPE};
-
- int var3;
- for(var3 = 0; var3 < var2.length && !var0.equals(var2[var3]); ++var3) {
- }
-
- if (var3 >= var2.length) {
- return false;
- } else {
- int var4;
- for(var4 = 0; var4 < var2.length && !var1.equals(var2[var4]); ++var4) {
- }
-
- if (var4 >= var2.length) {
- return false;
- } else {
- return var4 < var3 && (var4 != 0 || var3 > 2);
- }
- }
- } else {
- return false;
- }
- }
- }
-
- private static boolean isAssignmentConvertable(Class var0, Class var1) {
- return var1.equals(Integer.TYPE) && (var0.equals(Byte.TYPE) || var0.equals(Short.TYPE) || var0.equals(Character.TYPE)) || isMethodConvertable(var0, var1);
- }
-
- private static boolean areMethodConvertable(Class[] var0, Class[] var1) {
- if (var0.length != var1.length) {
- return false;
- } else {
- for(int var2 = 0; var2 < var0.length; ++var2) {
- if (!isMethodConvertable(var0[var2], var1[var2])) {
- return false;
- }
- }
-
- return true;
- }
- }
-
- static String entryGetName(Object var0) {
- return var0 instanceof Method ? ((Method)var0).getName() : ((Constructor)var0).getName();
- }
-
- static int entryGetModifiers(Object var0) {
- return var0 instanceof Method ? ((Method)var0).getModifiers() : ((Constructor)var0).getModifiers();
- }
-
- static Class[] entryGetParameterTypes(Object var0) {
- return var0 instanceof Method ? ((Method)var0).getParameterTypes() : ((Constructor)var0).getParameterTypes();
- }
-
- static String entryToString(Object var0) {
- return var0 instanceof Method ? ((Method)var0).toString() : ((Constructor)var0).toString();
- }
-
- public static Method getMethod(Object var0, String var1, Class[] var2) throws SecurityException, NoSuchMethodException {
- boolean var3 = var0 instanceof Class;
- return getMethod(var3 ? (Class)var0 : var0.getClass(), var1, var2, var3);
- }
-
- public static Method getMethod(Class var0, String var1, Class[] var2, boolean var3) throws SecurityException, NoSuchMethodException {
- return (Method)getEntryPoint(var0, var1, var2, var3);
- }
-
- public static Constructor getConstructor(Class var0, Class[] var1) throws SecurityException, NoSuchMethodException {
- return (Constructor)getEntryPoint(var0, (String)null, var1, true);
- }
-
- public static void addEventListener(Object var0, String var1, EventProcessor var2) throws IntrospectionException, IllegalArgumentException, IllegalAccessException, InstantiationException, InvocationTargetException {
- BeanInfo var3 = Introspector.getBeanInfo(var0.getClass());
- EventSetDescriptor var4 = (EventSetDescriptor)findFeatureByName("event", var1, var3.getEventSetDescriptors());
- if (var4 == null) {
- throw new IllegalArgumentException("event set '" + var1 + "' unknown for source type '" + var0.getClass() + "'");
- } else {
- Class var5 = var4.getListenerType();
- Class var6 = EventAdapterRegistry.lookup(var5);
- if (var6 == null) {
- throw new IllegalArgumentException("event adapter for listner type '" + var5 + "' (eventset " + "'" + var1 + "') unknown");
- } else {
- EventAdapter var7 = (EventAdapter)var6.newInstance();
- var7.setEventProcessor(var2);
- Method var8;
- Object[] var9;
- if (!var1.equals("propertyChange") && !var1.equals("vetoableChange")) {
- var8 = var4.getAddListenerMethod();
- var9 = new Object[]{var7};
- } else {
- var8 = var4.getAddListenerMethod();
- var9 = new Object[]{var7};
- }
-
- var8.invoke(var0, var9);
- }
- }
- }
-
- // $FF: synthetic method
- static boolean access$0(Class[] var0, Class[] var1) {
- return areMethodConvertable(var0, var1);
- }
-
- // $FF: synthetic method
- static String access$1(Class var0, String var1, Class[] var2, boolean var3) {
- return callToString(var0, var1, var2, var3);
- }
- }
-