একটি একক ফাইন্ডব্যাগ সতর্কতা উপেক্ষা করার উপায় আছে?


194

পিএমডি সহ, আপনি যদি কোনও নির্দিষ্ট সতর্কতা উপেক্ষা করতে চান তবে আপনি // NOPMDসেই লাইনটিকে উপেক্ষা করার জন্য ব্যবহার করতে পারেন।

ফাইন্ডব্যাগগুলির জন্য কি অনুরূপ কিছু আছে?

উত্তর:


308

ফাইন্ডব্যাগগুলির প্রাথমিক পদ্ধতির সাথে এক্সএমএল কনফিগারেশন ফাইলগুলি ওরফে ফিল্টার জড়িত । এটি পিএমডি সমাধানের তুলনায় খুব কম সুবিধাজনক তবে ফাইন্ডব্যাগগুলি সোর্স কোডে নয়, বাইটকোডে কাজ করে, সুতরাং মন্তব্যগুলি অবশ্যই কোনও বিকল্প নয়। উদাহরণ:

<Match>
   <Class name="com.mycompany.Foo" />
   <Method name="bar" />
   <Bug pattern="DLS_DEAD_STORE_OF_CLASS_LITERAL" />
</Match>

যাইহোক, এই সমস্যাটি সমাধান করার জন্য ফাইন্ডব্যাগস পরবর্তী সময়ে টীকাগুলির উপর ভিত্তি করে আরেকটি সমাধান চালু করেছে (দেখুন SuppressFBWarnings) আপনি ক্লাসে বা পদ্ধতি স্তরে (আমার মতে এক্সএমএল অপেক্ষা আরও সুবিধাজনক) ব্যবহার করতে পারেন। উদাহরণ (সম্ভবত সেরাটি নয় তবে, এটি কেবল একটি উদাহরণ):

@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
    value="HE_EQUALS_USE_HASHCODE", 
    justification="I know what I'm doing")

নোট করুন যেহেতু জাভা এর সাথে নাম সংঘর্ষের কারণে FindBugs 3.0.0 এর SuppressWarningsপক্ষ থেকে অবমাননা করা হয়েছে ।@SuppressFBWarningsSuppressWarnings


4
বোনাস প্রশ্ন: প্রদত্ত "বাগ" (সোনার ব্যবহার করে) এর জন্য আমি উপযুক্ত মানটি কীভাবে খুঁজে পাব?
প্ল্যানফোর্ডঅফেনঅফিস

29
এ্যানোটেশন পদ্ধতির ব্যবহারের ক্ষেত্রে অবশ্যই সমস্যাটি হ'ল আপনার কোডটি অযথাই ফাইন্ডব্যাগ গ্রন্থাগারটি আমদানি করে (এবং পরবর্তী নির্ভরতা) :(
অ্যাশলে ওয়ালটন

9
@ অ্যাশলেওয়াল্টন টীকাগুলি ধরে রাখা ক্লাস, তাই কমপক্ষে এটি কেবল একটি সংকলন সময় নির্ভরতা
ইয়ার্কাম

17
এই মাভেন ব্যবহারকারীদের জন্য, টীকাগুলি আমদানি করতে আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন। (বোনাস, সুযোগটি সেট করা হয়েছে যাতে আপনার প্রকল্প রানটাইমগুলিতে FindBugs এর উপর নির্ভর করে না)। <dependency> <groupId>net.sourceforge.findbugs</groupId> <artifactId>annotations</artifactId> <version>1.3.2</version> <scope>provided</scope> </dependency>
ব্র্যাম্প

7
মেভেন ব্যবহারকারীরা <dependency><groupId>com.google.code.findbugs</groupId><artifactId>annotations</artifactId><version>3.0.0</version><scope>provided</scope></dependency>যদি তাদের ব্যবহার করতে চান তবে তাদের POM এ যুক্ত করা উচিত @SuppressFBWarnings
jansohn

22

অন্যরা যেমন উল্লেখ করেছে, আপনি @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


15

এখানে এক্সএমএল ফিল্টারটির আরও সম্পূর্ণ উদাহরণ দেওয়া হয়েছে (উপরের উদাহরণটি নিজে থেকে কাজ করবে না কারণ এটি কেবল একটি স্নিপেট দেখায় এবং <FindBugsFilter>শুরু এবং শেষ ট্যাগগুলি অনুপস্থিত ):

<FindBugsFilter>
    <Match>
        <Class name="com.mycompany.foo" />
        <Method name="bar" />
        <Bug pattern="NP_BOOLEAN_RETURN_NULL" />
    </Match>
</FindBugsFilter>

আপনি যদি অ্যান্ড্রয়েড স্টুডিও ফাইন্ডব্যাগস প্লাগইন ব্যবহার করছেন তবে ফাইল-> অন্যান্য সেটিংস-> ডিফল্ট সেটিংস-> অন্যান্য সেটিংস-> ফাইন্ডব্যাগস-আইডিইএ-> ফিল্টার-> ফিল্টার ফাইলগুলি বাদ দিন-> অ্যাড ব্যবহার করে আপনার এক্সএমএল ফিল্টার ফাইলটিতে ব্রাউজ করুন।


10

গ্রেডল আপডেট করুন

dependencies {
    compile group: 'findbugs', name: 'findbugs', version: '1.0.0'
}

ফাইন্ডব্যাগস প্রতিবেদনটি সন্ধান করুন

ফাইল: ///Users/your_user/IdeaProjects/projectname/build/reports/findbugs/main.html

নির্দিষ্ট বার্তাটি সন্ধান করুন

বাগ খুঁজে

টীকাটির সঠিক সংস্করণ আমদানি করুন

import edu.umd.cs.findbugs.annotations.SuppressWarnings;

আপত্তিজনক কোডের উপরে সরাসরি টিকা যুক্ত করুন

@SuppressWarnings("OUT_OF_RANGE_ARRAY_INDEX")

আরও তথ্যের জন্য এখানে দেখুন: সন্ধানকারীগুলি স্প্রিং টিকা not


1
এর compile 'net.sourceforge.findbugs:annotations:1.3.2'পরিবর্তে আপনি বাক্য গঠন ব্যবহার করতে পারেন যা সংক্ষিপ্ত।
কোসিয়ারা - বার্তোসক কোসরজেকি

3
+1, তবে দয়া করে আপনার উত্তরটি এর সাথে আপডেট করুন: গ্রেড testCompile 'com.google.code.findbugs:annotations:3.0.0'এবং টীকাগুলির নাম@SuppressFBWarnings
ভ্ল্যাড.বাচুরিন

8

এটি (মে 2018) লেখার সময়, ফাইন্ডব্যাগগুলি স্পটব্যাগ দ্বারা প্রতিস্থাপিত হয়েছে বলে মনে হয় । SuppressFBWarningsটীকাটি ব্যবহার করে আপনার কোডটি জাভা 8 বা তার পরে সংকলন করা প্রয়োজন এবং এর উপর একটি সংকলন সময় নির্ভরতা প্রবর্তন করে spotbugs-annotations.jar

স্পটব্যাগস নিয়মগুলি ফিল্টার করতে একটি ফিল্টার ফাইল ব্যবহার করার ক্ষেত্রে এ জাতীয় কোনও সমস্যা নেই। ডকুমেন্টেশন এখানে


স্পটব্যাগগুলিতে আপনার লিঙ্কটি ভুল বলে মনে হচ্ছে। আমি এটির পরিবর্তে স্পটব্যাগস . github.ioপেয়েছি
আমেদী ভ্যান গ্যাস

1

যদিও এখানে অন্যান্য উত্তরগুলি বৈধ, তারা এটিকে সমাধান করার সম্পূর্ণ রেসিপি নয়।

সম্পূর্ণতার চেতনায়:

আপনার পম ফাইলে আপনার ফাইন্ডব্যাগ টীকাগুলি থাকা দরকার - সেগুলি কেবল সময়ের সংকলন, যাতে আপনি 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))) { ... }

এটিতে বাগের নাম এবং এটির জন্য আপনি স্ক্যানটি অক্ষম করার কারণও উভয়ই অন্তর্ভুক্ত ।


-6

আমি এটি এখানে রেখে যাচ্ছি: https://stackoverflow.com/a/14509697/1356953

অনুগ্রহ করে নোট করুন যে এটি এমন java.lang.SuppressWarningsএকটি পৃথক টীকা ব্যবহার করার প্রয়োজনের সাথে কাজ করে ।

একটি ক্ষেত্রের @ সপ্রেস ওয়ার্নিংস কেবলমাত্র সেই ক্ষেত্রের ঘোষণার জন্য প্রাপ্ত ফাইন্ডবাগস সতর্কতাগুলিকে দমন করে, ক্ষেত্রের সাথে সম্পর্কিত প্রতিটি সতর্কতা নয়।

উদাহরণস্বরূপ, এটি "ক্ষেত্র কেবলমাত্র নিঃশব্দে সেট করা" সতর্কতা দমন করে:

@ সাপ্রেস ওয়ার্নিংস ("UWF_NULL_FIELD") স্ট্রিং s = নাল; আমার মনে হয় আপনি যে সর্বোত্তম করতে পারেন তা হ'ল সতর্কতার সাথে কোডটি বিচ্ছিন্ন করে আপনি যে ক্ষুদ্রতম পদ্ধতিটি করতে পারেন, তারপরে সম্পূর্ণ পদ্ধতিতে সতর্কতা দমন করে।


8
java.lang.SuppressWarningsকাজ করতে পারে না। এটিতে সোর্স ধরে রাখা রয়েছে, তাই ফাইন্ডব্যাগগুলিতে দৃশ্যমান নয়।
ফিলিপ অ্যাস্টন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.