# Eclipse JDT Refactoring programmatisch verwenden:



## Thomas Darimont (4. September 2006)

Hallo!

hier mal ein kleines Beispiel wie man das Eclipse Refactoring aus dem JDT programmatisch aufrufen kann. Hier mal am Beispiel des änderns eines Methodennamens demonstriert.


```
/**
 * 
 */
package de.tutorials.jdt.srcmanipulation.core;

import java.lang.reflect.InvocationTargetException;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.ui.refactoring.RenameSupport;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWorkbenchWindow;

/**
 * @author Tom
 * 
 */
public class SourceCodeManipulator {
    public static void manipulate(ICompilationUnit unit, Shell shell,
            IWorkbenchWindow window) {
        try {

            IType[] types = unit.getAllTypes();
            for (int i = 0; i < types.length; i++) {
                IType type = types[i];
                IMethod method = type.getMethod("operation", new String[] {});
                if (method != null) {
                    RenameSupport renameSupport = RenameSupport.create(method,
                            method.getElementName() + "X",
                            RenameSupport.UPDATE_REFERENCES
                                    | RenameSupport.UPDATE_TEXTUAL_MATCHES);
                    renameSupport.perform(shell, window);
                }
            }

        } catch (JavaModelException e) {
            e.printStackTrace();
        } catch (CoreException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }
}
```

Plugin Beispiel Projekt hängt an.

Einfach als Eclipse Application starten, ein Java Projekt anlegen und dort eine Klasse mit einer Methode hinzufügen. Anschließend das Java File im Package Explorer markieren und im Kontext Menu -> Source Code Manipulation -> Example Source Code Manipulation anklicken, fertig 

Aus 

```
/**
 * 
 */
package de.tutorials.test;

/**
 * @author Tom
 *
 */
public class Foo {

    /**
     * @param args
     */
    public static void main(String[] args) {
        
    }
    
    public static void operation(){
        
    }
}
```


Wird dann:

```
/**
 * 
 */
package de.tutorials.test;

/**
 * @author Tom
 *
 */
public class Foo {

    /**
     * @param args
     */
    public static void main(String[] args) {
        
    }
    
    public static void operationX(){
        
    }
}
```

Gruß Tom


----------



## gello (21. September 2006)

Hallo,

klasse dein Plugin, aber damit kann man nur Java-Funktionen umbenennen. Gibt es auch eine Möglichkeit, Dateien (nicht nur .java-Dateien) programmatisch umzubenennen?


----------



## Thomas Darimont (21. September 2006)

Hallo!

Willst du Dateien umbenennen oder innerhalb von Dateien bestimmte Elemente umbenennen?

Gruß Tom


----------



## gello (22. September 2006)

Hallo,

einfach nur Dateien umbenennen


----------



## Salima Hassaine (25. Juni 2008)

Hi Thomas !
Your project is very interesting, but I can't run it.
There is no main method.
Could you give me an example of public static void main(String [] args) to apply this refactoring.

Thank you for your help
Salima


----------

