मैं अलग-अलग FindBugs चेतावनियों को दबाने के लिए कस्टम एनोटेशन बनाना चाहता हूं ताकि कोड-समापन के माध्यम से उनका उपयोग करना आसान हो सके। उदाहरण के लिए, यह उन रचनाकारों को अनदेखा करता है जो सभी @Nonnull
फ़ील्ड सेट नहीं करते हैं।एक विशिष्ट FindBugs चेतावनी दबाने के लिए कस्टम एनोटेशन
@TypeQualifierDefault(ElementType.CONSTRUCTOR)
@SuppressFBWarnings("NP_NONNULL_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR")
@Retention(RetentionPolicy.CLASS)
public @interface SuppressNonnullFieldNotInitializedWarning
{ }
हालांकि, एनोटेशन का उपयोग करते समय भी मुझे चेतावनी दिखाई देती है।
public class User {
@Nonnull
private String name;
@SuppressNonnullFieldNotInitializedWarning
public User() {
// "Nonnull field name is not initialized by new User()"
}
}
मैं अलग अवधारण नीतियों और तत्व प्रकार की कोशिश की है, निर्माता और वर्ग, और यहां तक कि @TypeQualifierNickname
पर एनोटेशन डाल।
यह वही पैटर्न कक्षा में सभी क्षेत्रों में @Nonnull
लागू करने के लिए काम करता है।
@Nonnull
@TypeQualifierDefault(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface FieldsAreNonnullByDefault
{ }
FindBugs सही ढंग से कोड है कि name
को null
प्रदान करती है के लिए एक चेतावनी प्रदर्शित करता है।
@FieldsAreNonnullByDefault
public class User {
private String name;
public UserModel() {
name = null;
// "Store of null value into field User.name annotated Nonnull"
}
}
मेरा मानना है कि समस्या यह है कि @SuppressFBWarnings
@TypeQualifier
साथ चिह्नित नहीं है @Nonnull
है, जबकि, और इस तरह @TypeQualifierDefault
और @TypeQualifierNickname
इस पर लागू नहीं है। लेकिन किसी अन्य का उपयोग करके एक एनोटेशन लागू करने के लिए कुछ अन्य तंत्र होना चाहिए।
@Chris (हालांकि बेशक ग्रहण जब तक आप एनोटेशन में
value=
निर्दिष्ट कोड: पूर्ण करने करने के लिए नहीं चाहता है): यह जवाब बताता है कि कैसे उपयोग करने के लिए Findbugs SuppressWarning एनोटेशन। यह सवाल यह है कि एक नई एनोटेशन कैसे बनाएं जो विशिष्ट खोजबग चेतावनी को दबाए। – TimK@ क्रिस आपने पहले से ही दूसरा लिंक पोस्ट किया है: http://stackoverflow.com/questions/14285422/custom-annotation-to-suppress-a- स्पेसिफिक-findbugs-warning#comment19837178_14285422 – steffen