blob: 6ec0537e8f5e0135c89a4736fea865a4a45f9fa9 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Xtext - Xtext 2.7.0 Release Notes</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description"
content="The website of Eclipse Xtext, an open-source framework for development of programming languages and domain-specific languages">
<meta name="author" content="Sven Efftinge">
<meta name="author" content="Miro Spoenemann">
<!-- styles -->
<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<!-- Le fav and touch icons -->
<link rel="shortcut icon" href="/Xtext/images/favicon.png">
<link href="/Xtext/css/bootstrap.css" rel="stylesheet" type='text/css'>
<link href="/Xtext/css/bootstrap-responsive.css" rel="stylesheet" type='text/css'>
<link href="/Xtext/css/shield-responsive.css" rel="stylesheet" type='text/css'>
<link href='/Xtext/css/fonts.css' rel='stylesheet' type='text/css'>
<link href="/Xtext/css/prettyPhoto.css" rel="stylesheet" media="screen" type='text/css'>
<link href="/Xtext/css/prettify.css" type="text/css" rel="stylesheet"/>
<link href="/Xtext/css/style.css" rel="stylesheet" type='text/css'>
<!-- cover flow -->
<link href="/Xtext/css/coverflow.css" rel="stylesheet" type='text/css'>
<!--[if lt IE 9]>
<link href="/css/iebugs.css" rel="stylesheet" type='text/css'>
<![endif]-->
<!-- BEGIN Cookie Consent
<link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.0.3/cookieconsent.min.css" />
<script src="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.0.3/cookieconsent.min.js"></script>
<script>
window.addEventListener("load", function(){
window.cookieconsent.initialise({
"palette": {
"popup": {
"background": "#000"
},
"button": {
"background": "#f1d600"
}
},
"theme": "edgeless",
"type": "opt-in",
onInitialise: function (status) {
var type = this.options.type;
var didConsent = this.hasConsented();
if (type == 'opt-in' && didConsent) {
// TODO: enable cookies
}
if (type == 'opt-out' && !didConsent) {
// TODO: disable cookies
}
},
onStatusChange: function(status, chosenBefore) {
var type = this.options.type;
var didConsent = this.hasConsented();
if (type == 'opt-in' && didConsent) {
// TODO: enable cookies
}
if (type == 'opt-out' && !didConsent) {
// TODO: disable cookies
}
},
onRevokeChoice: function() {
var type = this.options.type;
if (type == 'opt-in') {
// TODO: disable cookies
}
if (type == 'opt-out') {
// TODO: enable cookies
}
},
"content": {
"href": "http://www.eclipse.org/legal/privacy.php"
}
})});
</script>
END Cookie Consent -->
</head>
<body>
<header class="site-header">
<!-- Navbar -->
<div class="navbar navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="btn btn-navbar" data-toggle="collapse"
data-target=".nav-collapse"> <span class="icon-bar"></span> <span
class="icon-bar"></span> <span class="icon-bar"></span>
</a> <a class="brand" href="/Xtext/index.html"></a>
<div class="nav-collapse collapse" style="height: 0px;">
<ul class="nav">
<!--li ><a href="/Xtext/news.html">News</a></li-->
<li ><a href="/Xtext/download.html">Download</a></li>
<li ><a href="/Xtext/documentation/index.html">Documentation</a></li>
<li ><a href="/Xtext/community.html">Community</a></li>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Support &amp; Trainings<span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="https://www.itemis.com/en/xtext/support-and-team/" target="_blank">itemis</a></li>
<li><a href="https://typefox.io/trainings-2" target="_blank">TypeFox</a></li>
</ul>
</li>
<li ><a href="http://xtend-lang.org">Xtend</a></li>
</ul>
<!--div class="nav pull-right">
<li ><a><iframe src="https://ghbtns.com/github-btn.html?user=eclipse&repo=xtext&type=star&count=true" frameborder="0" scrolling="0" width="170px" height="20px"></iframe></a></li>
</div-->
</div>
<!--/.nav-collapse -->
</div>
</div>
</div>
<!-- Navbar End -->
</header>
<div class="page-content">
<div class="wrapper">
<div id="page">
<div class="inner">
<br/><br/>
<div id="maincontainer" class="container">
<div class="span8 offset1">
<h1>Xtext 2.7.0 Release Notes</h1>
<h4>Sep 2, 2014</h4>
<br/>
<p>
Version 2.7 got many new features, bug fixes and performance improvements (<a href="https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&status_whiteboard=v2.7">full bugzilla list</a>). The most noteworthy changes are :
</p>
<section id="inferrer_api" style="padding-top: 68px; margin-top: -68px;">
<h2>Published Inferrer API of Xbase</h2>
<p>
The JVM model inferrer API, which is the heart of Xbase, has been finalized and is now public. We took the opportunity to simplify it in some places. Have a look at the <a href="https://github.com/xtext-dev/seven-languages-xtext/tree/xtext_2.7">updated seven languages example</a> for idiomatic usage of the API.
</p>
</section>
<section id="xtext_performance_2_7" style="padding-top: 68px; margin-top: -68px;">
<h2>Performance Improvements</h2>
<p>
Xtext is now able to cancel many jobs (like refreshing the outline view) when the user starts typing, greatly improving responsiveness. Also, many UI actions can now be cancelled by hitting the "Stop" button.
Resource clustering is now supported in the builder participant and standalone builder, reducing the memory footprint for large projects. There is a new parallel builder participant that can be used for even more performance gains.
</p>
</section>
<section id="xtext_xcore_integration_2_7" style="padding-top: 68px; margin-top: -68px;">
<h2>
Better Integration with Xcore
</h2>
<p>
The "New Xtext Project" wizard now supports Xcore models and adding them to an existing mwe2 workflow is as simple as specifying them as a <code>loadedResource</code>. Xcore itself has undergone some serious performance improvements, making it suitable even for large models.
</p>
<img class="image_between_p" src="/Xtext/images/releasenotes/2_7_xtext-xcore-wizard.png"/>
</section>
<section id="xtext_debugging_2_7" style="padding-top: 68px; margin-top: -68px;">
<h2>Debugging</h2>
<p>
Breakpoints can now be toggled, enabled/disabled and inspected via the ruler context menu. Partial support for conditional breakpoints was added. Content assist in the condition editor will be added in version 2.8.
</p>
<img class="image_between_p" src="/Xtext/images/releasenotes/2_7_xtext-breakpoint-toggle.png"/>
</section>
<section id="xtext_find_references_2_7" style="padding-top: 68px; margin-top: -68px;">
<h2>
Find References improved
</h2>
<p>
The find references API is now available in the runtime plugin and has undergone some performance improvements.
</p>
</section>
<section id="xtext_cross_platform_2_7" style="padding-top: 68px; margin-top: -68px;">
<h2>
Cross Plattform Improvements
</h2>
<p>
All Xtext generator fragments now accept an explicit line delimiter, so heterogeneous teams get the same results when generating the language infrastructure.
</p>
</section>
<section id="xtend_2_7" style="padding-top: 68px; margin-top: -68px;">
<h1>
Xtend 2.7.0
</h1>
</section>
<section id="xtend_language_2_7" style="padding-top: 68px; margin-top: -68px;">
<h2>
Language
</h2>
<p>
It is now allowed to leave out parameter declarations for all lambda expressions using a positional syntax.
<pre class="prettyprint lang-xtend linenums">
#[1, 2, 3].reduce[$0 + $1]
</pre>
Enum constants in annotations can be referenced without their type name.
<pre class="prettyprint lang-xtend linenums">
@Retention(RUNTIME)
</pre>
Type inference for parameterized inner classes was improved and supports types like
<pre class="prettyprint lang-xtend linenums">
Option&LT;T&GT;.Some
</pre>
The validator will now detect use of deprecated API and is much better at finding dead code. Would you have spotted the following?
</p>
<img class="image_between_p" src="/Xtext/images/releasenotes/2_7_xtend-dead-code-analysis.png"/>
<img>
</section>
<section id="xtend_library_2_7" style="padding-top: 68px; margin-top: -68px;">
<h2>
Library
</h2>
<p>
The standard library has new extension methods for <code>Iterables</code>, including <code>min</code>/<code>max</code>, <code>groupBy</code> and <code>indexed</code>.
</p>
<pre class="prettyprint lang-xtend linenums">
#["Xtend", "Java", "Eclipse"].maxBy[length]
</pre>
<p>New Active Annotations have been added to free you of some repetitive tasks. The new <code>@Accessors</code> generates getters and setters, with fine grained control and even for all fields of a class if you want. The <code>@Delegate</code> annotation automatically implements the delegation pattern for you, so you only need to concentrate on methods that you actually want to implement differently than just delegating. Here is an example:</p>
<pre class="prettyprint lang-xtend linenums">
interface I {
def void m1()
def void m2()
def void m3()
}
class A implements I {
override m1() {}
override m2() {}
override m3() {}
}
class B implements I {
//all methods automatically implemented
@Delegate A delegate = new A
}
</pre>
<p>Other additions include <code>@ToString</code>, <code>@EqualsHashCode</code>, <code>@FinalFieldsConstructor</code> and a new <code>@Data</code> (the old one is now deprecated as well as <code>@Property</code>).</p>
<p>The active annotation API integrates even deeper with the IDE. Every generated element can (and should) now declare its source element. This tracing information is used in places like the outline view. A separate validation phase has been added, so the end result after running all transformations can be validated. Also, changes to classes and even arbitrary resources that the annotation processor requested are detected and lead to automatic rebuilds.</p>
</section>
<section id="xtend_ide_features_2_7" style="padding-top: 68px; margin-top: -68px;">
<h2>IDE Features</h2>
</section>
<section id="xtend_debugging_2_7" style="padding-top: 68px; margin-top: -68px;">
<h3>
Debugging
</h3>
<p>
Xtend breakpoints can now have conditions. Conditions are written in Java, so you get full access even to synthetic variables inserted by the Xtend compiler. Of course you also get content assist in the condition editor.
</p>
<img class="image_between_p" src="/Xtext/images/releasenotes/2_7_xtend-conditional-breakpoint.png"/>
<p>
Breakpoints can now be toggled, enabled/disabled and inspected via the ruler context menu.
</p>
<img class="image_between_p" src="/Xtext/images/releasenotes/2_7_xtext-breakpoint-toggle.png"/>
</section>
<section id="xtend_content_assist_2_7" style="padding-top: 68px; margin-top: -68px;">
<h3>
Content Assist
</h3>
<p>
Content Assist has become a lot faster and more accurate at the same time. It will now also retain the "is"-prefix of boolean properties.
</p>
</section>
<section id="xtend_performance_2_7" style="padding-top: 68px; margin-top: -68px;">
<h3>
Performance Improvements
</h3>
<p>
Performance has reached a new level with big improvements to Content Assist, parallel code generation and lots of fine tuning. Also, Xtend will now cancel jobs (like outline refreshing) when you start typing again, making the editor much more responsive.
</p>
</section>
<section id="xtend_outline_2_7" style="padding-top: 68px; margin-top: -68px;">
<h3>
Outline with Java-Mode
</h3>
<p>
The outline view now supports two modes: One shows the original Xtend AST, the other one shows the resulting Java AST. This is very useful in the presence of Active Annotations that add a lot of new members to a class.
</p>
<img class="image_between_p" src="/Xtext/images/releasenotes/2_7_xtend-outline-normal.png"/>
<img class="image_between_p" src="/Xtext/images/releasenotes/2_7_xtend-outline-jvm.png"/>
</section>
<section id="xtend_organize_imports_2_7" style="padding-top: 68px; margin-top: -68px;">
<h3>
Organize imports on packages
</h3>
<p>
You can now use "Organize Xtend Imports" on whole packages via the "Source" context menu.
</p>
<img class="image_between_p" src="/Xtext/images/releasenotes/2_7_xtend-organize-imports.png"/>
</section>
<section id="xtend_template_proposals_2_7" style="padding-top: 68px; margin-top: -68px;">
<h3>
Template proposals support import
</h3>
<p>
A new type of template variable was added. It adds an import to an Xtend file when the template is inserted. This greatly reduces the need for qualified type names in templates.
</p>
<img class="image_between_p" src="/Xtext/images/releasenotes/2_7_xtend-templates-import.png"/>
</section>
<section id="xtend_open_return_type_2_7" style="padding-top: 68px; margin-top: -68px;">
<h3>
Open return type
</h3>
<p>
Ever wondered what you can do with the type of a variable or the return type of a method? You can now CTRL-Click on feature calls and open the declaration of the return type of that call.
</p>
</section>
<section id="xtend_show_java_errors_2_7" style="padding-top: 68px; margin-top: -68px;">
<h3>
Show errors from derived Java files
</h3>
<p>
By using black box Java code within active annotations the generated Java source could sometimes have errors while the Xtend code is fine. In those cases, the errors are now shown at the appropriate locations in Xtend as well.
</p>
</section>
<section id="xtend_maved_2_7" style="padding-top: 68px; margin-top: -68px;">
<h3>Maven and Java 8</h3>
<p>
The Xtend Maven plugin is now toolchain-aware. Using this, you can for instance run Maven on Java 8, but compile against a JDK 6.
</p>
</section>
</div>
</div>
</div>
</div>
</div>
</div>
<footer class="site-footer">
<div id="extra">
<div class="inner">
<div class="container">
<div class="row">
<div class="span6">
<h3 class="footer-links-header">Quick Links</h3>
<ul class="footer-links clearfix">
<li><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></li>
<li><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></li>
<li><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></li>
<li><a href="http://www.eclipse.org/legal/">Legal</a></li>
</ul>
<ul class="footer-links clearfix">
<li><a href="http://www.eclipse.org">Eclipse Home</a></li>
<li><a href="http://marketplace.eclipse.org/">Market Place</a></li>
<li><a href="http://www.planeteclipse.org/">Eclipse Planet</a></li>
<li><a href="https://www.eclipse.org/forums/index.php/f/27/">Xtext Forum</a></li>
</ul>
</div>
<div class="span6">
<!-- Social Media Links -->
<h3 class="footer-links-header"">Social Media</h3>
<ul class="footer-links clearfix">
<li>
<a href="https://twitter.com/xtext"><img src="/Xtext/images/Twitter-bird-darkgray.png" class="img-responsive" style="margin-right: 5px;height: 1em;" alt="Twitter icon">@xtext on Twitter</a>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<a href="#" class="scrollup fadeOutRight animated" style="display: none;">ScrollUp</a>
<!-- Le javascript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="/Xtext/js/jquery-1.11.3.min.js"></script>
<script src="/Xtext/js/bootstrap.min.js"></script>
<script src="/Xtext/js/jquery.easing.1.3.js" type="text/javascript"></script>
<script src="/Xtext/js/jquery.prettyPhoto.js" type="text/javascript"></script>
<script src="/Xtext/js/prettify.js" type="text/javascript"></script>
<script src="/Xtext/js/lang-xtend.js" type="text/javascript"></script>
<script src="/Xtext/js/lang-common.js" type="text/javascript"></script>
<script src="/Xtext/js/custom.js" type="text/javascript"></script>
<!--script src="https://apis.google.com/js/platform.js" async defer></script-->
<!--script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push([ '_setAccount', 'UA-2429174-3' ]);
_gaq.push([ '_trackPageview' ]);
(function() {
var ga = document.createElement('script');
ga.type = 'text/javascript';
ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl'
: 'http://www')
+ '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
})();
</script-->
<script src="/Xtext/js/coverflow.min.js" type="text/javascript"></script>
<script>
$(function() {
$('#coverflow').coverflow({
active : 1,
visibleAside: 2,
overlap : 0.5,
scale : 0.9,
angle : 20,
trigger : {
"itemfocus" : true,
"swipe" : true,
"mousewheel" : false
}
});
$('#coverflow :hidden').toggle();
$(window).resize(function() {
$('#coverflow').coverflow();
});
});
</script>
</footer>
</body>
</html>