ИИ

Статический анализ OpenIDE

Краткое резюме

Статический анализатор PVS-Studio выявил ошибки в исходном коде платформы IntelliJ, используемой OpenIDE. Исходный код OpenIDE размещён на платформе GitFlic.

В статье мы рассмотрим результаты работы статического анализатора PVS-Studio с исходным кодом платформы IntelliJ, используемой OpenIDE. Компания PVS-Studio разработала одноимённый инструмент для поиска ошибок в исходном коде программ. В своих публикациях мы анализируем open source проекты, чтобы продемонстрировать возможности нашего продукта и познакомить читателей с методологией статического анализа. Иногда мы также рассказываем об интересных аспектах языка программирования, на котором написан проект. Сегодня мы обсудим, какие ошибки были обнаружены при анализе исходного кода платформы IntelliJ, используемой OpenIDE. Важно отметить, что для достижения наилучших результатов необходимо регулярно использовать анализатор, а не запускать его эпизодически на большом объёме непроверенного кода. OpenIDE — это бесплатная интегрированная среда разработки с открытым исходным кодом, основанная на IntelliJ IDEA Community Edition. Её разработкой занимается группа компаний: * Axiom JDK — вендоры российской среды разработки и исполнения Java; * «Группа Астра» — разработчики системного и прикладного программного обеспечения, известные по Astra Linux; * «Хоулмонт» — разработчики корпоративного ПО для среднего и крупного бизнеса, известные по плагину Amplicode для работы со Spring-проектами. Исходный код OpenIDE размещён на платформе GitFlic. Для анализа мы клонировали и собрали ветку 252. Последний коммит на момент проверки — ea0f8. Далее мы обсудим обнаруженные ошибки. Начнём с инициализации статических полей. Анализатор указывает на следующий код в файле UsageType.java: ``` public final class UsageType { .... public static final UsageType DELEGATE_TO_ANOTHER_INSTANCE_PARAMETERS_CHANGED = new UsageType( UsageViewBundle.messagePointer( "usage.type.delegate.to.another.instance.method.parameters.changed" ) ); private static final Logger LOG = Logger.getInstance(UsageType.class); public UsageType(@NotNull Supplier<....> nameComputable) { myNameComputable = nameComputable; if (ApplicationManager.getApplication().isUnitTestMode()) { String usageTypeString = myNameComputable.get(); if (usageTypeString.indexOf('{') != -1) { LOG.error(....); } } } .... } ``` Попробуйте найти ошибку самостоятельно или перейдите к объяснению.

Фильтры и сортировка