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[]constructorArgsprivate booleanhasOuterClassInstanceWhether 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.StringconstructorArgsString()private java.lang.StringconstructorArgTypes()private voidevaluateConstructor(java.util.List<java.lang.reflect.Constructor<?>> matchingConstructors, java.lang.reflect.Constructor<?> constructor)Evalutesconstructoragainst the currently foundmatchingConstructorsand determines if it's a better match to the given arguments, a worse match, or an equivalently good match.private static <T> TinvokeConstructor(java.lang.reflect.Constructor<?> constructor, java.lang.Object... params)private InstantiationExceptionmultipleMatchingConstructors(java.lang.Class<?> cls, java.util.List<java.lang.reflect.Constructor<?>> constructors)<T> TnewInstance(java.lang.Class<T> cls)Creates instance of given classprivate InstantiationExceptionnoMatchingConstructor(java.lang.Class<?> cls)private InstantiationExceptionparamsException(java.lang.Class<?> cls, java.lang.Exception e)private static booleanparamsMatch(java.lang.Class<?>[] types, java.lang.Object[] params)private <T> TwithParams(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 theconstructorArgsarray.
-
constructorArgs
private final java.lang.Object[] constructorArgs
-
-
Method Detail
-
newInstance
public <T> T newInstance(java.lang.Class<T> cls)
Description copied from interface:InstantiatorCreates instance of given class- Specified by:
newInstancein 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.InstantiationExceptionjava.lang.IllegalAccessExceptionjava.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)Evalutesconstructoragainst the currently foundmatchingConstructorsand 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
constructoris a better match than the constructors in thematchingConstructorslist, the list is cleared, and it's added to the list as a singular best matching constructor (so far).
Ifconstructoris an equivalently good of a match as the constructors in thematchingConstructorslist, it's added to the list.
Ifconstructoris a worse match than the constructors in thematchingConstructorslist, 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
-
-