Class ConstructorInstantiator
- java.lang.Object
-
- org.mockito.internal.creation.instance.ConstructorInstantiator
-
- All Implemented Interfaces:
Instantiator
public class ConstructorInstantiator extends java.lang.Object implements Instantiator
-
-
Field Summary
Fields Modifier and Type Field Description private java.lang.Object[]
constructorArgs
private boolean
hasOuterClassInstance
Whether or not the constructors used for creating an object refer to an outer instance or not.
-
Constructor Summary
Constructors Constructor Description ConstructorInstantiator(boolean hasOuterClassInstance, java.lang.Object... constructorArgs)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private java.lang.String
constructorArgsString()
private java.lang.String
constructorArgTypes()
private void
evaluateConstructor(java.util.List<java.lang.reflect.Constructor<?>> matchingConstructors, java.lang.reflect.Constructor<?> constructor)
Evalutesconstructor
against the currently foundmatchingConstructors
and determines if it's a better match to the given arguments, a worse match, or an equivalently good match.private static <T> T
invokeConstructor(java.lang.reflect.Constructor<?> constructor, java.lang.Object... params)
private InstantiationException
multipleMatchingConstructors(java.lang.Class<?> cls, java.util.List<java.lang.reflect.Constructor<?>> constructors)
<T> T
newInstance(java.lang.Class<T> cls)
Creates instance of given classprivate InstantiationException
noMatchingConstructor(java.lang.Class<?> cls)
private InstantiationException
paramsException(java.lang.Class<?> cls, java.lang.Exception e)
private static boolean
paramsMatch(java.lang.Class<?>[] types, java.lang.Object[] params)
private <T> T
withParams(java.lang.Class<T> cls, java.lang.Object... params)
-
-
-
Field Detail
-
hasOuterClassInstance
private final boolean hasOuterClassInstance
Whether or not the constructors used for creating an object refer to an outer instance or not. This member is only used to for constructing error messages. If an outer inject exists, it would be the first ([0]) element of theconstructorArgs
array.
-
constructorArgs
private final java.lang.Object[] constructorArgs
-
-
Method Detail
-
newInstance
public <T> T newInstance(java.lang.Class<T> cls)
Description copied from interface:Instantiator
Creates instance of given class- Specified by:
newInstance
in interfaceInstantiator
-
withParams
private <T> T withParams(java.lang.Class<T> cls, java.lang.Object... params)
-
invokeConstructor
private static <T> T invokeConstructor(java.lang.reflect.Constructor<?> constructor, java.lang.Object... params) throws java.lang.InstantiationException, java.lang.IllegalAccessException, java.lang.reflect.InvocationTargetException
- Throws:
java.lang.InstantiationException
java.lang.IllegalAccessException
java.lang.reflect.InvocationTargetException
-
paramsException
private InstantiationException paramsException(java.lang.Class<?> cls, java.lang.Exception e)
-
constructorArgTypes
private java.lang.String constructorArgTypes()
-
noMatchingConstructor
private InstantiationException noMatchingConstructor(java.lang.Class<?> cls)
-
constructorArgsString
private java.lang.String constructorArgsString()
-
multipleMatchingConstructors
private InstantiationException multipleMatchingConstructors(java.lang.Class<?> cls, java.util.List<java.lang.reflect.Constructor<?>> constructors)
-
paramsMatch
private static boolean paramsMatch(java.lang.Class<?>[] types, java.lang.Object[] params)
-
evaluateConstructor
private void evaluateConstructor(java.util.List<java.lang.reflect.Constructor<?>> matchingConstructors, java.lang.reflect.Constructor<?> constructor)
Evalutesconstructor
against the currently foundmatchingConstructors
and determines if it's a better match to the given arguments, a worse match, or an equivalently good match.This method tries to emulate the behavior specified in JLS 15.12.2. Compile-Time Step 2: Determine Method Signature. A constructor X is deemed to be a better match than constructor Y to the given argument list if they are both applicable, constructor X has at least one parameter than is more specific than the corresponding parameter of constructor Y, and constructor Y has no parameter than is more specific than the corresponding parameter in constructor X.
If
constructor
is a better match than the constructors in thematchingConstructors
list, the list is cleared, and it's added to the list as a singular best matching constructor (so far).
Ifconstructor
is an equivalently good of a match as the constructors in thematchingConstructors
list, it's added to the list.
Ifconstructor
is a worse match than the constructors in thematchingConstructors
list, the list will remain unchanged.- Parameters:
matchingConstructors
- A list of equivalently best matching constructors found so farconstructor
- The constructor to be evaluated against this list
-
-