This is an automated email from the ASF dual-hosted git repository. mattsicker pushed a commit to branch feature/3.x/name-alias-provider in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit 8fa5511bc277bac3ae7b4712264baacc87359b3a Author: Matt Sicker <msic...@apple.com> AuthorDate: Thu Aug 7 17:16:10 2025 -0500 Remove unused file --- .../apache/logging/log4j/core/util/TypeUtil.java | 220 --------------------- 1 file changed, 220 deletions(-) diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/TypeUtil.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/TypeUtil.java deleted file mode 100644 index 6a768f5243..0000000000 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/TypeUtil.java +++ /dev/null @@ -1,220 +0,0 @@ -/* - * 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.core.util; - -import java.lang.reflect.Field; -import java.lang.reflect.GenericArrayType; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; -import java.lang.reflect.WildcardType; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -/** - * Utility class for working with Java {@link Type}s and derivatives. This class is adapted heavily from the - * <a href="https://spring.io/projects/spring-framework">Spring Framework</a>, specifically the - * <a href="https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/util/TypeUtils.html">TypeUtils</a> - * class. - * - * @see java.lang.reflect.Type - * @see java.lang.reflect.GenericArrayType - * @see java.lang.reflect.ParameterizedType - * @see java.lang.reflect.WildcardType - * @see java.lang.Class - * @since 2.1 - */ -public final class TypeUtil { - - private TypeUtil() {} - - /** - * Gets all declared fields for the given class (including superclasses). - * - * @param cls the class to examine - * @return all declared fields for the given class (including superclasses). - * @see Class#getDeclaredFields() - */ - public static List<Field> getAllDeclaredFields(Class<?> cls) { - final List<Field> fields = new ArrayList<>(); - while (cls != null) { - for (final Field field : cls.getDeclaredFields()) { - fields.add(field); - } - cls = cls.getSuperclass(); - } - return fields; - } - /** - * Indicates if two {@link Type}s are assignment compatible. - * - * @param lhs the left hand side to check assignability to - * @param rhs the right hand side to check assignability from - * @return {@code true} if it is legal to assign a variable of type {@code rhs} to a variable of type {@code lhs} - * @see Class#isAssignableFrom(Class) - */ - public static boolean isAssignable(final Type lhs, final Type rhs) { - Objects.requireNonNull(lhs, "No left hand side type provided"); - Objects.requireNonNull(rhs, "No right hand side type provided"); - if (lhs.equals(rhs)) { - return true; - } - if (Object.class.equals(lhs)) { - // everything is assignable to Object - return true; - } - // raw type on left - if (lhs instanceof Class<?>) { - final Class<?> lhsClass = (Class<?>) lhs; - if (rhs instanceof Class<?>) { - // no generics involved - final Class<?> rhsClass = (Class<?>) rhs; - return lhsClass.isAssignableFrom(rhsClass); - } - if (rhs instanceof ParameterizedType) { - // check to see if the parameterized type has the same raw type as the lhs; this is legal - final Type rhsRawType = ((ParameterizedType) rhs).getRawType(); - if (rhsRawType instanceof Class<?>) { - return lhsClass.isAssignableFrom((Class<?>) rhsRawType); - } - } - if (lhsClass.isArray() && rhs instanceof GenericArrayType) { - // check for compatible array component types - return isAssignable(lhsClass.getComponentType(), ((GenericArrayType) rhs).getGenericComponentType()); - } - } - // parameterized type on left - if (lhs instanceof ParameterizedType) { - final ParameterizedType lhsType = (ParameterizedType) lhs; - if (rhs instanceof Class<?>) { - final Type lhsRawType = lhsType.getRawType(); - if (lhsRawType instanceof Class<?>) { - return ((Class<?>) lhsRawType).isAssignableFrom((Class<?>) rhs); - } - } else if (rhs instanceof ParameterizedType) { - final ParameterizedType rhsType = (ParameterizedType) rhs; - return isParameterizedAssignable(lhsType, rhsType); - } - } - // generic array type on left - if (lhs instanceof GenericArrayType) { - final Type lhsComponentType = ((GenericArrayType) lhs).getGenericComponentType(); - if (rhs instanceof Class<?>) { - // raw type on right - final Class<?> rhsClass = (Class<?>) rhs; - if (rhsClass.isArray()) { - return isAssignable(lhsComponentType, rhsClass.getComponentType()); - } - } else if (rhs instanceof GenericArrayType) { - return isAssignable(lhsComponentType, ((GenericArrayType) rhs).getGenericComponentType()); - } - } - // wildcard type on left - if (lhs instanceof WildcardType) { - return isWildcardAssignable((WildcardType) lhs, rhs); - } - // strange... - return false; - } - - private static boolean isParameterizedAssignable(final ParameterizedType lhs, final ParameterizedType rhs) { - if (lhs.equals(rhs)) { - // that was easy - return true; - } - final Type[] lhsTypeArguments = lhs.getActualTypeArguments(); - final Type[] rhsTypeArguments = rhs.getActualTypeArguments(); - final int size = lhsTypeArguments.length; - if (rhsTypeArguments.length != size) { - // clearly incompatible types - return false; - } - for (int i = 0; i < size; i++) { - // verify all type arguments are assignable - final Type lhsArgument = lhsTypeArguments[i]; - final Type rhsArgument = rhsTypeArguments[i]; - if (!lhsArgument.equals(rhsArgument) - && !(lhsArgument instanceof WildcardType - && isWildcardAssignable((WildcardType) lhsArgument, rhsArgument))) { - return false; - } - } - return true; - } - - private static boolean isWildcardAssignable(final WildcardType lhs, final Type rhs) { - final Type[] lhsUpperBounds = getEffectiveUpperBounds(lhs); - final Type[] lhsLowerBounds = getEffectiveLowerBounds(lhs); - if (rhs instanceof WildcardType) { - // oh boy, this scenario requires checking a lot of assignability! - final WildcardType rhsType = (WildcardType) rhs; - final Type[] rhsUpperBounds = getEffectiveUpperBounds(rhsType); - final Type[] rhsLowerBounds = getEffectiveLowerBounds(rhsType); - for (final Type lhsUpperBound : lhsUpperBounds) { - for (final Type rhsUpperBound : rhsUpperBounds) { - if (!isBoundAssignable(lhsUpperBound, rhsUpperBound)) { - return false; - } - } - for (final Type rhsLowerBound : rhsLowerBounds) { - if (!isBoundAssignable(lhsUpperBound, rhsLowerBound)) { - return false; - } - } - } - for (final Type lhsLowerBound : lhsLowerBounds) { - for (final Type rhsUpperBound : rhsUpperBounds) { - if (!isBoundAssignable(rhsUpperBound, lhsLowerBound)) { - return false; - } - } - for (final Type rhsLowerBound : rhsLowerBounds) { - if (!isBoundAssignable(rhsLowerBound, lhsLowerBound)) { - return false; - } - } - } - } else { - // phew, far less bounds to check - for (final Type lhsUpperBound : lhsUpperBounds) { - if (!isBoundAssignable(lhsUpperBound, rhs)) { - return false; - } - } - for (final Type lhsLowerBound : lhsLowerBounds) { - if (!isBoundAssignable(lhsLowerBound, rhs)) { - return false; - } - } - } - return true; - } - - private static Type[] getEffectiveUpperBounds(final WildcardType type) { - final Type[] upperBounds = type.getUpperBounds(); - return upperBounds.length == 0 ? new Type[] {Object.class} : upperBounds; - } - - private static Type[] getEffectiveLowerBounds(final WildcardType type) { - final Type[] lowerBounds = type.getLowerBounds(); - return lowerBounds.length == 0 ? new Type[] {null} : lowerBounds; - } - - private static boolean isBoundAssignable(final Type lhs, final Type rhs) { - return (rhs == null) || ((lhs != null) && isAssignable(lhs, rhs)); - } -}