Skip to content

Commit

Permalink
WELD-2694 - Replace BeanManagerAccess hack with propagation of BM ref…
Browse files Browse the repository at this point in the history
…erence throughout the module.
  • Loading branch information
manovotn committed Jan 19, 2022
1 parent 9538a3b commit 1970064
Show file tree
Hide file tree
Showing 41 changed files with 477 additions and 453 deletions.
Expand Up @@ -2,18 +2,26 @@

import jakarta.enterprise.inject.build.compatible.spi.AnnotationBuilder;
import jakarta.enterprise.inject.build.compatible.spi.AnnotationBuilderFactory;
import jakarta.enterprise.inject.spi.BeanManager;
import jakarta.enterprise.lang.model.declarations.ClassInfo;

import java.lang.annotation.Annotation;

final class AnnotationBuilderFactoryImpl implements AnnotationBuilderFactory {

private final BeanManager bm;

public AnnotationBuilderFactoryImpl(BeanManager bm) {
this.bm = bm;
}

@Override
public AnnotationBuilder create(Class<? extends Annotation> annotationType) {
return new AnnotationBuilderImpl(annotationType);
return new AnnotationBuilderImpl(annotationType, bm);
}

@Override
public AnnotationBuilder create(ClassInfo annotationType) {
return new AnnotationBuilderImpl((Class<? extends Annotation>) ((ClassInfoImpl) annotationType).cdiDeclaration.getJavaClass());
return new AnnotationBuilderImpl((Class<? extends Annotation>) ((ClassInfoImpl) annotationType).cdiDeclaration.getJavaClass(), bm);
}
}
@@ -1,6 +1,7 @@
package org.jboss.weld.lite.extension.translator;

import jakarta.enterprise.inject.build.compatible.spi.AnnotationBuilder;
import jakarta.enterprise.inject.spi.BeanManager;
import jakarta.enterprise.lang.model.AnnotationInfo;
import jakarta.enterprise.lang.model.AnnotationMember;
import jakarta.enterprise.lang.model.declarations.ClassInfo;
Expand All @@ -15,9 +16,11 @@
class AnnotationBuilderImpl implements AnnotationBuilder {
private final Class<? extends Annotation> clazz;
private final Map<String, AnnotationMember> members = new HashMap<>();
private final BeanManager bm;

AnnotationBuilderImpl(Class<? extends Annotation> clazz) {
AnnotationBuilderImpl(Class<? extends Annotation> clazz, BeanManager bm) {
this.clazz = clazz;
this.bm = bm;
}

@Override
Expand All @@ -28,128 +31,128 @@ public AnnotationBuilder member(String name, AnnotationMember value) {

@Override
public AnnotationBuilder member(String name, boolean value) {
members.put(name, new AnnotationMemberImpl(value));
members.put(name, new AnnotationMemberImpl(value, bm));
return this;
}

@Override
public AnnotationBuilder member(String name, boolean[] values) {
members.put(name, new AnnotationMemberImpl(values));
members.put(name, new AnnotationMemberImpl(values, bm));
return this;
}

@Override
public AnnotationBuilder member(String name, byte value) {
members.put(name, new AnnotationMemberImpl(value));
members.put(name, new AnnotationMemberImpl(value, bm));
return this;
}

@Override
public AnnotationBuilder member(String name, byte[] values) {
members.put(name, new AnnotationMemberImpl(values));
members.put(name, new AnnotationMemberImpl(values, bm));
return this;
}

@Override
public AnnotationBuilder member(String name, short value) {
members.put(name, new AnnotationMemberImpl(value));
members.put(name, new AnnotationMemberImpl(value, bm));
return this;
}

@Override
public AnnotationBuilder member(String name, short[] values) {
members.put(name, new AnnotationMemberImpl(values));
members.put(name, new AnnotationMemberImpl(values, bm));
return this;
}

@Override
public AnnotationBuilder member(String name, int value) {
members.put(name, new AnnotationMemberImpl(value));
members.put(name, new AnnotationMemberImpl(value, bm));
return this;
}

@Override
public AnnotationBuilder member(String name, int[] values) {
members.put(name, new AnnotationMemberImpl(values));
members.put(name, new AnnotationMemberImpl(values, bm));
return this;
}

@Override
public AnnotationBuilder member(String name, long value) {
members.put(name, new AnnotationMemberImpl(value));
members.put(name, new AnnotationMemberImpl(value, bm));
return this;
}

@Override
public AnnotationBuilder member(String name, long[] values) {
members.put(name, new AnnotationMemberImpl(values));
members.put(name, new AnnotationMemberImpl(values, bm));
return this;
}

@Override
public AnnotationBuilder member(String name, float value) {
members.put(name, new AnnotationMemberImpl(value));
members.put(name, new AnnotationMemberImpl(value, bm));
return this;
}

@Override
public AnnotationBuilder member(String name, float[] values) {
members.put(name, new AnnotationMemberImpl(values));
members.put(name, new AnnotationMemberImpl(values, bm));
return this;
}

@Override
public AnnotationBuilder member(String name, double value) {
members.put(name, new AnnotationMemberImpl(value));
members.put(name, new AnnotationMemberImpl(value, bm));
return this;
}

@Override
public AnnotationBuilder member(String name, double[] values) {
members.put(name, new AnnotationMemberImpl(values));
members.put(name, new AnnotationMemberImpl(values, bm));
return this;
}

@Override
public AnnotationBuilder member(String name, char value) {
members.put(name, new AnnotationMemberImpl(value));
members.put(name, new AnnotationMemberImpl(value, bm));
return this;
}

@Override
public AnnotationBuilder member(String name, char[] values) {
members.put(name, new AnnotationMemberImpl(values));
members.put(name, new AnnotationMemberImpl(values, bm));
return this;
}

@Override
public AnnotationBuilder member(String name, String value) {
members.put(name, new AnnotationMemberImpl(value));
members.put(name, new AnnotationMemberImpl(value, bm));
return this;
}

@Override
public AnnotationBuilder member(String name, String[] values) {
members.put(name, new AnnotationMemberImpl(values));
members.put(name, new AnnotationMemberImpl(values, bm));
return this;
}

@Override
public AnnotationBuilder member(String name, Enum<?> value) {
members.put(name, new AnnotationMemberImpl(value));
members.put(name, new AnnotationMemberImpl(value, bm));
return this;
}

@Override
public AnnotationBuilder member(String name, Enum<?>[] values) {
members.put(name, new AnnotationMemberImpl(values));
members.put(name, new AnnotationMemberImpl(values, bm));
return this;
}

@Override
public AnnotationBuilder member(String name, Class<? extends Enum<?>> enumType, String enumValue) {
Enum<?> enumConstant = Enum.valueOf((Class) enumType, enumValue);
members.put(name, new AnnotationMemberImpl(enumConstant));
members.put(name, new AnnotationMemberImpl(enumConstant, bm));
return this;
}

Expand All @@ -159,15 +162,15 @@ public AnnotationBuilder member(String name, Class<? extends Enum<?>> enumType,
for (int i = 0; i < enumValues.length; i++) {
enumConstants[i] = Enum.valueOf((Class) enumType, enumValues[i]);
}
members.put(name, new AnnotationMemberImpl(enumConstants));
members.put(name, new AnnotationMemberImpl(enumConstants, bm));
return this;
}

@Override
public AnnotationBuilder member(String name, ClassInfo enumType, String enumValue) {
Class enumClass = ((ClassInfoImpl) enumType).cdiDeclaration.getJavaClass();
Enum<?> enumConstant = Enum.valueOf(enumClass, enumValue);
members.put(name, new AnnotationMemberImpl(enumConstant));
members.put(name, new AnnotationMemberImpl(enumConstant, bm));
return this;
}

Expand All @@ -178,26 +181,26 @@ public AnnotationBuilder member(String name, ClassInfo enumType, String[] enumVa
for (int i = 0; i < enumValues.length; i++) {
enumConstants[i] = Enum.valueOf(enumClass, enumValues[i]);
}
members.put(name, new AnnotationMemberImpl(enumConstants));
members.put(name, new AnnotationMemberImpl(enumConstants, bm));
return this;
}

@Override
public AnnotationBuilder member(String name, Class<?> value) {
members.put(name, new AnnotationMemberImpl(value));
members.put(name, new AnnotationMemberImpl(value, bm));
return this;
}

@Override
public AnnotationBuilder member(String name, Class<?>[] values) {
members.put(name, new AnnotationMemberImpl(values));
members.put(name, new AnnotationMemberImpl(values, bm));
return this;
}

@Override
public AnnotationBuilder member(String name, ClassInfo value) {
Class<?> clazz = ((ClassInfoImpl) value).cdiDeclaration.getJavaClass();
members.put(name, new AnnotationMemberImpl(clazz));
members.put(name, new AnnotationMemberImpl(clazz, bm));
return this;
}

Expand All @@ -207,7 +210,7 @@ public AnnotationBuilder member(String name, ClassInfo[] values) {
for (int i = 0; i < values.length; i++) {
classes[i] = ((ClassInfoImpl) values[i]).cdiDeclaration.getJavaClass();
}
members.put(name, new AnnotationMemberImpl(classes));
members.put(name, new AnnotationMemberImpl(classes, bm));
return this;
}

Expand Down Expand Up @@ -237,7 +240,7 @@ private Class<?> validateType(Type type) {
@Override
public AnnotationBuilder member(String name, Type value) {
Class<?> clazz = validateType(value);
members.put(name, new AnnotationMemberImpl(clazz));
members.put(name, new AnnotationMemberImpl(clazz, bm));
return this;
}

Expand All @@ -247,14 +250,14 @@ public AnnotationBuilder member(String name, Type[] values) {
for (int i = 0; i < values.length; i++) {
classes[i] = validateType(values[i]);
}
members.put(name, new AnnotationMemberImpl(classes));
members.put(name, new AnnotationMemberImpl(classes, bm));
return this;
}

@Override
public AnnotationBuilder member(String name, AnnotationInfo value) {
Annotation annotation = ((AnnotationInfoImpl) value).annotation;
members.put(name, new AnnotationMemberImpl(annotation));
members.put(name, new AnnotationMemberImpl(annotation, bm));
return this;
}

Expand All @@ -264,25 +267,25 @@ public AnnotationBuilder member(String name, AnnotationInfo[] values) {
for (int i = 0; i < values.length; i++) {
annotations[i] = ((AnnotationInfoImpl) values[i]).annotation;
}
members.put(name, new AnnotationMemberImpl(annotations));
members.put(name, new AnnotationMemberImpl(annotations, bm));
return this;
}

@Override
public AnnotationBuilder member(String name, Annotation value) {
members.put(name, new AnnotationMemberImpl(value));
members.put(name, new AnnotationMemberImpl(value, bm));
return this;
}

@Override
public AnnotationBuilder member(String name, Annotation[] values) {
members.put(name, new AnnotationMemberImpl(values));
members.put(name, new AnnotationMemberImpl(values, bm));
return this;
}

@Override
public AnnotationInfo build() {
Annotation annotation = AnnotationProxy.create(clazz, members);
return new AnnotationInfoImpl(annotation);
return new AnnotationInfoImpl(annotation, bm);
}
}
@@ -1,5 +1,6 @@
package org.jboss.weld.lite.extension.translator;

import jakarta.enterprise.inject.spi.BeanManager;
import jakarta.enterprise.lang.model.AnnotationInfo;
import jakarta.enterprise.lang.model.AnnotationMember;
import jakarta.enterprise.lang.model.declarations.ClassInfo;
Expand All @@ -12,14 +13,16 @@

class AnnotationInfoImpl implements AnnotationInfo {
final Annotation annotation;
final BeanManager bm;

AnnotationInfoImpl(Annotation annotation) {
AnnotationInfoImpl(Annotation annotation, BeanManager bm) {
this.annotation = annotation;
this.bm = bm;
}

@Override
public ClassInfo declaration() {
return new ClassInfoImpl(BeanManagerAccess.createAnnotatedType(annotation.annotationType()));
return new ClassInfoImpl(bm.createAnnotatedType(annotation.annotationType()), bm);
}

@Override
Expand All @@ -38,7 +41,7 @@ public AnnotationMember member(String name) {
java.lang.reflect.Method member = annotation.annotationType().getDeclaredMethod(name);
member.setAccessible(true); // TODO!
Object value = member.invoke(annotation);
return new AnnotationMemberImpl(value);
return new AnnotationMemberImpl(value, bm);
} catch (NoSuchMethodException e) {
return null;
} catch (ReflectiveOperationException e) {
Expand All @@ -55,7 +58,7 @@ public Map<String, AnnotationMember> members() {
member.setAccessible(true); // TODO!
String name = member.getName();
Object value = member.invoke(annotation);
result.put(name, new AnnotationMemberImpl(value));
result.put(name, new AnnotationMemberImpl(value, bm));
}
return result;
} catch (ReflectiveOperationException e) {
Expand Down

0 comments on commit 1970064

Please sign in to comment.