Eclipse:矛盾的警告

5
这里是代码片段:

class MyClass {
    private native void foo();
}

对于上述问题,Eclipse(即3.7.0版本)会发出警告:

来自MyClass的foo()方法从未在本地使用

好吧,但是当我尝试抑制这个警告时:

class MyClass {
    @SuppressWarnings("unused")
    private native void foo();
}

它抱怨:

无必要的@SuppressWarnings("unused")

那么,有没有办法让它停止抱怨?

更新

对于不完整的信息,我很抱歉——这个警告只会在AspectJ项目中显示。一旦我创建一个简单的Java项目并将我的类放入其中,一切都正常。

据我所知,AspectJ使用自己的编译器,因此这个警告必须由它生成。我正在使用AspectJ Development Tools插件:

Version: 2.1.3.e37x-20110628-1900
AspectJ version: 1.6.12.20110613132200

有趣的是,在Eclipse 3.5下我没有第二个警告。 - Shlublu
我没有看到第一个警告 - "MyClass类型的foo()方法从未在本地使用"。奇怪! - Deepak Azad
你可以尝试使用“项目 > 清理”功能,然后进行重建。也许第一个警告是一个过时的标记。 - Deepak Azad
清理并重新构建完全没有帮助。 - Andy
4个回答

2

仅仅更加精确地说,@SuppressWarnings 不是特定于 Eclipse 的。然而,被该注释抑制的警告列表是编译器特定的。 - Andrew Eisenberg

1
在Java项目中,这不会产生任何警告:
class MyClass {
    private native void foo();
}

然而,这会产生一个Unnecessary @SuppressWarnings("unused")警告:

class MyClass {
    @SuppressWarnings("unused")
    private native void foo();
}

在一个AspectJ项目中,第一个示例会产生一个The method foo() from the type MyClass is never used locally警告,而第二个示例则会像Java项目一样产生相同的警告。这很可能是一个AspectJ的bug。我建议在AspectJ bugzilla上提出问题。

https://bugs.eclipse.org/bugs/

AspectJ编译器是Eclipse 3.3的JDT编译器的分支。因此,这个bug很可能最初就存在于Eclipse 3.3中。现在Java 7已经发布,AspectJ很可能会迁移到基于Eclipse 3.7或3.8的版本,并从JDT编译器中获得修复。但无论如何,提出一个bug仍然是值得的。


是的,看起来像是Eclipse/AspectJ的一个bug,所以我已经提交了一个问题:https://bugs.eclipse.org/bugs/show_bug.cgi?id=213755。 - Andy

0

我刚刚尝试了一下,没有收到“不必要的…”警告。你确定这个警告是由Java编译器发出的,而不是由其他工具(如checkstyle或findbugs)发出的吗?

无论如何,有些情况下,未使用的私有方法是有意义的。


不幸的是,有时确实无法避免声明未使用的私有方法。 - Andy

0

对我来说它是有效的。我像你一样在运行Eclipse Indigo。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接