This is an automated email from the ASF dual-hosted git repository. mattsicker pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit f7ea51a3235aeafc13d0dd0a0d155d6312a275ef Author: Matt Sicker <[email protected]> AuthorDate: Sat Oct 22 13:29:39 2022 -0500 Extract Cast::cast utility method Signed-off-by: Matt Sicker <[email protected]> --- .../org/apache/log4j/builders/BuilderManager.java | 4 +- .../test/java/org/apache/log4j/CategoryTest.java | 4 +- .../org/apache/logging/log4j/util/LazyUtil.java | 9 ++--- .../java/org/apache/logging/log4j/util3/Cast.java | 28 +++++++++++++ .../log4j/core/config/AbstractConfiguration.java | 6 +-- .../log4j/core/config/jason/JsonConfiguration.java | 16 ++++---- .../plugins/visit/PluginConfigurationVisitor.java | 5 ++- .../plugins/visit/PluginLoggerContextVisitor.java | 5 ++- .../logging/log4j/couchdb/CouchDbProvider.java | 4 +- .../logging/log4j/mongodb3/MongoDb3Provider.java | 4 +- .../logging/log4j/plugins/di/InjectorTest.java | 4 +- .../org/apache/logging/log4j/plugins/Node.java | 4 +- .../log4j/plugins/convert/TypeConverter.java | 4 +- .../logging/log4j/plugins/di/BindingMap.java | 8 ++-- .../logging/log4j/plugins/di/DefaultInjector.java | 47 +++++++++++----------- .../org/apache/logging/log4j/plugins/di/Key.java | 9 +++-- .../org/apache/logging/log4j/plugins/di/Keys.java | 4 +- .../logging/log4j/plugins/model/PluginType.java | 4 +- .../logging/log4j/plugins/util/TypeUtil.java | 5 --- .../validation/validators/ValidPortValidator.java | 4 +- .../log4j/plugins/visit/PluginElementVisitor.java | 5 ++- .../log4j/plugins/visit/PluginNodeVisitor.java | 5 ++- .../log4j/plugins/visit/PluginValueVisitor.java | 6 +-- 23 files changed, 110 insertions(+), 84 deletions(-) diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/BuilderManager.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/BuilderManager.java index 1b755ef6dc..88fd555310 100644 --- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/BuilderManager.java +++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/BuilderManager.java @@ -36,8 +36,8 @@ import org.apache.logging.log4j.plugins.Namespace; import org.apache.logging.log4j.plugins.di.Injector; import org.apache.logging.log4j.plugins.model.PluginNamespace; import org.apache.logging.log4j.plugins.model.PluginType; -import org.apache.logging.log4j.plugins.util.TypeUtil; import org.apache.logging.log4j.status.StatusLogger; +import org.apache.logging.log4j.util3.Cast; import org.w3c.dom.Element; import java.util.Locale; @@ -100,7 +100,7 @@ public class BuilderManager { if (pluginType == null) { LOGGER.warn("Unable to load plugin class name {} with key {}", className, key); } - return TypeUtil.cast(pluginType); + return Cast.cast(pluginType); } private <T extends Builder<U>, U> U newInstance(final PluginType<T> plugin, final Function<T, U> consumer, diff --git a/log4j-1.2-api/src/test/java/org/apache/log4j/CategoryTest.java b/log4j-1.2-api/src/test/java/org/apache/log4j/CategoryTest.java index 481e92340b..0a8ddb7011 100644 --- a/log4j-1.2-api/src/test/java/org/apache/log4j/CategoryTest.java +++ b/log4j-1.2-api/src/test/java/org/apache/log4j/CategoryTest.java @@ -29,8 +29,8 @@ import org.apache.logging.log4j.message.MapMessage; import org.apache.logging.log4j.message.Message; import org.apache.logging.log4j.message.ObjectMessage; import org.apache.logging.log4j.message.SimpleMessage; -import org.apache.logging.log4j.plugins.util.TypeUtil; import org.apache.logging.log4j.util.Strings; +import org.apache.logging.log4j.util3.Cast; import org.apache.logging.log4j.util3.Constants; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; @@ -331,7 +331,7 @@ public class CategoryTest { final Class<? extends Message> actualMessageClass = message.getClass(); assertTrue(expectedMessageClass.isAssignableFrom(actualMessageClass), "was expecting message to be instance of " + expectedMessageClass + ", found: " + actualMessageClass); - final M typedMessage = TypeUtil.cast(message); + final M typedMessage = Cast.cast(message); messageTester.accept(typedMessage); } diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util/LazyUtil.java b/log4j-api/src/main/java/org/apache/logging/log4j/util/LazyUtil.java index 7f15a0bb42..750b6d2392 100644 --- a/log4j-api/src/main/java/org/apache/logging/log4j/util/LazyUtil.java +++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/LazyUtil.java @@ -17,6 +17,8 @@ package org.apache.logging.log4j.util; +import org.apache.logging.log4j.util3.Cast; + import java.lang.invoke.MethodHandles; import java.lang.invoke.VarHandle; import java.util.concurrent.locks.Lock; @@ -36,12 +38,7 @@ final class LazyUtil { } static <T> T unwrapNull(final Object value) { - return value == NULL ? null : cast(value); - } - - @SuppressWarnings("unchecked") - static <T> T cast(final Object o) { - return (T) o; + return value == NULL ? null : Cast.cast(value); } static class Constant<T> implements Lazy<T> { diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util3/Cast.java b/log4j-api/src/main/java/org/apache/logging/log4j/util3/Cast.java new file mode 100644 index 0000000000..0be31b189e --- /dev/null +++ b/log4j-api/src/main/java/org/apache/logging/log4j/util3/Cast.java @@ -0,0 +1,28 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache license, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the license for the specific language governing permissions and + * limitations under the license. + */ + +package org.apache.logging.log4j.util3; + +public final class Cast { + public static <T> T cast(final Object o) { + @SuppressWarnings("unchecked") final T t = (T) o; + return t; + } + + private Cast() { + } +} diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java index 4f77448f76..39be877469 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java @@ -59,8 +59,8 @@ import org.apache.logging.log4j.plugins.di.Key; import org.apache.logging.log4j.plugins.di.Keys; import org.apache.logging.log4j.plugins.model.PluginNamespace; import org.apache.logging.log4j.plugins.model.PluginType; -import org.apache.logging.log4j.plugins.util.TypeUtil; import org.apache.logging.log4j.util.Lazy; +import org.apache.logging.log4j.util3.Cast; import org.apache.logging.log4j.util3.NameUtil; import org.apache.logging.log4j.util3.PropertiesUtil; import org.apache.logging.log4j.util3.ServiceRegistry; @@ -519,7 +519,7 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement @Override public <T> T getComponent(final String componentName) { - return TypeUtil.cast(componentMap.get(componentName)); + return Cast.cast(componentMap.get(componentName)); } @Override @@ -806,7 +806,7 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement */ @Override public <T extends Appender> T getAppender(final String appenderName) { - return appenderName != null ? TypeUtil.cast(appenders.get(appenderName)) : null; + return appenderName != null ? Cast.cast(appenders.get(appenderName)) : null; } /** diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/jason/JsonConfiguration.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/jason/JsonConfiguration.java index 4b358320f0..6171168464 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/jason/JsonConfiguration.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/jason/JsonConfiguration.java @@ -29,7 +29,7 @@ import org.apache.logging.log4j.core.util.Patterns; import org.apache.logging.log4j.plugins.Node; import org.apache.logging.log4j.plugins.model.PluginType; import org.apache.logging.log4j.plugins.util.ResolverUtil; -import org.apache.logging.log4j.plugins.util.TypeUtil; +import org.apache.logging.log4j.util3.Cast; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -52,11 +52,11 @@ public class JsonConfiguration extends AbstractConfiguration implements Reconfig final byte[] bytes; try (final var configStream = configurationSource.getInputStream()) { bytes = configStream.readAllBytes(); - root = TypeUtil.cast(JsonReader.read(new String(bytes, StandardCharsets.UTF_8))); + root = Cast.cast(JsonReader.read(new String(bytes, StandardCharsets.UTF_8))); } if (root.size() == 1) { for (final Object value : root.values()) { - root = TypeUtil.cast(value); + root = Cast.cast(value); } } processAttributes(rootNode, root); @@ -101,7 +101,7 @@ public class JsonConfiguration extends AbstractConfiguration implements Reconfig root.forEach((key, value) -> { if (value instanceof Map) { LOGGER.debug("Processing node for object {}", key); - children.add(constructNode(key, rootNode, TypeUtil.cast(value))); + children.add(constructNode(key, rootNode, Cast.cast(value))); } }); LOGGER.debug("Completed parsing configuration"); @@ -131,7 +131,7 @@ public class JsonConfiguration extends AbstractConfiguration implements Reconfig LOGGER.debug("Processing node for array {}", k); ((List<?>) v).forEach(object -> { if (object instanceof Map<?, ?>) { - final Map<String, Object> map = TypeUtil.cast(object); + final Map<String, Object> map = Cast.cast(object); final String type = getType(map).orElse(k); final PluginType<?> entryType = corePlugins.get(type); final Node child = new Node(node, k, entryType); @@ -145,12 +145,12 @@ public class JsonConfiguration extends AbstractConfiguration implements Reconfig map.forEach((itemKey, itemValue) -> { if (itemValue instanceof Map<?, ?>) { LOGGER.debug("Processing node for object {}", itemKey); - grandchildren.add(constructNode(itemKey, child, TypeUtil.cast(itemValue))); + grandchildren.add(constructNode(itemKey, child, Cast.cast(itemValue))); } else if (itemValue instanceof List<?>) { final List<?> list = (List<?>) itemValue; LOGGER.debug("Processing array for object {}", itemKey); list.forEach(subValue -> grandchildren.add( - constructNode(itemKey, child, TypeUtil.cast(subValue)))); + constructNode(itemKey, child, Cast.cast(subValue)))); } }); children.add(child); @@ -158,7 +158,7 @@ public class JsonConfiguration extends AbstractConfiguration implements Reconfig }); } else { LOGGER.debug("Processing node for object {}", k); - children.add(constructNode(k, node, TypeUtil.cast(v))); + children.add(constructNode(k, node, Cast.cast(v))); } }); diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visit/PluginConfigurationVisitor.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visit/PluginConfigurationVisitor.java index fb04dbba65..9e3898ea28 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visit/PluginConfigurationVisitor.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visit/PluginConfigurationVisitor.java @@ -24,6 +24,7 @@ import org.apache.logging.log4j.plugins.Node; import org.apache.logging.log4j.plugins.util.TypeUtil; import org.apache.logging.log4j.plugins.visit.NodeVisitor; import org.apache.logging.log4j.status.StatusLogger; +import org.apache.logging.log4j.util3.Cast; import org.apache.logging.log4j.util3.StringBuilders; import java.lang.reflect.Field; @@ -43,7 +44,7 @@ public class PluginConfigurationVisitor implements NodeVisitor { public Object visitField(final Field field, final Node node, final StringBuilder debugLog) { if (TypeUtil.isAssignable(field.getGenericType(), configuration.getClass())) { StringBuilders.appendKeyDqValueWithJoiner(debugLog, "configuration", configuration, ", "); - return TypeUtil.cast(configuration); + return Cast.cast(configuration); } else { LOGGER.error("Field {} annotated with @PluginConfiguration is not compatible with type {}", field, configuration.getClass()); @@ -55,7 +56,7 @@ public class PluginConfigurationVisitor implements NodeVisitor { public Object visitParameter(final Parameter parameter, final Node node, final StringBuilder debugLog) { if (TypeUtil.isAssignable(parameter.getParameterizedType(), configuration.getClass())) { StringBuilders.appendKeyDqValueWithJoiner(debugLog, "configuration", configuration, ", "); - return TypeUtil.cast(configuration); + return Cast.cast(configuration); } else { LOGGER.error("Parameter {} annotated with @PluginConfiguration is not compatible with type {}", parameter, configuration.getClass()); diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visit/PluginLoggerContextVisitor.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visit/PluginLoggerContextVisitor.java index 52a1d9e591..8a56a50000 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visit/PluginLoggerContextVisitor.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visit/PluginLoggerContextVisitor.java @@ -25,6 +25,7 @@ import org.apache.logging.log4j.plugins.Node; import org.apache.logging.log4j.plugins.util.TypeUtil; import org.apache.logging.log4j.plugins.visit.NodeVisitor; import org.apache.logging.log4j.status.StatusLogger; +import org.apache.logging.log4j.util3.Cast; import org.apache.logging.log4j.util3.StringBuilders; import java.lang.ref.WeakReference; @@ -47,7 +48,7 @@ public class PluginLoggerContextVisitor implements NodeVisitor { public Object visitField(final Field field, final Node node, final StringBuilder debugLog) { if (TypeUtil.isAssignable(field.getGenericType(), LoggerContext.class)) { StringBuilders.appendKeyDqValueWithJoiner(debugLog, "loggerContext", loggerContext, ", "); - return TypeUtil.cast(loggerContext); + return Cast.cast(loggerContext); } else { LOGGER.error("Field {} annotated with @PluginLoggerContext is not compatible with type {}", field, loggerContext.getClass()); @@ -59,7 +60,7 @@ public class PluginLoggerContextVisitor implements NodeVisitor { public Object visitParameter(final Parameter parameter, final Node node, final StringBuilder debugLog) { if (TypeUtil.isAssignable(parameter.getParameterizedType(), loggerContext.getClass())) { StringBuilders.appendKeyDqValueWithJoiner(debugLog, "loggerContext", loggerContext, ", "); - return TypeUtil.cast(loggerContext); + return Cast.cast(loggerContext); } else { LOGGER.error("Parameter {} annotated with @PluginLoggerContext is not compatible with type {}", parameter, loggerContext.getClass()); diff --git a/log4j-couchdb/src/main/java/org/apache/logging/log4j/couchdb/CouchDbProvider.java b/log4j-couchdb/src/main/java/org/apache/logging/log4j/couchdb/CouchDbProvider.java index 61c0ace36e..0d031c637f 100644 --- a/log4j-couchdb/src/main/java/org/apache/logging/log4j/couchdb/CouchDbProvider.java +++ b/log4j-couchdb/src/main/java/org/apache/logging/log4j/couchdb/CouchDbProvider.java @@ -24,11 +24,11 @@ import org.apache.logging.log4j.plugins.PluginAttribute; import org.apache.logging.log4j.plugins.PluginFactory; import org.apache.logging.log4j.plugins.convert.TypeConverter; import org.apache.logging.log4j.plugins.di.Injector; -import org.apache.logging.log4j.plugins.util.TypeUtil; import org.apache.logging.log4j.plugins.validation.constraints.ValidHost; import org.apache.logging.log4j.plugins.validation.constraints.ValidPort; import org.apache.logging.log4j.status.StatusLogger; import org.apache.logging.log4j.util.Strings; +import org.apache.logging.log4j.util3.Cast; import org.apache.logging.log4j.util3.LoaderUtil; import org.lightcouch.CouchDbClient; import org.lightcouch.CouchDbProperties; @@ -144,7 +144,7 @@ public final class CouchDbProvider implements NoSqlProvider<CouchDbConnection> { LOGGER.warn("No protocol specified, using default port [http]."); } - final TypeConverter<Integer> converter = TypeUtil.cast(injector.getTypeConverter(Integer.class)); + final TypeConverter<Integer> converter = Cast.cast(injector.getTypeConverter(Integer.class)); final int portInt = converter.convert(port, protocol.equals("https") ? HTTPS : HTTP); if (Strings.isEmpty(username) || Strings.isEmpty(password)) { diff --git a/log4j-mongodb3/src/main/java/org/apache/logging/log4j/mongodb3/MongoDb3Provider.java b/log4j-mongodb3/src/main/java/org/apache/logging/log4j/mongodb3/MongoDb3Provider.java index ff6a6abc60..bf57edf1e8 100644 --- a/log4j-mongodb3/src/main/java/org/apache/logging/log4j/mongodb3/MongoDb3Provider.java +++ b/log4j-mongodb3/src/main/java/org/apache/logging/log4j/mongodb3/MongoDb3Provider.java @@ -32,12 +32,12 @@ import org.apache.logging.log4j.plugins.PluginBuilderAttribute; import org.apache.logging.log4j.plugins.PluginFactory; import org.apache.logging.log4j.plugins.convert.TypeConverter; import org.apache.logging.log4j.plugins.di.Injector; -import org.apache.logging.log4j.plugins.util.TypeUtil; import org.apache.logging.log4j.plugins.validation.constraints.Required; import org.apache.logging.log4j.plugins.validation.constraints.ValidHost; import org.apache.logging.log4j.plugins.validation.constraints.ValidPort; import org.apache.logging.log4j.status.StatusLogger; import org.apache.logging.log4j.util.Strings; +import org.apache.logging.log4j.util3.Cast; import org.apache.logging.log4j.util3.LoaderUtil; import org.bson.codecs.configuration.CodecRegistries; import org.bson.codecs.configuration.CodecRegistry; @@ -185,7 +185,7 @@ public final class MongoDb3Provider implements NoSqlProvider<MongoDb3Connection> mongoCredential = MongoCredential.createCredential(userName, databaseName, password.toCharArray()); } try { - final TypeConverter<Integer> converter = TypeUtil.cast(injector.getTypeConverter(Integer.class)); + final TypeConverter<Integer> converter = Cast.cast(injector.getTypeConverter(Integer.class)); final int portInt = converter.convert(port, DEFAULT_PORT); description += ", server=" + server + ", port=" + portInt; final WriteConcern writeConcern = toWriteConcern(writeConcernConstant, writeConcernConstantClassName); diff --git a/log4j-plugins-test/src/test/java/org/apache/logging/log4j/plugins/di/InjectorTest.java b/log4j-plugins-test/src/test/java/org/apache/logging/log4j/plugins/di/InjectorTest.java index 8f7d9be224..134248383e 100644 --- a/log4j-plugins-test/src/test/java/org/apache/logging/log4j/plugins/di/InjectorTest.java +++ b/log4j-plugins-test/src/test/java/org/apache/logging/log4j/plugins/di/InjectorTest.java @@ -40,9 +40,9 @@ import org.apache.logging.log4j.plugins.test.validation.generic.AlphaBean; import org.apache.logging.log4j.plugins.test.validation.generic.BaseBean; import org.apache.logging.log4j.plugins.test.validation.generic.BetaBean; import org.apache.logging.log4j.plugins.test.validation.generic.GammaBean; -import org.apache.logging.log4j.plugins.util.TypeUtil; import org.apache.logging.log4j.plugins.validation.constraints.Required; import org.apache.logging.log4j.plugins.validation.constraints.RequiredProperty; +import org.apache.logging.log4j.util3.Cast; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.parallel.ResourceLock; import org.junit.jupiter.api.parallel.Resources; @@ -429,7 +429,7 @@ class InjectorTest { @Override public <T> Supplier<T> get(final Key<T> key, final Supplier<T> unscoped) { - return () -> TypeUtil.cast(bindings.computeIfAbsent(key, ignored -> unscoped.get())); + return () -> Cast.cast(bindings.computeIfAbsent(key, ignored -> unscoped.get())); } } diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/Node.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/Node.java index 80e93c4211..92925ca1ad 100644 --- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/Node.java +++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/Node.java @@ -17,7 +17,7 @@ package org.apache.logging.log4j.plugins; import org.apache.logging.log4j.plugins.model.PluginType; -import org.apache.logging.log4j.plugins.util.TypeUtil; +import org.apache.logging.log4j.util3.Cast; import java.util.ArrayList; import java.util.Collection; @@ -136,7 +136,7 @@ public class Node { @SuppressWarnings("unchecked") public <T> T getObject() { - return (T) object; + return Cast.cast(object); } /** diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/convert/TypeConverter.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/convert/TypeConverter.java index 0aa5ea9481..b6e183e5a2 100644 --- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/convert/TypeConverter.java +++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/convert/TypeConverter.java @@ -17,8 +17,8 @@ package org.apache.logging.log4j.plugins.convert; -import org.apache.logging.log4j.plugins.util.TypeUtil; import org.apache.logging.log4j.status.StatusLogger; +import org.apache.logging.log4j.util3.Cast; /** * Interface for doing automatic String conversion to a specific type. @@ -55,7 +55,7 @@ public interface TypeConverter<T> { return null; } if (!(defaultValue instanceof String)) { - return TypeUtil.cast(defaultValue); + return Cast.cast(defaultValue); } try { return convert((String) defaultValue); diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/BindingMap.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/BindingMap.java index e52beb6575..4186957a4e 100644 --- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/BindingMap.java +++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/BindingMap.java @@ -17,7 +17,7 @@ package org.apache.logging.log4j.plugins.di; -import org.apache.logging.log4j.plugins.util.TypeUtil; +import org.apache.logging.log4j.util3.Cast; import java.util.Collection; import java.util.Map; @@ -36,7 +36,7 @@ class BindingMap { } public <T> Binding<T> get(final Key<T> key) { - return TypeUtil.cast(bindings.get(key)); + return Cast.cast(bindings.get(key)); } public <T> Binding<T> get(final Key<T> key, final Collection<String> aliases) { @@ -49,7 +49,7 @@ class BindingMap { } } } - return TypeUtil.cast(binding); + return Cast.cast(binding); } public <T> void put(final Key<T> key, final Supplier<T> factory) { @@ -62,7 +62,7 @@ class BindingMap { public <T> Supplier<T> merge(final Key<T> key, final Supplier<T> factory) { final Binding<?> newBinding = bindings.merge(key, Binding.bind(key, factory), (oldBinding, binding) -> oldBinding.getKey().getOrder() <= binding.getKey().getOrder() ? oldBinding : binding); - return TypeUtil.cast(newBinding.getSupplier()); + return Cast.cast(newBinding.getSupplier()); } public <T> void bindIfAbsent(final Key<T> key, final Supplier<T> factory) { diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/DefaultInjector.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/DefaultInjector.java index 8ac83cd57f..c7e8d4b813 100644 --- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/DefaultInjector.java +++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/DefaultInjector.java @@ -40,6 +40,7 @@ import org.apache.logging.log4j.plugins.validation.ConstraintValidator; import org.apache.logging.log4j.plugins.visit.NodeVisitor; import org.apache.logging.log4j.status.StatusLogger; import org.apache.logging.log4j.util.Lazy; +import org.apache.logging.log4j.util3.Cast; import org.apache.logging.log4j.util3.EnglishEnums; import org.apache.logging.log4j.util3.ServiceRegistry; import org.apache.logging.log4j.util3.StringBuilders; @@ -230,9 +231,9 @@ class DefaultInjector implements Injector { final NodeVisitor visitor = visitorKey != null ? getInstance(visitorKey) : null; if (visitor != null) { if (element instanceof Field) { - return () -> TypeUtil.cast(visitor.visitField((Field) element, node, debugLog)); + return () -> Cast.cast(visitor.visitField((Field) element, node, debugLog)); } else { - return () -> TypeUtil.cast(visitor.visitParameter((Parameter) element, node, debugLog)); + return () -> Cast.cast(visitor.visitParameter((Parameter) element, node, debugLog)); } } final Key<T> key = point.getKey(); @@ -253,34 +254,34 @@ class DefaultInjector implements Injector { // @Namespace PluginNamespace injection if (rawType == PluginNamespace.class && !key.getNamespace().isEmpty()) { - final Key<PluginNamespace> pluginNamespaceKey = TypeUtil.cast(key); + final Key<PluginNamespace> pluginNamespaceKey = Cast.cast(key); final Supplier<PluginNamespace> pluginNamespaceFactory = createPluginNamespaceFactory(pluginNamespaceKey); - return TypeUtil.cast(bindingMap.merge(pluginNamespaceKey, pluginNamespaceFactory)); + return Cast.cast(bindingMap.merge(pluginNamespaceKey, pluginNamespaceFactory)); } // @Namespace Collection<T>/Map<String, T>/Stream<T>/etc. injection if (COLLECTION_INJECTION_TYPES.contains(rawType) && !key.getNamespace().isEmpty()) { if (Stream.class.isAssignableFrom(rawType)) { - final Key<Stream<T>> streamKey = TypeUtil.cast(key); + final Key<Stream<T>> streamKey = Cast.cast(key); final Supplier<Stream<T>> streamFactory = () -> streamPluginInstancesFromNamespace(key.getParameterizedTypeArgument(0)); - return TypeUtil.cast(bindingMap.merge(streamKey, streamFactory)); + return Cast.cast(bindingMap.merge(streamKey, streamFactory)); } else if (Set.class.isAssignableFrom(rawType)) { - final Key<Set<T>> setKey = TypeUtil.cast(key); + final Key<Set<T>> setKey = Cast.cast(key); final Supplier<Set<T>> setFactory = () -> getPluginSet(key.getParameterizedTypeArgument(0)); - return TypeUtil.cast(bindingMap.merge(setKey, setFactory)); + return Cast.cast(bindingMap.merge(setKey, setFactory)); } else if (Map.class.isAssignableFrom(rawType)) { - final Key<Map<String, T>> mapKey = TypeUtil.cast(key); + final Key<Map<String, T>> mapKey = Cast.cast(key); final Supplier<Map<String, T>> mapFactory = () -> getPluginMap(key.getParameterizedTypeArgument(1)); - return TypeUtil.cast(bindingMap.merge(mapKey, mapFactory)); + return Cast.cast(bindingMap.merge(mapKey, mapFactory)); } else if (Iterable.class.isAssignableFrom(rawType)) { - final Key<Iterable<T>> iterableKey = TypeUtil.cast(key); + final Key<Iterable<T>> iterableKey = Cast.cast(key); final Supplier<Iterable<T>> iterableFactory = () -> getPluginList(key.getParameterizedTypeArgument(0)); - return TypeUtil.cast(bindingMap.merge(iterableKey, iterableFactory)); + return Cast.cast(bindingMap.merge(iterableKey, iterableFactory)); } else if (Optional.class.isAssignableFrom(rawType)) { - final Key<Optional<T>> optionalKey = TypeUtil.cast(key); + final Key<Optional<T>> optionalKey = Cast.cast(key); final Supplier<Optional<T>> optionalFactory = () -> getOptionalPlugin(key.getParameterizedTypeArgument(0)); - return TypeUtil.cast(bindingMap.merge(optionalKey, optionalFactory)); + return Cast.cast(bindingMap.merge(optionalKey, optionalFactory)); } else { throw new InjectException("Cannot inject plugins into " + key); } @@ -288,16 +289,16 @@ class DefaultInjector implements Injector { // Optional<T> injection if (rawType == Optional.class) { - final Key<Optional<T>> optionalKey = TypeUtil.cast(key); + final Key<Optional<T>> optionalKey = Cast.cast(key); final Supplier<Optional<T>> optionalFactory = () -> getOptionalInstance(key.getParameterizedTypeArgument(0), aliases, node, chain); - return TypeUtil.cast(bindingMap.merge(optionalKey, optionalFactory)); + return Cast.cast(bindingMap.merge(optionalKey, optionalFactory)); } // default namespace generic T injection final Supplier<T> instanceSupplier = () -> { final StringBuilder debugLog = new StringBuilder(); - final T instance = TypeUtil.cast(getInjectableInstance(key, node, chain, debugLog)); + final T instance = Cast.cast(getInjectableInstance(key, node, chain, debugLog)); injectMembers(key, node, instance, chain, debugLog); return instance; }; @@ -322,7 +323,7 @@ class DefaultInjector implements Injector { return namespace.stream() .filter(pluginType -> TypeUtil.isAssignable(type, pluginType.getPluginClass())) .sorted(Comparator.comparing(PluginType::getPluginClass, OrderedComparator.INSTANCE)) - .map(TypeUtil::cast); + .map(o -> Cast.cast(o)); } private <T> Stream<T> streamPluginInstancesFromNamespace(final Key<T> key) { @@ -333,7 +334,7 @@ class DefaultInjector implements Injector { final Key<T> itemKey = key.getParameterizedTypeArgument(0); final Stream<Supplier<T>> factoryStream = streamPluginsFromNamespace(itemKey) .map(pluginType -> getFactory(pluginType.getPluginClass())); - return TypeUtil.cast(factoryStream); + return Cast.cast(factoryStream); } return streamPluginsFromNamespace(key) .map(pluginType -> getInstance(pluginType.getPluginClass())); @@ -351,7 +352,7 @@ class DefaultInjector implements Injector { pluginType -> getFactory(pluginType.getPluginClass()), (lhs, rhs) -> lhs, LinkedHashMap::new)); - return TypeUtil.cast(map); + return Cast.cast(map); } return streamPluginsFromNamespace(key).collect(Collectors.toMap( PluginType::getKey, @@ -628,7 +629,7 @@ class DefaultInjector implements Injector { return value; }) .toArray(); - return TypeUtil.cast(accessor.invokeMethod(method, instance, args)); + return Cast.cast(accessor.invokeMethod(method, instance, args)); }; final Supplier<T> factory = getScopeForMethod(method).get(primaryKey, unscoped); final Collection<String> aliases = Keys.getAliases(method); @@ -794,7 +795,7 @@ class DefaultInjector implements Injector { throw new InjectException("Multiple @Inject constructors found in " + rawType); } if (injectConstructors.size() == 1) { - return TypeUtil.cast(injectConstructors.get(0)); + return Cast.cast(injectConstructors.get(0)); } try { return rawType.getDeclaredConstructor(); @@ -829,7 +830,7 @@ class DefaultInjector implements Injector { @Override public <T> Supplier<T> get(final Key<T> key, final Supplier<T> unscoped) { - return TypeUtil.cast(singletonProviders.computeIfAbsent(key, ignored -> Lazy.lazy(unscoped)::value)); + return Cast.cast(singletonProviders.computeIfAbsent(key, ignored -> Lazy.lazy(unscoped)::value)); } @Override diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/Key.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/Key.java index 6e249ffe86..24557d8fce 100644 --- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/Key.java +++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/Key.java @@ -22,6 +22,7 @@ import org.apache.logging.log4j.plugins.QualifierType; import org.apache.logging.log4j.plugins.util.AnnotationUtil; import org.apache.logging.log4j.plugins.util.TypeUtil; import org.apache.logging.log4j.util.Strings; +import org.apache.logging.log4j.util3.Cast; import java.lang.annotation.Annotation; import java.lang.reflect.AnnotatedElement; @@ -64,7 +65,7 @@ public class Key<T> { */ protected Key() { type = TypeUtil.getSuperclassTypeParameter(getClass()); - rawType = TypeUtil.cast(TypeUtil.getRawType(type)); + rawType = Cast.cast(TypeUtil.getRawType(type)); final AnnotatedType superclass = getClass().getAnnotatedSuperclass(); final Annotation qualifier = AnnotationUtil.getMetaAnnotation(superclass, QualifierType.class); qualifierType = qualifier != null ? qualifier.annotationType() : null; @@ -300,7 +301,7 @@ public class Key<T> { */ public <U> Builder<U> setType(final Type type) { this.type = type; - return TypeUtil.cast(this); + return Cast.cast(this); } /** @@ -308,7 +309,7 @@ public class Key<T> { */ public <U> Builder<U> setType(final Class<U> type) { this.type = type; - return TypeUtil.cast(this); + return Cast.cast(this); } /** @@ -356,7 +357,7 @@ public class Key<T> { if (namespace == null) { namespace = Strings.EMPTY; } - final Class<T> rawType = TypeUtil.cast(TypeUtil.getRawType(type)); + final Class<T> rawType = Cast.cast(TypeUtil.getRawType(type)); int order = this.order != null ? this.order : getOrder(rawType); return new Key<>(type, rawType, qualifierType, name, namespace, order); } diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/Keys.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/Keys.java index cffc67cc7d..2537340c97 100644 --- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/Keys.java +++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/Keys.java @@ -25,9 +25,9 @@ import org.apache.logging.log4j.plugins.name.AnnotatedElementAliasesProvider; import org.apache.logging.log4j.plugins.name.AnnotatedElementNameProvider; import org.apache.logging.log4j.plugins.name.NameProvider; import org.apache.logging.log4j.plugins.util.AnnotationUtil; -import org.apache.logging.log4j.plugins.util.TypeUtil; import org.apache.logging.log4j.util.ReflectionUtil; import org.apache.logging.log4j.util.Strings; +import org.apache.logging.log4j.util3.Cast; import java.lang.annotation.Annotation; import java.lang.reflect.AnnotatedElement; @@ -159,7 +159,7 @@ public final class Keys { private static <A extends Annotation> Optional<String> getSpecifiedNameForAnnotation(final A annotation) { return Optional.ofNullable(annotation.annotationType().getAnnotation(NameProvider.class)) .map(NameProvider::value) - .map(TypeUtil::<Class<? extends AnnotatedElementNameProvider<A>>>cast) + .map(Cast::<Class<? extends AnnotatedElementNameProvider<A>>>cast) .map(ReflectionUtil::instantiate) .flatMap(provider -> provider.getSpecifiedName(annotation)); } diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/model/PluginType.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/model/PluginType.java index c210d10713..163bd3e609 100644 --- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/model/PluginType.java +++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/model/PluginType.java @@ -16,8 +16,8 @@ */ package org.apache.logging.log4j.plugins.model; -import org.apache.logging.log4j.plugins.util.TypeUtil; import org.apache.logging.log4j.util.Lazy; +import org.apache.logging.log4j.util3.Cast; /** * Plugin Descriptor. This is a memento object for Plugin annotations paired to their annotated classes. @@ -51,7 +51,7 @@ public class PluginType<T> { this.pluginEntry = pluginEntry; this.pluginClass = Lazy.lazy(() -> { try { - return TypeUtil.cast(classLoader.loadClass(pluginEntry.getClassName())); + return Cast.cast(classLoader.loadClass(pluginEntry.getClassName())); } catch (final ClassNotFoundException e) { throw new IllegalStateException("No class named " + pluginEntry.getClassName() + " located for element " + pluginEntry.getName(), e); diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/util/TypeUtil.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/util/TypeUtil.java index 5423ee3f6b..6402cd8f9d 100644 --- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/util/TypeUtil.java +++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/util/TypeUtil.java @@ -261,11 +261,6 @@ public final class TypeUtil { return clazz; } - public static <T> T cast(final Object o) { - @SuppressWarnings("unchecked") final T t = (T) o; - return t; - } - public static Type getSuperclassTypeParameter(final Class<?> type) { final Type genericSuperclass = type.getGenericSuperclass(); if (genericSuperclass instanceof ParameterizedType) { diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/validation/validators/ValidPortValidator.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/validation/validators/ValidPortValidator.java index a65fecc2cc..3ae73e3a34 100644 --- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/validation/validators/ValidPortValidator.java +++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/validation/validators/ValidPortValidator.java @@ -20,10 +20,10 @@ import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.plugins.Inject; import org.apache.logging.log4j.plugins.convert.TypeConverter; import org.apache.logging.log4j.plugins.di.Injector; -import org.apache.logging.log4j.plugins.util.TypeUtil; import org.apache.logging.log4j.plugins.validation.ConstraintValidator; import org.apache.logging.log4j.plugins.validation.constraints.ValidPort; import org.apache.logging.log4j.status.StatusLogger; +import org.apache.logging.log4j.util3.Cast; /** * Validator that checks an object to verify it is a valid port number (an integer between 0 and 65535). @@ -39,7 +39,7 @@ public class ValidPortValidator implements ConstraintValidator<ValidPort> { @Inject public ValidPortValidator(final Injector injector) { - converter = TypeUtil.cast(injector.getTypeConverter(Integer.class)); + converter = Cast.cast(injector.getTypeConverter(Integer.class)); } @Override diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/visit/PluginElementVisitor.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/visit/PluginElementVisitor.java index d1aa9d94a2..c83fc1ffaf 100644 --- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/visit/PluginElementVisitor.java +++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/visit/PluginElementVisitor.java @@ -24,6 +24,7 @@ import org.apache.logging.log4j.plugins.model.PluginType; import org.apache.logging.log4j.plugins.util.TypeUtil; import org.apache.logging.log4j.status.StatusLogger; import org.apache.logging.log4j.util.Strings; +import org.apache.logging.log4j.util3.Cast; import org.apache.logging.log4j.util3.StringBuilders; import java.lang.reflect.Array; @@ -45,7 +46,7 @@ public class PluginElementVisitor implements NodeVisitor { final Collection<String> aliases = Keys.getAliases(field); final Type targetType = field.getGenericType(); final Class<?> componentType = getComponentType(targetType); - return TypeUtil.cast(componentType != null ? parseArrayElement(node, name, aliases, componentType, debugLog) : + return Cast.cast(componentType != null ? parseArrayElement(node, name, aliases, componentType, debugLog) : parseChildElement(node, name, aliases, targetType, debugLog)); } @@ -55,7 +56,7 @@ public class PluginElementVisitor implements NodeVisitor { final Collection<String> aliases = Keys.getAliases(parameter); final Type targetType = parameter.getParameterizedType(); final Class<?> componentType = getComponentType(targetType); - return TypeUtil.cast(componentType != null ? parseArrayElement(node, name, aliases, componentType, debugLog) : + return Cast.cast(componentType != null ? parseArrayElement(node, name, aliases, componentType, debugLog) : parseChildElement(node, name, aliases, targetType, debugLog)); } diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/visit/PluginNodeVisitor.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/visit/PluginNodeVisitor.java index ba788fd651..f95c02ab04 100644 --- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/visit/PluginNodeVisitor.java +++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/visit/PluginNodeVisitor.java @@ -21,6 +21,7 @@ import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.plugins.Node; import org.apache.logging.log4j.plugins.util.TypeUtil; import org.apache.logging.log4j.status.StatusLogger; +import org.apache.logging.log4j.util3.Cast; import org.apache.logging.log4j.util3.StringBuilders; import java.lang.reflect.Field; @@ -33,7 +34,7 @@ public class PluginNodeVisitor implements NodeVisitor { public Object visitField(final Field field, final Node node, final StringBuilder debugLog) { if (TypeUtil.isAssignable(field.getGenericType(), node.getClass())) { StringBuilders.appendKeyDqValueWithJoiner(debugLog, "node", node.getName(), ", "); - return TypeUtil.cast(node); + return Cast.cast(node); } else { LOGGER.error("Cannot inject Node instance into field {}", field); return null; @@ -44,7 +45,7 @@ public class PluginNodeVisitor implements NodeVisitor { public Object visitParameter(final Parameter parameter, final Node node, final StringBuilder debugLog) { if (TypeUtil.isAssignable(parameter.getParameterizedType(), node.getClass())) { StringBuilders.appendKeyDqValueWithJoiner(debugLog, "node", node.getName(), ", "); - return TypeUtil.cast(node); + return Cast.cast(node); } else { LOGGER.error("Cannot inject Node instance into parameter {}", parameter); return null; diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/visit/PluginValueVisitor.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/visit/PluginValueVisitor.java index 391832d889..8b7e941176 100644 --- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/visit/PluginValueVisitor.java +++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/visit/PluginValueVisitor.java @@ -22,9 +22,9 @@ import org.apache.logging.log4j.plugins.Inject; import org.apache.logging.log4j.plugins.Named; import org.apache.logging.log4j.plugins.Node; import org.apache.logging.log4j.plugins.di.Keys; -import org.apache.logging.log4j.plugins.util.TypeUtil; import org.apache.logging.log4j.status.StatusLogger; import org.apache.logging.log4j.util.Strings; +import org.apache.logging.log4j.util3.Cast; import org.apache.logging.log4j.util3.StringBuilders; import java.lang.reflect.Field; @@ -66,13 +66,13 @@ public class PluginValueVisitor implements NodeVisitor { public Object visitField(final Field field, final Node node, final StringBuilder debugLog) { final String name = Keys.getName(field); final Collection<String> aliases = Keys.getAliases(field); - return TypeUtil.cast(parseValue(node, name, aliases, debugLog)); + return Cast.cast(parseValue(node, name, aliases, debugLog)); } @Override public Object visitParameter(final Parameter parameter, final Node node, final StringBuilder debugLog) { final String name = Keys.getName(parameter); final Collection<String> aliases = Keys.getAliases(parameter); - return TypeUtil.cast(parseValue(node, name, aliases, debugLog)); + return Cast.cast(parseValue(node, name, aliases, debugLog)); } }
