public void doTransformPM(final PMProject pm_project) {
    final SimpleName element = (SimpleName) location.getASTNode();
    final IBinding binding = element.resolveBinding();

    // 		if (binding != null) {
    // 			final int kind = binding.getKind();

    // 			if (kind == IBinding.TYPE
    // 			    || (kind == IBinding.METHOD
    // 				&& ((IMethodBinding) binding).isConstructor())) {
    // 				// rename the associated type and all constructors
    // 				final ITypeBinding declaring_class = (kind == IBinding.TYPE)? (ITypeBinding) binding :
    // ((IMethodBinding) binding).getDeclaringClass();
    // 				final IMethodBinding[] methods = declaring_class.getDeclaredMethods();
    // 				final AType type = new AType(tproject, (IType) declaring_class.getJavaElement());
    // 				final LinkedList<AMethod> constructors = new LinkedList<AMethod>();

    // 				for (IMethodBinding b : methods)
    // 					if (b.isConstructor())
    // 						constructors.add(new AMethod(tproject, (IMethod) b.getJavaElement()));

    // 				// We found all that needs renaming.
    // 				System.err.println("--< start >--------------------------------------");
    // 				System.err.println("=| " + type + "\n" + type.getASTNode());
    // 				System.err.println("-- Complex rename : " + constructors.size() + " constructors.");
    // 				for (AMethod constructor : constructors) {
    // 					System.err.println("-- rename constructor " + constructor);
    // 					doTransformPMOne(pm_project, ((MethodDeclaration) constructor.getASTNode()).getName());
    // 				}
    // 				System.err.println("-- rename class " + type);

    // 				final ASTNode n = type.getASTNode();
    // 				SimpleName name = null;
    // 				if (n instanceof SimpleName)
    // 					name = (SimpleName) n;
    // 				else if (n instanceof CompilationUnit) {
    // 					final List<?> list = ((CompilationUnit)n).types();
    // 					for (Object o : list) {
    // 						if (o instanceof TypeDeclaration) {
    // 							TypeDeclaration tdecl = (TypeDeclaration) o;
    // 							if (name == null)
    // 								name = tdecl.getName();
    // 							else
    // 								throw new RuntimeException("Multiple classes to rename: at least " + name + " and " +
    // tdecl
    // 											   + " (in " + type + ")!");
    // 						}
    // 					}
    // 				} else
    // 					throw new RuntimeException("Don't know how to get SimpleName from " + n.getClass());

    // 				doTransformPMOne(pm_project, name);
    // 				System.err.println("--< end >--------------------------------------");

    // 				return;
    // 			}
    // 		}

    System.err.println("-- Doing simple renaming on " + element);
    doTransformPMOne(pm_project, element);
  }
  public JavaRefactoringDescriptor buildEclipseDescriptor() throws Exception {
    System.err.println("[eclipse-rename] Building descriptor...");
    IJavaElement element = location.getIJavaElement();
    String kind = getRenameKind(element);
    // [1] BUGFIX was needed:  The scripting interface didn't allow VariableDeclarationFragments as
    // IJavaElements
    // and thus had to be extended

    // [2] WORKAROUND for scripting interface bug (see below)
    if (kind.equals(IJavaRefactorings.RENAME_METHOD)) {
      IMethod m = (IMethod) element;
      if (m.isConstructor()) {
        // Rename the type instead (as the UI would do-- the scripting interface will only rename
        // the constructor, which is broken)
        kind = IJavaRefactorings.RENAME_TYPE;
        element = m.getDeclaringType();
      }
    }

    System.err.println("[eclipse-rename] Kind = " + kind + ",  element = " + element);

    // [3] Don't test for package fragments now
    if (kind.equals(IJavaRefactorings.RENAME_PACKAGE)) return null; // don't bother with this now

    if (element == null) {
      System.err.println("!!! ABORT: No IJavaElement to represent location");
      throw new RuntimeException("!!! ABORT: No IJavaElement for location");
    }

    if (element instanceof ILocalVariable) {
      System.err.println("element is of type " + element.getClass());
      final ILocalVariable fLocalVariable = (ILocalVariable) element;
      final ISourceRange sourceRange = fLocalVariable.getNameRange();
      final CompilationUnit fCompilationUnitNode = location.getCompilationUnit();
      ASTNode name = NodeFinder.perform(fCompilationUnitNode, sourceRange);
      System.err.println("node is of type " + name.getClass());
      if (name == null) System.err.println("!!! ILV doesn't have associated name!");
      if (name.getParent() instanceof VariableDeclaration)
        System.err.println("ILV has parent : " + (VariableDeclaration) name.getParent());
      else
        System.err.println(
            "!!! ILV doesn't have var declaration parent, instead " + name.getParent().getClass());
    }

    System.err.println("Trying to rename a " + kind + ": " + element);
    if (element instanceof SimpleName)
      System.err.println("  Name = '" + ((SimpleName) element).getIdentifier() + "'");

    if (kind.equals(IJavaRefactorings.RENAME_TYPE)) {
      System.err.println("(Possibly need a new launch configuration)");
      tproject.renameClass((IType) element, new_name);
    }

    final RenameJavaElementDescriptor descriptor =
        (RenameJavaElementDescriptor) getDescriptor(kind);
    descriptor.setJavaElement(element);
    descriptor.setNewName(this.new_name);

    if (element.getElementType() == IJavaElement.TYPE
        || element.getElementType() == IJavaElement.PACKAGE_FRAGMENT)
      descriptor.setUpdateQualifiedNames(true);
    else descriptor.setUpdateQualifiedNames(false);

    descriptor.setUpdateReferences(true);
    descriptor.setDeprecateDelegate(false);
    descriptor.setRenameGetters(false);
    descriptor.setRenameSetters(false);
    descriptor.setKeepOriginal(false);
    descriptor.setUpdateHierarchy(false);
    descriptor.setUpdateSimilarDeclarations(false);

    // [3] Fix:  Eclipse will complain if the transformation is a no-op, but we don't want that:
    if (element.getElementName().equals(this.new_name)) throw new NOPException();

    System.err.println("[eclipse-rename] Computed descriptor.");
    return descriptor;
  }