home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1999 April / DPPCPRO0499.ISO / April / Notes / 50b2wic.exe / DATA1.CAB / NotesProgramFilesJavaSupport / rt.jar / java / beans / Introspector.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-04-23  |  12.4 KB  |  620 lines

  1. package java.beans;
  2.  
  3. import java.lang.reflect.Method;
  4. import java.lang.reflect.Modifier;
  5. import java.util.Enumeration;
  6. import java.util.Hashtable;
  7.  
  8. public class Introspector {
  9.    private BeanInfo informant;
  10.    private boolean propertyChangeSource = false;
  11.    private Class beanClass;
  12.    private BeanInfo superBeanInfo;
  13.    private BeanInfo[] additionalBeanInfo;
  14.    private static Hashtable beanInfoCache = new Hashtable();
  15.    private static Class eventListenerType;
  16.    private String defaultEventName;
  17.    private String defaultPropertyName;
  18.    private int defaultEventIndex = -1;
  19.    private int defaultPropertyIndex = -1;
  20.    private Hashtable methods = new Hashtable();
  21.    private static Hashtable declaredMethodCache;
  22.    private Hashtable properties = new Hashtable();
  23.    private Hashtable events = new Hashtable();
  24.    private static String[] searchPath;
  25.    // $FF: synthetic field
  26.    static Class class$java$util$EventListener;
  27.    // $FF: synthetic field
  28.    static Class class$java$beans$PropertyVetoException;
  29.    // $FF: synthetic field
  30.    static Class class$java$util$TooManyListenersException;
  31.  
  32.    public static BeanInfo getBeanInfo(Class var0) throws IntrospectionException {
  33.       BeanInfo var1 = (BeanInfo)beanInfoCache.get(var0);
  34.       if (var1 == null) {
  35.          var1 = (new Introspector(var0, (Class)null)).getBeanInfo();
  36.          beanInfoCache.put(var0, var1);
  37.       }
  38.  
  39.       return var1;
  40.    }
  41.  
  42.    public static BeanInfo getBeanInfo(Class var0, Class var1) throws IntrospectionException {
  43.       return (new Introspector(var0, var1)).getBeanInfo();
  44.    }
  45.  
  46.    public static String decapitalize(String var0) {
  47.       if (var0 != null && var0.length() != 0) {
  48.          if (var0.length() > 1 && Character.isUpperCase(var0.charAt(1)) && Character.isUpperCase(var0.charAt(0))) {
  49.             return var0;
  50.          } else {
  51.             char[] var1 = var0.toCharArray();
  52.             var1[0] = Character.toLowerCase(var1[0]);
  53.             return new String(var1);
  54.          }
  55.       } else {
  56.          return var0;
  57.       }
  58.    }
  59.  
  60.    public static String[] getBeanInfoSearchPath() {
  61.       return searchPath;
  62.    }
  63.  
  64.    public static void setBeanInfoSearchPath(String[] var0) {
  65.       searchPath = var0;
  66.    }
  67.  
  68.    private Introspector(Class var1, Class var2) throws IntrospectionException {
  69.       this.beanClass = var1;
  70.       if (var2 != null) {
  71.          boolean var3 = false;
  72.  
  73.          for(Class var4 = var1.getSuperclass(); var4 != null; var4 = var4.getSuperclass()) {
  74.             if (var4 == var2) {
  75.                var3 = true;
  76.             }
  77.          }
  78.  
  79.          if (!var3) {
  80.             throw new IntrospectionException(var2.getName() + " not superclass of " + var1.getName());
  81.          }
  82.       }
  83.  
  84.       this.informant = this.findInformant(var1);
  85.       if (var1.getSuperclass() != var2) {
  86.          if (var2 == null) {
  87.             this.superBeanInfo = getBeanInfo(var1.getSuperclass());
  88.          } else {
  89.             this.superBeanInfo = getBeanInfo(var1.getSuperclass(), var2);
  90.          }
  91.       }
  92.  
  93.       if (this.informant != null) {
  94.          this.additionalBeanInfo = this.informant.getAdditionalBeanInfo();
  95.       }
  96.  
  97.       if (this.additionalBeanInfo == null) {
  98.          this.additionalBeanInfo = new BeanInfo[0];
  99.       }
  100.  
  101.    }
  102.  
  103.    private BeanInfo getBeanInfo() throws IntrospectionException {
  104.       BeanDescriptor var1 = this.getTargetBeanDescriptor();
  105.       EventSetDescriptor[] var2 = this.getTargetEventInfo();
  106.       int var3 = this.getTargetDefaultEventIndex();
  107.       PropertyDescriptor[] var4 = this.getTargetPropertyInfo();
  108.       int var5 = this.getTargetDefaultPropertyIndex();
  109.       MethodDescriptor[] var6 = this.getTargetMethodInfo();
  110.       return new GenericBeanInfo(var1, var2, var3, var4, var5, var6, this.informant);
  111.    }
  112.  
  113.    private BeanInfo findInformant(Class var1) {
  114.       String var2 = var1.getName() + "BeanInfo";
  115.  
  116.       try {
  117.          return (BeanInfo)instantiate(var1, var2);
  118.       } catch (Exception var6) {
  119.          while(var2.indexOf(46) > 0) {
  120.             var2 = var2.substring(var2.indexOf(46) + 1);
  121.          }
  122.  
  123.          for(int var3 = 0; var3 < searchPath.length; ++var3) {
  124.             try {
  125.                String var4 = searchPath[var3] + "." + var2;
  126.                return (BeanInfo)instantiate(var1, var4);
  127.             }
  128.          }
  129.  
  130.          return null;
  131.       }
  132.    }
  133.  
  134.    private PropertyDescriptor[] getTargetPropertyInfo() throws IntrospectionException {
  135.       PropertyDescriptor[] var1 = null;
  136.       if (this.informant != null) {
  137.          var1 = this.informant.getPropertyDescriptors();
  138.          int var2 = this.informant.getDefaultPropertyIndex();
  139.          if (var2 >= 0 && var2 < var1.length) {
  140.             this.defaultPropertyName = var1[var2].getName();
  141.          }
  142.       }
  143.  
  144.       if (var1 == null && this.superBeanInfo != null) {
  145.          PropertyDescriptor[] var13 = this.superBeanInfo.getPropertyDescriptors();
  146.  
  147.          for(int var3 = 0; var3 < var13.length; ++var3) {
  148.             this.addProperty(var13[var3]);
  149.          }
  150.  
  151.          int var4 = this.superBeanInfo.getDefaultPropertyIndex();
  152.          if (var4 >= 0 && var4 < var13.length) {
  153.             this.defaultPropertyName = var13[var4].getName();
  154.          }
  155.       }
  156.  
  157.       for(int var14 = 0; var14 < this.additionalBeanInfo.length; ++var14) {
  158.          PropertyDescriptor[] var15 = this.additionalBeanInfo[var14].getPropertyDescriptors();
  159.          if (var15 != null) {
  160.             for(int var19 = 0; var19 < var15.length; ++var19) {
  161.                this.addProperty(var15[var19]);
  162.             }
  163.          }
  164.       }
  165.  
  166.       if (var1 != null) {
  167.          for(int var16 = 0; var16 < var1.length; ++var16) {
  168.             this.addProperty(var1[var16]);
  169.          }
  170.       } else {
  171.          Method[] var17 = getDeclaredMethods(this.beanClass);
  172.  
  173.          for(int var20 = 0; var20 < var17.length; ++var20) {
  174.             Method var5 = var17[var20];
  175.             int var6 = var5.getModifiers();
  176.             if (!Modifier.isStatic(var6) && Modifier.isPublic(var6)) {
  177.                String var7 = var5.getName();
  178.                Class[] var8 = var5.getParameterTypes();
  179.                Class var9 = var5.getReturnType();
  180.                int var10 = var8.length;
  181.                Object var11 = null;
  182.  
  183.                try {
  184.                   if (var10 == 0) {
  185.                      if (var7.startsWith("get")) {
  186.                         var11 = new PropertyDescriptor(decapitalize(var7.substring(3)), var5, (Method)null);
  187.                      } else if (var9 == Boolean.TYPE && var7.startsWith("is")) {
  188.                         var11 = new PropertyDescriptor(decapitalize(var7.substring(2)), var5, (Method)null);
  189.                      }
  190.                   } else if (var10 == 1) {
  191.                      if (var8[0] == Integer.TYPE && var7.startsWith("get")) {
  192.                         var11 = new IndexedPropertyDescriptor(decapitalize(var7.substring(3)), (Method)null, (Method)null, var5, (Method)null);
  193.                      } else if (var9 == Void.TYPE && var7.startsWith("set")) {
  194.                         var11 = new PropertyDescriptor(decapitalize(var7.substring(3)), (Method)null, var5);
  195.                         if (this.throwsException(var5, class$java$beans$PropertyVetoException != null ? class$java$beans$PropertyVetoException : (class$java$beans$PropertyVetoException = class$("java.beans.PropertyVetoException")))) {
  196.                            ((PropertyDescriptor)var11).setConstrained(true);
  197.                         }
  198.                      }
  199.                   } else if (var10 == 2 && var8[0] == Integer.TYPE && var7.startsWith("set")) {
  200.                      var11 = new IndexedPropertyDescriptor(decapitalize(var7.substring(3)), (Method)null, (Method)null, (Method)null, var5);
  201.                      if (this.throwsException(var5, class$java$beans$PropertyVetoException != null ? class$java$beans$PropertyVetoException : (class$java$beans$PropertyVetoException = class$("java.beans.PropertyVetoException")))) {
  202.                         ((PropertyDescriptor)var11).setConstrained(true);
  203.                      }
  204.                   }
  205.                } catch (IntrospectionException var12) {
  206.                   var11 = null;
  207.                }
  208.  
  209.                if (var11 != null) {
  210.                   if (this.propertyChangeSource) {
  211.                      ((PropertyDescriptor)var11).setBound(true);
  212.                   }
  213.  
  214.                   this.addProperty((PropertyDescriptor)var11);
  215.                }
  216.             }
  217.          }
  218.       }
  219.  
  220.       PropertyDescriptor[] var18 = new PropertyDescriptor[this.properties.size()];
  221.       Enumeration var21 = this.properties.elements();
  222.  
  223.       for(int var22 = 0; var22 < var18.length; ++var22) {
  224.          var18[var22] = (PropertyDescriptor)var21.nextElement();
  225.          if (this.defaultPropertyName != null && this.defaultPropertyName.equals(var18[var22].getName())) {
  226.             this.defaultPropertyIndex = var22;
  227.          }
  228.       }
  229.  
  230.       return var18;
  231.    }
  232.  
  233.    void addProperty(PropertyDescriptor var1) {
  234.       String var2 = ((FeatureDescriptor)var1).getName();
  235.       PropertyDescriptor var3 = (PropertyDescriptor)this.properties.get(var2);
  236.       if (var3 == null) {
  237.          this.properties.put(var2, var1);
  238.       } else {
  239.          Class var4 = var3.getPropertyType();
  240.          Class var5 = var1.getPropertyType();
  241.          if (var4 != null && var5 != null && var4 != var5) {
  242.             this.properties.put(var2, var1);
  243.          } else {
  244.             Object var6;
  245.             if (!(var3 instanceof IndexedPropertyDescriptor) && !(var1 instanceof IndexedPropertyDescriptor)) {
  246.                var6 = new PropertyDescriptor(var3, var1);
  247.             } else {
  248.                var6 = new IndexedPropertyDescriptor(var3, var1);
  249.             }
  250.  
  251.             this.properties.put(var2, var6);
  252.          }
  253.       }
  254.    }
  255.  
  256.    private EventSetDescriptor[] getTargetEventInfo() throws IntrospectionException {
  257.       EventSetDescriptor[] var1 = null;
  258.       if (this.informant != null) {
  259.          var1 = this.informant.getEventSetDescriptors();
  260.          int var2 = this.informant.getDefaultEventIndex();
  261.          if (var2 >= 0 && var2 < var1.length) {
  262.             this.defaultEventName = var1[var2].getName();
  263.          }
  264.       }
  265.  
  266.       if (var1 == null && this.superBeanInfo != null) {
  267.          EventSetDescriptor[] var21 = this.superBeanInfo.getEventSetDescriptors();
  268.  
  269.          for(int var3 = 0; var3 < var21.length; ++var3) {
  270.             this.addEvent(var21[var3]);
  271.          }
  272.  
  273.          int var4 = this.superBeanInfo.getDefaultEventIndex();
  274.          if (var4 >= 0 && var4 < var21.length) {
  275.             this.defaultEventName = var21[var4].getName();
  276.          }
  277.       }
  278.  
  279.       for(int var22 = 0; var22 < this.additionalBeanInfo.length; ++var22) {
  280.          EventSetDescriptor[] var23 = this.additionalBeanInfo[var22].getEventSetDescriptors();
  281.          if (var23 != null) {
  282.             for(int var27 = 0; var27 < var23.length; ++var27) {
  283.                this.addEvent(var23[var27]);
  284.             }
  285.          }
  286.       }
  287.  
  288.       if (var1 != null) {
  289.          for(int var24 = 0; var24 < var1.length; ++var24) {
  290.             this.addEvent(var1[var24]);
  291.          }
  292.       } else {
  293.          Method[] var25 = getDeclaredMethods(this.beanClass);
  294.          Hashtable var28 = new Hashtable();
  295.          Hashtable var5 = new Hashtable();
  296.  
  297.          for(int var6 = 0; var6 < var25.length; ++var6) {
  298.             Method var7 = var25[var6];
  299.             int var8 = var7.getModifiers();
  300.             if (!Modifier.isStatic(var8) && Modifier.isPublic(var8)) {
  301.                String var9 = var7.getName();
  302.                Class[] var10 = var7.getParameterTypes();
  303.                Class var11 = var7.getReturnType();
  304.                if (var9.startsWith("add") && var10.length == 1 && var11 == Void.TYPE) {
  305.                   String var36 = var9.substring(3) + ":" + var10[0];
  306.                   var28.put(var36, var7);
  307.                } else if (var9.startsWith("remove") && var10.length == 1 && var11 == Void.TYPE) {
  308.                   String var12 = var9.substring(6) + ":" + var10[0];
  309.                   var5.put(var12, var7);
  310.                }
  311.             }
  312.          }
  313.  
  314.          Enumeration var31 = var28.keys();
  315.          this.beanClass.getName();
  316.  
  317.          while(var31.hasMoreElements()) {
  318.             String var32 = (String)var31.nextElement();
  319.             if (var5.get(var32) != null && var32.indexOf("Listener:") > 0) {
  320.                String var33 = var32.substring(0, var32.indexOf(58));
  321.                String var34 = decapitalize(var33.substring(0, var33.length() - 8));
  322.                Method var35 = (Method)var28.get(var32);
  323.                Method var37 = (Method)var5.get(var32);
  324.                Class var13 = var35.getParameterTypes()[0];
  325.                if (isSubclass(var13, eventListenerType)) {
  326.                   Method[] var14 = var13.getMethods();
  327.                   int var15 = 0;
  328.  
  329.                   for(int var16 = 0; var16 < var14.length; ++var16) {
  330.                      if (this.isEventHandler(var14[var16])) {
  331.                         ++var15;
  332.                      } else {
  333.                         var14[var16] = null;
  334.                      }
  335.                   }
  336.  
  337.                   Method[] var17 = new Method[var15];
  338.                   int var18 = 0;
  339.  
  340.                   for(int var19 = 0; var19 < var14.length; ++var19) {
  341.                      if (var14[var19] != null) {
  342.                         var17[var18++] = var14[var19];
  343.                      }
  344.                   }
  345.  
  346.                   EventSetDescriptor var20 = new EventSetDescriptor(var34, var13, var17, var35, var37);
  347.                   if (this.throwsException(var35, class$java$util$TooManyListenersException != null ? class$java$util$TooManyListenersException : (class$java$util$TooManyListenersException = class$("java.util.TooManyListenersException")))) {
  348.                      var20.setUnicast(true);
  349.                   }
  350.  
  351.                   this.addEvent(var20);
  352.                }
  353.             }
  354.          }
  355.       }
  356.  
  357.       EventSetDescriptor[] var26 = new EventSetDescriptor[this.events.size()];
  358.       Enumeration var29 = this.events.elements();
  359.  
  360.       for(int var30 = 0; var30 < var26.length; ++var30) {
  361.          var26[var30] = (EventSetDescriptor)var29.nextElement();
  362.          if (this.defaultEventName != null && this.defaultEventName.equals(var26[var30].getName())) {
  363.             this.defaultEventIndex = var30;
  364.          }
  365.       }
  366.  
  367.       return var26;
  368.    }
  369.  
  370.    void addEvent(EventSetDescriptor var1) {
  371.       String var2 = ((FeatureDescriptor)var1).getName();
  372.       if (var2.equals("propertyChange")) {
  373.          this.propertyChangeSource = true;
  374.       }
  375.  
  376.       EventSetDescriptor var3 = (EventSetDescriptor)this.events.get(var2);
  377.       if (var3 == null) {
  378.          this.events.put(var2, var1);
  379.       } else {
  380.          EventSetDescriptor var4 = new EventSetDescriptor(var3, var1);
  381.          this.events.put(var2, var4);
  382.       }
  383.    }
  384.  
  385.    private MethodDescriptor[] getTargetMethodInfo() throws IntrospectionException {
  386.       MethodDescriptor[] var1 = null;
  387.       if (this.informant != null) {
  388.          var1 = this.informant.getMethodDescriptors();
  389.       }
  390.  
  391.       if (var1 == null && this.superBeanInfo != null) {
  392.          MethodDescriptor[] var2 = this.superBeanInfo.getMethodDescriptors();
  393.  
  394.          for(int var3 = 0; var3 < var2.length; ++var3) {
  395.             this.addMethod(var2[var3]);
  396.          }
  397.       }
  398.  
  399.       for(int var7 = 0; var7 < this.additionalBeanInfo.length; ++var7) {
  400.          MethodDescriptor[] var8 = this.additionalBeanInfo[var7].getMethodDescriptors();
  401.          if (var8 != null) {
  402.             for(int var4 = 0; var4 < var8.length; ++var4) {
  403.                this.addMethod(var8[var4]);
  404.             }
  405.          }
  406.       }
  407.  
  408.       if (var1 != null) {
  409.          for(int var9 = 0; var9 < var1.length; ++var9) {
  410.             this.addMethod(var1[var9]);
  411.          }
  412.       } else {
  413.          Method[] var10 = getDeclaredMethods(this.beanClass);
  414.  
  415.          for(int var12 = 0; var12 < var10.length; ++var12) {
  416.             Method var5 = var10[var12];
  417.             if (Modifier.isPublic(var5.getModifiers())) {
  418.                MethodDescriptor var6 = new MethodDescriptor(var5);
  419.                this.addMethod(var6);
  420.             }
  421.          }
  422.       }
  423.  
  424.       MethodDescriptor[] var11 = new MethodDescriptor[this.methods.size()];
  425.       Enumeration var13 = this.methods.elements();
  426.  
  427.       for(int var14 = 0; var14 < var11.length; ++var14) {
  428.          var11[var14] = (MethodDescriptor)var13.nextElement();
  429.       }
  430.  
  431.       return var11;
  432.    }
  433.  
  434.    private void addMethod(MethodDescriptor var1) {
  435.       String var2 = var1.getMethod().getName();
  436.       MethodDescriptor var3 = (MethodDescriptor)this.methods.get(var2);
  437.       if (var3 == null) {
  438.          this.methods.put(var2, var1);
  439.       } else {
  440.          Class[] var4 = var1.getMethod().getParameterTypes();
  441.          Class[] var5 = var3.getMethod().getParameterTypes();
  442.          boolean var6 = false;
  443.          if (var4.length == var5.length) {
  444.             var6 = true;
  445.  
  446.             for(int var7 = 0; var7 < var4.length; ++var7) {
  447.                if (var4[var7] != var5[var7]) {
  448.                   var6 = false;
  449.                   break;
  450.                }
  451.             }
  452.          }
  453.  
  454.          if (var6) {
  455.             MethodDescriptor var11 = new MethodDescriptor(var3, var1);
  456.             this.methods.put(var2, var11);
  457.          } else {
  458.             String var10 = this.makeQualifiedMethodName(var1);
  459.             var3 = (MethodDescriptor)this.methods.get(var10);
  460.             if (var3 == null) {
  461.                this.methods.put(var10, var1);
  462.             } else {
  463.                MethodDescriptor var8 = new MethodDescriptor(var3, var1);
  464.                this.methods.put(var10, var8);
  465.             }
  466.          }
  467.       }
  468.    }
  469.  
  470.    private String makeQualifiedMethodName(MethodDescriptor var1) {
  471.       Method var2 = var1.getMethod();
  472.       StringBuffer var3 = new StringBuffer();
  473.       var3.append(var2.getName());
  474.       var3.append("=");
  475.       Class[] var4 = var2.getParameterTypes();
  476.  
  477.       for(int var5 = 0; var5 < var4.length; ++var5) {
  478.          var3.append(":");
  479.          var3.append(var4[var5].getName());
  480.       }
  481.  
  482.       return var3.toString();
  483.    }
  484.  
  485.    private int getTargetDefaultEventIndex() {
  486.       return this.defaultEventIndex;
  487.    }
  488.  
  489.    private int getTargetDefaultPropertyIndex() {
  490.       return this.defaultPropertyIndex;
  491.    }
  492.  
  493.    private BeanDescriptor getTargetBeanDescriptor() throws IntrospectionException {
  494.       if (this.informant != null) {
  495.          BeanDescriptor var1 = this.informant.getBeanDescriptor();
  496.          if (var1 != null) {
  497.             return var1;
  498.          }
  499.       }
  500.  
  501.       return new BeanDescriptor(this.beanClass);
  502.    }
  503.  
  504.    private boolean isEventHandler(Method var1) throws IntrospectionException {
  505.       try {
  506.          Class[] var2 = var1.getParameterTypes();
  507.          if (var2.length != 1) {
  508.             return false;
  509.          } else {
  510.             String var3 = String.valueOf(var2[0]);
  511.             return var3.indexOf("Event") >= 0;
  512.          }
  513.       } catch (Exception var4) {
  514.          throw new IntrospectionException("Unexpected reflection exception: " + var4);
  515.       }
  516.    }
  517.  
  518.    private static synchronized Method[] getDeclaredMethods(Class var0) {
  519.       if (declaredMethodCache == null) {
  520.          declaredMethodCache = new Hashtable();
  521.       }
  522.  
  523.       Method[] var1 = (Method[])declaredMethodCache.get(var0);
  524.       if (var1 == null) {
  525.          var1 = var0.getDeclaredMethods();
  526.          declaredMethodCache.put(var0, var1);
  527.       }
  528.  
  529.       return var1;
  530.    }
  531.  
  532.    static Method findMethod(Class var0, String var1, int var2) throws IntrospectionException {
  533.       if (var1 == null) {
  534.          return null;
  535.       } else {
  536.          while(var0 != null) {
  537.             Method[] var3 = getDeclaredMethods(var0);
  538.  
  539.             for(int var4 = 0; var4 < var3.length; ++var4) {
  540.                Method var5 = var3[var4];
  541.                int var6 = var5.getModifiers();
  542.                if (!Modifier.isStatic(var6) && Modifier.isPublic(var6) && var5.getName().equals(var1) && var5.getParameterTypes().length == var2) {
  543.                   return var5;
  544.                }
  545.             }
  546.  
  547.             var0 = var0.getSuperclass();
  548.          }
  549.  
  550.          throw new IntrospectionException("No method \"" + var1 + "\" with " + var2 + " arg(s)");
  551.       }
  552.    }
  553.  
  554.    static boolean isSubclass(Class var0, Class var1) {
  555.       if (var0 == var1) {
  556.          return true;
  557.       } else if (var0 != null && var1 != null) {
  558.          for(Class var2 = var0; var2 != null; var2 = var2.getSuperclass()) {
  559.             if (var2 == var1) {
  560.                return true;
  561.             }
  562.  
  563.             if (var1.isInterface()) {
  564.                Class[] var3 = var2.getInterfaces();
  565.  
  566.                for(int var4 = 0; var4 < var3.length; ++var4) {
  567.                   if (isSubclass(var3[var4], var1)) {
  568.                      return true;
  569.                   }
  570.                }
  571.             }
  572.          }
  573.  
  574.          return false;
  575.       } else {
  576.          return false;
  577.       }
  578.    }
  579.  
  580.    private boolean throwsException(Method var1, Class var2) {
  581.       Class[] var3 = var1.getExceptionTypes();
  582.  
  583.       for(int var4 = 0; var4 < var3.length; ++var4) {
  584.          if (var3[var4] == var2) {
  585.             return true;
  586.          }
  587.       }
  588.  
  589.       return false;
  590.    }
  591.  
  592.    static Object instantiate(Class var0, String var1) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
  593.       ClassLoader var2 = var0.getClassLoader();
  594.       if (var2 != null) {
  595.          try {
  596.             Class var5 = var2.loadClass(var1);
  597.             return var5.newInstance();
  598.          } catch (Exception var4) {
  599.          }
  600.       }
  601.  
  602.       Class var3 = Class.forName(var1);
  603.       return var3.newInstance();
  604.    }
  605.  
  606.    // $FF: synthetic method
  607.    static Class class$(String var0) {
  608.       try {
  609.          return Class.forName(var0);
  610.       } catch (ClassNotFoundException var2) {
  611.          throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  612.       }
  613.    }
  614.  
  615.    static {
  616.       eventListenerType = class$java$util$EventListener != null ? class$java$util$EventListener : (class$java$util$EventListener = class$("java.util.EventListener"));
  617.       searchPath = new String[]{"sun.beans.infos"};
  618.    }
  619. }
  620.