В Java проверьте, что все методы в пути к классам, которые вызываются, действительно существуют в этом пути к классам

Учитывая путь к классам (например, набор файлов jar), я хотел бы знать, вызывает ли какой-либо из этих файлов jar вызов метода (игнорируя отражение) для метода, которого нет в пути к классу.

Например, если бы у меня был только foo.jar на моем пути к классу, и у него есть класс, который вызывает com.bar.Something#bar(String), и который не существует в foo.jar, мне бы сказали, что этот метод на самом деле не существует.

Доводчикам: Какая деталь вам не хватает? Вопрос совершенно ясен. В ответе, вероятно, будет упоминаться, что jar-файлы можно читать, файлы классов находятся внутри и могут быть прочитаны, например. Можно найти коды операций ASM или bytebuddy и INVOKEVIRTUAL, или, возможно, проще: просто просканируйте пул констант. Эти ссылки на методы затем можно будет искать в наборе jar-файлов. Это не легкий, но чего хочет OP, совершенно ясно. Проголосовали за повторное открытие.

rzwitserloot 30.03.2021 03:53

Я писал что-то подобное в прошлом, используя ASM (не уверен, что это все еще лучший вариант). Обратите внимание, что существует шаблон для написания кода с обратной совместимостью, в котором вы вызываете метод, который может не существовать, перехватываете исключение и делаете что-то еще, поэтому вы можете получить ложные результаты, если ваш код может это сделать.

tgdavies 30.03.2021 03:58

Я не могу поверить, что этот вопрос был закрыт из-за отсутствия ясности, что плохое оправдание. Кроме того, я недостаточно знаю об ASM, чтобы ответить, должен ли я таким образом решать эту проблему или нет.

Luke 30.03.2021 04:00

@rzwitserloot «Какая деталь вам не хватает? Вопрос совершенно ясен». Мне не хватает актуального вопроса. Мне совершенно непонятно, о чем здесь спрашивают. --- OP запрашивает инструмент, который это делает? Не по теме. --- OP просит нас написать для этого код? Не по теме. --- OP запрашивает библиотеку для чтения файлов .class? Не по теме. --- Что просит OP, это не не по теме? --- (К вашему сведению: я не ближе, но я голосующий против, так как вопрос неясен)

Andreas 30.03.2021 05:25

@Andreas Я думаю, что стоит прочитать фантастический ответ rzwitserloot, поскольку он действительно отлично справляется с ответом на вопрос о том, что доступно в экосистеме Java. Надеюсь, что в будущем вы и другие будут менее заинтересованы в том, чтобы голосовать против / закрывать ответы на вопросы, поскольку это бесполезно.

Luke 30.03.2021 05:35

@Luke Тот факт, что вы задаете rzwitserloot угадал, не отменяет того факта, что сам вопрос очень неясен и не соответствует стандарту StackOverflow. Мы все проголосовали против и / или закрыли вопрос, чтобы намекнуть / заставить вас улучшать качество вопроса, задача, с которой вы не справились. Смотрите: Как мне задать вопрос хорошо? --- Мы заботимся о качестве этого сайта, то есть Зачем, мы "хочет проголосовать против / закрыть". Это нет, потому что на вопрос сложно ответить.

Andreas 30.03.2021 05:51

Все ваши предложения требуют, чтобы я знал, каким должен быть ответ, но я задаю вопрос, потому что не знаю, каков ответ.

Luke 30.03.2021 05:58
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
8
7
57
0

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