public static Class<?> getRawType(Type type) {
		if (type instanceof Class<?>) {
			// type is a normal class.
			return (Class<?>)type;
		}
		else if (type instanceof ParameterizedType) {
			ParameterizedType parameterizedType = (ParameterizedType)type;
			// I'm not exactly sure why getRawType() returns Type instead of Class.
			// Neal isn't either but suspects some pathological case related
			// to nested classes exists.
			Type rawType = parameterizedType.getRawType();
			Asserts.isTrue(rawType instanceof Class);
			return (Class<?>)rawType;
		}
		else if (type instanceof GenericArrayType) {
			Type componentType = ((GenericArrayType)type).getGenericComponentType();
			return Array.newInstance(getRawType(componentType), 0).getClass();
		}
		else if (type instanceof TypeVariable) {
			// we could use the variable's bounds, but that won't work if there are multiple.
			// having a raw type that's more general than necessary is okay
			return Object.class;
		}
		else if (type instanceof WildcardType) {
			return getRawType(((WildcardType)type).getUpperBounds()[0]);
		}
		else {
			String className = type == null ? "null" : type.getClass().getName();
			throw new IllegalArgumentException("Expected a Class, ParameterizedType, or "
					+ "GenericArrayType, but <" + type + "> is of type " + className);
		}
	}
public static Class<?> getRawType(Type type) {
		if (type instanceof Class<?>) {
		
			return (Class<?>)type;
		}
		else if (type instanceof ParameterizedType) {
			ParameterizedType parameterizedType = (ParameterizedType)type;
		
		
		
			Type rawType = parameterizedType.getRawType();
			Asserts.isTrue(rawType instanceof Class);
			return (Class<?>)rawType;
		}
		else if (type instanceof GenericArrayType) {
			Type componentType = ((GenericArrayType)type).getGenericComponentType();
			return Array.newInstance(getRawType(componentType), 0).getClass();
		}
		else if (type instanceof TypeVariable) {
		
		
			return Object.class;
		}
		else if (type instanceof WildcardType) {
			return getRawType(((WildcardType)type).getUpperBounds()[0]);
		}
		else {
			String className = type == null ? "null" : type.getClass().getName();
			throw new IllegalArgumentException("Expected a Class, ParameterizedType, or "
					+ "GenericArrayType, but <" + type + "> is of type " + className);
		}
	}
public static class<?> getrawtype(type type) { if (type instanceof class<?>) { return (class<?>)type; } else if (type instanceof parameterizedtype) { parameterizedtype parameterizedtype = (parameterizedtype)type; type rawtype = parameterizedtype.getrawtype(); asserts.istrue(rawtype instanceof class); return (class<?>)rawtype; } else if (type instanceof genericarraytype) { type componenttype = ((genericarraytype)type).getgenericcomponenttype(); return array.newinstance(getrawtype(componenttype), 0).getclass(); } else if (type instanceof typevariable) { return object.class; } else if (type instanceof wildcardtype) { return getrawtype(((wildcardtype)type).getupperbounds()[0]); } else { string classname = type == null ? "null" : type.getclass().getname(); throw new illegalargumentexception("expected a class, parameterizedtype, or " + "genericarraytype, but <" + type + "> is of type " + classname); } }