Как использовать инструмент APT для создания упражнений в материале курса - PullRequest
4 голосов
/ 27 августа 2009

Я нахожусь в процессе создания упражнений по написанию плагина для инструмента системной интеграции. У нас будут реализованы правильные ответы для демонстрации после упражнений, но студенты получат источник, где некоторые методы пусты, и просто оставят комментарий с TODO в них, описывающий, что они должны делать.

Чтобы избежать дублирования, было бы хорошо, если бы версии студентов могли быть сгенерированы из скомпилированных и правильных исходных файлов ответов. Меня поразило, что инструмент обработки аннотаций Java (этот APT, а не debian APT) может быть использован для генерации упражнений, чтобы APT выдавал методы пустыми, если метод ввода содержит для этого аннотацию.

Возможно ли это сделать с помощью APT? Если да, то как бы это сделать?

Есть ли лучшие / более простые способы избежать дублирования, генерировать упражнения и правильные ответы из одного источника, который я пропускаю?

Ответы [ 2 ]

2 голосов
/ 27 августа 2009

APT не кажется мне идеальным способом сделать это, хотя это может быть сделано. В общем, APT должен только генерировать новые артефакты и предоставляет ограниченный объем структурной информации . Получить доступ к дереву AST можно только через хаки для конкретного компилятора (как это делает Project Lombok ).

1 голос
/ 27 августа 2009

Я не уверен, что APT может сделать это, так как вам нужен доступ к исходному коду, чтобы выложить результаты.

Возможно, вам лучше воспользоваться простой программой, которая распознает методы с префиксом аннотации и заменяет содержимое открывающих и закрывающих фигурных скобок заполнителем для студентов.

Альтернативным и, возможно, более простым механизмом будет использование пользовательского комментария для пометки заменяемых областей, а затем просто обработка этого файла для получения результатов. Э.Г.

public class SomeClass {
   public SomeClass() {
      // real code here
   }

   public void someMethod() {
      //EXERCISE:START
      System.out("put some real compilable code here, "+
                 "that students will have to implement themselves");
      //EXERCISE:END
   }
}

Затем вы можете просто сделать небольшой фрагмент кода, чтобы удалить комментарии и содержимое между ними.

...