2014-07-27 92 views
8

假設我有一個內部方法,它只能在某些情況下使用。註釋上的自定義Eclipse警告

是否有可能,在Eclipse中使用時,爲防止我或誰將會使用我的API人錯誤地使用它,不知道他們在做什麼,就表示內部並顯示警告。我無法改變其可見性,因爲它也可能用於其他軟件包/非擴展類。

事情是這樣的:

@Internal 
public void doSomeInternalStuff() 
{ 
    // ... 
} 

,然後在Eclipse的一個警告:

enter image description here

你明白了吧。

有沒有希望?

回答

9

JSR269可插拔標註處理API)允許您編寫自定義註解處理器,可以處理定製標註並使您能夠使用javax.annotation.processing.Messager打印錯誤或警告。 下面是一個例子。

import java.util.Set; 

import javax.annotation.processing.AbstractProcessor; 
import javax.annotation.processing.RoundEnvironment; 
import javax.annotation.processing.SupportedAnnotationTypes; 
import javax.annotation.processing.SupportedSourceVersion; 
import javax.lang.model.SourceVersion; 
import javax.lang.model.element.Element; 
import javax.lang.model.element.TypeElement; 
import javax.tools.Diagnostic; 

@SupportedAnnotationTypes("fully.qualified.name.of.InternalAnnotationType") 
@SupportedSourceVersion(SourceVersion.RELEASE_6) 
public class CustomAnnotationProcessor extends AbstractProcessor { 

    @Override 
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) { 
     for (Element element : roundEnv.getElementsAnnotatedWith(InternalAnnotationType.class)) { 
      InternalAnnotationType internalAnnotation = element.getAnnotation(InternalAnnotationType.class); 
      String message = "The method " + element.getSimpleName() 
         + " is marked internal and its use is discouraged"; 
      processingEnv.getMessager().printMessage(Diagnostic.Kind.WARNING, message); 
     } 
     return true; 
    } 
} 

在Eclipse中,您可以在Java編譯器通過右鍵點擊你的項目註冊的註解處理器,然後選擇屬性 - >Java編譯器 - >註解處理 - >廠路徑並添加包含您的自定義註釋處理器的Jar。 Here是一個有趣的帖子,解釋了細節。

或者,你可以把你所有的「內部」方法API的專用類中,並添加訪問規則在你的Eclipse構建路徑類,所以,在你的項目中的任何代碼,取決於這個類會顯示一個警告。

+0

這就是我正在尋找的 - thx! –