This is an automated email from the ASF dual-hosted git repository. mattsicker pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit c1c8b7e19326e345d4a296124f2522476906f8cb Author: Matt Sicker <[email protected]> AuthorDate: Tue Jan 2 17:34:04 2024 -0600 Reduce amount of delegation in ResolvableKey --- .../util/LegacyPluginAttributeFactoryResolver.java | 3 ++- .../LegacyPluginBuilderAttributeFactoryResolver.java | 3 ++- .../log4j/core/config/plugins/util/package-info.java | 2 ++ .../log4j/plugins/di/DefaultInstanceFactory.java | 11 ++++++----- .../di/resolver/AbstractAttributeFactoryResolver.java | 5 +++-- .../di/resolver/AbstractPluginFactoryResolver.java | 3 +-- .../plugins/di/resolver/OptionalFactoryResolver.java | 3 ++- .../di/resolver/PluginAttributeFactoryResolver.java | 3 ++- .../resolver/PluginBuilderAttributeFactoryResolver.java | 3 ++- .../di/resolver/PluginElementFactoryResolver.java | 3 ++- .../plugins/di/resolver/PluginListFactoryResolver.java | 2 +- .../di/resolver/PluginListSupplierFactoryResolver.java | 2 +- .../plugins/di/resolver/PluginMapFactoryResolver.java | 2 +- .../di/resolver/PluginMapSupplierFactoryResolver.java | 2 +- .../di/resolver/PluginOptionalFactoryResolver.java | 2 +- .../resolver/PluginOptionalSupplierFactoryResolver.java | 2 +- .../plugins/di/resolver/PluginSetFactoryResolver.java | 2 +- .../di/resolver/PluginSetSupplierFactoryResolver.java | 2 +- .../di/resolver/PluginStreamFactoryResolver.java | 2 +- .../resolver/PluginStreamPluginTypeFactoryResolver.java | 5 ++--- .../resolver/PluginStreamSupplierFactoryResolver.java | 2 +- .../plugins/di/resolver/PluginTypeFactoryResolver.java | 2 +- .../plugins/di/resolver/SupplierFactoryResolver.java | 7 ++++--- .../logging/log4j/plugins/di/resolver/package-info.java | 2 ++ .../logging/log4j/plugins/di/spi/ResolvableKey.java | 17 ++++++----------- 25 files changed, 49 insertions(+), 43 deletions(-) diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/LegacyPluginAttributeFactoryResolver.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/LegacyPluginAttributeFactoryResolver.java index 41c7b02273..c76fa65956 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/LegacyPluginAttributeFactoryResolver.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/LegacyPluginAttributeFactoryResolver.java @@ -20,6 +20,7 @@ import java.lang.reflect.Type; import java.util.Map; import java.util.function.Function; import org.apache.logging.log4j.core.config.plugins.PluginAttribute; +import org.apache.logging.log4j.lang.Nullable; import org.apache.logging.log4j.plugins.convert.TypeConverter; import org.apache.logging.log4j.plugins.di.resolver.AbstractAttributeFactoryResolver; import org.apache.logging.log4j.plugins.di.spi.StringValueResolver; @@ -57,7 +58,7 @@ public class LegacyPluginAttributeFactoryResolver<T> extends AbstractAttributeFa } @Override - protected T getDefaultValue( + protected @Nullable T getDefaultValue( final PluginAttribute annotation, final StringValueResolver resolver, final Type type, diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/LegacyPluginBuilderAttributeFactoryResolver.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/LegacyPluginBuilderAttributeFactoryResolver.java index 691353fd8c..4bc1b48fc3 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/LegacyPluginBuilderAttributeFactoryResolver.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/LegacyPluginBuilderAttributeFactoryResolver.java @@ -18,6 +18,7 @@ package org.apache.logging.log4j.core.config.plugins.util; import java.lang.reflect.Type; import org.apache.logging.log4j.core.config.plugins.PluginBuilderAttribute; +import org.apache.logging.log4j.lang.Nullable; import org.apache.logging.log4j.plugins.convert.TypeConverter; import org.apache.logging.log4j.plugins.di.resolver.AbstractAttributeFactoryResolver; import org.apache.logging.log4j.plugins.di.spi.StringValueResolver; @@ -35,7 +36,7 @@ public class LegacyPluginBuilderAttributeFactoryResolver<T> } @Override - protected T getDefaultValue( + protected @Nullable T getDefaultValue( final PluginBuilderAttribute annotation, final StringValueResolver resolver, final Type type, diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/package-info.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/package-info.java index c2c42b8d5b..7a1212719e 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/package-info.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/package-info.java @@ -20,7 +20,9 @@ */ @Export @Version("2.20.2") +@NullMarked package org.apache.logging.log4j.core.config.plugins.util; +import org.apache.logging.log4j.lang.NullMarked; import org.osgi.annotation.bundle.Export; import org.osgi.annotation.versioning.Version; diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/DefaultInstanceFactory.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/DefaultInstanceFactory.java index c025f36e6c..f0d95ba9bc 100644 --- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/DefaultInstanceFactory.java +++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/DefaultInstanceFactory.java @@ -150,10 +150,10 @@ public class DefaultInstanceFactory implements ConfigurableInstanceFactory { } protected <T> @Nullable T getInjectableInstance(final ResolvableKey<T> resolvableKey) { - final Class<T> rawType = resolvableKey.rawType(); - validate(rawType, resolvableKey.name(), rawType); - final Executable factory = BeanUtils.getInjectableFactory(resolvableKey); final Key<T> key = resolvableKey.key(); + final Class<T> rawType = key.getRawType(); + validate(rawType, key.getName(), rawType); + final Executable factory = BeanUtils.getInjectableFactory(resolvableKey); final DependencyChain updatedChain = resolvableKey.dependencyChain().withDependency(key); final Object[] arguments = InjectionPoint.fromExecutable(factory).stream() .map(point -> getArgumentFactory(point, updatedChain).get()) @@ -378,14 +378,15 @@ public class DefaultInstanceFactory implements ConfigurableInstanceFactory { protected <T> void injectField(final Field field, final Object instance) { final InjectionPoint<T> point = InjectionPoint.forField(field); currentInjectionPoint.set(point); - final ResolvableKey<T> resolvableKey = ResolvableKey.of(point.key(), point.aliases()); + final Key<T> key = point.key(); + final ResolvableKey<T> resolvableKey = ResolvableKey.of(key, point.aliases()); try { final T value = getInstance(resolvableKey); // TODO(ms): if null, consider throwing exception here if (value != null) { agent.setFieldValue(field, instance, value); } - validate(field, resolvableKey.name(), agent.getFieldValue(field, instance)); + validate(field, key.getName(), agent.getFieldValue(field, instance)); } finally { currentInjectionPoint.remove(); } diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/AbstractAttributeFactoryResolver.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/AbstractAttributeFactoryResolver.java index 574cc854bd..9fecea0bf2 100644 --- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/AbstractAttributeFactoryResolver.java +++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/AbstractAttributeFactoryResolver.java @@ -21,6 +21,7 @@ import java.lang.reflect.AnnotatedElement; import java.lang.reflect.Type; import java.util.function.Supplier; import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.lang.Nullable; import org.apache.logging.log4j.plugins.Node; import org.apache.logging.log4j.plugins.convert.TypeConverter; import org.apache.logging.log4j.plugins.di.InstanceFactory; @@ -69,7 +70,7 @@ public abstract class AbstractAttributeFactoryResolver<T, A extends Annotation> LOGGER.trace("Configured node {} {}={}", node.getName(), key, sensitive ? "(sensitive)" : attribute); return typeConverter.convert(attribute, null, sensitive); } - final T defaultValue = getDefaultValue(annotation, resolver, type, typeConverter); + final @Nullable T defaultValue = getDefaultValue(annotation, resolver, type, typeConverter); LOGGER.trace("Configured node {} {}={} (default value)", node.getName(), key, defaultValue); return defaultValue; }; @@ -77,7 +78,7 @@ public abstract class AbstractAttributeFactoryResolver<T, A extends Annotation> protected abstract boolean isSensitive(final A annotation); - protected abstract T getDefaultValue( + protected abstract @Nullable T getDefaultValue( final A annotation, final StringValueResolver resolver, final Type type, diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/AbstractPluginFactoryResolver.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/AbstractPluginFactoryResolver.java index 748c955ed8..0bb2d4f243 100644 --- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/AbstractPluginFactoryResolver.java +++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/AbstractPluginFactoryResolver.java @@ -28,10 +28,9 @@ public abstract class AbstractPluginFactoryResolver<T> implements FactoryResolve return false; } final Type type = key.getType(); - if (!(type instanceof ParameterizedType)) { + if (!(type instanceof final ParameterizedType parameterizedType)) { return false; } - final ParameterizedType parameterizedType = (ParameterizedType) type; final Type rawType = parameterizedType.getRawType(); final Type[] typeArguments = parameterizedType.getActualTypeArguments(); if (typeArguments.length == 0) { diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/OptionalFactoryResolver.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/OptionalFactoryResolver.java index 45c223f4e4..51b2897b7d 100644 --- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/OptionalFactoryResolver.java +++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/OptionalFactoryResolver.java @@ -21,6 +21,7 @@ import java.lang.reflect.Type; import java.util.Collection; import java.util.Optional; import java.util.function.Supplier; +import org.apache.logging.log4j.lang.Nullable; import org.apache.logging.log4j.plugins.PluginException; import org.apache.logging.log4j.plugins.di.InstanceFactory; import org.apache.logging.log4j.plugins.di.Key; @@ -41,7 +42,7 @@ public class OptionalFactoryResolver<T> implements FactoryResolver<Optional<T>> public Supplier<Optional<T>> getFactory( final ResolvableKey<Optional<T>> resolvableKey, final InstanceFactory instanceFactory) { final Key<?> key = resolvableKey.key(); - final Key<T> itemKey = key.getParameterizedTypeArgument(0); + final Key<@Nullable T> itemKey = key.getParameterizedTypeArgument(0); final Collection<String> aliases = resolvableKey.aliases(); final DependencyChain dependencyChain = resolvableKey.dependencyChain(); if (itemKey == null) { diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginAttributeFactoryResolver.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginAttributeFactoryResolver.java index e9c01ac04e..875530a2cf 100644 --- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginAttributeFactoryResolver.java +++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginAttributeFactoryResolver.java @@ -19,6 +19,7 @@ package org.apache.logging.log4j.plugins.di.resolver; import java.lang.reflect.Type; import java.util.Map; import java.util.function.Function; +import org.apache.logging.log4j.lang.Nullable; import org.apache.logging.log4j.plugins.PluginAttribute; import org.apache.logging.log4j.plugins.convert.TypeConverter; import org.apache.logging.log4j.plugins.di.spi.StringValueResolver; @@ -59,7 +60,7 @@ public class PluginAttributeFactoryResolver<T> extends AbstractAttributeFactoryR } @Override - protected T getDefaultValue( + protected @Nullable T getDefaultValue( final PluginAttribute annotation, final StringValueResolver resolver, final Type type, diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginBuilderAttributeFactoryResolver.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginBuilderAttributeFactoryResolver.java index 004f5a3e1a..d32e704ba7 100644 --- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginBuilderAttributeFactoryResolver.java +++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginBuilderAttributeFactoryResolver.java @@ -17,6 +17,7 @@ package org.apache.logging.log4j.plugins.di.resolver; import java.lang.reflect.Type; +import org.apache.logging.log4j.lang.Nullable; import org.apache.logging.log4j.plugins.PluginBuilderAttribute; import org.apache.logging.log4j.plugins.convert.TypeConverter; import org.apache.logging.log4j.plugins.di.spi.StringValueResolver; @@ -36,7 +37,7 @@ public class PluginBuilderAttributeFactoryResolver<T> } @Override - protected T getDefaultValue( + protected @Nullable T getDefaultValue( final PluginBuilderAttribute annotation, final StringValueResolver resolver, final Type type, diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginElementFactoryResolver.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginElementFactoryResolver.java index 20a790a109..10d19db542 100644 --- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginElementFactoryResolver.java +++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginElementFactoryResolver.java @@ -25,6 +25,7 @@ import java.util.List; import java.util.Optional; import java.util.function.Supplier; import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.lang.Nullable; import org.apache.logging.log4j.plugins.Node; import org.apache.logging.log4j.plugins.PluginElement; import org.apache.logging.log4j.plugins.di.InstanceFactory; @@ -100,7 +101,7 @@ public class PluginElementFactoryResolver<T> implements FactoryResolver<T> { return Cast.cast(array); } - private static <T> T findChildElement( + private static <T> @Nullable T findChildElement( final Node node, final String name, final Collection<String> aliases, final Class<?> targetType) { final List<Node> children = node.getChildren(); final Iterator<Node> iterator = children.iterator(); diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginListFactoryResolver.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginListFactoryResolver.java index 37de63e5d5..7eac8c52ca 100644 --- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginListFactoryResolver.java +++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginListFactoryResolver.java @@ -40,7 +40,7 @@ public class PluginListFactoryResolver<T> extends AbstractPluginFactoryResolver< public Supplier<List<? extends T>> getFactory( final ResolvableKey<List<? extends T>> resolvableKey, final InstanceFactory instanceFactory) { final String namespace = resolvableKey.namespace(); - final ParameterizedType containerType = (ParameterizedType) resolvableKey.type(); + final ParameterizedType containerType = resolvableKey.parameterizedType(); final Type componentType = containerType.getActualTypeArguments()[0]; return () -> Plugins.<T>streamPluginInstancesMatching(instanceFactory, namespace, componentType) .collect(Collectors.toCollection(ArrayList::new)); diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginListSupplierFactoryResolver.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginListSupplierFactoryResolver.java index 3208ecdca6..9ca1cbdbaa 100644 --- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginListSupplierFactoryResolver.java +++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginListSupplierFactoryResolver.java @@ -42,7 +42,7 @@ public class PluginListSupplierFactoryResolver<T> final ResolvableKey<List<? extends Supplier<? extends T>>> resolvableKey, final InstanceFactory instanceFactory) { final String namespace = resolvableKey.namespace(); - final ParameterizedType containerType = (ParameterizedType) resolvableKey.type(); + final ParameterizedType containerType = resolvableKey.parameterizedType(); final ParameterizedType supplierType = (ParameterizedType) containerType.getActualTypeArguments()[0]; final Type componentType = supplierType.getActualTypeArguments()[0]; return () -> Plugins.<T>streamPluginFactoriesMatching(instanceFactory, namespace, componentType) diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginMapFactoryResolver.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginMapFactoryResolver.java index aa9b227cd4..2fa3b7b662 100644 --- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginMapFactoryResolver.java +++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginMapFactoryResolver.java @@ -40,7 +40,7 @@ public class PluginMapFactoryResolver<T> extends AbstractPluginFactoryResolver<M public Supplier<Map<String, ? extends T>> getFactory( final ResolvableKey<Map<String, ? extends T>> resolvableKey, final InstanceFactory instanceFactory) { final String namespace = resolvableKey.namespace(); - final ParameterizedType mapType = (ParameterizedType) resolvableKey.type(); + final ParameterizedType mapType = resolvableKey.parameterizedType(); final Type componentType = mapType.getActualTypeArguments()[1]; return () -> Plugins.<T>streamPluginTypesMatching(instanceFactory, namespace, componentType) .collect(Collectors.toMap( diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginMapSupplierFactoryResolver.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginMapSupplierFactoryResolver.java index 3f83eff658..779fb6c5f4 100644 --- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginMapSupplierFactoryResolver.java +++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginMapSupplierFactoryResolver.java @@ -44,7 +44,7 @@ public class PluginMapSupplierFactoryResolver<T> final ResolvableKey<Map<String, ? extends Supplier<? extends T>>> resolvableKey, final InstanceFactory instanceFactory) { final String namespace = resolvableKey.namespace(); - final ParameterizedType mapType = (ParameterizedType) resolvableKey.type(); + final ParameterizedType mapType = resolvableKey.parameterizedType(); final Type componentType = mapType.getActualTypeArguments()[1]; final ParameterizedType parameterizedType = (ParameterizedType) componentType; final Type[] typeArguments = parameterizedType.getActualTypeArguments(); diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginOptionalFactoryResolver.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginOptionalFactoryResolver.java index ed9626b25a..cf2597be8c 100644 --- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginOptionalFactoryResolver.java +++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginOptionalFactoryResolver.java @@ -36,7 +36,7 @@ public class PluginOptionalFactoryResolver<T> extends AbstractPluginFactoryResol public Supplier<Optional<? extends T>> getFactory( final ResolvableKey<Optional<? extends T>> resolvableKey, final InstanceFactory instanceFactory) { final String namespace = resolvableKey.namespace(); - final ParameterizedType containerType = (ParameterizedType) resolvableKey.type(); + final ParameterizedType containerType = resolvableKey.parameterizedType(); final Type componentType = containerType.getActualTypeArguments()[0]; return () -> Plugins.<T>streamPluginInstancesMatching(instanceFactory, namespace, componentType) .findFirst(); diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginOptionalSupplierFactoryResolver.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginOptionalSupplierFactoryResolver.java index aa47eb8763..b7b457174a 100644 --- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginOptionalSupplierFactoryResolver.java +++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginOptionalSupplierFactoryResolver.java @@ -40,7 +40,7 @@ public class PluginOptionalSupplierFactoryResolver<T> final ResolvableKey<Optional<? extends Supplier<? extends T>>> resolvableKey, final InstanceFactory instanceFactory) { final String namespace = resolvableKey.namespace(); - final ParameterizedType containerType = (ParameterizedType) resolvableKey.type(); + final ParameterizedType containerType = resolvableKey.parameterizedType(); final ParameterizedType supplierType = (ParameterizedType) containerType.getActualTypeArguments()[0]; final Type componentType = supplierType.getActualTypeArguments()[0]; return () -> Plugins.<T>streamPluginFactoriesMatching(instanceFactory, namespace, componentType) diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginSetFactoryResolver.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginSetFactoryResolver.java index 9fde414b4f..0c9254a7fe 100644 --- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginSetFactoryResolver.java +++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginSetFactoryResolver.java @@ -40,7 +40,7 @@ public class PluginSetFactoryResolver<T> extends AbstractPluginFactoryResolver<S public Supplier<Set<? extends T>> getFactory( final ResolvableKey<Set<? extends T>> resolvableKey, final InstanceFactory instanceFactory) { final String namespace = resolvableKey.namespace(); - final ParameterizedType containerType = (ParameterizedType) resolvableKey.type(); + final ParameterizedType containerType = resolvableKey.parameterizedType(); final Type componentType = containerType.getActualTypeArguments()[0]; return () -> Plugins.<T>streamPluginInstancesMatching(instanceFactory, namespace, componentType) .collect(Collectors.toCollection(LinkedHashSet::new)); diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginSetSupplierFactoryResolver.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginSetSupplierFactoryResolver.java index a8b6db4ff4..4bc517083c 100644 --- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginSetSupplierFactoryResolver.java +++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginSetSupplierFactoryResolver.java @@ -42,7 +42,7 @@ public class PluginSetSupplierFactoryResolver<T> final ResolvableKey<Set<? extends Supplier<? extends T>>> resolvableKey, final InstanceFactory instanceFactory) { final String namespace = resolvableKey.namespace(); - final ParameterizedType containerType = (ParameterizedType) resolvableKey.type(); + final ParameterizedType containerType = resolvableKey.parameterizedType(); final ParameterizedType supplierType = (ParameterizedType) containerType.getActualTypeArguments()[0]; final Type componentType = supplierType.getActualTypeArguments()[0]; return () -> Plugins.<T>streamPluginFactoriesMatching(instanceFactory, namespace, componentType) diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginStreamFactoryResolver.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginStreamFactoryResolver.java index b68ea1b8ac..88041523bc 100644 --- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginStreamFactoryResolver.java +++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginStreamFactoryResolver.java @@ -37,7 +37,7 @@ public class PluginStreamFactoryResolver<T> extends AbstractPluginFactoryResolve public Supplier<Stream<? extends T>> getFactory( final ResolvableKey<Stream<? extends T>> resolvableKey, final InstanceFactory instanceFactory) { final String namespace = resolvableKey.namespace(); - final ParameterizedType containerType = (ParameterizedType) resolvableKey.type(); + final ParameterizedType containerType = resolvableKey.parameterizedType(); final Type componentType = containerType.getActualTypeArguments()[0]; return () -> Plugins.streamPluginInstancesMatching(instanceFactory, namespace, componentType); } diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginStreamPluginTypeFactoryResolver.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginStreamPluginTypeFactoryResolver.java index 5be86e628e..0241f13214 100644 --- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginStreamPluginTypeFactoryResolver.java +++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginStreamPluginTypeFactoryResolver.java @@ -33,11 +33,10 @@ public class PluginStreamPluginTypeFactoryResolver<T> } // have Stream<T> final Type streamTypeArgument = typeArguments[0]; - if (!(streamTypeArgument instanceof ParameterizedType)) { + if (!(streamTypeArgument instanceof final ParameterizedType streamParameterizedTypeArgument)) { return false; } // have Stream<T<...>> - final ParameterizedType streamParameterizedTypeArgument = (ParameterizedType) streamTypeArgument; if (streamParameterizedTypeArgument.getRawType() != PluginType.class) { return false; } @@ -52,7 +51,7 @@ public class PluginStreamPluginTypeFactoryResolver<T> final ResolvableKey<Stream<? extends PluginType<? extends T>>> resolvableKey, final InstanceFactory instanceFactory) { final String namespace = resolvableKey.namespace(); - final ParameterizedType streamType = (ParameterizedType) resolvableKey.type(); + final ParameterizedType streamType = resolvableKey.parameterizedType(); final ParameterizedType supplierType = (ParameterizedType) streamType.getActualTypeArguments()[0]; final ParameterizedType pluginType = (ParameterizedType) supplierType.getActualTypeArguments()[0]; final Type componentType = pluginType.getActualTypeArguments()[0]; diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginStreamSupplierFactoryResolver.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginStreamSupplierFactoryResolver.java index c62d1859e4..75403d1406 100644 --- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginStreamSupplierFactoryResolver.java +++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginStreamSupplierFactoryResolver.java @@ -40,7 +40,7 @@ public class PluginStreamSupplierFactoryResolver<T> final ResolvableKey<Stream<? extends Supplier<? extends T>>> resolvableKey, final InstanceFactory instanceFactory) { final String namespace = resolvableKey.namespace(); - final ParameterizedType containerType = (ParameterizedType) resolvableKey.type(); + final ParameterizedType containerType = resolvableKey.parameterizedType(); final ParameterizedType supplierType = (ParameterizedType) containerType.getActualTypeArguments()[0]; final Type[] typeArguments = supplierType.getActualTypeArguments(); final Type componentType = typeArguments[0]; diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginTypeFactoryResolver.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginTypeFactoryResolver.java index fbe210e1c2..b7a88bc59e 100644 --- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginTypeFactoryResolver.java +++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/PluginTypeFactoryResolver.java @@ -38,7 +38,7 @@ public class PluginTypeFactoryResolver<T> extends AbstractPluginFactoryResolver< @Override public Supplier<PluginType<T>> getFactory( final ResolvableKey<PluginType<T>> resolvableKey, final InstanceFactory instanceFactory) { - final ParameterizedType type = (ParameterizedType) resolvableKey.type(); + final ParameterizedType type = resolvableKey.parameterizedType(); final String namespace = resolvableKey.namespace(); final Type requestedType = type.getActualTypeArguments()[0]; return () -> Plugins.<T>streamPluginTypesMatching(instanceFactory, namespace, requestedType) diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/SupplierFactoryResolver.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/SupplierFactoryResolver.java index 9b396e6955..51502ed493 100644 --- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/SupplierFactoryResolver.java +++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/SupplierFactoryResolver.java @@ -17,7 +17,6 @@ package org.apache.logging.log4j.plugins.di.resolver; import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; import java.util.Collection; import java.util.function.Supplier; import org.apache.logging.log4j.plugins.di.InstanceFactory; @@ -32,14 +31,16 @@ import org.apache.logging.log4j.plugins.di.spi.ResolvableKey; public class SupplierFactoryResolver<T> implements FactoryResolver<Supplier<T>> { @Override public boolean supportsKey(final Key<?> key) { - final Type type = key.getType(); - return type instanceof ParameterizedType && ((ParameterizedType) type).getRawType() == Supplier.class; + return key.getType() instanceof ParameterizedType type + && type.getRawType() == Supplier.class + && type.getActualTypeArguments().length == 1; } @Override public Supplier<Supplier<T>> getFactory( final ResolvableKey<Supplier<T>> resolvableKey, final InstanceFactory instanceFactory) { final Key<T> key = resolvableKey.key().getSuppliedType(); + assert key != null; // already checked in supportsKey final Collection<String> aliases = resolvableKey.aliases(); // dependencies ignored as this is a lazy binding return () -> instanceFactory.getFactory(key, aliases); diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/package-info.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/package-info.java index bfbb2205a0..3ca074f02a 100644 --- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/package-info.java +++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/resolver/package-info.java @@ -26,8 +26,10 @@ */ @Export @Version("1.0.0") +@NullMarked package org.apache.logging.log4j.plugins.di.resolver; +import org.apache.logging.log4j.lang.NullMarked; import org.apache.logging.log4j.plugins.di.spi.FactoryResolver; import org.osgi.annotation.bundle.Export; import org.osgi.annotation.versioning.Version; diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/spi/ResolvableKey.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/spi/ResolvableKey.java index 453b54cd69..39fd28b4a0 100644 --- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/spi/ResolvableKey.java +++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/spi/ResolvableKey.java @@ -16,23 +16,18 @@ */ package org.apache.logging.log4j.plugins.di.spi; -import java.lang.reflect.Type; +import java.lang.reflect.ParameterizedType; import java.util.Collection; import java.util.List; import org.apache.logging.log4j.plugins.di.Key; public record ResolvableKey<T>(Key<T> key, Collection<String> aliases, DependencyChain dependencyChain) { - public Type type() { - return key.getType(); - } - - public Class<T> rawType() { - return key.getRawType(); - } - - public String name() { - return key.getName(); + public ParameterizedType parameterizedType() { + if (key.getType() instanceof ParameterizedType type) { + return type; + } + throw new IllegalStateException("Not a parameterized type"); } public String namespace() {
