blob: ccc23544e99a177bd3a58906d2c712cd0dcde76f [file] [log] [blame]
package test.pkg;
import android.content.Context;
import android.support.annotation.IntDef;
import android.support.annotation.StringDef;
import android.view.View;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@SuppressWarnings("UnusedDeclaration")
public class IntDefTest {
@IntDef({STYLE_NORMAL, STYLE_NO_TITLE, STYLE_NO_FRAME, STYLE_NO_INPUT})
@Retention(RetentionPolicy.SOURCE)
private @interface DialogStyle {}
public static final int STYLE_NORMAL = 0;
public static final int STYLE_NO_TITLE = 1;
public static final int STYLE_NO_FRAME = 2;
public static final int STYLE_NO_INPUT = 3;
public static final int UNRELATED = 3;
public void setStyle(@DialogStyle int style, int theme) {
}
public void testIntDef(int arg) {
setStyle(STYLE_NORMAL, 0); // OK
setStyle(IntDefTest.STYLE_NORMAL, 0); // OK
setStyle(arg, 0); // OK (not sure)
setStyle(0, 0); // ERROR
setStyle(-1, 0); // ERROR
setStyle(UNRELATED, 0); // ERROR
setStyle(IntDefTest.UNRELATED, 0); // ERROR
setStyle(IntDefTest.STYLE_NORMAL|STYLE_NO_FRAME, 0); // ERROR: Not a flag
setStyle(~STYLE_NO_FRAME, 0); // ERROR: Not a flag
}
@IntDef(value = {STYLE_NORMAL, STYLE_NO_TITLE, STYLE_NO_FRAME, STYLE_NO_INPUT}, flag=true)
@Retention(RetentionPolicy.SOURCE)
private @interface DialogFlags {}
public void setFlags(Object first, @DialogFlags int flags) {
}
public void testFlags(int arg) {
setFlags("", -1); // OK
setFlags("", 0); // OK
setFlags("", STYLE_NORMAL); // OK
setFlags(arg, 0); // OK (not sure)
setFlags("", IntDefTest.STYLE_NORMAL); // OK
setFlags("", STYLE_NORMAL|STYLE_NO_TITLE); // OK
setFlags("", STYLE_NORMAL|STYLE_NO_TITLE|STYLE_NO_INPUT); // OK
setFlags("", arg < 0 ? STYLE_NORMAL : STYLE_NO_TITLE); // OK
setFlags("", UNRELATED); // ERROR
setFlags("", UNRELATED|STYLE_NO_TITLE); // ERROR
setFlags("", STYLE_NORMAL|STYLE_NO_TITLE|UNRELATED); // ERROR
setFlags("", 1); // ERROR
setFlags("", arg < 0 ? STYLE_NORMAL : UNRELATED); // ERROR
setFlags("", arg < 0 ? UNRELATED : STYLE_NORMAL); // ERROR
}
public static final String TYPE_1 = "type1";
public static final String TYPE_2 = "type2";
public static final String UNRELATED_TYPE = "other";
@StringDef({TYPE_1, TYPE_2})
@Retention(RetentionPolicy.SOURCE)
private @interface DialogType {}
public void setTitle(String title, @DialogType String type) {
}
public void testStringDef(String typeArg) {
setTitle("", TYPE_1); // OK
setTitle("", TYPE_2); // OK
setTitle("", null); // OK
setTitle("", typeArg); // OK (unknown)
setTitle("", UNRELATED_TYPE); // ERROR
setTitle("", "type2"); // ERROR
}
public void testFlow() {
String type = TYPE_1;
setTitle("", type); // OK
type = UNRELATED_TYPE;
setTitle("", type); // ERROR
int flag = 0;
flag |= STYLE_NORMAL;
setFlags("", flag); // OK
flag = UNRELATED;
setFlags("", flag); // ERROR
}
public void testExternalAnnotations(View view, Context context) {
view.setLayoutDirection(View.LAYOUT_DIRECTION_LTR); // OK
context.getSystemService(Context.ALARM_SERVICE); // OK
view.setLayoutDirection(View.TEXT_DIRECTION_LTR); // ERROR
view.setLayoutDirection(0); // ERROR
view.setLayoutDirection(View.LAYOUT_DIRECTION_LTR|View.LAYOUT_DIRECTION_RTL); // ERROR
context.getSystemService(TYPE_1); // ERROR
}
}