Побочный эффект бесплатные методы в Библиотеке Стандарта Java

Я работаю над анализом для программ Java, который запрашивает информацию побочного эффекта о вызовах метода. Для стандартных классов библиотеки я хотел бы составить список методов с параметрами только для чтения. Таким образом, методы, которые не изменяют их аргументы или что-либо достижимое от их аргументов. Я могу вывести много из javadocs, но это займет время.

Кто-либо мог предложить более легкую ссылку или метод для определения, изменяют ли вызовы стандартного метода свои аргументы? Действительно ли прочтение является каждой javadoc записью действительно лучший способ?

Спасибо!

Править: Премия определила бы методы, которые не имеют никаких побочных эффектов на объекте также. Например, stack.pop () был бы, тогда как stack.size () не будет.

7
задан Owen 24 June 2010 в 20:14
поделиться

3 ответа

Что ж, все методы, принимающие только примитивные типы / строки / объекты / универсальные типы в качестве параметров, должны удовлетворить вас без дальнейшего рассмотрения. А для java.lang и java.util это должно охватывать большинство методов.

Но вам действительно лучше ограничить количество пакетов, которые вы хотите обрабатывать, потому что стандартный jdk предлагает огромную библиотеку классов для всех задач и целей.

править
Это несколько нечетко для универсальных типов, объявленных как E extends ModifiableObject , так что убедитесь сами.

1
ответ дан 7 December 2019 в 16:38
поделиться

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

Возможно, вам пригодится статья Вывод квалификатора типа для Java . (Полный текст, похоже, не доступен в Интернете)

1
ответ дан 7 December 2019 в 16:38
поделиться

Наш DMS Software Reengineering Toolkit - это настраиваемый инструмент общего назначения для анализа и преобразования программ. Он имеет интерфейс Java , который анализирует Java и создает таблицы символов, отношения наследования классов, информацию об управлении и потоках данных.

Из этой информации может быть вычислена локальная информация о том, изменяет ли метод M напрямую аргумент или что-либо, достижимое из аргумента. Можно построить граф вызовов и все, что угодно, изменить с помощью метода X, который прямо или косвенно вызывается M. Это, по сути, ваш ответ. Вам придется применить это к источнику интересующего кода, в вашем случае, к стандартной библиотеке Java.

Настроить DMS для этого нетривиально даже со всей предоставленной информацией. OTOH, этот ответ будет довольно точным (по модулю консервативных предположений и размышлений), повторяемым и простым в применении к любому методу, который вы выберете. Выполнение этого вручную через Javadocs может занять очень много времени и привести к ошибкам.

1
ответ дан 7 December 2019 в 16:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: