Android Studio错误地标记了使用Snackbar.Duration注释的参数

stk*_*ent 5 android annotations android-studio android-snackbar

背景

我编写了一个默认Snackbar.make方法的包装器,以将自定义样式应用于我的Snackbar实例.我的自定义包装器的方法签名如下:

public static Snackbar makeCustom(
        @NonNull View view,
        @StringRes int resId,
        @Snackbar.Duration int duration)
Run Code Online (Sandbox Code Playgroud)

其中Snackbar.Duration注释中定义android.support.design.widget.Snackbar.java如下:

/**
 * @hide
 */
@IntDef({LENGTH_INDEFINITE, LENGTH_SHORT, LENGTH_LONG})
@IntRange(from = 1)
@Retention(RetentionPolicy.SOURCE)
public @interface Duration {}
Run Code Online (Sandbox Code Playgroud)

当我makeCustom使用以下参数调用时:

makeCustom(
        activity.findViewById(android.R.id.content),
        messageResId,
        Snackbar.LENGTH_SHORT);
Run Code Online (Sandbox Code Playgroud)

我在IDE(Android Studio)中看到以下错误:

来自Android Studio的屏幕截图显示与参数Snackbar.LENGTH_SHORT相关的错误,其中显示: = 1(为01)"">

如果我直接调用Snackbar.make,我看到没有这样的错误,它具有以下签名:

public static Snackbar make(
        @NonNull View view,
        @StringRes int resId,
        @Duration int duration) {
Run Code Online (Sandbox Code Playgroud)

Android Studio的屏幕截图显示没有与参数Snackbar.LENGTH_SHORT相关的错误

看来,当我在自己的方法签名中使用时,Android Studio无法识别满足以下一约束的值

@IntDef({LENGTH_INDEFINITE, LENGTH_SHORT, LENGTH_LONG})
@IntRange(from = 1)
Run Code Online (Sandbox Code Playgroud)

应该被认为是有效,而不是期待的是值满足两者的上述约束同时(这是不可能的,因为LENGTH_INDEFINITE,LENGTH_SHORTLENGTH_LONG具有值-2,-10分别地).

问题

  • Snackbar.Duration正确地应用了注释吗?
  • 如果是这样:
    • 标记错误是Android Studio错误吗?
    • 这种奇怪的行为也许是为什么注释被标记为隐藏在源代码中?