public static SymbolReference<ResolvedConstructorDeclaration> findMostApplicable(
            List<ResolvedConstructorDeclaration> constructors, List<ResolvedType> argumentsTypes, TypeSolver typeSolver) {
        SymbolReference<ResolvedConstructorDeclaration> res =
                findMostApplicable(constructors, argumentsTypes, typeSolver, false);
        if (res.isSolved()) {
            return res;
        }
        return findMostApplicable(constructors, argumentsTypes, typeSolver, true);
    }
public static SymbolReference < ResolvedConstructorDeclaration > findMostApplicable ( List < ResolvedConstructorDeclaration > constructors , List < ResolvedType > argumentsTypes , TypeSolver typeSolver ) { SymbolReference < ResolvedConstructorDeclaration > res = findMostApplicable ( constructors , argumentsTypes , typeSolver , false ) ; if ( res . isSolved ( ) ) { return res ; } return findMostApplicable ( constructors , argumentsTypes , typeSolver , true ) ; }
@param constructors        we expect the methods to be ordered such that inherited methods are later in the list
@param argumentsTypes
@param typeSolver
@return