public boolean matches(T target) {
        Set<TypeDescription> previous = new HashSet<TypeDescription>();
        for (TypeDefinition typeDefinition : target) {
            if (!previous.add(typeDefinition.asErasure())) { // Main type can be an interface.
                return false; // Avoids a life-lock when encountering a recursive type-definition.
            } else if (matcher.matches(typeDefinition.asGenericType())) {
                return true;
            }
            LinkedList<TypeDefinition> interfaceTypes = new LinkedList<TypeDefinition>(typeDefinition.getInterfaces());
            while (!interfaceTypes.isEmpty()) {
                TypeDefinition interfaceType = interfaceTypes.removeFirst();
                if (previous.add(interfaceType.asErasure())) {
                    if (matcher.matches(interfaceType.asGenericType())) {
                        return true;
                    } else {
                        interfaceTypes.addAll(interfaceType.getInterfaces());
                    }
                }
            }
        }
        return false;
    }
public boolean matches ( T target ) { Set < TypeDescription > previous = new HashSet < TypeDescription > ( ) ; for ( TypeDefinition typeDefinition : target ) { if ( ! previous . add ( typeDefinition . asErasure ( ) ) ) { return false ; } else if ( matcher . matches ( typeDefinition . asGenericType ( ) ) ) { return true ; } LinkedList < TypeDefinition > interfaceTypes = new LinkedList < TypeDefinition > ( typeDefinition . getInterfaces ( ) ) ; while ( ! interfaceTypes . isEmpty ( ) ) { TypeDefinition interfaceType = interfaceTypes . removeFirst ( ) ; if ( previous . add ( interfaceType . asErasure ( ) ) ) { if ( matcher . matches ( interfaceType . asGenericType ( ) ) ) { return true ; } else { interfaceTypes . addAll ( interfaceType . getInterfaces ( ) ) ; } } } } return false ; }
{@inheritDoc}