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() {

Reply via email to