Enum ArgumentTypeResolver

  • All Implemented Interfaces:
    java.io.Serializable, java.lang.Comparable<ArgumentTypeResolver>, MethodDelegationBinder.AmbiguityResolver

    public enum ArgumentTypeResolver
    extends java.lang.Enum<ArgumentTypeResolver>
    implements MethodDelegationBinder.AmbiguityResolver
    Implementation of an MethodDelegationBinder.AmbiguityResolver that resolves two conflicting bindings by considering most-specific types of target method parameters in the same manner as the Java compiler resolves bindings of overloaded method.

     

    This ambiguity resolver:
    1. Checks for each parameter of the source method if a one-to-one parameter binding to both of the target methods exist.
    2. If any of the source method parameters were bound one-to-one to both target methods, the method with the most specific type is considered as dominant.
    3. If this result is dominant for both the left and the right target method, this resolver will consider the binding as ambiguous.
    4. If none of the methods is dominant and if the comparison did not result in an ambiguous resolution, the method that consists of the most one-to-one parameter bindings is considered dominant.
    Primitive types are considered dominant in the same manner as by the Java compiler.

     

    For example: If a source method only parameter was successfully bound one-to-one to the only parameters of the target methods foo(Object) and bar(String), this ambiguity resolver will detect that the String type is more specific than the Object type and determine bar(String) as the dominant binding.
    • Constructor Detail

      • ArgumentTypeResolver

        private ArgumentTypeResolver()
    • Method Detail

      • values

        public static ArgumentTypeResolver[] values()
        Returns an array containing the constants of this enum type, in the order they are declared. This method may be used to iterate over the constants as follows:
        for (ArgumentTypeResolver c : ArgumentTypeResolver.values())
            System.out.println(c);
        
        Returns:
        an array containing the constants of this enum type, in the order they are declared
      • valueOf

        public static ArgumentTypeResolver valueOf​(java.lang.String name)
        Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)
        Parameters:
        name - the name of the enum constant to be returned.
        Returns:
        the enum constant with the specified name
        Throws:
        java.lang.IllegalArgumentException - if this enum type has no constant with the specified name
        java.lang.NullPointerException - if the argument is null
      • resolveRivalBinding

        private static MethodDelegationBinder.AmbiguityResolver.Resolution resolveRivalBinding​(TypeDescription sourceParameterType,
                                                                                               int leftParameterIndex,
                                                                                               MethodDelegationBinder.MethodBinding left,
                                                                                               int rightParameterIndex,
                                                                                               MethodDelegationBinder.MethodBinding right)
        Resolves two bindings by comparing their binding of similar arguments and determining their most specific types.
        Parameters:
        sourceParameterType - The parameter type of the source method
        leftParameterIndex - The index of the parameter of the left method.
        left - The left method's parameter binding.
        rightParameterIndex - The index of the parameter of the right method.
        right - The right method's parameter binding.
        Returns:
        A resolution according to the given parameters.
      • resolveByScore

        private static MethodDelegationBinder.AmbiguityResolver.Resolution resolveByScore​(int boundParameterScore)
        Resolves the most specific method by their score. A method's score is calculated by the absolute number of parameters that were bound by using an explicit Argument annotation.
        Parameters:
        boundParameterScore - The difference of the scores of the left and the right method.
        Returns:
        A resolution according to this score.