2013-07-31 18 views
14

Bir alan veya yöntemin public ve final hem olmasını hem de alan veya yöntem yoksa bir derleme zamanı hatası oluşturmasını sağlayan özel bir açıklama oluşturmaya çalışıyorum hem public ve bu örneklerde olduğu gibi final:Bir Açıklama Hatası

// Compiles 
@PublicFinal 
public final int var = 2; 

// Compiles 
@PublicFinal 
public final void myMethod {} 

// Compile time error 
@PublicFinal 
private final int fail = 2; 

Şimdiye kadar, yaptığım özel açıklama arayüzünde hem:

import java.lang.annotation.Documented; 
import java.lang.annotation.ElementType; 
import java.lang.annotation.Retention; 
import java.lang.annotation.RetentionPolicy; 
import java.lang.annotation.Target; 

@Documented 
@Retention(RetentionPolicy.SOURCE) 
@Target({ElementType.METHOD, ElementType.FIELD}) 
public @interface PublicFinal { } 

ve Processor:

import javax.annotation.processing.AbstractProcessor; 
import javax.annotation.processing.RoundEnvironment; 
import javax.annotation.processing.SupportedAnnotationTypes; 
import javax.lang.model.element.Modifier; 
import javax.lang.model.element.TypeElement; 
import java.util.Set; 

@SupportedAnnotationTypes("PublicFinal") 
public class PubicFinalProcessor extends AbstractProcessor 
{ 
    @Override 
    public boolean process(
      Set<? extends TypeElement> annotations, 
      RoundEnvironment roundEnv) 
    { 
     for (TypeElement typeElement : annotations) 
     { 
      Set<Modifier> modifiers = typeElement.getModifiers(); 

      if (!modifiers.contains(Modifier.FINAL) 
        || !modifiers.contains(Modifier.PUBLIC)) 
      { 
       // Compile time error. 
       // TODO How do I raise an error? 
      } 
     } 

     // All PublicFinal annotations are handled by this Processor. 
     return true; 
    } 
} 

TODO tarafından ima edildiği gibi, derleme zamanı hatası nasıl üretileceğini bilmiyorum. İşlemci documentation bir işlemci, takım diğer aktif açıklama işlemcileri durdurabilir yakalanmamış istisna atar bir istisna,

atma edilmemelidir açıkça ortaya koyuyor.

Bir hata durumu gündeme ne olacağını açıklamak için devam ediyor, ama bir hata durumunu nasıl artırılabileceğini şimdi .

Soru: Bir derleme zamanı hatası oluşturacak şekilde nasıl bir hata durumu oluşturabilirim?

cevap

15

Muhtemelen processingEnv.getMessager().printMessage(Kind.ERROR, "method wasn't public and final", element). "Bir hata türünde bir mesaj yazdırmak bir hata oluşturacaktır."