написание детектора findbugs, который знает, имеет ли аргумент метода тип Throwable

Я пишу детектор Findbugs на основе OpcodeStackDetector, который просматривает все вызовы метода Java с такой подписью:

void foo(Object...args)

Он должен сообщать об ошибке, если один из аргументов имеет тип Throwable или любой из его потомков.

Как мне получить список ссылок на вызов метода, которые представляют аргументы, а затем определить, является ли класс каждого аргумента подтипом java.lang.Throwable?


person beer geek    schedule 08.01.2015    source источник
comment
Существует подключаемый модуль Eclipse findbugs.sourceforge.net/downloads.html, и его исходный код доступен - так что посмотри?   -  person Margus    schedule 08.01.2015
comment
Я загрузил исходный код findbugs и ищу ответ, но не могу найти его.   -  person beer geek    schedule 08.01.2015


Ответы (1)


Я вижу, что OpcodeStackDetector накапливает стек, поэтому, когда вы видите операцию вызова метода в обнаружении (один из INVOKEVIRTUAL, INVOKESPECIAL и т. Д.), Верхняя часть стека должна содержать ссылку на массив объектов.

Findbugs включает библиотеки ASM и BCEL для понимания байтового кода, поэтому должна быть возможность перейти от ссылки к фактическому массиву в памяти и каким-то образом получить список ссылок на объекты из массива. Оттуда вы можете использовать ASM / BCEL для проверки типа каждой ссылки.

Меня тоже озадачивает, как вы это делаете.

person mjeffw    schedule 15.01.2015