<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Karsten&#039;s Blog &#187; Eclipse</title>
	<atom:link href="http://kthoms.wordpress.com/category/software-development/eclipse/feed/" rel="self" type="application/rss+xml" />
	<link>http://kthoms.wordpress.com</link>
	<description>Eclipse, Model Driven Software Development and whatever else is interesting to make software development more efficient</description>
	<lastBuildDate>Thu, 24 May 2012 21:04:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='kthoms.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://1.gravatar.com/blavatar/ba3234c5d82e8f39aacb2e90c9a01670?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Karsten&#039;s Blog &#187; Eclipse</title>
		<link>http://kthoms.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://kthoms.wordpress.com/osd.xml" title="Karsten&#039;s Blog" />
	<atom:link rel='hub' href='http://kthoms.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Xtext Content Assist: Filtering keyword proposals</title>
		<link>http://kthoms.wordpress.com/2012/05/22/xtext-content-assist-filtering-keyword-proposals/</link>
		<comments>http://kthoms.wordpress.com/2012/05/22/xtext-content-assist-filtering-keyword-proposals/#comments</comments>
		<pubDate>Tue, 22 May 2012 20:37:36 +0000</pubDate>
		<dc:creator>kthoms</dc:creator>
				<category><![CDATA[Xtext]]></category>
		<category><![CDATA[Content Assist]]></category>

		<guid isPermaLink="false">http://kthoms.wordpress.com/?p=477</guid>
		<description><![CDATA[Sometimes when I introduce template proposals in Xtext editors I want them to be a replacement for a keyword proposal. By default you would get a proposal for the template AND for the keyword. In the following screenshot a template for a &#8220;class&#8221; concept exists, and a proposal for the &#8220;class&#8221; keyword, which would be [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kthoms.wordpress.com&#038;blog=6829080&#038;post=477&#038;subd=kthoms&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Sometimes when I introduce <a href="http://www.eclipse.org/Xtext/documentation/2_1_0/160-templates.php">template proposals</a> in Xtext editors I want them to be a replacement for a keyword proposal. By default you would get a proposal for the template AND for the keyword. In the following screenshot a template for a &#8220;class&#8221; concept exists, and a proposal for the &#8220;class&#8221; keyword, which would be inserted as part of the template at the cursor position.</p>
<p><a href="http://kthoms.files.wordpress.com/2012/05/screenshot-2012-05-22-um-22-32-34.png"><img class="aligncenter  wp-image-478" title="screenshot 2012-05-22 um 22.32.34" src="http://kthoms.files.wordpress.com/2012/05/screenshot-2012-05-22-um-22-32-34.png?w=411&h=249" alt="" width="411" height="249" /></a></p>
<p>The key to the solution is to overwrite the completeKeyword() method from your proposal provider class, e.g. like this:<br />
<pre class="brush: java;">
public class SprayProposalProvider extends AbstractSprayProposalProvider {
    private static final Set&amp;lt;String&amp;gt;      FILTERED_KEYWORDS = Sets.newHashSet(&quot;text&quot;, &quot;line&quot;, &quot;class&quot;, &quot;behavior&quot;, &quot;style&quot;, &quot;custom&quot;);
    @Override
    public void completeKeyword(Keyword keyword, ContentAssistContext contentAssistContext, ICompletionProposalAcceptor acceptor) {
        if (FILTERED_KEYWORDS.contains(keyword.getValue())) {
            // don't propose keyword
            return;
        }
        super.completeKeyword(keyword, contentAssistContext, acceptor);
    }
}
</pre><br />
Christian Dietrich added in a comment how to filter a keyword that may occur more than once in your grammar. If you want to filter specific occurances you need to use the IGrammarAccess of your language:</p>
<p><pre class="brush: java;">
@Inject MyDslGrammarAccess grammarAccess;

@Override
public void completeKeyword(Keyword keyword,ContentAssistContext contentAssistContext,ICompletionProposalAcceptor acceptor) {
  if (!grammarAccess.getGreetingAccess().getHelloKeyword_0().equals(keyword)) {
    super.completeKeyword(keyword, contentAssistContext, acceptor);
  }
}
</pre></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kthoms.wordpress.com/477/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kthoms.wordpress.com/477/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kthoms.wordpress.com/477/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kthoms.wordpress.com/477/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kthoms.wordpress.com/477/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kthoms.wordpress.com/477/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kthoms.wordpress.com/477/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kthoms.wordpress.com/477/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kthoms.wordpress.com/477/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kthoms.wordpress.com/477/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kthoms.wordpress.com/477/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kthoms.wordpress.com/477/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kthoms.wordpress.com/477/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kthoms.wordpress.com/477/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kthoms.wordpress.com&#038;blog=6829080&#038;post=477&#038;subd=kthoms&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kthoms.wordpress.com/2012/05/22/xtext-content-assist-filtering-keyword-proposals/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5b70519e81a384fd48c5a61a93274870?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kthoms</media:title>
		</media:content>

		<media:content url="http://kthoms.files.wordpress.com/2012/05/screenshot-2012-05-22-um-22-32-34.png" medium="image">
			<media:title type="html">screenshot 2012-05-22 um 22.32.34</media:title>
		</media:content>
	</item>
		<item>
		<title>Fornax Workflow Plugin 3.4.0 released</title>
		<link>http://kthoms.wordpress.com/2012/05/22/fornax-workflow-plugin-3-4-0-released/</link>
		<comments>http://kthoms.wordpress.com/2012/05/22/fornax-workflow-plugin-3-4-0-released/#comments</comments>
		<pubDate>Tue, 22 May 2012 20:23:16 +0000</pubDate>
		<dc:creator>kthoms</dc:creator>
				<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[MWE]]></category>
		<category><![CDATA[Xpand]]></category>
		<category><![CDATA[Xtext]]></category>

		<guid isPermaLink="false">http://kthoms.wordpress.com/?p=475</guid>
		<description><![CDATA[Finally I have managed to release a new version of the Fornax Maven Workflow Plugin again. This Maven plugin allows execution of MWE and MWE2 workflows from Maven, which is typically the case if you want to automate the build of Xtext or Xpand based projects with Maven. The new version has some interesting new [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kthoms.wordpress.com&#038;blog=6829080&#038;post=475&#038;subd=kthoms&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Finally I have managed to release a new version of the <a href="http://fornax.itemis.de/confluence/display/fornax/Configuration+%28TOM%29">Fornax Maven Workflow Plugin</a> again. This Maven plugin allows execution of MWE and MWE2 workflows from Maven, which is typically the case if you want to automate the build of Xtext or Xpand based projects with Maven.</p>
<p>The new version has some interesting new features which may be worth upgrading:</p>
<ul>
<li>m2e lifecycle metadata</li>
<li>workflow dependencies can be configured as plugin dependencies</li>
<li>more options to detect changes that trigger the build</li>
<li>force/skip parameter to configure workflow execution overrides per configuration</li>
<li>log level detection when running in forked JVM</li>
</ul>
<p>I have especially to thank Dieter Schulten from escalon, who has been willing to contribute to this release. He has mainly contributed the m2e configuration and some tests for the plugin. </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kthoms.wordpress.com/475/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kthoms.wordpress.com/475/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kthoms.wordpress.com/475/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kthoms.wordpress.com/475/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kthoms.wordpress.com/475/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kthoms.wordpress.com/475/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kthoms.wordpress.com/475/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kthoms.wordpress.com/475/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kthoms.wordpress.com/475/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kthoms.wordpress.com/475/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kthoms.wordpress.com/475/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kthoms.wordpress.com/475/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kthoms.wordpress.com/475/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kthoms.wordpress.com/475/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kthoms.wordpress.com&#038;blog=6829080&#038;post=475&#038;subd=kthoms&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kthoms.wordpress.com/2012/05/22/fornax-workflow-plugin-3-4-0-released/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5b70519e81a384fd48c5a61a93274870?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kthoms</media:title>
		</media:content>
	</item>
		<item>
		<title>xtext-utils unittesting 0.9.4 released</title>
		<link>http://kthoms.wordpress.com/2012/04/26/xtext-utils-unittesting-0-9-4-released/</link>
		<comments>http://kthoms.wordpress.com/2012/04/26/xtext-utils-unittesting-0-9-4-released/#comments</comments>
		<pubDate>Thu, 26 Apr 2012 15:20:47 +0000</pubDate>
		<dc:creator>kthoms</dc:creator>
				<category><![CDATA[Xtext]]></category>
		<category><![CDATA[xtext-utils]]></category>

		<guid isPermaLink="false">http://kthoms.wordpress.com/?p=473</guid>
		<description><![CDATA[I have just released the new version 0.9.4 of the xtext-utils unittesting framework. The release became necessary due to a too restrictive version constraint for Google Guice, which made the framework incompatible with the upcoming Xtext 2.3.0 release. This little framework is a useful addition to Xtext which makes writing DSL tests quite easy. In [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kthoms.wordpress.com&#038;blog=6829080&#038;post=473&#038;subd=kthoms&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I have just released the new version 0.9.4 of the <a href="http://code.google.com/a/eclipselabs.org/p/xtext-utils/wiki/Unit_Testing">xtext-utils unittesting</a> framework. The release became necessary due to a too restrictive version constraint for Google Guice, which made the framework incompatible with the upcoming Xtext 2.3.0 release.</p>
<p>This little framework is a useful addition to Xtext which makes writing DSL tests quite easy. In my daily work on developing Xtext projects and coaching Xtext in workshops it became a useful tool which complements Xtext&#8217;s test support. It is not the only way to write tests for Xtext DSLs, but a real simple one. The main idea is that the best way to develop DSLs is to write prototype models. This framework allows you to read, parse, validate, format, serialize, and compare your models in a single line.</p>
<p>The framework can be installed from its <a href="http://xtext-utils.eclipselabs.org.codespot.com/git.distribution/releases/unittesting-0.9.x">update site</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kthoms.wordpress.com/473/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kthoms.wordpress.com/473/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kthoms.wordpress.com/473/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kthoms.wordpress.com/473/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kthoms.wordpress.com/473/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kthoms.wordpress.com/473/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kthoms.wordpress.com/473/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kthoms.wordpress.com/473/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kthoms.wordpress.com/473/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kthoms.wordpress.com/473/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kthoms.wordpress.com/473/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kthoms.wordpress.com/473/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kthoms.wordpress.com/473/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kthoms.wordpress.com/473/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kthoms.wordpress.com&#038;blog=6829080&#038;post=473&#038;subd=kthoms&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kthoms.wordpress.com/2012/04/26/xtext-utils-unittesting-0-9-4-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5b70519e81a384fd48c5a61a93274870?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kthoms</media:title>
		</media:content>
	</item>
		<item>
		<title>Unofficial release 2.2.2 of the Xtend Maven Plugin</title>
		<link>http://kthoms.wordpress.com/2012/04/17/unofficial-release-2-2-2-of-the-xtend-maven-plugin/</link>
		<comments>http://kthoms.wordpress.com/2012/04/17/unofficial-release-2-2-2-of-the-xtend-maven-plugin/#comments</comments>
		<pubDate>Tue, 17 Apr 2012 05:52:21 +0000</pubDate>
		<dc:creator>kthoms</dc:creator>
				<category><![CDATA[Maven]]></category>
		<category><![CDATA[Spray]]></category>
		<category><![CDATA[Xtext]]></category>
		<category><![CDATA[Eclipse Juno]]></category>
		<category><![CDATA[Xtend]]></category>
		<category><![CDATA[xtend-maven-plugin]]></category>

		<guid isPermaLink="false">http://kthoms.wordpress.com/?p=469</guid>
		<description><![CDATA[In my previous post I showed how to use the maven-xtend-plugin to compile Xtend sources within a Maven build. This worked fine in simple cases, but there was a limitation of only one supported source directory (the one configured by build/sourceDirectory property), see Bug#367914. Unfortunately already each Xtext project has already 2 source folders (src [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kthoms.wordpress.com&#038;blog=6829080&#038;post=469&#038;subd=kthoms&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In my <a href="http://kthoms.wordpress.com/2011/12/08/xtext-2-2-finally-brings-maven-support-for-xtend/">previous post</a> I showed how to use the maven-xtend-plugin to compile Xtend sources within a Maven build. This worked fine in simple cases, but there was a limitation of only one supported source directory (the one configured by build/sourceDirectory property), see <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=367914">Bug#367914</a>. Unfortunately already each Xtext project has already 2 source folders (<tt>src</tt> and <tt>src-gen</tt>), so this made the plugin unusable for Xtext projects and forced checking in the generated Java files. This causes terrible problems with version control, especially when working on a team.</p>
<p>
In the meantime <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=367914">Bug#367914</a> was resolved, but only for the upcoming Xtend 2.3 (Eclipse Juno) version. This urgent bugfix was not available on a Maven repository. But I needed it for project Spray to finally get rid of the merge conflicts and delete the generated sources from the repository (<a href="http://code.google.com/a/eclipselabs.org/p/spray/issues/detail?id=94">issue#94</a>). Spray is still using Xtext/Xtend version 2.2.1 and depends on public available Maven artifacts. Since the bugfix won&#8217;t be available from the Xtend project for the 2.2.1 release and Eclipse Juno is still some way to go I decided to backport the current 2.3.0 M6 sources of the Xtend Maven Plugin to 2.2.x and create an unofficial version 2.2.2. This plugin I have deployed to the <a href="http://fornax-platform.org/nexus/content/groups/public/org/eclipse/xtend2/xtend-maven-plugin/2.2.2/">Fornax Repository</a> to make it public available.</p>
<p>
For an usage example refer to the POMs of project Spray: <a href="http://code.google.com/a/eclipselabs.org/p/spray/source/browse/plugins/org.eclipselabs.spray.xtext/pom.xml?r=4f1c969ed57bc67bc67fe5c95cadac77e7cf653a">pom.xml</a>, <a href="http://code.google.com/a/eclipselabs.org/p/spray/source/browse/releng/org.eclipselabs.spray.parent/pom.xml?r=4f1c969ed57bc67bc67fe5c95cadac77e7cf653a">parent pom.xml</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kthoms.wordpress.com/469/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kthoms.wordpress.com/469/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kthoms.wordpress.com/469/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kthoms.wordpress.com/469/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kthoms.wordpress.com/469/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kthoms.wordpress.com/469/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kthoms.wordpress.com/469/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kthoms.wordpress.com/469/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kthoms.wordpress.com/469/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kthoms.wordpress.com/469/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kthoms.wordpress.com/469/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kthoms.wordpress.com/469/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kthoms.wordpress.com/469/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kthoms.wordpress.com/469/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kthoms.wordpress.com&#038;blog=6829080&#038;post=469&#038;subd=kthoms&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kthoms.wordpress.com/2012/04/17/unofficial-release-2-2-2-of-the-xtend-maven-plugin/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5b70519e81a384fd48c5a61a93274870?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kthoms</media:title>
		</media:content>
	</item>
		<item>
		<title>JvmType import check</title>
		<link>http://kthoms.wordpress.com/2012/04/03/jvmtype-import-check/</link>
		<comments>http://kthoms.wordpress.com/2012/04/03/jvmtype-import-check/#comments</comments>
		<pubDate>Tue, 03 Apr 2012 13:47:10 +0000</pubDate>
		<dc:creator>kthoms</dc:creator>
				<category><![CDATA[Spray]]></category>
		<category><![CDATA[Xtext]]></category>
		<category><![CDATA[IJvmTypeProvider]]></category>
		<category><![CDATA[Validation]]></category>

		<guid isPermaLink="false">http://kthoms.wordpress.com/?p=464</guid>
		<description><![CDATA[Several Xtext based DSLs will use import statements that import JvmTypes, be them real Java types, or just inferred types produced with your IJvmModelInferrer. The check for a valid import might be simple, but here it is to just make it even easier for you. I just had the need to realize this to resolve [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kthoms.wordpress.com&#038;blog=6829080&#038;post=464&#038;subd=kthoms&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Several Xtext based DSLs will use import statements that import JvmTypes, be them real Java types, or just inferred types produced with your IJvmModelInferrer. The check for a valid import might be simple, but here it is to just make it even easier for you. I just had the need to realize this to resolve <a href="http://code.google.com/a/eclipselabs.org/p/spray/issues/detail?id=113">Spray issue#113</a>. Basically you need to get the IJvmTypeProvider, to which you gain access through the IJvmTypeProvider.Factory.</p>
<p><pre class="brush: java;">
public class SprayJavaValidator extends AbstractSprayJavaValidator implements IssueCodes {
    @Inject
    private IJvmTypeProvider.Factory typeProviderFactory;
    @Check
    public void checkImports(final Import imp) {
        // don't check wildcard imports
        if (imp.getImportedNamespace().endsWith(&quot;.*&quot;))
            return;
        IJvmTypeProvider typeProvider = typeProviderFactory.findOrCreateTypeProvider(imp.eResource().getResourceSet());
        JvmType jvmType = typeProvider.findTypeByName(imp.getImportedNamespace());
        if (jvmType == null) {
            error(&quot;The import &quot; + imp.getImportedNamespace() + &quot; cannot be resolved&quot;, SprayPackage.Literals.IMPORT__IMPORTED_NAMESPACE, IMPORT_NOTEXISTS, new String[0]);
        }
    }
    ...
}
</pre></p>
<p>That&#8217;s all.</p>
<p><a href="http://kthoms.files.wordpress.com/2012/04/screenshot-2012-04-03-um-15-44-01.png"><img class="aligncenter size-full wp-image-465" title="screenshot 2012-04-03 um 15.44.01" src="http://kthoms.files.wordpress.com/2012/04/screenshot-2012-04-03-um-15-44-01.png" alt="" width="425" height="144" /></a></pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kthoms.wordpress.com/464/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kthoms.wordpress.com/464/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kthoms.wordpress.com/464/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kthoms.wordpress.com/464/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kthoms.wordpress.com/464/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kthoms.wordpress.com/464/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kthoms.wordpress.com/464/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kthoms.wordpress.com/464/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kthoms.wordpress.com/464/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kthoms.wordpress.com/464/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kthoms.wordpress.com/464/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kthoms.wordpress.com/464/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kthoms.wordpress.com/464/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kthoms.wordpress.com/464/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kthoms.wordpress.com&#038;blog=6829080&#038;post=464&#038;subd=kthoms&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kthoms.wordpress.com/2012/04/03/jvmtype-import-check/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5b70519e81a384fd48c5a61a93274870?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kthoms</media:title>
		</media:content>

		<media:content url="http://kthoms.files.wordpress.com/2012/04/screenshot-2012-04-03-um-15-44-01.png" medium="image">
			<media:title type="html">screenshot 2012-04-03 um 15.44.01</media:title>
		</media:content>
	</item>
		<item>
		<title>Xtext Content Assist: Escape identifiers conflicting with keywords</title>
		<link>http://kthoms.wordpress.com/2012/03/15/xtext-content-assist-escape-identifiers-conflicting-with-keywords/</link>
		<comments>http://kthoms.wordpress.com/2012/03/15/xtext-content-assist-escape-identifiers-conflicting-with-keywords/#comments</comments>
		<pubDate>Thu, 15 Mar 2012 21:04:29 +0000</pubDate>
		<dc:creator>kthoms</dc:creator>
				<category><![CDATA[Spray]]></category>
		<category><![CDATA[Xtext]]></category>
		<category><![CDATA[Content Assist]]></category>

		<guid isPermaLink="false">http://kthoms.wordpress.com/?p=453</guid>
		<description><![CDATA[I have faced in Spray the situation that a segment of a package name of a qualified Java type conflicts with a keyword of the Spray language. Specifically you can refer to custom features with the custom keyword, and the referred type was in a package containing also the name custom. When inserting the proposed [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kthoms.wordpress.com&#038;blog=6829080&#038;post=453&#038;subd=kthoms&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I have faced in Spray the situation that a segment of a package name of a qualified Java type conflicts with a keyword of the Spray language. Specifically you can refer to custom features with the <tt>custom</tt> keyword, and the referred type was in a package containing also the name <tt>custom</tt>.</p>
<p><a href="http://kthoms.files.wordpress.com/2012/03/screenshot-2012-03-15-um-21-37-19.png"><img src="http://kthoms.files.wordpress.com/2012/03/screenshot-2012-03-15-um-21-37-19.png" alt="" title="screenshot 2012-03-15 um 21.37.19" width="705" height="195" class="aligncenter size-full wp-image-454" /></a></p>
<p>When inserting the proposed qualified name this results in an error due to the keyword collision.</p>
<p><a href="http://kthoms.files.wordpress.com/2012/03/screenshot-2012-03-15-um-21-36-40.png"><img src="http://kthoms.files.wordpress.com/2012/03/screenshot-2012-03-15-um-21-36-40.png" alt="" title="screenshot 2012-03-15 um 21.36.40" width="637" height="19" class="aligncenter size-full wp-image-455" /></a></p>
<p>The qualified name is usually combined through a sequence of ID rules, which allows escaping an identifier by prefixing it with the ^ character in the case of conflict with a keyword.</p>
<p>For content assist it would now be useful if the inserted string would be automatically escaped. So here is a way to solve this.</p>
<p>My first approach was to override the <tt>completeJvmParameterizedTypeReference_Type()</tt> method from the proposal provider and modify the proposals through a custom <tt>ICompletionProposalAcceptor</tt>. Sebastian Zarnekow <a href="http://kthoms.wordpress.com/2012/03/15/xtext-content-assist-escape-identifiers-conflicting-with-keywords/#comments">commented</a> that the proper way would be to register a IValueConverter for QualifiedName. I tried to do so, but was not successful. Actually there is already an QualifiedNameValueConverter registered.</p>
<p>My next solution is now to subclass <tt>JdtTypesProposalProvider</tt> and pass a custom <tt>IValueConverter</tt>. The overridden methods just pass <tt>null</tt> as converter, thus do no conversion. I am reusing the <tt>QualifiedNameValueConverter</tt> here, since it does the necessary keyword escaping.</p>
<p><pre class="brush: java;">
public class SprayJdtTypesProposalProvider extends JdtTypesProposalProvider {
    @Inject
    private QualifiedNameValueConverter qnValueConverter;

    /**
     * Overridden to pass a default value converter
     */
    @Override
    public void createSubTypeProposals(JvmType superType, ICompletionProposalFactory proposalFactory, ContentAssistContext context, EReference typeReference, Filter filter, ICompletionProposalAcceptor acceptor) {
        createSubTypeProposals(superType, proposalFactory, context, typeReference, filter, getConverter(), acceptor);
    }

    /**
     * Overridden to pass a default value converter
     */
    @Override
    public void createTypeProposals(ICompletionProposalFactory proposalFactory, ContentAssistContext context, EReference typeReference, Filter filter, ICompletionProposalAcceptor acceptor) {
        createTypeProposals(proposalFactory, context, typeReference, filter, getConverter(), acceptor);
    }

    private AbstractValueConverter&lt;String&gt; getConverter() {
        return new AbstractValueConverter&lt;String&gt;() {
            /**
             * Remove ^ character from escaped segments
             */
            @Override
            public String toValue(String string, INode node) throws ValueConverterException {
                return string.replace(&quot;^&quot;, &quot;&quot;);
            }

            /**
             * Escape segments colliding with keywords with ^ character
             */
            @Override
            public String toString(String value) throws ValueConverterException {
                // this converter will escape keywords with ^
                return qnValueConverter.toString(value);
            }
        };
    }
}
</pre></p>
<p>This custom implementation must be bound to the UI module:</p>
<p><pre class="brush: java;">
public class SprayUiModule extends AbstractSprayUiModule {
    @Override
    public Class&lt;? extends ITypesProposalProvider&gt; bindITypesProposalProvider() {
        return SprayJdtTypesProposalProvider.class;
    }
}
</pre></p>
<p>Now the inserted qualified type name will be automatically replaced.</p>
<p><a href="http://kthoms.files.wordpress.com/2012/03/screenshot-2012-03-15-um-22-01-20.png"><img src="http://kthoms.files.wordpress.com/2012/03/screenshot-2012-03-15-um-22-01-20.png" alt="" title="screenshot 2012-03-15 um 22.01.20" width="619" height="17" class="aligncenter size-full wp-image-456" /></a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kthoms.wordpress.com/453/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kthoms.wordpress.com/453/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kthoms.wordpress.com/453/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kthoms.wordpress.com/453/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kthoms.wordpress.com/453/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kthoms.wordpress.com/453/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kthoms.wordpress.com/453/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kthoms.wordpress.com/453/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kthoms.wordpress.com/453/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kthoms.wordpress.com/453/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kthoms.wordpress.com/453/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kthoms.wordpress.com/453/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kthoms.wordpress.com/453/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kthoms.wordpress.com/453/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kthoms.wordpress.com&#038;blog=6829080&#038;post=453&#038;subd=kthoms&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kthoms.wordpress.com/2012/03/15/xtext-content-assist-escape-identifiers-conflicting-with-keywords/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5b70519e81a384fd48c5a61a93274870?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kthoms</media:title>
		</media:content>

		<media:content url="http://kthoms.files.wordpress.com/2012/03/screenshot-2012-03-15-um-21-37-19.png" medium="image">
			<media:title type="html">screenshot 2012-03-15 um 21.37.19</media:title>
		</media:content>

		<media:content url="http://kthoms.files.wordpress.com/2012/03/screenshot-2012-03-15-um-21-36-40.png" medium="image">
			<media:title type="html">screenshot 2012-03-15 um 21.36.40</media:title>
		</media:content>

		<media:content url="http://kthoms.files.wordpress.com/2012/03/screenshot-2012-03-15-um-22-01-20.png" medium="image">
			<media:title type="html">screenshot 2012-03-15 um 22.01.20</media:title>
		</media:content>
	</item>
		<item>
		<title>How to limit proposed Java types to implementors of an interface</title>
		<link>http://kthoms.wordpress.com/2012/03/14/how-to-limit-proposed-java-types-to-implementors-of-an-interface/</link>
		<comments>http://kthoms.wordpress.com/2012/03/14/how-to-limit-proposed-java-types-to-implementors-of-an-interface/#comments</comments>
		<pubDate>Wed, 14 Mar 2012 18:20:48 +0000</pubDate>
		<dc:creator>kthoms</dc:creator>
				<category><![CDATA[Xtext]]></category>
		<category><![CDATA[Content Assist]]></category>
		<category><![CDATA[Spray]]></category>
		<category><![CDATA[Xbase]]></category>

		<guid isPermaLink="false">http://kthoms.wordpress.com/?p=444</guid>
		<description><![CDATA[When you develop a DSL that derives from Xbase you likely want to refer to Jvm types through a JvmTypeReference. If you hit CTRL+SPACE at such a position in the editor, by default you will get all visible Java types proposed: This is not really useful when it only makes sense to refer to specifc [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kthoms.wordpress.com&#038;blog=6829080&#038;post=444&#038;subd=kthoms&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>When you develop a DSL that derives from Xbase you likely want to refer to Jvm types through a JvmTypeReference.</p>
<p><pre class="brush: plain;">
CustomBehavior :
    'custom' (name = ID | 'ref' realizedBy=JvmTypeReference) (label = STRING);
</pre></p>
<p>If you hit CTRL+SPACE at such a position in the editor, by default you will get all visible Java types proposed:<br />
<a href="http://kthoms.files.wordpress.com/2012/03/screenshot-2012-03-14-um-18-56-22.png"><img class="aligncenter size-full wp-image-445" title="screenshot 2012-03-14 um 18.56.22" src="http://kthoms.files.wordpress.com/2012/03/screenshot-2012-03-14-um-18-56-22.png" alt="" width="461" height="307" /></a></p>
<p>This is not really useful when it only makes sense to refer to specifc types. If you want to limit the proposals to just implementors of a specific interface, you can customize this in the proposal provider by overriding the method <tt>completeJvmParameterizedTypeReference_Type()</tt>. The following example from <a href="http://code.google.com/a/eclipselabs.org/p/spray/">Spray</a> shows limiting the types to implementors of Graphiti&#8217;s <tt>ICustomFeature</tt> interface in the context of Spray&#8217;s <tt>CustomBehavior</tt>:</p>
<p><pre class="brush: java;">
public class SprayProposalProvider extends AbstractSprayProposalProvider {
    @Inject
    private IJvmTypeProvider.Factory      jvmTypeProviderFactory;
    @Inject
    private ITypesProposalProvider        typeProposalProvider;
    
    @Override
    public void completeJvmParameterizedTypeReference_Type(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
        if (EcoreUtil2.getContainerOfType(model, CustomBehavior.class) != null) {
            final IJvmTypeProvider jvmTypeProvider = jvmTypeProviderFactory.createTypeProvider(model.eResource().getResourceSet());
            // Graphiti specific
            final JvmType interfaceToImplement = jvmTypeProvider.findTypeByName(ICustomFeature.class.getName());
            typeProposalProvider.createSubTypeProposals(interfaceToImplement, this, context, SprayPackage.Literals.BEHAVIOR__REALIZED_BY, TypeMatchFilters.canInstantiate(), acceptor);
        } else {
            super.completeJvmParameterizedTypeReference_Type(model, assignment, context, acceptor);
        }
    }
</pre></p>
<p>Now you will get the desired subtypes as proposals:</p>
<p><a href="http://kthoms.files.wordpress.com/2012/03/screenshot-2012-03-14-um-19-06-50.png"><img src="http://kthoms.files.wordpress.com/2012/03/screenshot-2012-03-14-um-19-06-50.png" alt="" title="screenshot 2012-03-14 um 19.06.50" width="458" height="301" class="aligncenter size-full wp-image-446" /></a></p>
<p>Note that this does only limit proposals to certain types. It does not prevent you from actually referring to another type that you don&#8217;t get proposed. This needs to be restricted in your scope provider.<br />
&nbsp;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kthoms.wordpress.com/444/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kthoms.wordpress.com/444/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kthoms.wordpress.com/444/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kthoms.wordpress.com/444/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kthoms.wordpress.com/444/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kthoms.wordpress.com/444/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kthoms.wordpress.com/444/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kthoms.wordpress.com/444/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kthoms.wordpress.com/444/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kthoms.wordpress.com/444/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kthoms.wordpress.com/444/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kthoms.wordpress.com/444/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kthoms.wordpress.com/444/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kthoms.wordpress.com/444/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kthoms.wordpress.com&#038;blog=6829080&#038;post=444&#038;subd=kthoms&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kthoms.wordpress.com/2012/03/14/how-to-limit-proposed-java-types-to-implementors-of-an-interface/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5b70519e81a384fd48c5a61a93274870?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kthoms</media:title>
		</media:content>

		<media:content url="http://kthoms.files.wordpress.com/2012/03/screenshot-2012-03-14-um-18-56-22.png" medium="image">
			<media:title type="html">screenshot 2012-03-14 um 18.56.22</media:title>
		</media:content>

		<media:content url="http://kthoms.files.wordpress.com/2012/03/screenshot-2012-03-14-um-19-06-50.png" medium="image">
			<media:title type="html">screenshot 2012-03-14 um 19.06.50</media:title>
		</media:content>
	</item>
		<item>
		<title>Xtext 2.2 finally brings Maven support for Xtend</title>
		<link>http://kthoms.wordpress.com/2011/12/08/xtext-2-2-finally-brings-maven-support-for-xtend/</link>
		<comments>http://kthoms.wordpress.com/2011/12/08/xtext-2-2-finally-brings-maven-support-for-xtend/#comments</comments>
		<pubDate>Thu, 08 Dec 2011 22:22:37 +0000</pubDate>
		<dc:creator>kthoms</dc:creator>
				<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Xtext]]></category>
		<category><![CDATA[Spray]]></category>
		<category><![CDATA[Tycho]]></category>
		<category><![CDATA[Xtend]]></category>
		<category><![CDATA[xtend-maven-plugin]]></category>

		<guid isPermaLink="false">http://kthoms.wordpress.com/?p=408</guid>
		<description><![CDATA[I cannot tell how often I was asked since introduction of Xtend2 how to compile them in a Maven build. This was just not possible until now due to the problem that to load and compile an Xtend class it is necessary to compile all of the Java classes that the Xtend class on before, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kthoms.wordpress.com&#038;blog=6829080&#038;post=408&#038;subd=kthoms&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I cannot tell how often I was asked since introduction of <a href="http://www.eclipse.org/Xtext/xtend/">Xtend2</a> how to compile them in a Maven build. This was just not possible until now due to the problem that to load and compile an Xtend class it is necessary to compile all of the Java classes that the Xtend class on before, and Java classes might depend on Xtend classes to be translated in order to be compilable. </p>
<p>
<a href="http://www.eclipse.org/Xtext/">Xtext 2.2.0</a> was just released yesterday, and for me the most important new feature is <a href="http://www.eclipse.org/Xtext/xtend/documentation/index.html#MavenSupport">direct support through the xtend-maven-plugin plugin</a>. I could not hesitate to test this feature, and created a small example.</p>
<h2>Scenario</h2>
<p>I have set up a small Maven project with 2 Java classes and 1 Xtend class that depend on each other.<br />
<a href="http://kthoms.files.wordpress.com/2011/12/screenshot-2011-12-08-um-21-56-35.png"><img src="http://kthoms.files.wordpress.com/2011/12/screenshot-2011-12-08-um-21-56-35.png" alt="" title="screenshot 2011-12-08 um 21.56.35" width="452" height="54" class="aligncenter size-full wp-image-409" /></a><br />
To translate XtendClass1 to Java code and compile it requires that JavaClass1 is compiled before, and to compile JavaClass2 it is necessary that XtendClass is translated to Java code before.</p>
<h2>Maven POM Configuration</h2>
<p>I have decided to not use Maven Tycho for this example, and use the typical structure of an Eclipse project with usage of Xtend, i.e. sources in folder <tt>/src</tt> (instead <tt>/src/main/java</tt>) and <tt>xtend-gen</tt> to generate the Java code for Xtend classes to.</p>
<h3>Repositories</h3>
<p>Since shortly Xtext artifacts are available on <a href="http://maven.eclipse.org/nexus/content/groups/public/">maven.eclipse.org</a>. The new Maven plugin is available on <a href="http://build.eclipse.org/common/xtend/maven/">http://build.eclipse.org/common/xtend/maven/</a><br />
<pre class="brush: xml;">
	&lt;repositories&gt;
		&lt;repository&gt;
			&lt;id&gt;maven.eclipse.org&lt;/id&gt;
			&lt;url&gt;http://maven.eclipse.org/nexus/content/groups/public/&lt;/url&gt;
		&lt;/repository&gt;
		&lt;repository&gt;
			&lt;id&gt;xtend&lt;/id&gt;
			&lt;url&gt;http://build.eclipse.org/common/xtend/maven/&lt;/url&gt;
		&lt;/repository&gt;
	&lt;/repositories&gt;
	&lt;pluginRepositories&gt;
		&lt;pluginRepository&gt;
			&lt;id&gt;xtend&lt;/id&gt;
			&lt;url&gt;http://build.eclipse.org/common/xtend/maven/&lt;/url&gt;
		&lt;/pluginRepository&gt;
		&lt;pluginRepository&gt;
			&lt;id&gt;fornax&lt;/id&gt;
			&lt;url&gt;http://fornax-platform.org/nexus/content/groups/public/&lt;/url&gt;
		&lt;/pluginRepository&gt;
	&lt;/pluginRepositories&gt;
</pre></p>
<h3>Dependencies</h3>
<p>This small project setup requires just a mimimal set of dependencies to be configured:<br />
<pre class="brush: xml;">
	&lt;dependencies&gt;
		&lt;dependency&gt;
			&lt;groupId&gt;org.eclipse.xtend2&lt;/groupId&gt;
			&lt;artifactId&gt;org.eclipse.xtend2.lib&lt;/artifactId&gt;
			&lt;version&gt;2.2.0&lt;/version&gt;
		&lt;/dependency&gt;
		&lt;dependency&gt;
			&lt;groupId&gt;org.eclipse.xtext&lt;/groupId&gt;
			&lt;artifactId&gt;org.eclipse.xtext.xtend2.lib&lt;/artifactId&gt;
			&lt;version&gt;2.2.0.v201112061305&lt;/version&gt;
		&lt;/dependency&gt;
		&lt;dependency&gt;
			&lt;groupId&gt;com.google.inject&lt;/groupId&gt;
			&lt;artifactId&gt;com.google.inject&lt;/artifactId&gt;
			&lt;version&gt;2.0.0.v201105231817&lt;/version&gt;
		&lt;/dependency&gt;
	&lt;/dependencies&gt;
</pre></p>
<h3>Source folders</h3>
<p>The main source folder <tt>src/</tt> can be configured with the <tt>build/sourceDirectory</tt> setting, for <tt>xtend-gen</tt> we need the support of the <tt><a href="http://mojo.codehaus.org/build-helper-maven-plugin/">build-helper-maven-plugin</a></tt>.<br />
<pre class="brush: xml;">
	&lt;build&gt;
		&lt;sourceDirectory&gt;src&lt;/sourceDirectory&gt;
		&lt;plugins&gt;
			&lt;plugin&gt;
				&lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
				&lt;artifactId&gt;build-helper-maven-plugin&lt;/artifactId&gt;
				&lt;version&gt;1.7&lt;/version&gt;
				&lt;executions&gt;
					&lt;execution&gt;
						&lt;id&gt;add-source&lt;/id&gt;
						&lt;phase&gt;generate-sources&lt;/phase&gt;
						&lt;goals&gt;
							&lt;goal&gt;add-source&lt;/goal&gt;
						&lt;/goals&gt;
						&lt;configuration&gt;
							&lt;sources&gt;
								&lt;source&gt;xtend-gen&lt;/source&gt;
							&lt;/sources&gt;
						&lt;/configuration&gt;
					&lt;/execution&gt;
				&lt;/executions&gt;
			&lt;/plugin&gt;
			...

</pre><br />
The <tt>xtend-gen</tt> folder must be emptied when executing <tt>mvn clean</tt>, this requires some <a href="http://maven.apache.org/plugins/maven-clean-plugin/examples/delete_additional_files.html">additional configuration of the maven-clean-plugin</a>.<br />
<pre class="brush: xml;">
			&lt;plugin&gt;
				&lt;artifactId&gt;maven-clean-plugin&lt;/artifactId&gt;
				&lt;version&gt;2.4.1&lt;/version&gt;
				&lt;configuration&gt;
					&lt;filesets&gt;
						&lt;fileset&gt;
							&lt;directory&gt;xtend-gen&lt;/directory&gt;
							&lt;includes&gt;
								&lt;include&gt;**&lt;/include&gt;
							&lt;/includes&gt;
						&lt;/fileset&gt;
					&lt;/filesets&gt;
				&lt;/configuration&gt;
			&lt;/plugin&gt;
</pre></p>
<h3>xtend-maven-plugin</h3>
<p>Now let&#8217;s finally come to the Xtend plugin. The plugin is configured as follows:<br />
<pre class="brush: xml;">
			&lt;plugin&gt;
				&lt;groupId&gt;org.eclipse.xtend2&lt;/groupId&gt;
				&lt;artifactId&gt;xtend-maven-plugin&lt;/artifactId&gt;
				&lt;version&gt;2.2.2&lt;/version&gt;
				&lt;executions&gt;
					&lt;execution&gt;
						&lt;goals&gt;
							&lt;goal&gt;compile&lt;/goal&gt;
							&lt;goal&gt;testCompile&lt;/goal&gt;
						&lt;/goals&gt;
						&lt;configuration&gt;
							&lt;outputDirectory&gt;xtend-gen&lt;/outputDirectory&gt;
						&lt;/configuration&gt;
					&lt;/execution&gt;
				&lt;/executions&gt;
			&lt;/plugin&gt;
</pre><br />
The <tt>outputDirectory</tt> is optional, but leaving it out the sources are generated to <tt>src/main/xtend-gen</tt>, and we want to generate to <tt>xtend-gen</tt> in the project root.</p>
<p>
The plugin does not define a lifecycle mapping for M2E, which leads to an error marker &#8220;Plugin execution not covered by lifecycle configuration&#8221;. This is a <a href="http://wiki.eclipse.org/M2E_plugin_execution_not_covered">well known issue when using M2E</a>, and requires <a href="http://wiki.eclipse.org/M2E_Extension_Development">some additional work on the plugin</a>. I have <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=366118">opened Bug#366118</a> for this.</p>
<h2>Sample Project</h2>
<p>The project described above is shared on Github: <a href="https://github.com/kthoms/xtext-experimental">https://github.com/kthoms/xtext-experimental</a></p>
<p>
In Eclipse the project looks like this after import (assuming the M2E plugin installed):<br />
<a href="http://kthoms.files.wordpress.com/2011/12/screenshot-2011-12-08-um-22-58-14.png"><img src="http://kthoms.files.wordpress.com/2011/12/screenshot-2011-12-08-um-22-58-14.png" alt="" title="screenshot 2011-12-08 um 22.58.14" width="279" height="208" class="aligncenter size-full wp-image-414" /></a></p>
<h2>Build Execution</h2>
<p>The classes in the project can now be built using <tt>mvn clean install</tt>. This will produce the following output:<br />
<pre class="brush: plain;">
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building xtend-maven-classic 2.2.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ xtend-maven-classic ---
[INFO] Deleting /Users/thoms/git/xtext-experimental/maven/xtend.maven/target
[INFO] Deleting /Users/thoms/git/xtext-experimental/maven/xtend.maven/xtend-gen (includes = [**], excludes = [])
[INFO] 
[INFO] --- build-helper-maven-plugin:1.7:add-source (add-source) @ xtend-maven-classic ---
[INFO] Source directory: /Users/thoms/git/xtext-experimental/maven/xtend.maven/xtend-gen added.
[INFO] 
[INFO] --- xtend-maven-plugin:2.2.0:compile (default) @ xtend-maven-classic ---
[WARNING] 
WARNING: 	XtendClass1.xtend - /Users/thoms/git/xtext-experimental/maven/xtend.maven/src/mypackage/XtendClass1.xtend
7: The value of the field XtendClass1.cls is not used
[INFO] Compiling 1 source file to xtend-gen
[INFO] 
[INFO] --- maven-resources-plugin:2.4.3:resources (default-resources) @ xtend-maven-classic ---
[WARNING] Using platform encoding (MacRoman actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /Users/thoms/git/xtext-experimental/maven/xtend.maven/src/main/resources
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ xtend-maven-classic ---
[WARNING] File encoding has not been set, using platform encoding MacRoman, i.e. build is platform dependent!
[INFO] Compiling 3 source files to /Users/thoms/git/xtext-experimental/maven/xtend.maven/target/classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.923s
[INFO] Finished at: Thu Dec 08 23:01:42 CET 2011
[INFO] Final Memory: 20M/81M
[INFO] ------------------------------------------------------------------------
</pre></p>
<p>From the output it can be seen that at the end 3 Java classes are compiled, after the xtend-maven-plugin created the Java code for the Xtend class.</p>
<p>Enabling debug output with -X reveals some more insight, how the plugin works:<br />
<pre class="brush: plain;">
[DEBUG] Configuring mojo 'org.eclipse.xtend2:xtend-maven-plugin:2.2.0:compile' with basic configurator --&gt;
[DEBUG]   (f) outputDirectory = xtend-gen
[DEBUG]   (f) project = MavenProject: org.eclipse.xtext.example:xtend-maven-classic:2.2.0-SNAPSHOT @ /Users/thoms/git/xtext-experimental/maven/xtend.maven/pom.xml
[DEBUG]   (f) tempDirectory = /Users/thoms/git/xtext-experimental/maven/xtend.maven/target/xtend
[DEBUG] -- end configuration --
[DEBUG] load xtend file 'file:/Users/thoms/git/xtext-experimental/maven/xtend.maven/src/mypackage/XtendClass1.xtend'
[DEBUG] Parsing took: 42 ms
...
[DEBUG] create java stub 'mypackage/XtendClass1.java'
[DEBUG] invoke batch compiler with '-cp /Users/thoms/git/xtext-experimental/maven/xtend.maven/src:/Users/thoms/.m2/repository/org/eclipse/xtend2/org.eclipse.xtend2.lib/2.2.0/org.eclipse.xtend2.lib-2.2.0.jar:/Users/thoms/.m2/repository/com/google/guava/guava/10.0.1/guava-10.0.1.jar:/Users/thoms/.m2/repository/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.jar:/Users/thoms/.m2/repository/org/eclipse/xtext/org.eclipse.xtext.xtend2.lib/2.2.0.v201112061305/org.eclipse.xtext.xtend2.lib-2.2.0.v201112061305.jar:/Users/thoms/.m2/repository/org/eclipse/xtext/org.eclipse.xtext.xbase.lib/2.2.0.v201112061305/org.eclipse.xtext.xbase.lib-2.2.0.v201112061305.jar:/Users/thoms/.m2/repository/com/google/inject/com.google.inject/2.0.0.v201105231817/com.google.inject-2.0.0.v201105231817.jar -d /Users/thoms/git/xtext-experimental/maven/xtend.maven/target/xtend/classes -1.5 -proceedOnError /Users/thoms/git/xtext-experimental/maven/xtend.maven/src /Users/thoms/git/xtext-experimental/maven/xtend.maven/target/xtend/stubs'
[DEBUG] classpath used for Xtend compilation : [file:/Users/thoms/git/xtext-experimental/maven/xtend.maven/src/, file:/Users/thoms/.m2/repository/org/eclipse/xtend2/org.eclipse.xtend2.lib/2.2.0/org.eclipse.xtend2.lib-2.2.0.jar, file:/Users/thoms/.m2/repository/com/google/guava/guava/10.0.1/guava-10.0.1.jar, file:/Users/thoms/.m2/repository/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.jar, file:/Users/thoms/.m2/repository/org/eclipse/xtext/org.eclipse.xtext.xtend2.lib/2.2.0.v201112061305/org.eclipse.xtext.xtend2.lib-2.2.0.v201112061305.jar, file:/Users/thoms/.m2/repository/org/eclipse/xtext/org.eclipse.xtext.xbase.lib/2.2.0.v201112061305/org.eclipse.xtext.xbase.lib-2.2.0.v201112061305.jar, file:/Users/thoms/.m2/repository/com/google/inject/com.google.inject/2.0.0.v201105231817/com.google.inject-2.0.0.v201105231817.jar, file:/Users/thoms/git/xtext-experimental/maven/xtend.maven/src/, file:/Users/thoms/git/xtext-experimental/maven/xtend.maven/target/xtend/classes/]
</pre></p>
<p>The plugin invokes the Xtend Batch compiler through a spawned JVM. The batch compiler is realized in class <tt>org.eclipse.xtext.xtend2.compiler.batch.Xtend2BatchCompiler</tt> from the newly added plugin <tt>org.eclipse.xtext.xtend2.standalone</tt>.</p>
<p>
After the build <tt>XtendClass1.java</tt> is generated as expected to <tt>xtend-gen</tt>. When opening the <tt>target</tt> folder it can be seen that the plugin produces a Java stub class to <tt>target/stubs</tt> for the Xtend class. Finally, everything is compiled and the project is clean <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><a href="http://kthoms.files.wordpress.com/2011/12/screenshot-2011-12-08-um-23-17-06.png"><img src="http://kthoms.files.wordpress.com/2011/12/screenshot-2011-12-08-um-23-17-06.png" alt="" title="screenshot 2011-12-08 um 23.17.06" width="252" height="394" class="aligncenter size-full wp-image-418" /></a></p>
<h2>Limitation</h2>
<p>The plugin only takes one source folder into account, namely the one configured by <tt>build/sourceDirectory</tt>. This is a problem when you have multiple source folders, which is quite typical for Xtext projects, namely <tt>src</tt> and <tt>src-gen</tt>. This is reported as <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=367914" title="Bug#367914"></a>, which is fixed in the meantime. I have deployed a patched version as <a href="http://kthoms.wordpress.com/2012/04/17/unofficial-release-2-2-2-of-the-xtend-maven-plugin/">unofficial release 2.2.2</a>.</p>
<h2>Conclusion</h2>
<p>I deeply desired this plugin and this finally allows that the <tt>xtend-gen</tt> folder does not need to be checked in. The sample used here was just simple. Next would be a real life project were I want to apply the plugin, most likely in <a href="http://code.google.com/a/eclipselabs.org/p/spray/">Project Spray</a>. This project uses Xtend based code generation heavily and Maven Tycho for the build. The project has not been upgraded to Xtext 2.2.0 (of course, it was just released), and I guess we have to upgrade to Xtext 2.2.0 before we can use the plugin. But if this allows us to finally remove the <tt>xtend-gen</tt> folders from the repository this alone is worth upgrading.</p>
<p>
Nice work, Xtext team!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kthoms.wordpress.com/408/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kthoms.wordpress.com/408/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kthoms.wordpress.com/408/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kthoms.wordpress.com/408/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kthoms.wordpress.com/408/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kthoms.wordpress.com/408/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kthoms.wordpress.com/408/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kthoms.wordpress.com/408/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kthoms.wordpress.com/408/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kthoms.wordpress.com/408/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kthoms.wordpress.com/408/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kthoms.wordpress.com/408/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kthoms.wordpress.com/408/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kthoms.wordpress.com/408/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kthoms.wordpress.com&#038;blog=6829080&#038;post=408&#038;subd=kthoms&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kthoms.wordpress.com/2011/12/08/xtext-2-2-finally-brings-maven-support-for-xtend/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5b70519e81a384fd48c5a61a93274870?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kthoms</media:title>
		</media:content>

		<media:content url="http://kthoms.files.wordpress.com/2011/12/screenshot-2011-12-08-um-21-56-35.png" medium="image">
			<media:title type="html">screenshot 2011-12-08 um 21.56.35</media:title>
		</media:content>

		<media:content url="http://kthoms.files.wordpress.com/2011/12/screenshot-2011-12-08-um-22-58-14.png" medium="image">
			<media:title type="html">screenshot 2011-12-08 um 22.58.14</media:title>
		</media:content>

		<media:content url="http://kthoms.files.wordpress.com/2011/12/screenshot-2011-12-08-um-23-17-06.png" medium="image">
			<media:title type="html">screenshot 2011-12-08 um 23.17.06</media:title>
		</media:content>
	</item>
		<item>
		<title>Xtext 2.1.1 artifacts available on Eclipse Maven repository</title>
		<link>http://kthoms.wordpress.com/2011/11/21/xtext-2-1-1-artifacts-available-on-eclipse-maven-repository/</link>
		<comments>http://kthoms.wordpress.com/2011/11/21/xtext-2-1-1-artifacts-available-on-eclipse-maven-repository/#comments</comments>
		<pubDate>Mon, 21 Nov 2011 11:42:01 +0000</pubDate>
		<dc:creator>kthoms</dc:creator>
				<category><![CDATA[Maven]]></category>
		<category><![CDATA[Xtext]]></category>

		<guid isPermaLink="false">http://kthoms.wordpress.com/?p=404</guid>
		<description><![CDATA[Until now it was always a struggle to make Xtext (or Eclipse) artifacts available on a public available repository. It seems that this has now finally found a good end. Today Achim Demelt pointed me to a Google+ posting from Dennis Huebner (our Xtext build manager) where he announced that Xtext artifacts are now automatically [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kthoms.wordpress.com&#038;blog=6829080&#038;post=404&#038;subd=kthoms&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Until now it was always a struggle to make Xtext (or Eclipse) artifacts available on a public available repository. It seems that this has now finally found a good end.</p>
<p>Today <a href="https://plus.google.com/105485565450793476938">Achim Demelt</a> pointed me to a <a href="https://plus.google.com/u/0/109977816718694007083/posts/FZZkszrf727">Google+ posting from Dennis Huebner</a> (our Xtext build manager) where he announced that Xtext artifacts are now automatically available on the <a href="http://maven.eclipse.org/nexus/">Nexus repository at maven.eclipse.org</a>.</p>
<p>The given POMs have all dependencies from their bundle manifests. This is the recommended &#8220;Maven way&#8221;, but you may face that too many dependencies are pulled transitive, and you may have to cut them down by <a href="http://maven.apache.org/pom.html#Exclusions">explicit exclusions</a>. I haven&#8217;t tested this with the new repository, but this is what I experienced when doing a similar approach earlier with Xtext 2.0.1, whose artifacts are deployed on the Fornax Repository. Use the <a href="http://maven.apache.org/plugins/maven-dependency-plugin/usage.html#The_dependency:tree_Mojo">dependency:tree</a> plugin, or better M2E, to identify possible exclusions.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kthoms.wordpress.com/404/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kthoms.wordpress.com/404/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kthoms.wordpress.com/404/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kthoms.wordpress.com/404/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kthoms.wordpress.com/404/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kthoms.wordpress.com/404/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kthoms.wordpress.com/404/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kthoms.wordpress.com/404/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kthoms.wordpress.com/404/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kthoms.wordpress.com/404/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kthoms.wordpress.com/404/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kthoms.wordpress.com/404/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kthoms.wordpress.com/404/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kthoms.wordpress.com/404/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kthoms.wordpress.com&#038;blog=6829080&#038;post=404&#038;subd=kthoms&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kthoms.wordpress.com/2011/11/21/xtext-2-1-1-artifacts-available-on-eclipse-maven-repository/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5b70519e81a384fd48c5a61a93274870?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kthoms</media:title>
		</media:content>
	</item>
		<item>
		<title>EclipseCon 2011 warmup</title>
		<link>http://kthoms.wordpress.com/2011/11/01/399/</link>
		<comments>http://kthoms.wordpress.com/2011/11/01/399/#comments</comments>
		<pubDate>Tue, 01 Nov 2011 23:07:58 +0000</pubDate>
		<dc:creator>kthoms</dc:creator>
				<category><![CDATA[Xtext]]></category>
		<category><![CDATA[EclipseCon]]></category>
		<category><![CDATA[Graphiti]]></category>
		<category><![CDATA[Spray]]></category>
		<category><![CDATA[SWTBot]]></category>
		<category><![CDATA[Tycho]]></category>
		<category><![CDATA[Xbase]]></category>

		<guid isPermaLink="false">http://kthoms.wordpress.com/?p=399</guid>
		<description><![CDATA[EclipseCon is just about to start and I am glad that I can make it this year. I have the chance to present Project Spray on thursday (Nov 3rd, 11:30 AM Bürgersaal 2) together with Jos Warmer. Spray aims to provide tooling to facilitate the creation of visual editors based on the Graphiti framework by [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kthoms.wordpress.com&#038;blog=6829080&#038;post=399&#038;subd=kthoms&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>EclipseCon is just about to start and I am glad that I can make it this year. I have the chance to present <a href="http://code.google.com/a/eclipselabs.org/p/spray/">Project Spray</a> <a href="http://eclipsecon.org/sessions/spraying-natural-way-create-graphiti">on thursday (Nov 3rd, 11:30 AM Bürgersaal 2)</a> together with Jos Warmer. Spray aims to provide tooling to facilitate the creation of visual editors based on the Graphiti framework by the use of Xtext based DSL and Xtend code generator. You can basically compare it with what GMF Tools does for GMF, just with a DSL based approach.</p>
<p><a href="http://www.eclipsecon.org/europe2011"><img border="0" src="http://www.eclipsecon.org/europe2011/sites/default/files/100x100_speaking.gif?1307118317" height="80" width="100" alt="EclipseCon Europe 2011" /></a></p>
<p>The project was founded at this year&#8217;s <a href="www.codegeneration.net/cg2011/">Code Generation conference</a>, and Jos contributed an initial state of Spray derived from a customer&#8217;s project back in August. Since then the project team refactored the code base quite a bit. We are still in an early project phase. Most of the development is done in spare time yet, like Open Source projects often start. That was quite tough besides my full packed work schedule. Many hours on train or evenings in the hotel were spent to push this project.</p>
<p>At the moment I am just about to release version 0.3.0 of the Spray SDK, which I will use for our demo on thursday. Of course we want to gain a large audience. I am honest enough to say that attendees won&#8217;t see a production ready tool yet, but of course it is in working state. Jan announced a <a>pie fight for visual tooling</a>, I am ready to open my mouth wide enough to catch the incoming pies.</p>
<p>For our session we don&#8217;t want to start any discussion on graphical editing vs. visualization, whether GMF is better than Graphiti, or DSL / code generation vs. framework approach. There is always a niche for everything, and we are confident that Spray fills one of these gaps.</p>
<p>Besides what an end user actually can do with Spray at this moment there are quite some hidden gems in the project. I am using Spray to have also a non-trivial example for Eclipse Modeling tooling. You will find, for example</p>
<ul>
<li>a <a href="http://www.eclipse.org/tycho/">Maven Tycho</a> based build for Xtext 2 based projects
<li><a href="http://www.eclipse.org/swtbot/">SWTBot</a> based UI tests, integrated in the Maven build
<li>a project wizard with Xtend based code generation
<li>an advanced example use of Xbase in a DSL
<li>documentation based on WikiText, integrated in the build
<li>unit testing of the Xtext DSL with <a href="http://code.google.com/a/eclipselabs.org/p/xtext-utils/wiki/Unit_Testing">xtext-utils unittesting</a>
<li><a />separation of the Xtend code generator</a> from the language project
</ul>
<p>At EclipseCon I will take the chance to exchange with some experts in the fields of Modeling, especially Xtext and Graphiti. I will lay another focus on Build systems, especially Maven. Besides that there are many other interesting talks, far more than I can attend. And not to forget to meet all the other Eclipse enthusiasts. See you there!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kthoms.wordpress.com/399/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kthoms.wordpress.com/399/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kthoms.wordpress.com/399/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kthoms.wordpress.com/399/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kthoms.wordpress.com/399/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kthoms.wordpress.com/399/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kthoms.wordpress.com/399/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kthoms.wordpress.com/399/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kthoms.wordpress.com/399/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kthoms.wordpress.com/399/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kthoms.wordpress.com/399/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kthoms.wordpress.com/399/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kthoms.wordpress.com/399/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kthoms.wordpress.com/399/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kthoms.wordpress.com&#038;blog=6829080&#038;post=399&#038;subd=kthoms&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kthoms.wordpress.com/2011/11/01/399/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5b70519e81a384fd48c5a61a93274870?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kthoms</media:title>
		</media:content>

		<media:content url="http://www.eclipsecon.org/europe2011/sites/default/files/100x100_speaking.gif?1307118317" medium="image">
			<media:title type="html">EclipseCon Europe 2011</media:title>
		</media:content>
	</item>
	</channel>
</rss>
