Eclipse JDT Refactoring programmatisch verwenden:

Thomas Darimont

Erfahrenes Mitglied
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.

Java:
/**
 * 
 */
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
Java:
/**
 * 
 */
package de.tutorials.test;

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

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


Wird dann:
Java:
/**
 * 
 */
package de.tutorials.test;

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

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

Gruß Tom
 

Anhänge

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?
 
Hi Thomas !
Your project is very interesting, but I can't run it.:confused:
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
 
Zurück