/**
   * Comprueba el valor de verdad del predicado.
   *
   * @return <code>true</code> si no existe el método en ninguna superclase de la clase
   *     especificada; <code>false</code> en caso contrario.
   */
  public boolean isValid() {

    NotExistsMethodWithNameInClass subPredicate;
    ClassDef nextSuperclass;
    Name uniqueName;

    // Se obtiene la lista de parámetros del método buscado.
    int parameterTypesFirstIndex = method.getUniqueName().toString().indexOf('%');

    String parameterTypesPart = ""; // $NON-NLS-1$
    if (parameterTypesFirstIndex >= 0)
      parameterTypesPart = method.getUniqueName().toString().substring(parameterTypesFirstIndex);

    // Se obtienen todas las superclases de la clase seleccionada.
    Iterator<ClassDef> superClassIt = new SuperclassCollector(classDef).getCollection().iterator();

    while (superClassIt.hasNext()) {
      nextSuperclass = superClassIt.next();

      uniqueName =
          nextSuperclass
              .getUniqueName()
              .concat('~' + method.getName().toString() + parameterTypesPart);

      subPredicate = new NotExistsMethodWithNameInClass(nextSuperclass, uniqueName);

      if (!(subPredicate.isValid())) return false;
    }

    return true;
  }