You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beehive.apache.org by ky...@apache.org on 2004/12/13 19:10:05 UTC

svn commit: r111736 - in incubator/beehive/trunk/controls: src/api/org/apache/beehive/controls/api/events src/runtime/org/apache/beehive/controls/runtime/generator test/src/controls/org/apache/beehive/controls/test/controls/inherit test/src/units/org/apache/beehive/controls/test/java/inherit

Author: kylem
Date: Mon Dec 13 10:10:04 2004
New Revision: 111736

URL: http://svn.apache.org/viewcvs?view=rev&rev=111736
Log:
Resolved several issues w/ BeanInfo generation and inheritance for operations, properties and event sets.   Enabled a checkin test that validates beaninfo inheritance.


Added:
   incubator/beehive/trunk/controls/src/api/org/apache/beehive/controls/api/events/RemoteEventDispatcher.java
   incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/
   incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/AddIn.java
   incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/Ext1.java
   incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/Ext2.java
   incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/Intf1.java
   incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/Intf1Impl.jcs
   incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/Intf2.java
   incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/Intf2Impl.jcs
   incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/Root.java
   incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/RootImpl.java
   incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/
   incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/BeanInfo.bat
   incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/BeanInfo.sh
   incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Ext1Bean.beaninfo
   incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Ext2Bean.beaninfo
   incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/InheritTest.java
   incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Intf1Bean.beaninfo
   incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Intf2Bean.beaninfo
Modified:
   incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlInterface.java
   incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptEventSet.java
   incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptMethod.java
   incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptMethodSet.java
   incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptPropertySet.java
   incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBeanInfo.vm

Added: incubator/beehive/trunk/controls/src/api/org/apache/beehive/controls/api/events/RemoteEventDispatcher.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/src/api/org/apache/beehive/controls/api/events/RemoteEventDispatcher.java?view=auto&rev=111736
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/controls/src/api/org/apache/beehive/controls/api/events/RemoteEventDispatcher.java	Mon Dec 13 10:10:04 2004
@@ -0,0 +1,45 @@
+package org.apache.beehive.controls.api.events;
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * 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.
+ *
+ * $Header:$
+ */
+
+import java.rmi.RemoteException;
+
+import org.apache.beehive.controls.api.context.ControlHandle;
+
+/**
+ * The RemoteEventDispatcher interface defines the method signature that a container supporting
+ * the external dispatch of Control events would implement if events can be dispatched using RMI.
+ */
+public interface RemoteEventDispatcher
+{
+    /**
+     * Dispatches a Control event to a target control.
+     * @param target the target control
+     * @param event the event to deliver to the control
+     * @param args the parameters to the control event
+     * @throws IllegalAccessException the underlying event method is not accessible due to
+     *         access control.
+     * @throws IllegalArgumentException the target is not valid, the event is not a valid event
+     *         type for the requested target, or the argument types do not match the event
+     *         signature.
+     * @throws InvocationTargetException wraps any exception thrown by the underlying event
+     *         handler.
+     */ 
+    public Object dispatchEvent(ControlHandle target, EventRef event, Object [] args)
+                  throws RemoteException;
+}

Modified: incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlInterface.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlInterface.java?view=diff&rev=111736&p1=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlInterface.java&r1=111735&p2=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlInterface.java&r2=111736
==============================================================================
--- incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlInterface.java	(original)
+++ incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlInterface.java	Mon Dec 13 10:10:04 2004
@@ -214,6 +214,18 @@
     public Collection<AptOperation> getOperations() { return _operations.getMethods(); }
 
     /**
+     * Returns the total number of operations for this control interface
+     */
+    public int getOperationCount()
+    {
+        int count = _operations.size();
+        if (_superClass != null)
+            count += _superClass.getOperationCount();
+
+        return count;
+    }
+
+    /**
      * Initializes the list of PropertySets declared by this AptControlInterface
      */
     private ArrayList<AptPropertySet> initPropertySets()
@@ -288,10 +300,15 @@
      */
     public int getPropertyCount()
     {
-        int count = 0;
+        int count;
+        if (_superClass == null)
+            count = 0;
+        else
+            count = _superClass.getPropertyCount();
+
         for (AptPropertySet propertySet : _propertySets)
-            for (AptProperty property : propertySet.getProperties())
-                count++;
+            count += propertySet.getProperties().size();
+
         return count;
     }
 
@@ -392,6 +409,18 @@
      * Returns the list of AptEventSet declared directly by this AptControlInterface
      */
     public Collection<AptEventSet> getEventSets() { return _eventSets; }
+
+    /**
+     * Returns the total number of operations for this control interface
+     */
+    public int getEventSetCount()
+    {
+        int count = _eventSets.size();
+        if (_superClass != null)
+            count += _superClass.getEventSetCount();
+
+        return count;
+    }
 
     /**
      * Returns the AptEventSet with the specified name

Modified: incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptEventSet.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptEventSet.java?view=diff&rev=111736&p1=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptEventSet.java&r1=111735&p2=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptEventSet.java&r2=111736
==============================================================================
--- incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptEventSet.java	(original)
+++ incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptEventSet.java	Mon Dec 13 10:10:04 2004
@@ -95,6 +95,11 @@
     }
 
     /**
+     * Returns any EventSet from which this event set derives (or null if none)
+     */
+    public AptEventSet getSuperEventSet() { return _superEventSet; }
+
+    /**
      * Initializes the list of Events associated with this EventSet
      */
     protected AptMethodSet<AptEvent> initEvents()
@@ -146,6 +151,17 @@
     public Collection<AptEvent> getEvents() { return _events.getMethods(); }
 
     /**
+     * Returns the number of Events for this EventSet and any super event set
+     */
+    public int getEventCount() 
+    { 
+        int count = _events.size();
+        if (_superEventSet != null)
+            count += _superEventSet.getEventCount();
+        return count;
+    }
+
+    /**
      * Returns the fully qualified EventSet name
      */
     public String getName()
@@ -223,13 +239,12 @@
     }
 
     /**
-     * Returns the FeatureInfo annotation for this event set, or null if there is none.
+     * Returns the name of a custom-generated method to initialize MethodDescriptor bean
+     * info for the events in this EventSet
      */
-    public FeatureInfo getFeatureInfo()
+    public String getInfoInitializer()
     {
-        if ( _eventSet == null )
-            return null;
-        return _eventSet.getAnnotation(FeatureInfo.class);
+       return "init" + getShortName() + "Events"; 
     }
 
     /**

Modified: incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptMethod.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptMethod.java?view=diff&rev=111736&p1=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptMethod.java&r1=111735&p2=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptMethod.java&r2=111736
==============================================================================
--- incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptMethod.java	(original)
+++ incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptMethod.java	Mon Dec 13 10:10:04 2004
@@ -58,8 +58,8 @@
         _defaultReturnValues.put("short", "0");
         _defaultReturnValues.put("int", "0");
         _defaultReturnValues.put("long", "0");
-        _defaultReturnValues.put("float", "0.0");
-        _defaultReturnValues.put("double", "0.0");
+        _defaultReturnValues.put("float", "0.0f");
+        _defaultReturnValues.put("double", "0.0d");
 
         _primToObject.put(PrimitiveType.Kind.BOOLEAN, "Boolean");
         _primToObject.put(PrimitiveType.Kind.BYTE, "Byte");

Modified: incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptMethodSet.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptMethodSet.java?view=diff&rev=111736&p1=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptMethodSet.java&r1=111735&p2=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptMethodSet.java&r2=111736
==============================================================================
--- incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptMethodSet.java	(original)
+++ incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptMethodSet.java	Mon Dec 13 10:10:04 2004
@@ -81,6 +81,11 @@
     {
         return _methods;
     }
+
+    public int size()
+    {
+        return _methods.size();
+    }
         
     HashMap _nameMap = new HashMap();   // method name -> a single (unique) AptMethod or next index
     ArrayList<T> _methods = new ArrayList<T>();

Modified: incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptPropertySet.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptPropertySet.java?view=diff&rev=111736&p1=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptPropertySet.java&r1=111735&p2=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptPropertySet.java&r2=111736
==============================================================================
--- incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptPropertySet.java	(original)
+++ incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptPropertySet.java	Mon Dec 13 10:10:04 2004
@@ -19,6 +19,7 @@
 
 import java.lang.reflect.Method;
 import java.util.ArrayList;
+import java.util.Collection;
 
 
 import com.sun.mirror.apt.AnnotationProcessorEnvironment;
@@ -68,7 +69,7 @@
     /**
      * Returns the list of ControlProperties associated with this ControlPropertySet
      */
-    public ArrayList<AptProperty> getProperties() { return _properties; }
+    public Collection<AptProperty> getProperties() { return _properties; }
 
     /**
      * Returns the fully qualified package name of this property set

Modified: incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBeanInfo.vm
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBeanInfo.vm?view=diff&rev=111736&p1=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBeanInfo.vm&r1=111735&p2=incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBeanInfo.vm&r2=111736
==============================================================================
--- incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBeanInfo.vm	(original)
+++ incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBeanInfo.vm	Mon Dec 13 10:10:04 2004
@@ -64,7 +64,12 @@
 
 import org.apache.beehive.controls.api.ControlException;
 
-public class ${bean.shortName}BeanInfo extends java.beans.SimpleBeanInfo
+public class ${bean.shortName}BeanInfo 
+#if ($intf.superClass)
+    extends ${bean.superClass.className}BeanInfo
+#else
+    extends java.beans.SimpleBeanInfo
+#end
 {
     #if ($intf.operations.size() != 0 || $intf.eventSets.size() != 0)
     #declareMethodStatics()
@@ -88,30 +93,99 @@
         return bd;
     }
 
-    #if ($intf.propertyCount != 0)
-    public PropertyDescriptor [] getPropertyDescriptors()
+    /**
+     * Stores MethodDescriptor descriptors for this bean and its superclasses into
+     * an array, starting at the specified index
+     */
+    protected void initMethodDescriptors(MethodDescriptor [] methodDescriptors, int index)
+                   throws java.beans.IntrospectionException
     {
-        PropertyDescriptor [] propDescriptors = new PropertyDescriptor[$intf.propertyCount];
-        int i = 0;
+        String [] paramNames;
+        ParameterDescriptor [] paramDescriptors;
+        MethodDescriptor md;
+
+        #foreach ($operation in $intf.operations)
+            //
+            // Declare MethodDescriptor for ${operation.name}(${operation.argList})
+            //
+            paramNames = _methodParamMap.get($operation.methodField);
+            paramDescriptors = new ParameterDescriptor[paramNames.length];
+            for (int j = 0; j < paramNames.length; j++)
+            {
+                paramDescriptors[j] = new ParameterDescriptor();
+                paramDescriptors[j].setName(paramNames[j]);
+                paramDescriptors[j].setDisplayName(paramNames[j]);
+            }
+            md = new MethodDescriptor($operation.methodField, paramDescriptors);
+            #if ($operation.featureInfo)
+                #initFeatureDescriptor("md" $operation.featureInfo $operation.name)
+            #end
+            methodDescriptors[index++] = md;
+
+        #end
+
+        #if ($intf.superClass)
+        //
+        // Add method descriptors from parent BeanInfo
+        //
+        super.initMethodDescriptors(methodDescriptors, index); 
+        #end
+    }
+
+    public MethodDescriptor [] getMethodDescriptors()
+    {
+        MethodDescriptor [] methodDescriptors = new MethodDescriptor[$intf.operationCount];
         try
         {
-            PropertyDescriptor pd;
-            #foreach ($propertySet in $intf.propertySets)
-                #foreach ($property in $propertySet.properties)      
-                    pd = new PropertyDescriptor("$property.name", ${bean.className}.class);
-                    #if ($property.propertyInfo)
-                        pd.setBound($property.propertyInfo.bound());
-                        pd.setConstrained($property.propertyInfo.constrained());
-                        #if ($property.editorClass)
-                        pd.setPropertyEditorClass(${property.editorClass}.class);
-                        #end
-                    #end
-                    #if ($property.featureInfo)
-                        #initFeatureDescriptor("pd" $property.featureInfo $property.name)
+            initMethodDescriptors(methodDescriptors, 0);
+        }
+        catch (java.beans.IntrospectionException ie)
+        {
+            throw new ControlException("Unable to create MethodDescriptor", ie);
+        }
+        return methodDescriptors;
+    }
+
+    /**
+     * Stores PropertyDescriptor descriptors for this bean and its superclasses into
+     * an array, starting at the specified index
+     */
+    protected void initPropertyDescriptors(PropertyDescriptor [] propDescriptors, int index)
+                   throws java.beans.IntrospectionException
+    {
+        PropertyDescriptor pd;
+
+        #foreach ($propertySet in $intf.propertySets)
+            #foreach ($property in $propertySet.properties)      
+                pd = new PropertyDescriptor("$property.name", ${bean.className}.class);
+                #if ($property.propertyInfo)
+                    pd.setBound($property.propertyInfo.bound());
+                    pd.setConstrained($property.propertyInfo.constrained());
+                    #if ($property.editorClass)
+                    pd.setPropertyEditorClass(${property.editorClass}.class);
                     #end
-                    propDescriptors[i++] = pd;
                 #end
+                #if ($property.featureInfo)
+                    #initFeatureDescriptor("pd" $property.featureInfo $property.name)
+                #end
+                propDescriptors[index++] = pd;
             #end
+        #end
+
+        #if ($intf.superClass)
+        //
+        // Add property descriptors from parent BeanInfo
+        //
+        super.initPropertyDescriptors(propDescriptors, index); 
+        #end
+    }
+
+    public PropertyDescriptor [] getPropertyDescriptors()
+    {
+        PropertyDescriptor [] propDescriptors = new PropertyDescriptor[$intf.propertyCount];
+        try
+        {
+            initPropertyDescriptors(propDescriptors, 0);
         }
         catch (java.beans.IntrospectionException ie)
         {
@@ -119,56 +193,62 @@
         }
         return propDescriptors;
     }
-    #end
 
-    #if ($intf.operations.size() != 0)
-    public MethodDescriptor [] getMethodDescriptors()
+    #foreach ($eventSet in $intf.eventSets)
+    //
+    // Adds the EventDescriptors for $eventSet.shortName to the EventDescriptor array, starting
+    // at index
+    //
+    protected void ${eventSet.infoInitializer}(MethodDescriptor [] eventDescriptors, int index)
     {
-        MethodDescriptor [] methodDescriptors = new MethodDescriptor[$intf.operations.size()];
-        int i = 0;
         String [] paramNames;
         ParameterDescriptor [] paramDescriptors;
         MethodDescriptor md;
 
-        #foreach ($operation in $intf.operations)
+        //
+        // Build a method descriptor for each event method in the event set
+        //
+        #foreach ($event in $eventSet.events)
+
             //
-            // Declare MethodDescriptor for ${operation.name}(${operation.argList})
+            // Declare MethodDescriptor for ${event.name}(${event.argList})
             //
-            paramNames = _methodParamMap.get($operation.methodField);
+            paramNames = _methodParamMap.get($event.methodField);
             paramDescriptors = new ParameterDescriptor[paramNames.length];
-            for (int j = 0; j < paramNames.length; j++)
+            for (int k = 0; k < paramNames.length; k++)
             {
-                paramDescriptors[j] = new ParameterDescriptor();
-                paramDescriptors[j].setName(paramNames[j]);
-                paramDescriptors[j].setDisplayName(paramNames[j]);
+                paramDescriptors[k] = new ParameterDescriptor();
+                paramDescriptors[k].setName(paramNames[k]);
+                paramDescriptors[k].setDisplayName(paramNames[k]);
             }
-            md = new MethodDescriptor($operation.methodField, paramDescriptors);
-            #if ($operation.featureInfo)
-                #initFeatureDescriptor("md" $operation.featureInfo $operation.name)
+            md = new MethodDescriptor($event.methodField, paramDescriptors);
+            #if ($event.featureInfo)
+                #initFeatureDescriptor("md" $event.featureInfo $event.name)
             #end
-            methodDescriptors[i++] = md;
+            eventDescriptors[index++] = md;
+        #end
 
+        #if ($eventSet.superEventSet)
+        //
+        // Add events from the parent EventSet
+        //
+        ${eventSet.superEventSet.infoInitializer}(eventDescriptors, index);
         #end
-        return methodDescriptors;
     }
+
     #end
 
-    #if ($intf.eventSets.size() != 0)
-    public EventSetDescriptor [] getEventSetDescriptors()
+    protected void initEventSetDescriptors(EventSetDescriptor [] eventSetDescriptors, int index)
+                   throws java.beans.IntrospectionException
     {
-        EventSetDescriptor [] eventSetDescriptors = new EventSetDescriptor[$intf.eventSets.size()];
-        int setIndex = 0;
         int eventIndex = 0;
+        MethodDescriptor [] eventDescriptors;
         EventSetDescriptor esd;
         Method addListener, removeListener;
         Class eventIntf;
-        MethodDescriptor md;
-        String [] paramNames;
-        ParameterDescriptor [] paramDescriptors;
-        MethodDescriptor [] eventDescriptors;
+
         #foreach ($eventSet in $intf.eventSets)
             eventIntf = ${eventSet.name}.class;
-            eventDescriptors = new MethodDescriptor[$eventSet.events.size()];
 
             //
             // Find the add/remove listener methods
@@ -191,28 +271,10 @@
             }
 
             //
-            // Build a method descriptor for each event method
+            // Build the MethodDescriptor array contain all event set events
             //
-            eventIndex = 0;
-            #foreach ($event in $eventSet.events)
-
-                //
-                // Declare MethodDescriptor for ${event.name}(${event.argList})
-                //
-                paramNames = _methodParamMap.get($event.methodField);
-                paramDescriptors = new ParameterDescriptor[paramNames.length];
-                for (int k = 0; k < paramNames.length; k++)
-                {
-                    paramDescriptors[k] = new ParameterDescriptor();
-                    paramDescriptors[k].setName(paramNames[k]);
-                    paramDescriptors[k].setDisplayName(paramNames[k]);
-                }
-                md = new MethodDescriptor($event.methodField, paramDescriptors);
-                #if ($event.featureInfo)
-                    #initFeatureDescriptor("md" $event.featureInfo $event.name)
-                #end
-                eventDescriptors[eventIndex++] = md;
-            #end
+            eventDescriptors = new MethodDescriptor[$eventSet.eventCount];
+            ${eventSet.infoInitializer}(eventDescriptors, 0);
 
             try
             {
@@ -226,10 +288,29 @@
             {
                 throw new ControlException("Unable to create EventDescriptor", ie);
             }
-            eventSetDescriptors[setIndex++] = esd;
+            eventSetDescriptors[index++] = esd;
+
+        #end
 
+        #if ($intf.superClass)
+        //
+        // Add event set descriptors from parent BeanInfo
+        //
+        super.initEventSetDescriptors(eventSetDescriptors, index); 
         #end
+    }
+
+    public EventSetDescriptor [] getEventSetDescriptors()
+    {
+        EventSetDescriptor [] eventSetDescriptors = new EventSetDescriptor[$intf.eventSetCount];
+        try
+        {
+            initEventSetDescriptors(eventSetDescriptors, 0);
+        }
+        catch (java.beans.IntrospectionException ie)
+        {
+            throw new ControlException("Unable to create EventSetDescriptor", ie);
+        }
         return eventSetDescriptors;
     }
-    #end
 }

Added: incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/AddIn.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/AddIn.java?view=auto&rev=111736
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/AddIn.java	Mon Dec 13 10:10:04 2004
@@ -0,0 +1,17 @@
+package org.apache.beehive.controls.test.controls.inherit;
+
+/**
+ * This is a regular interface that will be extended to add operation and events to a subclassed
+ * ControlInterface
+ */
+public interface AddIn
+{
+    public void addInOperation1();
+    public void addInOperation2();
+
+    public interface AddInEvents
+    {
+        public void addInEvent1();
+        public void addInEvent2();
+    }
+}

Added: incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/Ext1.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/Ext1.java?view=auto&rev=111736
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/Ext1.java	Mon Dec 13 10:10:04 2004
@@ -0,0 +1,41 @@
+package org.apache.beehive.controls.test.controls.inherit;
+
+import org.apache.beehive.controls.api.bean.ControlExtension;
+import org.apache.beehive.controls.api.events.EventSet;
+
+/**
+ * This is the third level interface for the inheritence test hiearachy.  It defines a 
+ * ControlExtension interface that extends the 2nd level ControlInterface
+ */
+@ControlExtension
+public interface Ext1 extends Intf2
+{
+    @Intf1Props(intf1Prop1=1)
+    public int [] ext1Operation1();
+
+    @Intf2Props(intf2Prop2=2)
+    public int [] ext1Operation2();
+
+    @EventSet
+    public interface Ext1Events extends Intf2Events
+    {
+        @Intf1Props(intf1Prop1=1)
+        public void ext1Event1();
+
+        @Intf2Props(intf2Prop2=2)
+        public void ext1Event2();
+    }
+
+    /**
+     * Declare an EventSet that is new and unique to this extension
+     */
+    @EventSet
+    public interface Ext1NewEvents
+    {
+        @Intf1Props(intf1Prop1=1)
+        public void ext1NewEvent1();
+
+        @Intf2Props(intf2Prop2=2)
+        public void ext2NewEvent2();
+    }
+}

Added: incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/Ext2.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/Ext2.java?view=auto&rev=111736
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/Ext2.java	Mon Dec 13 10:10:04 2004
@@ -0,0 +1,55 @@
+package org.apache.beehive.controls.test.controls.inherit;
+
+import org.apache.beehive.controls.api.bean.ControlExtension;
+import org.apache.beehive.controls.api.events.EventSet;
+
+/**
+ * This is the fourth level interface for the inheritence test hiearachy.  It defines a 
+ * ControlExtension interface that extends another ControlExtension 
+ */
+@ControlExtension
+public interface Ext2 extends Ext1
+{
+    @Intf1Props(intf1Prop1=1)
+    public void ext2Operation1();
+
+    @Intf2Props(intf2Prop2=2)
+    public void ext2Operation2();
+
+    @EventSet
+    public interface Ext2Events extends Ext1Events
+    {
+        @Intf1Props(intf1Prop1=1)
+        public void ext2Event1();
+
+        @Intf2Props(intf2Prop2=2)
+        public void ext2Event2();
+    }
+
+    /**
+     * Declare an EventSet that extends an EventSet on the original ControlInterface interface,
+     * but skips a level of inheritance
+     */
+    @EventSet
+    public interface Ext2SkipEvents extends Intf2Events
+    {
+        @Intf1Props(intf1Prop1=1)
+        public void extSkip2Event1();
+
+        @Intf1Props(intf1Prop1=1)
+        public void extSkip2Event2();
+    }
+
+    /**
+     * Declare an EventSet that is new and unique to this extension
+     */
+    @EventSet
+    public interface Ext2NewEvents
+    {
+        @Intf1Props(intf1Prop1=1)
+        public void ext2NewEvent1();
+
+        @Intf2Props(intf2Prop2=2)
+        public void ext2NewEvent2();
+    }
+}

Added: incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/Intf1.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/Intf1.java?view=auto&rev=111736
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/Intf1.java	Mon Dec 13 10:10:04 2004
@@ -0,0 +1,55 @@
+package org.apache.beehive.controls.test.controls.inherit;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.apache.beehive.controls.api.bean.ControlInterface;
+import org.apache.beehive.controls.api.events.EventSet;
+import org.apache.beehive.controls.api.properties.PropertySet;
+
+/**
+ * This is the first level interface for the inheritence test hiearachy.  It extends an interface
+ * that is not a ControlInterface, to ensure that it is possible to derive a Control from an
+ * existing interface.
+ * 
+ */
+@ControlInterface
+public interface Intf1 extends Root
+{
+    public int intf1Operation1();
+    public int intf1Operation2();
+
+    /**
+     *  Declare a PropertySet for this interface
+     */
+    @PropertySet
+    @Retention(RetentionPolicy.RUNTIME)
+    @Target( {ElementType.TYPE, ElementType.FIELD, ElementType.METHOD} )
+    public @interface Intf1Props
+    {
+        public int intf1Prop1() default 1;
+        public int intf1Prop2() default 2;
+    }
+
+    /**
+     * Declare an EventSet that extends one on the Root interface
+     */
+    @EventSet
+    public interface Intf1Events extends RootEvents
+    {
+        public void intf1Event1();
+        public void intf1Event2();
+    }
+      
+    /**
+     * Declare an EventSet that is new and unique to this interface
+     */
+    @EventSet
+    public interface Intf1NewEvents
+    {
+        public void intf1NewEvent1();
+        public void intf1NewEvent2();
+    }
+}

Added: incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/Intf1Impl.jcs
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/Intf1Impl.jcs?view=auto&rev=111736
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/Intf1Impl.jcs	Mon Dec 13 10:10:04 2004
@@ -0,0 +1,40 @@
+package org.apache.beehive.controls.test.controls.inherit;
+
+import org.apache.beehive.controls.api.bean.ControlImplementation;
+import org.apache.beehive.controls.api.context.Context;
+import org.apache.beehive.controls.api.context.ControlBeanContext;
+import org.apache.beehive.controls.api.events.Client;
+import org.apache.beehive.controls.api.events.EventSet;
+
+/**
+ * This is the first level interface for the inheritence test hiearachy.  It extends an interface
+ * that is not a ControlInterface, to ensure that it is possible to derive a Control from an
+ * existing interface.
+ * 
+ */
+@ControlImplementation
+public class Intf1Impl extends RootImpl
+             implements Intf1
+{
+    @Context ControlBeanContext context;
+    @Client Intf1Events intfEvents;
+    @Client Intf1NewEvents intfNewEvents;
+
+    public int intf1Operation1() 
+    {
+        intfEvents.rootEvent1();
+        intfEvents.intf1Event1();
+        intfNewEvents.intf1NewEvent1();
+
+        return context.getControlPropertySet(Intf1Props.class).intf1Prop1();
+    }
+
+    public int intf1Operation2() 
+    {
+        intfEvents.rootEvent2();
+        intfEvents.intf1Event2();
+        intfNewEvents.intf1NewEvent2();
+
+        return context.getControlPropertySet(Intf1Props.class).intf1Prop2();
+    } 
+}

Added: incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/Intf2.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/Intf2.java?view=auto&rev=111736
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/Intf2.java	Mon Dec 13 10:10:04 2004
@@ -0,0 +1,50 @@
+package org.apache.beehive.controls.test.controls.inherit;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.apache.beehive.controls.api.bean.ControlInterface;
+import org.apache.beehive.controls.api.events.EventSet;
+import org.apache.beehive.controls.api.properties.PropertySet;
+
+/**
+ * This is the second level interface for the inheritence test hiearachy.  It extends another
+ * ControlInterface and also adds new operations/events via an extended interface.
+ */
+@ControlInterface
+public interface Intf2 extends Intf1, AddIn
+{
+    public int intf2Operation1();
+    public int intf2Operation2();
+
+    /**
+     *  Declare a PropertySet for this interface
+     */
+    @PropertySet
+    @Retention(RetentionPolicy.RUNTIME)
+    @Target( {ElementType.TYPE, ElementType.FIELD, ElementType.METHOD} )
+    public @interface Intf2Props
+    {
+        public int intf2Prop1() default 1;
+        public int intf2Prop2() default 2;
+    }
+
+    @EventSet
+    public interface Intf2Events extends Intf1Events, AddInEvents
+    {
+        public void intf2Event1();
+        public void intf2Event2();
+    }
+
+    /**
+     * Declare an EventSet that is new and unique to this interface
+     */
+    @EventSet
+    public interface Intf2NewEvents extends AddInEvents
+    {
+        public void intf2NewEvent1();
+        public void intf2NewEvent2();
+    }
+}

Added: incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/Intf2Impl.jcs
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/Intf2Impl.jcs?view=auto&rev=111736
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/Intf2Impl.jcs	Mon Dec 13 10:10:04 2004
@@ -0,0 +1,67 @@
+package org.apache.beehive.controls.test.controls.inherit;
+
+import java.lang.reflect.Method;
+
+import org.apache.beehive.controls.api.bean.ControlImplementation;
+import org.apache.beehive.controls.api.bean.Extensible;
+import org.apache.beehive.controls.api.context.Context;
+import org.apache.beehive.controls.api.context.ControlBeanContext;
+import org.apache.beehive.controls.api.events.Client;
+import org.apache.beehive.controls.api.events.EventSet;
+
+/**
+ * This is the second level control implementation, that tests subclassing one ControlImplementation
+ * from another. This implementation also adds support for the Extensible interface, to enable
+ * ControlExtension subinterfaces to be declared.
+ */
+@ControlImplementation
+public class Intf2Impl extends Intf1Impl 
+             implements Intf2, Extensible
+{
+    @Context ControlBeanContext context;
+    @Client Intf2Events intfEvents;
+    @Client Intf2NewEvents intfNewEvents;
+
+    public int intf2Operation1() 
+    {
+        super.intf1Operation1();
+
+        intfEvents.addInEvent1();
+        intfEvents.intf1Event1();
+        intfEvents.intf2Event1();
+
+        intfNewEvents.addInEvent1();
+        intfNewEvents.intf2NewEvent1();
+
+        return context.getControlPropertySet(Intf2Props.class).intf2Prop1();
+    }
+    public int intf2Operation2() 
+    {
+        super.intf1Operation2();
+
+        intfEvents.intf1Event1();
+        intfEvents.addInEvent1();
+        intfEvents.intf2Event1();
+
+        intfNewEvents.addInEvent1();
+        intfNewEvents.intf2NewEvent1();
+
+        return context.getControlPropertySet(Intf2Props.class).intf2Prop2();
+    } 
+
+    public void addInOperation1() 
+    {
+        // Same as above
+        intf2Operation1();
+    }
+    public void addInOperation2() 
+    {
+        // Same as above
+        intf2Operation2();
+    }
+
+    public Object invoke(Method method, Object [] args) 
+    {   
+        return null; 
+    }
+}

Added: incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/Root.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/Root.java?view=auto&rev=111736
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/Root.java	Mon Dec 13 10:10:04 2004
@@ -0,0 +1,18 @@
+package org.apache.beehive.controls.test.controls.inherit;
+
+/**
+ * This is the root interface for the inheritance test control hierarchy.  It is <b>not</b> a
+ * ControlInterface, and exists to verify that it is possible to subclass a ControlInterface/
+ * ControlImpl from an existing interface/impl class pair.
+ */
+public interface Root
+{
+    public void rootOperation1();
+    public void rootOperation2();
+
+    public interface RootEvents
+    {
+        public void rootEvent1();
+        public void rootEvent2();
+    }
+}

Added: incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/RootImpl.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/RootImpl.java?view=auto&rev=111736
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/inherit/RootImpl.java	Mon Dec 13 10:10:04 2004
@@ -0,0 +1,12 @@
+package org.apache.beehive.controls.test.controls.inherit;
+
+/**
+ * This is the root implementation for the inheritance test control hierarchy.  It is <b>not</b> a
+ * ControlImplementation, and exists to verify that it is possible to subclass a ControlInterface/
+ * ControlImpl from an existing interface/impl class pair.
+ */
+public class RootImpl implements Root
+{
+    public void rootOperation1() {}
+    public void rootOperation2() {}
+}

Added: incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/BeanInfo.bat
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/BeanInfo.bat?view=auto&rev=111736
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/BeanInfo.bat	Mon Dec 13 10:10:04 2004
@@ -0,0 +1,6 @@
+@echo off
+REM
+REM Usage: BeanInfo.bat <class>
+REM
+set CTRLROOT=%BEEHIVE_HOME%\controls
+java -classpath %CTRLROOT%\test\build\classes\beans;%CTRLROOT%\build\jars\controls.jar org.apache.beehive.controls.test.controls.util.ControlIntrospector org.apache.beehive.controls.test.controls.inherit.%1Bean

Added: incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/BeanInfo.sh
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/BeanInfo.sh?view=auto&rev=111736
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/BeanInfo.sh	Mon Dec 13 10:10:04 2004
@@ -0,0 +1,3 @@
+#!/bin/sh
+export CTRLROOT=$BEEHIVE_HOME/controls
+java -classpath $CTRLROOL/test/build/classes/beans:$CTRLROOT/build/jars/controls.jar org.apache.beehive.controls.test.controls.util.ControlIntrospector org.apache.beehive.controls.test.controls.inherit.$1Bean

Added: incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Ext1Bean.beaninfo
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Ext1Bean.beaninfo?view=auto&rev=111736
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Ext1Bean.beaninfo	Mon Dec 13 10:10:04 2004
@@ -0,0 +1,851 @@
+<bean-info name="org.apache.beehive.controls.test.controls.inherit.Ext1Bean">
+    <bean-descriptor name="Ext1Bean">
+        <feature-descriptor name="Ext1Bean"
+            full-name="Ext1Bean"
+            is-expert=false
+            is-hidden=false
+            is-preferred=false>
+            <short-description>
+                Ext1Bean
+            </short-description>
+        </feature-descriptor>
+        <bean-class>
+            org.apache.beehive.controls.test.controls.inherit.Ext1Bean
+        </bean-class>
+    </bean-descriptor>
+    <method-descriptors>
+        <method-descriptor name="addInOperation1"
+            <method>
+                public abstract void org.apache.beehive.controls.test.controls.inherit.AddIn.addInOperation1()
+            </method>
+            <param-descriptors/>
+            <feature-descriptor name="addInOperation1"
+                full-name="addInOperation1"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    addInOperation1
+                </short-description>
+            </feature-descriptor>
+        </method-descriptor>
+        <method-descriptor name="addInOperation2"
+            <method>
+                public abstract void org.apache.beehive.controls.test.controls.inherit.AddIn.addInOperation2()
+            </method>
+            <param-descriptors/>
+            <feature-descriptor name="addInOperation2"
+                full-name="addInOperation2"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    addInOperation2
+                </short-description>
+            </feature-descriptor>
+        </method-descriptor>
+        <method-descriptor name="ext1Operation1"
+            <method>
+                public abstract int[] org.apache.beehive.controls.test.controls.inherit.Ext1.ext1Operation1()
+            </method>
+            <param-descriptors/>
+            <feature-descriptor name="ext1Operation1"
+                full-name="ext1Operation1"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    ext1Operation1
+                </short-description>
+            </feature-descriptor>
+        </method-descriptor>
+        <method-descriptor name="ext1Operation2"
+            <method>
+                public abstract int[] org.apache.beehive.controls.test.controls.inherit.Ext1.ext1Operation2()
+            </method>
+            <param-descriptors/>
+            <feature-descriptor name="ext1Operation2"
+                full-name="ext1Operation2"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    ext1Operation2
+                </short-description>
+            </feature-descriptor>
+        </method-descriptor>
+        <method-descriptor name="intf1Operation1"
+            <method>
+                public abstract int org.apache.beehive.controls.test.controls.inherit.Intf1.intf1Operation1()
+            </method>
+            <param-descriptors/>
+            <feature-descriptor name="intf1Operation1"
+                full-name="intf1Operation1"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf1Operation1
+                </short-description>
+            </feature-descriptor>
+        </method-descriptor>
+        <method-descriptor name="intf1Operation2"
+            <method>
+                public abstract int org.apache.beehive.controls.test.controls.inherit.Intf1.intf1Operation2()
+            </method>
+            <param-descriptors/>
+            <feature-descriptor name="intf1Operation2"
+                full-name="intf1Operation2"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf1Operation2
+                </short-description>
+            </feature-descriptor>
+        </method-descriptor>
+        <method-descriptor name="intf2Operation1"
+            <method>
+                public abstract int org.apache.beehive.controls.test.controls.inherit.Intf2.intf2Operation1()
+            </method>
+            <param-descriptors/>
+            <feature-descriptor name="intf2Operation1"
+                full-name="intf2Operation1"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf2Operation1
+                </short-description>
+            </feature-descriptor>
+        </method-descriptor>
+        <method-descriptor name="intf2Operation2"
+            <method>
+                public abstract int org.apache.beehive.controls.test.controls.inherit.Intf2.intf2Operation2()
+            </method>
+            <param-descriptors/>
+            <feature-descriptor name="intf2Operation2"
+                full-name="intf2Operation2"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf2Operation2
+                </short-description>
+            </feature-descriptor>
+        </method-descriptor>
+        <method-descriptor name="rootOperation1"
+            <method>
+                public abstract void org.apache.beehive.controls.test.controls.inherit.Root.rootOperation1()
+            </method>
+            <param-descriptors/>
+            <feature-descriptor name="rootOperation1"
+                full-name="rootOperation1"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    rootOperation1
+                </short-description>
+            </feature-descriptor>
+        </method-descriptor>
+        <method-descriptor name="rootOperation2"
+            <method>
+                public abstract void org.apache.beehive.controls.test.controls.inherit.Root.rootOperation2()
+            </method>
+            <param-descriptors/>
+            <feature-descriptor name="rootOperation2"
+                full-name="rootOperation2"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    rootOperation2
+                </short-description>
+            </feature-descriptor>
+        </method-descriptor>
+    </method-descriptors>
+    <property-descriptors default-index=-1>
+        <property-descriptor name="intf1Prop1">
+            type="int"
+            isBound=false
+            isConstrained=false
+            isDefault=false>
+            <read-method>
+                public int org.apache.beehive.controls.test.controls.inherit.Intf1Bean.getIntf1Prop1()
+            </read-method>
+            <write-method>
+                public void org.apache.beehive.controls.test.controls.inherit.Intf1Bean.setIntf1Prop1(int)
+            </write-method>
+            <feature-descriptor name="intf1Prop1"
+                full-name="intf1Prop1"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf1Prop1
+                </short-description>
+            </feature-descriptor>
+        </property-descriptor>
+        <property-descriptor name="intf1Prop2">
+            type="int"
+            isBound=false
+            isConstrained=false
+            isDefault=false>
+            <read-method>
+                public int org.apache.beehive.controls.test.controls.inherit.Intf1Bean.getIntf1Prop2()
+            </read-method>
+            <write-method>
+                public void org.apache.beehive.controls.test.controls.inherit.Intf1Bean.setIntf1Prop2(int)
+            </write-method>
+            <feature-descriptor name="intf1Prop2"
+                full-name="intf1Prop2"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf1Prop2
+                </short-description>
+            </feature-descriptor>
+        </property-descriptor>
+        <property-descriptor name="intf2Prop1">
+            type="int"
+            isBound=false
+            isConstrained=false
+            isDefault=false>
+            <read-method>
+                public int org.apache.beehive.controls.test.controls.inherit.Intf2Bean.getIntf2Prop1()
+            </read-method>
+            <write-method>
+                public void org.apache.beehive.controls.test.controls.inherit.Intf2Bean.setIntf2Prop1(int)
+            </write-method>
+            <feature-descriptor name="intf2Prop1"
+                full-name="intf2Prop1"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf2Prop1
+                </short-description>
+            </feature-descriptor>
+        </property-descriptor>
+        <property-descriptor name="intf2Prop2">
+            type="int"
+            isBound=false
+            isConstrained=false
+            isDefault=false>
+            <read-method>
+                public int org.apache.beehive.controls.test.controls.inherit.Intf2Bean.getIntf2Prop2()
+            </read-method>
+            <write-method>
+                public void org.apache.beehive.controls.test.controls.inherit.Intf2Bean.setIntf2Prop2(int)
+            </write-method>
+            <feature-descriptor name="intf2Prop2"
+                full-name="intf2Prop2"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf2Prop2
+                </short-description>
+            </feature-descriptor>
+        </property-descriptor>
+    </property-descriptors>
+    <event-set-descriptors default-index=-1>
+        <event-descriptor name="intf2NewEvents"
+            is-unicast=false
+            is-in-default=true
+            is-default=false>
+            <listener-type>
+                org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2NewEvents
+            </listener-type>
+            <add-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf2Bean.addIntf2NewEventsListener(org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2NewEvents) throws java.util.TooManyListenersException
+            </add-listener-method>
+            <remove-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf2Bean.removeIntf2NewEventsListener(org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2NewEvents)
+            </remove-listener-method>
+            <listener-method-descriptors>
+                <method-descriptor name="addInEvent1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.AddIn$AddInEvents.addInEvent1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="addInEvent1"
+                        full-name="addInEvent1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            addInEvent1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="addInEvent2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.AddIn$AddInEvents.addInEvent2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="addInEvent2"
+                        full-name="addInEvent2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            addInEvent2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf2NewEvent1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2NewEvents.intf2NewEvent1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf2NewEvent1"
+                        full-name="intf2NewEvent1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf2NewEvent1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf2NewEvent2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2NewEvents.intf2NewEvent2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf2NewEvent2"
+                        full-name="intf2NewEvent2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf2NewEvent2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+            </listener-method-descriptors>
+            <feature-descriptor name="intf2NewEvents"
+                full-name="intf2NewEvents"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf2NewEvents
+                </short-description>
+            </feature-descriptor>
+        <event-descriptor name="ext1NewEvents"
+            is-unicast=false
+            is-in-default=true
+            is-default=false>
+            <listener-type>
+                org.apache.beehive.controls.test.controls.inherit.Ext1$Ext1NewEvents
+            </listener-type>
+            <add-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Ext1Bean.addExt1NewEventsListener(org.apache.beehive.controls.test.controls.inherit.Ext1$Ext1NewEvents) throws java.util.TooManyListenersException
+            </add-listener-method>
+            <remove-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Ext1Bean.removeExt1NewEventsListener(org.apache.beehive.controls.test.controls.inherit.Ext1$Ext1NewEvents)
+            </remove-listener-method>
+            <listener-method-descriptors>
+                <method-descriptor name="ext1NewEvent1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Ext1$Ext1NewEvents.ext1NewEvent1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="ext1NewEvent1"
+                        full-name="ext1NewEvent1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            ext1NewEvent1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="ext2NewEvent2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Ext1$Ext1NewEvents.ext2NewEvent2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="ext2NewEvent2"
+                        full-name="ext2NewEvent2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            ext2NewEvent2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+            </listener-method-descriptors>
+            <feature-descriptor name="ext1NewEvents"
+                full-name="ext1NewEvents"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    ext1NewEvents
+                </short-description>
+            </feature-descriptor>
+        <event-descriptor name="intf1Events"
+            is-unicast=false
+            is-in-default=true
+            is-default=false>
+            <listener-type>
+                org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events
+            </listener-type>
+            <add-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf1Bean.addIntf1EventsListener(org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events) throws java.util.TooManyListenersException
+            </add-listener-method>
+            <remove-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf1Bean.removeIntf1EventsListener(org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events)
+            </remove-listener-method>
+            <listener-method-descriptors>
+                <method-descriptor name="intf1Event1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events.intf1Event1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf1Event1"
+                        full-name="intf1Event1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf1Event1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf1Event2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events.intf1Event2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf1Event2"
+                        full-name="intf1Event2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf1Event2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="rootEvent1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Root$RootEvents.rootEvent1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="rootEvent1"
+                        full-name="rootEvent1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            rootEvent1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="rootEvent2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Root$RootEvents.rootEvent2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="rootEvent2"
+                        full-name="rootEvent2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            rootEvent2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+            </listener-method-descriptors>
+            <feature-descriptor name="intf1Events"
+                full-name="intf1Events"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf1Events
+                </short-description>
+            </feature-descriptor>
+        <event-descriptor name="ext1Events"
+            is-unicast=false
+            is-in-default=true
+            is-default=false>
+            <listener-type>
+                org.apache.beehive.controls.test.controls.inherit.Ext1$Ext1Events
+            </listener-type>
+            <add-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Ext1Bean.addExt1EventsListener(org.apache.beehive.controls.test.controls.inherit.Ext1$Ext1Events) throws java.util.TooManyListenersException
+            </add-listener-method>
+            <remove-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Ext1Bean.removeExt1EventsListener(org.apache.beehive.controls.test.controls.inherit.Ext1$Ext1Events)
+            </remove-listener-method>
+            <listener-method-descriptors>
+                <method-descriptor name="addInEvent1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.AddIn$AddInEvents.addInEvent1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="addInEvent1"
+                        full-name="addInEvent1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            addInEvent1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="addInEvent2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.AddIn$AddInEvents.addInEvent2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="addInEvent2"
+                        full-name="addInEvent2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            addInEvent2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="ext1Event1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Ext1$Ext1Events.ext1Event1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="ext1Event1"
+                        full-name="ext1Event1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            ext1Event1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="ext1Event2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Ext1$Ext1Events.ext1Event2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="ext1Event2"
+                        full-name="ext1Event2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            ext1Event2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf1Event1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events.intf1Event1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf1Event1"
+                        full-name="intf1Event1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf1Event1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf1Event2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events.intf1Event2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf1Event2"
+                        full-name="intf1Event2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf1Event2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf2Event1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2Events.intf2Event1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf2Event1"
+                        full-name="intf2Event1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf2Event1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf2Event2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2Events.intf2Event2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf2Event2"
+                        full-name="intf2Event2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf2Event2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="rootEvent1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Root$RootEvents.rootEvent1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="rootEvent1"
+                        full-name="rootEvent1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            rootEvent1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="rootEvent2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Root$RootEvents.rootEvent2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="rootEvent2"
+                        full-name="rootEvent2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            rootEvent2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+            </listener-method-descriptors>
+            <feature-descriptor name="ext1Events"
+                full-name="ext1Events"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    ext1Events
+                </short-description>
+            </feature-descriptor>
+        <event-descriptor name="intf1NewEvents"
+            is-unicast=false
+            is-in-default=true
+            is-default=false>
+            <listener-type>
+                org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1NewEvents
+            </listener-type>
+            <add-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf1Bean.addIntf1NewEventsListener(org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1NewEvents) throws java.util.TooManyListenersException
+            </add-listener-method>
+            <remove-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf1Bean.removeIntf1NewEventsListener(org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1NewEvents)
+            </remove-listener-method>
+            <listener-method-descriptors>
+                <method-descriptor name="intf1NewEvent1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1NewEvents.intf1NewEvent1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf1NewEvent1"
+                        full-name="intf1NewEvent1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf1NewEvent1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf1NewEvent2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1NewEvents.intf1NewEvent2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf1NewEvent2"
+                        full-name="intf1NewEvent2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf1NewEvent2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+            </listener-method-descriptors>
+            <feature-descriptor name="intf1NewEvents"
+                full-name="intf1NewEvents"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf1NewEvents
+                </short-description>
+            </feature-descriptor>
+        <event-descriptor name="intf2Events"
+            is-unicast=false
+            is-in-default=true
+            is-default=false>
+            <listener-type>
+                org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2Events
+            </listener-type>
+            <add-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf2Bean.addIntf2EventsListener(org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2Events) throws java.util.TooManyListenersException
+            </add-listener-method>
+            <remove-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf2Bean.removeIntf2EventsListener(org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2Events)
+            </remove-listener-method>
+            <listener-method-descriptors>
+                <method-descriptor name="addInEvent1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.AddIn$AddInEvents.addInEvent1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="addInEvent1"
+                        full-name="addInEvent1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            addInEvent1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="addInEvent2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.AddIn$AddInEvents.addInEvent2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="addInEvent2"
+                        full-name="addInEvent2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            addInEvent2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf1Event1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events.intf1Event1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf1Event1"
+                        full-name="intf1Event1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf1Event1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf1Event2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events.intf1Event2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf1Event2"
+                        full-name="intf1Event2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf1Event2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf2Event1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2Events.intf2Event1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf2Event1"
+                        full-name="intf2Event1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf2Event1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf2Event2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2Events.intf2Event2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf2Event2"
+                        full-name="intf2Event2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf2Event2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="rootEvent1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Root$RootEvents.rootEvent1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="rootEvent1"
+                        full-name="rootEvent1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            rootEvent1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="rootEvent2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Root$RootEvents.rootEvent2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="rootEvent2"
+                        full-name="rootEvent2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            rootEvent2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+            </listener-method-descriptors>
+            <feature-descriptor name="intf2Events"
+                full-name="intf2Events"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf2Events
+                </short-description>
+            </feature-descriptor>
+    </event-set-descriptors>
+    <additional-bean-info/>
+</bean-info>
\ No newline at end of file

Added: incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Ext2Bean.beaninfo
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Ext2Bean.beaninfo?view=auto&rev=111736
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Ext2Bean.beaninfo	Mon Dec 13 10:10:04 2004
@@ -0,0 +1,1313 @@
+<bean-info name="org.apache.beehive.controls.test.controls.inherit.Ext2Bean">
+    <bean-descriptor name="Ext2Bean">
+        <feature-descriptor name="Ext2Bean"
+            full-name="Ext2Bean"
+            is-expert=false
+            is-hidden=false
+            is-preferred=false>
+            <short-description>
+                Ext2Bean
+            </short-description>
+        </feature-descriptor>
+        <bean-class>
+            org.apache.beehive.controls.test.controls.inherit.Ext2Bean
+        </bean-class>
+    </bean-descriptor>
+    <method-descriptors>
+        <method-descriptor name="addInOperation1"
+            <method>
+                public abstract void org.apache.beehive.controls.test.controls.inherit.AddIn.addInOperation1()
+            </method>
+            <param-descriptors/>
+            <feature-descriptor name="addInOperation1"
+                full-name="addInOperation1"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    addInOperation1
+                </short-description>
+            </feature-descriptor>
+        </method-descriptor>
+        <method-descriptor name="addInOperation2"
+            <method>
+                public abstract void org.apache.beehive.controls.test.controls.inherit.AddIn.addInOperation2()
+            </method>
+            <param-descriptors/>
+            <feature-descriptor name="addInOperation2"
+                full-name="addInOperation2"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    addInOperation2
+                </short-description>
+            </feature-descriptor>
+        </method-descriptor>
+        <method-descriptor name="ext1Operation1"
+            <method>
+                public abstract int[] org.apache.beehive.controls.test.controls.inherit.Ext1.ext1Operation1()
+            </method>
+            <param-descriptors/>
+            <feature-descriptor name="ext1Operation1"
+                full-name="ext1Operation1"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    ext1Operation1
+                </short-description>
+            </feature-descriptor>
+        </method-descriptor>
+        <method-descriptor name="ext1Operation2"
+            <method>
+                public abstract int[] org.apache.beehive.controls.test.controls.inherit.Ext1.ext1Operation2()
+            </method>
+            <param-descriptors/>
+            <feature-descriptor name="ext1Operation2"
+                full-name="ext1Operation2"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    ext1Operation2
+                </short-description>
+            </feature-descriptor>
+        </method-descriptor>
+        <method-descriptor name="ext2Operation1"
+            <method>
+                public abstract void org.apache.beehive.controls.test.controls.inherit.Ext2.ext2Operation1()
+            </method>
+            <param-descriptors/>
+            <feature-descriptor name="ext2Operation1"
+                full-name="ext2Operation1"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    ext2Operation1
+                </short-description>
+            </feature-descriptor>
+        </method-descriptor>
+        <method-descriptor name="ext2Operation2"
+            <method>
+                public abstract void org.apache.beehive.controls.test.controls.inherit.Ext2.ext2Operation2()
+            </method>
+            <param-descriptors/>
+            <feature-descriptor name="ext2Operation2"
+                full-name="ext2Operation2"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    ext2Operation2
+                </short-description>
+            </feature-descriptor>
+        </method-descriptor>
+        <method-descriptor name="intf1Operation1"
+            <method>
+                public abstract int org.apache.beehive.controls.test.controls.inherit.Intf1.intf1Operation1()
+            </method>
+            <param-descriptors/>
+            <feature-descriptor name="intf1Operation1"
+                full-name="intf1Operation1"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf1Operation1
+                </short-description>
+            </feature-descriptor>
+        </method-descriptor>
+        <method-descriptor name="intf1Operation2"
+            <method>
+                public abstract int org.apache.beehive.controls.test.controls.inherit.Intf1.intf1Operation2()
+            </method>
+            <param-descriptors/>
+            <feature-descriptor name="intf1Operation2"
+                full-name="intf1Operation2"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf1Operation2
+                </short-description>
+            </feature-descriptor>
+        </method-descriptor>
+        <method-descriptor name="intf2Operation1"
+            <method>
+                public abstract int org.apache.beehive.controls.test.controls.inherit.Intf2.intf2Operation1()
+            </method>
+            <param-descriptors/>
+            <feature-descriptor name="intf2Operation1"
+                full-name="intf2Operation1"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf2Operation1
+                </short-description>
+            </feature-descriptor>
+        </method-descriptor>
+        <method-descriptor name="intf2Operation2"
+            <method>
+                public abstract int org.apache.beehive.controls.test.controls.inherit.Intf2.intf2Operation2()
+            </method>
+            <param-descriptors/>
+            <feature-descriptor name="intf2Operation2"
+                full-name="intf2Operation2"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf2Operation2
+                </short-description>
+            </feature-descriptor>
+        </method-descriptor>
+        <method-descriptor name="rootOperation1"
+            <method>
+                public abstract void org.apache.beehive.controls.test.controls.inherit.Root.rootOperation1()
+            </method>
+            <param-descriptors/>
+            <feature-descriptor name="rootOperation1"
+                full-name="rootOperation1"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    rootOperation1
+                </short-description>
+            </feature-descriptor>
+        </method-descriptor>
+        <method-descriptor name="rootOperation2"
+            <method>
+                public abstract void org.apache.beehive.controls.test.controls.inherit.Root.rootOperation2()
+            </method>
+            <param-descriptors/>
+            <feature-descriptor name="rootOperation2"
+                full-name="rootOperation2"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    rootOperation2
+                </short-description>
+            </feature-descriptor>
+        </method-descriptor>
+    </method-descriptors>
+    <property-descriptors default-index=-1>
+        <property-descriptor name="intf1Prop1">
+            type="int"
+            isBound=false
+            isConstrained=false
+            isDefault=false>
+            <read-method>
+                public int org.apache.beehive.controls.test.controls.inherit.Intf1Bean.getIntf1Prop1()
+            </read-method>
+            <write-method>
+                public void org.apache.beehive.controls.test.controls.inherit.Intf1Bean.setIntf1Prop1(int)
+            </write-method>
+            <feature-descriptor name="intf1Prop1"
+                full-name="intf1Prop1"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf1Prop1
+                </short-description>
+            </feature-descriptor>
+        </property-descriptor>
+        <property-descriptor name="intf1Prop2">
+            type="int"
+            isBound=false
+            isConstrained=false
+            isDefault=false>
+            <read-method>
+                public int org.apache.beehive.controls.test.controls.inherit.Intf1Bean.getIntf1Prop2()
+            </read-method>
+            <write-method>
+                public void org.apache.beehive.controls.test.controls.inherit.Intf1Bean.setIntf1Prop2(int)
+            </write-method>
+            <feature-descriptor name="intf1Prop2"
+                full-name="intf1Prop2"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf1Prop2
+                </short-description>
+            </feature-descriptor>
+        </property-descriptor>
+        <property-descriptor name="intf2Prop1">
+            type="int"
+            isBound=false
+            isConstrained=false
+            isDefault=false>
+            <read-method>
+                public int org.apache.beehive.controls.test.controls.inherit.Intf2Bean.getIntf2Prop1()
+            </read-method>
+            <write-method>
+                public void org.apache.beehive.controls.test.controls.inherit.Intf2Bean.setIntf2Prop1(int)
+            </write-method>
+            <feature-descriptor name="intf2Prop1"
+                full-name="intf2Prop1"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf2Prop1
+                </short-description>
+            </feature-descriptor>
+        </property-descriptor>
+        <property-descriptor name="intf2Prop2">
+            type="int"
+            isBound=false
+            isConstrained=false
+            isDefault=false>
+            <read-method>
+                public int org.apache.beehive.controls.test.controls.inherit.Intf2Bean.getIntf2Prop2()
+            </read-method>
+            <write-method>
+                public void org.apache.beehive.controls.test.controls.inherit.Intf2Bean.setIntf2Prop2(int)
+            </write-method>
+            <feature-descriptor name="intf2Prop2"
+                full-name="intf2Prop2"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf2Prop2
+                </short-description>
+            </feature-descriptor>
+        </property-descriptor>
+    </property-descriptors>
+    <event-set-descriptors default-index=-1>
+        <event-descriptor name="ext2SkipEvents"
+            is-unicast=false
+            is-in-default=true
+            is-default=false>
+            <listener-type>
+                org.apache.beehive.controls.test.controls.inherit.Ext2$Ext2SkipEvents
+            </listener-type>
+            <add-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Ext2Bean.addExt2SkipEventsListener(org.apache.beehive.controls.test.controls.inherit.Ext2$Ext2SkipEvents) throws java.util.TooManyListenersException
+            </add-listener-method>
+            <remove-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Ext2Bean.removeExt2SkipEventsListener(org.apache.beehive.controls.test.controls.inherit.Ext2$Ext2SkipEvents)
+            </remove-listener-method>
+            <listener-method-descriptors>
+                <method-descriptor name="addInEvent1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.AddIn$AddInEvents.addInEvent1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="addInEvent1"
+                        full-name="addInEvent1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            addInEvent1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="addInEvent2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.AddIn$AddInEvents.addInEvent2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="addInEvent2"
+                        full-name="addInEvent2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            addInEvent2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="extSkip2Event1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Ext2$Ext2SkipEvents.extSkip2Event1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="extSkip2Event1"
+                        full-name="extSkip2Event1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            extSkip2Event1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="extSkip2Event2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Ext2$Ext2SkipEvents.extSkip2Event2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="extSkip2Event2"
+                        full-name="extSkip2Event2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            extSkip2Event2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf1Event1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events.intf1Event1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf1Event1"
+                        full-name="intf1Event1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf1Event1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf1Event2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events.intf1Event2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf1Event2"
+                        full-name="intf1Event2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf1Event2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf2Event1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2Events.intf2Event1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf2Event1"
+                        full-name="intf2Event1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf2Event1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf2Event2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2Events.intf2Event2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf2Event2"
+                        full-name="intf2Event2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf2Event2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="rootEvent1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Root$RootEvents.rootEvent1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="rootEvent1"
+                        full-name="rootEvent1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            rootEvent1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="rootEvent2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Root$RootEvents.rootEvent2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="rootEvent2"
+                        full-name="rootEvent2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            rootEvent2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+            </listener-method-descriptors>
+            <feature-descriptor name="ext2SkipEvents"
+                full-name="ext2SkipEvents"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    ext2SkipEvents
+                </short-description>
+            </feature-descriptor>
+        <event-descriptor name="ext2NewEvents"
+            is-unicast=false
+            is-in-default=true
+            is-default=false>
+            <listener-type>
+                org.apache.beehive.controls.test.controls.inherit.Ext2$Ext2NewEvents
+            </listener-type>
+            <add-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Ext2Bean.addExt2NewEventsListener(org.apache.beehive.controls.test.controls.inherit.Ext2$Ext2NewEvents) throws java.util.TooManyListenersException
+            </add-listener-method>
+            <remove-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Ext2Bean.removeExt2NewEventsListener(org.apache.beehive.controls.test.controls.inherit.Ext2$Ext2NewEvents)
+            </remove-listener-method>
+            <listener-method-descriptors>
+                <method-descriptor name="ext2NewEvent1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Ext2$Ext2NewEvents.ext2NewEvent1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="ext2NewEvent1"
+                        full-name="ext2NewEvent1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            ext2NewEvent1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="ext2NewEvent2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Ext2$Ext2NewEvents.ext2NewEvent2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="ext2NewEvent2"
+                        full-name="ext2NewEvent2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            ext2NewEvent2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+            </listener-method-descriptors>
+            <feature-descriptor name="ext2NewEvents"
+                full-name="ext2NewEvents"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    ext2NewEvents
+                </short-description>
+            </feature-descriptor>
+        <event-descriptor name="intf2NewEvents"
+            is-unicast=false
+            is-in-default=true
+            is-default=false>
+            <listener-type>
+                org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2NewEvents
+            </listener-type>
+            <add-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf2Bean.addIntf2NewEventsListener(org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2NewEvents) throws java.util.TooManyListenersException
+            </add-listener-method>
+            <remove-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf2Bean.removeIntf2NewEventsListener(org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2NewEvents)
+            </remove-listener-method>
+            <listener-method-descriptors>
+                <method-descriptor name="addInEvent1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.AddIn$AddInEvents.addInEvent1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="addInEvent1"
+                        full-name="addInEvent1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            addInEvent1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="addInEvent2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.AddIn$AddInEvents.addInEvent2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="addInEvent2"
+                        full-name="addInEvent2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            addInEvent2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf2NewEvent1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2NewEvents.intf2NewEvent1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf2NewEvent1"
+                        full-name="intf2NewEvent1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf2NewEvent1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf2NewEvent2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2NewEvents.intf2NewEvent2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf2NewEvent2"
+                        full-name="intf2NewEvent2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf2NewEvent2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+            </listener-method-descriptors>
+            <feature-descriptor name="intf2NewEvents"
+                full-name="intf2NewEvents"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf2NewEvents
+                </short-description>
+            </feature-descriptor>
+        <event-descriptor name="ext1NewEvents"
+            is-unicast=false
+            is-in-default=true
+            is-default=false>
+            <listener-type>
+                org.apache.beehive.controls.test.controls.inherit.Ext1$Ext1NewEvents
+            </listener-type>
+            <add-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Ext1Bean.addExt1NewEventsListener(org.apache.beehive.controls.test.controls.inherit.Ext1$Ext1NewEvents) throws java.util.TooManyListenersException
+            </add-listener-method>
+            <remove-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Ext1Bean.removeExt1NewEventsListener(org.apache.beehive.controls.test.controls.inherit.Ext1$Ext1NewEvents)
+            </remove-listener-method>
+            <listener-method-descriptors>
+                <method-descriptor name="ext1NewEvent1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Ext1$Ext1NewEvents.ext1NewEvent1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="ext1NewEvent1"
+                        full-name="ext1NewEvent1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            ext1NewEvent1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="ext2NewEvent2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Ext1$Ext1NewEvents.ext2NewEvent2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="ext2NewEvent2"
+                        full-name="ext2NewEvent2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            ext2NewEvent2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+            </listener-method-descriptors>
+            <feature-descriptor name="ext1NewEvents"
+                full-name="ext1NewEvents"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    ext1NewEvents
+                </short-description>
+            </feature-descriptor>
+        <event-descriptor name="intf1Events"
+            is-unicast=false
+            is-in-default=true
+            is-default=false>
+            <listener-type>
+                org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events
+            </listener-type>
+            <add-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf1Bean.addIntf1EventsListener(org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events) throws java.util.TooManyListenersException
+            </add-listener-method>
+            <remove-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf1Bean.removeIntf1EventsListener(org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events)
+            </remove-listener-method>
+            <listener-method-descriptors>
+                <method-descriptor name="intf1Event1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events.intf1Event1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf1Event1"
+                        full-name="intf1Event1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf1Event1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf1Event2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events.intf1Event2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf1Event2"
+                        full-name="intf1Event2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf1Event2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="rootEvent1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Root$RootEvents.rootEvent1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="rootEvent1"
+                        full-name="rootEvent1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            rootEvent1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="rootEvent2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Root$RootEvents.rootEvent2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="rootEvent2"
+                        full-name="rootEvent2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            rootEvent2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+            </listener-method-descriptors>
+            <feature-descriptor name="intf1Events"
+                full-name="intf1Events"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf1Events
+                </short-description>
+            </feature-descriptor>
+        <event-descriptor name="ext1Events"
+            is-unicast=false
+            is-in-default=true
+            is-default=false>
+            <listener-type>
+                org.apache.beehive.controls.test.controls.inherit.Ext1$Ext1Events
+            </listener-type>
+            <add-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Ext1Bean.addExt1EventsListener(org.apache.beehive.controls.test.controls.inherit.Ext1$Ext1Events) throws java.util.TooManyListenersException
+            </add-listener-method>
+            <remove-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Ext1Bean.removeExt1EventsListener(org.apache.beehive.controls.test.controls.inherit.Ext1$Ext1Events)
+            </remove-listener-method>
+            <listener-method-descriptors>
+                <method-descriptor name="addInEvent1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.AddIn$AddInEvents.addInEvent1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="addInEvent1"
+                        full-name="addInEvent1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            addInEvent1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="addInEvent2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.AddIn$AddInEvents.addInEvent2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="addInEvent2"
+                        full-name="addInEvent2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            addInEvent2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="ext1Event1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Ext1$Ext1Events.ext1Event1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="ext1Event1"
+                        full-name="ext1Event1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            ext1Event1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="ext1Event2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Ext1$Ext1Events.ext1Event2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="ext1Event2"
+                        full-name="ext1Event2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            ext1Event2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf1Event1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events.intf1Event1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf1Event1"
+                        full-name="intf1Event1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf1Event1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf1Event2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events.intf1Event2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf1Event2"
+                        full-name="intf1Event2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf1Event2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf2Event1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2Events.intf2Event1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf2Event1"
+                        full-name="intf2Event1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf2Event1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf2Event2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2Events.intf2Event2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf2Event2"
+                        full-name="intf2Event2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf2Event2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="rootEvent1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Root$RootEvents.rootEvent1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="rootEvent1"
+                        full-name="rootEvent1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            rootEvent1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="rootEvent2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Root$RootEvents.rootEvent2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="rootEvent2"
+                        full-name="rootEvent2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            rootEvent2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+            </listener-method-descriptors>
+            <feature-descriptor name="ext1Events"
+                full-name="ext1Events"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    ext1Events
+                </short-description>
+            </feature-descriptor>
+        <event-descriptor name="intf1NewEvents"
+            is-unicast=false
+            is-in-default=true
+            is-default=false>
+            <listener-type>
+                org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1NewEvents
+            </listener-type>
+            <add-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf1Bean.addIntf1NewEventsListener(org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1NewEvents) throws java.util.TooManyListenersException
+            </add-listener-method>
+            <remove-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf1Bean.removeIntf1NewEventsListener(org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1NewEvents)
+            </remove-listener-method>
+            <listener-method-descriptors>
+                <method-descriptor name="intf1NewEvent1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1NewEvents.intf1NewEvent1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf1NewEvent1"
+                        full-name="intf1NewEvent1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf1NewEvent1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf1NewEvent2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1NewEvents.intf1NewEvent2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf1NewEvent2"
+                        full-name="intf1NewEvent2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf1NewEvent2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+            </listener-method-descriptors>
+            <feature-descriptor name="intf1NewEvents"
+                full-name="intf1NewEvents"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf1NewEvents
+                </short-description>
+            </feature-descriptor>
+        <event-descriptor name="intf2Events"
+            is-unicast=false
+            is-in-default=true
+            is-default=false>
+            <listener-type>
+                org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2Events
+            </listener-type>
+            <add-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf2Bean.addIntf2EventsListener(org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2Events) throws java.util.TooManyListenersException
+            </add-listener-method>
+            <remove-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf2Bean.removeIntf2EventsListener(org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2Events)
+            </remove-listener-method>
+            <listener-method-descriptors>
+                <method-descriptor name="addInEvent1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.AddIn$AddInEvents.addInEvent1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="addInEvent1"
+                        full-name="addInEvent1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            addInEvent1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="addInEvent2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.AddIn$AddInEvents.addInEvent2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="addInEvent2"
+                        full-name="addInEvent2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            addInEvent2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf1Event1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events.intf1Event1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf1Event1"
+                        full-name="intf1Event1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf1Event1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf1Event2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events.intf1Event2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf1Event2"
+                        full-name="intf1Event2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf1Event2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf2Event1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2Events.intf2Event1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf2Event1"
+                        full-name="intf2Event1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf2Event1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf2Event2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2Events.intf2Event2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf2Event2"
+                        full-name="intf2Event2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf2Event2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="rootEvent1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Root$RootEvents.rootEvent1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="rootEvent1"
+                        full-name="rootEvent1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            rootEvent1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="rootEvent2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Root$RootEvents.rootEvent2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="rootEvent2"
+                        full-name="rootEvent2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            rootEvent2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+            </listener-method-descriptors>
+            <feature-descriptor name="intf2Events"
+                full-name="intf2Events"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf2Events
+                </short-description>
+            </feature-descriptor>
+        <event-descriptor name="ext2Events"
+            is-unicast=false
+            is-in-default=true
+            is-default=false>
+            <listener-type>
+                org.apache.beehive.controls.test.controls.inherit.Ext2$Ext2Events
+            </listener-type>
+            <add-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Ext2Bean.addExt2EventsListener(org.apache.beehive.controls.test.controls.inherit.Ext2$Ext2Events) throws java.util.TooManyListenersException
+            </add-listener-method>
+            <remove-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Ext2Bean.removeExt2EventsListener(org.apache.beehive.controls.test.controls.inherit.Ext2$Ext2Events)
+            </remove-listener-method>
+            <listener-method-descriptors>
+                <method-descriptor name="addInEvent1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.AddIn$AddInEvents.addInEvent1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="addInEvent1"
+                        full-name="addInEvent1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            addInEvent1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="addInEvent2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.AddIn$AddInEvents.addInEvent2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="addInEvent2"
+                        full-name="addInEvent2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            addInEvent2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="ext1Event1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Ext1$Ext1Events.ext1Event1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="ext1Event1"
+                        full-name="ext1Event1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            ext1Event1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="ext1Event2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Ext1$Ext1Events.ext1Event2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="ext1Event2"
+                        full-name="ext1Event2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            ext1Event2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="ext2Event1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Ext2$Ext2Events.ext2Event1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="ext2Event1"
+                        full-name="ext2Event1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            ext2Event1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="ext2Event2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Ext2$Ext2Events.ext2Event2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="ext2Event2"
+                        full-name="ext2Event2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            ext2Event2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf1Event1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events.intf1Event1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf1Event1"
+                        full-name="intf1Event1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf1Event1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf1Event2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events.intf1Event2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf1Event2"
+                        full-name="intf1Event2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf1Event2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf2Event1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2Events.intf2Event1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf2Event1"
+                        full-name="intf2Event1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf2Event1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf2Event2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2Events.intf2Event2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf2Event2"
+                        full-name="intf2Event2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf2Event2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="rootEvent1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Root$RootEvents.rootEvent1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="rootEvent1"
+                        full-name="rootEvent1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            rootEvent1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="rootEvent2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Root$RootEvents.rootEvent2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="rootEvent2"
+                        full-name="rootEvent2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            rootEvent2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+            </listener-method-descriptors>
+            <feature-descriptor name="ext2Events"
+                full-name="ext2Events"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    ext2Events
+                </short-description>
+            </feature-descriptor>
+    </event-set-descriptors>
+    <additional-bean-info/>
+</bean-info>
\ No newline at end of file

Added: incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/InheritTest.java
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/InheritTest.java?view=auto&rev=111736
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/InheritTest.java	Mon Dec 13 10:10:04 2004
@@ -0,0 +1,93 @@
+package org.apache.beehive.controls.test.java.inherit;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.apache.beehive.test.tools.mantis.annotations.tch.Freq;
+
+import java.io.*;
+
+import org.apache.beehive.controls.test.controls.beaninfo.InfoTestBean;
+import org.apache.beehive.controls.test.controls.util.ControlIntrospector;
+
+/**
+ * A TestCase that tests control interface, extension, and implementation inheritance
+ */
+@Freq("checkin")
+public class InheritTest extends TestCase
+{
+    public InheritTest(String s) { super(s); }
+
+    public void setUp() { }
+
+    private void validateBeanInfo(String shortName) throws Exception
+    {  
+
+        StringWriter sw = new StringWriter();
+        File tempFile = File.createTempFile(shortName, ".beaninfo");
+        FileOutputStream fos = new FileOutputStream(tempFile);
+
+        Class beanClass = Class.forName("org.apache.beehive.controls.test.controls.inherit." +
+                                        shortName);
+        ControlIntrospector ci = new ControlIntrospector(beanClass, fos);
+        ci.introspect();
+        fos.close();
+
+        InputStream valid = 
+            this.getClass().getClassLoader().getResourceAsStream(
+                "org/apache/beehive/controls/test/java/inherit/" + shortName + ".beaninfo");
+        if (valid == null)
+            fail("Could not locate valid beaninfo file");
+
+        InputStream current = new FileInputStream(tempFile);
+        int validVal, currentVal;
+        do
+        {
+            validVal = valid.read();
+            currentVal = current.read();
+            if (validVal != currentVal)
+                fail("BeanInfo data in " + tempFile.getName() + " differs from valid file");
+        }
+        while (validVal != -1);
+
+        // Pass, so remove the temporary output file
+        tempFile.delete();
+    }
+
+    //
+    // Note: to regenerate a saved beanInfo file, simply use:
+    //  BeanInfo.[bat|sh] <className> > <shortName>.beaninfo
+    //
+
+    /**
+     * Verifies the generated BeanInfo for Intf1
+     */
+    public void testIntf1BeanInfo() throws Exception
+    {
+        validateBeanInfo("Intf1Bean");
+    }
+
+    /**
+     * Verifies the generated BeanInfo for Intf2
+     */
+    public void testIntf2BeanInfo() throws Exception
+    {
+        validateBeanInfo("Intf2Bean");
+    }
+
+    /**
+     * Verifies the generated BeanInfo for Ext1
+     */
+    public void testExt1BeanInfo() throws Exception
+    {
+        validateBeanInfo("Ext1Bean");
+    }
+
+    /**
+     * Verifies the generated BeanInfo for Ext2
+     */
+    public void testExt2BeanInfo() throws Exception
+    {
+        validateBeanInfo("Ext2Bean");
+    }
+}

Added: incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Intf1Bean.beaninfo
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Intf1Bean.beaninfo?view=auto&rev=111736
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Intf1Bean.beaninfo	Mon Dec 13 10:10:04 2004
@@ -0,0 +1,263 @@
+<bean-info name="org.apache.beehive.controls.test.controls.inherit.Intf1Bean">
+    <bean-descriptor name="Intf1Bean">
+        <feature-descriptor name="Intf1Bean"
+            full-name="Intf1Bean"
+            is-expert=false
+            is-hidden=false
+            is-preferred=false>
+            <short-description>
+                Intf1Bean
+            </short-description>
+        </feature-descriptor>
+        <bean-class>
+            org.apache.beehive.controls.test.controls.inherit.Intf1Bean
+        </bean-class>
+    </bean-descriptor>
+    <method-descriptors>
+        <method-descriptor name="intf1Operation1"
+            <method>
+                public abstract int org.apache.beehive.controls.test.controls.inherit.Intf1.intf1Operation1()
+            </method>
+            <param-descriptors/>
+            <feature-descriptor name="intf1Operation1"
+                full-name="intf1Operation1"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf1Operation1
+                </short-description>
+            </feature-descriptor>
+        </method-descriptor>
+        <method-descriptor name="intf1Operation2"
+            <method>
+                public abstract int org.apache.beehive.controls.test.controls.inherit.Intf1.intf1Operation2()
+            </method>
+            <param-descriptors/>
+            <feature-descriptor name="intf1Operation2"
+                full-name="intf1Operation2"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf1Operation2
+                </short-description>
+            </feature-descriptor>
+        </method-descriptor>
+        <method-descriptor name="rootOperation1"
+            <method>
+                public abstract void org.apache.beehive.controls.test.controls.inherit.Root.rootOperation1()
+            </method>
+            <param-descriptors/>
+            <feature-descriptor name="rootOperation1"
+                full-name="rootOperation1"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    rootOperation1
+                </short-description>
+            </feature-descriptor>
+        </method-descriptor>
+        <method-descriptor name="rootOperation2"
+            <method>
+                public abstract void org.apache.beehive.controls.test.controls.inherit.Root.rootOperation2()
+            </method>
+            <param-descriptors/>
+            <feature-descriptor name="rootOperation2"
+                full-name="rootOperation2"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    rootOperation2
+                </short-description>
+            </feature-descriptor>
+        </method-descriptor>
+    </method-descriptors>
+    <property-descriptors default-index=-1>
+        <property-descriptor name="intf1Prop1">
+            type="int"
+            isBound=false
+            isConstrained=false
+            isDefault=false>
+            <read-method>
+                public int org.apache.beehive.controls.test.controls.inherit.Intf1Bean.getIntf1Prop1()
+            </read-method>
+            <write-method>
+                public void org.apache.beehive.controls.test.controls.inherit.Intf1Bean.setIntf1Prop1(int)
+            </write-method>
+            <feature-descriptor name="intf1Prop1"
+                full-name="intf1Prop1"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf1Prop1
+                </short-description>
+            </feature-descriptor>
+        </property-descriptor>
+        <property-descriptor name="intf1Prop2">
+            type="int"
+            isBound=false
+            isConstrained=false
+            isDefault=false>
+            <read-method>
+                public int org.apache.beehive.controls.test.controls.inherit.Intf1Bean.getIntf1Prop2()
+            </read-method>
+            <write-method>
+                public void org.apache.beehive.controls.test.controls.inherit.Intf1Bean.setIntf1Prop2(int)
+            </write-method>
+            <feature-descriptor name="intf1Prop2"
+                full-name="intf1Prop2"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf1Prop2
+                </short-description>
+            </feature-descriptor>
+        </property-descriptor>
+    </property-descriptors>
+    <event-set-descriptors default-index=-1>
+        <event-descriptor name="intf1Events"
+            is-unicast=false
+            is-in-default=true
+            is-default=false>
+            <listener-type>
+                org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events
+            </listener-type>
+            <add-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf1Bean.addIntf1EventsListener(org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events) throws java.util.TooManyListenersException
+            </add-listener-method>
+            <remove-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf1Bean.removeIntf1EventsListener(org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events)
+            </remove-listener-method>
+            <listener-method-descriptors>
+                <method-descriptor name="intf1Event1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events.intf1Event1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf1Event1"
+                        full-name="intf1Event1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf1Event1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf1Event2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events.intf1Event2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf1Event2"
+                        full-name="intf1Event2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf1Event2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="rootEvent1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Root$RootEvents.rootEvent1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="rootEvent1"
+                        full-name="rootEvent1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            rootEvent1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="rootEvent2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Root$RootEvents.rootEvent2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="rootEvent2"
+                        full-name="rootEvent2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            rootEvent2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+            </listener-method-descriptors>
+            <feature-descriptor name="intf1Events"
+                full-name="intf1Events"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf1Events
+                </short-description>
+            </feature-descriptor>
+        <event-descriptor name="intf1NewEvents"
+            is-unicast=false
+            is-in-default=true
+            is-default=false>
+            <listener-type>
+                org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1NewEvents
+            </listener-type>
+            <add-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf1Bean.addIntf1NewEventsListener(org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1NewEvents) throws java.util.TooManyListenersException
+            </add-listener-method>
+            <remove-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf1Bean.removeIntf1NewEventsListener(org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1NewEvents)
+            </remove-listener-method>
+            <listener-method-descriptors>
+                <method-descriptor name="intf1NewEvent1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1NewEvents.intf1NewEvent1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf1NewEvent1"
+                        full-name="intf1NewEvent1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf1NewEvent1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf1NewEvent2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1NewEvents.intf1NewEvent2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf1NewEvent2"
+                        full-name="intf1NewEvent2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf1NewEvent2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+            </listener-method-descriptors>
+            <feature-descriptor name="intf1NewEvents"
+                full-name="intf1NewEvents"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf1NewEvents
+                </short-description>
+            </feature-descriptor>
+    </event-set-descriptors>
+    <additional-bean-info/>
+</bean-info>
\ No newline at end of file

Added: incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Intf2Bean.beaninfo
Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Intf2Bean.beaninfo?view=auto&rev=111736
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/inherit/Intf2Bean.beaninfo	Mon Dec 13 10:10:04 2004
@@ -0,0 +1,593 @@
+<bean-info name="org.apache.beehive.controls.test.controls.inherit.Intf2Bean">
+    <bean-descriptor name="Intf2Bean">
+        <feature-descriptor name="Intf2Bean"
+            full-name="Intf2Bean"
+            is-expert=false
+            is-hidden=false
+            is-preferred=false>
+            <short-description>
+                Intf2Bean
+            </short-description>
+        </feature-descriptor>
+        <bean-class>
+            org.apache.beehive.controls.test.controls.inherit.Intf2Bean
+        </bean-class>
+    </bean-descriptor>
+    <method-descriptors>
+        <method-descriptor name="addInOperation1"
+            <method>
+                public abstract void org.apache.beehive.controls.test.controls.inherit.AddIn.addInOperation1()
+            </method>
+            <param-descriptors/>
+            <feature-descriptor name="addInOperation1"
+                full-name="addInOperation1"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    addInOperation1
+                </short-description>
+            </feature-descriptor>
+        </method-descriptor>
+        <method-descriptor name="addInOperation2"
+            <method>
+                public abstract void org.apache.beehive.controls.test.controls.inherit.AddIn.addInOperation2()
+            </method>
+            <param-descriptors/>
+            <feature-descriptor name="addInOperation2"
+                full-name="addInOperation2"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    addInOperation2
+                </short-description>
+            </feature-descriptor>
+        </method-descriptor>
+        <method-descriptor name="intf1Operation1"
+            <method>
+                public abstract int org.apache.beehive.controls.test.controls.inherit.Intf1.intf1Operation1()
+            </method>
+            <param-descriptors/>
+            <feature-descriptor name="intf1Operation1"
+                full-name="intf1Operation1"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf1Operation1
+                </short-description>
+            </feature-descriptor>
+        </method-descriptor>
+        <method-descriptor name="intf1Operation2"
+            <method>
+                public abstract int org.apache.beehive.controls.test.controls.inherit.Intf1.intf1Operation2()
+            </method>
+            <param-descriptors/>
+            <feature-descriptor name="intf1Operation2"
+                full-name="intf1Operation2"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf1Operation2
+                </short-description>
+            </feature-descriptor>
+        </method-descriptor>
+        <method-descriptor name="intf2Operation1"
+            <method>
+                public abstract int org.apache.beehive.controls.test.controls.inherit.Intf2.intf2Operation1()
+            </method>
+            <param-descriptors/>
+            <feature-descriptor name="intf2Operation1"
+                full-name="intf2Operation1"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf2Operation1
+                </short-description>
+            </feature-descriptor>
+        </method-descriptor>
+        <method-descriptor name="intf2Operation2"
+            <method>
+                public abstract int org.apache.beehive.controls.test.controls.inherit.Intf2.intf2Operation2()
+            </method>
+            <param-descriptors/>
+            <feature-descriptor name="intf2Operation2"
+                full-name="intf2Operation2"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf2Operation2
+                </short-description>
+            </feature-descriptor>
+        </method-descriptor>
+        <method-descriptor name="rootOperation1"
+            <method>
+                public abstract void org.apache.beehive.controls.test.controls.inherit.Root.rootOperation1()
+            </method>
+            <param-descriptors/>
+            <feature-descriptor name="rootOperation1"
+                full-name="rootOperation1"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    rootOperation1
+                </short-description>
+            </feature-descriptor>
+        </method-descriptor>
+        <method-descriptor name="rootOperation2"
+            <method>
+                public abstract void org.apache.beehive.controls.test.controls.inherit.Root.rootOperation2()
+            </method>
+            <param-descriptors/>
+            <feature-descriptor name="rootOperation2"
+                full-name="rootOperation2"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    rootOperation2
+                </short-description>
+            </feature-descriptor>
+        </method-descriptor>
+    </method-descriptors>
+    <property-descriptors default-index=-1>
+        <property-descriptor name="intf1Prop1">
+            type="int"
+            isBound=false
+            isConstrained=false
+            isDefault=false>
+            <read-method>
+                public int org.apache.beehive.controls.test.controls.inherit.Intf1Bean.getIntf1Prop1()
+            </read-method>
+            <write-method>
+                public void org.apache.beehive.controls.test.controls.inherit.Intf1Bean.setIntf1Prop1(int)
+            </write-method>
+            <feature-descriptor name="intf1Prop1"
+                full-name="intf1Prop1"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf1Prop1
+                </short-description>
+            </feature-descriptor>
+        </property-descriptor>
+        <property-descriptor name="intf1Prop2">
+            type="int"
+            isBound=false
+            isConstrained=false
+            isDefault=false>
+            <read-method>
+                public int org.apache.beehive.controls.test.controls.inherit.Intf1Bean.getIntf1Prop2()
+            </read-method>
+            <write-method>
+                public void org.apache.beehive.controls.test.controls.inherit.Intf1Bean.setIntf1Prop2(int)
+            </write-method>
+            <feature-descriptor name="intf1Prop2"
+                full-name="intf1Prop2"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf1Prop2
+                </short-description>
+            </feature-descriptor>
+        </property-descriptor>
+        <property-descriptor name="intf2Prop1">
+            type="int"
+            isBound=false
+            isConstrained=false
+            isDefault=false>
+            <read-method>
+                public int org.apache.beehive.controls.test.controls.inherit.Intf2Bean.getIntf2Prop1()
+            </read-method>
+            <write-method>
+                public void org.apache.beehive.controls.test.controls.inherit.Intf2Bean.setIntf2Prop1(int)
+            </write-method>
+            <feature-descriptor name="intf2Prop1"
+                full-name="intf2Prop1"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf2Prop1
+                </short-description>
+            </feature-descriptor>
+        </property-descriptor>
+        <property-descriptor name="intf2Prop2">
+            type="int"
+            isBound=false
+            isConstrained=false
+            isDefault=false>
+            <read-method>
+                public int org.apache.beehive.controls.test.controls.inherit.Intf2Bean.getIntf2Prop2()
+            </read-method>
+            <write-method>
+                public void org.apache.beehive.controls.test.controls.inherit.Intf2Bean.setIntf2Prop2(int)
+            </write-method>
+            <feature-descriptor name="intf2Prop2"
+                full-name="intf2Prop2"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf2Prop2
+                </short-description>
+            </feature-descriptor>
+        </property-descriptor>
+    </property-descriptors>
+    <event-set-descriptors default-index=-1>
+        <event-descriptor name="intf2NewEvents"
+            is-unicast=false
+            is-in-default=true
+            is-default=false>
+            <listener-type>
+                org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2NewEvents
+            </listener-type>
+            <add-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf2Bean.addIntf2NewEventsListener(org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2NewEvents) throws java.util.TooManyListenersException
+            </add-listener-method>
+            <remove-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf2Bean.removeIntf2NewEventsListener(org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2NewEvents)
+            </remove-listener-method>
+            <listener-method-descriptors>
+                <method-descriptor name="addInEvent1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.AddIn$AddInEvents.addInEvent1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="addInEvent1"
+                        full-name="addInEvent1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            addInEvent1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="addInEvent2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.AddIn$AddInEvents.addInEvent2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="addInEvent2"
+                        full-name="addInEvent2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            addInEvent2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf2NewEvent1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2NewEvents.intf2NewEvent1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf2NewEvent1"
+                        full-name="intf2NewEvent1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf2NewEvent1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf2NewEvent2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2NewEvents.intf2NewEvent2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf2NewEvent2"
+                        full-name="intf2NewEvent2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf2NewEvent2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+            </listener-method-descriptors>
+            <feature-descriptor name="intf2NewEvents"
+                full-name="intf2NewEvents"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf2NewEvents
+                </short-description>
+            </feature-descriptor>
+        <event-descriptor name="intf1Events"
+            is-unicast=false
+            is-in-default=true
+            is-default=false>
+            <listener-type>
+                org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events
+            </listener-type>
+            <add-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf1Bean.addIntf1EventsListener(org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events) throws java.util.TooManyListenersException
+            </add-listener-method>
+            <remove-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf1Bean.removeIntf1EventsListener(org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events)
+            </remove-listener-method>
+            <listener-method-descriptors>
+                <method-descriptor name="intf1Event1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events.intf1Event1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf1Event1"
+                        full-name="intf1Event1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf1Event1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf1Event2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events.intf1Event2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf1Event2"
+                        full-name="intf1Event2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf1Event2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="rootEvent1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Root$RootEvents.rootEvent1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="rootEvent1"
+                        full-name="rootEvent1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            rootEvent1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="rootEvent2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Root$RootEvents.rootEvent2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="rootEvent2"
+                        full-name="rootEvent2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            rootEvent2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+            </listener-method-descriptors>
+            <feature-descriptor name="intf1Events"
+                full-name="intf1Events"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf1Events
+                </short-description>
+            </feature-descriptor>
+        <event-descriptor name="intf1NewEvents"
+            is-unicast=false
+            is-in-default=true
+            is-default=false>
+            <listener-type>
+                org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1NewEvents
+            </listener-type>
+            <add-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf1Bean.addIntf1NewEventsListener(org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1NewEvents) throws java.util.TooManyListenersException
+            </add-listener-method>
+            <remove-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf1Bean.removeIntf1NewEventsListener(org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1NewEvents)
+            </remove-listener-method>
+            <listener-method-descriptors>
+                <method-descriptor name="intf1NewEvent1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1NewEvents.intf1NewEvent1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf1NewEvent1"
+                        full-name="intf1NewEvent1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf1NewEvent1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf1NewEvent2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1NewEvents.intf1NewEvent2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf1NewEvent2"
+                        full-name="intf1NewEvent2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf1NewEvent2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+            </listener-method-descriptors>
+            <feature-descriptor name="intf1NewEvents"
+                full-name="intf1NewEvents"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf1NewEvents
+                </short-description>
+            </feature-descriptor>
+        <event-descriptor name="intf2Events"
+            is-unicast=false
+            is-in-default=true
+            is-default=false>
+            <listener-type>
+                org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2Events
+            </listener-type>
+            <add-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf2Bean.addIntf2EventsListener(org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2Events) throws java.util.TooManyListenersException
+            </add-listener-method>
+            <remove-listener-method>
+                public synchronized void org.apache.beehive.controls.test.controls.inherit.Intf2Bean.removeIntf2EventsListener(org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2Events)
+            </remove-listener-method>
+            <listener-method-descriptors>
+                <method-descriptor name="addInEvent1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.AddIn$AddInEvents.addInEvent1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="addInEvent1"
+                        full-name="addInEvent1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            addInEvent1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="addInEvent2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.AddIn$AddInEvents.addInEvent2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="addInEvent2"
+                        full-name="addInEvent2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            addInEvent2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf1Event1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events.intf1Event1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf1Event1"
+                        full-name="intf1Event1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf1Event1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf1Event2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf1$Intf1Events.intf1Event2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf1Event2"
+                        full-name="intf1Event2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf1Event2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf2Event1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2Events.intf2Event1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf2Event1"
+                        full-name="intf2Event1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf2Event1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="intf2Event2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Intf2$Intf2Events.intf2Event2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="intf2Event2"
+                        full-name="intf2Event2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            intf2Event2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="rootEvent1"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Root$RootEvents.rootEvent1()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="rootEvent1"
+                        full-name="rootEvent1"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            rootEvent1
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+                <method-descriptor name="rootEvent2"
+                    <method>
+                        public abstract void org.apache.beehive.controls.test.controls.inherit.Root$RootEvents.rootEvent2()
+                    </method>
+                    <param-descriptors/>
+                    <feature-descriptor name="rootEvent2"
+                        full-name="rootEvent2"
+                        is-expert=false
+                        is-hidden=false
+                        is-preferred=false>
+                        <short-description>
+                            rootEvent2
+                        </short-description>
+                    </feature-descriptor>
+                </method-descriptor>
+            </listener-method-descriptors>
+            <feature-descriptor name="intf2Events"
+                full-name="intf2Events"
+                is-expert=false
+                is-hidden=false
+                is-preferred=false>
+                <short-description>
+                    intf2Events
+                </short-description>
+            </feature-descriptor>
+    </event-set-descriptors>
+    <additional-bean-info/>
+</bean-info>
\ No newline at end of file