// support for @Named packages
Named namedFromPackage = null;
if (pkg != null && pkg.isAnnotationPresent(Named.class) && !annotatedType.isAnnotationPresent(Named.class))
{
builder = initializeBuilder(builder, annotatedType);
namedFromPackage = new NamedLiteral();
builder.addToClass(namedFromPackage);
}
FullyQualified qualifiedOnPackage = null;
if (pkg != null)
{
qualifiedOnPackage = pkg.getAnnotation(FullyQualified.class);
}
// support for @FullyQualified bean names on type (respect @Named if added by previous operation)
if ((namedFromPackage != null || annotatedType.isAnnotationPresent(Named.class)) &&
(qualifiedOnPackage != null || annotatedType.isAnnotationPresent(FullyQualified.class)))
{
builder = initializeBuilder(builder, annotatedType);
String name = (namedFromPackage != null ? namedFromPackage.value() : annotatedType.getAnnotation(Named.class).value());
if (name.length() == 0)
{
name = deriveBeanNameForType(javaClass);
}
Package targetPackage = resolveTargetPackage(annotatedType.getAnnotation(FullyQualified.class), qualifiedOnPackage, pkg);
builder.removeFromClass(Named.class); // add w/o remove was failing in cases
builder.addToClass(new NamedLiteral(qualify(targetPackage, name)));
}
// support for @Exact fields
// support for @FullyQualified @Named producer fields
for (AnnotatedField<? super X> f : annotatedType.getFields())
{
if (f.isAnnotationPresent(Exact.class))
{
Class<?> type = f.getAnnotation(Exact.class).value();
builder = initializeBuilder(builder, annotatedType);
builder.overrideFieldType(f, type);
}
if (f.isAnnotationPresent(Produces.class) && f.isAnnotationPresent(Named.class) &&
(qualifiedOnPackage != null || f.isAnnotationPresent(FullyQualified.class)))
{
String name = f.getAnnotation(Named.class).value();
if (name.length() == 0)
{
name = f.getJavaMember().getName();
}
Package targetPackage = resolveTargetPackage(f.getAnnotation(FullyQualified.class), qualifiedOnPackage, pkg);
builder.removeFromField(f, Named.class); // add w/o remove was failing in cases
builder.addToField(f, new NamedLiteral(qualify(targetPackage, name)));
}
}
// support for @Exact method parameters
// support for @FullyQualified @Named producer methods
for (AnnotatedMethod<? super X> m : annotatedType.getMethods())
{
for (AnnotatedParameter<? super X> p : m.getParameters())
{
if (p.isAnnotationPresent(Exact.class))
{
Class<?> type = p.getAnnotation(Exact.class).value();
builder = initializeBuilder(builder, annotatedType);
builder.overrideParameterType(p, type);
}
}
if (m.isAnnotationPresent(Produces.class) && m.isAnnotationPresent(Named.class) &&
(qualifiedOnPackage != null || m.isAnnotationPresent(FullyQualified.class)))
{
String name = m.getAnnotation(Named.class).value();
if (name.length() == 0)
{
if (Properties.isProperty(m.getJavaMember()))
{
name = Properties.createProperty(m.getJavaMember()).getName();
}
else
{
name = m.getJavaMember().getName();
}
}
Package targetPackage = resolveTargetPackage(m.getAnnotation(FullyQualified.class), qualifiedOnPackage, pkg);
builder.removeFromMethod(m, Named.class); // add w/o remove was failing in cases
builder.addToMethod(m, new NamedLiteral(qualify(targetPackage, name)));
}
}
// support for @Exact constructor parameters
for (AnnotatedConstructor<X> c : annotatedType.getConstructors())
{