You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by nd...@apache.org on 2006/06/16 23:11:02 UTC

svn commit: r414913 [1/2] - /incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/

Author: ndbeyer
Date: Fri Jun 16 14:11:01 2006
New Revision: 414913

URL: http://svn.apache.org/viewvc?rev=414913&view=rev
Log:
Code cleanup; generification, one java class to file, etc

Added:
    incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/BeanInfoData.java   (with props)
    incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/BeanInfoImpl.java   (with props)
    incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/BeanInfoWrapper.java   (with props)
Modified:
    incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/Encoder.java
    incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/EventHandler.java
    incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/EventSetDescriptor.java
    incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/IndexedPropertyDescriptor.java
    incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/Introspector.java
    incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/PropertyChangeSupport.java
    incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/PropertyDescriptor.java
    incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/PropertyEditorManager.java
    incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/PropertyEditorSupport.java
    incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/SimpleBeanInfo.java
    incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/Statement.java
    incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/VetoableChangeSupport.java

Added: incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/BeanInfoData.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/BeanInfoData.java?rev=414913&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/BeanInfoData.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/BeanInfoData.java Fri Jun 16 14:11:01 2006
@@ -0,0 +1,57 @@
+/*
+ *  Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ *  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 java.beans;
+
+class BeanInfoData {
+
+    private Class<?> stopClass;
+    private boolean ignoreBeanClassBeanInfo;
+    private boolean ignoreSuperClassBeanInfo;
+    private BeanInfoWrapper beanInfoWrapper;
+
+    public BeanInfoData(BeanInfoWrapper beanInfo) {
+        this.stopClass = null;
+        this.ignoreBeanClassBeanInfo = false;
+        this.ignoreSuperClassBeanInfo = false;
+        this.beanInfoWrapper = beanInfo;
+    }
+
+    public BeanInfoData(Class<?> stopClass, boolean ignoreBeanClassBeanInfo,
+        boolean ignoreSuperClassBeanInfo, BeanInfoWrapper beanInfoWrapper)
+    {
+        this.stopClass = stopClass;
+        this.ignoreBeanClassBeanInfo = ignoreBeanClassBeanInfo;
+        this.ignoreSuperClassBeanInfo = ignoreSuperClassBeanInfo;
+        this.beanInfoWrapper = beanInfoWrapper;
+    }
+
+    public Class<?> getStopClass() {
+        return stopClass;
+    }
+
+    public boolean getIgnoreBeanClassBeanInfo() {
+        return ignoreBeanClassBeanInfo;
+    }
+
+    public boolean getIgnoreSuperClassBeanInfo() {
+        return ignoreSuperClassBeanInfo;
+    }
+
+    public BeanInfoWrapper getBeanInfoWrapper() {
+        return beanInfoWrapper;
+    }
+}

Propchange: incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/BeanInfoData.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/BeanInfoImpl.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/BeanInfoImpl.java?rev=414913&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/BeanInfoImpl.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/BeanInfoImpl.java Fri Jun 16 14:11:01 2006
@@ -0,0 +1,418 @@
+/*
+ *  Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ *  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 java.beans;
+
+import java.awt.Image;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Vector;
+
+class BeanInfoImpl implements BeanInfo {
+
+    private static int MT_OTHER = 0;
+    private static int MT_SETTER = 1;
+    private static int MT_GETTER = 2;
+    private static int MT_BOOLEAN_GETTER = 3;
+    private static int MT_INDEXED_SETTER = 4;
+    private static int MT_INDEXED_GETTER = 5;
+
+    public BeanInfoImpl(Class<?> beanClass) {
+        this.beanClass = beanClass;
+    }
+
+    public PropertyDescriptor[] getPropertyDescriptors() {
+        if (propertyDescriptors == null) {
+            HashMap<String, PropertyDescriptor> result = new HashMap<String, PropertyDescriptor>();
+            
+            if (beanClass != null) {
+                List<Method> beanClassMethodsArrayList = getPublicMethods(beanClass);
+                
+                ArrayList<Method> setters = new ArrayList<Method>();
+                ArrayList<Method> getters = new ArrayList<Method>();
+                ArrayList<Method> booleanGetters = new ArrayList<Method>();
+                ArrayList<Method> indexedSetters = new ArrayList<Method>();
+                ArrayList<Method> indexedGetters = new ArrayList<Method>();
+                
+                Iterator<Method> iterator = beanClassMethodsArrayList.iterator();
+                while (iterator.hasNext()) {
+                    Method method = (Method) iterator.next();
+                    
+                    int methodType = getMethodType(method);
+                    if (methodType == MT_SETTER) {
+                        setters.add(method);
+                    } else if (methodType == MT_GETTER) {
+                        getters.add(method);
+                    } else if (methodType == MT_BOOLEAN_GETTER) {
+                        booleanGetters.add(method);
+                    } else if (methodType == MT_INDEXED_SETTER) {
+                        indexedSetters.add(method);
+                    } else if (methodType == MT_INDEXED_GETTER) {
+                        indexedGetters.add(method);
+                    }
+                }
+                try {
+                    addIndexedPropertyDescriptorsFromMethodList(result,
+                            indexedGetters, false);
+                    addIndexedPropertyDescriptorsFromMethodList(result,
+                            indexedSetters, true);
+                    addPropertyDescriptorsFromMethodList(result, booleanGetters,
+                            false);
+                    addPropertyDescriptorsFromMethodList(result, setters, true);
+                    addPropertyDescriptorsFromMethodList(result, getters, true);
+                } catch (Exception e) {
+                }
+                
+                Object[] values = result.values().toArray();
+                propertyDescriptors = new PropertyDescriptor[values.length];
+                for(int k = 0; k < propertyDescriptors.length; ++k) {
+                    propertyDescriptors[k] = (PropertyDescriptor) values[k];
+                }
+            }
+        }
+        
+        return propertyDescriptors;
+    }
+
+    public MethodDescriptor[] getMethodDescriptors() {
+        if(methodDescriptors == null) {
+            List<MethodDescriptor> result = new ArrayList<MethodDescriptor>();
+            List<Method> beanClassMethodsArrayList = getPublicMethods(beanClass);
+            
+            Iterator<Method> iterator = beanClassMethodsArrayList.iterator();
+            while (iterator.hasNext()) {
+                Method method = (Method) iterator.next();
+                result.add(new MethodDescriptor(method));
+            }
+            
+            methodDescriptors = new MethodDescriptor[result.size()];
+            for(int i = 0; i < methodDescriptors.length; ++i) {
+                methodDescriptors[i] = (MethodDescriptor) result.get(i);
+            }
+            
+        }
+        
+        return methodDescriptors;
+    }
+
+    public EventSetDescriptor[] getEventSetDescriptors() {
+        if(eventSetDescriptors == null) {
+            Map<String, EventSetDescriptor> result =
+                new HashMap<String, EventSetDescriptor>();
+            List<Method> beanClassMethodsArrayList = getPublicMethods(beanClass);
+            
+            Iterator<Method> iterator = beanClassMethodsArrayList.iterator();
+            while(iterator.hasNext()) {
+                Method method = (Method) iterator.next();
+                String methodName = method.getName();
+                
+                String listenerName = null;
+                if(methodName.endsWith("Listener")) {
+                    listenerName = methodName.substring(0,
+                            methodName.lastIndexOf("Listener"));
+                    
+                    if(methodName.startsWith("add")) {
+                        listenerName = listenerName.substring(3);
+                    } else if(methodName.startsWith("remove")) {
+                        listenerName = listenerName.substring(6);
+                    } else {
+                        continue;
+                    }
+                    
+                    if(result.get(listenerName) == null) {
+                        Class[] parameterTypes = method.getParameterTypes();
+                        
+                        if(parameterTypes.length == 1) {
+                            Class<?> listenerType = parameterTypes[0];
+                            
+                            // full and short names of classes
+                            String listenerTypeName = listenerType.getName();
+
+                            // check if the listener name extracted from param name and
+                            // listener name extracted from registration method are the same
+                            String listenerNameFromParam =
+                                listenerTypeName.substring(
+                                        listenerTypeName.lastIndexOf(".") + 1);
+                            
+                            String listenerNameFromMethod = listenerName
+                                    + "Listener";
+                            if(!listenerNameFromParam.equals(
+                                    listenerNameFromMethod)) {
+                                continue;
+                            }
+                            
+                            String eventTypeName = listenerTypeName.substring(0,
+                                    listenerTypeName.lastIndexOf(".") + 1)
+                                    + listenerName + "Event";
+                            
+                            // classes generated from classes names
+                            Class<?> eventType = null;
+                            try {
+                                eventType = Class.forName(eventTypeName, true,
+                                        beanClass.getClassLoader());
+                            } catch (ClassNotFoundException cnfe) {
+                                System.out.println("Event type with name "
+                                        + eventTypeName + " is not found.");
+                            } finally {
+                                if(eventType == null) {
+                                    continue;
+                                }
+                            }
+                            
+                            Method[] methods = listenerType.getMethods();
+                            Vector<Method> listenerMethodsVec = new Vector<Method>();
+                            for(int i = 0; i < methods.length; ++i) {
+                                Class[] listenerMethodParams =
+                                    methods[i].getParameterTypes();
+                                if(listenerMethodParams.length == 1
+                                        && listenerMethodParams[0] == eventType) {
+                                    listenerMethodsVec.add(methods[i]);
+                                }
+                            }
+                            
+                            Method[] listenerMethods =
+                                    new Method[listenerMethodsVec.size()];
+                            Iterator<Method> iter = listenerMethodsVec.iterator();
+                            int idx2 = 0;
+                            while(iter.hasNext()) {
+                                listenerMethods[idx2] = (Method) iter.next();
+                                idx2++;
+                            }
+                            
+                            Method addListenerMethod = null;
+                            String addListenerMethodName = "add" + listenerName
+                                    + "Listener";
+                            try {
+                                addListenerMethod = beanClass.getMethod(
+                                    addListenerMethodName,
+                                    new Class[] { listenerType });
+                            } catch (NoSuchMethodException nsme) {
+                                // no adder found
+                                continue;
+                            }
+                            
+                            Method removeListenerMethod = null;
+                            String removeListenerMethodName = "remove"
+                                    + listenerName + "Listener";
+                            try {
+                                removeListenerMethod = beanClass.getMethod(
+                                    removeListenerMethodName,
+                                    new Class[] { listenerType });
+                            } catch (NoSuchMethodException nsme) {
+                                // no remover found
+                                continue;
+                            }
+                            
+                            Method getListenerMethod = null;
+                            String getListenerMethodName = "get" + listenerName
+                                    + "Listeners";
+                            try {
+                                getListenerMethod = beanClass.getMethod(
+                                    getListenerMethodName, new Class[] {});
+                            } catch (NoSuchMethodException nsme) {
+                                // no action - getter is not a mandatory method in event set descriptor pattern
+                            }
+
+                            try {
+                                listenerName = Introspector.decapitalize(
+                                        listenerName);
+                                EventSetDescriptor esd = new EventSetDescriptor(
+                                        listenerName,
+                                        listenerType,
+                                        listenerMethods,
+                                        addListenerMethod,
+                                        removeListenerMethod,
+                                        getListenerMethod);
+                                result.put(listenerName, esd);
+                            } catch (IntrospectionException ie) {
+                                System.out.println(
+                                        "Cannot generate event set descriptor "
+                                        + "for name" + listenerName + ".");
+                            }
+                            
+                        }
+                    }
+                }
+            }
+            
+            String[] eventSetDescriptorNames =
+                    new String[result.keySet().size()];
+            Iterator<String> i = result.keySet().iterator();
+            int idx = 0;
+            while(i.hasNext()) {
+                eventSetDescriptorNames[idx++] =
+                    ((EventSetDescriptor) result.get(
+                            (String) i.next())).getName();
+            }
+            
+            Arrays.sort(eventSetDescriptorNames);
+
+            eventSetDescriptors =
+                    new EventSetDescriptor[eventSetDescriptorNames.length];
+            for(int j = 0; j < eventSetDescriptors.length; ++j) {
+                eventSetDescriptors[j] = (EventSetDescriptor) result.get(
+                        eventSetDescriptorNames[j]);
+            }
+            
+        }
+        return eventSetDescriptors;
+    }
+
+    public BeanInfo[] getAdditionalBeanInfo() {
+        // no info is obtained thru automatic introspection
+        return null;
+    }
+
+    public BeanDescriptor getBeanDescriptor() {
+        return new BeanDescriptor(beanClass, null);
+    }
+
+    public Image getIcon(int iconKind) {
+        // no info is obtained thru automatic introspection
+        return null;
+    }
+
+    public int getDefaultPropertyIndex() {
+        return defaultPropertyIndex;
+    }
+
+    public int getDefaultEventIndex() {
+        return defaultEventIndex;
+    }
+
+    private static int getMethodType(Method method) {
+        String name = method.getName();
+        int result = MT_OTHER;
+        try {
+            int modifiers = method.getModifiers();
+            
+            if(Modifier.isPublic(modifiers) && !Modifier.isStatic(modifiers)) {
+                Class[] parameterTypes = method.getParameterTypes();
+                Class<?> returnType = method.getReturnType();
+
+                if(name.startsWith("get") && (parameterTypes.length == 0)
+                        && (returnType != void.class) && (name.length() > 3)) {
+                    result = MT_GETTER;
+                } else if(name.startsWith("is") && (parameterTypes.length == 0)
+                        && (returnType == boolean.class)
+                        && (name.length() > 2)) {
+                    result = MT_BOOLEAN_GETTER;
+                } else if(name.startsWith("get") && (parameterTypes.length == 1)
+                        && (returnType != void.class)
+                        && (parameterTypes[0] == int.class)
+                        && (name.length() > 3)) {
+                    result = MT_INDEXED_GETTER;
+                } else if(name.startsWith("set") && (parameterTypes.length == 1)
+                        && (returnType == void.class) && (name.length() > 3)) {
+                    result = MT_SETTER;
+                } else if(name.startsWith("set") && (parameterTypes.length == 2)
+                        && (returnType == void.class)
+                        && (parameterTypes[0] == int.class)
+                        && (name.length() > 3)) {
+                    result = MT_INDEXED_SETTER;
+                }
+            }
+        } catch (Exception e) {
+            result = MT_OTHER;
+        }
+        
+        return result;
+    }
+
+    private static String extractPropertyName(String methodName)
+            throws Exception {
+        String result = null;
+        
+        if ( methodName.startsWith("set") || methodName.startsWith("get") ) {
+            result = methodName.substring(3);
+            result = Introspector.decapitalize(result);
+        } else if (methodName.startsWith("is")) {
+            result = methodName.substring(2);
+            result = Introspector.decapitalize(result);
+        }
+        
+        return result;
+    }
+
+    private static List<Method> getPublicMethods(Class<?> theClass) {
+        List<Method> result = new ArrayList<Method>();
+
+        Method[] beanClassMethods = theClass.getDeclaredMethods();
+        for (int i = 0; i < beanClassMethods.length; ++i) {
+            if(Modifier.isPublic(beanClassMethods[i].getModifiers())) {
+                result.add(beanClassMethods[i]);
+            }
+        }
+        
+        return result;
+    }
+    
+    private void addPropertyDescriptorsFromMethodList(
+            HashMap<String, PropertyDescriptor> hmPropertyDescriptors,
+            List<Method> methods,
+            boolean checkExisting) throws Exception
+    {
+        for (Method method : methods) {
+            String methodName = method.getName();
+            String propertyName = extractPropertyName(methodName);
+            if ((!checkExisting) || (hmPropertyDescriptors.get(propertyName) == null)) {
+                PropertyDescriptor propertyDescriptor = null;
+                try {
+                    propertyDescriptor = new PropertyDescriptor(propertyName, beanClass);
+                    hmPropertyDescriptors.put(propertyName, propertyDescriptor);
+                } catch (IntrospectionException ie) {
+                    System.out.println(ie.getClass() + ": " + ie.getMessage());
+                }
+            }
+        }
+    }
+    
+    private void addIndexedPropertyDescriptorsFromMethodList(
+            Map<String, PropertyDescriptor> hmPropertyDescriptors,
+            List<Method> methods,
+            boolean checkExisting) throws Exception
+    {
+        for (Method method : methods) {
+            String methodName = method.getName();
+            String propertyName = extractPropertyName(methodName);
+            if ((!checkExisting) || (hmPropertyDescriptors.get(propertyName) == null)) {
+                IndexedPropertyDescriptor indexedPropertyDescriptor = null;
+                try {
+                    indexedPropertyDescriptor = new IndexedPropertyDescriptor(
+                            propertyName, beanClass);
+                    hmPropertyDescriptors.put(propertyName,
+                            indexedPropertyDescriptor);
+                } catch (IntrospectionException ie) {
+                    System.out.println(ie.getClass() + ": " + ie.getMessage());
+                }
+            }
+        }
+    }
+    
+    private Class<?> beanClass = null;
+    private PropertyDescriptor[] propertyDescriptors = null; 
+    private MethodDescriptor[] methodDescriptors = null;
+    private EventSetDescriptor[] eventSetDescriptors = null;
+    private int defaultPropertyIndex = -1;
+    private int defaultEventIndex = -1;
+    
+}

Propchange: incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/BeanInfoImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/BeanInfoWrapper.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/BeanInfoWrapper.java?rev=414913&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/BeanInfoWrapper.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/BeanInfoWrapper.java Fri Jun 16 14:11:01 2006
@@ -0,0 +1,366 @@
+/*
+ *  Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ *  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 java.beans;
+
+import java.awt.Image;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+class BeanInfoWrapper implements BeanInfo {
+    
+    private BeanInfo info;
+    private BeanInfoImpl impl;
+    private BeanInfoWrapper parentBeanInfoWrapper;
+    
+    public BeanInfoWrapper(BeanInfo info, BeanInfoImpl impl) {
+        this.info = info;
+        this.impl = impl;
+    }
+    
+    public PropertyDescriptor[] getPropertyDescriptors() {
+        PropertyDescriptor[] result = null;
+        PropertyDescriptor[] infoResult = null;
+        
+        if(info != null) {
+            infoResult = info.getPropertyDescriptors();
+            
+            BeanInfo[] infos = info.getAdditionalBeanInfo();
+            if(infos != null) {
+                for(int i = 0; i < infos.length; ++i) {
+                    BeanInfo additionalInfo = infos[i];
+                    
+                    if(infoResult == null) {
+                        infoResult = additionalInfo.getPropertyDescriptors();
+                    } else {
+                        infoResult = concatArraysToOneArray(infoResult,
+                                additionalInfo.getPropertyDescriptors());
+                    }
+                }
+            }
+        }
+        
+        if(info == null || infoResult == null) {
+            PropertyDescriptor[] implResult = impl.getPropertyDescriptors();
+            
+            // merge with parent info
+            if(parentBeanInfoWrapper != null) {
+                PropertyDescriptor[] parentResult =
+                        parentBeanInfoWrapper.getPropertyDescriptors();
+                Map<String, FeatureDescriptor> hm = concatArraysUniqueByName(implResult, parentResult);
+                
+                Collection<FeatureDescriptor> values = hm.values();
+                
+                result = new PropertyDescriptor[values.size()];
+                int idx = 0;
+                Iterator<FeatureDescriptor> iterator = values.iterator();
+                while(iterator.hasNext()) {
+                    result[idx++] = (PropertyDescriptor) iterator.next();
+                }
+                
+                Arrays.sort(result, new Comparator<PropertyDescriptor>() {
+                    public int compare(PropertyDescriptor pd1, PropertyDescriptor pd2) {
+                        return pd1.getName().compareTo(pd2.getName());
+                    }
+                    public boolean equals(Object o) {
+                        return false;
+                    }
+                });
+            } else {
+                result = implResult;
+            }
+        } else {
+            result = infoResult;
+        }
+        
+        return result;
+    }
+
+    public MethodDescriptor[] getMethodDescriptors() {
+        MethodDescriptor[] result = null;
+        MethodDescriptor[] infoResult = null;
+        
+        if(info != null) {
+            infoResult = info.getMethodDescriptors();
+            
+            BeanInfo[] infos = info.getAdditionalBeanInfo();
+            if(infos != null) {
+                for(int i = 0; i < infos.length; ++i) {
+                    BeanInfo additionalInfo = infos[i];
+                    
+                    if(infoResult == null) {
+                        infoResult = additionalInfo.getMethodDescriptors();
+                    } else {
+                        infoResult = concatArraysToOneArray(infoResult,
+                                additionalInfo.getMethodDescriptors());
+                    }
+                }
+            }
+        }
+        
+        if(info == null || infoResult == null) {
+            MethodDescriptor[] implResult = impl.getMethodDescriptors();
+            
+            // merge with parent info
+            if(parentBeanInfoWrapper != null) {
+                MethodDescriptor[] parentResult =
+                        parentBeanInfoWrapper.getMethodDescriptors();
+                result = concatArraysToOneArray(implResult, parentResult);
+            } else {
+                result = implResult;
+            }
+        } else {
+            result = infoResult;
+        }
+
+        if(result != null) {
+            Arrays.sort(result, new Comparator<MethodDescriptor>() {
+                public int compare(MethodDescriptor md1, MethodDescriptor md2) {
+                    return md1.getName().compareTo(md2.getName());
+                }
+                public boolean equals(Object o) {
+                    return false;
+                }
+            });
+        }
+        
+        return result;
+    }
+
+    public EventSetDescriptor[] getEventSetDescriptors() {
+        EventSetDescriptor[] result = null;
+        EventSetDescriptor[] infoResult = null;
+        
+        if(info != null) {
+            infoResult = info.getEventSetDescriptors();
+            
+            BeanInfo[] infos = info.getAdditionalBeanInfo();
+            if(infos != null) {
+                for(int i = 0; i < infos.length; ++i) {
+                    BeanInfo additionalInfo = infos[i];
+                    
+                    if(infoResult == null) {
+                        infoResult = additionalInfo.getEventSetDescriptors();
+                    } else {
+                        infoResult = concatArraysToOneArray(infoResult,
+                                additionalInfo.getEventSetDescriptors());
+                    }
+                }
+            }
+        }
+        
+        if(info == null || infoResult == null) {
+            EventSetDescriptor[] implResult = impl.getEventSetDescriptors();
+            
+            // merge with parent info
+            if(parentBeanInfoWrapper != null) {
+                EventSetDescriptor[] parentResult =
+                        parentBeanInfoWrapper.getEventSetDescriptors();
+                Map<String, FeatureDescriptor> hm = concatArraysUniqueByName(implResult, parentResult);
+                
+                Collection<FeatureDescriptor> values = hm.values();
+                
+                result = new EventSetDescriptor[values.size()];
+                int idx = 0;
+                Iterator<FeatureDescriptor> iterator = values.iterator();
+                while(iterator.hasNext()) {
+                    result[idx++] = (EventSetDescriptor) iterator.next();
+                }
+                
+                Arrays.sort(result, new Comparator<EventSetDescriptor>() {
+                    public int compare(EventSetDescriptor esd1, EventSetDescriptor esd2) {
+                        return esd1.getName().compareTo(esd2.getName());
+                    }
+                    public boolean equals(Object o) {
+                        return false;
+                    }
+                });
+            } else {
+                result = implResult;
+            }
+        } else {
+            result = infoResult;
+        }
+        
+        return result;
+    }
+
+    public BeanInfo[] getAdditionalBeanInfo() {
+        BeanInfo[] result = null;
+        
+        if(info != null) {
+            result = info.getAdditionalBeanInfo();
+        }
+        
+        return result;
+    }
+
+    public BeanDescriptor getBeanDescriptor() {
+        BeanDescriptor result = null;
+        
+        if(info != null) {
+            result = info.getBeanDescriptor();
+        }
+        
+        if(info == null || result == null) {
+            result = impl.getBeanDescriptor();
+        }
+        
+        return result;
+    }
+
+    public Image getIcon(int iconKind) {
+        Image result = null;
+        
+        if(info != null) {
+            result = info.getIcon(iconKind);
+        }
+        
+        return result;
+    }
+
+    public int getDefaultPropertyIndex() {
+        int result = -1;
+        
+        if(info != null) {
+            result = info.getDefaultPropertyIndex();
+        }
+        
+        if(info == null || result == -1) {
+            result = impl.getDefaultPropertyIndex();
+        }
+        
+        return result;
+    }
+
+    public int getDefaultEventIndex() {
+        int result = -1;
+        
+        if(info != null) {
+            result = info.getDefaultEventIndex();
+        }
+        
+        if(info == null || result == -1) {
+            result = impl.getDefaultEventIndex();
+        }
+        
+        return result;
+    }
+    
+    void merge(BeanInfoWrapper parentBeanInfoWrapper) {
+        this.parentBeanInfoWrapper = parentBeanInfoWrapper;
+    }
+    
+    private static Map<String, FeatureDescriptor> concatArraysUniqueByName(FeatureDescriptor[] childs,
+            FeatureDescriptor[] parents) {
+        Map<String, FeatureDescriptor> result = new HashMap<String, FeatureDescriptor>();
+        
+        if(childs != null) {
+            for(int i = 0; i < childs.length; ++i) {
+                result.put(childs[i].getName(), childs[i]);
+            }
+        }
+        
+        if(parents != null) {
+            for(int j = 0; j < parents.length; ++j) {
+                if(result.get(parents[j].getName()) == null) {
+                    result.put(parents[j].getName(), parents[j]);
+                }
+            }
+        }
+        
+        return result;
+    }
+    
+    private static PropertyDescriptor[] concatArraysToOneArray(
+            PropertyDescriptor[] childs, PropertyDescriptor[] parents) {
+        if(childs != null || parents != null) {
+            Map<String, FeatureDescriptor> hm = concatArraysUniqueByName(childs, parents);
+            PropertyDescriptor[] result = new PropertyDescriptor[hm.size()];
+            
+            Iterator<String> iterator = hm.keySet().iterator();
+            int idx = 0;
+            
+            while(iterator.hasNext()) {
+                String name = (String) iterator.next();
+                result[idx++] = (PropertyDescriptor) hm.get(name);
+            }
+            
+            return result;
+        } else {
+            return null;
+        }
+    }
+    
+    private static MethodDescriptor[] concatArraysToOneArray(
+            MethodDescriptor[] childs, MethodDescriptor[] parents) {
+        MethodDescriptor[] result = null;
+        
+        if(childs != null || parents != null) {
+            int resultLength = 0;
+            
+            if(childs != null) {
+                resultLength = childs.length; 
+            }
+            
+            if(parents != null) {
+                resultLength += parents.length;
+            }
+            
+            result = new MethodDescriptor[resultLength];
+
+            if(childs != null) {
+                for(int i = 0; i < childs.length; ++i) {
+                    result[i] = childs[i];
+                }
+            }
+            
+            if(parents != null) {
+                int shift = (childs == null) ? 0 : childs.length; 
+                for(int i = 0; i < parents.length; ++i) {
+                    result[shift + i] = parents[i];
+                }
+            }
+            
+        }
+        
+        return result;
+    }
+    
+    private static EventSetDescriptor[] concatArraysToOneArray(
+            EventSetDescriptor[] childs, EventSetDescriptor[] parents) {
+        if(childs != null || parents != null) {
+            Map<String, FeatureDescriptor> hm = concatArraysUniqueByName(childs, parents);
+            EventSetDescriptor[] result = new EventSetDescriptor[hm.size()];
+            
+            Iterator<String> iterator = hm.keySet().iterator();
+            int idx = 0;
+            
+            while(iterator.hasNext()) {
+                String name = (String) iterator.next();
+                result[idx++] = (EventSetDescriptor) hm.get(name);
+            }
+            
+            return result;
+        } else {
+            return null;
+        }
+    }
+}

Propchange: incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/BeanInfoWrapper.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/Encoder.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/Encoder.java?rev=414913&r1=414912&r2=414913&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/Encoder.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/Encoder.java Fri Jun 16 14:11:01 2006
@@ -36,8 +36,8 @@
 public class Encoder {
     
     private ExceptionListener exceptionListener = null;
-    private HashMap<Class, PersistenceDelegate> persistenceDelegates =
-        new HashMap<Class, PersistenceDelegate>();
+    private HashMap<Class<?>, PersistenceDelegate> persistenceDelegates =
+        new HashMap<Class<?>, PersistenceDelegate>();
     
     Vector<Object> roots = new Vector<Object>();
     HashMap<Object, ObjectNode> nodes = new HashMap<Object, ObjectNode>();
@@ -147,7 +147,7 @@
             Object oldInstance = oldExp.getValue();
             
             ObjectNode node = null;
-            Class type = null;
+            Class<?> type = null;
 
             if(oldInstance != null) {
                 type = oldInstance.getClass();
@@ -215,7 +215,7 @@
 
         ObjectNode node = (ObjectNode) nodes.get(oldInstance);
         if(node == null) {
-            Class type = oldInstance.getClass();
+            Class<?> type = oldInstance.getClass();
             
             doWriteObject(oldInstance);
             node = (ObjectNode) nodes.get(oldInstance);
@@ -253,32 +253,32 @@
         return null;
     }
     
-    static boolean isNull(Class type) {
+    static boolean isNull(Class<?> type) {
         return (type == null);
     }
     
-    static boolean isPrimitive(Class type) {
+    static boolean isPrimitive(Class<?> type) {
         return (type == Boolean.class) || (type == Byte.class) ||
             (type == Character.class) || (type == Double.class) ||
             (type == Float.class) || (type == Integer.class) ||
             (type == Long.class) || (type == Short.class);
     }
     
-    static boolean isString(Class type) {
+    static boolean isString(Class<?> type) {
         return (type == String.class);
         
     }
     
-    static boolean isClass(Class type) {
+    static boolean isClass(Class<?> type) {
         return (type == Class.class);
     }
     
     
-    static boolean isArray(Class type) {
+    static boolean isArray(Class<?> type) {
         return type.isArray();
     }
     
-    static String getPrimitiveName(Class type) {
+    static String getPrimitiveName(Class<?> type) {
         String result = null;
         
         if(type == Boolean.class) {

Modified: incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/EventHandler.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/EventHandler.java?rev=414913&r1=414912&r2=414913&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/EventHandler.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/EventHandler.java Fri Jun 16 14:11:01 2006
@@ -59,7 +59,7 @@
             arguments = new Object[] { null };
         }
         
-        Class proxyClass = proxy.getClass();
+        Class<?> proxyClass = proxy.getClass();
         // if a proxy
         if(Proxy.isProxyClass(proxyClass)) {
             InvocationHandler handler = Proxy.getInvocationHandler(proxy);
@@ -287,7 +287,7 @@
     }
     
     private PropertyDescriptor findPropertyDescriptor(
-        Class theClass, String propertyName) throws IntrospectionException
+        Class<?> theClass, String propertyName) throws IntrospectionException
     {
         PropertyDescriptor result = null;
         BeanInfo beanInfo = Introspector.getBeanInfo(theClass);
@@ -302,7 +302,7 @@
     }
     
     private Method findStaticGetter(
-        Class theClass, String propertyName) throws IntrospectionException
+        Class<?> theClass, String propertyName) throws IntrospectionException
     {
         Method result = null;
         
@@ -340,7 +340,7 @@
         return result;
     }
     
-    private Method findMethod(Class type, Object[] args) {
+    private Method findMethod(Class<?> type, Object[] args) {
         Method[] methods = type.getMethods();
         
         for(int i = 0; i < methods.length; ++i) {
@@ -353,7 +353,7 @@
         return null;
     }
     
-    private static boolean isPrimitiveWrapper(Class wrapper, Class base) {
+    private static boolean isPrimitiveWrapper(Class<?> wrapper, Class<?> base) {
         return (base == boolean.class) && (wrapper == Boolean.class) ||
             (base == byte.class) && (wrapper == Byte.class) ||
             (base == char.class) && (wrapper == Character.class) ||
@@ -369,7 +369,7 @@
         
         if(parameterTypes.length == arguments.length) {
             for(int i = 0; i < arguments.length; ++i) {
-                Class argumentType = (arguments[i] == null) ? null
+                Class<?> argumentType = (arguments[i] == null) ? null
                         : arguments[i].getClass();
                 if((argumentType == null) || isPrimitiveWrapper(argumentType,
                         parameterTypes[i])) {

Modified: incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/EventSetDescriptor.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/EventSetDescriptor.java?rev=414913&r1=414912&r2=414913&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/EventSetDescriptor.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/EventSetDescriptor.java Fri Jun 16 14:11:01 2006
@@ -34,7 +34,7 @@
 
     private String eventSetName = null;
     
-    private Class listenerType = null;
+    private Class<?> listenerType = null;
     private ArrayList<MethodDescriptor> listenerMethodDescriptors =
         new ArrayList<MethodDescriptor>();
     
@@ -265,10 +265,10 @@
      */
     public Method[] getListenerMethods() {
         Method[] result = new Method[listenerMethodDescriptors.size()];
-        Iterator i = listenerMethodDescriptors.iterator();
+        Iterator<MethodDescriptor> i = listenerMethodDescriptors.iterator();
         int idx = 0;
         while(i.hasNext()) {
-            MethodDescriptor md = (MethodDescriptor) i.next();
+            MethodDescriptor md = i.next();
             result[idx] = md.getMethod();
             idx++;
         }
@@ -281,10 +281,10 @@
     public MethodDescriptor[] getListenerMethodDescriptors() {
         MethodDescriptor[] result =
                 new MethodDescriptor[listenerMethodDescriptors.size()];
-        Iterator i = listenerMethodDescriptors.iterator();
+        Iterator<MethodDescriptor> i = listenerMethodDescriptors.iterator();
         int idx = 0;
         while(i.hasNext()) {
-            result[idx] = (MethodDescriptor) i.next();
+            result[idx] = i.next();
             idx++;
         }
         return result;
@@ -346,7 +346,7 @@
         return inDefaultEventSet;
     }
     
-    private Class getEventType(Class listenerType)
+    private Class<?> getEventType(Class<?> listenerType)
             throws ClassNotFoundException {
         String listenerTypeName = listenerType.getName();
         int idx = listenerTypeName.lastIndexOf("Listener");
@@ -355,7 +355,7 @@
                 listenerType.getClassLoader());
     }
 
-    private boolean checkMethod(Class listenerType, Method listenerMethod)
+    private boolean checkMethod(Class<?> listenerType, Method listenerMethod)
             throws IntrospectionException {
         if(listenerMethod != null
                 && !listenerMethod.getDeclaringClass().isAssignableFrom(
@@ -368,7 +368,7 @@
         }
     }
     
-    private Method findMethodByName(Class listenerType,
+    private Method findMethodByName(Class<?> listenerType,
             String listenerMethodName) throws IntrospectionException {
         try {
             return listenerType.getMethod(listenerMethodName,
@@ -385,10 +385,10 @@
     }
     
     private Method findMethodByPrefix(
-            Class sourceClass,
+            Class<?> sourceClass,
             String prefix,
             String postfix,
-            Class listenerType) {
+            Class<?> listenerType) {
         String fullName = listenerType.getName(); // com.drl.beans.SmthListener
         int idx = fullName.lastIndexOf(".");
         String methodName = prefix + fullName.substring(idx + 1) + postfix; // prefix(e.g., add) + SmthListener
@@ -418,12 +418,12 @@
     }
     
     private static Method checkRegistrationMethod(
-            Class listenerType,
+            Class<?> listenerType,
             Method registrationMethod) throws IntrospectionException {
         if(registrationMethod == null) {
             return null;
         } else {
-            Class returnType = registrationMethod.getReturnType();
+            Class<?> returnType = registrationMethod.getReturnType();
             
             if(returnType != void.class) {
                 throw new IntrospectionException(registrationMethod.getName()
@@ -445,7 +445,7 @@
     }
     
     private static Method checkGetListenerMethod(
-            Class listenerType,
+            Class<?> listenerType,
             Method getListenerMethod) throws IntrospectionException {
         if(getListenerMethod == null) {
             return null;
@@ -457,7 +457,7 @@
                         "No input params are allowed for getListenerMethod");
             }
             
-            Class returnType = getListenerMethod.getReturnType();
+            Class<?> returnType = getListenerMethod.getReturnType();
             if(returnType.isArray()
                     && returnType.getComponentType() == listenerType) {
                 return getListenerMethod;

Modified: incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/IndexedPropertyDescriptor.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/IndexedPropertyDescriptor.java?rev=414913&r1=414912&r2=414913&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/IndexedPropertyDescriptor.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/IndexedPropertyDescriptor.java Fri Jun 16 14:11:01 2006
@@ -105,8 +105,8 @@
                         + "integer type.");
             }
             
-            Class returnType = indexedGetter.getReturnType();
-            Class indexedPropertyType = getIndexedPropertyType();
+            Class<?> returnType = indexedGetter.getReturnType();
+            Class<?> indexedPropertyType = getIndexedPropertyType();
             if((indexedPropertyType != null) && !returnType.equals(
                     indexedPropertyType)) {
                 throw new IntrospectionException(
@@ -137,14 +137,14 @@
                         + "equal to 2.");
             }
             
-            Class firstParameterType = parameterTypes[0];
+            Class<?> firstParameterType = parameterTypes[0];
             if (!firstParameterType.equals(int.class)) {
                 throw new IntrospectionException(
                         "First parameter type in indexed setter method "
                         + "should be int.");
             }            
             
-            Class secondParameterType = parameterTypes[1];
+            Class<?> secondParameterType = parameterTypes[1];
             if (!secondParameterType.equals(getIndexedPropertyType())) {
                 throw new IntrospectionException(
                         "Second parameter type in indexed setter method "
@@ -188,7 +188,7 @@
      * @com.intel.drl.spec_ref
      */
     public Class<?> getIndexedPropertyType() {
-        Class result = null;
+        Class<?> result = null;
         if (indexedGetter != null) {
             result = indexedGetter.getReturnType();
         } else if (indexedSetter != null) {
@@ -198,7 +198,7 @@
         return result;        
     }
     
-    private void setIndexedReadMethod(Class beanClass,
+    private void setIndexedReadMethod(Class<?> beanClass,
             String indexedGetterName) {
         Method[] getters = findMethods(beanClass, indexedGetterName);
         boolean result = false;
@@ -211,7 +211,7 @@
         }
     }
     
-    private void setIndexedWriteMethod(Class beanClass,
+    private void setIndexedWriteMethod(Class<?> beanClass,
             String indexedSetterName) {
         Method[] setters = findMethods(beanClass, indexedSetterName);
         boolean result = false;

Modified: incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/Introspector.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/Introspector.java?rev=414913&r1=414912&r2=414913&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/Introspector.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/Introspector.java Fri Jun 16 14:11:01 2006
@@ -14,28 +14,18 @@
  *  limitations under the License.
  */
 
-/**
- * @author Maxim V. Berkultsev
- * @version $Revision$
- */
 package java.beans;
 
-import java.awt.Image;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Comparator;
 import java.util.HashMap;
 import java.util.ArrayList;
 import java.util.Iterator;
-import java.util.Vector;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
+import java.util.List;
+import java.util.Map;
 
 /**
  * @author Maxim V. Berkultsev
  * @version $Revision$
  */
-
 public class Introspector {
 
     public static final int USE_ALL_BEANINFO = 1;
@@ -137,7 +127,7 @@
 
     // private methods
 
-    private static BeanInfoWrapper getBeanInfo(Class beanClass, Class stopClass,
+    private static BeanInfoWrapper getBeanInfo(Class<?> beanClass, Class<?> stopClass,
         boolean ignoreBeanClassBeanInfo, boolean ignoreSuperClassBeanInfo)
     {
         if (beanClass == null) {
@@ -156,7 +146,7 @@
         BeanInfo beanInfo = null;
         if (!ignoreBeanClassBeanInfo) {
             try {
-                Class beanInfoClass = findBeanInfoClass(beanClass);
+                Class<?> beanInfoClass = findBeanInfoClass(beanClass);
                 if(beanInfoClass != null) {
                     beanInfo = (BeanInfo) beanInfoClass.newInstance();
                 }
@@ -174,7 +164,7 @@
         
         BeanInfoWrapper wrapper = new BeanInfoWrapper(beanInfo, beanInfoImpl);
     
-        Class parent = beanClass.getSuperclass();
+        Class<?> parent = beanClass.getSuperclass();
         if ((parent != null) && (parent != stopClass)) {
             BeanInfoWrapper parentBeanInfo = getBeanInfo(parent, stopClass,
                 ignoreSuperClassBeanInfo, ignoreSuperClassBeanInfo);
@@ -190,14 +180,14 @@
         return wrapper;
     }
 
-    private static Class findBeanInfoClass(Class beanClass) {
+    private static Class<?> findBeanInfoClass(Class<?> beanClass) {
         String beanClassName = beanClass.getName();
         int idx = beanClassName.lastIndexOf(".");
         String shortBeanInfoClassName = beanClassName.substring(idx + 1,
             beanClassName.length()) + "BeanInfo";
         String fullBeanInfoClassName = beanClassName + "BeanInfo";
 
-        Class beanInfoClass = null;
+        Class<?> beanInfoClass = null;
         try {
             beanInfoClass = Class.forName(
                 fullBeanInfoClassName, true, beanClass.getClassLoader());
@@ -219,15 +209,14 @@
     }
 
     private static BeanInfoWrapper findBeanInfoClassInCache(
-            Class beanClass,
-            Class stopClass,
+            Class<?> beanClass,
+            Class<?> stopClass,
             boolean ignoreBeanClassBeanInfo,
             boolean ignoreSuperClassBeanInfo) {
         BeanInfoWrapper result = null;
-        ArrayList beanInfoDatas = (ArrayList) beanInfos.get(
-                beanClass.getName());
+        List<BeanInfoData> beanInfoDatas = beanInfos.get(beanClass.getName());
         if (beanInfoDatas != null) {
-            Iterator iterator = beanInfoDatas.iterator();
+            Iterator<BeanInfoData> iterator = beanInfoDatas.iterator();
             while(iterator.hasNext()) {
                 BeanInfoData beanInfoData = (BeanInfoData) iterator.next();
                 if ((beanInfoData.getStopClass() == stopClass) &&
@@ -246,12 +235,11 @@
     
     private static void storeBeanInfoClassInCache(
             BeanInfoWrapper beanInfoWrapper,
-            Class beanClass,
-            Class stopClass,
+            Class<?> beanClass,
+            Class<?> stopClass,
             boolean ignoreBeanClassBeanInfo,
             boolean ignoreSuperClassBeanInfo) {
-        ArrayList<BeanInfoData> beanInfoDatas = beanInfos.get(
-                beanClass.getName());
+        List<BeanInfoData> beanInfoDatas = beanInfos.get(beanClass.getName());
         if(beanInfoDatas == null) {
             beanInfoDatas = new ArrayList<BeanInfoData>();
             beanInfos.put(beanClass.getName(), beanInfoDatas);
@@ -260,7 +248,7 @@
             ignoreSuperClassBeanInfo, beanInfoWrapper));
     }
 
-    private static void removeBeanInfoClassFromCache(Class beanClass) {
+    private static void removeBeanInfoClassFromCache(Class<?> beanClass) {
         beanInfos.remove(beanClass.getName());
     }
 
@@ -271,789 +259,7 @@
     // private fields
 
     private static String[] path = {"sun.beans.infos"};
-    private static HashMap<String, ArrayList<BeanInfoData>> beanInfos =
-        new HashMap<String, ArrayList<BeanInfoData>>();
-
-}
-
-class BeanInfoData {
-
-    private Class stopClass;
-    private boolean ignoreBeanClassBeanInfo;
-    private boolean ignoreSuperClassBeanInfo;
-    private BeanInfoWrapper beanInfoWrapper;
-
-    public BeanInfoData(BeanInfoWrapper beanInfo) {
-        this.stopClass = null;
-        this.ignoreBeanClassBeanInfo = false;
-        this.ignoreSuperClassBeanInfo = false;
-        this.beanInfoWrapper = beanInfo;
-    }
-
-    public BeanInfoData(Class stopClass, boolean ignoreBeanClassBeanInfo,
-        boolean ignoreSuperClassBeanInfo, BeanInfoWrapper beanInfoWrapper)
-    {
-        this.stopClass = stopClass;
-        this.ignoreBeanClassBeanInfo = ignoreBeanClassBeanInfo;
-        this.ignoreSuperClassBeanInfo = ignoreSuperClassBeanInfo;
-        this.beanInfoWrapper = beanInfoWrapper;
-    }
-
-    public Class getStopClass() {
-        return stopClass;
-    }
-
-    public boolean getIgnoreBeanClassBeanInfo() {
-        return ignoreBeanClassBeanInfo;
-    }
-
-    public boolean getIgnoreSuperClassBeanInfo() {
-        return ignoreSuperClassBeanInfo;
-    }
-
-    public BeanInfoWrapper getBeanInfoWrapper() {
-        return beanInfoWrapper;
-    }
-}
-
-class BeanInfoImpl implements BeanInfo {
-
-    private static int MT_OTHER = 0;
-    private static int MT_SETTER = 1;
-    private static int MT_GETTER = 2;
-    private static int MT_BOOLEAN_GETTER = 3;
-    private static int MT_INDEXED_SETTER = 4;
-    private static int MT_INDEXED_GETTER = 5;
-
-    public BeanInfoImpl(Class beanClass) {
-        this.beanClass = beanClass;
-    }
-
-    public PropertyDescriptor[] getPropertyDescriptors() {
-        if (propertyDescriptors == null) {
-            HashMap result = new HashMap();
-            
-            if (beanClass != null) {
-                ArrayList beanClassMethodsArrayList = getPublicMethods(
-                        beanClass);
-                
-                ArrayList<Method> setters = new ArrayList<Method>();
-                ArrayList<Method> getters = new ArrayList<Method>();
-                ArrayList<Method> booleanGetters = new ArrayList<Method>();
-                ArrayList<Method> indexedSetters = new ArrayList<Method>();
-                ArrayList<Method> indexedGetters = new ArrayList<Method>();
-                
-                Iterator iterator = beanClassMethodsArrayList.iterator();
-                while (iterator.hasNext()) {
-                    Method method = (Method) iterator.next();
-                    
-                    int methodType = getMethodType(method);
-                    if (methodType == MT_SETTER) {
-                        setters.add(method);
-                    } else if (methodType == MT_GETTER) {
-                        getters.add(method);
-                    } else if (methodType == MT_BOOLEAN_GETTER) {
-                        booleanGetters.add(method);
-                    } else if (methodType == MT_INDEXED_SETTER) {
-                        indexedSetters.add(method);
-                    } else if (methodType == MT_INDEXED_GETTER) {
-                        indexedGetters.add(method);
-                    }
-                }
-                try {
-                    addIndexedPropertyDescriptorsFromMethodList(result,
-                            indexedGetters, false);
-                    addIndexedPropertyDescriptorsFromMethodList(result,
-                            indexedSetters, true);
-                    addPropertyDescriptorsFromMethodList(result, booleanGetters,
-                            false);
-                    addPropertyDescriptorsFromMethodList(result, setters, true);
-                    addPropertyDescriptorsFromMethodList(result, getters, true);
-                } catch (Exception e) {
-                }
-                
-                Object[] values = result.values().toArray();
-                propertyDescriptors = new PropertyDescriptor[values.length];
-                for(int k = 0; k < propertyDescriptors.length; ++k) {
-                    propertyDescriptors[k] = (PropertyDescriptor) values[k];
-                }
-            }
-        }
-        
-        return propertyDescriptors;
-    }
-
-    public MethodDescriptor[] getMethodDescriptors() {
-        if(methodDescriptors == null) {
-            ArrayList<MethodDescriptor> result = new ArrayList<MethodDescriptor>();
-            ArrayList beanClassMethodsArrayList = getPublicMethods(beanClass);
-            
-            Iterator iterator = beanClassMethodsArrayList.iterator();
-            while (iterator.hasNext()) {
-                Method method = (Method) iterator.next();
-                result.add(new MethodDescriptor(method));
-            }
-            
-            methodDescriptors = new MethodDescriptor[result.size()];
-            for(int i = 0; i < methodDescriptors.length; ++i) {
-                methodDescriptors[i] = (MethodDescriptor) result.get(i);
-            }
-            
-        }
-        
-        return methodDescriptors;
-    }
-
-    public EventSetDescriptor[] getEventSetDescriptors() {
-        if(eventSetDescriptors == null) {
-            HashMap<String, EventSetDescriptor> result =
-                new HashMap<String, EventSetDescriptor>();
-            ArrayList beanClassMethodsArrayList = getPublicMethods(beanClass);
-            
-            Iterator iterator = beanClassMethodsArrayList.iterator();
-            while(iterator.hasNext()) {
-                Method method = (Method) iterator.next();
-                String methodName = method.getName();
-                
-                String listenerName = null;
-                if(methodName.endsWith("Listener")) {
-                    listenerName = methodName.substring(0,
-                            methodName.lastIndexOf("Listener"));
-                    
-                    if(methodName.startsWith("add")) {
-                        listenerName = listenerName.substring(3);
-                    } else if(methodName.startsWith("remove")) {
-                        listenerName = listenerName.substring(6);
-                    } else {
-                        continue;
-                    }
-                    
-                    if(result.get(listenerName) == null) {
-                        Class[] parameterTypes = method.getParameterTypes();
-                        
-                        if(parameterTypes.length == 1) {
-                            Class listenerType = parameterTypes[0];
-                            
-                            // full and short names of classes
-                            String listenerTypeName = listenerType.getName();
-
-                            // check if the listener name extracted from param name and
-                            // listener name extracted from registration method are the same
-                            String listenerNameFromParam =
-                                listenerTypeName.substring(
-                                        listenerTypeName.lastIndexOf(".") + 1);
-                            
-                            String listenerNameFromMethod = listenerName
-                                    + "Listener";
-                            if(!listenerNameFromParam.equals(
-                                    listenerNameFromMethod)) {
-                                continue;
-                            }
-                            
-                            String eventTypeName = listenerTypeName.substring(0,
-                                    listenerTypeName.lastIndexOf(".") + 1)
-                                    + listenerName + "Event";
-                            
-                            // classes generated from classes names
-                            Class eventType = null;
-                            try {
-                                eventType = Class.forName(eventTypeName, true,
-                                        beanClass.getClassLoader());
-                            } catch (ClassNotFoundException cnfe) {
-                                System.out.println("Event type with name "
-                                        + eventTypeName + " is not found.");
-                            } finally {
-                                if(eventType == null) {
-                                    continue;
-                                }
-                            }
-                            
-                            Method[] methods = listenerType.getMethods();
-                            Vector<Method> listenerMethodsVec = new Vector<Method>();
-                            for(int i = 0; i < methods.length; ++i) {
-                                Class[] listenerMethodParams =
-                                    methods[i].getParameterTypes();
-                                if(listenerMethodParams.length == 1
-                                        && listenerMethodParams[0] == eventType) {
-                                    listenerMethodsVec.add(methods[i]);
-                                }
-                            }
-                            
-                            Method[] listenerMethods =
-                                    new Method[listenerMethodsVec.size()];
-                            Iterator iter = listenerMethodsVec.iterator();
-                            int idx2 = 0;
-                            while(iter.hasNext()) {
-                                listenerMethods[idx2] = (Method) iter.next();
-                                idx2++;
-                            }
-                            
-                            Method addListenerMethod = null;
-                            String addListenerMethodName = "add" + listenerName
-                                    + "Listener";
-                            try {
-                                addListenerMethod = beanClass.getMethod(
-                                    addListenerMethodName,
-                                    new Class[] { listenerType });
-                            } catch (NoSuchMethodException nsme) {
-                                // no adder found
-                                continue;
-                            }
-                            
-                            Method removeListenerMethod = null;
-                            String removeListenerMethodName = "remove"
-                                    + listenerName + "Listener";
-                            try {
-                                removeListenerMethod = beanClass.getMethod(
-                                    removeListenerMethodName,
-                                    new Class[] { listenerType });
-                            } catch (NoSuchMethodException nsme) {
-                                // no remover found
-                                continue;
-                            }
-                            
-                            Method getListenerMethod = null;
-                            String getListenerMethodName = "get" + listenerName
-                                    + "Listeners";
-                            try {
-                                getListenerMethod = beanClass.getMethod(
-                                    getListenerMethodName, new Class[] {});
-                            } catch (NoSuchMethodException nsme) {
-                                // no action - getter is not a mandatory method in event set descriptor pattern
-                            }
-
-                            try {
-                                listenerName = Introspector.decapitalize(
-                                        listenerName);
-                                EventSetDescriptor esd = new EventSetDescriptor(
-                                        listenerName,
-                                        listenerType,
-                                        listenerMethods,
-                                        addListenerMethod,
-                                        removeListenerMethod,
-                                        getListenerMethod);
-                                result.put(listenerName, esd);
-                            } catch (IntrospectionException ie) {
-                                System.out.println(
-                                        "Cannot generate event set descriptor "
-                                        + "for name" + listenerName + ".");
-                            }
-                            
-                        }
-                    }
-                }
-            }
-            
-            String[] eventSetDescriptorNames =
-                    new String[result.keySet().size()];
-            Iterator i = result.keySet().iterator();
-            int idx = 0;
-            while(i.hasNext()) {
-                eventSetDescriptorNames[idx++] =
-                    ((EventSetDescriptor) result.get(
-                            (String) i.next())).getName();
-            }
-            
-            Arrays.sort(eventSetDescriptorNames);
-
-            eventSetDescriptors =
-                    new EventSetDescriptor[eventSetDescriptorNames.length];
-            for(int j = 0; j < eventSetDescriptors.length; ++j) {
-                eventSetDescriptors[j] = (EventSetDescriptor) result.get(
-                        eventSetDescriptorNames[j]);
-            }
-            
-        }
-        return eventSetDescriptors;
-    }
-
-    public BeanInfo[] getAdditionalBeanInfo() {
-        // no info is obtained thru automatic introspection
-        return null;
-    }
-
-    public BeanDescriptor getBeanDescriptor() {
-        return new BeanDescriptor(beanClass, null);
-    }
+    private static Map<String, List<BeanInfoData>> beanInfos =
+        new HashMap<String, List<BeanInfoData>>();
 
-    public Image getIcon(int iconKind) {
-        // no info is obtained thru automatic introspection
-        return null;
-    }
-
-    public int getDefaultPropertyIndex() {
-        return defaultPropertyIndex;
-    }
-
-    public int getDefaultEventIndex() {
-        return defaultEventIndex;
-    }
-
-    private static int getMethodType(Method method) {
-        String name = method.getName();
-        int result = MT_OTHER;
-        try {
-            int modifiers = method.getModifiers();
-            
-            if(Modifier.isPublic(modifiers) && !Modifier.isStatic(modifiers)) {
-                Class[] parameterTypes = method.getParameterTypes();
-                Class returnType = method.getReturnType();
-
-                if(name.startsWith("get") && (parameterTypes.length == 0)
-                        && (returnType != void.class) && (name.length() > 3)) {
-                    result = MT_GETTER;
-                } else if(name.startsWith("is") && (parameterTypes.length == 0)
-                        && (returnType == boolean.class)
-                        && (name.length() > 2)) {
-                    result = MT_BOOLEAN_GETTER;
-                } else if(name.startsWith("get") && (parameterTypes.length == 1)
-                        && (returnType != void.class)
-                        && (parameterTypes[0] == int.class)
-                        && (name.length() > 3)) {
-                    result = MT_INDEXED_GETTER;
-                } else if(name.startsWith("set") && (parameterTypes.length == 1)
-                        && (returnType == void.class) && (name.length() > 3)) {
-                    result = MT_SETTER;
-                } else if(name.startsWith("set") && (parameterTypes.length == 2)
-                        && (returnType == void.class)
-                        && (parameterTypes[0] == int.class)
-                        && (name.length() > 3)) {
-                    result = MT_INDEXED_SETTER;
-                }
-            }
-        } catch (Exception e) {
-            result = MT_OTHER;
-        }
-        
-        return result;
-    }
-
-    private static String extractPropertyName(String methodName)
-            throws Exception {
-        String result = null;
-        
-        if ( methodName.startsWith("set") || methodName.startsWith("get") ) {
-            result = methodName.substring(3);
-            result = Introspector.decapitalize(result);
-        } else if (methodName.startsWith("is")) {
-            result = methodName.substring(2);
-            result = Introspector.decapitalize(result);
-        }
-        
-        return result;
-    }
-
-    private static ArrayList getPublicMethods(Class theClass) {
-        ArrayList<Method> result = new ArrayList<Method>();
-
-        Method[] beanClassMethods = theClass.getDeclaredMethods();
-        for (int i = 0; i < beanClassMethods.length; ++i) {
-            if(Modifier.isPublic(beanClassMethods[i].getModifiers())) {
-                result.add(beanClassMethods[i]);
-            }
-        }
-        
-        return result;
-    }
-    
-    private void addPropertyDescriptorsFromMethodList(
-            HashMap<String, PropertyDescriptor> hmPropertyDescriptors,
-            ArrayList methods,
-            boolean checkExisting) throws Exception
-    {
-        Iterator iterator = methods.iterator();
-        while(iterator.hasNext()) {
-            Method method = (Method) iterator.next();
-            String methodName = method.getName();
-            String propertyName = extractPropertyName(methodName);
-            if ((!checkExisting) || (hmPropertyDescriptors.get(propertyName) == null)) {
-                PropertyDescriptor propertyDescriptor = null;
-                try {
-                    propertyDescriptor = new PropertyDescriptor(propertyName, beanClass);
-                    hmPropertyDescriptors.put(propertyName, propertyDescriptor);
-                } catch (IntrospectionException ie) {
-                    System.out.println(ie.getClass() + ": " + ie.getMessage());
-                }
-            }
-        }
-    }
-    
-    private void addIndexedPropertyDescriptorsFromMethodList(
-            HashMap<String, IndexedPropertyDescriptor> hmPropertyDescriptors,
-            ArrayList methods,
-            boolean checkExisting) throws Exception
-    {
-        Iterator iterator = methods.iterator();
-        while(iterator.hasNext()) {
-            Method method = (Method) iterator.next();
-            String methodName = method.getName();
-            String propertyName = extractPropertyName(methodName);
-            if ((!checkExisting) || (hmPropertyDescriptors.get(propertyName) == null)) {
-                IndexedPropertyDescriptor indexedPropertyDescriptor = null;
-                try {
-                    indexedPropertyDescriptor = new IndexedPropertyDescriptor(
-                            propertyName, beanClass);
-                    hmPropertyDescriptors.put(propertyName,
-                            indexedPropertyDescriptor);
-                } catch (IntrospectionException ie) {
-                    System.out.println(ie.getClass() + ": " + ie.getMessage());
-                }
-            }
-        }
-    }
-    
-    private Class beanClass = null;
-    private PropertyDescriptor[] propertyDescriptors = null; 
-    private MethodDescriptor[] methodDescriptors = null;
-    private EventSetDescriptor[] eventSetDescriptors = null;
-    private int defaultPropertyIndex = -1;
-    private int defaultEventIndex = -1;
-    
-}
-
-class BeanInfoWrapper implements BeanInfo {
-    
-    private BeanInfo info;
-    private BeanInfoImpl impl;
-    private BeanInfoWrapper parentBeanInfoWrapper;
-    
-    public BeanInfoWrapper(BeanInfo info, BeanInfoImpl impl) {
-        this.info = info;
-        this.impl = impl;
-    }
-    
-    public PropertyDescriptor[] getPropertyDescriptors() {
-        PropertyDescriptor[] result = null;
-        PropertyDescriptor[] infoResult = null;
-        
-        if(info != null) {
-            infoResult = info.getPropertyDescriptors();
-            
-            BeanInfo[] infos = info.getAdditionalBeanInfo();
-            if(infos != null) {
-                for(int i = 0; i < infos.length; ++i) {
-                    BeanInfo additionalInfo = infos[i];
-                    
-                    if(infoResult == null) {
-                        infoResult = additionalInfo.getPropertyDescriptors();
-                    } else {
-                        infoResult = concatArraysToOneArray(infoResult,
-                                additionalInfo.getPropertyDescriptors());
-                    }
-                }
-            }
-        }
-        
-        if(info == null || infoResult == null) {
-            PropertyDescriptor[] implResult = impl.getPropertyDescriptors();
-            
-            // merge with parent info
-            if(parentBeanInfoWrapper != null) {
-                PropertyDescriptor[] parentResult =
-                        parentBeanInfoWrapper.getPropertyDescriptors();
-                HashMap hm = concatArraysUniqueByName(implResult, parentResult);
-                
-                Collection values = hm.values();
-                
-                result = new PropertyDescriptor[values.size()];
-                int idx = 0;
-                Iterator iterator = values.iterator();
-                while(iterator.hasNext()) {
-                    result[idx++] = (PropertyDescriptor) iterator.next();
-                }
-                
-                Arrays.sort(result, new Comparator() {
-                    public int compare(Object o1, Object o2) {
-                        PropertyDescriptor pd1 = (PropertyDescriptor) o1;
-                        PropertyDescriptor pd2 = (PropertyDescriptor) o2;
-                        return pd1.getName().compareTo(pd2.getName());
-                    }
-                    public boolean equals(Object o) {
-                        return false;
-                    }
-                });
-            } else {
-                result = implResult;
-            }
-        } else {
-            result = infoResult;
-        }
-        
-        return result;
-    }
-
-    public MethodDescriptor[] getMethodDescriptors() {
-        MethodDescriptor[] result = null;
-        MethodDescriptor[] infoResult = null;
-        
-        if(info != null) {
-            infoResult = info.getMethodDescriptors();
-            
-            BeanInfo[] infos = info.getAdditionalBeanInfo();
-            if(infos != null) {
-                for(int i = 0; i < infos.length; ++i) {
-                    BeanInfo additionalInfo = infos[i];
-                    
-                    if(infoResult == null) {
-                        infoResult = additionalInfo.getMethodDescriptors();
-                    } else {
-                        infoResult = concatArraysToOneArray(infoResult,
-                                additionalInfo.getMethodDescriptors());
-                    }
-                }
-            }
-        }
-        
-        if(info == null || infoResult == null) {
-            MethodDescriptor[] implResult = impl.getMethodDescriptors();
-            
-            // merge with parent info
-            if(parentBeanInfoWrapper != null) {
-                MethodDescriptor[] parentResult =
-                        parentBeanInfoWrapper.getMethodDescriptors();
-                result = concatArraysToOneArray(implResult, parentResult);
-            } else {
-                result = implResult;
-            }
-        } else {
-            result = infoResult;
-        }
-
-        if(result != null) {
-            Arrays.sort(result, new Comparator() {
-                public int compare(Object o1, Object o2) {
-                    MethodDescriptor md1 = (MethodDescriptor) o1;
-                    MethodDescriptor md2 = (MethodDescriptor) o2;
-                    return md1.getName().compareTo(md2.getName());
-                }
-                public boolean equals(Object o) {
-                    return false;
-                }
-            });
-        }
-        
-        return result;
-    }
-
-    public EventSetDescriptor[] getEventSetDescriptors() {
-        EventSetDescriptor[] result = null;
-        EventSetDescriptor[] infoResult = null;
-        
-        if(info != null) {
-            infoResult = info.getEventSetDescriptors();
-            
-            BeanInfo[] infos = info.getAdditionalBeanInfo();
-            if(infos != null) {
-                for(int i = 0; i < infos.length; ++i) {
-                    BeanInfo additionalInfo = infos[i];
-                    
-                    if(infoResult == null) {
-                        infoResult = additionalInfo.getEventSetDescriptors();
-                    } else {
-                        infoResult = concatArraysToOneArray(infoResult,
-                                additionalInfo.getEventSetDescriptors());
-                    }
-                }
-            }
-        }
-        
-        if(info == null || infoResult == null) {
-            EventSetDescriptor[] implResult = impl.getEventSetDescriptors();
-            
-            // merge with parent info
-            if(parentBeanInfoWrapper != null) {
-                EventSetDescriptor[] parentResult =
-                        parentBeanInfoWrapper.getEventSetDescriptors();
-                HashMap hm = concatArraysUniqueByName(implResult, parentResult);
-                
-                Collection values = hm.values();
-                
-                result = new EventSetDescriptor[values.size()];
-                int idx = 0;
-                Iterator iterator = values.iterator();
-                while(iterator.hasNext()) {
-                    result[idx++] = (EventSetDescriptor) iterator.next();
-                }
-                
-                Arrays.sort(result, new Comparator() {
-                    public int compare(Object o1, Object o2) {
-                        EventSetDescriptor esd1 = (EventSetDescriptor) o1;
-                        EventSetDescriptor esd2 = (EventSetDescriptor) o2;
-                        return esd1.getName().compareTo(esd2.getName());
-                    }
-                    public boolean equals(Object o) {
-                        return false;
-                    }
-                });
-            } else {
-                result = implResult;
-            }
-        } else {
-            result = infoResult;
-        }
-        
-        return result;
-    }
-
-    public BeanInfo[] getAdditionalBeanInfo() {
-        BeanInfo[] result = null;
-        
-        if(info != null) {
-            result = info.getAdditionalBeanInfo();
-        }
-        
-        return result;
-    }
-
-    public BeanDescriptor getBeanDescriptor() {
-        BeanDescriptor result = null;
-        
-        if(info != null) {
-            result = info.getBeanDescriptor();
-        }
-        
-        if(info == null || result == null) {
-            result = impl.getBeanDescriptor();
-        }
-        
-        return result;
-    }
-
-    public Image getIcon(int iconKind) {
-        Image result = null;
-        
-        if(info != null) {
-            result = info.getIcon(iconKind);
-        }
-        
-        return result;
-    }
-
-    public int getDefaultPropertyIndex() {
-        int result = -1;
-        
-        if(info != null) {
-            result = info.getDefaultPropertyIndex();
-        }
-        
-        if(info == null || result == -1) {
-            result = impl.getDefaultPropertyIndex();
-        }
-        
-        return result;
-    }
-
-    public int getDefaultEventIndex() {
-        int result = -1;
-        
-        if(info != null) {
-            result = info.getDefaultEventIndex();
-        }
-        
-        if(info == null || result == -1) {
-            result = impl.getDefaultEventIndex();
-        }
-        
-        return result;
-    }
-    
-    void merge(BeanInfoWrapper parentBeanInfoWrapper) {
-        this.parentBeanInfoWrapper = parentBeanInfoWrapper;
-    }
-    
-    private static HashMap concatArraysUniqueByName(FeatureDescriptor[] childs,
-            FeatureDescriptor[] parents) {
-        HashMap result = new HashMap();
-        
-        if(childs != null) {
-            for(int i = 0; i < childs.length; ++i) {
-                result.put(childs[i].getName(), childs[i]);
-            }
-        }
-        
-        if(parents != null) {
-            for(int j = 0; j < parents.length; ++j) {
-                if(result.get(parents[j].getName()) == null) {
-                    result.put(parents[j].getName(), parents[j]);
-                }
-            }
-        }
-        
-        return result;
-    }
-    
-    private static PropertyDescriptor[] concatArraysToOneArray(
-            PropertyDescriptor[] childs, PropertyDescriptor[] parents) {
-        if(childs != null || parents != null) {
-            HashMap hm = concatArraysUniqueByName(childs, parents);
-            PropertyDescriptor[] result = new PropertyDescriptor[hm.size()];
-            
-            Iterator iterator = hm.keySet().iterator();
-            int idx = 0;
-            
-            while(iterator.hasNext()) {
-                String name = (String) iterator.next();
-                result[idx++] = (PropertyDescriptor) hm.get(name);
-            }
-            
-            return result;
-        } else {
-            return null;
-        }
-    }
-    
-    private static MethodDescriptor[] concatArraysToOneArray(
-            MethodDescriptor[] childs, MethodDescriptor[] parents) {
-        MethodDescriptor[] result = null;
-        
-        if(childs != null || parents != null) {
-            int resultLength = 0;
-            
-            if(childs != null) {
-                resultLength = childs.length; 
-            }
-            
-            if(parents != null) {
-                resultLength += parents.length;
-            }
-            
-            result = new MethodDescriptor[resultLength];
-
-            if(childs != null) {
-                for(int i = 0; i < childs.length; ++i) {
-                    result[i] = childs[i];
-                }
-            }
-            
-            if(parents != null) {
-                int shift = (childs == null) ? 0 : childs.length; 
-                for(int i = 0; i < parents.length; ++i) {
-                    result[shift + i] = parents[i];
-                }
-            }
-            
-        }
-        
-        return result;
-    }
-    
-    private static EventSetDescriptor[] concatArraysToOneArray(
-            EventSetDescriptor[] childs, EventSetDescriptor[] parents) {
-        if(childs != null || parents != null) {
-            HashMap hm = concatArraysUniqueByName(childs, parents);
-            EventSetDescriptor[] result = new EventSetDescriptor[hm.size()];
-            
-            Iterator iterator = hm.keySet().iterator();
-            int idx = 0;
-            
-            while(iterator.hasNext()) {
-                String name = (String) iterator.next();
-                result[idx++] = (EventSetDescriptor) hm.get(name);
-            }
-            
-            return result;
-        } else {
-            return null;
-        }
-    }
 }