Browse Source

Made class package access until such a time when it is needed outside package

Added support for reflection picking up typed adders


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270967 13f79535-47bb-0310-9956-ffa450edef68
master
Peter Donald 23 years ago
parent
commit
ff8b6709bc
1 changed files with 52 additions and 22 deletions
  1. +52
    -22
      proposal/myrmidon/src/java/org/apache/myrmidon/components/configurer/DefaultObjectConfigurer.java

+ 52
- 22
proposal/myrmidon/src/java/org/apache/myrmidon/components/configurer/DefaultObjectConfigurer.java View File

@@ -20,6 +20,7 @@ import java.util.Set;
import org.apache.avalon.excalibur.i18n.ResourceManager; import org.apache.avalon.excalibur.i18n.ResourceManager;
import org.apache.avalon.excalibur.i18n.Resources; import org.apache.avalon.excalibur.i18n.Resources;
import org.apache.avalon.framework.configuration.ConfigurationException; import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.configuration.Configuration;


/** /**
* An object configurer which uses reflection to determine the properties * An object configurer which uses reflection to determine the properties
@@ -28,7 +29,7 @@ import org.apache.avalon.framework.configuration.ConfigurationException;
* @author <a href="mailto:adammurdoch_ml@yahoo.com">Adam Murdoch</a> * @author <a href="mailto:adammurdoch_ml@yahoo.com">Adam Murdoch</a>
* @version $Revision$ $Date$ * @version $Revision$ $Date$
*/ */
public class DefaultObjectConfigurer
class DefaultObjectConfigurer
implements ObjectConfigurer implements ObjectConfigurer
{ {
private final static Resources REZ = private final static Resources REZ =
@@ -154,12 +155,24 @@ public class DefaultObjectConfigurer
{ {
final Method method = (Method)iterator.next(); final Method method = (Method)iterator.next();
final String methodName = method.getName(); final String methodName = method.getName();
if( method.getReturnType() != Void.TYPE
|| method.getParameterTypes().length != 1 )
if( Void.TYPE != method.getReturnType() ||
1 != method.getParameterTypes().length )
{ {
continue; continue;
} }


final boolean isTypedAdder = methodName.equals( "add" );

final Class paramType = method.getParameterTypes()[ 0 ];
if( isTypedAdder && !paramType.isInterface() )
{
final String message =
REZ.getString( "typed-adder-non-interface.error",
m_class.getName(),
paramType.getName() );
throw new ConfigurationException( message );
}

// TODO - un-hard-code this // TODO - un-hard-code this
if( methodName.equals( "addContent" ) ) if( methodName.equals( "addContent" ) )
{ {
@@ -169,12 +182,13 @@ public class DefaultObjectConfigurer
// Extract property name // Extract property name
final String propName = extractName( 3, methodName ); final String propName = extractName( 3, methodName );


final Class type = method.getParameterTypes()[ 0 ];
final Class type = paramType;


// Add to the adders map // Add to the adders map
if( adders.containsKey( propName ) ) if( adders.containsKey( propName ) )
{ {
final Class currentType = ( (Method)adders.get( propName ) ).getParameterTypes()[ 0 ];
final Method candidate = (Method)adders.get( propName );
final Class currentType = candidate.getParameterTypes()[ 0 ];


// Ditch the string version, if any // Ditch the string version, if any
if( currentType != String.class && type == String.class ) if( currentType != String.class && type == String.class )
@@ -183,7 +197,7 @@ public class DefaultObjectConfigurer
// the new method // the new method
continue; continue;
} }
if( currentType != String.class || type == String.class )
else if( currentType != String.class || type == String.class )
{ {
// Both are string, or both are not string // Both are string, or both are not string
final String message = final String message =
@@ -192,6 +206,16 @@ public class DefaultObjectConfigurer
propName ); propName );
throw new ConfigurationException( message ); throw new ConfigurationException( message );
} }
else if( isTypedAdder )
{
// Both are string, or both are not string
final String message =
REZ.getString( "multiple-typed-adder-methods-for-element.error",
m_class.getName(),
type.getName(),
currentType.getName() );
throw new ConfigurationException( message );
}


// Else, current type is string, and new type is not, so // Else, current type is string, and new type is not, so
// continue below, and overwrite the current method // continue below, and overwrite the current method
@@ -312,7 +336,7 @@ public class DefaultObjectConfigurer
final int size = m_allProps.size(); final int size = m_allProps.size();
for( int i = 0; i < size; i++ ) for( int i = 0; i < size; i++ )
{ {
if( defState.getCreatedObject( i ) != null )
if( null != defState.getCreatedObject( i ) )
{ {
final String message = REZ.getString( "pending-property-value.error" ); final String message = REZ.getString( "pending-property-value.error" );
throw new ConfigurationException( message ); throw new ConfigurationException( message );
@@ -325,32 +349,38 @@ public class DefaultObjectConfigurer
/** /**
* Returns a configurer for an element of this class. * Returns a configurer for an element of this class.
*/ */
public PropertyConfigurer getProperty( final String name ) throws NoSuchPropertyException
public PropertyConfigurer getProperty( final String name )
throws NoSuchPropertyException
{ {
final PropertyConfigurer prop = (PropertyConfigurer)m_props.get( name );
if( prop != null )
final PropertyConfigurer configurer = (PropertyConfigurer)m_props.get( name );
if( null != configurer )
{ {
return prop;
return configurer;
}
else
{
// Unknown property
final String message = REZ.getString( "unknown-property.error", m_class.getName(), name );
throw new NoSuchPropertyException( message );
} }

// Unknown property
final String message = REZ.getString( "unknown-property.error", m_class.getName(), name );
throw new NoSuchPropertyException( message );
} }


/** /**
* Returns a configurer for the content of this class. * Returns a configurer for the content of this class.
*/ */
public PropertyConfigurer getContentConfigurer() throws NoSuchPropertyException
public PropertyConfigurer getContentConfigurer()
throws NoSuchPropertyException
{ {
if( m_contentConfigurer != null )
if( null != m_contentConfigurer )
{ {
return m_contentConfigurer; return m_contentConfigurer;
} }

// Does not handle content
final String message = REZ.getString( "content-unsupported.error", m_class.getName() );
throw new NoSuchPropertyException( message );
else
{
// Does not handle content
final String message = REZ.getString( "content-unsupported.error", m_class.getName() );
throw new NoSuchPropertyException( message );
}
} }


/** /**
@@ -399,7 +429,7 @@ public class DefaultObjectConfigurer
final Method method = methods[ i ]; final Method method = methods[ i ];
final String methodName = method.getName(); final String methodName = method.getName();
if( Modifier.isStatic( method.getModifiers() ) || if( Modifier.isStatic( method.getModifiers() ) ||
methodName.length() <= prefixLen ||
methodName.length() < prefixLen ||
!methodName.startsWith( prefix ) ) !methodName.startsWith( prefix ) )
{ {
continue; continue;


Loading…
Cancel
Save