2011-10-13 76 views
5

下面的代碼片斷:蝕:矛盾警告

class MyClass { 
    private native void foo(); 
} 

針對上述情況,蝕(即,3.7.0)給出警告

的方法foo()從類型MyClass的是從來沒有在本地使用

好了,但是當我嘗試壓低警告:

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

它抱怨

Unnecesary @SuppressWarnings( 「未使用」)

那麼,有沒有什麼辦法讓它停止抱怨?

更新

對不起,我不完全信息 - 這個警告只顯示在一個AspectJ項目。一旦我創建了一個簡單的Java項目並將其放入其中,所有工作都正常。

據我所知,AspectJ使用自己的編譯器,所以這個警告必須由它產生。我正在使用AspectJ開發工具插件:

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

有趣的是,我沒有第二個警告(在Eclipse 3.5下) – Shlublu

+0

......並且我沒有看到第一個警告 - 「MyClass類型的方法foo()從不在本地使用」。奇怪! –

+0

你可以嘗試'項目>清潔',然後做一個重建。也許第一個警告是一個陳舊的標記.. –

回答

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編譯器中獲得修復。但無論如何,這是值得提出的錯誤。

+0

是的,它好像是一個Eclipse/AspectJ錯誤,所以我提出了一個問題:https://bugs.eclipse.org/bugs/show_bug.cgi?id = 213755。 – Andy

0

我剛剛嘗試過,我沒有看到「不必要...」警告。你確定這個警告是由java編譯器發出的,而不是由checkstyle或findbugs等其他工具發出的嗎?

無論如何,有一些情況下,未使用的私人方法是有道理的。

+0

不幸的是,當無法避免聲明未使用的私有方法時的確如此。 – Andy

0

它爲我工作。我像你一樣運行Eclipse Indigo。

2

@SuppressWarnings的列表是編譯器特定的。在Eclipse中,

未使用是宏unusedArgument,unusedImport,unusedLabel,unusedLocal,unusedPrivate和unusedThrown

整個名單是在這裏:the list of valid @SuppressWarnings supported in Eclipse

+0

更確切地說,@SuppressWarnings不是特定於Eclipse的。但是,該註釋禁止的警告列表是編譯器特定的。 –