Eclipse:与警告相矛盾

时间:2011-10-13 13:36:00

标签: java eclipse aspectj suppress-warnings

以下是代码段:

class MyClass {
    private native void foo();
}

对于上述情况,Eclipse(即3.7.0)发出警告

  

MyClass类型的方法foo()从不在本地使用

好吧,但是当我试图压制警告时:

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

抱怨

  

不受欢迎的@SuppressWarnings(“未使用”)

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

更新

抱歉信息不完整 - 此警告仅显示在AspectJ项目中。一旦我创建了一个简单的Java项目并将我的类放入其中,一切正常。

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

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

4 个答案:

答案 0 :(得分:2)

@SuppressWarnings列表是特定于编译器的。在Eclipse中,

unused 是unusedArgument,unusedImport,unusedLabel,unusedLocal,unusedPrivate和unusedThrown

的宏

整个列表在这里:the list of valid @SuppressWarnings supported in Eclipse

答案 1 :(得分: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错误。我建议在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编译器中获取修复。但无论如何都值得提出一个错误。

答案 2 :(得分:0)

我刚试过,但没有得到“不必要的......”警告。您确定警告是由java编译器发出的,而不是由checkstyle或findbugs等其他工具发出的吗?

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

答案 3 :(得分:0)

这对我有用。我正在像你一样运行Eclipse Indigo。