OSDN Git Service

3e30e40a9ae24bd60a8ea236001a6be166627c9c
[jcfa/jcfa.git] / jcfa / src / jp / igapyon / jcfa / util / JcfaEclipseUtil.java
1 package jp.igapyon.jcfa.util;
2
3 import java.util.Map;
4
5 import org.eclipse.jdt.core.JavaCore;
6 import org.eclipse.jdt.core.ToolFactory;
7 import org.eclipse.jdt.core.formatter.CodeFormatter;
8 import org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants;
9 import org.eclipse.jface.text.BadLocationException;
10 import org.eclipse.jface.text.Document;
11 import org.eclipse.jface.text.IDocument;
12 import org.eclipse.text.edits.MalformedTreeException;
13 import org.eclipse.text.edits.TextEdit;
14
15 public class JcfaEclipseUtil {
16         /**
17          * Format source using eclipse.
18          * 
19          * @param source
20          *            Input source.
21          * @return Formatted source.
22          */
23         public static String formatSource(final String source) {
24                 if (false)
25                         System.out.println("TRACE: " + source);
26
27                 final Map options = DefaultCodeFormatterConstants
28                                 .getEclipseDefaultSettings();
29
30                 options.put(JavaCore.COMPILER_COMPLIANCE, JavaCore.VERSION_1_7);
31                 options.put(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM,
32                                 JavaCore.VERSION_1_7);
33                 options.put(JavaCore.COMPILER_SOURCE, JavaCore.VERSION_1_7);
34
35                 options.put(
36                                 DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_ENUM_CONSTANTS,
37                                 DefaultCodeFormatterConstants.createAlignmentValue(true,
38                                                 DefaultCodeFormatterConstants.WRAP_ONE_PER_LINE,
39                                                 DefaultCodeFormatterConstants.INDENT_ON_COLUMN));
40
41                 final CodeFormatter cf = ToolFactory.createCodeFormatter(options);
42                 cf.createIndentationString(4);
43                 final TextEdit te = cf.format(CodeFormatter.K_COMPILATION_UNIT
44                                 | CodeFormatter.F_INCLUDE_COMMENTS, source, 0, source.length(),
45                                 0, null);
46                 IDocument doc = new Document(source);
47                 try {
48                         te.apply(doc);
49
50                         if (false)
51                                 System.out.println("TRACE: " + doc.get());
52
53                         return doc.get();
54                 } catch (MalformedTreeException e) {
55                         e.printStackTrace();
56                         throw new IllegalArgumentException(e);
57                 } catch (BadLocationException e) {
58                         e.printStackTrace();
59                         throw new IllegalArgumentException(e);
60                 }
61         }
62 }