The problem

You want to package your language as a plugin for distribution. You have sorted out the build script dependencies and created an idea plugin in the project structure section of the build script with your languages as the content. Now MPS reports an error for the contents, showing you a long list of “unsatisfied dependencies”:

Unsatisfied dependencies

Now when you go and try to add these dependencies to the idea plugin’s dependency section, you find that they are not listed in the completion menu. What’s going on and how to fix this?

What does MPS want from me?

The names listed in the error message (“org.iets3.core.base”, “jetbrains.mps.ide.build”, etc.) are modules. The error message is trying to tell you that one of the modules included in the plugin needs another module to run, and this module was not found among the plugin’s dependencies.

The fix

To satisfy the dependencies we need to add the necessary plugins to the dependencies list of our plugin. Here comes a catch: how do you know what plugin to include for what module? As is quite often the case with MPS, there are two ways: guessing and looking around.

Approach 1: Guessing

Let’s type iets3 in the completion menu:

“iets3” typed into the plugin dependencies menu

Here org.iets3.core.os looks promising since we are looking for org.iets3.core.base and it has core in it as well. Voila! It turns out, this actually fixes most of the errors:

Fewer unsatisfied dependencies

We can then try guessing where the remaining dependencies come from.

Approach 2: Looking around

Since we expect org.iets3.core.base module to be part of the IETS3 project, let’s go to our dependencies section and Ctrl/Cmd+Click on the org.iets3.opensource build script. It’s a fairly long script with several plugins and lots of languages and solutions. We can search the build script for org.iets3.core.base using text search (Ctrl/Cmd+F).

It turns out, however, that none of the plugins listed include org.iets3.core.base directly. The reason is that the languages and solutions in the build script are organized into mps groups and plugins reference these “mps groups”. Scrolling up a bit from our org.iets3.core.base module we see that it is included in mps group iets3.core.os.

Now we search the build script again for iets3.core.os and discover that it is part of the org.iets3.core.os plugin. Armed with this knowledge, we now go back to our original build script and add the org.iets3.core.os plugin to the dependencies of our plugin.

Tips

  • If you also get errors about “dependency on a module not visible from the build script”
  • Although the list of the missing dependencies may look quite intimidating, as we have seen with the “Guessing” approach,adding one dependency may reduce it quite dramatically. For this reason, it’s better to start with the highest-level dependencies first as they will potentially have many transitive dependencies.