@StringDef lint似乎不起作用

时间:2017-03-20 09:46:07

标签: java android android-studio annotations lint

我正在为firebase事件创建自定义注释。我的灵感来自official android docs和其他@StringDef注释。它看起来像这样:

@Retention(SOURCE)
@StringDef({
        EVENT_1, EVENT_2
})
@Size(max = 32) // firebase limit
public @interface UserActivityEvents {

    String EVENT_1 = "ev_1";
    String EVENT_2 = "really_long_event_name_that_exceeds_32_chars_limit";
    ...

}

封装日志记录的类定义如下:

public class UserActivityEvent {

    private @UserActivityEvents String eventName;

    private UserActivityEvent() {

    }

    public UserActivityEvent(@UserActivityEvents String eventName) {
        this.eventName = eventName;
    }

    ...

}

问题在于,无论我在构造函数中指定的是什么,都不会触发AS lint,即使我做了类似的事情:

new UserActivityEvent("asd");

我对@UserActivityEvents的期望是:

  1. UserActivityEvent构造函数中的参数只能是@StringDef
  2. 中定义的字符串之一
  3. 事件长度不超过32个字符限制
  4. 如果违反了其中一条规则,代码将加下划线(经典AS错误突出显示),并将鼠标悬停在代码上时显示错误消息。
  5. 修改:我发现如果我在EVENT_3中定义了一个新事件UserActivityEvents,但未将其包含在@UserActivityEvents中,我会尝试将其引用为new UserActivityEvent(UserActivityEvents.EVENT_3) ,皮棉被正确触发并说:“必须是以下之一:EVENT_1,EVENT_2或长度必须至多为32”。如果使用new UserActivityEvent("asd")则无效

0 个答案:

没有答案