A Metaborg project can contain source files written in Metaborg languages. Such
projects are represented by classes derived from the
interface. In the IDEA plugin this is the
IdeaProject class, but in the
JPS plugin this is the
A Metaborg language specification defines a new language. Such projects are
IdeaLanguageSpec (IDEA) and
both of which derive from the
ISpoofaxLanguageSpec interface, which
indirectly derives from
Additionally, there is the
ArtifactProject for language artifacts.
IntelliJ IDEA uses the concept of modules, which are similar to projects in
Eclipse. To get the Metaborg project that corresponds to a module, use the
IIdeaProjectService methods (in IDEA), or the
(or JPS) methods.
An IntelliJ module lives in a project, which corresponds to a workspace in Eclipse. And projects live in the application, which is application-wide.
A module has so-called content roots: folders that hold the content of the module. A simple module just has the module’s root folder as a content root, but a more complex module might have several content roots from all over the place. A single file may belong to multiple modules.