当前位置: 代码迷 >> Eclipse >> eclipse jdt organize imports 兑现
  详细解决方案

eclipse jdt organize imports 兑现

热度:603   发布时间:2016-04-23 12:56:45.0
eclipse jdt organize imports 实现
大致说下这个功能的思路:
1:用字符串构建java文件
2:在内存中构建ijavaelement对象,并对这个对象进行重组(用到了jdt的OrganizeImportsOperation)
3:IFile写入文件

String path = "";//文件绝对路径
IJavaProject project = null;
IPath genSourceFolderPath = new Path(filePath);
for (IProject p : ResourcesPlugin.getWorkspace().getRoot().getProjects()) {
if (p.isOpen()) {
// 查找工程的实际路径是否在源代码生成路径上,如果是,则就是该工程
if (p.getLocation().isPrefixOf(genSourceFolderPath)) {
project = JavaCore.create(p);
}
}
}
if (project == null) {
throw new AresCompilerException("无法生成源码文件:" + path);
}
IPath javaFilePath = new Path(path).makeRelativeTo(project.getProject().getLocation());
IFile javaFile = project.getProject().getFile(javaFilePath);
IJavaElement element = JavaCore.create(javaFile);

String lineDelimiter = StubUtility.getLineDelimiterUsed(null);
formattedSource = CodeFormatterUtil.format(CodeFormatter.K_COMPILATION_UNIT, source.toString(), 0,
lineDelimiter, (IJavaProject) null);


ASTParser parser = ASTParser.newParser(AST.JLS3);
try {
element = ((ICompilationUnit) element).getWorkingCopy(null);
((ICompilationUnit) element).getBuffer().setContents(formattedSource);
} catch (JavaModelException e) {
e.printStackTrace();
}
parser.setSource((ICompilationUnit)element);

final CompilationUnit node = (CompilationUnit) parser.createAST(new NullProgressMonitor());
OrganizeImportsOperation operation = new OrganizeImportsOperation((ICompilationUnit)element, node, true, false, false, new IChooseImportQuery() {
public TypeNameMatch[] chooseImports(TypeNameMatch[][] openChoices, ISourceRange[] ranges) {
return new TypeNameMatch[0];
}
});

InputStream inputStream = null;

try {
TextEdit textEdit = operation.createTextEdit(null);
JavaModelUtil.applyEdit((ICompilationUnit) element, textEdit, false, new NullProgressMonitor());
formattedSource = ((ICompilationUnit) element).getBuffer().getContents();
inputStream = new ByteArrayInputStream(formattedSource.getBytes(javaFile.getCharset()));
if (!javaFile.exists()) {
ResourcesUtil.safelyCreateFile(javaFile, inputStream, false, new NullProgressMonitor());
}else {
javaFile.setContents(inputStream, IFile.FORCE, new NullProgressMonitor());
}
} catch (Exception e) {
e.printStackTrace();
} finally{
IOUtils.closeQuietly(inputStream);
}
  相关解决方案