You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ma...@apache.org on 2022/10/31 00:53:09 UTC
[logging-log4j2] 01/13: Extract Cast::cast utility method
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 <ma...@apache.org>
AuthorDate: Sat Oct 22 13:29:39 2022 -0500
Extract Cast::cast utility method
Signed-off-by: Matt Sicker <ma...@apache.org>
---
.../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));
}
}