001/*
002 * This file is part of Baritone.
003 *
004 * Baritone is free software: you can redistribute it and/or modify
005 * it under the terms of the GNU Lesser General Public License as published by
006 * the Free Software Foundation, either version 3 of the License, or
007 * (at your option) any later version.
008 *
009 * Baritone is distributed in the hope that it will be useful,
010 * but WITHOUT ANY WARRANTY; without even the implied warranty of
011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
012 * GNU Lesser General Public License for more details.
013 *
014 * You should have received a copy of the GNU Lesser General Public License
015 * along with Baritone.  If not, see <https://www.gnu.org/licenses/>.
016 */
017
018package baritone.api.utils;
019
020import java.lang.reflect.ParameterizedType;
021import java.lang.reflect.Type;
022
023/**
024 * @author Brady
025 * @since 4/20/2019
026 */
027public final class TypeUtils {
028
029    private TypeUtils() {}
030
031    /**
032     * Resolves the "base type" for the specified type. For example, if the specified
033     * type is {@code List<String>}, then {@code List.class} will be returned. If the
034     * specified type is already a class, then it is directly returned.
035     *
036     * @param type The type to resolve
037     * @return The base class
038     */
039    public static Class<?> resolveBaseClass(Type type) {
040        return type instanceof Class ? (Class<?>) type
041                : type instanceof ParameterizedType ? (Class<?>) ((ParameterizedType) type).getRawType()
042                : null;
043    }
044}