IntelliJ не замечает изменений в интерфейсе? - PullRequest
0 голосов
/ 04 мая 2010

[Я решил дать IntelliJ еще один шанс (вместо Eclipse), так как его поддержка Groovy должна быть лучшей. Но вернемся к Java ...]

У меня есть интерфейс, который определяет константу

public static final int CHANNEL_IN = 1;

и около 20 классов в моем модуле, которые реализуют этот интерфейс. Я решил, что эта константа была плохой идеей, поэтому я сделал то, что я делаю в Eclipse: я удалил всю строку. Это должно заставить дерево Проекта светиться как рождественская елка и все классы, которые реализуют этот интерфейс и используют эту константу для разрыва. Вместо этого этого не происходит. Если я на самом деле не дважды щелкаю по соответствующим классам - которые я нахожу, используя grep - модуль даже собирается правильно (используя Build -> Make Module). Если дважды щелкнуть соответствующий класс, ошибка отобразится как в дереве проекта, так и в редакторе.

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

1 Ответ

2 голосов
/ 04 мая 2010

Здесь вы видите взаимодействие между стандартной проблемой Java и стандартным поведением IDEA. Подобные выражения констант встраиваются в компиляцию классов (согласно Спецификации языка Java), так что фактически класс, ссылающийся на эту константу, не изменился только потому, что вы удалили строку (очевидно), и нет записанной зависимости между константой и класс больше, так как он был встроен. Это приводит к тому, что компиляция не завершается неудачей (класс не будет работать и во время выполнения, если это было единственным изменением - он будет неудачным только при выполнении чистой сборки).

Одним из способов решения этой проблемы в IDEA является создание проекта Build-> Rebuild, когда у вас есть такое изменение. Другой в Настройках-> Компилятор есть Honor Dependencies on "Compile" command. Это может отрицательно повлиять на производительность в больших проектах (следовательно, по умолчанию оно отключено), но должно решить эту проблему.

Другая часть этой проблемы заключается в том, что IDEA не пересчитывает автоматически все проверки при подобных изменениях. Он пересчитывает, когда вы открываете файл. Я не знаю настройки, которая заставляет IDEA делать это. При перестройке все найденные проблемы будут выделены (вплоть до того, где отказался компилятор), но выделение не исчезнет, ​​пока вы не откроете класс или не перекомпилируете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...