Eclipse: проблемы с неявными преобразованиями и аннотациями макросов в Scala

Я использую macroparadise для создания методов и классов случаев в моем проекте (сами макросы определены в отдельном проекте от моих основных файлов, где я их использую).

Все компилируется и работает, как и ожидалось, но Eclipse не может разрешить переменные и методы, сгенерированные моими макросами. Однако, когда я закрываю и снова открываю Eclipse, он отлично все идентифицирует; Я могу навести курсор на классы и методы и получить правильную информацию. Но как только я что-то меняю или даже просто закрываю и снова открываю файл, ссылающийся на методы генерации, Eclipse подчеркивает все сгенерированные переменные и методы и сообщает мне «не найдено: значение {имя}» (где {имя} — это имя переменной ).

Обновление
Я изолировал поведение от следующих случаев:

  1. Я начинаю с аннотированного объекта A в одном файле и объекта B, использующего A.hello, в другом файле.
  2. Я компилирую файл A, который добавляет метод «hello» к объекту A.
  3. Все работает нормально, пока (!) я снова не открываю файл, содержащий объект A.

Вопрос: Что делает Eclipse, когда я открываю файл? Пытается ли он переиндексировать класс на основе записанного файла, а не скомпилированного?
Завершить обновление

Как Eclipse разрешает переменные? Он просматривает файлы классов в моей цели/папке? У меня есть файлы *.class для всего моего сгенерированного кода, поэтому, если Eclipse просматривает их, эти переменные должны действительно существовать.

Кто-нибудь заставил Eclipse правильно разрешить эти переменные? Я попробовал IntelliJ IDEA, но IDEA ничего не может решить с помощью неявных преобразований и макросов (я безуспешно следовал указаниям, которые нашел в Интернете).

Информация:
Eclipse IDE для разработчиков Java

Версия: Oxygen Release (4.7.0)
Идентификатор сборки: 20170620-1800

Подключаемый модуль Scala
scala-ide.org
4.4.1.v-2_11-201605041057-92a3ed3
org.scala-ide.sdt.feature

Плагин компилятора:
macroparadise
org.scalamacros
Paradise_2.11.8
версия 2.1.0


person eemc    schedule 20.07.2017    source источник
comment
не очень удивительно, IDE, как правило, не очень хороши, чтобы помочь с расширенными языковыми функциями, такими как макросы или зависимые типы   -  person cchantep    schedule 21.07.2017


Ответы (1)


После осмотра кажется, что плагин org.scala.macroparadise не поддерживается Intellij или Eclipse. Я решил свою проблему, переключившись на плагин org.scalameta.paradise, который поддерживается плагином Intellij scala.

Используя org.scalameta, все мои сгенерированные переменные могут быть разрешены, а мои макросы могут быть расширены в IDE.

person eemc    schedule 02.08.2017