You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mb...@apache.org on 2013/10/25 17:25:23 UTC
svn commit: r1535763 -
/commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/reflect/TypeUtils.java
Author: mbenson
Date: Fri Oct 25 15:25:22 2013
New Revision: 1535763
URL: http://svn.apache.org/r1535763
Log:
Validation
Modified:
commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/reflect/TypeUtils.java
Modified: commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/reflect/TypeUtils.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/reflect/TypeUtils.java?rev=1535763&r1=1535762&r2=1535763&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/reflect/TypeUtils.java (original)
+++ commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/reflect/TypeUtils.java Fri Oct 25 15:25:22 2013
@@ -946,15 +946,18 @@ public class TypeUtils {
* {@code TreeSet} is {@code ? extends Map<Integer, ? extends
* Collection<?>>}.</p>
*
- * @param cls the class whose type parameters are to be determined
+ * @param cls the class whose type parameters are to be determined, not {@code null}
* @param superType the super type from which {@code cls}'s type
- * arguments are to be determined
+ * arguments are to be determined, not {@code null}
* @return a {@code Map} of the type assignments that could be determined
* for the type variables in each type in the inheritance hierarchy from
* {@code type} to {@code toClass} inclusive.
*/
public static Map<TypeVariable<?>, Type> determineTypeArguments(final Class<?> cls,
final ParameterizedType superType) {
+ Validate.notNull(cls, "cls is null");
+ Validate.notNull(superType, "superType is null");
+
final Class<?> superClass = getRawType(superType);
// compatibility check
@@ -1114,11 +1117,12 @@ public class TypeUtils {
* </p>
*
* @param bounds an array of types representing the upper bounds of either
- * {@link WildcardType} or {@link TypeVariable}.
+ * {@link WildcardType} or {@link TypeVariable}, not {@code null}.
* @return an array containing the values from {@code bounds} minus the
* redundant types.
*/
public static Type[] normalizeUpperBounds(final Type[] bounds) {
+ Validate.notNull(bounds, "null value specified for bounds array");
// don't bother if there's only one (or none) type
if (bounds.length < 2) {
return bounds;
@@ -1150,10 +1154,11 @@ public class TypeUtils {
* returns the result of {@link TypeVariable#getBounds()} passed into
* {@link #normalizeUpperBounds}.</p>
*
- * @param typeVariable the subject type variable
+ * @param typeVariable the subject type variable, not {@code null}
* @return a non-empty array containing the bounds of the type variable.
*/
public static Type[] getImplicitBounds(final TypeVariable<?> typeVariable) {
+ Validate.notNull(typeVariable, "typeVariable is null");
final Type[] bounds = typeVariable.getBounds();
return bounds.length == 0 ? new Type[] { Object.class } : normalizeUpperBounds(bounds);
@@ -1165,11 +1170,12 @@ public class TypeUtils {
* it returns the result of {@link WildcardType#getUpperBounds()}
* passed into {@link #normalizeUpperBounds}.</p>
*
- * @param wildcardType the subject wildcard type
+ * @param wildcardType the subject wildcard type, not {@code null}
* @return a non-empty array containing the upper bounds of the wildcard
* type.
*/
public static Type[] getImplicitUpperBounds(final WildcardType wildcardType) {
+ Validate.notNull(wildcardType, "wildcardType is null");
final Type[] bounds = wildcardType.getUpperBounds();
return bounds.length == 0 ? new Type[] { Object.class } : normalizeUpperBounds(bounds);
@@ -1180,11 +1186,12 @@ public class TypeUtils {
* {@link WildcardType#getLowerBounds()} returns an empty array. Otherwise,
* it returns the result of {@link WildcardType#getLowerBounds()}.</p>
*
- * @param wildcardType the subject wildcard type
+ * @param wildcardType the subject wildcard type, not {@code null}
* @return a non-empty array containing the lower bounds of the wildcard
* type.
*/
public static Type[] getImplicitLowerBounds(final WildcardType wildcardType) {
+ Validate.notNull(wildcardType, "wildcardType is null");
final Type[] bounds = wildcardType.getLowerBounds();
return bounds.length == 0 ? new Type[] { null } : bounds;
@@ -1199,11 +1206,12 @@ public class TypeUtils {
* in {@code typeVarAssigns}.</p>
*
* @param typeVarAssigns specifies the potential types to be assigned to the
- * type variables.
+ * type variables, not {@code null}.
* @return whether or not the types can be assigned to their respective type
* variables.
*/
public static boolean typesSatisfyVariables(final Map<TypeVariable<?>, Type> typeVarAssigns) {
+ Validate.notNull(typeVarAssigns, "typeVarAssigns is null");
// all types must be assignable to all the bounds of the their mapped
// type variable.
for (final Map.Entry<TypeVariable<?>, Type> entry : typeVarAssigns.entrySet()) {
@@ -1460,6 +1468,8 @@ public class TypeUtils {
*/
public static final ParameterizedType parameterize(final Class<?> raw,
final Map<TypeVariable<?>, Type> typeArgMappings) {
+ Validate.notNull(raw, "raw class is null");
+ Validate.notNull(typeArgMappings, "typeArgMappings is null");
return parameterizeWithOwner(null, raw, extractTypeArgumentsFrom(typeArgMappings, raw.getTypeParameters()));
}
@@ -1475,7 +1485,7 @@ public class TypeUtils {
*/
public static final ParameterizedType parameterizeWithOwner(final Type owner, final Class<?> raw,
final Type... typeArguments) {
- Validate.notNull(raw, "raw class");
+ Validate.notNull(raw, "raw class is null");
final Type useOwner;
if (raw.getEnclosingClass() == null) {
Validate.isTrue(owner == null, "no owner allowed for top-level %s", raw);
@@ -1487,8 +1497,10 @@ public class TypeUtils {
"%s is invalid owner type for parameterized %s", owner, raw);
useOwner = owner;
}
- Validate.isTrue(raw.getTypeParameters().length == Validate.noNullElements(typeArguments,
- "null type argument at index %s").length);
+ Validate.noNullElements(typeArguments, "null type argument at index %s");
+ Validate.isTrue(raw.getTypeParameters().length == typeArguments.length,
+ "invalid number of type parameters specified: expected %s, got %s", raw.getTypeParameters().length,
+ typeArguments.length);
return new ParameterizedTypeImpl(raw, useOwner, typeArguments);
}
@@ -1504,6 +1516,8 @@ public class TypeUtils {
*/
public static final ParameterizedType parameterizeWithOwner(final Type owner, final Class<?> raw,
final Map<TypeVariable<?>, Type> typeArgMappings) {
+ Validate.notNull(raw, "raw class is null");
+ Validate.notNull(typeArgMappings, "typeArgMappings is null");
return parameterizeWithOwner(owner, raw, extractTypeArgumentsFrom(typeArgMappings, raw.getTypeParameters()));
}
@@ -1541,7 +1555,7 @@ public class TypeUtils {
* @since 3.2
*/
public static GenericArrayType genericArrayType(final Type componentType) {
- return new GenericArrayTypeImpl(componentType);
+ return new GenericArrayTypeImpl(Validate.notNull(componentType, "componentType is null"));
}
/**
@@ -1635,7 +1649,7 @@ public class TypeUtils {
/**
* Present a given type as a Java-esque String.
*
- * @param type the type to create a String representation for
+ * @param type the type to create a String representation for, not {@code null}
* @return String
* @since 3.2
*/
@@ -1662,11 +1676,12 @@ public class TypeUtils {
/**
* Format a {@link TypeVariable} including its {@link GenericDeclaration}.
*
- * @param var the type variable to create a String representation for
+ * @param var the type variable to create a String representation for, not {@code null}
* @return String
* @since 3.2
*/
public static String toLongString(TypeVariable<?> var) {
+ Validate.notNull(var, "var is null");
final StringBuilder buf = new StringBuilder();
final GenericDeclaration d = ((TypeVariable<?>) var).getGenericDeclaration();
if (d instanceof Class<?>) {