2015-05-20 28 views
9

Apache Thrift kod üreteci böyle bir şeye benzeyen sınıflar oluşturur. numCpus alan null, ancak bir değer türü olarak düzenlenen beri gerçekten ayarlanmış olup olmadığını belirlemek için başka isSet alanı bulunur:PMD kuralındaki otomatik kutuları algılamak mümkün mü?

public class TaskConfig extends TBase<TaskConfig, TaskConfig._Fields> { 
    private boolean isSetNumCpus; // Actual implemntation is a bitfield. 
    private double numCpus; 

    public boolean isSetNumCpus() { 
    return isSetNumCpus; 
    } 

    public double getNumCpus() { 
    return numCpus; 
    } 

    public void setNumCpus(double numCpus) { 
    this.numCpus = numCpus; 
    this.isSetNumCpus = true; 
    } 

    // hashCode, equals, copy constructor, field enum etc. omitted 
} 

Bizim stil kılavuzu biz bir boş unutamam ki Opsiyonel olarak null değerleri sarma tercih Kontrol. Bu yüzden bu kod biraz görmek yaygındır:

TaskConfig task = getTaskConfigFromWire(); 
Optional<Double> numCpus = Optional.ofNullable(task.getNumCpus()); 

Ancak bu doğru değildir - teşekkürler bu argümanı Autoboxing için null olamaz ve doğru çağrı gibi görünmelidir:

TaskConfig task = getTaskConfigFromWire(); 
Optional<Double> numCpus = task.isSetNumCpus() 
    ? Optional.of(task.getNumCpus()) 
    : Optional.<Double>empty(); 

orada mı Bu çağrıyı yakalayan bir PMD kuralı yazma yolu (Optional.ofNullable otomatik kutu olacak bir değer türü ile çağrılır)?

cevap

1

PMD ikili dosyasını indirir ve tasarımcıyı kullanırsanız, ifadenin 'Name: Optional.ofNullable' adlı bir PrimaryExpression ve PrimaryPrefix'ini nasıl görebileceğinizi görebileceksiniz, daha sonra yöntem çağrısını bulmak için PrimarySuffix Argümanlarını inceleyebilirsiniz. veya değişken. Ardından, türleri bulmak için sınıf dosyasını yedeklemeniz ve otomatik kutulanmış bir değerin Yanlış Olarak Seçilmiş olup olmadığını belirlemek için bunu kullanmanız gerekir.

Kişisel olarak bunu bir Java kuralı olarak değil XPath olarak uygularım.

Daha fazla ayrıntı için http://pmd.sourceforge.net/pmd-4.3.0/howtowritearule.html'a bakın

İlgili konular