From d54e1b2a2f0343d357b0b6039e445fe34d5be2fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hermann?= Date: Tue, 15 Oct 2024 09:00:14 -0400 Subject: [PATCH] merge InterceptedBeanMetadataProvider and DecoratedBeanMetadataProvider --- docs/src/main/asciidoc/cdi.adoc | 2 +- .../io/quarkus/arc/processor/BuiltinBean.java | 26 ++++------------- .../impl/DecoratedBeanMetadataProvider.java | 28 ------------------- ...rceptedDecoratedBeanMetadataProvider.java} | 5 ++-- 4 files changed, 10 insertions(+), 51 deletions(-) delete mode 100644 independent-projects/arc/runtime/src/main/java/io/quarkus/arc/impl/DecoratedBeanMetadataProvider.java rename independent-projects/arc/runtime/src/main/java/io/quarkus/arc/impl/{InterceptedBeanMetadataProvider.java => InterceptedDecoratedBeanMetadataProvider.java} (78%) diff --git a/docs/src/main/asciidoc/cdi.adoc b/docs/src/main/asciidoc/cdi.adoc index a33aa6b3d10e99..af713471d8a996 100644 --- a/docs/src/main/asciidoc/cdi.adoc +++ b/docs/src/main/asciidoc/cdi.adoc @@ -456,7 +456,7 @@ public class LargeTxAccount implements Account { <3> @Inject @Decorated - Bean delegateInfo; <5> + Bean delegateInfo; <5> @Inject diff --git a/independent-projects/arc/processor/src/main/java/io/quarkus/arc/processor/BuiltinBean.java b/independent-projects/arc/processor/src/main/java/io/quarkus/arc/processor/BuiltinBean.java index 07385dc3833d38..fe06e3dc1d6baa 100644 --- a/independent-projects/arc/processor/src/main/java/io/quarkus/arc/processor/BuiltinBean.java +++ b/independent-projects/arc/processor/src/main/java/io/quarkus/arc/processor/BuiltinBean.java @@ -23,11 +23,10 @@ import io.quarkus.arc.InjectableBean; import io.quarkus.arc.impl.BeanManagerProvider; import io.quarkus.arc.impl.BeanMetadataProvider; -import io.quarkus.arc.impl.DecoratedBeanMetadataProvider; import io.quarkus.arc.impl.EventProvider; import io.quarkus.arc.impl.InjectionPointProvider; import io.quarkus.arc.impl.InstanceProvider; -import io.quarkus.arc.impl.InterceptedBeanMetadataProvider; +import io.quarkus.arc.impl.InterceptedDecoratedBeanMetadataProvider; import io.quarkus.arc.impl.ListProvider; import io.quarkus.arc.impl.ResourceProvider; import io.quarkus.arc.processor.InjectionPointInfo.InjectionPointKind; @@ -53,12 +52,12 @@ public enum BuiltinBean { BEAN(BuiltinBean::generateBeanBytecode, (ip, names) -> cdiAndRawTypeMatches(ip, DotNames.BEAN, DotNames.INJECTABLE_BEAN) && ip.hasDefaultedQualifier(), BuiltinBean::validateBean, DotNames.BEAN), - INTERCEPTED_BEAN(BuiltinBean::generateInterceptedBeanBytecode, + INTERCEPTED_BEAN(BuiltinBean::generateInterceptedDecoratedBeanBytecode, (ip, names) -> cdiAndRawTypeMatches(ip, DotNames.BEAN, DotNames.INJECTABLE_BEAN) && !ip.hasDefaultedQualifier() && ip.getRequiredQualifiers().size() == 1 && ip.getRequiredQualifiers().iterator().next().name().equals(DotNames.INTERCEPTED), BuiltinBean::validateInterceptedBean, DotNames.BEAN), - DECORATED_BEAN(BuiltinBean::generateDecoratedBeanBytecode, + DECORATED_BEAN(BuiltinBean::generateInterceptedDecoratedBeanBytecode, (ip, names) -> cdiAndRawTypeMatches(ip, DotNames.BEAN, DotNames.INJECTABLE_BEAN) && !ip.hasDefaultedQualifier() && ip.getRequiredQualifiers().size() == 1 && ip.getRequiredQualifiers().iterator().next().name().equals(DotNames.DECORATED), @@ -314,9 +313,9 @@ private static void generateBeanBytecode(GeneratorContext ctx) { beanProviderSupplier); } - private static void generateInterceptedBeanBytecode(GeneratorContext ctx) { + private static void generateInterceptedDecoratedBeanBytecode(GeneratorContext ctx) { ResultHandle interceptedBeanMetadataProvider = ctx.constructor - .newInstance(MethodDescriptor.ofConstructor(InterceptedBeanMetadataProvider.class)); + .newInstance(MethodDescriptor.ofConstructor(InterceptedDecoratedBeanMetadataProvider.class)); ResultHandle interceptedBeanMetadataProviderSupplier = ctx.constructor.newInstance( MethodDescriptors.FIXED_VALUE_SUPPLIER_CONSTRUCTOR, interceptedBeanMetadataProvider); @@ -327,19 +326,6 @@ private static void generateInterceptedBeanBytecode(GeneratorContext ctx) { interceptedBeanMetadataProviderSupplier); } - private static void generateDecoratedBeanBytecode(GeneratorContext ctx) { - ResultHandle decoratedBeanMetadataProvider = ctx.constructor - .newInstance(MethodDescriptor.ofConstructor(DecoratedBeanMetadataProvider.class)); - - ResultHandle decoratedBeanMetadataProviderSupplier = ctx.constructor.newInstance( - MethodDescriptors.FIXED_VALUE_SUPPLIER_CONSTRUCTOR, decoratedBeanMetadataProvider); - ctx.constructor.writeInstanceField( - FieldDescriptor.of(ctx.clazzCreator.getClassName(), ctx.providerName, - Supplier.class.getName()), - ctx.constructor.getThis(), - decoratedBeanMetadataProviderSupplier); - } - private static void generateBeanManagerBytecode(GeneratorContext ctx) { ResultHandle beanManagerProvider = ctx.constructor.newInstance( MethodDescriptor.ofConstructor(BeanManagerProvider.class)); @@ -537,7 +523,7 @@ private static void validateInterceptedBean(ValidatorContext ctx) { private static void validateDecoratedBean(ValidatorContext ctx) { if (ctx.injectionTarget.kind() != InjectionTargetInfo.TargetKind.BEAN || !ctx.injectionTarget.asBean().isDecorator()) { - ctx.errors.accept(new DefinitionException("Only decorators can access intercepted bean metadata")); + ctx.errors.accept(new DefinitionException("Only decorators can access decorated bean metadata")); } } diff --git a/independent-projects/arc/runtime/src/main/java/io/quarkus/arc/impl/DecoratedBeanMetadataProvider.java b/independent-projects/arc/runtime/src/main/java/io/quarkus/arc/impl/DecoratedBeanMetadataProvider.java deleted file mode 100644 index dcdc8598138c9b..00000000000000 --- a/independent-projects/arc/runtime/src/main/java/io/quarkus/arc/impl/DecoratedBeanMetadataProvider.java +++ /dev/null @@ -1,28 +0,0 @@ -package io.quarkus.arc.impl; - -import static io.quarkus.arc.impl.CreationalContextImpl.unwrap; - -import jakarta.enterprise.context.spi.Contextual; -import jakarta.enterprise.context.spi.CreationalContext; -import jakarta.enterprise.inject.Decorated; -import jakarta.enterprise.inject.spi.Bean; - -import io.quarkus.arc.InjectableReferenceProvider; - -/** - * {@link Decorated} {@link Bean} metadata provider. - */ -public class DecoratedBeanMetadataProvider implements InjectableReferenceProvider> { - - @Override - public Contextual get(CreationalContext> creationalContext) { - // First attempt to obtain the creational context of the decorator bean and then the creational context of the decorated bean - CreationalContextImpl parent = unwrap(creationalContext).getParent(); - if (parent != null) { - parent = parent.getParent(); - return parent != null ? parent.getContextual() : null; - } - return null; - } - -} diff --git a/independent-projects/arc/runtime/src/main/java/io/quarkus/arc/impl/InterceptedBeanMetadataProvider.java b/independent-projects/arc/runtime/src/main/java/io/quarkus/arc/impl/InterceptedDecoratedBeanMetadataProvider.java similarity index 78% rename from independent-projects/arc/runtime/src/main/java/io/quarkus/arc/impl/InterceptedBeanMetadataProvider.java rename to independent-projects/arc/runtime/src/main/java/io/quarkus/arc/impl/InterceptedDecoratedBeanMetadataProvider.java index 1b919ce10860dd..2cc995776260e8 100644 --- a/independent-projects/arc/runtime/src/main/java/io/quarkus/arc/impl/InterceptedBeanMetadataProvider.java +++ b/independent-projects/arc/runtime/src/main/java/io/quarkus/arc/impl/InterceptedDecoratedBeanMetadataProvider.java @@ -4,15 +4,16 @@ import jakarta.enterprise.context.spi.Contextual; import jakarta.enterprise.context.spi.CreationalContext; +import jakarta.enterprise.inject.Decorated; import jakarta.enterprise.inject.Intercepted; import jakarta.enterprise.inject.spi.Bean; import io.quarkus.arc.InjectableReferenceProvider; /** - * {@link Intercepted} {@link Bean} metadata provider. + * {@link Intercepted} {@link Decorated} {@link Bean} metadata provider. */ -public class InterceptedBeanMetadataProvider implements InjectableReferenceProvider> { +public class InterceptedDecoratedBeanMetadataProvider implements InjectableReferenceProvider> { @Override public Contextual get(CreationalContext> creationalContext) {