1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
| IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject("MyProject");
IFile file = project.getFile(new Path("src/my/packages/MyClass.java"));
InputStream is = file.getContents();
InputStreamReader reader = new InputStreamReader(is);
BufferedReader buff = new BufferedReader(reader);
StringBuilder builder = new StringBuilder();
String line;
while ((line = buff.readLine()) != null)
{
if (builder.length() > 0)
{
builder.append("\r\n");
}
builder.append(line);
}
is.close();
final IDocument document = new Document(builder.toString());
IFormattingContext context = null;
DocumentRewriteSession rewriteSession = null;
IDocumentExtension4 extension = (IDocumentExtension4) document;
DocumentRewriteSessionType type = DocumentRewriteSessionType.SEQUENTIAL;
rewriteSession = extension.startRewriteSession(type);
final MultiPassContentFormatter fContentFormatter = new MultiPassContentFormatter(IDocumentExtension3.DEFAULT_PARTITIONING,
IDocument.DEFAULT_CONTENT_TYPE);
fContentFormatter.setMasterStrategy(new ContextBasedFormattingStrategy() {
@Override
public void format()
{
final TextEdit edit = CodeFormatterUtil.reformat(CodeFormatter.K_COMPILATION_UNIT | CodeFormatter.F_INCLUDE_COMMENTS, document.get(),
0, document.getLength(), 0, TextUtilities.getDefaultLineDelimiter(document), getPreferences());
if (edit != null)
{
try
{
edit.apply(document);
} catch (MalformedTreeException e)
{
e.printStackTrace();
} catch (BadLocationException e)
{
e.printStackTrace();
}
}
}
});
try
{
final String rememberedContents = document.get();
try
{
if (fContentFormatter instanceof IContentFormatterExtension)
{
final IContentFormatterExtension extensionFormatter = (IContentFormatterExtension) fContentFormatter;
context = new FormattingContext();
context.setProperty(FormattingContextProperties.CONTEXT_DOCUMENT, Boolean.TRUE);
extensionFormatter.format(document, context);
} else
{
IRegion r = new Region(0, document.getLength());
fContentFormatter.format(document, r);
}
StringInputStream sourceStream = new StringInputStream(document.get());
file.setContents(sourceStream, IFile.FORCE, new NullProgressMonitor());
sourceStream.close();
} catch (RuntimeException x)
{
document.set(rememberedContents);
throw x;
}
} finally
{
extension.stopRewriteSession(rewriteSession);
if (context != null)
context.dispose();
} |
Partager