Need help understanding IMainClass interface concept in calculator tutorial

Would like to understand how IMainClass interface concept works , esp its plugin interaction part to add a new item to right-click-menu.

Tried to add this to generator-tutorial , i got a little confused as the interface concept implementation on Document and other Main method generating items only led to run context menu addition on 2 solution models (test1 and test7) but rest of the solution models weren't influenced.

Attaching the demo project with custom changes for reference. (507KB)
Comment actions Permalink
I'm not sure I understand you problem - whichever model imports demoLang7 (the only language using IMainClass), allows me to run nodes of the XMLDocument concept from the context menu. I have to rebuild/compile the model first, though, to get the Java class generated.

I also noticed that you declared Button and Label in demoLang6 as IMainClass, although they generate into XML and are not root concepts. Why is that?

Comment actions Permalink
Thanks for your response Vaclav Pech.

I should've been more clear explaining the problem, am kind of new to MPS and learning it by the days. :)

I actually expected all concepts implementing IMainClass and generating a java Main-Class to add a context menu item on right-click of its Node.But it seems ,if we have an abandon root rule , it wouldn't work.Is it by design?

The attached project had cases to test.

Let me show my intentions:

First i made the root Concept in sampleXML implement IMainClass.
Hence i saw  in solution module's model test1's two Document nodes ; on right click Run Node context menu item.test1 used sampleXML language and it's generator engaged demoLang1.

Second i expected test2 model in solution model to act the same way test1 was acting.After all it too used sampleXML language and engaged demoLang2 for generation.In demoLang2 ,we do generate a main class but the main gen. config only has a condition root and abandon roots rules.But if you see right-click on node's under test2 do not add the run Node menu item.

Hence was wondering if its b/c of abandon-root usage or something else that stops IMainClass from working?

model test3's generator engaged langugage demoLang3 , also has an abandon root rule, and right-click does not seem to work on that also.

Same is with test4, test5 and test6.

However test7 does not abandon the document node , and IMainClass seems to work on that.

Also adding IMainClass to those two non-root concepts was another test,i wanted to see if there any errors of some sort which would lead me to trace inner workings.Sorry about attaching that too.
Comment actions Permalink
Yes, the mapping between the original nodes and the generated class is not preserved in this case.
Since the original root nodes are inserted through a reduction rule inside a LOOP macro, the generator does not see the intent to have the generated class invocable by right-clicking on the original nodes.

Please sign in to leave a comment.