2015-08-27 16 views
5

Trong lớp Result tôi chú thích với @IntDef tham số nguyên đầu tiên trong phương pháp newInstance() như thế này:Lint không xây dựng được với lỗi bảo mật "WrongConstant: Incorrect constant". IntDef chú thích

public class Result { 
    public static final int SUCCESS = 0; 
    public static final int FAIL = 1; 
    public static final int UNKNOWN = 2; 

    // ... 

    private Result(@Status int status, Uri uri) { 
     mStatus = status; 
     mUri = uri; 
    } 

    public static Result newInstance(@Status int status, Uri uri) { 
     return new Result(status, uri); 
    } 

    @Retention(RetentionPolicy.SOURCE) 
    @IntDef({ SUCCESS, FAIL, UNKNOWN }) 
    @interface Status {} 
} 

Tiếp theo, trong lớp Utils tôi gọi phương thức đó và vượt qua liên tục đúng như thông số. Tôi chắc chắn rằng tôi sử dụng tập hợp cụ thể của các hằng số như thế này:

public static Result foo() { 
    // ... 
    return Result.newInstance(Result.SUCCESS, contentUri); // line 45 
} 

Nhưng lint không xây dựng với an ninh lỗi

"WrongConstant: liên tục sai"

../ .. /src/main/java/my/package/Utils.java:45: Phải là một trong: 0, 1, 2

Tôi biết rằng lỗi này có thể đơn giản y bị đàn áp. Nhưng tôi muốn biết có gì sai với mã của tôi? Hoặc có thể đó là một vấn đề khác?

+0

Rất lạ, tôi thậm chí không tìm thấy định nghĩa cảnh báo lint như vậy –

Trả lời

0

Giống như lỗi nói, giá trị phải là 0,1,2.

Result.SUCCESS có giá trị là -1

+0

Không, _Result.SUCCESS_ là hằng số được khai báo trong lớp của riêng tôi. Nó chắc chắn bằng 0. Bạn đã đăng liên kết tới Activity.RESULT_OK nằm ngoài phạm vi. – dmitriyzaitsev

+0

Bạn có chắc chắn không có một lần nhập sử dụng một Kết quả khác? –

+0

@ci_, vâng, tôi chắc chắn. – dmitriyzaitsev

5

Tôi đã có một vấn đề tương tự với một hằng số @StringDef. Tôi đoán kiểm tra Lint đặc biệt này có một số vấn đề.

Trong khi đó, bạn có thể sử dụng @SuppressLint chú thích như một cách giải quyết:

public static Result foo() { 
    // ... 
    @SuppressLint("WrongConstant") 
    return Result.newInstance(Result.SUCCESS, contentUri); 
} 

Edit: Vấn đề này dường như được cố định với plugin gradle phiên bản 1.4.0-beta1
Issue 182179 - android - Lint gives erroneous @StringDef errors in androidTests

Các vấn đề liên quan