Я работаю над анализом для программ Java, который запрашивает информацию побочного эффекта о вызовах метода. Для стандартных классов библиотеки я хотел бы составить список методов с параметрами только для чтения. Таким образом, методы, которые не изменяют их аргументы или что-либо достижимое от их аргументов. Я могу вывести много из javadocs, но это займет время.
Кто-либо мог предложить более легкую ссылку или метод для определения, изменяют ли вызовы стандартного метода свои аргументы? Действительно ли прочтение является каждой javadoc записью действительно лучший способ?
Спасибо!
Править: Премия определила бы методы, которые не имеют никаких побочных эффектов на объекте также. Например, stack.pop () был бы, тогда как stack.size () не будет.
Что ж, все методы, принимающие только примитивные типы / строки / объекты / универсальные типы в качестве параметров, должны удовлетворить вас без дальнейшего рассмотрения. А для java.lang и java.util это должно охватывать большинство методов.
Но вам действительно лучше ограничить количество пакетов, которые вы хотите обрабатывать, потому что стандартный jdk предлагает огромную библиотеку классов для всех задач и целей.
править
Это несколько нечетко для универсальных типов, объявленных как E extends ModifiableObject
, так что убедитесь сами.
Вы можете попробовать запустить механизм вывода типов для источника код JDK.
Возможно, вам пригодится статья Вывод квалификатора типа для Java . (Полный текст, похоже, не доступен в Интернете)
Наш DMS Software Reengineering Toolkit - это настраиваемый инструмент общего назначения для анализа и преобразования программ. Он имеет интерфейс Java , который анализирует Java и создает таблицы символов, отношения наследования классов, информацию об управлении и потоках данных.
Из этой информации может быть вычислена локальная информация о том, изменяет ли метод M напрямую аргумент или что-либо, достижимое из аргумента. Можно построить граф вызовов и все, что угодно, изменить с помощью метода X, который прямо или косвенно вызывается M. Это, по сути, ваш ответ. Вам придется применить это к источнику интересующего кода, в вашем случае, к стандартной библиотеке Java.
Настроить DMS для этого нетривиально даже со всей предоставленной информацией. OTOH, этот ответ будет довольно точным (по модулю консервативных предположений и размышлений), повторяемым и простым в применении к любому методу, который вы выберете. Выполнение этого вручную через Javadocs может занять очень много времени и привести к ошибкам.