2009-06-10 6 views
3

J'ai remarqué que l'indenteur eclipse supporte la dernière version de java, et ce serait bien si je pouvais utiliser cette classe pour mettre en retrait le code source Java. Y a-t-il un moyen de l'intégrer?Comment utiliser l'indenteur eclipse de mon code?

EDIT: Je dois pouvoir inclure le formateur de code dans mon code. Pas d'appels externes.

EDIT2: J'ai réussi à le faire fonctionner. Vous pouvez lire l'histoire here. Merci VonC!

+0

Impressionnant! J'ai mis à jour ma réponse avec le principe principal de votre post pour les futurs lecteurs SO, mais merci encore pour vos commentaires sur cette question. – VonC

Répondre

5

Vous pouvez essayer d'exécuter le formatter comme standalone application (également detailed here).

eclipse -vm <path to virtual machine> -application org.eclipse.jdt.core.JavaCodeFormatter [ OPTIONS ] <files> 

Essayez d'abord définir les paramètres de formatage avec Eclipse IDE afin d'obtenir le bon résultat, puis d'exporter ces paramètres, et utiliser ce fichier de configuration dans les paramètres de eclipse.exe.
Ou voir aussi "Generating a Config File for the Formatter Application"

eclipse [...] -config <myExportedSettings> 

Dans un programme java, vous pouvez essayer de formater directement par:

  • Création d'une instance de CodeFormatter
  • En utilisant le vide de la méthode format(aString) sur cette instance pour formater aString. Il retournera la chaîne formatée.

Merci à Geo lui-même et son rapport his blog entry, je sais maintenant, vous devez utiliser DefaultCodeFormatter

String code = "public class geo{public static void main(String[] args){System.out.println(\"geo\");}}"; 
    CodeFormatter cf = new DefaultCodeFormatter(); 

    TextEdit te = cf.format(CodeFormatter.K_UNKNOWN, code, 0,code.length(),0,null); 
    IDocument dc = new Document(code); 
    try { 
     te.apply(dc); 
     System.out.println(dc.get()); 
    } catch (MalformedTreeException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (BadLocationException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

Encore une fois, tous les détails dans l'entrée de blog. Merci Geo pour ces commentaires!


Thorbjørn Ravn Andersen mentions in the comments:

Maven2 Java Formatter Plugin v0.4 décrit un plugin Maven qui permet Maven d'invoquer l'Eclipse formatter.
A partir de 0,4 il appelle Eclipse 3.5 qui ne prend pas en charge Java 8.

+0

Je dois l'inclure dans mon code. Est-ce possible? – Geo

+0

"en tant que classe autonome", mais dans un programme Java! Droit, je comprends maintenant;) En regardant en ce moment .. – VonC

+0

anglais n'est pas ma langue maternelle. Je trouve que certaines idées sont compliquées pour moi d'exprimer :). Pardon. – Geo

1

En fait, il y a un problème avec la réponse de VonC: DefaultCodeFormatter est dans un paquet « interne », et donc ne doit pas être utilisé par les clients !

J'ai récemment posé la même question ici sur stackoverflow, et est venu avec the answer a little while later.

En bref, vous devez utiliser ToolFactory, comme dans

ToolFactory.createCodeFormatter(null); 
0

j'utilisais le CodeFormatter dans un projet Eclipse indépendant. Les options par défaut utilisées en appelant ToolFactory.createCodeFormatter(null); ne pouvait pas gérer le code source - le résultat de l'appel étant nul format().

Une configuration des options de travail minimale est la suivante:

Hashtable<String, String> options = new Hashtable<>(); 
options.put("org.eclipse.jdt.core.compiler.codegen.targetPlatform", "1.8"); 
options.put("org.eclipse.jdt.core.compiler.compliance", "1.8"); 
options.put("org.eclipse.jdt.core.compiler.source", "1.8"); 
CodeFormatter codeFormatter = ToolFactory.createCodeFormatter(options); 
Questions connexes