Tag: eclipse jdt

使用maven增量java编译(就像Eclipse一样)

我想使用maven来构建存在未解决的编译问题的项目。 主要目的是为包含编译错误的类使用某种存根来打包和部署或运行​​应用程序 ,就像我理解Eclipse那样(感谢JDT Core )。 我在使用非Javac编译器的 Apache Maven文档之后配置maven java编译器插件以使用Eclipse编译器。 认为可能应该设置一些参数来修改编译器/构建器行为,我正在阅读帮助Eclipse – 编译Java代码,但我没有意识到哪个编译器/构建器选项或这些的组合起作用。 到目前为止,maven java编译器插件的下一个配置使用eclipse编译器编译并打包应用程序,包括生成的.class(jvm字节码)仅适用于没有编译错误的java类。 要获得此行为,只需要使用eclipse编译器(请参阅compilerId和依赖项)并设置failOnError=false 。 maven-compiler-plugin 3.1 eclipse 1.7 1.7 true true true false disabled ignore org.codehaus.plexus plexus-compiler-eclipse 2.3 使用这种配置,我可以运行java应用程序,只要执行不使用未包含的编译错误的类(因为没有生成存根),但在Java EE容器上,类加载将失败,因此永远不会部署应用程序。 我对此表示感谢。

使用JDT获取startPosition和方法调用的长度

假设我有这个Java源代码。 如何获取startPosition和“extractedMethod(amount)”调用的长度? package smcho; public class Extract { String _name = “”; public int extractedMethod(int amount) { …. } public int getValue(int amount) { if (amount > 10) { int z = extractedMethod(amount); return z; } …. } 我可以使用hexa查看器来查找起始位置是0x1FA,长度是len(“extract(method)”)== 17,但我想用编程方式使用JDT。 一旦我可以获得CompilationUnit,但我需要知道如何在CompilationUnit中获取调用引用。 IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); IProject orig = root.getProject(this.projectName); orig.open(pm); javaProject = JavaCore.create(orig); IType type […]

以编程方式跟踪eclipse清理所做的文件更改

我编写了一个eclipse osgi插件,它对eclipse项目中存在的java文件运行清理和格式化操作。 就像是: 运行具有eclipse命令的批处理文件 它打开了eclipse编辑器 加载在批处理命令中作为参数传递的eclipse项目 运行清理和格式化操作 关闭日食 现在我的问题是我需要跟踪此操作已更改的文件。 我正在使用cleanUpsAction执行清理更改, cleanUpsAction作为多个文件和进一步分叉的线程运行。 它返回void。 我也尝试过IResourceChangeListener ,但是我无法获得更改的资源名称。 我得到了IResourceChangeEvent对象,但资源的细节并没有出来,它在我打印IResourceChangeEvent.getSource()时总是返回项目名称。

Eclipse“Open Type”对话框仅限于特定接口

我正在尝试创建一个JavaUI.createTypeDialog(),它限制用户只选择属于特定接口的类型。 我怎么能这样做?

Eclipse JDT AST Parser不解析Java lambda Expression中的类型

我正在使用Eclipse JDT AST Parser(3.10.0)来解析各种源代码文件。 这就是我如何初学解析器: ASTParser parser = ASTParser.newParser(AST.JLS8); parser.setKind(ASTParser.K_COMPILATION_UNIT); parser.setBindingsRecovery(true); parser.setResolveBindings(true); parser.setStatementsRecovery(true); parser.setSource(source.toCharArray()); parser.setUnitName(filename); parser.setEnvironment(classPath.toArray(new String[classPath.size()]), sources, new String[]{“UTF-8”}, true); final CompilationUnit cu = (CompilationUnit) parser.createAST(null); 类路径由maven依赖插件创建。 这对大多数表达式都很有效,但它似乎与lambda表达式有问题 Optional first = adr.stream().filter( a -> a.getId().longValue() == contactAddress.getAddressId().longValue() ).findFirst(); 评估比较的两侧,每种类型都解析为null 。 在没有周围的lambda表达式的情况下解析相同的代码会导致每边都很long 。 有没有办法解决lambda表达式中的bindngs?

java.lang.NoSuchMethodError:java.lang.NoSuchMethodError

通过eclipse运行Tomcat 7报告的错误是: javax.servlet.ServletException: java.lang.NoSuchMethodError: org.eclipse.jdt.internal.compiler.CompilationResult.getProblems()[Lorg/eclipse/jdt/core/compiler/IProblem; at org.apache.jasper.compiler.JDTCompiler$2.acceptResult(JDTCompiler.java:341) 我已经尝试了jasper-jdt-6.0.13.jar和tomcat-6.0.16-jasper-jdt.jar,两者都报告了同样的错误。 在某种程度上,我不应该感到惊讶,因为我跑了: jar tf tomcat-6.0.16-jasper-jdt.jar 并且它没有类org.eclipse.jdt.internal.compiler.CompilationResult。 但是这个网站http://www.java2s.com/Code/Jar/STUVWXYZ/Downloadtomcat6016jasperjdtjar.htm说它确实!! 有人能告诉我正确的jar文件是什么以及从哪里获取它? 这似乎是一个反复出现的主题。 http://www.findjar.com列出了一些声称拥有这个类的jar子 – 但是没有。 好的,在jasper-compiler-jdt-5.5.23.jar中找到它

JUnit测试jdt.core Java模型

我正在尝试为我的代码进行一些JUnit测试。 但问题是,我使用了像DB2ompilationUnit,IPackageFragment,ITypes等Java模型。我没有得到如何创建一些ICompilationUnit然后测试。 我搜索谷歌和stackoverflow的信息,但没有找到的东西。 我的问题是,如何使用jdt.core的类进行Junit测试…有人可能会给我一些代码示例。 谢谢 这是我编码的方法: private void updateLists() { if(!getCompilationUnit().isEmpty()){ for(int i = 0; i < getCompilationUnit().size(); i++){ try { Document doc = new Document(getCompilationUnit().get(i).getSource()); int totalNumberOfCode = doc.getNumberOfLines(); IType type = getCompilationUnit().get(i).findPrimaryType(); IType[] types = getCompilationUnit().get(i).getTypes(); updateListPrimaryType(type, totalNumberOfCode, types); updateListIMethod(type); updateListMember(type,types); } catch (JavaModelException e) { // TODO Auto-generated catch block e.printStackTrace(); } […]

JDT – 尝试更改Type的超类。 我不知道超级class的合格名称

我有一个程序,除了其他任务之外,还必须使用JDT更改某些类的超类。 我有两个字符串,其中包含要交换的超类的限定名称,例如“org.example.John”和“org.example.Smith”,我正在解析整个AST搜索扩展这些类的类。 当我试图找出超类的限定名称时,我的问题就出现了。 我找不到办法。 给定一个ICompilationUnit (表示一个类),我使用一个ASTVisitor来解析TypeDeclaration,如下面的方法所示。 public boolean visit(TypeDeclaration typeDeclaration) { TypeDeclaration[] types = typeDeclaration.getTypes(); superClass = typeDeclaration.getSuperclassType(); superClass.getNodeType(); Class nodeType = ASTNode.nodeClassForType(superClass.getNodeType()); if (newSuperClass != null) { Name oldName = typeDeclaration.getAST().newName(oldSuperClass); SimpleType oldType = typeDeclaration.getAST().newSimpleType(oldName); Name newName = typeDeclaration.getAST().newName(newSuperClass); SimpleType newType = typeDeclaration.getAST().newSimpleType(newName); if (superClass != null && superClass.equals(oldType)) { typeDeclaration.setSuperclassType(newType); } } return […]

在eclipse IDE环境之外执行Eclipse插件(jdt / ast)

我可以将Eclipse Java开发工具作为独立进程执行吗? 我需要从另一个程序使用Eclipse JDT获取Java程序的AST结构,为此,我需要执行eclipse插件作为场景后面的独立进程。 那可能吗? 如果是这样,那怎么可以呢?

在Eclipse JDT Java解析器中,是否可以逐节遍历AST节点而无需使用访问者?

通过Eclipse JDT API访问节点信息的标准方法是使用Visitor的模式。 例如: unit.accept(new MyVisitorAdapter() { @Override public void visit(MethodCallExpr node, Object arg) { System.out.println(“found method call: ” + node.toString()); } }, null); 在这种情况下,要访问节点,我需要指定我感兴趣的节点类型(针对此情况的MethodCallExpr )。 但是,为了继续以通用方式访问节点信息,我应该覆盖所有的visit()方法,可能枚举Eclipse JDT API中可用的每种节点。 这里可以找到完成它的完整示例。 在这种情况下,虽然不完全在Code Coverage的同一域中,但我希望能够控制Eclipse JDT Java Parser完成的遍历。 我想遍历AST节点,可能会通过所有节点,选择我想要的,但不限制类型,如上面的代码所示。 可能吗? 是否有通过Eclipse JDT API执行此操作的标准方法?