AspectJ: как заменить существующую аннотацию - PullRequest
1 голос
/ 05 ноября 2010

Используя AspectJ, как заменить существующую аннотацию?

У меня есть следующий код

declare @method : @Test * *(..) : @Test(timeout=10);

, который генерирует следующую ошибку при каждом методе теста:

... already has an annotation of type org.junit.Test, cannot add a second
instance [Xlint:elementAlreadyAnnotated]

Конечно, ошибка имеет смысл, но каков синтаксис "удалить аннотацию @Test из всех методов, в которых она есть. Затем замените ее на @Test(timeout=10)"

Ответы [ 2 ]

4 голосов
/ 18 ноября 2010

Я руководитель проекта AspectJ.В разделе https://bugs.eclipse.org/bugs/show_bug.cgi?id=313026 мы рассмотрим, как использовать объявление аннотации для:

  • дополнения существующих аннотаций (добавление значений к уже существующим)
  • их замена
  • определение приоритета (должно ли ваше объявление заменить то, что есть?)

Мы также рассматриваем форму, которая удаляет аннотации:

Declare @remove_from_method: int mymethod(): @ToBeRemoved;

Но вы пока не можете этого сделать ...

1 голос
/ 05 ноября 2010

Я сомневаюсь, что вы можете сделать это с AspectJ. По крайней мере, я не смог найти соответствующую информацию в текущей версии AspectJ в действии .

То, что вы можете сделать, - это вставить свою собственную пользовательскую аннотацию рядом с аннотацией теста и написать собственный класс JUnit Runner (связанный с @RunWith аннотацию, которую вы можете снова добавить со своим аспектом), которая дает ваш пользовательский приоритет аннотации над @Test аннотацией.

...