Учитывая путь к классам (например, набор файлов jar), я хотел бы знать, вызывает ли какой-либо из этих файлов jar вызов метода (игнорируя отражение) для метода, которого нет в пути к классу.
Например, если бы у меня был только foo.jar
на моем пути к классу, и у него есть класс, который вызывает com.bar.Something#bar(String)
, и который не существует в foo.jar
, мне бы сказали, что этот метод на самом деле не существует.
Я писал что-то подобное в прошлом, используя ASM (не уверен, что это все еще лучший вариант). Обратите внимание, что существует шаблон для написания кода с обратной совместимостью, в котором вы вызываете метод, который может не существовать, перехватываете исключение и делаете что-то еще, поэтому вы можете получить ложные результаты, если ваш код может это сделать.
Я не могу поверить, что этот вопрос был закрыт из-за отсутствия ясности, что плохое оправдание. Кроме того, я недостаточно знаю об ASM, чтобы ответить, должен ли я таким образом решать эту проблему или нет.
@rzwitserloot «Какая деталь вам не хватает? Вопрос совершенно ясен». Мне не хватает актуального вопроса. Мне совершенно непонятно, о чем здесь спрашивают. --- OP запрашивает инструмент, который это делает? Не по теме. --- OP просит нас написать для этого код? Не по теме. --- OP запрашивает библиотеку для чтения файлов .class? Не по теме. --- Что просит OP, это не не по теме? --- (К вашему сведению: я не ближе, но я голосующий против, так как вопрос неясен)
@Andreas Я думаю, что стоит прочитать фантастический ответ rzwitserloot, поскольку он действительно отлично справляется с ответом на вопрос о том, что доступно в экосистеме Java. Надеюсь, что в будущем вы и другие будут менее заинтересованы в том, чтобы голосовать против / закрывать ответы на вопросы, поскольку это бесполезно.
@Luke Тот факт, что вы задаете rzwitserloot угадал, не отменяет того факта, что сам вопрос очень неясен и не соответствует стандарту StackOverflow. Мы все проголосовали против и / или закрыли вопрос, чтобы намекнуть / заставить вас улучшать качество вопроса, задача, с которой вы не справились. Смотрите: Как мне задать вопрос хорошо? --- Мы заботимся о качестве этого сайта, то есть Зачем, мы "хочет проголосовать против / закрыть". Это нет, потому что на вопрос сложно ответить.
Все ваши предложения требуют, чтобы я знал, каким должен быть ответ, но я задаю вопрос, потому что не знаю, каков ответ.
Доводчикам: Какая деталь вам не хватает? Вопрос совершенно ясен. В ответе, вероятно, будет упоминаться, что jar-файлы можно читать, файлы классов находятся внутри и могут быть прочитаны, например. Можно найти коды операций ASM или bytebuddy и INVOKEVIRTUAL, или, возможно, проще: просто просканируйте пул констант. Эти ссылки на методы затем можно будет искать в наборе jar-файлов. Это не легкий, но чего хочет OP, совершенно ясно. Проголосовали за повторное открытие.