EclipseCon Europe 2016 – I’m coming!

130x130 I'm Speaking logo

I’m sitting now in the train on my way to Ludwigsburg. For sure I cannot miss this great event, where so many smart people and friends come together. Although ECE is always at the same time of the year and I knew for long that I want to go there again, it comes not at the best time for me – or better: for my family. The reason is a really positive one: Almost 3 weeks ago on October 4th I became for the second time father of a lovely daughter, Sophia.


I am missing her already deeply, and my wife would need some supporting hands at home right now. However she understands that EclipseCon is important for me and supports me. The past weeks I did not get much sleep, but the reason was mostly not Sophia, but mainly preparing my talks – in the late evening and night it was most suitable. I will definitely enjoy EclipseCon, but this year I will also be happy when I can leave towards home again and will take 3 days off afterwards for regeneration and caring for the family.

This year’s EclipseCon will be fully packed for me. Today, on Sunday, it will start with a small pre-conference event at the Rossknecht, where the Eclipse Scout community comes together. Tomorrow at the Unconference day I will attend the Eclipse Scout User Day, which I attended the past two years already. At the moment I do not work with Scout, but I really enjoyed working with this framework in the past and would like to do another project with it again. The recent year Scout has much evolved, and I am keen to learn all the news.

On tuesday the Xtext developers plan to schedule a BoF Session. A beta of Xtext 2.11 was released this week, and we have to work much now to make the 2.11 release round. I plan to invest quite some time on this, and we have to talk about the concrete tasks and collaboration. Since we are now a team spanning several companies, it is important to have the chance to get the whole team together at EclipseCon.

On wednesday it is time for action. I was recently contacted that the proposal for the session “Recipes to build Code Generators for Non-Xtext Models with Xtend” got picked from the waiting list. I will perform the talk with my colleague and friend Holger Schill.

screenshot 68.png

We give this talk because Xtend is a very nice language when it comes to developing template based code generators, but is mostly only used in the context of Xtext. Xtext projects seamlessly integrate a generator infrastructure with Xtend, but it is not that common to use Xtend based generators with models that are not Xtext DSL files. We will show how simple it can be to integrate Xtend for other use cases, e.g. with JSON as input.

After that talk we will participate at the Modeling Symposium (17:45 Theater Stage). There we will shortly (7 minutes slot only) present a generator fragment that creates an extension package for VisualStudio Code to embed support for a DSL with an embedded language server. The Language Server Protocol support is the main feature for Xtext 2.11. We plan to contribute the created generator fragment to the Xtext project.

On thursday it is time for my talk “From stairway to heaven onto the highway to hell with Xtext” (11:00 Theater Stage). In this talk I will explain why I love Xtext and why it is used successfully in so many projects first, but then discuss where users have or run into trouble when using the framework. We see in many projects that first steps are easily done and don’t require much experience, but as requirements grow the complexity of DSL projects also grow and extensive experience with details of Xtext and the technologies behind is crucial. I hopefully compiled an informative set of issues.

screenshot 69.png


Xbase Customization: Redefining operator keywords

If you use Xbase in your Xtext based DSL, you are usually satisfied with the set of operators the expression language defines. They are closely related to what you are used to in Java or similar languages.

However, in a customer’s workshop the customer wished to have custom keywords for some operators. For example, the operator && should be alternatively presented as AND, and the || operator as OR.

To demonstrate this customization we’ll start with Xtext’s famous Domainmodel Example. The Domainmodel.xtext grammar is derived from org.eclipse.xtext.xbase.Xbase and the Operation rule uses an XBlockExpression for the Operation’s body:

grammar org.eclipse.xtext.example.domainmodel.Domainmodel with org.eclipse.xtext.xbase.Xbase


	'op' name=ValidID '(' (params+=FullJvmFormalParameter (',' params+=FullJvmFormalParameter)*)? ')' (':' type=JvmTypeReference)?

Unit Test

We’ll extend the language test-driven, thus we first create a unit test that uses the new feature, but will fail first until we have successfully implemented it. Fortunately there is already a suitable test class in project org.eclipse.xtext.example.domainmodel.tests.

We extend the class ParserTest.xtend:

	def void testOverriddenKeyword() {
		val model = '''
			package example {
			  entity MyEntity {
			    property : String
			    op foo(String s) {
			    	return s!= null && s.length > 0 AND s.startsWith("bar")
		val pack = model.elements.head as PackageDeclaration
		val entity = pack.elements.head as Entity
		val op = entity.features.last as Operation
		val method = op.jvmElements.head as JvmOperation
		Assert::assertEquals("boolean", method.returnType.simpleName)

Note the Operation body, the expression uses both presentations of the And-operator.

return s!= null && s.length > 0 AND s.startsWith("bar")

When the ParserTest is executed it will now fail, of course, but only for the AND keyword:

java.lang.AssertionError: Expected no errors, but got :
ERROR (org.eclipse.xtext.diagnostics.Diagnostic.Linking) 
'The method or field AND is undefined' 
on XFeatureCall, offset 119, length 3
ERROR (org.eclipse.xtext.xbase.validation.IssueCodes.unreachable_code) 'Unreachable expression.' on XFeatureCall, offset 119, length 3

	at org.eclipse.xtext.junit4.validation.ValidationTestHelper.assertNoErrors(
	at org.eclipse.xtext.example.domainmodel.tests.ParserTest.testOverriddenKeyword(

Overloading the operator rules

Looking at Xbase.xtext shows that Xbase defines separate data type rules for operators:


Xtext’s Grammar Mixin feature allows a redefinition of those rules. The obvious customization is in Domainmodel.xtext:

	'||' | 'OR';
	'&&' | 'AND';

Regenerating the language’s Xtext implementation makes those keywords available to the syntax. However, the unit test still fails, but now with a different error:

java.lang.AssertionError: Expected no errors, but got :
ERROR (org.eclipse.xtext.diagnostics.Diagnostic.Linking) 
'AND cannot be resolved.' on XBinaryOperation, offset 119, length 3

	at org.eclipse.xtext.junit4.validation.ValidationTestHelper.assertNoErrors(
	at org.eclipse.xtext.example.domainmodel.tests.ParserTest.testOverriddenKeyword(


The missing piece is a customization of class OperatorMapping. Thus we create a subclass OperatorMappingCustom with constant QualifiedNames for the additional operator keywords and bind it in DomainmodelRuntimeModule:

public class OperatorMappingCustom extends OperatorMapping {
	public static final QualifiedName AND_2 = create("AND");
	public static final QualifiedName OR_2 = create("OR");
public class DomainmodelRuntimeModule extends AbstractDomainmodelRuntimeModule {
	public Class bindOperatorMapping() {
		return OperatorMappingCustom.class;

A naive approach is here to overload the initializeMapping(), as the Javadoc suggests (“Clients may want to override #initializeMapping() to add other operators.“):

But this fails again: Guice creation errors:

1) Error injecting constructor, java.lang.IllegalArgumentException: value already present: operator_and
  at org.eclipse.xtext.example.domainmodel.OperatorMappingCustom.(Unknown Source)
  at org.eclipse.xtext.example.domainmodel.OperatorMappingCustom.class(Unknown Source)
  while locating org.eclipse.xtext.example.domainmodel.OperatorMappingCustom
  while locating org.eclipse.xtext.xbase.scoping.featurecalls.OperatorMapping
    for field at org.eclipse.xtext.xbase.util.XExpressionHelper.operatorMapping(Unknown Source)
  while locating org.eclipse.xtext.xbase.util.XExpressionHelper
    for field at org.eclipse.xtext.xbase.validation.XbaseValidator.expressionHelper(Unknown Source)
  at org.eclipse.xtext.service.MethodBasedModule.configure(
  while locating org.eclipse.xtext.example.domainmodel.validation.DomainmodelJavaValidator
Caused by: java.lang.IllegalArgumentException: value already present: operator_and
	at org.eclipse.xtext.example.domainmodel.OperatorMappingCustom.initializeMapping(
	at org.eclipse.xtext.xbase.scoping.featurecalls.OperatorMapping.(
	at org.eclipse.xtext.example.domainmodel.OperatorMappingCustom.(
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

Instead, the method getMethodName() must be overridden and delegate the invocations of the new operators to the existing ones. The resulting OperatorMappingCustom is then:

public class OperatorMappingCustom extends OperatorMapping {
	public static final QualifiedName AND_2 = create("AND");
	public static final QualifiedName OR_2 = create("OR");

	public QualifiedName getMethodName(QualifiedName operator) {
		if (AND_2.equals(operator)) {
			return getMethodName(AND);
		if (OR_2.equals(operator)) {
			return getMethodName(OR);
		return super.getMethodName(operator);

Finally, the unit test will execute successful.


Xbase allows customization of operators by overriding the operator’s data type rule from Xbase.xtext. This adds the operator keywords to the language, but fails at runtime. Additionaly the class OperatorMapping must be customized and method getMethodName() overloaded.

Game Development – A whole new area for Eclipse Modeling?

The Eclipse Modeling Project provides the world’s leading set of tools and frameworks that are used for successfully applying model driven software development techniques in various areas. Successful adoption are known in Enterprise Computing, Embedded System Development, Mobile Development etc. But what about Game Development? I have not heard about Game productions that use Eclipse Modeling or Model Driven Software Development in general so far. I cannot know about all projects in the world, but at least it is an indicator that this development technique is at least not wide adopted in the branch of Game Development.

Game Development is highly complex, developed in multidisciplinary teams under high time pressure and quality requirements. And the complexity is even growing, whilst time pressure also. Time-to-market is everything there. If your game comes too late, you are out. If you don’t use the latest technologies, you are lame. How could such projects ever be successful just by coding and hacking? I could imagine that game developers are just too busy with developing their games in a traditional way to think how they could gain speed and quality by applying software engineering techniques like MDSD.

I would not wonder if they associate MDSD with drawing UML diagrams and wasting time clicking and drawing useless stuff. Model Driven Software Development is everything else than useless. It helps raising the level of abstraction, speeding up development and gaining quality. If applied correctly, of course. Of course they think their kind of software development is special and completely different than other disciplines. But let me say, it’s not the case. Every piece of software has generic parts, schematic parts and parts that don’t fit into one of the previous sections. And for the schematic parts, MDSD can always help. Don’t tell me that a multi-million, mission-critical enterprise project is less challenging than game development.

One of the most promising things for game development can be the usage of Domain Specific Languages (DSLs), especially textual ones. With Xtext 2.0 the development of textual DSLs with tight integration of expression languages and code generators has become easier than ever before. If you don’t ever tried Xtext, do it!

On October 4th there will be an interesting workshop at the 10th International Conference on Entertaining Computing (ICEC 2011) in Vancouver, Canada. The “1st Workshop on Game Development and MDSD” will bring experts from both worlds together. The Call for Position Papers is running now, deadline is July 30th. If you are in one of those businesses, submit a propopsal or attend the workshop. I think both “worlds” can really win a lot from working together. This workshop could be a good start.

Spray – a quick way to create Graphiti

Last week was the CodeGeneration 2011 conference in Cambridge/UK, the melting pot for model driven development. It was once again a great conference, even bigger and more inspiring than the recent years. You will find some good summaries of the conference and the Language Workbench Competition workshop in the blogs from Angelo Hulshout, Johan den Haan and Marco Brambini.

At this conference I had an experience report talk together with Bernhard Merkle from Sick (“Graphiti + Xtext: mixing graphical and textual DSLs for sprayers/designers“) on wednesday, where we discussed the integration of Xtext and Graphiti for combining textual and visual DSLs. It is also obvious for us that although Graphiti – more maybe because – has a quite good API the work to actually create Graphiti based editors is repetitive and thus a candidate for code generation and a more abstract description by a DSL. On thursday Marko Boger, former grounder of Gentleware and now professor at the University of Konstanz, showed how they developed exactly such tooling (i.e. textual DSLs with Xtext and code generators with Xpand) to create visual modeling tools. In fact, the newest version of Poseidon for UML was created that way and with the developed tooling visual DSLs can be developed very fast. However, they generate against their own Poseidon runtime and wish to change that to Graphiti in the future. Right after that session, Jos Warmer showed in his talk “Developing an Insurance Product Modeling Workbench” that he already did that for his current customer. Means, he has developed a DSL with Xtext and code generators with Xpand that create Graphiti editors.

There was obviously high interest in this approach, thus we scheduled a Birds-of-a-feather session for thursday evening in the Castle Inn Pub nearby to discuss model-driven development of Graphiti DSLs. About 20 persons crowded the far to small table, and we had a lively discussion.

As a result we decided to join our efforts in an Open Source project. Jos named his DSL “Spray” and I think this is a perfectly fitting name for the project. Further we decided to host that project at Eclipselabs, since parts of it will be potentially contributed to Graphiti or its umbrella project, the Graphical Modeling Project.

The BoF session thus was the birth of project “Spray“. Right after the BoF session was the conference dinner, and I founded the project on my iPhone while waiting for entrance. Maybe this is the first Eclipse related project founded with the iPhone? Jos subtitled it with “a quick way to create Graphiti”, which again perfectly describes what the project will be about. He already uploaded an overview of Spray (extracted from his CG2011 presentation) , and its implementation will be soon contributed as a first version of Spray. We contacted the Graphiti team about our idea and got positive feedback and even one developer who wants to contribute to the project. Also the internal feedback at itemis showed that the project may find some volunteers here.

The overwhealming high interest in contributing to this project is of course good, but now the project must challenge to actually find a concrete vision. Jos’ contribution will be a good start for that, and the experience and requirements of the other interested parties will hopefully be constructive and shape the project. This is a great chance to create something really useful together with real experts on every needed skill. I hope to find enough time myself to contribute and maybe even customers who have a concrete need for it, so that we can provide a working solution in the near future.

Project Spray:

3 days raising the level of abstraction

As already the last two years I had the chance to visit the Code Generation conference in Cambridge. The past years I had the chance to held a session, this time my proposals were not accepted, so I’m just attending here. The good thing is that I could just lay back and relax all these intersting sessions.This year about 110 experts came together, slightly more than last year. In the meanwhile I got in contact with many of those that come back every year and it is always nice to talk to them. But it is always the chance to get in contact with new persons, and I took the chance again.

Day 0

May flight was on Tuesday from Düsseldorf to Stansted in the afternoon, so I arrived in Cambridge in late afternoon local time. From the main station I took a taxi to Murray Edwards college. As it turned out the taxi driver was Kurdish and lived 13 years in Germany and is now for several years in Cambridge. Although he could speak german well we talked in english about Cambridge and the Football World Championship. Arrived at Murray Edwards I registered and went to my room.

At first I had no electricity in the room, but some employee from the College helped fast to solve the problem. For the evening I met with my colleagues Heiko Behrens and Moritz Eysholdt. We went to a pub near by and met J.P. Tolvanen and Risto Pohjonen from MetaCase, Brooke Hamilton from Microsoft and John Slaby from Raytheon there. A good meal, nice talk and some beer later we went back to the college, awaiting the conference beginning.

Day 1

Before going to breakfast at 8:00AM I registered for the conference. At this time it was not crowded, so I had the chance to exchange some words with Mark and Andy.

Back to breakfast already some attendees were there and it was time to give a warm welcome to all those that I knew already from past conferences.

After breakfast it was time to join the opening session. Mark opened the conference in his typical way with some British humour. In his slides he used some of the photos I took last year. This year I took also several photos, but last year I had better shots.
The first session I attended was “Migrating a large modelling environment from UML/XML to GMF/Xtext” by Moritz Eysholdt (itemis) and Johannes Rupprecht (VSA GmbH). The VSA has developed a large project for clearing of pharmacies, which started 2000. This was a large grown projects and they used MagicDraw for modelling to a high extend. They experienced severe performance problems modeling with MagicDraw, but they had also a really large scale model. To solve their modeling problems they decided to migrate to Xtext and GMF based model editors. The experience they have now is far better.

The next slot was already a decision point. I thought about joining the hands on session for MetaEdit+, but decided to listen to the case study “Effective use of Xtext in a Financial Organization” by Roberto Salama from Morgan Stanley. Roberto has developed a DSL using Xtext for their financial calculations, and from the DSL models he generates code for Q and evaluates that. At one point he stated that he tried using Xpand and found Xpand was not powerful enough to do a recursive tree traversal and flatten the result, and alternatively used Scala for that. I thought that he had a bad misunderstanding about the power of Xpand and actually what he tried to solve was actually a very trivial thing for Xpand. We introduced each other and teamed up the next day. I could show him that all the Scala code he did was actually a one-liner in Xpand/Xtend, and also the template that he did could be improved.

The other sessions I attended that day were “Designing DSLs – Quick and Dirty versus Quick and Clean” by Jos Warmer (Ordina), “Lessons learned in building a Model-Driven Software Factory” by Johan den Haan (Mendix) and “Eclipse e4: Eclipse is remodeling itsef” by Bernhard Merkle (Sick). All of them were interesting, but most informative to me was Bernhard’s talk. Also Bernhard’s presentation style was refreshing.
The conference continued with BoF sessions in the college bar, where I joined a discussion about the generation of documentation.

Right after all the sessions the conference day ended like last year with a punting boat tour. The weathcer was just perfect, so I suspect Mark to have bribed some weather god. The punting trip was a little bit shorter and less informative than last year, but anyway it was great. It’s just that I have attended it already last year and I found it slightly better.

We went from there to an Indian restaurant and took a meal. I took “Chicken Phall” which was rated “very, very hot”. I really like hot dishes, and for me it was just right. I had some nice talk with the attendees at my table.

The day ended in the “Castle Inn” pub. Inside it was very crowded, so we went outside in the beergarden. I had just short clothes on and freezed after a while, so I got in after a while, where I joined the attendees inside. At 23:30 I went back to the college with the guys from MetaCase.

Day 2

The second conference day started with the keynote “The Imaginary Sickness of the Middle-Class Gentleman” by Dave Thomas. It was a really well held presentation with some interesting metaphors. I could only always think “This guy is so very true”. Pitty for all who missed that.

During the break after I took the chance to team up with Roberto Salama as stated before, which helped him open his eyes for using Xpand. He just loved it.
In the next two slots I decided to join the hands on session “Language Extension with MPS” by Markus Völter (itemis) and Konstantin Solomatov (JetBrains). MPS is one of those things I knew I definitely have to learn more about and this was a good chance. Unfortunately I had severe problems getting MPS running on my Mac. The tool hang often or was just slow. I reconfigured the VM to not use 64 bits, which made it slightly better. I hope this can be improved. Anyway, MPS is really cool and the session confirmed that I have to really use this.

Lunch was this day a BBQ and this was really nice. The weather again was perfect, so we could just sit on the ground.

After lunch the MPS session continued, but Markus and Konstantin had to switch from hands-on to demo-mode, since it was not possible to keep all the attendees in sync. There were about 25 persons in the room and this is definitely too much too handle for such a complex topic, although Bernhard Merkle helped them supporting the attendees.
The next slot was again a decision point. There were just two tracks instead of three as usual, but both of them not really a must-see on first sight. I decided to go for “Code generation and domain-specific modeling for user interfaces of embedded devices” by Sándor Dolgos and István Ráth. The embedded devices they generate the UI for are dialysis machines. I hoped that I never become a customer of them. The talk itself was interesting to some degree though. The alternative, seeing Visual Studio 2010 UML / DSL tooling, would have been worse I guess. Microsoft is just too late. UML is often dump and the wrong choice, and when UML is the right choice for modeling no tool can compete really with MagicDraw.
The last slot was again a decision point, but this time again I wished I could have joined two. I decided for “Why MDA Fails: Analysis of an Unsuccessful Project” from Darius Silingas (No Magic). He analyzed a project he consulted on. They had such a huge UML model and abused UML in several ways. This experience I can share with them. Many people just think they understand UML and that it is a silver bullet, and after years they realize that their models grew to a scale that it is not managable anymore and cannot be effetcively refactored. This is where users like the VSA decide that they migrate to specialized DSL modeling using Xtext or GMF or whatever. The contact to Darius is one of the most valuable ones from this years conference. I’m sure that we stay in contact and come across each other in the future. One intersting information he gave is that MagicDraw is currently migrating to EMF, which allows direct integration with Xtext. This is the way to go. Roughly in one year they will release a MagicDraw version based on EMF.
Next was a series of lighning talks about several topics held by Markus Völter, Darius Silingas, Bernhard Merkle and Christian Ries. The following BoF sesssion were again in the bar and I joined Peter Bell, Jos Warmer et al. until the conference dinner started.

This year they had a nice idea: After the start they announced that every table had a number and at each table the people should count and assign a number from 1 – 10. Then all people with 1 went to table 1 and so on. This was the chance to get in contact with some persons that one might not have talked before.

I sat next to Peter Keller and we had some valuable discussions about Xpand. Peter is actually using it, so it was good for him to talk to a committer about some advanced topics.
The day ended in the college bar. We took the remaining wine bottles from the dinner and emptied them in the bar. Some very intersting discussions came up and the wine caused that we raised our level of abstraction 😉 With Walter and Moritz I was the last leaving at 00:30. Earlier than last year, but better for our health and constitution for the last conference day.

Day 3

The last day just started. What a pity, I enjoy the conference like every year. I wrote this article during the keynote “Building Domain-Specific Languages with the Spoofax Language Workbench” by Eelco Visser. I have to admit I missed most of it, but the program is so full packed that there is no right time to write these lines down.

At noon I’m really thinking about skipping one session to see the german WC match against Serbia. I’m really excited about it, this will be a hard task for the germans.
My flight goes back at 19:50. Enough time to end the conference without any stress. Right after the conference my 3 weeks vacation begins, and I’m happy to see my daugther back. During the conference she managed the first time to turn around, and it will be fun to watch her evolving the next three weeks and take long walks at home.

Meet me at CodeGeneration 2009!

Definetely a highlight for me this year will be CodeGeneration 2009 conference, which will take place from 16th-18th June in Camebridge, UK.

I attended already last year and had the chance to give an openArchitectureWare workshop there. The CodeGeneration conference is tailored to software developers of any kind interested in code generation and modeling techniques. With that focus the chance is high to meet equal minded persons there and learn about their approaches to code generation. Of course, there is a world outside openArchitectureWare and Eclipse Modeling, and I am always interested in different approaches. Also very nice is the location of the conference. I always wanted to see Camebridge, it is a really nice town. Hopefully we will have again a bit luck with the weather as last year.

This year itemis has become silver sponsor of CG2009. This is also a committment to our growing international business and role as mind setter in the area of model driven software development.

Be sure that you don’t miss this great event. I am looking forward to meet you all there! See photos from last year here.