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 2005/04/28 00:37:59 UTC

svn commit: r165060 - /incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlInterface.java

Author: kylem
Date: Wed Apr 27 15:37:57 2005
New Revision: 165060

URL: http://svn.apache.org/viewcvs?rev=165060&view=rev
Log:
Added some additional validation for ControlInterfaces/Extensions, per BEEHIVE-118.  In particular, the following cases are now caught and rejected:

- Attempting to define properties (@PropertySet or @ExternalPropertySets) from within a ControlExtension interface.  Extensions are consumers, not declarers, of property annotation syntax.
- Extending a ControlExtension with a ControlInterface.  The following are the only valid inheritance/extension models:
     + ControlInterface (extends nothing)
     + ControlInterface extends ControlInterface
     + ControlExtension extends ControlInterface
     + ControlExtension extends ControlExtension


Modified:
    incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptControlInterface.java

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?rev=165060&r1=165059&r2=165060&view=diff
==============================================================================
--- 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 Wed Apr 27 15:37:57 2005
@@ -170,7 +170,14 @@
                 superDecl.getAnnotation(ControlInterface.class) != null)
             {
                 _superDecl = superDecl;
-                return new AptControlInterface(_superDecl, _env);
+                AptControlInterface superIntf = new AptControlInterface(_superDecl, _env);
+
+                if (!isExtension() && superIntf.isExtension())
+                {
+                    _env.getMessager().printError(_intfDecl.getPosition(),
+                        "An interface annotated with @ControlInterface can only extend another ControlInterface.  It is not valid for a ControlInterface to extend a ControlExtension");
+                }
+                return superIntf;
             }
         }
 
@@ -284,6 +291,12 @@
         ExternalPropertySets extPropsAnnotation = _intfDecl.getAnnotation(ExternalPropertySets.class);
         if ( extPropsAnnotation != null )
         {
+            if (isExtension())
+            {
+                _env.getMessager().printError(_intfDecl.getPosition(),
+                    "The @ExternalPropertySets annotation should only be used on an interface annotated with @ControlInterface, never @ControlExtension.  An extension can only use existing properties, not declare new ones");
+            }
+
             try
             {
                 Class[] extProps = extPropsAnnotation.value();
@@ -341,6 +354,12 @@
                     _env.getMessager().printError(innerDecl.getPosition(),
                         "The PropertySet annotation must be used in conjuction with @Retention(RetentionPolicy.RUNTIME)");
                     fError = true;
+                }
+
+                if (isExtension())
+                {
+                    _env.getMessager().printError(innerDecl.getPosition(),
+                        "The @PropertySet annotation should only be used within an interface annotated with @ControlInterface, never @ControlExtension.  An extension can only use existing properties, not declare new ones");
                 }
 
                 if ( !fError )