Tag: eclipse jdt

如何使用JDT / AST将代码段添加到方法体

我正在尝试使用JDT / AST生成Java源代码。 我现在有MethodDeclaration,并希望将代码片段(来自其他来源)添加到方法体。 代码段可以包含任何Java代码, 甚至是语法无效的代码 。 我只是找不到这样做的方法。 使用JCodeModel,您将使用JBlock#directStatement(String s)方法 。 有没有办法用JDT / AST做到这一点?

Eclipse JDT ASTParser错误地转换枚举声明节点

我正在使用JDT分析Java代码,并依赖于org.eclipse.jdt.core包而不是eclipse插件来构建独立的分析工具。 但我发现我的工具在Java代码中出现的枚举声明节点上无法正常工作。 在由jdt创建的AST中,关键字enum被视为typename而不是enum声明。 所以我想知道我应该怎样才能确保我的工具能够正确处理枚举声明。 我使用的jdt包是“org.eclipse.jdt.core_3.8.3.v20130121-145325.jar”。 createAST代码是: char[] javaprogram=getJavaFile(javaFileName); ASTParser parser = ASTParser.newParser(AST.JLS4); parser.setSource(javaprogram); parser.setKind(ASTParser.K_COMPILATION_UNIT); final CompilationUnit cu = (CompilationUnit) parser.createAST(null); java输入如下: package test; enum Color { RED(255, 0, 0), BLUE(0, 0, 255), BLACK(0, 0, 0), YELLOW(255, 255, 0), GREEN(0, 255, 0); private int redValue; private int greenValue; private int blueValue; private Color(int rv, int gv, […]

为什么我在JDT API中没有使用getAllSuperclasses()的超类?

我有一个类A,以及在Eclipse工作区中inheritanceA的类B. 我遇到的问题是,当我尝试使用eclipse JDT API获取类型B的超类型时,我什么都没得到。 这是代码(我从中获取代码 – 列出具有完全限定名称的所有子类 ): IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); java.io.File workspaceDirectory = root.getLocation().toFile(); // 1. The name of the project in the workspace IProgressMonitor pm = new NullProgressMonitor(); IProject orig = root.getProject(this.projectName); orig.open(pm); this.javaProject = JavaCore.create(orig); orig.refreshLocal(IResource.DEPTH_INFINITE, pm); // 2. Find the type IType type = this.javaProject.findType(“pB”); <– returns correct type info […]

是否可以在Eclipse中将CDT和Java IDE结合在一起?

我已经启动并运行了Eclipse CDT环境,并按照我喜欢的方式进行了自定义。 我也将大量处理Java。 我不想仅仅为了获得Javafunction而安装单独版本的Eclipse,因为我将经常在C – > C ++ – > ADA – > Java之间切换。 因此,我希望一个IDE支持所有语言。 目前我已经有C / C ++和Ada一起工作(CDT + GNAT工作台)。 如何从头再次安装Eclipse,从而安装Eclipse Java支持?

如何将AST转换为JDT Java模型

我正在为我的插件编写unit testing,它使用了JDT的IType和IMethod接口。 要编写unit testing,我需要实例化这样的接口。 这个问题的答案显示了如何创建AST模型,但我不知道如何将其转换为Java模型? 我的代码如下所示: String source = “package com.test\n” + “\n” + “import com.test.something;” + “\n” + “public class Class{\n” + “int sum(int a, int b)\n” + “}\n”; ASTParser parser = ASTParser.newParser(AST.JLS4); parser.setSource(source.toCharArray()); CompilationUnit unit = (CompilationUnit) parser.createAST(null); 所以我有一个CompilationUnit实例,但是我需要一个ICompilationUInit实例,所以我可以访问IMethod和IType对象。

在Java中,“void”可以被视为原始类型吗?

我注意到eclipse JDT 使用void作为基本类型 。 这可以被认为是正确的吗?

如何使用Eclipse JDT ASTParser获取方法的类名?

我想要做的是获取方法的类名。 例如,我想获得一类’until’和’search’方法。 这是代码。 Query query = new Query(queryStr).until(dateStr); QueryResult queryResult = twitter1.search(query); 从这些示例中,预期结果是Query.until和SearchResource.search 。 但是当我在下面使用这个代码时,我只会直到 搜索 ,没有类名。 如果我使用MethodInvocation.getExpression(),我可以获取实例的名称:new Query(queryStr)和twitter1。 但它们不是我真正想要的。 ASTParser parser = ASTParser.newParser(AST.JLS3); parser.setSource(str.toCharArray()); parser.setKind(ASTParser.K_COMPILATION_UNIT); parser.setResolveBindings(true); final CompilationUnit cu = (CompilationUnit) parser.createAST(null); cu.accept(new ASTVisitor() { public boolean visit(MethodDeclaration node){ System.out.println(“Declaration of ‘”+node.getName()+”‘ at line” + cu.getLineNumber(node.getStartPosition())); if (node.getName().toString().equals(“testSearch”)){ Block block =node.getBody(); block.accept(new ASTVisitor() { […]

如何使用JDT获取静态字段的所有引用

我找到了Java:查找方法的所有调用者 – 获取调用特定方法的所有方法,该方法提供了如何查找特定方法的所有调用方的提示。 那么,如何获得静态字段的用户? 例如,当我在AnotherClass有静态z ,并且使用ClassA访问它时,如何ClassA#moved IMethod ClassA#moved ? public class AnotherClass { public static int z = 20; …. } public class ClassA { public int moved(int x, int y) { int temp = AnotherClass.z; }

可能的Java编译器错误! 程序不能与某些编译器一起编译

首先,一点背景(如果不感兴趣,可以跳过一点)。 我很生气,很困惑! 这应该是一个非常简单的用例,事实上我的代码已经用Eclipse JDT编译器编译得很好,所以直到现在我一直在配置Maven以确保这样做。 尽管它不能用Oracle JDK和OpenJDK编译,但是我一直在困扰我,因为我认为它可能实际上是我的代码的问题,所以我再次研究它。 我想也许这个bug是在JDT编译器中允许它编译的,而不是Oracle JDK和OpenJDK因为不允许它,我也用它来测试这两个。 有问题的原始代码要复杂得多,所以我很难看到问题出在哪里,事实上,我很惊讶地发现在不编译的情况下可以减少这个问题的程度。 Eclipse JDT编译器或Oracle JDK和OpenJDK都有一个非常重要的(imho)错误。 TL; DR 这是相关代码的相当小的表示。 (Anything的类型绑定可以被任何接口替换,编译器行为不会改变): public class Bug<X extends Property & Anything> { } interface Property extends PropertyConst { @Override public S get(); } interface PropertyConst { public C get(); } interface Anything { } 总而言之,我认为这应该编译得很好,但Oracle JDK 7&8和OpenJDK 7不同意。 它使用Eclipse Juno为我编译。 当使用这些编译器中的任何一个编译时,上面的代码给出类似于以下错误的东西,但是对于JDT编译器可以正常工作: Bug.java:3: error: […]

用于启用/禁用JAVA断点的eclipse快捷方式

我正在寻找一个完全启用/禁用所有 JAVA断点的快捷方式(类似于在Debug视图中按“Skip all breakpoints”按钮),而不是逐行启用/禁用它们。