<!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 2018, 2019. This page is made available under license. For full details see the LEGAL in the documentation book 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="news.css" type="text/css"/>
<style type="text/css">
body {max-width: 900px;}
table.news col.title {width: 30%;}
/*img {max-width: 520px;}*/
table.news {table-layout: fixed; border-collapse: collapse; width: 100%;}
table.news td {border-top: solid thin black; padding: 10px; overflow: visible;}
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; font-weight: bold;}
table.news tr td.content {vertical-align: top;}
ul {padding-left: 13px;}
</style>
<title>Eclipse Project 4.19 - New and Noteworthy</title>
</head>

<body>
<h2>Java development tools</h2>
<ul>
	<!--<li><a href="#JavaXX">Java&trade; XX Support</a></li>-->
	<li><a href="#JUnit">JUnit</a></li>
	<li><a href="#JavaEditor">Java Editor</a></li>
	<li><a href="#JavaViewsAndDialogs">Java Views and Dialogs</a></li>
	<li><a href="#JavaFormatter">Java Formatter</a></li>
	<li><a href="#Debug">Debug</a></li>
	<li><a href="#JDTDev">JDT Developers</a></li>
</ul>

<!-- ****************** START OF N&N TABLE ****************** -->
<table class="news">
<colgroup>
  <col class="title" />
  <col />
</colgroup>
<tbody>

  <!-- ******************* Java XX Support ************************************* -->
  <!--
  <tr>
    <td id="JavaXX" class="section" colspan="2">
    <h2>Java&trade; XX Support </h2>
    </td>
  </tr>
  -->
  <!-- ******************* End of Java XX Support ************************************* -->

  <!-- ******************* JUnit ************************************* -->
  <tr>
    <td id="JUnit" class="section" colspan="2">
    <h2>JUnit</h2>
    </td>
  </tr>
  <!-- ******************* End of JUnit ************************************* -->

  <!-- ******************* Java Editor ************************************* -->
  <tr>
    <td id="JavaEditor" class="section" colspan="2">
    <h2>Java Editor</h2>
    </td>
  </tr>

  <tr id="extract-increment"> <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=570011 -->
    <td class="title"><a href="#extract-increment">Extract increment</a></td>
    <td class="content">
      A new clean up has been added that moves increment or decrement outside an expression.
      <p>
        It moves before the prefix expressions, it moves after the postfix expressions, it converts as postfix expressions, it does not move increments from loop condition and it does not cleanup several increments in the same statement.
      </p>
      <p>
        To apply the clean up, select <b>Extract increment/decrement from statement</b> check box on the <b>Code Style</b> tab in your clean up profile.
      </p>
      <p><img src="images/code-style-preferences.png" alt="Preferences" width="800 px"/></p>
      <p>
        For the given code:
      </p>
      <p><img src="images/extract-increment-before.png" alt="Before"/></p>
      <p>
        One gets:
      </p>
      <p><img src="images/extract-increment-after.png" alt="After"/></p>
    </td>
  </tr>

  <tr id="java-feature"> <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=569711 -->
    <td class="title"><a href="#java-feature">Java Feature Clean Ups</a></td>
    <td class="content">
      A new tab named <b>Java Feature</b> has been added to the clean up preferences. It lists the clean up options that introduce the use of language features from different Java versions. Relevant clean up options from other tabs have also been moved to this new tab. 
      <p>
        You can use these clean ups while upgrading the Java version in your code.
      </p>
      <p><img src="images/multi-catch-preferences.png" alt="Preferences" width="800 px"/></p>
    </td>
  </tr>

  <tr id="pattern-matching"> <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=566001 -->
    <td class="title"><a href="#pattern-matching">Pattern matching for instanceof</a></td>
    <td class="content">
      A new clean up has been added that uses pattern matching for the <code>instanceof</code> operator when possible.
      <p>
        It is only applicable for Java 15 or higher when preview features are enabled.
      </p>
      <p>
        To apply the clean up, select <b>Pattern matching for instanceof</b> check box on the <b>Java Feature</b> tab in your clean up profile.
      </p>
      <p>
        For the given code:
      </p>
      <p><img src="images/pattern-matching-before.png" alt="Before"/></p>
      <p>
        One gets:
      </p>
      <p><img src="images/pattern-matching-after.png" alt="After"/></p>
    </td>
  </tr>

  <tr id="multi-catch"> <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=569879 -->
    <td class="title"><a href="#multi-catch">Multi-catch clean up</a></td>
    <td class="content">
      A new clean up has been added that converts catch clauses with same body to Java 7's multi-catch.
      <p>
        The feature is enabled only with Java 7 or higher.
      </p>
      <p>
        To apply the clean up, select <b>Use Multi-catch</b> check box on the <b>Java Feature</b> tab in your clean up profile.
      </p>
      <p><img src="images/multi-catch-preferences.png" alt="Preferences" width="800 px"/></p>
      <p>
        For the given code:
      </p>
      <p><img src="images/multi-catch-before.png" alt="Before"/></p>
      <p>
        One gets:
      </p>
      <p><img src="images/multi-catch-after.png" alt="After"/></p>
    </td>
  </tr>

  <tr id="convert-fields"> <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=570029 -->
    <td class="title"><a href="#convert-fields">Convert fields into local variables</a></td>
    <td class="content">
      A new clean up has been added that refactors a field into a local variable if its use is only local.
      <p>
        The previous value should not be read. The field should be <code>private</code>. The field should not be <code>final</code>. The field should be primitive. The field should not have annotations.
      </p>
      <p>
        To apply the clean up, select <b>Convert fields into local variables if the use is only local</b> check box on the <b>Optimization</b> tab in your clean up profile.
      </p>
      <p><img src="images/optimization-preferences.png" alt="Preferences" width="800 px"/></p>
      <p>
        For the given code:
      </p>
      <p><img src="images/convert-fields-before.png" alt="Before"/></p>
      <p>
        One gets:
      </p>
      <p><img src="images/convert-fields-after.png" alt="After"/></p>
    </td>
  </tr>

  <tr id="static-inner-class"> <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=569847 -->
    <td class="title"><a href="#static-inner-class">Static inner class</a></td>
    <td class="content">
      A new clean up has been added that makes inner class <code>static</code> if it doesn't use top level class members.
      <p>
        To apply the clean up, select <b>Make inner classes static where possible</b> check box on the <b>Optimization</b> tab in your clean up profile.
      </p>
      <p><img src="images/optimization-preferences.png" alt="Preferences" width="800 px"/></p>
      <p>
        For the given code:
      </p>
      <p><img src="images/static-inner-class-before.png" alt="Before"/></p>
      <p>
        One gets:
      </p>
      <p><img src="images/static-inner-class-after.png" alt="After"/></p>
    </td>
  </tr>

  <tr id="primitive-parsing"> <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=570168 -->
    <td class="title"><a href="#primitive-parsing">Primitive parsing</a></td>
    <td class="content">
      A new clean up has been added that avoids to create primitive wrapper when parsing a string.
      <p>
        The object should be used as a primitive and not as a wrapper.
      </p>
      <p>
        To apply the clean up, select <b>Primitive parsing</b> check box on the <b>Optimization</b> tab in your clean up profile.
      </p>
      <p><img src="images/optimization-preferences.png" alt="Preferences" width="800 px"/></p>
      <p>
        For the given code:
      </p>
      <p><img src="images/primitive-parsing-before.png" alt="Before"/></p>
      <p>
        One gets:
      </p>
      <p><img src="images/primitive-parsing-after.png" alt="After"/></p>
    </td>
  </tr>

  <tr id="control-flow-merge"> <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=568656 -->
    <td class="title"><a href="#control-flow-merge">Pull down common code from if/else statement</a></td>
    <td class="content">
      A new clean up has been added that extracts common code from the end of an <code>if</code> / <code>else if</code> / <code>else</code> control flow.
      <p>
        Ultimately it removes the empty and passive <code>if</code> conditions.
      </p>
      <p>
        The control flow should have an <code>else</code> clause and the duplicate code should not rely on variables declared in the block.
      </p>
      <p>
        The statement matching performs a deep analysis. All the blocks should end with the same set of statements, or the blocks with different code should fall through with a jump statement (<code>return</code>, <code>throw</code>, <code>continue</code> or <code>break</code>).
      </p>
      <p>
        To apply the clean up, select <b>Pull down common code from if/else statement</b> check box on the <b>Duplicate code</b> tab in your clean up profile.
      </p>
      <p><img src="images/control-flow-merge-preferences.png" alt="Preferences" width="800 px"/></p>
      <p>
        For the given code:
      </p>
      <p><img src="images/control-flow-merge-before.png" alt="Before cleaning similar tails of blocks"/></p>
      <p>
        One gets:
      </p>
      <p><img src="images/control-flow-merge-after.png" alt="After cleaning similar tails of blocks"/></p>
      <p>
        And for the given code where all tails of blocks are identical except one block which falls through:
      </p>
      <p><img src="images/control-flow-merge-jump-statement-before.png" alt="Before cleaning jump statement"/></p>
      <p>
        The identical tails of blocks have been pulled down from the control flow and the falling through block has been left as it is:
      </p>
      <p><img src="images/control-flow-merge-jump-statement-after.png" alt="After cleaning jump statement"/></p>
    </td>
  </tr>

  <tr id="substring"> <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=569800 -->
    <td class="title"><a href="#substring">String.substring()</a></td>
    <td class="content">
      A new clean up has been added that removes the second <code>substring()</code> parameter if this parameter is the length of the string. It's the default value.
      <p>
        It must reference the same expression.
      </p>
      <p>
        The expression must be passive.
      </p>
      <p>
        To apply the clean up, select <b>Redundant String.substring() parameter</b> check box on the <b>Unnecessary code</b> tab in your clean up profile.
      </p>
      <p><img src="images/unnecessary-code-preferences.png" alt="Preferences" width="800 px"/></p>
      <p>
        For the given code:
      </p>
      <p><img src="images/substring-before.png" alt="Before"/></p>
      <p>
        One gets:
      </p>
      <p><img src="images/substring-after.png" alt="After"/></p>
    </td>
  </tr>

  <tr id="unreachable-block"> <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=569845 -->
    <td class="title"><a href="#unreachable-block">Unreachable block</a></td>
    <td class="content">
      A new clean up has been added that detects two <code>if</code> conditions that are identical and removes the second one.
      <p>
        The conditions should be passive.
      </p>
      <p>
        No exceptions should be awaited.
      </p>
      <p>
        It doesn't create unreachable code below the <code>if</code> statement which would create a compile error.
        That is to say it avoids the case where only the removed block doesn't fall through, all the other cases fall through,
        there are an <code>else</code> clause (not only <code>if</code>/<code>else</code> clauses)
        and a statement after the control workflow.
      </p>
      <p>
        To apply the clean up, select <b>Unreachable block</b> check box on the <b>Unnecessary code</b> tab in your clean up profile.
      </p>
      <p><img src="images/unnecessary-code-preferences.png" alt="Preferences" width="800 px"/></p>
      <p>
        For the given code:
      </p>
      <p><img src="images/unreachable-block-before.png" alt="Before"/></p>
      <p>
        One gets:
      </p>
      <p><img src="images/unreachable-block-after.png" alt="After"/></p>
    </td>
  </tr>

  <tr id="source-fixing"> <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=570773 -->
    <td class="title"><a href="#source-fixing">Source Fixing Clean Ups</a></td>
    <td class="content">
      A new tab named <b>Source Fixing</b> has been added to the clean up preferences. It lists the clean up options that fixes the behavior of the code. The <b>Compare with != 0 for bitwise expression</b> clean up option from <b>Code style</b> tab have also been moved to this new tab. 
      <p>
        ⚠️ Use it carefully. You may get an unexpected behavior. It may trigger zombie code. A zombie code is a dead code that is dead because an error occurs before. The day someone fixes the error, the zombie code comes back to life and alters the behavior. Although most of the cleanups need review, those ones need testing.
      </p>
      <p><img src="images/source-fixing-preferences.png" alt="Preferences" width="800 px"/></p>
    </td>
  </tr>

  <tr id="restricted-identifier-preference"> <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=569759 -->
    <td class="title"><a href="#restricted-identifier-preference">Coloring restricted identifiers</a></td>
    <td class="content">
      A new option named <b>Restricted identifiers</b> has been added under Java category in Java &gt; Editor &gt; Syntax Coloring preferences.
      <p>
         Some identifiers (e.g. var, yield, record etc.) are restricted identifiers because they are not allowed in some contexts.
         Semantic highlighting options for such identifiers can be controlled by the element <strong>Restricted identifiers</strong> 
         under <strong>Java</strong> category in <strong>Java</strong> &gt; <strong>Editor</strong> &gt; <strong>Syntax Coloring</strong> preference page.
      </p>
      <p><img src="images/restricted-identifier-preference.png" alt=""/></p>
    </td>
  </tr>
  <tr id="annotate-for-source-folders"> <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=509397 -->
    <td class="title"><a href="#annotate-for-source-folders">Externally annotate sources</a></td>
    <td class="content">
      The concept of external null annotations has been extended to apply to source folders, too.
      <p>
        External annotations had been <a href="https://www.eclipse.org/eclipse/news/4.5/jdt.php#external-annotations">introduced in Eclipse 4.5</a>
        in order to overlay not-editable library classes with null annotations to specify the null contract
        against which library calls should be analysed.
        You can now apply the same concept for another kind of classes that should not be edited: generated source code.
      </p>
      <p>
        In the <strong>Java Build Path</strong> dialog, also source folders now have a node "External annotations"
        where a path to Eclipse External Annotation files (.eea) can be configured.
      </p>
      <p><img src="images/annotate-sources-config.png" alt="Configure Annotation Path"/></p>
      <p>
        Given a project that is configured for annotation based null analysis, and given a Java class
        inside a source folder configured for external annotations, the editor now offers a quick assist (<strong>Ctrl+1</strong>)
        for annotating individual type references in the signatures of methods and fields.
      </p>
      <p><img src="images/annotate-sources-assist.png" alt="Configure Annotation Path"/></p>
      <p>
        The selected option will record that the return type should be interpreted as <code>@NonNull List&lt;Attribute&gt;</code>
        (the popup to the right showing the internal format how this annotation will be stored in an .eea file).
        With this annotation in place, the annotated signature will be shown in hovers and will be used for null analysis:
      </p>
      <p><img src="images/annotate-sources-effect.png" alt="Configure Annotation Path"/></p>
    </td>
  </tr>
  <tr id="create-permitted-type-declaration"> <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=570440 -->
    <td class="title"><a href="#create-permitted-type-declaration">Create permitted type declaration</a></td>
    <td class="content">
      You can use the following quick fixes (<strong>Ctrl+1</strong>) to create a new permitted class or interface declaration:
      <p><img src="images/create-permitted-type-declaration.png" alt=""/></p>
      <p>
      The created type will declare the sealed type as its super type and 
      it can be declared as final, non-sealed, or sealed with the available quick fixes for further inheritance control.
      </p>
    </td>
  </tr>
    <tr id="try-with-resources-quick-assist"> <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=570184 -->
    <td class="title"><a href="#try-with-resources-quick-assist">Quick assist to create try-with-resources</a></td>
    <td class="content">
      For expressions returning a type that is <code>AutoClosable</code> there's a new quick assist (<b>Ctrl+1</b>) available: <b>Assign to new local variable in try-with-resources</b>.
      <p><img src="images/try-with-resources-before.png" alt="Bef"/></p>
      <p>
      It creates a new try-with-resources block with the expression assigned to a resource variable.
      The variable type and name can be selected from a few suggestions:
      </p>
      <p><img src="images/try-with-resources-after.png" alt=""/></p>
      <p>
      The default hotkey sequence for this quick assist is <b>Ctrl+2</b> followed by <b>T</b>.
      </p>
    </td>
  </tr>
  <tr id="add-catch-to-try-with-resources-assists"> <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=570762 -->
    <td class="title"><a href="#add-catch-to-try-with-resources-assists">Add catch clause to try-with-resources assists</a></td>
    <td class="content">
      There are multiple assists to surround auto-closeable statements in a try-with-resources statement including <b>Surround with -> Try-with-resources Block</b>.  Now, all forms will add
      a <code>catch</code> clause for any exceptions (such as <code>IOException</code>) thrown by the auto-close if not already handled via an existing <code>catch</code> clause 
      or <code>throws</code> directive.  In the case where the existing code catches or throws an exception that sub-classes the exceptions of the new <code>catch</code> clause, an 
      additional <code>catch</code> clause will be added to rethrow the exception to ensure code logic remains consistent.
      <p><img src="images/add-catch-clause-to-try-with-resources-before.png" alt=""/></p>
      <p><img src="images/add-catch-clause-to-try-with-resources-after.png" alt=""/</p>
    </td>
  </tr>

  <!-- ******************* End of Java Editor ************************************* -->

  <!-- ******************* Java Views and Dialogs ************************************* -->
  <tr>
    <td id="JavaViewsAndDialogs" class="section" colspan="2">
    <h2>Java Views and Dialogs</h2>
    </td>
  </tr>
  
  <tr id="parallel-index-search"> <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=567521 -->
      <td class="title"><a href="#parallel-index-search">Parallel index search</a></td>
      <td class="content">
      	  A new preference option has been added and enabled by default:
      	  <b>Preferences &gt; Java &gt; Enable parallel index search</b>.  
      	  Depending on the available hardware, this option should improve performance 
      	  for all index based Java search operations, but could also lead to possible regressions. 
      	  To switch back to the old sequential index search, turn this option off: 
          <p>
            <img src="images/parallel-index-search.png" alt="" />
          </p>
      </td>
  </tr>
  
  <tr id="mockito-static-imports"> <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=562639 -->
      <td class="title"><a href="#mockito-static-imports">static import org.mockito.Mockito.*  available as favorite</a></td>
      <td class="content">
      	Imports for static org.mockito.Mockito.* are added to the Java favorites in the preferences under Java -> Editor -> Content Assists -> Favorites.
      	This way the organize imports action in the IDE will automatically add static imports to this class in your use the Mockito library in your tests.
       </td>
  </tr>
  
  <!-- ******************* End of Java Views and Dialogs ************************************* -->

  <!-- ******************* Java Compiler ************************************* -->
  <tr>
    <td id="JavaCompiler" class="section" colspan="2">
    <h2>Java Compiler</h2>
    </td>
  </tr>
  <!-- ******************* End of Java Compiler ************************************* -->

  <!-- ******************* Java Formatter ************************************* -->
  <tr>
    <td id="JavaFormatter" class="section" colspan="2">
    <h2>Java Formatter </h2>
    </td>
  </tr>
  <!-- ******************* End of Java Formatter ************************************* -->
  
  <!-- *********************** Debug ******************************** -->
  <tr>
    <td id="Debug" class="section" colspan="2">
    <h2>Debug</h2>
    </td>
  </tr>
 
  <tr id="toggle-tracepoints"> <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=569135 -->
      <td class="title"><a href="#toggle-tracepoints">Toggle tracepoints in editor ruler</a></td>
      <td class="content">
          A new "Toggle Tracepoint" context-menu entry has been added to the Java editor line ruler.
          Both the "Toggle Tracepoint" options i.e. the new context-menu entry and the existing option under "Run" menu have a new icon 
          and are now available for Java class files also along with Java source files.
          <p>
            <img src="images/toggle-tracepoints.png" alt="screenshot showing new menu" />
          </p>
      </td>

  </tr>
     <tr id="toggle-breakpoints-works-onlistwithabstract"> <!-- https://bugs.eclipse.org/bugs/show_bug.cgi?id=563208 -->
     <td class="title"><a href="#toggle-breakpoints-works-listofmethods-including-abstract">Toggle breakpoint on a list of methods including abstract method</a></td>
       <td class="content">
         You can now <b>Toggle Method Breakpoint</b> on a list of methods which includes an abstract method. 
          <p>
            <img src="images/debug-toggle-breakpoint.png" alt="screenshot showing enabled Toggle breakpoint" />
          </p>
      </td>
    </tr>
  
  <!--************************ End of Debug ******************************** -->

  <!-- *********************** JDT Developers ******************************** -->
  <tr>
    <td id="JDTDev" class="section" colspan="2">
    <h2>JDT Developers</h2>
    </td>
  </tr>
  <!-- *********************** End of JDT Developers ******************************** -->
</tbody>
</table>
<!-- ****************** END OF N&N TABLE ****************** -->

<script type="text/javascript" src="scripts.js"></script>
  <p style="text-align:center">
    <a href="platform.php">Previous</a> <a style="margin:1em" href=".">Up</a> <a href="platform_isv.php">Next</a>
  </p>
</body>
</html>
