You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by mc...@apache.org on 2003/06/04 11:28:45 UTC
cvs commit: avalon-sandbox/merlin/meta-tools/src/java/org/apache/avalon/meta/info/builder/tags AbstractTag.java ContextTag.java DependencyTag.java LoggerTag.java
mcconnell 2003/06/04 02:28:45
Modified: merlin/assembly/src/java/org/apache/avalon/assembly/lifecycle/impl
AbstractContextualizer.java
AvalonContextualizer.java
DefaultContextualizationService.java
DefaultContextualizer.java
DefaultDeploymentService.java
merlin/merlin-core/src/test/org/apache/avalon/playground
ContextualizationHandler.java
merlin/meta-tools/src/java/org/apache/avalon/meta/info/builder/tags
AbstractTag.java ContextTag.java DependencyTag.java
LoggerTag.java
Log:
Applied meta-tools patch from Christian Meier (tag resolution across class hierachy).
Revision Changes Path
1.3 +1 -0 avalon-sandbox/merlin/assembly/src/java/org/apache/avalon/assembly/lifecycle/impl/AbstractContextualizer.java
Index: AbstractContextualizer.java
===================================================================
RCS file: /home/cvs/avalon-sandbox/merlin/assembly/src/java/org/apache/avalon/assembly/lifecycle/impl/AbstractContextualizer.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- AbstractContextualizer.java 29 Apr 2003 23:35:24 -0000 1.2
+++ AbstractContextualizer.java 4 Jun 2003 09:28:44 -0000 1.3
@@ -60,6 +60,7 @@
import org.apache.avalon.framework.context.ContextException;
import org.apache.avalon.meta.model.ContextDirective;
+import org.apache.avalon.assembly.lifecycle.Contextualization;
/**
* The abstract contextualizer class is a utility class that provides
1.2 +1 -0 avalon-sandbox/merlin/assembly/src/java/org/apache/avalon/assembly/lifecycle/impl/AvalonContextualizer.java
Index: AvalonContextualizer.java
===================================================================
RCS file: /home/cvs/avalon-sandbox/merlin/assembly/src/java/org/apache/avalon/assembly/lifecycle/impl/AvalonContextualizer.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- AvalonContextualizer.java 29 Apr 2003 00:55:46 -0000 1.1
+++ AvalonContextualizer.java 4 Jun 2003 09:28:44 -0000 1.2
@@ -62,6 +62,7 @@
import org.apache.avalon.framework.context.Contextualizable;
import org.apache.avalon.framework.context.DefaultContext;
import org.apache.avalon.meta.model.ContextDirective;
+import org.apache.avalon.assembly.lifecycle.Contextualization;
/**
* Definition of an strategy handler that handles the Contextualization
1.3 +3 -1 avalon-sandbox/merlin/assembly/src/java/org/apache/avalon/assembly/lifecycle/impl/DefaultContextualizationService.java
Index: DefaultContextualizationService.java
===================================================================
RCS file: /home/cvs/avalon-sandbox/merlin/assembly/src/java/org/apache/avalon/assembly/lifecycle/impl/DefaultContextualizationService.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- DefaultContextualizationService.java 8 May 2003 03:02:39 -0000 1.2
+++ DefaultContextualizationService.java 4 Jun 2003 09:28:44 -0000 1.3
@@ -53,9 +53,11 @@
import java.util.Map;
import org.apache.avalon.assembly.appliance.Appliance;
+import org.apache.avalon.assembly.lifecycle.Contextualization;
import org.apache.avalon.framework.context.ContextException;
import org.apache.avalon.framework.context.Contextualizable;
import org.apache.avalon.framework.logger.AbstractLogEnabled;
+
/**
* The context service provides support for the contextualization of a
1.2 +1 -0 avalon-sandbox/merlin/assembly/src/java/org/apache/avalon/assembly/lifecycle/impl/DefaultContextualizer.java
Index: DefaultContextualizer.java
===================================================================
RCS file: /home/cvs/avalon-sandbox/merlin/assembly/src/java/org/apache/avalon/assembly/lifecycle/impl/DefaultContextualizer.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- DefaultContextualizer.java 29 Apr 2003 00:55:46 -0000 1.1
+++ DefaultContextualizer.java 4 Jun 2003 09:28:44 -0000 1.2
@@ -57,6 +57,7 @@
import java.util.Map;
+import org.apache.avalon.assembly.lifecycle.Contextualization;
import org.apache.avalon.assembly.locator.Contextualizable;
import org.apache.avalon.assembly.locator.Locator;
import org.apache.avalon.assembly.locator.impl.DefaultLocator;
1.8 +2 -1 avalon-sandbox/merlin/assembly/src/java/org/apache/avalon/assembly/lifecycle/impl/DefaultDeploymentService.java
Index: DefaultDeploymentService.java
===================================================================
RCS file: /home/cvs/avalon-sandbox/merlin/assembly/src/java/org/apache/avalon/assembly/lifecycle/impl/DefaultDeploymentService.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- DefaultDeploymentService.java 8 May 2003 03:02:39 -0000 1.7
+++ DefaultDeploymentService.java 4 Jun 2003 09:28:44 -0000 1.8
@@ -54,6 +54,7 @@
import org.apache.avalon.assembly.lifecycle.DeploymentException;
import org.apache.avalon.assembly.lifecycle.DeploymentService;
import org.apache.avalon.assembly.locator.Contextualizable;
+
import org.apache.avalon.assembly.locator.Locator;
import org.apache.avalon.assembly.locator.impl.DefaultLocator;
import org.apache.avalon.assembly.logging.LoggingManager;
1.5 +1 -1 avalon-sandbox/merlin/merlin-core/src/test/org/apache/avalon/playground/ContextualizationHandler.java
Index: ContextualizationHandler.java
===================================================================
RCS file: /home/cvs/avalon-sandbox/merlin/merlin-core/src/test/org/apache/avalon/playground/ContextualizationHandler.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ContextualizationHandler.java 29 Apr 2003 14:22:20 -0000 1.4
+++ ContextualizationHandler.java 4 Jun 2003 09:28:45 -0000 1.5
@@ -58,7 +58,7 @@
import java.lang.reflect.Constructor;
import java.util.Map;
-import org.apache.avalon.assembly.lifecycle.impl.Contextualization;
+import org.apache.avalon.assembly.lifecycle.Contextualization;
import org.apache.avalon.framework.context.ContextException;
import org.apache.avalon.meta.model.ContextDirective;
1.6 +41 -30 avalon-sandbox/merlin/meta-tools/src/java/org/apache/avalon/meta/info/builder/tags/AbstractTag.java
Index: AbstractTag.java
===================================================================
RCS file: /home/cvs/avalon-sandbox/merlin/meta-tools/src/java/org/apache/avalon/meta/info/builder/tags/AbstractTag.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- AbstractTag.java 4 Jun 2003 02:24:57 -0000 1.5
+++ AbstractTag.java 4 Jun 2003 09:28:45 -0000 1.6
@@ -49,12 +49,16 @@
package org.apache.avalon.meta.info.builder.tags;
-import org.apache.avalon.framework.Version;
import com.thoughtworks.qdox.model.DocletTag;
import com.thoughtworks.qdox.model.JavaClass;
import com.thoughtworks.qdox.model.JavaMethod;
import com.thoughtworks.qdox.model.Type;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import org.apache.avalon.framework.Version;
/**
* A doclet tag representing the name of the Type.
@@ -86,8 +90,8 @@
}
/**
- * Return the user defined namespace for avalon tags. The value returned is established
- * by the javadoc tag 'avalon.namespace [namespace-value]' where
+ * Return the user defined namespace for avalon tags. The value returned is
+ * established by the javadoc tag 'avalon.namespace [namespace-value]' where
* [namespace-value] is a string representing the namespace identifier.
* @return the namespace tag used to represent the avalon.meta tag space
* @exception IllegalArgumentException if the namespace tag is declared by does not
@@ -210,17 +214,20 @@
final String resolvedType;
if( type.indexOf(":") > -1 )
{
- resolvedType = this.doResolveType( getJavaClass(),
- type.substring( 0, type.indexOf(":") ) );
- }
+ resolvedType =
+ this.doResolveType( getJavaClass(),
+ type.substring( 0, type.indexOf(":") ) );
+ }
else
{
- resolvedType = this.doResolveType( getJavaClass(), type );
+ resolvedType = doResolveType( getJavaClass(), type );
}
if( resolvedType == null )
{
- throw new RuntimeException( "can not find type " + type +
- " in class " + getJavaClass().getFullyQualifiedName() );
+ final String message =
+ "Unable to find type " + type
+ + " in class " + getJavaClass().getFullyQualifiedName();
+ throw new RuntimeException( message );
}
else
{
@@ -235,35 +242,38 @@
{
return resolvedType;
}
- else if(
- clazz.getSuperJavaClass() == null
+ else if( clazz.getSuperJavaClass() == null
|| JavaClass.OBJECT.equals( clazz.getSuperClass() ) )
{
return null;
}
else
{
- return this.doResolveType( clazz.getSuperJavaClass(), type );
+ return doResolveType( clazz.getSuperJavaClass(), type );
}
}
/**
- * Retrieve a method with specified name and one parameter of specified
- * type. The method must also return void.
+ * Retrieves all methods in the inheritance graph with specified name and
+ * one parameter of specified type. The methods must also return void.
*
- * @param methodName the name of the method
+ * @param methodName the name of the methods
* @param parameterType the class name of parameter
- * @return the method if such a method exists
+ * @return an array of such methods
*/
- protected JavaMethod getLifecycleMethod( final String methodName,
- final String parameterType )
+ protected JavaMethod[] getLifecycleMethods( final String methodName,
+ final String parameterType )
{
- return this.findLifecycleMethod( getJavaClass(), methodName, parameterType );
+ List result = new ArrayList();
+ findLifecycleMethod( result, getJavaClass(), methodName, parameterType );
+ return (JavaMethod[]) result.toArray( new JavaMethod[ result.size() ] );
}
- private JavaMethod findLifecycleMethod( final JavaClass clazz,
- final String methodName,
- final String parameterType )
+ private void findLifecycleMethod(
+ final List result,
+ final JavaClass clazz,
+ final String methodName,
+ final String parameterType )
{
final JavaMethod[] methods = clazz.getMethods();
for( int i = 0; i < methods.length; i++ )
@@ -274,16 +284,17 @@
&& method.getParameters().length == 1
&& method.getParameters()[ 0 ].getType().getValue().equals( parameterType ) )
{
- return method;
+ result.add( method );
+ break;
}
}
- if( clazz.getSuperJavaClass() == null || JavaClass.OBJECT.equals( clazz.getSuperClass() ) )
- {
- return null;
- }
- else
+
+ if(
+ clazz.getSuperJavaClass() != null
+ && !JavaClass.OBJECT.equals( clazz.getSuperClass() ) )
{
- return this.findLifecycleMethod( clazz.getSuperJavaClass(), methodName, parameterType );
+ this.findLifecycleMethod(
+ result, clazz.getSuperJavaClass(), methodName, parameterType );
}
}
}
1.4 +28 -17 avalon-sandbox/merlin/meta-tools/src/java/org/apache/avalon/meta/info/builder/tags/ContextTag.java
Index: ContextTag.java
===================================================================
RCS file: /home/cvs/avalon-sandbox/merlin/meta-tools/src/java/org/apache/avalon/meta/info/builder/tags/ContextTag.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ContextTag.java 16 Apr 2003 14:19:42 -0000 1.3
+++ ContextTag.java 4 Jun 2003 09:28:45 -0000 1.4
@@ -49,15 +49,17 @@
package org.apache.avalon.meta.info.builder.tags;
-import java.util.ArrayList;
-import org.apache.avalon.meta.info.ContextDescriptor;
-import org.apache.avalon.meta.info.EntryDescriptor;
-import org.apache.avalon.meta.info.ReferenceDescriptor;
import com.thoughtworks.qdox.model.DocletTag;
import com.thoughtworks.qdox.model.JavaClass;
import com.thoughtworks.qdox.model.JavaMethod;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Set;
+import org.apache.avalon.meta.info.ContextDescriptor;
+import org.apache.avalon.meta.info.EntryDescriptor;
+import org.apache.avalon.meta.info.ReferenceDescriptor;
/**
* A doclet tag handler for the 'extension' tag.
@@ -118,9 +120,9 @@
*/
public ContextDescriptor getContext()
{
- final JavaMethod method =
- getLifecycleMethod( "contextualize", CONTEXT_CLASS );
- if( null == method )
+ final JavaMethod[] methods =
+ getLifecycleMethods( "contextualize", CONTEXT_CLASS );
+ if( methods.length == 0 )//null == method )
{
return new ContextDescriptor(
new ReferenceDescriptor( CONTEXT_CLASS ),
@@ -129,7 +131,8 @@
else
{
String type = CONTEXT_CLASS;
- final DocletTag tag = method.getTagByName( getNS() + Tags.DELIMITER + KEY );
+ final DocletTag tag =
+ methods[0].getTagByName( getNS() + Tags.DELIMITER + KEY );
if( null != tag && null != tag.getNamedParameter( TYPE_PARAM ) )
{
final String value = getNamedParameter( tag, TYPE_PARAM );
@@ -137,14 +140,22 @@
}
final ArrayList list = new ArrayList();
- final DocletTag[] tags = method.getTagsByName( getNS() + Tags.DELIMITER + ENTRY );
- for( int i = 0; i < tags.length; i++ )
- {
- list.add( getEntry( tags[i] ) );
- }
-
- final EntryDescriptor[] entries =
- (EntryDescriptor[])list.toArray( new EntryDescriptor[ list.size() ] );
+ final Set marked = new HashSet( 10 );
+ for( int j = 0; j < methods.length; j++ )
+ {
+ final DocletTag[] tags =
+ methods[j].getTagsByName( getNS() + Tags.DELIMITER + ENTRY );
+ for( int i = 0; i < tags.length; i++ )
+ {
+ final String key = getNamedParameter( tags[i], KEY_PARAM );
+ if( !marked.contains( key ) ){
+ list.add( getEntry( tags[i] ) );
+ marked.add( key );
+ }
+ }
+ }
+ final EntryDescriptor[] entries =
+ (EntryDescriptor[])list.toArray( new EntryDescriptor[ list.size() ] );
return new ContextDescriptor(
new ReferenceDescriptor( type ), entries, null );
}
1.6 +33 -21 avalon-sandbox/merlin/meta-tools/src/java/org/apache/avalon/meta/info/builder/tags/DependencyTag.java
Index: DependencyTag.java
===================================================================
RCS file: /home/cvs/avalon-sandbox/merlin/meta-tools/src/java/org/apache/avalon/meta/info/builder/tags/DependencyTag.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- DependencyTag.java 4 Jun 2003 02:24:57 -0000 1.5
+++ DependencyTag.java 4 Jun 2003 09:28:45 -0000 1.6
@@ -49,15 +49,17 @@
package org.apache.avalon.meta.info.builder.tags;
-import java.util.ArrayList;
-import org.apache.avalon.framework.Version;
-import org.apache.avalon.meta.info.DependencyDescriptor;
-import org.apache.avalon.meta.info.ReferenceDescriptor;
import com.thoughtworks.qdox.model.DocletTag;
import com.thoughtworks.qdox.model.JavaClass;
import com.thoughtworks.qdox.model.JavaMethod;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Set;
+import org.apache.avalon.framework.Version;
+import org.apache.avalon.meta.info.DependencyDescriptor;
+import org.apache.avalon.meta.info.ReferenceDescriptor;
/**
* A doclet tag representing the lifestyle assigned to the Type.
@@ -99,7 +101,7 @@
protected static final String SERVICE_MANAGER_CLASS =
"org.apache.avalon.framework.service.ServiceManager";
- private JavaMethod m_method;
+ private JavaMethod[] m_methods;
/**
@@ -109,7 +111,7 @@
public DependencyTag( final JavaClass clazz )
{
super( clazz );
- setMethod();
+ setMethods();
}
/**
@@ -119,17 +121,26 @@
*/
public DependencyDescriptor[] getDependencies()
{
- if( null == m_method )
- {
- return new DependencyDescriptor[0];
- }
final ArrayList deps = new ArrayList();
- final DocletTag[] tags = getMethod().getTagsByName( getNS() + Tags.DELIMITER + KEY );
- for( int i = 0; i < tags.length; i++ )
+ final Set marked = new HashSet( 10 );
+ for( int j = 0; j < m_methods.length; j++ )
{
- deps.add( getDependency( tags[i] ) );
+ final DocletTag[] tags =
+ m_methods[j].getTagsByName( getNS()
+ + Tags.DELIMITER + KEY );
+
+ for( int i = 0; i < tags.length; i++ )
+ {
+ final String key = getNamedParameter( tags[i], TYPE_PARAM );
+ if( !marked.contains( key ) )
+ {
+ deps.add( getDependency( tags[i] ) );
+ marked.add( key );
+ }
+ }
}
- return (DependencyDescriptor[])deps.toArray( new DependencyDescriptor[ deps.size() ] );
+ return (DependencyDescriptor[])deps.toArray(
+ new DependencyDescriptor[ deps.size() ] );
}
private DependencyDescriptor getDependency( DocletTag tag )
@@ -147,20 +158,21 @@
/**
* Set the value of the composition method.
*/
- private void setMethod()
+ private void setMethods()
{
- m_method = getLifecycleMethod( "compose", COMPONENT_MANAGER_CLASS );
- if( null == m_method )
+ m_methods = getLifecycleMethods( "compose", COMPONENT_MANAGER_CLASS );
+ if( m_methods.length == 0 )
{
- m_method = getLifecycleMethod( "service", SERVICE_MANAGER_CLASS );
+ m_methods = getLifecycleMethods( "service", SERVICE_MANAGER_CLASS );
}
}
/**
* Return the composition method.
+ * @return an array of methods
*/
- private JavaMethod getMethod()
+ private JavaMethod[] getMethods()
{
- return m_method;
+ return m_methods;
}
}
1.4 +29 -24 avalon-sandbox/merlin/meta-tools/src/java/org/apache/avalon/meta/info/builder/tags/LoggerTag.java
Index: LoggerTag.java
===================================================================
RCS file: /home/cvs/avalon-sandbox/merlin/meta-tools/src/java/org/apache/avalon/meta/info/builder/tags/LoggerTag.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- LoggerTag.java 16 Apr 2003 14:19:42 -0000 1.3
+++ LoggerTag.java 4 Jun 2003 09:28:45 -0000 1.4
@@ -49,13 +49,15 @@
package org.apache.avalon.meta.info.builder.tags;
-import java.util.ArrayList;
-import org.apache.avalon.meta.info.LoggerDescriptor;
import com.thoughtworks.qdox.model.DocletTag;
import com.thoughtworks.qdox.model.JavaClass;
import com.thoughtworks.qdox.model.JavaMethod;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Set;
+import org.apache.avalon.meta.info.LoggerDescriptor;
/**
* A doclet tag handler supporting 'logger' tags.
@@ -97,27 +99,30 @@
*/
public LoggerDescriptor[] getLoggers()
{
- final JavaMethod method =
- getLifecycleMethod( "enableLogging", LOGGER_CLASS );
-
- if( null == method )
- {
- return new LoggerDescriptor[0];
- }
- else
- {
- final ArrayList loggers = new ArrayList();
- final DocletTag[] tags = method.getTagsByName( getNS() + Tags.DELIMITER + KEY );
-
- for( int i = 0; i < tags.length; i++ )
- {
- final String name =
+ final JavaMethod[] methods =
+ getLifecycleMethods( "enableLogging", LOGGER_CLASS );
+ final ArrayList loggers = new ArrayList();
+ final Set marked = new HashSet( 10 );
+
+ for( int j = 0; j < methods.length; j++ )
+ {
+ final DocletTag[] tags =
+ methods[j].getTagsByName( getNS()
+ + Tags.DELIMITER + KEY );
+
+ for( int i = 0; i < tags.length; i++ )
+ {
+ final String name =
getNamedParameter( tags[ i ], NAME_PARAM, "" );
- final LoggerDescriptor logger =
- new LoggerDescriptor( name, null );
- loggers.add( logger );
- }
- return (LoggerDescriptor[])loggers.toArray( new LoggerDescriptor[ loggers.size() ] );
- }
+
+ if( !marked.contains( name ) ){
+ final LoggerDescriptor logger =
+ new LoggerDescriptor( name, null );
+ loggers.add( logger );
+ marked.add( name );
+ }
+ }
+ }
+ return (LoggerDescriptor[])loggers.toArray( new LoggerDescriptor[ loggers.size() ] );
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: cvs-unsubscribe@avalon.apache.org
For additional commands, e-mail: cvs-help@avalon.apache.org