A type which can be narrowed in subclasses.
A type which can be narrowed in subclasses. Roughly equivalent to adding a type parameter to the class.
Constructs a new instance of type T with the parameter values supplied.
Constructs a new instance of type T with the parameter values set on the builder (including defaults).
Builds an instance of Argument (or sub-class thereof) from the provided values.
Builds an instance of Argument (or sub-class thereof) from the provided values.
Attempts to build an instance using only default values.
Attempts to build an instance using only default values. Will fail if any argument does not have a default.
Extracts information about the parameters to the provided method (a constructor), their types, their concrete implementation classes, etc.
Extracts information about the parameters to the provided method (a constructor), their types, their concrete implementation classes, etc. Populates the information into the instance level ArgumentLookup object for easy querying.
a method to be examined - for now always a constructor
Picks the constructor that should be used.
Picks the constructor that should be used. Can be overridden by child classes. If there is one constructor, return it. Otherwise, if there is a primer constructor return that. Otherwise throw a IllegalArgumentException.
Class to manage the process of inspecting another class and it's constructor(s) and then assembling the necessary information to build an instance reflectively.
Three classes work together to manage this process; more functionality can be added but will generally require subclassing 2-3 of these classes: