Как я могу изменить метод, который используется в 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, но я не нашел источника, который мог бы помочь мне в том, что я делаю.
Очевидно, что я extends AbstractProcessor
в моем коде
Я нашел этот учебник (http://www.zdnetasia.com/writing-and-processing-custom-annotations-part-3-39362483.htm) Но это касается создания нового класса, а не просто изменения метода, и javax.lang.model.elements
не предоставляют никакого способа редактирования этого элемента (который в моем случае представляет собой метод).
Надеюсь, мой вопрос ясен и соответствует правилам. Если нет, прокомментируйте, и я уточню. Спасибо.