我有一个test-foo.jar只有两个文件的简单库:
Foo用一种方法void doStuff()Bar使用单个方法的类void executeFoo(Foo foo),只需调用foo.doStuff()然后我有Eclipse Java项目,FooImpl它有一个实现的类Foo.该项目具有test-foo.jar构建路径条目.我没有附加此JAR的源代码.

现在让我说我对谁实际调用doStuff()方法有点好奇.所以我点击FooImpl#doStuff签名并按Ctrl+ Shift+ G(找到参考).我希望Bar#executeFoo在搜索结果中看到,但结果实际上是空的.

我有点困惑,因为我认为这在Eclipse中有效(现在已经使用Eclipse了几年).但它似乎只适用于附带源代码的图书馆(我之前没有注意到).
有没有办法在没有附加源的情况下在项目库中查找类型(或方法)的引用(或用法)?为什么Eclipse没有索引并显示.class文件中的引用?
附加信息:
.class..class文件.可能重复:
像ReSharper这样的工具,但对于Java?
我大量使用Eclipse提供的Java代码重构工具(提取接口,重命名方法等).有没有人知道其他类似的工具(最好是Eclipse插件)可以执行默认情况下在Eclipse中不可用的Java代码重构,或者可以更好地执行相同的重构?
我知道各种Eclipse插件可以识别需要重构的代码(例如FindBugs,UCDetector),但我正在寻找可以实际进行重构的工具.
我正在尝试以编程方式对我正在编辑的文件执行'OrganizeImports'.我的代码看起来像这样:
final ICommandService cmdService = (ICommandService)PlatformUI.getWorkbench().getService (ICommandService.class);
if (cmdService != null) {
final Command cmd = cmdService.getCommand(IJavaEditorActionDefinitionIds.ORGANIZE_IMPORTS);
final ExecutionEvent execEvt = new ExecutionEvent(cmd, Collections.EMPTY_MAP, compileationUnit, null);
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
ResourcesPlugin.getWorkspace().
Display.getDefault().syncExec(new Runnable() {
@Override
public void run() {
try {
//cmd.executeWithChecks(execEvt);
cmd.execute(execEvt);
} catch (Exception e) {
getLogger().severe("organize imports failed: " + e.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是OrganizeImportsAction在当前选择上执行,这与我正在编辑的编译单元不同.我想在编译单元上以编程方式设置选择,但我不知道如何做到这一点.或者可能还有另一种触发OrganizeImports的方法.
谢谢,斯特凡
我有一个Java类,其中javadoc的一部分实际上是作为构建过程的一部分生成的:方法的返回值(静态字符串值)被插入到源文件中,就像$Revision: $标签在某些版本控制软件中工作一样.
虽然这种行为可能有问题,但我使用的框架(WEKA机器学习库)需要这种信息重复.我希望Eclipse的代码格式化程序不要干扰生成的注释.我正在使用Eclipse Indigo版本.
我可以用特殊的注释开启/格式化关闭//@formatter:on和//@formatter:off.但是,@formatter标签仅在"正常"注释中起作用,而不在javadoc注释中起作用.显然,它们很容易与javadoc标签混淆.这意味着我无法关闭javadoc注释的生成部分的格式化程序(例如,自动换行),并将其保留为其余部分,因为@formatter指令必须放在javadoc注释周围.
有一个解决方法来切换javadoc注释中的代码格式?
Eclipse JDT 3.8中的Call Hierarchy视图似乎只显示当前项目/工作集中自己的类的引用/调用者.
来自jar/library的呼叫者不再显示.
相比之下,在eclipse <= 3.6中,这显示了所有调用者,包括来自库的调用者.
例:
CTRL-SHIFT-T; 打开DocumentBuilderFactorysetAttribute()Call Hierarchy从上下文菜单Eclipse 3.8显示没有匹配,而Eclipse 3.6显示(至少)一个匹配 (使用jdk 6测试)
(在"搜索范围"设置中,选中所有选项)
问题:
有没有办法在eclipse 3.8中启用以前的行为,还是一个bug?
(同样的问题可以在"Show Callee Hierachy"模式中看到 - 它不再显示来自jdk类的任何内部被调用者,例如比较被调用者ArrayList.get())
Eclipse(任何版本的 AFAIK)有一些与 Java 代码折叠相关的奇怪行为。假设我正在编辑这个类:
class A {
String field;
@Nonnull
Object method(){
// whatever
}
}
Run Code Online (Sandbox Code Playgroud)
如果启用折叠并且我告诉它折叠所有内容(它是我的 Control-NumSlash,但可能是自定义的),则该方法正确折叠,即它仅显示Object?method()...该方法。到目前为止一切都很好。
困扰我的部分是,如果我将光标移动到 之后field;,按 Enter,然后键入“ public”之类的内容,然后停止一秒钟,Eclipse 会自动将该单词折叠到下面的方法中。
这似乎是合理的(大概是假设我想将该限定符添加到方法中);但在实践中,我实际上是在尝试添加一个新方法,然后停下来思考它的返回类型或者它的名称。(如果我想修改该方法,我会先展开它,因为它可能已经具有折叠的限定符。)
我充满激情地讨厌这个“功能”,但我终其一生都找不到如何禁用它的方法,甚至无法找到该死的插件(Eclipse 一直坚持认为我不应该被允许删除)中的哪一个负责以便我可以提交错误报告。
那么,有没有人知道(1)这种行为来自哪里,希望(2)我怎样才能摆脱它但保持手动折叠?谢谢!
(根据记录,我使用的是 Kepler SR1,但这种行为可以追溯到很长一段时间,至少五年左右。)
我正在尝试创建一个依赖于JDT核心的项目.我正在使用Maven中心的条目,直到我意识到它们已经过时了几年.经过一番探索后,我遇到了https://repo.eclipse.org.我找到了我需要的存储库并添加了它:
<repository>
<id>eclipse</id>
<name>Eclipse Repository</name>
<url>https://repo.eclipse.org/content/groups/eclipse/</url>
</repository>
...
<dependency>
<groupId>org.eclipse.jdt</groupId>
<artifactId>org.eclipse.jdt.core</artifactId>
<version>3.10.0.v20140316-0146</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
但后来我开始收到错误:
该类型
org.eclipse.core.runtime.IProgressMonitor无法解决.它是从所需的.class文件间接引用的
我设法在其中一个Nexus存储库中找到了类型并添加了它:
<repository>
<id>eclipse-acceleo</id>
<name>Eclipse Repository</name>
<url>https://repo.eclipse.org/content/groups/acceleo/</url>
</repository>
...
<dependency>
<groupId>org.eclipse.equinox</groupId>
<artifactId>org.eclipse.equinox.common</artifactId>
<version>3.6.200.v20130402-1505</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
现在我收到了错误
该类型
org.eclipse.core.runtime.Plugin无法解决.它是从所需的.class文件间接引用的
我无法在任何Nexus存储库中找到该类.org.eclipse.jdt.core.JavaCore是引用的类org.eclipse.core.runtime.Plugin.
1.我需要添加哪个依赖项org.eclipse.core.runtime.Plugin?
2.有没有更好的方法将JDT作为Maven中的依赖项包含在内?
/ E1
我在http://grepcode.comorg.eclipse.core.runtime.Plugin的帮助下找到了.这一次,最新的依赖是在Maven Central中(而不是在Eclipse的Nexus repo中):
<dependency>
<groupId>org.eclipse.core</groupId>
<artifactId>runtime</artifactId>
<version>3.9.100-v20131218-1515</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
现在当我尝试运行我的测试时,我得到了以下异常:
java.lang.NoClassDefFoundError: org/eclipse/core/resources/IResource
at org.eclipse.jdt.core.dom.ASTParser.<init>(ASTParser.java:177)
at org.eclipse.jdt.core.dom.ASTParser.newParser(ASTParser.java:126)
.
.
.
Caused by: java.lang.ClassNotFoundException: org.eclipse.core.resources.IResource
at java.net.URLClassLoader$1.run(URLClassLoader.java:372) …Run Code Online (Sandbox Code Playgroud) 我正在编写一个java框架,对于一个类文件sample.class,它会生成一个代理文件sample_proxy.class.当调用sample.testMethod()时,它会占用sample_proxy.class.我已经制作了一个eclipse插件来使断点工作,

如果我从Main.java开始,并在sample.testMethod()中创建一个断点,下面的堆栈看起来像:Main.main - > sample.proxy_method - > sample_proxy.testMethod.
有没有办法让代理显示如下:Main.main - > sample.testMethod?
我正在运行火星4.5.1.内容辅助在lamba表达式的代码块中根本不起作用.
obj.doSomething(param1 -> {
// Content Assist doesn't work here
}
Run Code Online (Sandbox Code Playgroud)
代码块之外的任何内容自动完成.例如:param1会正确显示内容辅助.
它应该在4.5.0中修复,但对我来说似乎并非如此.
当我尝试通过取消选中"使用默认合规性设置" 手动设置1.8兼容性时,每次退出首选项时都会重新启用该框.编译器合规性级别设置为1.8,无济于事.
注意:我发现了多个问题,指出了javacEclipse编译器之间的差异,但据我所知,所有这些问题都讨论了其他问题.
假设我们有这个方法:
public static <T, U> void foo(Supplier<T> a, Function<T, U> b, Consumer<U> c)
{
c.accept(b.apply(a.get()));
}
Run Code Online (Sandbox Code Playgroud)
javac在编译对此方法的调用时,我发现Eclipse Java编译器与Eclipse Java编译器之间存在不同的行为,我不确定哪两个是正确的.
这种方法的简单用法可能是:
// variant 1
foo(
() -> Optional.of("foo"),
value -> value.get(),
value -> System.out.println(value));
Run Code Online (Sandbox Code Playgroud)
编译器应该能够结合T到Optional<String>使用所述第一参数,并U以String使用所述第二.所以这个电话应该是有效的(在我看来).
这可以很好javac地编译,但无法使用Eclipse进行编译:
类型不匹配:无法从void转换为<unknown>
在第一个参数(() -> Optional.<String> of("foo"))中添加一个类型参数也使它在Eclipse中编译.
问题:从规范的角度来看,Eclipse是否正确拒绝此调用(以及为什么(不))?
现在假设我们想抛出一个自定义(运行时)异常,如果它Optional是空的:
// variant 2
foo(
() -> Optional.of("foo"),
value -> value.orElseThrow(() -> new RuntimeException()),
value -> System.out.println(value));
Run Code Online (Sandbox Code Playgroud)
这javac和Eclipse编译器都拒绝了,但是有不同的错误消息:
javac …