2015-08-27 1 views
5

In meiner Result Klasse kommentierte ich mit @IntDef ersten Integer-Parameter in newInstance() Methode wie folgt:Lint schlägt den Build mit Sicherheitsfehler "WrongConstant: Falsche Konstante" fehl. IntDef Anmerkung

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 {} 
} 

nächstes in meiner Utils Klasse ich diese Methode aufrufen und die korrekte Konstante als Parameter übergeben. Ich stelle sicher, dass ich bestimmte Gruppe von Konstanten wie folgt verwenden:

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

Aber Flusen den Build mit Sicherheitsfehler

"WrongConstant: Falsche Konstante" nicht

../ .. /src/main/java/my/package/Utils.java:45: Muss einer der folgenden sein: 0, 1, 2

ich weiß, dass dieser Fehler simpl sein kann y unterdrückt. Aber ich würde gerne wissen, was mit meinem Code nicht stimmt? Oder vielleicht ist es ein anderes Problem?

+0

Sehr seltsam, ich finde nicht einmal solche Flusen Warnung Definition –

Antwort

0

Wie der Fehler sagt, muss der Wert 0,1,2 sein.

Result.SUCCESS hat einen Wert von -1

+0

Nein, _Result.SUCCESS_ ist die Konstante in meiner eigenen Klasse deklariert. Es ist definitiv gleich 0. Sie haben den Link zu Activity.RESULT_OK veröffentlicht, der außerhalb des Gültigkeitsbereichs liegt. – dmitriyzaitsev

+0

Sind Sie sicher, dass es keinen Import gibt, der ein anderes Ergebnis verwendet? –

+0

@ci_, ja, ich bin mir sicher. – dmitriyzaitsev

5

ich mit einem @StringDef konstant ein ähnliches Problem hatte. Ich denke, dieser spezielle Lint-Check hat einige Probleme.

In der Zwischenzeit können Sie die @SuppressLint Annotation als Abhilfe verwenden:

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

Edit: Dieses Problem mit gradle Plugin-Version 1.4.0-beta 1
fixiert zu sein scheint Issue 182179 - android - Lint gives erroneous @StringDef errors in androidTests

Verwandte Themen