admin 管理员组文章数量: 893602
Eclipse插件开发JDT组件介绍
- 介绍
- AST
- IJavaElement
/*** 创建一个类(class)或者接口(interface)* @param project 工程对象* @param type 应当是class、interface或者enum* @param packageName 包名* @param typeName 应当是Java源文件名称但不包含后缀,例如:Test.java就应该是Test* @param superCls 父类* @param superInters 接口列表* @return*/public static ICompilationUnit createCompilationUnit(IJavaProject project, String type,String packageName, String typeName, IProgressMonitor monitor, String superCls, String ...superInters) {IPackageFragmentRoot packageFragmentRoot = null;ICompilationUnit unit = null;try {//先查找当前工程中是否已经有了给类型IType targetType = project.findType(packageName, typeName, monitor);if(targetType != null){unit = targetType.getCompilationUnit();}} catch (JavaModelException e) {Logger.error(e.getMessage(), e);}try {if(unit == null){try {//查找可以用于创建Java类型的包IPackageFragmentRoot[] roots = project.getPackageFragmentRoots();for(IPackageFragmentRoot root : roots){if(root.isReadOnly() || root.isArchive() || root.isExternal()){continue;}packageFragmentRoot = root;break;}} catch (JavaModelException e) {Logger.error(e.getMessage(), e);}IPackageFragment packageFragment = packageFragmentRoot.getPackageFragment(packageName);//创建一个内容为空的Java类型unit = packageFragment.createCompilationUnit(String.format("%s.java", typeName), "", false, monitor);}unit.becomeWorkingCopy(monitor); //先把当前编译对象变为副本IBuffer buffer = unit.getBuffer();String simpleTypeStub = constructSimpleTypeStub(type, typeName, superCls, superInters);String lineDelimiter = System.getProperty("line.separator", "\n");String cuContent = constructCUContent(unit, simpleTypeStub, lineDelimiter, monitor);buffer.setContents(cuContent);return unit;} catch (JavaModelException e) {Logger.error(String.format("创建Java过程失败,详细信息[%s]。", e.getMessage()), e);} catch (CoreException e) {Logger.error(e.getMessage(), e);}return unit;}public static String constructSimpleTypeStub(String typeName) {return constructSimpleTypeStub("class", typeName, null);}public static String constructSimpleTypeStub(String type, String typeName, String superCls, String ...superInters) {StringBuffer buf = new StringBuffer("public ");buf.append(type);buf.append(" ");buf.append(typeName);if(StringUtil.isNotEmpty(superCls)) {buf.append(" extends ");buf.append(superCls);}if(superInters != null && superInters.length > 0) {buf.append(" implements");for(String superInter : superInters) {buf.append(" ");buf.append(superInter);}}buf.append("{\n}");return buf.toString();}/*** 构建Java类型的具体文件内容* @param cu* @param typeContent* @param lineDelimiter* @return* @throws CoreException*/public static String constructCUContent(ICompilationUnit cu, String typeContent, String lineDelimiter,IProgressMonitor monitor) throws CoreException {String fileComment = "";// getFileComment(cu, lineDelimiter);String typeComment = "";// getTypeComment(cu, lineDelimiter);IPackageFragment pack = (IPackageFragment) cu.getParent();String content = CodeGeneration.getCompilationUnitContent(cu, fileComment, typeComment, typeContent, lineDelimiter);if (content != null) {ASTParser parser = ASTParser.newParser(AST.JLS8);parser.setProject(cu.getJavaProject());parser.setSource(content.toCharArray());CompilationUnit unit = (CompilationUnit) parser.createAST(monitor);if (((pack.isDefaultPackage()) || (unit.getPackage() != null)) && (!unit.types().isEmpty())) {return content;}}StringBuffer buf = new StringBuffer();if (!pack.isDefaultPackage()) {buf.append("package ").append(pack.getElementName()).append(';');}buf.append(lineDelimiter).append(lineDelimiter);if (typeComment != null) {buf.append(typeComment).append(lineDelimiter);}buf.append(typeContent);return buf.toString();}
[/codesyntax] - IPackageFragmentRoot
- IParent
- IContainer
- IResource
- IProject
转载于:
本文标签: Eclipse插件开发JDT组件介绍
版权声明:本文标题:Eclipse插件开发JDT组件介绍 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1688192653h190305.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论