Как я могу изменить то, что делает метод в Java?
Я имею в виду, я пытаюсь использовать аннотации, чтобы сделать следующий код
@Anno1(Argument = "Option1")
public class TestClass
{
@Anno2
public void test()
{
}
}
в
public class TestClass
{
private static StaticReference z;
public void test()
{
z.invokeToAll();
}
}
Это очень упрощенный пример того, что я пытаюсь сделать. Anno1
будет иметь много возможных комбинаций, но пока это не моя проблема. Моя проблема в том, как добавить код к методу test ()
. Я ищу более общее решение, если возможно. Например. Способ добавления любого кода в метод (не только способ .invokeToAll ()
)
Пока я использую import javax.annotation.processing. *;
и у меня есть следующий код, но я не знаю, как от него продолжить
private void processMethodAnnotations(RoundEnvironment env)
{
for (Element e : env.getElementsAnnotatedWith(Anno2.class))
{
//If it is a valid annotation over a method
if (e.getKind() == ElementKind.METHOD)
{
//What to do here :S
}else
{
processingEnv.getMessager().printMessage(Diagnostic.Kind.WARNING,"Not a method!", e);
}
}
}
Я нашел кое-что о Java Reflection, но я не нашел никакого источника, который помог бы мне в том, что я делаю.
Очевидно, что я расширяю AbstractProcessor
в моем коде
Я нашел это руководство (http://www.zdnetasia.com/writing-and-processing-custom-annotations-part-3-39362483 .htm) Но это касается создания нового класса, а не просто изменения метода. и javax.lang.model.elements
не предоставляют никакого способа редактирования этого элемента (который в моем случае представляет собой метод).
Надеюсь, мой вопрос ясен и соответствует правилам. Если нет, прокомментируйте, и я уточню. Спасибо.