2009-12-02 14 views

Trả lời

250

Phương pháp tiếp cận ban đầu của FindBugs liên quan đến tệp cấu hình XML aka filters. Điều này thực sự kém thuận tiện hơn so với giải pháp PMD nhưng FindBugs hoạt động trên bytecode, chứ không phải trên mã nguồn, vì vậy các nhận xét rõ ràng không phải là một tùy chọn. Ví dụ:

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

Tuy nhiên, để giải quyết vấn đề này, FindBugs sau giới thiệu một giải pháp dựa trên annotations (xem SuppressFBWarnings) mà bạn có thể sử dụng tại lớp hoặc ở cấp phương pháp (thuận tiện hơn so với XML trong quan điểm của tôi). Ví dụ (có thể không phải là người tốt nhất nhưng, tốt, nó chỉ là một ví dụ):

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

Lưu ý rằng kể từ khi FindBugs 3.0.0 SuppressWarnings đã phản đối ủng hộ @SuppressFBWarnings vì tên cuộc đụng độ với Java SuppressWarnings.

+79

1 bình luận của bạn: "Tôi biết những gì tôi đang làm" – dhiller

+4

Bonus Câu hỏi: Làm thế nào để tìm giá trị thích hợp cho một cho báo cáo "lỗi" (sử dụng sonar)? – PlanBForOpenOffice

+27

Vấn đề, tất nhiên với việc sử dụng phương pháp chú thích là mã của bạn thay vì nhập khẩu không cần thiết (và phụ thuộc tiếp theo) thư viện Findbugs: ( –

13

Dưới đây là một ví dụ hoàn chỉnh hơn về một bộ lọc XML (ví dụ trên bằng cách riêng của mình sẽ không làm việc vì nó chỉ cho thấy một đoạn và thiếu <FindBugsFilter> bắt đầu và thẻ kết thúc):

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

Nếu bạn là bằng cách sử dụng plugin FindBugs của Eclipse, hãy duyệt đến tệp bộ lọc XML của bạn bằng cách sử dụng Window-> Preferences-> Java-> FindBugs-> Filter files-> Exclude filter files-> Add.

-5

Tôi going để leave này 1 here: https://stackoverflow.com/a/14509697/1356953

Please note rằng này works với java.lang.SuppressWarnings nên no need để dụng một separate annotation.

@SuppressWarnings trên một lĩnh vực duy nhất ngăn chặn FindBugs cảnh báo báo cáo cho rằng tuyên bố lĩnh vực, không phải mọi cảnh báo liên quan đến lĩnh vực đó.

Ví dụ, điều này ngăn chặn các "Field chỉ bao giờ thiết lập để null" cảnh báo:

@SuppressWarnings ("UWF_NULL_FIELD") String s = null; Tôi nghĩ rằng tốt nhất bạn có thể làm là cô lập mã với cảnh báo vào phương pháp nhỏ nhất bạn có thể, sau đó ngăn chặn các cảnh báo trên toàn bộ phương pháp.

+5

'java.lang.SuppressWarnings' không thể hoạt động. Nó có nguồn lưu giữ, do đó, không hiển thị cho findbugs. –

5

Cập nhật Gradle

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

Xác định vị trí các Báo cáo FindBugs

file: /// Users/your_user/IdeaProjects/projectname/build/báo cáo/FindBugs/main.html

Tìm được thông báo cụ thể

find bugs

nhập đúng phiên bản của chú thích

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

Thêm chú thích trực tiếp trên mã vi phạm

@SuppressWarnings("OUT_OF_RANGE_ARRAY_INDEX") 

Xem ở đây để biết thêm: findbugs Spring Annotation

+1

Bạn có thể sử dụng cú pháp 'biên dịch 'net.sourceforge.findbugs: chú thích: 1.3.2'' thay vì ngắn hơn. –

+1

+1, nhưng vui lòng cập nhật câu trả lời của bạn với: gradle 'testCompile 'com.google.code.findbugs: chú thích: 3.0.0'' và tên chú thích' @ SuppressFBWarnings' –

10

Như những người khác đề cập, bạn có thể sử dụng @SuppressFBWarnings Chú thích. Nếu bạn không muốn hoặc không thể thêm một Phụ thuộc vào mã của mình, bạn có thể tự thêm chú thích vào mã của mình, Findbugs không quan tâm đến Gói chú thích là gì.

@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 ""; 
} 

Nguồn: https://sourceforge.net/p/findbugs/feature-requests/298/#5e88