avalon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Stephen McConnell <mcconn...@apache.org>
Subject Re: Attributes again...
Date Thu, 14 Aug 2003 22:37:28 GMT

Leo:

This process started out based on the issue of how to handle extended 
attributes - i.e. a container wants to be able to know if a component is 
declaring somerthing that it needs to know to be able to deploy 
something.  While the entire topic is interesting with respect to 
approaches in "open-attribute-defintion" - I have not yet figured out 
how any of this actually addresses the original problem.

Can you help me out here. I need to know how a container recognizes that 
an attribute must be recognized, and how a container establishes 
validity of a attribute that must be recognized, and how a container 
establishes that an attribute has in fact been recognized.

Stephen.


Leo Sutic wrote:

>OK, I've made some changes to the Attributes project.
>
>INDEXED ATTRIBUTES
>------------------
>An attribute can now not only be Inheritable, it can also be Indexed. For
>an attribute to be Indexed means that when you run the attribute indexer
>tool on the resulting classes, you will get a list of all classes with
>that attribute.
>
>For example:
>
>    /**
>     * @Indexed
>     */
>    public class AvalonService { ... }
>
>
>    /**
>     * @AvalonService ( MyService.class )
>     */
>    public class MyImpl { ... }
>
>    /**
>     * @AvalonService ( MyOtherService.class )
>     */
>    public class MyOtherImpl { ... }
>
>Will result in:
>
>    Attribute: AvalonService
>    Class: MyImpl
>    Class: MyOtherImpl
>
>This is normally written to a file called META-INF/attrs.index which can
>be loaded via the attributes.getAttributeIndex(ClassLoader cl) method. The
>resulting AttributeIndex then has a getClassesWithAttribute( String
>attribute ) method. So for the above I could do:
>
>    AttributeIndex index = Attributes.getAttributeIndex ( classLoader );
>    Collection serviceImpls = index.getClassesWithAttribute (
>AvalonService.class );
>
>And then iterate over the class names in serviceImpls.
>
>Note - the index ignores inherited attributes. If MyImpl hadn't declared
>the AvalonService attribute, but inherited it from a superclass, it would
>not have been listed in the index. This is because the superclass may
>invalidate the index by changing its set of attributes.
>
>
>NICER SYNTAX
>------------
>The attribute compiler has to figure out if a Javadoc tag is an attribute
>or something else. Previously the rule was simple: If it starts with an
>uppercase letter, it is an attribute. Otherwise not. This meant, however
>that fully qualified attribute names didn't pass:
>
>    // OK, starts with capital letter
>    @Inheritable
>
>    // Not ok, ignored.
>    @org.apache.avalon.attributes.Inheritable
>
>That's no good, so now the rules work like this instead:
>
> 1. Two '@' at the start means attribute:
>
>    // OK.
>    @@lowercaseAttribute
>
>
> 2. The name is analyzed - if the last token, when tokenizing on '.' is
>uppercase, it is an attribute:
>
>    // OK, last token ("Inheritable" starts with uppercase)
>    @org.apache.avalon.attributes.Inheritable
>
>    // OK, last token ("Inheritable" starts with uppercase)
>    @Org.Apache.Avalon.attributes.Inheritable
>
>    // Not ok.
>    @Org.Apache.Avalon.attributes.inheritable
>
>/LS
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: dev-unsubscribe@avalon.apache.org
>For additional commands, e-mail: dev-help@avalon.apache.org
>
>
>
>  
>

-- 

Stephen J. McConnell
mailto:mcconnell@apache.org
http://www.osm.net

Sent via James running under Merlin as an NT service.
http://avalon.apache.org/sandbox/merlin




---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@avalon.apache.org
For additional commands, e-mail: dev-help@avalon.apache.org


Mime
View raw message