Какой лучший подход к инкрементной компиляции при построении DSL с использованием Eclipse?

Как предлагается в документации Eclipse, у меня есть org.eclipse.core.resources.IncrementalProjectBuilder , который компилирует каждый исходный файл, и отдельно у меня также есть org.eclipse.ui.editors.text.TextEditor , который может редактировать каждый исходный файл. Каждый исходный файл компилируется в свой собственный модуль компиляции, но он может ссылаться на типы из других (уже скомпилированных) исходных файлов.

Две задачи, для которых это важно:

  1. Компиляция (чтобы убедиться, что типы, которые мы используем, действительно существуют)
  2. Автозаполнение (чтобы посмотреть вверх по типу, чтобы мы могли видеть, какие свойства / методы присутствуют в нем)

Для этого я хочу сохранить представление всех скомпилированных типов в памяти (далее именуемой «хранилище типов»).

У меня двоякий вопрос:

  1. Первую задачу выше выполняет строитель, а второй - редактор. Чтобы у них обоих был доступ к этому хранилищу типов, следует ли мне создать статическое хранилище где-нибудь, к которому они оба могут иметь доступ, или Eclipse предоставляет более удобный способ решения этой проблемы? Обратите внимание, что именно eclipse, а не я, создает экземпляры конструкторов и редакторов, когда они необходимы.

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

Любые идеи будут действительно признательны. Это мой первый DSL.

6
задан steady rain 4 May 2015 в 18:10
поделиться