Контрольная рамка заменяет аннотацию - PullRequest
0 голосов
/ 16 февраля 2020

Я новичок в Checker Framework, и я определил 2 аннотации подтипов, например:

@Target(value={TYPE_USE,TYPE_PARAMETER})
@DefaultQualifierInHierarchy
@SubtypeOf(value={})
public @interface Base{}

и

@Target(value={TYPE_USE,TYPE_PARAMETER})
@SubtypeOf(value=Base.class)
@DefaultFor(value=LOWER_BOUND)
public @interface Sub{}

Когда я использую средство проверки подтипов с этими аннотациями на следующий код выдает ошибку, потому что sink () ожидает строку, помеченную как @Sub, но получает @Base (по умолчанию для String s0), что является ожидаемым поведением.

public static void main(String args[]) {
    String s0 = "a";
    sink(s0);
}

public static void sink(@Sub String s) {}

Теперь я хочу добавить третью аннотацию, названную, например, @ToSub и использовать ее следующим образом:

public static void main(String args[]) {
    String s0 = "a";
    @ToSub String s1 = s0;
    sink(s1);
}

public static void sink(@Sub String s) {}

Эта третья аннотация должна превратить текущий тип s0 (@Base) в его подтип @Sub для нового строка s1, чтобы этот пример кода не выдавал ошибку.

Возможно ли это вообще с помощью Checker Framework? Я не мог найти способ сделать это просто путем определения новой аннотации, я что-то упустил? Может быть, это может быть достигнуто только путем написания совершенно новой проверки?

1 Ответ

1 голос
/ 17 февраля 2020

Вы, похоже, ищете существующую аннотацию Java @SuppressWarnings.

В целом, если вы хотите подавить предупреждение, см. Главу "Подавление предупреждений" руководства Checker Framework.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...