| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
| <html xmlns="http://www.w3.org/1999/xhtml"> |
| <head> |
| <meta name="copyright" |
| content="Copyright (c) Eclipse contributors and others 2014. This page is made available under license. For full details see the LEGAL in the documentation that contains this page." /> |
| <meta http-equiv="Content-Language" content="en-us" /> |
| <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> |
| <link rel="stylesheet" href="default_style.css" charset="UTF-8" type="text/css" /> |
| <style type="text/css"> |
| table.news td { |
| border-top: solid thin black; |
| } |
| |
| table.news tr { |
| vertical-align: top; |
| } |
| |
| table.news tr td.section { |
| font-size: 20px; |
| font-weight: bold; |
| } |
| |
| table.news tr td.title { |
| vertical-align: top; |
| width: 30%; |
| font-weight: bold; |
| } |
| |
| table.news tr td.content { |
| vertical-align: top; |
| width: 70%; |
| } |
| |
| ul { |
| padding-left: 13px; |
| } |
| </style> |
| <title>Eclipse Project Luna - New and Noteworthy</title> |
| </head> |
| |
| <body> |
| |
| <h2>Java development tools</h2> |
| <ul> |
| <li><a href="#JavaEditor">Java Editor</a></li> |
| <li><a href="#JavaFormatter">Java Formatter</a></li> |
| <li><a href="#JavaCompiler">Java Compiler</a></li> |
| <li><a href="#JavaViewsAndDialogs">Java Views and Dialogs</a></li> |
| <li><a href="#Debug">Debug</a></li> |
| <li><a href="#JUnit">JUnit</a></li> |
| </ul> |
| <!-- *************************************************** --> |
| |
| <table class="news" cellpadding="10" cellspacing="0" summary="New and noteworthy items"> |
| <tbody> |
| |
| <!-- ******************* Java Editor ************************************* --> |
| <tr> |
| <td id="JavaEditor" class="section" colspan="2"> |
| <h2>Java Editor</h2> |
| </td> |
| </tr> |
| |
| <tr id="convert-compliance-JRE-1.8"> |
| <td class="title"><img src="images/java8.png" alt="" /> Quick fix to change project compliance and JRE to 1.8</td> |
| <td class="content">A quick fix <b>Change project compliance and JRE to 1.8</b> is provided to quickly change the current project to be compatible with Java 8. |
| <p> |
| <img src="images/quickfix-change-compliance-1.8.png" alt="" /> |
| </p> |
| </td> |
| </tr> |
| |
| <tr id="migrate-anonymous-lambda"> |
| <td class="title"><img src="images/java8.png" alt="" /> Migrate anonymous class creations to lambda expressions and back</td> |
| <td class="content">You can convert anonymous class creations to lambda expressions (and back) by invoking the <b>Quick Assists (Ctrl+1)</b>: |
| <ul> |
| <li>Convert to lambda expression</li> |
| <li>Convert to anonymous class creation</li> |
| </ul> |
| <p>Before:</p> |
| <p> |
| <img src="images/convert-to-lambda-1.png" alt="anonymous class with a 1-line method body" /> |
| </p> |
| <p> |
| After the Quick Assist (<b>Ctrl+1</b>), the 6 lines are condensed into 1: |
| </p> |
| <p> |
| <img src="images/convert-to-lambda-2.png" alt="lambda expression -- everything on 1 line" /> |
| </p> Or invoke <b>Source > Clean Up...</b>, use a custom profile, and on the <b>Configure...</b> dialog select <b>Convert functional interface instances</b> and <b>Use lambda where |
| possible</b> on the <b>Code Style</b> tab. |
| </td> |
| </tr> |
| |
| <tr id="change-body-block-to-expression"> |
| <td class="title"><img src="images/java8.png" alt="" /> Change lambda expression body block to expression and back</td> |
| <td class="content">You can convert the body of a lambda expression from block to expression (and back) by invoking the <b>Quick Assists (Ctrl+1)</b>: |
| <ul> |
| <li>Change body expression to block |
| <p> |
| <img src="images/expression-to-block.png" alt="Change body expression to block" /> |
| </p> |
| </li> |
| <li>Change body block to expression |
| <p> |
| <img src="images/block-to-expression.png" alt="Change body block to expression" /> |
| </p> |
| </li> |
| </ul> |
| </td> |
| </tr> |
| |
| <tr id="view-method-implemented"> |
| <td class="title"><img src="images/java8.png" alt="" /> View the method implemented by the functional interface instances</td> |
| <td class="content">To view the method implemented by the functional interface instances, you can hover on: |
| <ul> |
| <li>'<code>-></code>' in a lambda expression |
| </li> |
| </ul> |
| <p> |
| <img src="images/hover-on-lambda.png" alt="Hover on '->' in lambda to show functional method" /> |
| </p> |
| <ul> |
| <li>'<code>::</code>' in a method reference |
| </li> |
| </ul> |
| <p> |
| <img src="images/hover-on-method-reference.png" alt="Hover on '::' in method reference to view functional method" /> |
| </p> |
| </td> |
| </tr> |
| |
| <tr id="navigate-method-declaration"> |
| <td class="title"><img src="images/java8.png" alt="" /> Navigate to the functional method declaration</td> |
| <td class="content">To navigate to the functional method declaration, hold <b>Ctrl</b>, move the mouse pointer over '<code>-></code>' or '<code>::</code>', and click the hyperlink. |
| <ul> |
| <li>'<code>-></code>' in a lambda expression: |
| </li> |
| </ul> |
| <p> |
| <img src="images/navigate-from-lambda.png" alt="" /> |
| </p> |
| <ul> |
| <li>'<code>::</code>' in a method reference: |
| </li> |
| </ul> |
| <p> |
| <img src="images/navigate-from-method-reference.png" alt="" /> |
| </p> |
| </td> |
| </tr> |
| |
| |
| <tr id="quickfix-create-for-loop"> |
| <td class="title">Quick Fixes to create 'for' loops</td> |
| <td class="content">A set of new quick fixes can create <code>for</code> loops that iterate over a given expression. |
| <p>For arrays:</p> |
| <ul> |
| <li>Create an enhanced <code>for</code> loop |
| </li> |
| <li>Create a <code>for</code> loop using an index |
| </li> |
| </ul> |
| <p> |
| <a href="images/quickfix-create-for-loop-array.txt"><img src="images/quickfix-create-for-loop-array.png" alt="" /></a> |
| </p> For <code>Collection</code>s: |
| <ul> |
| <li>Create an enhanced <code>for</code> loop |
| </li> |
| <li>Create a <code>for</code> loop using an <code>Iterator</code></li> |
| </ul> For <code>List</code>s: |
| <ul> |
| <li>Create a <code>for</code> loop using an index and <code>get(i)</code></li> |
| </ul> |
| <p> |
| <a href="images/quickfix-create-for-loop-collection.txt"><img src="images/quickfix-create-for-loop-collection.png" alt="" /></a> |
| </p> |
| </td> |
| </tr> |
| |
| <tr id="syntax-color"> |
| <td class="title">Enabled coloring of variables</td> |
| <td class="content">Parameter variables and local variables are now colored by default: |
| <p> |
| <img src="images/variable-coloring.png" alt="" /> |
| </p> This can be disabled or configured with different colors and styles on the <b>Java > Editor > Syntax Coloring</b> preference page. |
| </td> |
| </tr> |
| |
| <!-- ******************* Java Formatter ************************************* --> |
| <tr> |
| <td id="JavaFormatter" class="section" colspan="2"> |
| <h2>Java Formatter</h2> |
| </td> |
| </tr> |
| |
| <tr id="formatter-for-lambda"> |
| <td class="title"><img src="images/java8.png" alt="" /> Option to control lambda code formatting</td> |
| <td class="content">New options are provided in the formatter page to configure the formatting of lambda expressions. |
| <ul> |
| <li>Configure the position of braces within lambda body: |
| <p> |
| <img src="images/formatter-braces-lambda.png" alt="" /> |
| </p> |
| </li> |
| <li>Configure whitespace before and after the arrow operator of lambda: |
| <p> |
| <img src="images/formatter-whitespace-lambda.png" alt="" /> |
| </p> |
| </li> |
| </ul> |
| <p> |
| Formatter profiles can be configured on the <b>Java > Code Style > Formatter</b> preference page. |
| </p> |
| </td> |
| </tr> |
| |
| |
| <!-- ******************* Java Compiler ************************************* --> |
| <tr> |
| <td id="JavaCompiler" class="section" colspan="2"> |
| <h2>Java Compiler</h2> |
| </td> |
| </tr> |
| |
| <tr id="java-8"> |
| <td class="title"><img src="images/java8.png" alt="" /> Java 8</td> |
| <td class="content"><a href="http://docs.oracle.com/javase/8/">Java™ 8</a> is here, and JDT fully supports it. The Eclipse compiler for Java (ECJ) implements all the new Java 8 <a |
| href="http://docs.oracle.com/javase/8/docs/technotes/guides/language/enhancements.html">language enhancements</a>.</td> |
| </tr> |
| |
| <tr id="generate-methodparameters"> |
| <td class="title"><img src="images/java8.png" alt="" /> Option to control generation of method parameter attributes in class files</td> |
| <td class="content">In 1.8 compliance mode, you can enable the generation of method parameter attributes in class files: |
| <p> |
| <img src="images/store-method-parameters.png" alt="Option to store method parameters in class files" /> |
| </p> |
| </td> |
| </tr> |
| |
| <tr id="contrib-jres"> |
| <td class="title">Contributed VMs are more recognizable</td> |
| <td class="content">You can't remove VMs that have been contributed to Eclipse via the <code>org.eclipse.jdt.launching.vmInstalls</code> extension point.This fact is now more |
| recognizable: |
| <p> |
| <img src="images/contrib-vm.png" alt="The Installed JREs preference page showing a contributed VM install" /> |
| </p> |
| </td> |
| </tr> |
| |
| <tr id="null-types-annotations"> |
| <td class="title"><img src="images/java8.png" alt="" /> Null type annotations</td> |
| <td class="content">With the advent of "type annotations" as introduced in Java 8 via JSR 308, JDT takes null pointer analysis to the next level. |
| <p> |
| This feature requires a set of nullness annotations declared with |
| <code>@Target({TYPE_USE})</code> |
| , which JDT ships as version 2.0.0 of the <a href="http://help.eclipse.org/luna/topic/org.eclipse.jdt.doc.isv/reference/api/org/eclipse/jdt/annotation/package-summary.html"><code>org.eclipse.jdt.annotation</code></a> |
| bundle. |
| </p> |
| <p>With these annotations, nullness can be considered as an intrinsic part of the type system, allowing the compiler to perform null type checking along with each task of type checking. |
| This is a major step towards systematically detecting all possible NullPointerExceptions in a program.</p> |
| <p>The most obvious benefit is in annotating type arguments of generic types:</p> |
| <p> |
| <a href="images/generics_unsafeSingleton.txt"><img src="images/generics_unsafeSingleton.png" alt="null annotated generics (1)" /></a> |
| </p> |
| <p> |
| The example shows diverse usage of null-annotated type arguments. While most of the code has been checked to be safe, the compiler directly points out one obvious bug: |
| <code>in</code> |
| is declared with a nullable type, and hence cannot be passed into |
| <code>add()</code> |
| of a list of nonnull elements. |
| </p> |
| <p> |
| <a href="images/generics_unsafePredicateCall.txt"><img src="images/generics_unsafePredicateCall.png" alt="null annotated generics (2)" /></a> |
| </p> |
| <p> |
| In this variant an error is detected by recognizing that |
| <code>string</code> |
| has been extracted from a list that may contain nulls, hence passing this value into a Predicate expecting a nonnull argument is wrong. |
| </p> |
| <p> |
| For a comprehensive description of type annotation based null analysis see the <a |
| href="http://help.eclipse.org/luna/topic/org.eclipse.jdt.doc.user/tasks/task-using_null_type_annotations.htm">online help</a>. |
| </p> |
| <p> |
| While potentially, the new approach could lead to an explosion of the number of annotations, also <a |
| href="http://help.eclipse.org/luna/topic/org.eclipse.jdt.doc.isv/reference/api/org/eclipse/jdt/annotation/NonNullByDefault.html"><code>@NonNullByDefault</code></a> has become much |
| more powerful, such that programs not using any null values can be fully checked with just a single annotation: |
| </p> |
| <p> |
| <a href="images/generics_defaults.txt"><img src="images/generics_defaults.png" alt="null annotated generics (2)" /></a> |
| </p> |
| <p> |
| The |
| <code>@NonNullByDefault</code> |
| annotation in line 7 affects most types in the example (with the exception of local variables, which are inferred using flow analysis). The compiler directly points out the single bug in |
| the |
| <code>safe_</code> |
| methods: the type argument of list |
| <code>result</code> |
| defaults to ' |
| <code>@NonNull String</code> |
| ', hence passing null to its |
| <code>add()</code> |
| method is now wrong. |
| </p> |
| <p> |
| In line 27 all null-defaults are canceled for the scope of method |
| <code>unprotectedClient()</code> |
| . Here we simulate the interface between un-annotated (legacy) code and code governed by |
| <code>@NonNullByDefault</code> |
| . We can observe that all arguments and local variables from the legacy code require unchecked conversions when being passed into the annotated code. In particular note that |
| <code>myStrings</code> |
| lacks two annotations required by the method |
| <code>safeFilter()</code> |
| : the List should be nonnull, and so should be its type argument. |
| </p> |
| </td> |
| </tr> |
| |
| <tr id="migrating-null-annotations"> |
| <td class="title"><img src="images/java8.png" alt="" /> Migrating projects using null annotations for use in Luna</td> |
| <td class="content">The switch from declaration annotations (Java 5) to null type annotations (Java 8) brings a few unavoidable incompatibilities. Developers already using null |
| annotations are advised to carefully read the <a href="http://help.eclipse.org/luna/topic/org.eclipse.jdt.doc.user/tasks/task-using_null_type_annotations.htm#compatibility">compatibility |
| notes</a>. |
| <p>Main points to observe:</p> |
| <dl> |
| <dt> |
| <a href="http://help.eclipse.org/luna/topic/org.eclipse.jdt.doc.user/tasks/task-using_null_type_annotations.htm#compatibility_configuration">Project configuration</a> |
| </dt> |
| <dd> |
| No matter if you are adopting null type annotations or continue to use old-style null annotations: always refer to the |
| <code>org.eclipse.jdt.annotation</code> |
| bundle using a suitable version range, either |
| <code>[1.1.0,2.0.0)</code> |
| for declaration annotations or |
| <code>[2.0.0,3.0.0)</code> |
| for type annotations. This is important, because Eclipse now ships with both versions of the annotation bundle.<br /> As an alternative, OSGi/plug-in projects may use a <a |
| href="http://help.eclipse.org/luna/topic/org.eclipse.pde.doc.user/guide/tools/file_wizards/new_target_definition.htm">target definition</a> for explicitly selecting the appropriate |
| version of the annotation bundle. |
| </dd> |
| <dt> |
| <a href="http://help.eclipse.org/luna/topic/org.eclipse.jdt.doc.user/tasks/task-using_null_type_annotations.htm#compatibility_syntax">Syntax changes</a> |
| </dt> |
| <dd>When migrating to null type annotations, your code may need to be changed if you have null annotations attached to an array type or to a qualified type reference. The latter may |
| simply create a new compile error, while the former implicitly changes its meaning.</dd> |
| </dl> |
| </td> |
| </tr> |
| |
| <tr id="ecj-needs-1.5"> |
| <td class="title">ECJ requires 1.6 JRE</td> |
| <td class="content">The JDT Core project has moved to Java 1.6 compliance level. This means the command line compiler now requires JRE 1.6 or above to run.</td> |
| </tr> |
| |
| <tr id="man-page-batch-compiler"> |
| <td class="title">A man page is available for ECJ batch compiler</td> |
| <td class="content">A UNIX like man page is available for the batch compiler. This man page essentially lists down the options and the corresponding usage information as found in this <a |
| href="http://help.eclipse.org/luna/topic/org.eclipse.jdt.doc.user/tasks/task-using_batch_compiler.htm">section</a>. |
| <p>Information in the man file can be read by the command "man <path_to_ecj.1>" in command prompt mode.</p> |
| </td> |
| </tr> |
| |
| <!-- ******************* Java Views and Dialogs ************************************* --> |
| <tr> |
| <td id="JavaViewsAndDialogs" class="section" colspan="2"> |
| <h2>Java Views and Dialogs</h2> |
| </td> |
| </tr> |
| |
| <tr id="search-limit-method-reference-expressions"> |
| <td class="title"><img src="images/java8.png" alt="" /> Option to fine-grain Java search to limit to method reference expressions</td> |
| <td class="content">The Java search for method and constructor can now be limited to method reference expressions. |
| <p> |
| This option can be configured by clicking the hyperlink next to <b>Search > Java Search > Limit To > Match locations</b>: |
| </p> |
| <p> |
| <img src="images/search-limitto-method-reference-expression.png" alt="" /> |
| </p> |
| </td> |
| </tr> |
| |
| |
| <!-- *********************** Debug ******************************** --> |
| <tr> |
| <td id="Debug" class="section" colspan="2"> |
| <h2>Debug</h2> |
| </td> |
| </tr> |
| |
| <tr id="java8-debug-support"> |
| <td class="title"><img src="images/java8.png" alt="" /> Java 8 debug support</td> |
| <td class="content">Java Debugger has been enhanced to support Java 8 key features like: |
| <ul> |
| <li>Evaluating expressions and variables from the context of interface methods</li> |
| <li>Java Application can now be executed from the static main method in interface (without <b>public</b> modifier also) |
| </li> |
| <li>Breakpoints can be added inside lambda expressions</li> |
| </ul> See <a |
| href="https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&classification=Eclipse&component=Debug&list_id=9280044&product=JDT&query_format=advanced&resolution=FIXED&short_desc=[1.8]&short_desc_type=allwordssubstr"> |
| here </a>for details on debugger enhancements. |
| </td> |
| </tr> |
| |
| <tr id="improved-hcr"> |
| <td class="title">Improved HCR for member types</td> |
| <td class="content">Hot Code Replace (HCR) has been improved in the Java debugger to ensure the correct method is dropped to in member types (inner / anonymous / local classes). |
| <p> |
| For more information see the <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=409023">bugzilla entry</a>. |
| </p> |
| </td> |
| </tr> |
| |
| |
| |
| <!-- ******************* JUnit ************************************* --> |
| <tr> |
| <td id="JUnit" class="section" colspan="2"> |
| <h2>JUnit</h2> |
| </td> |
| </tr> |
| |
| <tr id="junit-failure-trace-font"> |
| <td class="title">Failure trace font for the JUnit view</td> |
| <td class="content">The font for the failure trace in the JUnit view is now configurable on the <b>General > Appearance > Colors and Fonts</b> preference page. |
| <p> |
| <img src="images/junit-failure-trace-font.png" alt="" /> |
| </p> |
| </td> |
| </tr> |
| |
| <!-- ****************** END OF N&N TABLE ****************** --> |
| </tbody> |
| </table> |
| |
| <p align="center"> |
| <a href="eclipse-news-part1.php">Previous</a> <a href="eclipse-news-part3.php">Next</a> |
| </p> |
| |
| </body> |
| </html> |