package com.android.tests.extractannotations;
import static com.android.tests.extractannotations.Constants.FLAG_VALUE_1;
import static com.android.tests.extractannotations.Constants.FLAG_VALUE_2;
import android.support.annotation.ColorRes;
import android.support.annotation.DrawableRes;
import android.support.annotation.IdRes;
import android.support.annotation.IntDef;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.StringDef;
import android.support.annotation.StringRes;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.Map;
@SuppressWarnings({"JavaDoc", "UnusedDeclaration", "SpellCheckingInspection"})
public class ExtractTest {
public ExtractTest(@IdRes int param1, @NonNull @StringRes String param2) {
}
// Nullness annotations
@Nullable
public Object getNullableReturn() { return null; }
@NonNull
protected Object getNonNullableReturn() { return ""; }
public static void setNullableNonNullable(@Nullable Number param1, @NonNull String param2) {
}
// Resource type annotations
@StringRes @IdRes
public int resourceTypeMethod(@DrawableRes int arg1, @IdRes @ColorRes int arg2) {
return 0;
}
// Complicated signature: check that annotation signature extracted in XML is correct
public <T> void resourceTypeMethodWithTypeArgs(@StringRes Map<String,? extends Number> map,
@DrawableRes T myArg,
@IdRes int arg2) {
}
// Typedefs
public void checkForeignTypeDef(@TopLevelTypeDef int topLevel) {
}
/** @hide */
@IntDef(flag=true, value={0, FLAG_VALUE_1, FLAG_VALUE_2})
@Retention(RetentionPolicy.SOURCE)
private @interface Mask {}
public void testMask(@Mask int mask) {
}
@IntDef(flag=false, value={0, Constants.CONSTANT_1, Constants.CONSTANT_3})
@Retention(RetentionPolicy.SOURCE)
protected @interface NonMaskType {}
public void testNonMask(@NonMaskType int mask) {
}
@IntDef({VISIBLE, INVISIBLE, GONE, 5, 7 + 10, Constants.CONSTANT_1})
@Retention(RetentionPolicy.SOURCE)
public @interface Visibility {}
public static final int VISIBLE = 0x00000000;
public static final int INVISIBLE = 0x00000004;
public static final int GONE = 0x00000008;
@Visibility
public int getVisibility() {
return VISIBLE;
}
/** @hide */
@StringDef({STRING_1, STRING_2, "literalValue", "conc" + "atenated"})
@Retention(RetentionPolicy.SOURCE)
public @interface StringMode {}
public static final String STRING_1 = "String1";
public static final String STRING_2 = "String1";
@StringMode
public String getStringMode(@Visibility int visibility) {
return STRING_1;
}
// Hidden annotations: not extracted for various reasons
// This method should not be included: it's private
@IdRes
private int getPrivate() { return 0; }
// This method should not be included: it's package private
@IdRes
private Object getPackagePrivate() { return 0; }
// This method should not be included: method is hidden
/** @hide */
@IdRes
public int getHiddenMethod() { return 0; }
// This method should not be included: method is hidden
/** @hide */
private static class HiddenClass {
@IdRes
public int getHiddenMember() { return 0; }
}
}