Как предотвратить использование произвольных методов, например String.lastIndexOf () - PullRequest
0 голосов
/ 22 января 2019

У меня есть сценарий, в котором я хочу запустить код, который я не контролирую. Я хочу предотвратить использование в этом коде произвольных стандартных методов JDK (например, я хочу запретить использование метода lastIndexOf () для любых объектов String).

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

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

Пример:

//I control this code
int result = SomeClass.method("foo") //I don't control SomeClass

//A valid implementation of SomeClass.method()
int method(String in) {return 1;}

//An invalid implementation of SomeClass.method()
int method(String in) {return in.lastIndexOf("o");}
//the above should throw an error at run time when called from my code

Ответы [ 2 ]

0 голосов
/ 03 мая 2019

Я помню, как писал собственный детектор findbugs, который искал вызовы определенных методов. В моем случае он также проанализировал свои параметры, но, похоже, ваш случай немного проще.

Кроме того, вы можете использовать библиотеку ASM.

Наиболее наивно, вы можете разобрать класс с помощью javap и получить вывод grep.

0 голосов
/ 02 мая 2019

Я предложил Reflection в качестве решения, но вам нужен подход к решению вашей проблемы, а не техническое решение для нее.

Область вашей проблемы может быть намного больше, чем мы обсуждаем здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...