簡體   English   中英

注釋上的自定義Eclipse警告

[英]Custom Eclipse warning on an annotation

假設我有一個內部方法,只能在某些情況下使用。

在Eclipse中,是否有可能將其標記為內部並在用於阻止我或將使用我的API的人錯誤地使用它而不知道他們正在做什么時顯示警告。 我無法更改其可見性,因為它也可能在其他包/非擴展類中使用。

像這樣的東西:

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

然后,在Eclipse中發出警告:

在此輸入圖像描述

你明白了。

有希望嗎?

JSR269Pluggable Annotation Processor 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編譯器中注冊注釋處理器,方法是右鍵單擊項目,然后選擇Properties - > Java Compiler - > Annotation Processing - > Factory Path並添加包含自定義注釋處理器的Jar。 是一篇有趣的文章,解釋了細節。

或者 ,您可以將所有“內部”方法API放在專用類中,並在Eclipse構建路徑中為該類添加訪問規則 ,以便項目中依賴於此類的任何代碼都會顯示警告。

閱讀關於內部方法的內容Herbert Schildt的書“Java:beginers guide”在這里的鏈接: http ://www.amazon.com/Java-Beginners-Guide-5th-Edition/dp/0071606327

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM