/**
   * 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;
  }
  /**
   * Constructor.
   *
   * <p>Obtiene una nueva instancia de NotExistsCallToThisMethod.
   *
   * @param method el método cuyas llamadas se buscan.
   */
  public NotExistsCallToThisMethod(MethDec method) {

    super(
        "NotExistsCallToThisMethod:\n\t"
            + //$NON-NLS-1$
            "Makes sure no calls to the given method "
            + //$NON-NLS-1$
            '"'
            + method.getName().toString()
            + '"'
            + " exist"
            + ".\n\n"); //$NON-NLS-1$ //$NON-NLS-2$

    this.method = method;

    exprIds = new ArrayList<Integer>();
  }
  /**
   * Constructor.
   *
   * <p>Obtiene una nueva instancia de MethodIsNotAlreadyInSuperclasses.
   *
   * @param method el método cuyo equivalente en una superclase se desea buscar.
   * @param classDef la clase en cuyas superclases se busca el método.
   */
  public MethodIsNotAlreadyInSuperclasses(MethDec method, ClassDef classDef) {

    super(
        "MethodIsNotAlreadyInSuperclasses:\n\t"
            + //$NON-NLS-1$
            "Makes sure the given method "
            + '"'
            + method.getName().toString()
            + //$NON-NLS-1$
            '"'
            + " is not to be found within any of the superclasses of the "
            + //$NON-NLS-1$
            "class "
            + '"'
            + classDef.getName().toString()
            + '"'
            + ".\n\n"); //$NON-NLS-1$ //$NON-NLS-2$

    this.classDef = classDef;
    this.method = method;
  }
 /**
  * Obtiene el conjunto de variables locales de un método.
  *
  * @return el conjunto de variables locales del método.
  */
 public Collection<LocalDec> getCollection() {
   return methDec.getLocalDecs();
 }