Когда вы запускаете make или пересобираете модели в MPS, MPS запускает так называемый MakeSession
, в этом сеансе MPS выполняет несколько шагов.Одним шагом в сеансе make является, например, «create», который запускает преобразование модели в модель, а вторым является «textgen», который затем записывает полученную модель шага создания на диск, выполняя определение textgen языков,
Эти отдельные шаги называются «фасеткой».Вы можете внести свой вклад в общий процесс создания.Для этого вам нужно создать плагин-аспект на вашем языке, а затем создать там фасет.В аспекте вы можете объявить его зависимости и приоритеты.В вашем случае вы хотите запустить до textgen, но после генерации, чтобы вы могли получить доступ к результату генерации.
Фасеты могут декларировать свои входные данные декларативным способом.В вашем случае вам нужен GResource
, который представляет выходной сигнал фасета генератора.Затем вы можете получить к нему доступную модель и запустить код POI.
Минимальный пример будет выглядеть так:
facet RunPoi extends <none> {
Required: Generate, TextGen
<no optional facets>
Targets:
target genWord overrides <none> weight default {
resources policy: transform GResource -> <no output>
Dependencies:
after generate
before textGen
before textGenToMemory
<no properties>
<no queries>
<no config>
(progressMonitor, input)->void {
foreach resource in input {
SModel mdl = resource.model;
// run poi code with mdl
}
}
}
}