/**
   * Constructor.
   *
   * <p>Obtiene una nueva instancia de <code>RenameGenericClassType</code>.
   *
   * @param classDef la clase cuyos tipos genéricos se deben renombrar.
   * @param newName el nuevo que debe darse a los tipos renombrados.
   */
  public RenameGenericClassType(ClassDef classDef, Name newName) {

    super();

    this.classDef = classDef;
    this.newName = newName;

    actions = new ArrayList<Action>();

    listenerReg = RelayListenerRegistry.getInstance();
  }
  /** Ejecuta los renombrado. */
  public void run() {

    listenerReg.notify("# run():RenameGenericClassType #"); // $NON-NLS-1$

    Collection<Type> types = MOONRefactoring.getModel().getTypes();

    for (Type type : types)
      if (type instanceof ClassType
          && type.getClassDef() != null
          && type.getClassDef().isGeneric()
          && ((ClassType) type).getClassDef() == classDef) {

        actions.add(new RenameType(((ClassType) type), newName));
      }

    for (Action next : actions) next.run();
  }
  /** Deshace los renombrados. */
  @Override
  public void undo() {
    listenerReg.notify("# undo():RenameGenericClassType #"); // $NON-NLS-1$

    for (Action next : actions) next.undo();
  }