Как реализовать информацию о типе для инструмента статического анализа кода для пользовательского языка JVM?

Мне нужно реализовать инструмент статического анализа кода для пользовательского языка JVM, и я хотел бы иметь большинство методов, доступных в Java Class<?> класс как например: getDeclaredMethods(): Method[], Я придумал два подхода:

1) Скомпилируйте все классы так, чтобы у меня были затем файлы.class, для которых я могу вызвать javap, а затем результаты сохранения javap в исходные файлы java и использовать информацию о типе Java.

2) Используйте antlr4 и создайте те же структуры классов, которые доступны в Java. Может быть, есть какой-то другой подход?

Я чувствую, что вариант 2 - это изобретать велосипед или, может быть, это правильный подход? Я думаю, что вариант № 1 был бы лучше, но я не уверен, что это вообще выполнимо... и тогда это на самом деле не статический анализ кода, потому что мне нужно скомпилировать все файлы моего пользовательского языка.

Не могли бы вы помочь мне или, по крайней мере, указать мне правильное направление?

1 ответ

Существует javassist и [cglib] для работы с байт-кодом. Вместо этого errorprone от Google подключается к процессу компиляции. Сделать статический анализ кода частью вашего компилятора - неплохая идея, например, компилятор java проверяет недоступный код.

Другие вопросы по тегам