Я бы предложил посмотреть на localVariableNodes рассматриваемого MethodNode. Если первая переменная в списке, которую вы получаете от вызова «MethodNodeName» .localVariables, является экземпляром класса, к которому принадлежит MethodNode, тогда MethodNode не является статическим и наоборот.
Чтобы получить параметры метода используют этот
String raw = Arrays.toString(Type.getArgumentTypes("MethodNodeName".desc));
int numParams = (Arrays.asList(raw.split(",[ ]*"))).size();
это вернет количество Params в методе. Поскольку первыми переменными, помещенными в список localVariable, являются параметры, это простой вопрос для извлечения первых переменных [1, numParams] для получения параметров.
Для примера, приведенного
public void methodName(int arg0, int arg1){ ....}
первых три переменных в локальном переменном списке будет начиная с индексом 0 («объект типа, который принадлежит методу», «объект типа Int», «объект типа ИНТ», ....)
, где в качестве
public static void methodName(int arg0, int arg1){ ....}
даст ("объект типа ИНТ", "объект типа ИНТ", ...)
Обратите внимание, что это делает предположение, что рассматриваемый метод не принимает в качестве своего первого параметра объект класса, к которому принадлежит метод.
веселит
EDIT:
В качестве альтернативного решения вы можете проверить, чтобы увидеть, если localVariableNodes.get (0) .equals ("это") верно; Если это правда, метод не статичен и наоборот. Если метод не имеет локальных переменных, то метод является статическим