/* * Copyright (c) 2007 Mockito contributors * This program is made available under the terms of the MIT License. */ package org.mockito.internal.util.reflection; import java.lang.reflect.Field; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; public class GenericMaster { /** * Finds the generic type (parametrized type) of the field. If the field is not generic it returns Object.class. * * @param field the field to inspect */ public Class<?> getGenericType(Field field) { Type generic = field.getGenericType(); if (generic instanceof ParameterizedType) { Type actual = ((ParameterizedType) generic).getActualTypeArguments()[0]; if (actual instanceof Class) { return (Class<?>) actual; } else if (actual instanceof ParameterizedType) { //in case of nested generics we don't go deep return (Class<?>) ((ParameterizedType) actual).getRawType(); } } return Object.class; } }