JBoss development,
A new message was posted in the thread "AnnotatedElementMetaDataLoader component
metadata optimization":
http://community.jboss.org/message/526634#526634
Author : Kabir Khan
Profile :
http://community.jboss.org/people/kabir.khan@jboss.com
Message:
--------------------------------------------------------------
An alternative to changing the tests (although I think we should agree once and for all
what the getComponentMetadataRetrieval() should return) is to return a singleton:
public MetaDataRetrieval getComponentMetaDataRetrieval(Signature signature)
{
if (signature == null)
return null;
if (annotated instanceof Class)
{
Class<?> clazz = Class.class.cast(annotated);
if (signature instanceof ConstructorSignature)
{
ConstructorSignature constructorSignature = (ConstructorSignature) signature;
Constructor<?> constructor = constructorSignature.getConstructor();
if (constructor == null)
constructor = SecurityActions.findConstructor(clazz,
signature.getParametersTypes(clazz));
if (constructor == null)
{
if (log.isTraceEnabled())
log.trace("Constructor with signature " + signature + "
does not exist on class " + clazz.getName());
return null;
}
if (constructor.getAnnotations().length == 0)
return NullAnnotatedElementMetaDataLoader.INSTANCE;
return new AnnotatedElementMetaDataLoader(constructor);
}
//Same for fields, methods, parameters
}
private static class NullAnnotatedElementMetaDataLoader implements MetaDataRetrieval
{
final static NullAnnotatedElementMetaDataLoader INSTANCE = new
NullAnnotatedElementMetaDataLoader();
final static ScopeKey NULL_SCOPE_KEY = new ScopeKey(new
Scope(CommonLevels.JOINPOINT, INSTANCE));
final static BasicAnnotationsItem NO_ANNOTATIONS_ITEM = new
BasicAnnotationsItem(null, new AnnotationItem[0]);
final static BasicMetaDatasItem NO_METADATAS_ITEM = new BasicMetaDatasItem(null, new
MetaDataItem[0]);
public MetaDataRetrieval getComponentMetaDataRetrieval(Signature signature)
{
return INSTANCE;
}
public ScopeKey getScope()
{
return NULL_SCOPE_KEY;
}
public MetaDataRetrieval getScopedRetrieval(ScopeLevel level)
{
return INSTANCE;
}
public ValidTime getValidTime()
{
return null;
}
public boolean isEmpty()
{
return true;
}
public <T extends Annotation> AnnotationItem<T>
retrieveAnnotation(Class<T> annotationType)
{
return null;
}
public AnnotationsItem retrieveAnnotations()
{
return NO_ANNOTATIONS_ITEM;
}
public AnnotationsItem retrieveAnnotationsAnnotatedWith(Class<? extends
Annotation> meta)
{
return NO_ANNOTATIONS_ITEM;
}
public AnnotationsItem retrieveLocalAnnotations()
{
return NO_ANNOTATIONS_ITEM;
}
public MetaDatasItem retrieveLocalMetaData()
{
return NO_METADATAS_ITEM;
}
public MetaDatasItem retrieveMetaData()
{
return NO_METADATAS_ITEM;
}
public <T> MetaDataItem<T> retrieveMetaData(Class<T> type)
{
return null;
}
public MetaDataItem<?> retrieveMetaData(String name)
{
return null;
}
}
I am not sure about the ValidTime, and the ScopeKey seems to not be used, but all tests in
mdr pass.
--------------------------------------------------------------
To reply to this message visit the message page:
http://community.jboss.org/message/526634#526634