This document is about the configuration data used within the Spoofax plugin. Go to the Spoofax Core documentation for more information on the project and language specification configurations.
There are currently four configurations:
- Application configuration.
- Project configurations.
- Module configurations.
- Facet configurations.
These configurations are persisted between IntelliJ IDEA sessions (in XML-files), and are marshalled to the JPS build plugin when it’s invoked.
Below I’m describing the application configuration, but the other configurations are treated and implemented very similarly.
The configuration state (the raw data) is represented by the
MetaborgApplicationConfigState class. The state class may only contain
simple types: numbers, booleans, strings, collections, maps and enums.
The default constructor of the state is used to initialize the state to its default value.
IntelliJ only persists the configuration state when it has changed from the default state.
The state must implement the
equals() method to allow it to be compared to
The configuration state may be very crude, as it contains only simple types.
IMetaborgApplicationConfig interface describes how the data can be
accessed in a nicer way. This interface is used by both the IntelliJ IDEA and
Asking for the
IMetaborgApplicationConfig interface in the IntelliJ IDEA
plugin will give you the
IdeaMetaborgApplicationConfig class that
PersistentStateComponent<T> interface. The class has a
@State attribute that indicates where the configuration is persisted. By
persisting it to default locations, the configuration can be read from within
the JPS plugin.