जवाबों:
FindBugs प्रारंभिक दृष्टिकोण में XML कॉन्फ़िगरेशन फ़ाइलें उर्फ फ़िल्टर शामिल हैं । यह वास्तव में पीएमडी समाधान की तुलना में कम सुविधाजनक है, लेकिन फाइंडबग्स, स्रोत कोड पर नहीं, बायटेकोड पर काम करता है, इसलिए टिप्पणियाँ स्पष्ट रूप से एक विकल्प नहीं हैं। उदाहरण:
<Match>
<Class name="com.mycompany.Foo" />
<Method name="bar" />
<Bug pattern="DLS_DEAD_STORE_OF_CLASS_LITERAL" />
</Match>
हालाँकि, इस समस्या को हल करने के लिए, FindBugs ने बाद में एनोटेशन (देखें SuppressFBWarnings
) के आधार पर एक और समाधान पेश किया जिसे आप कक्षा में या विधि स्तर पर उपयोग कर सकते हैं (मेरी राय में XML की तुलना में अधिक सुविधाजनक)। उदाहरण (शायद सबसे अच्छा नहीं है लेकिन, ठीक है, यह सिर्फ एक उदाहरण है):
@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
value="HE_EQUALS_USE_HASHCODE",
justification="I know what I'm doing")
ध्यान दें कि चूंकि FindBugs 3.0.0 जावा के नाम के साथ टकराव SuppressWarnings
के @SuppressFBWarnings
कारण पदावनत किया गया है SuppressWarnings
।
<dependency> <groupId>net.sourceforge.findbugs</groupId> <artifactId>annotations</artifactId> <version>1.3.2</version> <scope>provided</scope> </dependency>
<dependency><groupId>com.google.code.findbugs</groupId><artifactId>annotations</artifactId><version>3.0.0</version><scope>provided</scope></dependency>
यदि वे उपयोग करना चाहते हैं तो मावेन उपयोगकर्ताओं को अपने POM में जोड़ना चाहिए @SuppressFBWarnings
।
जैसा कि अन्य ने उल्लेख किया है, आप @SuppressFBWarnings
एनोटेशन का उपयोग कर सकते हैं । यदि आप अपने कोड में कोई अन्य निर्भरता नहीं चाहते हैं या नहीं जोड़ सकते हैं, तो आप अपने कोड में एनोटेशन को स्वयं जोड़ सकते हैं, फाइंडबग्स ने ध्यान नहीं दिया कि एनोटेशन पैकेज किस में है।
@Retention(RetentionPolicy.CLASS)
public @interface SuppressFBWarnings {
/**
* The set of FindBugs warnings that are to be suppressed in
* annotated element. The value can be a bug category, kind or pattern.
*
*/
String[] value() default {};
/**
* Optional documentation of the reason why the warning is suppressed
*/
String justification() default "";
}
स्रोत: https://sourceforge.net/p/findbugs/feature-requests/298/#5e88
यहाँ एक XML फ़िल्टर का एक और पूरा उदाहरण दिया गया है (ऊपर दिया गया उदाहरण अपने आप काम नहीं करेगा क्योंकि यह सिर्फ एक स्निपेट दिखाता है और <FindBugsFilter>
आरंभ और समाप्ति टैग गायब है ):
<FindBugsFilter>
<Match>
<Class name="com.mycompany.foo" />
<Method name="bar" />
<Bug pattern="NP_BOOLEAN_RETURN_NULL" />
</Match>
</FindBugsFilter>
यदि आप Android Studio FindBugs प्लगइन का उपयोग कर रहे हैं, तो फ़ाइल-> अन्य सेटिंग्स-> डिफ़ॉल्ट सेटिंग्स-> अन्य सेटिंग्स-> FindBugs-IDEA-> फ़िल्टर-> फ़िल्टर फ़ाइलों को बाहर करें> का उपयोग करके अपनी XML फ़िल्टर फ़ाइल में ब्राउज़ करें।
अद्यतन करें
dependencies {
compile group: 'findbugs', name: 'findbugs', version: '1.0.0'
}
FindBugs रिपोर्ट का पता लगाएँ
फ़ाइल: ///Users/your_user/IdeaProjects/projectname/build/reports/findbugs/main.html
विशिष्ट संदेश खोजें
एनोटेशन के सही संस्करण को आयात करें
import edu.umd.cs.findbugs.annotations.SuppressWarnings;
आपत्तिजनक कोड के ऊपर एनोटेशन को सीधे जोड़ें
@SuppressWarnings("OUT_OF_RANGE_ARRAY_INDEX")
अधिक जानकारी के लिए यहां देखें: फाइंडबग्स स्प्रिंग एनोटेशन
compile 'net.sourceforge.findbugs:annotations:1.3.2'
सिंटैक्स का उपयोग कर सकते हैं जो कम है।
testCompile 'com.google.code.findbugs:annotations:3.0.0'
@SuppressFBWarnings
इसे लिखने के समय (मई 2018), फाइंडबग्स को स्पॉटबग्स द्वारा प्रतिस्थापित किया गया लगता है । SuppressFBWarnings
एनोटेशन का उपयोग करने के लिए आपके कोड को जावा 8 या बाद में संकलित करने की आवश्यकता होती है और एक संकलन समय निर्भरता का परिचय देता हैspotbugs-annotations.jar
।
स्पॉटबग्स नियमों को फ़िल्टर करने के लिए फ़िल्टर फ़ाइल का उपयोग करने से ऐसा कोई समस्या नहीं होती है। प्रलेखन यहाँ है ।
हालांकि यहाँ पर अन्य उत्तर मान्य हैं, वे इसे हल करने के लिए एक पूर्ण नुस्खा नहीं हैं।
पूर्णता की भावना में:
आपको अपनी pom फ़ाइल में खोजबिन एनोटेशन की आवश्यकता है - वे केवल संकलन समय हैं, इसलिए आप provided
स्कोप का उपयोग कर सकते हैं :
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>findbugs-annotations</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
यह @SuppressFBWarnings
वहाँ का उपयोग एक और निर्भरता जो प्रदान करता है की अनुमति देता है @SuppressWarnings
। हालाँकि, ऊपर स्पष्ट है।
फिर आप अपने तरीके के ऊपर एनोटेशन जोड़ें:
उदाहरण के लिए
@SuppressFBWarnings(value = "RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE",
justification = "Scanning generated code of try-with-resources")
@Override
public String get() {
try (InputStream resourceStream = owningType.getClassLoader().getResourceAsStream(resourcePath);
BufferedReader reader = new BufferedReader(new InputStreamReader(resourceStream, UTF_8))) { ... }
इसमें बग का नाम और यह भी एक कारण है कि आप इसके लिए स्कैन को अक्षम क्यों कर रहे हैं।
मैं इसे यहां छोड़ने जा रहा हूं: https://stackoverflow.com/a/14509697/1356953
कृपया ध्यान दें कि यह java.lang.SuppressWarnings
एक अलग एनोटेशन का उपयोग करने की आवश्यकता नहीं है।
किसी फ़ील्ड पर @SuppressWarnings केवल उस फ़ील्ड घोषणापत्र के लिए रिपोर्ट किए गए खोजबग्स चेतावनी को दबाती है, न कि उस फ़ील्ड से जुड़ी प्रत्येक चेतावनी।
उदाहरण के लिए, यह "फील्ड केवल कभी शून्य करने के लिए सेट" चेतावनी को दबाता है:
@SuppressWarnings ("UWF_NULL_FIELD") स्ट्रिंग s = null; मुझे लगता है कि आप जो सबसे अच्छा कर सकते हैं वह कोड को चेतावनी के साथ अलग कर सकता है सबसे छोटी विधि जिसे आप कर सकते हैं, फिर पूरी विधि पर चेतावनी को दबाएं।
java.lang.SuppressWarnings
काम नहीं कर सकता। इसका सोर्स रिटेंशन है, इसलिए इसमें फाइबग्स नहीं दिख रहा है।