IntelliJ показывает декомпилированный файл .class вместо исходного кода

У меня проблемы с IntelliJ - он показывает мне "декомпилированную" версию класса, а не его исходный код, если я нажимаю Ctrl + клик по классу.

Вот что я вижу:

Decompiled class message

Я пытаюсь открыть обычные исходные файлы JDK.

Наиболее актуальная проблема, которую я обнаружил, объясняется здесь: исходники Java заменены декомпилированными файлами в Intellij

Самый подробный ответ, который я нашел до сих пор, там также.

Все же это не работает для меня:

  1. Плагин просмотра байт-кода выключен.

  2. Плагин декомпилятора Java байт-кода выключен.

  3. Платформа, Проект и Модуль имеют одинаковую настройку версии JDK.

  4. У меня есть два JDK, доступных в IntelliJ: jdk1.8.0_161 и jbsdk8u112b287.2_windows_x86 (в комплекте с IntelliJ, но поставляется без src.zip). Пробовал с обоими (пришлось указать src.zip jdk1.8.0_161 для jbsdk8u112b287.2_windows_x86) - не повезло

  5. src.zip не поврежден - я могу открыть его через WinRAR

  6. При добавлении jdk1.8.0_161 в IntelliJ автоматически обнаруживается src.zip. При ручном добавлении src.zip на вкладку jbsdk8u112b287.2_windows_x86 Sourcepath - он запустил "Сканирование на наличие корней", но предупредил, что "не может определить, какие файлы содержат выбранные элементы", и предложил мне "присоединить их как" источники "". поэтому я согласился.

  7. Пробный файл> Недействительные кэши/перезагрузка... - тот же результат.

  8. Та же проблема в 2017.3 и свежих версиях IntelliJ 2018.1.

  9. Указание пути для документации заставляет IntelliJ искать документацию по указанному пути. Так что это работает как следует для обоих JDK. Но не для источников.

  10. Все остальное работает/компилируется правильно.

Мои настройки:

Settings

Ответ 1

1. Получить исходные файлы

Убедитесь, что вы загрузили и установили исходные файлы JDK.

Я использую Arch Linux и установил их с помощью pacman -S openjdk8-Src который поместил src.zip в /usr/lib/jvm/java-8-openjdk/. Мы будем использовать этот zip файл на следующем шаге.

Чтобы получить список исходных пакетов различных версий JDK, выполните pacman -Ss "openjdk.*-Src".

Посмотрите этот вопрос о том, как получить исходные файлы для вашей конкретной платформы.

2. Укажите IntelliJ на исходные файлы

В настройках вашего модуля (откройте их с помощью F4) в "Настройках платформы" → "SDK" → "Исходный путь", добавьте zip файл, содержащий исходный код JDK, в ваш проект JDK (не забудьте выбрать правильный JDK, если IntelliJ перечисляет больше чем один JDK) с помощью кнопки со знаком плюс:

Sourcepath screenshot

3. Перейти в источник

Выберите класс JDK, например, Comparator, используя IntelliJ Search Everywhere или Ctrl + b с курсором на имени класса.

Comparator source

Ответ 2

Если вы находитесь в проекте maven, убедитесь, что в структуре проекта все соответствующие папки находятся в исключенном разделе. enter image description here

Ответ 3

Я столкнулся с той же проблемой, и наконец она исчезла после того, как я скопировал JDK в другую папку и изменил конфигурацию в IntelliJ. Я думаю, может быть, потому, что раньше в пути был пробел, потому что он установлен в папке "Program Files".