2010-05-20 5 views
6

Je travaille sur un plugin Eclipse qui modifie le code Java dans le projet d'un utilisateur.Eclipse JDT: appel par 'indentation correcte' par programmation?

Fondamentalement, le résultat de ce plug-in est que les annotations Java sont ajoutées à certaines méthodes, si

void foo() { ... } 

devient

@MyAnnotation 
void foo() { ... } 

Sauf qu'il ne semble pas tout à fait comme ça; l'indentation sur l'annotation nouvellement insérée est wack (en particulier, la nouvelle annotation est tout le long du côté gauche de la ligne). Je voudrais apporter toutes mes modifications au fichier, puis appelez par programme "Indentation correcte".

Est-ce que quelqu'un sait comment faire cela? Je ne peux pas trouver la réponse ici ou dans les forums JDT, et toutes les classes qui semblent pertinentes (IndentAction, JavaIndenter) sont dans des paquets internes que je ne suis pas censé utiliser ...

Merci!

+0

On dirait qu'un bon point de départ peut être: org.eclipse.jdt.core.formatter.CodeFormatterApplication –

Répondre

6

Eh bien, je pense que j'ai peut-être trouvé la solution que je veux. Je suppose que j'aurais dû passer plus de temps à chercher avant de demander ... mais pour référence future, voici ce que j'ai fait! La bonne substance était dans la ToolFactory ...

import org.eclipse.jdt.core.ToolFactory; 
import org.eclipse.jdt.core.formatter.CodeFormatter; 
import org.eclipse.jdt.core.ISourceRange; 
import org.eclipse.text.edits.TextEdit; 
import org.eclipse.jdt.core.ICompilationUnit; 

... 

ICompilationUnit cu = ... 

... 

CodeFormatter formatter = ToolFactory.createCodeFormatter(null); 
ISourceRange range = cu.getSourceRange(); 
TextEdit indent_edit = 
    formatter.format(CodeFormatter.K_COMPILATION_UNIT, 
    cu.getSource(), range.getOffset(), range.getLength(), 0, null); 
cu.applyTextEdit(indent_edit, null); 

cu.reconcile(); 

Ceci reformate le fichier entier. Il y a d'autres options si vous devez reformater moins ...

+1

Je suppose que cela va utiliser le formateur par défaut. avez-vous compris comment spécifier un autre formateur? –

-1

Il est probablement plus facile d'ajouter l'indentation lorsque vous traitez le code Java.

Votre plugin Eclipse a dû lire la ligne void foo() { ... } pour savoir ajouter le @MyAnnotation, non? Obtenez simplement l'indentation de la ligne Java et ajoutez votre annotation à l'indentation.

+0

Merci Gilbert, mais en fait je n'ai pas lu la ligne ... Je reçois l'emplacement de méthode de MethodDeclaration.getStartPosition() où MethodDeclaration se trouve dans le package org.eclipse.jdt.core.dom. Maintenant, je pourrais revenir en arrière et copier ce qui est avant la déclaration de la méthode depuis le début de la ligne, mais je ne veux pas copier un tas d'ordure si le programmeur utilise un formatage différent ... –

+0

Ok, je n'ai pas vu ces org.eclipse.jdt paquets avant. Comment ajoutez-vous votre annotation au code source Java? –

Questions connexes