Eclipse 日食赢了';t始终显示javadoc或rxjava2可观察的开放声明(不规则)

Eclipse 日食赢了';t始终显示javadoc或rxjava2可观察的开放声明(不规则),eclipse,javadoc,eclipse-jdt,eclipse-oxygen,Eclipse,Javadoc,Eclipse Jdt,Eclipse Oxygen,oxygen3月食(2018年3月)。 普通java项目,带有RxJavaJAR和源代码。 .classpath文件: <?xml version="1.0" encoding="UTF-8"?> <classpath> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.Stan

oxygen3月食(2018年3月)。 普通java项目,带有RxJavaJAR和源代码。 .classpath文件:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk18"/>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="lib" path="rxjava-2.1.12.jar" sourcepath="rxjava-2.1.12-sources.jar"/>
    <classpathentry kind="lib" path="reactive-streams-1.0.2.jar"/>
    <classpathentry kind="output" path="output"/>
</classpath>
还有许多方法没有得到javadoc悬停弹出窗口,并且不能有ctrl-click-open声明

.range()、1st doOnNext()、1st subscribeOn()和observeOn()无法打开,并且具有javadoc但没有工具提示poopup,其他的都有!第二个doOnNext()、第二个subscribeOn()和最后一个subscribe()方法确实显示了javadoc工具提示,可以按ctrl键单击

这让我快发疯了。。。我要如何处理eclipse来修复这个疯狂的问题?你知道关于这个的eclipse bug报告吗


它似乎只出现在rxjava上。当然这是一个IDE错误,但我无法在其他LIB上轻松复制。我认为这是因为“Observable”有太多的方法,也许它只能看到N个。但后来它给我看同一个方法的javadoc/opendeclaration(比如doOnNext()),只是因为它在源代码中的其他地方。。。WTF?

这可能是,也就是说,RxJava似乎包含一些签名,这打破了选择/解析引用到该库的用例。解析失败后,工具不知道应该为哪个元素显示javadoc。

您是否打开了拥有这些方法的类型,以查看它们是否附加了源代码或javadoc?你试过什么?你指的是什么“相同”的方法?具体点,我写了他们有javadoc,我写了我所做的,以及哪些方法。但我现在编辑了它,使它更清晰了。你检查过错误日志中报告的任何相关信息吗?非常感谢你在bugzilla中链接!然而,它并没有提到同样的方法有时有效,有时无效,这取决于源位置。这可能会在jdt ast模型中的某个索引变量上出现+/-1错误……不用担心,由于正在测试修复程序,您的示例中的所有调用都具有正确的悬停和ctrl单击行为(在重要的情况下根据rxjava-2.0.4进行测试)。我认为这不是因为rxjava的结构,而是因为lambdas。我在1.5年前对4.6有一个类似的错误,但显然它在4.7.3中也没有修复。@akarnokd可以随便拿一个最近的来测试Bug 515758的修复是否也涵盖了您的情况(是的,您是对的,lambdas在这方面起了重要作用)。
static void test1() throws InterruptedException {
    //Flowable.range(0, 1000)
    Observable.range(0, 1000)
        .doOnNext(i -> {
            System.out.println(", r"+i);
        })
        .subscribeOn(Schedulers.newThread())
        .observeOn(Schedulers.newThread())
        .doOnNext(i -> {
            System.out.println(", w"+i);
        })
        .subscribeOn(Schedulers.newThread())
        .subscribe( i -> System.out.println(", f"+i));

    Thread.sleep(5000);
}