Class NullPointerTester
NullPointerException
or UnsupportedOperationException
whenever null is passed to a
parameter whose declaration or type isn't annotated with an annotation with the simple name
Nullable
, CheckForNull
, NullableType
, or NullableDecl
.
The tested methods and constructors are invoked -- each time with one parameter being null and
the rest not null -- and the test fails if no expected exception is thrown.
NullPointerTester
uses best effort to pick non-null default values for many common JDK and Guava
types, and also for interfaces and public classes that have public parameter-less constructors.
When the non-null default value for a particular parameter type cannot be provided by
NullPointerTester
, the caller can provide a custom non-null default value for the parameter type
via setDefault(java.lang.Class<T>, T)
.
- Since:
- 10.0
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static enum
Strategy for exception type matching used byNullPointerTester
.private static enum
Looks for declaration nullness annotations and, if supported, type-use nullness annotations.private static final class
static enum
Visibility of any method or constructor. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final ClassToInstanceMap
<Object> private static final ImmutableSet
<String> private static final NullPointerTester.NullnessAnnotationReader
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate static boolean
private Object[]
buildParamList
(Invokable<?, ?> invokable, int indexOfParamToSetToNull) private static boolean
containsNullable
(Annotation[] annotations) private <F,
T> Converter <F, T> defaultConverter
(TypeToken<F> convertFromType, TypeToken<T> convertToType) private <T> T
getDefaultValue
(TypeToken<T> type) private static TypeToken
<?> getFirstTypeParameter
(Type type) (package private) ImmutableList
<Method> getInstanceMethodsToTest
(Class<?> c, NullPointerTester.Visibility minimalVisibility) ignore
(Constructor<?> constructor) Ignoreconstructor
in the tests that follow.Ignoremethod
in the tests that follow.private static Invokable
<?, ?> private static boolean
Returns true if the given member is a method that overridesObject.equals(Object)
.private boolean
(package private) static boolean
isNullable
(Invokable<?, ?> invokable) (package private) static boolean
isNullable
(Parameter param) (package private) static boolean
isPrimitiveOrNullable
(Parameter param) private <T> T
newDefaultReturningProxy
(TypeToken<T> type) setDefault
(Class<T> type, T value) Sets a default value that can be used for any parameter of typetype
.void
RunstestConstructor(java.lang.reflect.Constructor<?>)
on every public constructor in classc
.void
testAllPublicInstanceMethods
(Object instance) RunstestMethod(java.lang.Object, java.lang.reflect.Method)
on every public instance method of the class ofinstance
, including those inherited from superclasses of the same package.void
RunstestMethod(java.lang.Object, java.lang.reflect.Method)
on every public static method of classc
, including those "inherited" from superclasses of the same package.void
testConstructor
(Constructor<?> ctor) Verifies thatctor
produces aNullPointerException
orUnsupportedOperationException
whenever any of its non-nullable parameters are null.void
testConstructorParameter
(Constructor<?> ctor, int paramIndex) Verifies thatctor
produces aNullPointerException
orUnsupportedOperationException
when the parameter in positionparamIndex
is null.void
testConstructors
(Class<?> c, NullPointerTester.Visibility minimalVisibility) RunstestConstructor(java.lang.reflect.Constructor<?>)
on every constructor in classc
that has at leastminimalVisibility
.void
testInstanceMethods
(Object instance, NullPointerTester.Visibility minimalVisibility) RunstestMethod(java.lang.Object, java.lang.reflect.Method)
on every instance method of the class ofinstance
with at leastminimalVisibility
, including those inherited from superclasses of the same package.void
testMethod
(Object instance, Method method) Verifies thatmethod
produces aNullPointerException
orUnsupportedOperationException
whenever any of its non-nullable parameters are null.void
testMethodParameter
(Object instance, Method method, int paramIndex) Verifies thatmethod
produces aNullPointerException
orUnsupportedOperationException
when the parameter in positionparamIndex
is null.private void
testParameter
(Object instance, Invokable<?, ?> invokable, int paramIndex, Class<?> testedClass) Verifies thatinvokable
produces aNullPointerException
orUnsupportedOperationException
when the parameter in positionparamIndex
is null.void
testStaticMethods
(Class<?> c, NullPointerTester.Visibility minimalVisibility) RunstestMethod(java.lang.Object, java.lang.reflect.Method)
on every static method of classc
that has at leastminimalVisibility
, including those "inherited" from superclasses of the same package.
-
Field Details
-
defaults
-
ignoredMembers
-
policy
-
NULLABLE_ANNOTATION_SIMPLE_NAMES
-
NULLNESS_ANNOTATION_READER
-
-
Constructor Details
-
NullPointerTester
public NullPointerTester()
-
-
Method Details
-
setDefault
Sets a default value that can be used for any parameter of typetype
. Returns this object. -
ignore
Ignoremethod
in the tests that follow. Returns this object.- Since:
- 13.0
-
ignore
Ignoreconstructor
in the tests that follow. Returns this object.- Since:
- 22.0
-
testConstructors
RunstestConstructor(java.lang.reflect.Constructor<?>)
on every constructor in classc
that has at leastminimalVisibility
. -
testAllPublicConstructors
RunstestConstructor(java.lang.reflect.Constructor<?>)
on every public constructor in classc
. -
testStaticMethods
RunstestMethod(java.lang.Object, java.lang.reflect.Method)
on every static method of classc
that has at leastminimalVisibility
, including those "inherited" from superclasses of the same package. -
testAllPublicStaticMethods
RunstestMethod(java.lang.Object, java.lang.reflect.Method)
on every public static method of classc
, including those "inherited" from superclasses of the same package. -
testInstanceMethods
RunstestMethod(java.lang.Object, java.lang.reflect.Method)
on every instance method of the class ofinstance
with at leastminimalVisibility
, including those inherited from superclasses of the same package. -
getInstanceMethodsToTest
ImmutableList<Method> getInstanceMethodsToTest(Class<?> c, NullPointerTester.Visibility minimalVisibility) -
testAllPublicInstanceMethods
RunstestMethod(java.lang.Object, java.lang.reflect.Method)
on every public instance method of the class ofinstance
, including those inherited from superclasses of the same package. -
testMethod
Verifies thatmethod
produces aNullPointerException
orUnsupportedOperationException
whenever any of its non-nullable parameters are null.- Parameters:
instance
- the instance to invokemethod
on, or null ifmethod
is static
-
testConstructor
Verifies thatctor
produces aNullPointerException
orUnsupportedOperationException
whenever any of its non-nullable parameters are null. -
testMethodParameter
Verifies thatmethod
produces aNullPointerException
orUnsupportedOperationException
when the parameter in positionparamIndex
is null. If this parameter is marked nullable, this method does nothing.- Parameters:
instance
- the instance to invokemethod
on, or null ifmethod
is static
-
testConstructorParameter
Verifies thatctor
produces aNullPointerException
orUnsupportedOperationException
when the parameter in positionparamIndex
is null. If this parameter is marked nullable, this method does nothing. -
testParameter
private void testParameter(Object instance, Invokable<?, ?> invokable, int paramIndex, Class<?> testedClass) Verifies thatinvokable
produces aNullPointerException
orUnsupportedOperationException
when the parameter in positionparamIndex
is null. If this parameter is marked nullable, this method does nothing.- Parameters:
instance
- the instance to invokeinvokable
on, or null ifinvokable
is static
-
buildParamList
-
getDefaultValue
-
defaultConverter
-
getFirstTypeParameter
-
newDefaultReturningProxy
-
invokable
-
isPrimitiveOrNullable
-
isNullable
-
isNullable
-
containsNullable
-
isIgnored
-
isEquals
Returns true if the given member is a method that overridesObject.equals(Object)
.The documentation for
Object.equals(java.lang.Object)
says it should accept null, so don't require an explicit@Nullable
annotation (see #1819).It is not necessary to consider visibility, return type, or type parameter declarations. The declaration of a method with the same name and formal parameters as
Object.equals(java.lang.Object)
that is not public and boolean-returning, or that declares any type parameters, would be rejected at compile-time. -
annotatedTypeExists
private static boolean annotatedTypeExists()
-