Исходный файл Java отображается в IntelliJ как пустой декомпилированный файл класса

У меня есть проект с несколькими файлами .java, источник которых я могу прекрасно просмотреть в IntelliJ, за исключением одного.

Этот файл является файлом .java, как и другие, но IntelliJ помечает его как «Декомпилированный файл .class», а исходный код полностью пуст. Если я открою файл в текстовом редакторе, я могу прекрасно увидеть исходный код. Сборки Ant также отлично работают с этим файлом.

Это не отсутствующие источники JDK, где вы могли бы ожидать увидеть декомпилированный код. И это тоже не скомпилированный файл .class, который я открываю.

Удаление файла из проекта и обновление из системы управления версиями для его восстановления, похоже, не помогает.

Вот как это выглядит, когда я пытаюсь открыть файл в IntelliJ:

Исходный файл Java отображается в IntelliJ как пустой декомпилированный файл класса

Что может вызвать такое поведение в IntelliJ и что я могу сделать, чтобы это исправить?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
5
0
800
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если один и тот же класс (сравнивающее полное имя) существует в вашем проекте и одновременно исходит из сторонней зависимости, иногда IntelliJ может запутаться.

Это также происходит с зависимостями, если у вас открыт декомпилированный класс в окне редактора и вы нажмете действие «Загрузить исходники». Это приводит к тому, что другое окно редактора открывает только что загруженный исходный код для того же класса, и навигация IntelliJ сходит с ума (прыжок Ctrl + Left click и другие действия).

Единственное известное мне решение - перезапустить IntelliJ и надеяться, что он сработает. Вы также можете попробовать File > Invalidate Caches and Restart, который заставит IntelliJ переиндексировать мир.

Это довольно уникальное имя класса, поэтому проблем с коллизиями быть не должно. И никакие другие декомпилированные классы не открывались в других окнах. Ни перезагрузка, ни File > Invalidate Caches and Restart не помогли.

Brandon Essler 19.11.2018 22:38
Ответ принят как подходящий

Я решил свою проблему.

Каким-то образом я случайно добавил имя этого отдельного файла в список Java Class File Types, и поэтому этот файл был связан как декомпилированный файл .class таким же образом, как и фактический файл .class.

Исправление собирается в Settings (Ctrl+Alt+S)EditorFile Types, прокрутите вниз до класса Java в списке Recognized File Types, выберите имя файла в списке Registered Patterns и нажмите кнопку Remove.

Settings, Editor, File Types Menu

Я не понял, как он был автоматически добавлен в этот список. Можно предположить, что я, возможно, принял всплывающее окно с предложением или выбрал неправильное действие Intention Action, и поэтому имя открытого или активного файла было добавлено в список типов .class.

Другие вопросы по теме