Not able to generate files based released language

Hi,

I have created a simple language with a generator. Once I use the language (create instances of its concepts), I am able to rebuild the model and get generated files. But only in the development mode (not released). Once I release the language (create a plugin) the model using the released language could be built but no files get generated. If I try to preview the generated text I get following message: None of generated text units reference context node.

What am I doing wrong? Am I missing something in the build?

Thank you in advance.

Best regards,

Josef

3 comments

Hi, Josef!

This means result of model 2 model transformation doesn't have textgen to complete generation. This is really strange that generation works when the language is developed and fails when language is packed as plugin. I can't get from description what's wrong. Simple suggestion is generator wasn't included in language plugin. You can switch on transient models (main menu -> Build -> Save transient models or 'T' icon in the right bottom corner of the frame), rebuild a model that uses language from plugin and check transient model. This may give a clue when generation works not as excepted. Also you can try to use generation trace tool with transient models.

There is similar problem here https://mps-support.jetbrains.com/hc/en-us/community/posts/360000899420-Issue-with-INSPECTOR-and-Generator. There was no rule in mapping configuration root. 

1

Hi Maria,

I am new to building a plugin. Therefore, maybe the problem is there. However, the generator seems to be automatically loaded with the language:

Should I specify the generator also somewhere else?

My language is very simple with one concept called Document (no properties, children and references). Its editor contains only one CellModel_Constant with the text "dummy". No other aspects used. The generator contains only one MappingConfiguration and one RootTemplate. The MappingConfiguration contains only the following root mapping rule:

 

concept Document --> Dummy

   inheritors false
   condition <always>
   keep input root default

Dummy is the following RootTemplate:

| root template     |
| input Document |
public class Dummy {
  public Dummy() {
    int $o = 1;
  }
}

I have check the generation plan for both (a model that uses the language from plugin and a model that uses the manually build language). It is the same in both cases:

[ 1 ]
jetbrains.mps.lang.core.generator.template.main.*
[ 2 ]
main.*
[ 3 ]
jetbrains.mps.baseLanguage.generator.java.closures.*
jetbrains.mps.baseLanguage.generator.java.strings.*
[ 4 ]
jetbrains.mps.baseLanguage.generator.java.main.*
jetbrains.mps.baseLanguageInternal.generator.template.main.*

In the step 2, it plans to use the generator from my language.

If I try to check transient models, it is different for these cases. In the plugin case it misses a model based on step 2 and the result is unchanged:

In the development case it contains 3 transient models and the result is as expected:

How can I use use generation trace tool? I am not sure what it is.

What am I doing wrong? Am I missing something in the generator, in the build or somewhere else?

Thank you in advance.

Josef

1

The build script is fine.

Then I would suggest baseLanguage runtime is not available in case of language plugin. As you language is generated in base language then a model that uses this language needs baseLanguage runtime. To provide dependency on baseLanguage runtime in models that uses you language open properties of your language -> Dependencies, add baseLanguage and set dependency type Generation Target:

It's still strange CollisionWarningSystem model is generated&compiled correctly in your case. May be containing solution has import on other language that provide dependency on needed runtime.

1

Please sign in to leave a comment.