From 38a60de226a826c66bf676f22bbaee2b3b7b9ab4 Mon Sep 17 00:00:00 2001 From: Martin Kouba Date: Mon, 10 Sep 2018 15:56:13 +0200 Subject: [PATCH] Arc - make use of ReflectionRegistration in SubclassGenerator - MetricsProcessor cleanup --- .../arc/deployment/ArcAnnotationProcessor.java | 1 - .../jboss/protean/arc/processor/BeanProcessor.java | 7 ++++--- .../protean/arc/processor/SubclassGenerator.java | 11 +++++++---- .../protean/arc/processor/SubclassGeneratorTest.java | 2 +- .../org/jboss/shamrock/metrics/MetricsProcessor.java | 10 +--------- 5 files changed, 13 insertions(+), 18 deletions(-) diff --git a/arc/deployment/src/main/java/org/jboss/shamrock/arc/deployment/ArcAnnotationProcessor.java b/arc/deployment/src/main/java/org/jboss/shamrock/arc/deployment/ArcAnnotationProcessor.java index fa1f582ac..08f0742a3 100644 --- a/arc/deployment/src/main/java/org/jboss/shamrock/arc/deployment/ArcAnnotationProcessor.java +++ b/arc/deployment/src/main/java/org/jboss/shamrock/arc/deployment/ArcAnnotationProcessor.java @@ -37,7 +37,6 @@ import io.smallrye.config.inject.ConfigProducer; public class ArcAnnotationProcessor implements ResourceProcessor { - private static final DotName INJECT = DotName.createSimple("javax.inject.Inject"); @Inject BeanDeployment beanDeployment; diff --git a/ext/arc/processor/src/main/java/org/jboss/protean/arc/processor/BeanProcessor.java b/ext/arc/processor/src/main/java/org/jboss/protean/arc/processor/BeanProcessor.java index 7b79002a0..a83f9abaf 100644 --- a/ext/arc/processor/src/main/java/org/jboss/protean/arc/processor/BeanProcessor.java +++ b/ext/arc/processor/src/main/java/org/jboss/protean/arc/processor/BeanProcessor.java @@ -53,7 +53,7 @@ public class BeanProcessor { private final ReflectionRegistration reflectionRegistration; private BeanProcessor(String name, IndexView index, Collection additionalBeanDefiningAnnotations, ResourceOutput output, - boolean sharedAnnotationLiterals, ReflectionRegistration reflectionRegistration) { + boolean sharedAnnotationLiterals, ReflectionRegistration reflectionRegistration) { this.reflectionRegistration = reflectionRegistration; Objects.requireNonNull(output); this.name = name; @@ -106,7 +106,7 @@ public class BeanProcessor { } beanToGeneratedName.put(bean, resource.getName()); if (bean.isSubclassRequired()) { - resources.addAll(subclassGenerator.generate(bean, resource.getFullyQualifiedName())); + resources.addAll(subclassGenerator.generate(bean, resource.getFullyQualifiedName(), reflectionRegistration)); } } } @@ -201,7 +201,8 @@ public class BeanProcessor { } public BeanProcessor build() { - return new BeanProcessor(name, addBuiltinQualifiersIfNeeded(index), additionalBeanDefiningAnnotations, output, sharedAnnotationLiterals, reflectionRegistration); + return new BeanProcessor(name, addBuiltinQualifiersIfNeeded(index), additionalBeanDefiningAnnotations, output, sharedAnnotationLiterals, + reflectionRegistration); } } diff --git a/ext/arc/processor/src/main/java/org/jboss/protean/arc/processor/SubclassGenerator.java b/ext/arc/processor/src/main/java/org/jboss/protean/arc/processor/SubclassGenerator.java index de45e4012..e8624a24a 100644 --- a/ext/arc/processor/src/main/java/org/jboss/protean/arc/processor/SubclassGenerator.java +++ b/ext/arc/processor/src/main/java/org/jboss/protean/arc/processor/SubclassGenerator.java @@ -61,7 +61,7 @@ public class SubclassGenerator extends AbstractGenerator { * @param beanClassName Fully qualified class name * @return a java file */ - Collection generate(BeanInfo bean, String beanClassName) { + Collection generate(BeanInfo bean, String beanClassName, ReflectionRegistration reflectionRegistration) { ResourceClassOutput classOutput = new ResourceClassOutput(); @@ -75,14 +75,14 @@ public class SubclassGenerator extends AbstractGenerator { ClassCreator subclass = ClassCreator.builder().classOutput(classOutput).className(generatedName).superClass(providerTypeName).interfaces(Subclass.class) .build(); - FieldDescriptor preDestroyField = createConstructor(bean, subclass, providerTypeName); + FieldDescriptor preDestroyField = createConstructor(bean, subclass, providerTypeName, reflectionRegistration); createDestroy(subclass, preDestroyField); subclass.close(); return classOutput.getResources(); } - protected FieldDescriptor createConstructor(BeanInfo bean, ClassCreator subclass, String providerTypeName) { + protected FieldDescriptor createConstructor(BeanInfo bean, ClassCreator subclass, String providerTypeName, ReflectionRegistration reflectionRegistration) { List parameterTypes = new ArrayList<>(); @@ -100,7 +100,7 @@ public class SubclassGenerator extends AbstractGenerator { // Interceptor providers List boundInterceptors = bean.getBoundInterceptors(); - for (InterceptorInfo interceptor : boundInterceptors) { + for (int j = 0; j < boundInterceptors.size(); j++) { parameterTypes.add(InjectableInterceptor.class.getName()); } @@ -203,6 +203,9 @@ public class SubclassGenerator extends AbstractGenerator { MethodDescriptor.ofMethod(Reflections.class, "findMethod", Method.class, Class.class, String.class, Class[].class), paramsHandles); constructor.invokeInterfaceMethod(MethodDescriptor.ofMethod(Map.class, "put", Object.class, Object.class, Object.class), methodsHandle, methodIdHandle, methodHandle); + + // Needed when running on substrate VM + reflectionRegistration.registerMethod(method); // Finally create the forwarding method createForwardingMethod(method, methodId, subclass, providerTypeName, interceptorChainsField.getFieldDescriptor(), diff --git a/ext/arc/processor/src/test/java/org/jboss/protean/arc/processor/SubclassGeneratorTest.java b/ext/arc/processor/src/test/java/org/jboss/protean/arc/processor/SubclassGeneratorTest.java index 598ba15d9..ea184bc04 100644 --- a/ext/arc/processor/src/test/java/org/jboss/protean/arc/processor/SubclassGeneratorTest.java +++ b/ext/arc/processor/src/test/java/org/jboss/protean/arc/processor/SubclassGeneratorTest.java @@ -44,7 +44,7 @@ public class SubclassGeneratorTest { BeanInfo simpleBean = deployment.getBeans().stream() .filter(b -> b.getTarget().asClass().name().equals(DotName.createSimple(SimpleBean.class.getName()))).findAny().get(); for (Resource resource : beanGenerator.generate(simpleBean, new AnnotationLiteralProcessor(BeanProcessor.DEFAULT_NAME, true), ReflectionRegistration.NOOP)) { - generator.generate(simpleBean, resource.getFullyQualifiedName()); + generator.generate(simpleBean, resource.getFullyQualifiedName(), ReflectionRegistration.NOOP); } // TODO test generated bytecode } diff --git a/metrics/deployment/src/main/java/org/jboss/shamrock/metrics/MetricsProcessor.java b/metrics/deployment/src/main/java/org/jboss/shamrock/metrics/MetricsProcessor.java index 1036f1be4..1f9b01880 100644 --- a/metrics/deployment/src/main/java/org/jboss/shamrock/metrics/MetricsProcessor.java +++ b/metrics/deployment/src/main/java/org/jboss/shamrock/metrics/MetricsProcessor.java @@ -36,8 +36,6 @@ import io.smallrye.metrics.interceptors.MetricsBinding; import io.smallrye.metrics.interceptors.MetricsInterceptor; import io.smallrye.metrics.interceptors.TimedInterceptor; -//import io.smallrye.health.SmallRyeHealthReporter; - public class MetricsProcessor implements ResourceProcessor { @@ -69,10 +67,6 @@ public class MetricsProcessor implements ResourceProcessor { TimedInterceptor.class); beanDeployment.addAdditionalBean(MetricsRequestHandler.class, MetricsServlet.class); - //weldDeployment.addInterceptor(MetricsInterceptor.class); - //weldDeployment.addInterceptor(MeteredInterceptor.class); - //weldDeployment.addInterceptor(CountedInterceptor.class); - //weldDeployment.addInterceptor(TimedInterceptor.class); processorContext.addReflectiveClass(false, false, Counted.class.getName(), MetricsBinding.class.getName()); @@ -88,7 +82,7 @@ public class MetricsProcessor implements ResourceProcessor { for (AnnotationInstance anno : annos) { AnnotationTarget target = anno.target(); - // TODO ugly hack to exclude metrics interceptors + // We need to exclude metrics interceptors if (Kind.CLASS.equals(target.kind()) && target.asClass().classAnnotations().stream().anyMatch(a -> a.name().equals(DotName.createSimple(Interceptor.class.getName())))) { continue; @@ -103,8 +97,6 @@ public class MetricsProcessor implements ResourceProcessor { metrics.registerCounted(classInfo.name().toString(), name); - - processorContext.addReflectiveClass(true, false, classInfo.name().toString()); } }