<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
   <meta name="Author" content="IBM">
   <title>JDT/Core Release Notes 3.6</title>
   <link rel="stylesheet" href="jdt_core_style.css" charset="iso-8859-1" type="text/css">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<table border=0 cellspacing=5 cellpadding=2 width="100%" >
  <tr>
    <td align="left" width="72%" class="title1">
      <font size="+3"><b>jdt core - build notes 3.6 stream</b></font>
    </td>
  </tr>
  <tr><td align="left" width="72%" class="title2"><font size="-2">Java development tools core</font></td></tr>
  <tr><td>&nbsp;</td></tr>
  <tr>
  	<td class="title3">
	  <font size="-1">
	  Here are the build notes for the Eclipse JDT/Core plug-in project
	  <a href="http://www.eclipse.org/jdt/core/index.php"><b>org.eclipse.jdt.core</b></a>,
	  describing <a href="https://bugs.eclipse.org/bugs" target=new>bug</a> resolution and substantial changes in the <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core"><b>HEAD</b></a> branch.
	  For more information on 3.6 planning, please refer to <a href="http://www.eclipse.org/jdt/core/r3.6/index.php#release-plan">JDT/Core release plan</a>,
	  the next <a href="http://www.eclipse.org/jdt/core/r3.6/index.php#milestone-plan">milestone plan</a>,
	  the overall <a href="http://www.eclipse.org/eclipse/development/eclipse_project_plan_3_6.html">official plan</a>,
	  or the <a href="http://www.eclipse.org/eclipse/platform-releng/buildSchedule.html">build schedule</a>.
	  This present document covers all changes since Release 3.5 (also see a summary of <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.jdt.core/notes/API_changes.html">API changes</a>).
	  <br>Maintenance of previous releases of JDT/Core is performed in parallel branches:
		  <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=R3_5_maintenance">R3.5.x</a>,
		  <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=R3_4_maintenance">R3.4.x</a>,
		  <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=R3_3_maintenance">R3.3.x</a>,
		  <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=R3_2_maintenance">R3.2.x</a>,
		  <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=R3_1_maintenance">R3.1.x</a>,
		  <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=R3_0_maintenance">R3.0.x</a>,
		  <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=R2_1_maintenance">R2.1.x</a>,
		  <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=R2_0_1">R2.0.x</a>,
		  <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=ECLIPSE_1_0">R1.0.x</a>.
	  </font>
	</td>
  </tr>
</table>
<a name="v_A77_R36x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6.3 - March 7, 2011 - 3.6.3
<br>Project org.eclipse.jdt.core v_A77_R36x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A77_R36x">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Bundle version has been increment to 3.6.3.qualifier.</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=336934">336934</a>
[compiler] NPE in Scope.getTypeOrPackage

<a name="v_A76_R36x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6.2 - February 8, 2011 - 3.6.2
<br>Project org.eclipse.jdt.core v_A76_R36x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A76_R36x">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=336544">336544</a>
[regression][compiler] Source flagged as dead code incorrectly.

<a name="v_A75_R36x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6.2 - February 3, 2011
<br>Project org.eclipse.jdt.core v_A75_R36x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A75_R36x">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Bundle version has been increment to 3.6.2.qualifier.</li>
</ul>

<h3>Problem Reports Fixed</h3>

<a name="v_A74_R36x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6.2 - January 19, 2011
<br>Project org.eclipse.jdt.core v_A74_R36x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A74_R36x">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Only copyrights update with the previous version.</li>
</ul>
<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329288">329288</a>
Fetching parameter names literally hangs on a class with a lot of methods

<a name="v_A73_R36x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6.2 - January 12, 2011
<br>Project org.eclipse.jdt.core v_A73_R36x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A73_R36x">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327654">327654</a>
FUP of bug 317264: Refactoring is not possible if the commons-lang.jar is in the path

<a name="v_A72_R36x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6.2 - December 17, 2010
<br>Project org.eclipse.jdt.core v_A72_R36x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A72_R36x">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323514">323514</a>
[indexing] The Java Indexer is taking longer to run in eclipse 3.6 when opening projects

<a name="v_A71_R36x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6.2 - November 16, 2010
<br>Project org.eclipse.jdt.core v_A71_R36x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A71_R36x">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330081">330081</a>
[compiler] ArrayIndexOutOfBoundsException when Switched from C/C++ Perspective to Java Perspective

<a name="v_A70_R36x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6.2 - November 16, 2010
<br>Project org.eclipse.jdt.core v_A70_R36x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A70_R36x">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=328400">328400</a>
TextEdit computed incorrectly for inserting annotation before package declaration
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=326354">326354</a>
[3.6][compiler][regression] Compiler in 3.6 and 3.6.1 generates bad code

<a name="v_A69_R36x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6.2 - October 6, 2010
<br>Project org.eclipse.jdt.core v_A69_R36x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A69_R36x">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=326434">326434</a>
New issues with NPE refreshing external folders with 3.6.1

<a name="v_A68_R36x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6.1 - September 1, 2010 - 3.6.1
<br>Project org.eclipse.jdt.core v_A68_R36x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A68_R36x">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324154">324154</a>
NPE in FlowContext while building

<a name="v_A67_R36x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6.1 - September 1, 2010
<br>Project org.eclipse.jdt.core v_A67_R36x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A67_R36x">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320754">320754</a>
[formatter] formatter:off/on tags does not work correctly

<a name="v_A66_R36x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6.1 - August 27, 2010
<br>Project org.eclipse.jdt.core v_A66_R36x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A66_R36x">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323693">323693</a>
[1.5][compiler] Compiler fails to diagnose name clash

<a name="v_A65_R36x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6.1 - August 25, 2010
<br>Project org.eclipse.jdt.core v_A65_R36x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A65_R36x">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317264">317264</a>
[search] Refactoring is impossible with commons.lang added to project
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=321926">321926</a>
Erroneously deems null check conditional branch to be dead code, and produces incorrect bytecode
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=308402">308402</a>
[index] PatternSearchJob ignores participant index entries
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320802">320802</a>
ASTParser.createASTs(..) fails silently on multiple missing parameter types.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=322154">322154</a>
Compiler bug that does not occur in Galileo 3.5.2

<a name="v_A64_R36x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6.1 - August 11, 2010
<br>Project org.eclipse.jdt.core v_A64_R36x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A64_R36x">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=322001">322001</a>
[1.5][compiler] Name Clash error occurs
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320167">320167</a>
Auto-Activation works only once

<a name="v_A63_R36x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6.1 - July 28, 2010
<br>Project org.eclipse.jdt.core v_A63_R36x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A63_R36x">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320414">320414</a>
Compiler produces incorrect bytecode for null pointer check
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319603">319603</a>
[1.5][compiler] eclipse fails with 2 generics methods with the same name while javac succeeds

<a name="v_A62_R36x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6.1 - July 21, 2010
<br>Project org.eclipse.jdt.core v_A62_R36x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A62_R36x">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=318020">318020</a>
[compiler] wrong initialization flow info with if (true) throw... pattern in else block
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319900">319900</a>
StringLiteral#setLiteralValue needlessly escapes apostrophes (')

<a name="v_A61_R36x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6.1 - July 14, 2010
<br>Project org.eclipse.jdt.core v_A61_R36x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A61_R36x">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306464">306464</a>
NPE in ProblemReporter.missingTypeInMethod(ProblemReporter.java:5113)
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317841">317841</a>
[incremental build] unnecessary 'structural changes' due to annotation parameters

<a name="v_A60_R36x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6.1 - July 7, 2010
<br>Project org.eclipse.jdt.core v_A60_R36x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A60_R36x">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313153">313153</a>
Too many blocked &quot;Refreshing external folders&quot; jobs (FUP of bug 302295)
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317468">317468</a>
Adding elements to an enum body with trailing comma generates bad code
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313668">313668</a>
[search] Call hierarchy doesn't show all calls of the method in workspace
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317972">317972</a>
Fix for wrong usages of affect* and effect*
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316889">316889</a>
Internal compiler error: java.lang.NullPointerException with a specific use of recursive generics

<a name="v_A59_R36x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6.1 - June 24, 2010
<br>Project org.eclipse.jdt.core v_A59_R36x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A59_R36x">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313651">313651</a>
[formatter] format comments (differs between paste and save action)
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315978">315978</a>
Big regression, eclipse compiles my workspace in 3 mins instead of few seconds
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315732">315732</a>
[formatter] NullPointerException (always) on inserting a custom template proposal into java code when &quot;Use code formatter&quot; is on
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316456">316456</a>
[1.5][compiler] Annotation values can access private class members
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=314830">314830</a>
[compiler] Switching on a null expression doesn't always throw NullPointerException
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313825">313825</a>
Erroneous local variable's problems reported at surrounding ParenthesizedExpression

<a name="v_A58"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6 - June 3, 2010 - 3.6.0
<br>Project org.eclipse.jdt.core v_A58
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A58">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315568">315568</a>
improve Javadoc of SearchPattern#createPattern(String, int, int, int)

<a name="v_A57"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6RC4 - June 3, 2010 - 3.6.0 RC4
<br>Project org.eclipse.jdt.core v_A57
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A57">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Use default disabling/enabling tags in the samples of the Javadoc comments
of the formatter constants <code>FORMATTER_DISABLING_TAG</code> and
<code>FORMATTER_ENABLING_TAG</code>.</li>
<li>Fixed minor javadoc issues of <code>createStrictHierarchyScope()</code>.</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=314709">314709</a>
Clarify -encoding &lt;encoding name&gt; in jdt_api_compile.htm

<a name="v_A56"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6RC3 - May 27, 2010 - 3.6.0 RC3
<br>Project org.eclipse.jdt.core v_A56
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A56">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313890">313890</a>
Migration guide to 3.6 for containers with MANIFEST-referred entries
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313965">313965</a>
Breaking change in classpath container API

<a name="v_A55"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6RC3 - May 25, 2010
<br>Project org.eclipse.jdt.core v_A55
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A55">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313706">313706</a>
Replace ie. with i.e. in jdt.core documentation

<a name="v_A54"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6RC2 - May 20, 2010 - 3.6.0 RC2
<br>Project org.eclipse.jdt.core v_A54
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A54">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>
Added a new preference to force the formatter to try to keep nested expressions on one line.
<p>
This new preference is controlled with the option:</p>
<code>DefaultCodeFormatterConstants.FORMATTER_WRAP_OUTER_EXPRESSIONS_WHEN_NESTED</code>
<pre>
/**
 * FORMATTER / Option to wrap outer expressions in nested expressions
 *     - option id:         "org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested"
 *     - possible values:   { TRUE, FALSE }
 *     - default:           TRUE
 *
 * This option changes the formatter behavior when nested method calls are encountered.
 * Since 3.6, the formatter tries to wrap outermost method calls first to have a better output.
 * For example, let's say we are using the Eclipse built-in profile with a max line width=40+space for tab policy.
 * Then consider the following snippet:
 *
 * public class X01 {
 *     void test() {
 *         foo(bar(1, 2, 3, 4), bar(5, 6, 7, 8));
 *     }
 * }
 *
 * With this new strategy, the formatter will wrap the line earlier, between the arguments of the message call
 * for this example, and then it will allow to keep each nested call on a single line.
 * Hence, the output will be:
 *
 * public class X01 {
 *     void test() {
 *         foo(bar(1, 2, 3, 4),
 *             bar(5, 6, 7, 8));
 *     }
 * }
 *
 * Important notes:
 * 1. This new behavior is automatically activated (i.e. the default value for this preference is {@link #TRUE}).
 *    If the backward compatibility regarding previous versions' formatter behavior (i.e. before 3.6 version) is necessary,
 *    then the preference needs to be set to {@link #FALSE} to retrieve the previous formatter behavior.
 * 2. The new strategy currently only applies to nested method calls, but might be extended to other nested expressions in future versions
 * 
 * @see #TRUE
 * @see #FALSE
 * @since 3.6
 */
</pre>
See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313524">313524</a> for more details.
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313524">313524</a>
[formatter] Add preference for improved lines wrapping in nested method calls
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313109">313109</a>
@SuppressWarnings on multiple locals is marked unnecessary if any local is never used

<a name="v_A53"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6RC1 - May 12, 2010 - 3.6.0 RC1
<br>Project org.eclipse.jdt.core v_A53
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A53">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=312326">312326</a>
IllegalArgumentException using open type dialog
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=310159">310159</a>
Hang in JavaModel.getExternalTarget(JavaModel.java:333)

<a name="v_A52"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6RC1 - May 11, 2010
<br>Project org.eclipse.jdt.core v_A52
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A52">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=157847">157847</a>
NPE in WildcardBinding.computeUniqueKey during code assist
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=311849">311849</a>
[quick fix] @SuppressWarnings does not work as expected inside a for loop

<a name="v_A51"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6RC1 - May 8, 2010
<br>Project org.eclipse.jdt.core v_A51
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A51">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306170">306170</a>
[perfs] Regression for FullSourceWorkspaceTypeHierarchyTests#testPerfAllTypes()
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=298844">298844</a>
[formatter] New lines in empty method body wrong behavior
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=311864">311864</a>
[formatter] NPE with empty {@code }

<a name="v_A50"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6RC1 - May 6, 2010
<br>Project org.eclipse.jdt.core v_A50
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A50">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>
Added a new preference to switch on/off the usage of the disabling/enabling tags of the formatter.
<p>
This new preference is controlled with the option:</p>
<code>DefaultCodeFormatterConstants.FORMATTER_USE_ON_OFF_TAGS</code>
<pre>
/**
 * FORMATTER / Option to use the disabling and enabling tags defined respectively by the {@link #FORMATTER_DISABLING_TAG} and the {@link #FORMATTER_ENABLING_TAG} options.
 *     - option id:         "org.eclipse.jdt.core.formatter.use_on_off_tags"
 *     - possible values:   TRUE / FALSE
 *     - default:           FALSE
 * 
 * @since 3.6
 */
</pre>
See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=311582">311582</a> for more details.
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=311617">311617</a>
[formatter] provide default tags to enable/disable formatter
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=311582">311582</a>
[formatter] Master switch to enable/disable on/off tags
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=307040">307040</a>
Search Job with HierarchyScope on Object does not cancel
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302295">302295</a>
After associating source folder with rt.jar project refresh takes exceedingly long time.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=311048">311048</a>
AbortCompilation propagated from CompilationUnitProblemFinder.process()

<a name="v_A49"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6RC1 - May 4, 2010
<br>Project org.eclipse.jdt.core v_A49
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A49">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=310811">310811</a>
[perfs] Big regression on FullSourceWorkspaceFormatterTests#testFormatDefaultBigFile()

<a name="v_A48"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M7 - April 25, 2010 - 3.6.0 M7
<br>Project org.eclipse.jdt.core v_A48
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A48">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=310330">310330</a>
Add multiple encoding support for the batch compiler

<a name="v_A47"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M7 - April 25, 2010
<br>Project org.eclipse.jdt.core v_A47
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A47">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=309835">309835</a>
[formatter] adds blank lines on each run
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=310213">310213</a>
AIOOBE in IndexSelector.initializeIndexLocations()
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=309966">309966</a>
IType#getKey() does not work for unresolved local ITypes

<a name="v_A46"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M7 - April 23, 2010
<br>Project org.eclipse.jdt.core v_A46
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A46">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=59891">59891</a>
[formatter] improve lines wrapping in nested method calls
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306172">306172</a>
[perfs] Invalid test duration for FullSourceWorkspaceTypeHierarchyTests#testPerSuperTypes()
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=267091">267091</a>
[content assist] After 'implements' interface members are not proposed
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=261534">261534</a>
content assist after instanceof should also work after &amp;&amp;
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=308980">308980</a>
[content assist]An initializer inside a non-array field declaration confuses content assist
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=310002">310002</a>
ToolFactory.createScanner(..) should use workspace compliance
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=291528">291528</a>
Synchronize project warning/error settings to build.properties
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=309787">309787</a>
Extension point &quot;org.eclipse.jdt.core.codeFormatter&quot; is ignored
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=244820">244820</a>
Content assist after 'instanceof' should also work in assignment
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=309706">309706</a>
[formatter] doesn't work when code has three semicolons side by side

<a name="v_A45"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M7 - April 20, 2010
<br>Project org.eclipse.jdt.core v_A45
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A45">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305037">305037</a>
missing story for attributes of referenced JARs in classpath containers
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305116">305116</a>
[index] Improve performance of indexes results tables
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=236306">236306</a>
[content assist] for method invocation in variable initializer should not guess variable
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302865">302865</a>
Issue with &quot;import&quot; a class and &quot;import static&quot; a method with the same name
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=309022">309022</a>
[ImportRewrite] Add Import wrongly removes import for nested type

<a name="v_A44"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M7 - April 13, 2010
<br>Project org.eclipse.jdt.core v_A44
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A44">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=308754">308754</a>
CompilationUnit.rewrite messes up .class-literal in annotation instead of changing class to interface
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306519">306519</a>
JavaCore#getReferencedClasspathEntries(IClasspathEntry, IJavaProject) should allow null project
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=308428">308428</a>
Possible problem to get corrections with surrogate characters
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=307295">307295</a>
Task tags and task priorities
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=308476">308476</a>
Test ClasspathTests#testBug308150 fails on all platforms
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305043">305043</a>
Internal error during classpath init
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=307486">307486</a>
DBCS3.6: Fail to propose Ext-B labels with content assist in Java Editor
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=308256">308256</a>
DiagnosticListener always supplies Diagnostic.getSource()==null
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=308356">308356</a>
codeSelect(..) doesn't work for local variable with surrogate in name
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=308245">308245</a>
Valid code fails to compile in 3.6
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=307885">307885</a>
Error message for instanceof &lt;parameterized type&gt; wrong arguments
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=249704">249704</a>
[code assist] autocomplete with anonymous classes does stop working
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=308150">308150</a>
JAR with invalid Class-Path entry in MANIFEST.MF crashes the project

<a name="v_A43"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M7 - April 6, 2010
<br>Project org.eclipse.jdt.core v_A43
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A43">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306223">306223</a>
[search] Searching for annotation references report all type references
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=292087">292087</a>
anonymous class in array member initializer confuses content assist
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=307337">307337</a>
[content assist] Default constructor should not be proposed for anonymous types
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306568">306568</a>
[ImportRewrite] Add Import does not work for nested type when package is on-demand imported

<a name="v_A42"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M7 - March 30, 2010
<br>Project org.eclipse.jdt.core v_A42
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A42">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=202634">202634</a>
[codeassist] missing super proposal in specific source
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304394">304394</a>
IJavaElement#getAttachedJavadoc(IProgressMonitor) should support referenced entries
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305122">305122</a>
FUP of 302949
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306917">306917</a>
Exception occurred during compilation unit conversion:
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306196">306196</a>
[search] NPE while searching for annotation references in rt.jar of JRE 6.0
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=288658">288658</a>
[compiler][1.5] Annotations visibility issues

<a name="v_A41"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M7 - March 23, 2010
<br>Project org.eclipse.jdt.core v_A41
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A41">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305518">305518</a>
[formatter] Line inside &lt;pre&gt; tag is wrongly indented by one space when starting just after the star
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295825">295825</a>
[formatter] Commentaries are running away after formatting are used
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306477">306477</a>
Indexer(?) fails to recognise enum as a type
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305830">305830</a>
[formatter] block comment should not be formatted when a non-nls tag is on the same line
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=300031">300031</a>
The deprecation warning for a type should not include the package name
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306078">306078</a>
Navigate to Inaccessible Field
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=209479">209479</a>
infinite loop in BindingKey when signatures are invalid
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293558">293558</a>
[quick assist] &quot;Invert if statement&quot; fails when comment follows
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=182459">182459</a>
[compiler] Inconsistent error range for unresolved field
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=192233">192233</a>
[AST] CompilationUnit.rewrite() removes whitespace between return type and method name
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306073">306073</a>
ASTRewrite Javadoc wrongly talks about getTargetSourceRangeComputer
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305001">305001</a>
Exception occurred in listener of Java element change notification
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305590">305590</a>
Redundant null check false-positive
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305755">305755</a>
Remove deprecated API that has been added for 3.6

<a name="v_A40"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M7 - March 16, 2010
<br>Project org.eclipse.jdt.core v_A40
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A40">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305371">305371</a>
[formatter] Unexpected indentation of line comment
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305281">305281</a>
[formatter] Turning off formatting changes comment's formatting

<a name="v_A39"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M6 - March 9, 2010 - 3.6.0 M6
<br>Project org.eclipse.jdt.core v_A39
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A39">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=289057">289057</a>
Java Content Assist taking too long
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=303830">303830</a>
&quot;X cannot be resolved or is not a field&quot; erroneously reported
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=235658">235658</a>
Valid identifier unrecognized.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304841">304841</a>
[search] NPE in IndexSelector.initializeIndexLocations
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295866">295866</a>
FormalParameter in JDT DOM/AST documentation
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304817">304817</a>
Review documentation of ASTParser class

<a name="v_A38"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M6 - March 5, 2010
<br>Project org.eclipse.jdt.core v_A38
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A38">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>
Added two new preferences to allow to disable the formatter in a section of the code.
These two preference define respectively the tag which disables the formatting
and the tag which re-enable it.
<p>
These new preferences are controlled with the options:</p>
<code>DefaultCodeFormatterConstants.FORMATTER_DISABLING_TAG</code>
<code>DefaultCodeFormatterConstants.FORMATTER_ENABLING_TAG</code>
<pre>
/**
 * FORMATTER / Option to define the tag to put in a comment to disable the formatting.
 * See the {@link #FORMATTER_ENABLING_TAG} option to re-enable it.
 *     - option id:         "org.eclipse.jdt.core.formatter.disabling_tag"
 *     - possible values:   String, with constraints mentioned below
 *     - default:           &quot;&quot;
 * 
 * Note that:
 * 
 * 1. The tag name will be trimmed. Hence if it does contain white spaces
 *    at the beginning or at the end, they will not be taken into account while
 *    searching for the tag in the comments
 * 2. If a tag is starting with a letter or digit, then it cannot be leaded by
 *    another letter or digit to be recognized
 *    (<b><i>"ToDisableFormatter"</i></b> will not be recognized as a disabling tag
 *    <b><i>"DisableFormatter"</i></b>, but <b><i>"Re:DisableFormatter"</i></b>
 *    will be detected for either tag <b><i>"DisableFormatter"</i></b> or
 *    <b><i>":DisableFormatter"</i></b>).
 *    Respectively, a tag ending with a letter or digit cannot be followed by a letter
 *    or digit to be recognized (<b><i>"DisableFormatter1"</i></b> will not be
 *    recognized as a disabling tag <b><i>"DisableFormatter"</i></b>, but
 *    <b><i>"DisableFormatter:1"</i></b> will be detected either for tag
 *    <b><i>"DisableFormatter"</i></b> or <b><i>"DisableFormatter:"</i></b>)
 * 3. As soon as the formatter encounters the defined disabling tag, it stops to
 *    format the code from the beginning of the comment including this tag. If it
 *    was already disabled, the tag has no special effect.
 *    For example, the second defined enabling tag &quot;<b>disable-formatter</b>&quot;
 *    in the following snippet is not necessary as the formatter was already disabled
 *    since the first one:
 *     class X {
 *     // disable-formatter
 *     void foo1() {}
 *     // disable-formatter
 *     void foo2() {}
 *     void bar1() {}
 *     void bar2() {}
 *     }
 *
 * 4. If no enabling tag is found by the formatter after the disabling tag, then
 *    the end of the snippet won't be formatted.
 *    For example, when a disabling tag is put at the beginning of the code, then
 *    the entire content of a compilation unit is not formatted:
 *     // disable-formatter
 *     class X {
 *     void foo1() {}
 *     void foo2() {}
 *     void bar1() {}
 *     void bar2() {}
 *     }
 * 
 * 5. If a mix of disabling and enabling tags is done in the same comment, then
 *    the formatter will only take into account the last encountered tag in the
 *    comment.
 *    For example, in the following snippet, the formatter will be disabled after
 *    the comment:
 *     class X {
 *     /*
 *     &nbsp;* This is a comment with a mix of disabling and enabling tags:
 *     &nbsp;*  - <b>disable-formatter</b>
 *     &nbsp;*  - <b>enable-formatter</b>
 *     &nbsp;*  - <b>disable-formatter</b>
 *     &nbsp;* The formatter will stop to format from the beginning of this comment...
 *     &nbsp;*/
 *     void foo() {}
 *     void bar() {}
 *     }
 * 
 * 6. The tag cannot include newline character (i.e. '\n') but it can have white spaces.
 *    E.g. "<b>format: off</b>" is a valid disabling tag
 *    In the future, newlines may be used to support multiple disabling tags.
 * 
 * @since 3.6
 */

/**
 * FORMATTER / Option to define the tag to put in a comment to re-enable the
 * formatting after it has been disabled (see {@link #FORMATTER_DISABLING_TAG})
 *     - option id:         "org.eclipse.jdt.core.formatter.enabling_tag"
 *     - possible values:   String, with constraints mentioned below
 *     - default:           &quot;&quot;
 * 
 * Note that:
 * 
 * 1. The tag name will be trimmed. Hence if it does contain white spaces
 *    at the beginning or at the end, they will not be taken into account while
 *    searching for the tag in the comments
 * 2. If a tag is starting with a letter or digit, then it cannot be leaded by
 *    another letter or digit to be recognized
 *    (<b>"ReEnableFormatter"</b> will not be recognized as an enabling tag
 *    <b><i>"EnableFormatter"</i></b>, but <b><i>"Re:EnableFormatter"</i></b>
 *    will be detected for either tag <b><i>"EnableFormatter"</i></b> or
 *    <b><i>":EnableFormatter"</i></b>).
 *    Respectively, a tag ending with a letter or digit cannot be followed by a letter
 *    or digit to be recognized (<b><i>"EnableFormatter1"</i></b> will not be
 *    recognized as an enabling tag <b><i>"EnableFormatter"</i></b>, but
 *    <b><i>"EnableFormatter:1"</i></b> will be detected either for tag
 *    <b><i>"EnableFormatter"</i></b> or <b><i>"EnableFormatter:"</i></b>)
 * 3. As soon as the formatter encounters the defined enabling tag, it re-starts
 *    to format the code just after the comment including this tag. If it was already
 *    active, i.e. already re-enabled or never disabled, the tag has no special effect.
 *    For example, the defined enabling tag &quot;<b>enable-formatter</b>&quot;
 *    in the following snippet is not necessary as the formatter has never been
 *    disabled:
 *     class X {
 *     void foo1() {}
 *     void foo2() {}
 *     // enable-formatter
 *     void bar1() {}
 *     void bar2() {}
 *     }
 * 
 *    Or, in the following other snippet, the second enabling tag is not necessary as
 *    the formatting will have been re-enabled by the first one:
 *     class X {
 *     // disable-formatter
 *     void foo1() {}
 *     void foo2() {}
 *     // enable-formatter
 *     void bar1() {}
 *     // enable-formatter
 *     void bar2() {}
 *     }
 * 
 * 4. If a mix of disabling and enabling tags is done in the same comment, then
 *    the formatter will only take into account the last encountered tag in the
 *    comment.
 *    For example, in the following snippet, the formatter will be re-enabled after
 *    the comment:
 *     // disable-formatter
 *     class X {
 *     /*
 *     &nbsp;* This is a comment with a mix of disabling and enabling tags:
 *     &nbsp;*  - <b>enable-formatter</b>
 *     &nbsp;*  - <b>disable-formatter</b>
 *     &nbsp;*  - <b>enable-formatter</b>
 *     &nbsp;* The formatter will restart to format after this comment...
 *     &nbsp;*/
 *     void foo() {}
 *     void bar() {}
 *     }
 * 
 * 5. The tag cannot include newline character (i.e. '\n') but it can have white spaces.
 *    E.g. "<b>format: on</b>" is a valid enabling tag
 *    In the future, newlines may be used to support multiple enabling tags.
 * 
 * @since 3.6
 */
</pre>
<p>For example, the following snippet:</p>
<pre>
public class Test {
/* disable-formatter */
void     foo(    )      {	
				//      unformatted       area  	  
}
/* enable-formatter */
void     bar(    )      {	
				//      formatted       area  	  
}
}
</pre>
formatted with disabling tags = &quot;disable-formatter&quot; and enabling tags
= &quot;enable-formatter&quot; produces the following output:
<pre>
public class Test {

/* disable-formatter *	
void     foo(    )      {
				//      unformatted       area  	  
}
/* enable-formatter *
	void bar() {
		// formatted area
	}
}
</pre>
See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=27079">27079</a> for more details.
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=129804">129804</a>
[dom] Local variable bindings from ASTParser#createASTs(.., String[], .., ..) have no declaring method
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304705">304705</a>
[formatter] Unexpected indentation of wrapped line comments when 'Never indent line comment on first column' preference is checked
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304656">304656</a>
StringIndexOutOfBoundsException when using JDT dom methods to process sourcefile
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304506">304506</a>
Task descriptions always have a space after the tag
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304081">304081</a>
IJavaProject#isOnClasspath(IJavaElement) returns false for type from referenced JAR
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304122">304122</a>
TypeBindings.getAnnotations() breaks interface
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304416">304416</a>
VerifyError after compiling without preserve all locals
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304529">304529</a>
[formatter] NPE when either the disabling or the enabling tag is not defined
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=27079">27079</a>
Tags for disabling/enabling code formatter (feature)
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304316">304316</a>
NPE when javadoc URL is invalid

<a name="v_A37"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M6 - March 2, 2010
<br>Project org.eclipse.jdt.core v_A37
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A37">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Added new configurable option to fix bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295551">295551</a>:<br>
<pre>
/**
 * Compiler option ID: Further Determining the Effect of @SuppressWarnings if also
 * COMPILER_PB_SUPPRESS_WARNINGS is enabled.
 * When enabled, the @SuppressWarnings annotation can additionally be used to suppress 
 * optional compiler diagnostics that have been configured as ERROR.
 * When disabled, all @SuppressWarnings annotations only affects warnings.
 *
 * Option id: "org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors"
 * Possible values: { "enabled", "disabled" }
 * Default: "disabled"
 * 
 * @since 3.6
 * @category CompilerOptionID
 */
public static final String COMPILER_PB_SUPPRESS_OPTIONAL_ERRORS = PLUGIN_ID + ".compiler.problem.suppressOptionalErrors";
</pre>
</li>
<li>
Added a new formatter preferences to align method declaration.
<p>
This new preference is controlled with the option:</p>
<code>DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_METHOD_DECLARATION</code>
<pre>
/**
 * FORMATTER / Option for alignment of method declaration
 *     - option id:         "org.eclipse.jdt.core.formatter.alignment_for_method_declaration"
 *     - possible values:   values returned by <code>createAlignmentValue(boolean, int, int)</code> call
 *     - default:           createAlignmentValue(false, WRAP_NO_SPLIT, INDENT_DEFAULT)
 * 
 * @see #createAlignmentValue(boolean, int, int)
 * @since 3.6
 */
</pre>
<p>For example, the following snippet:</p>
<pre>
public class Test {
public final synchronized java.lang.String a_method_which_has_a_very_long_name() {
return null;
}
}
</pre>
formatted with this preference activated as 'Wrap only when necessary', will
produce the following output:
<pre>
public class Test {
	public final synchronized java.lang.String
			a_method_which_has_a_very_long_name() {
		return null;
	}
}
</pre>
See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284789">284789</a> for more details.
</li>
<li>New API to fix bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=246594">246594</a>. See the bug for details.
<pre>
org.eclipse.jdt.core.ITypeParameter
	/**
	 * Returns the signatures for this type parameter's bounds. The type parameter may have 
	 * been declared as part of a type or a method. The signatures represent only the individual 
	 * bounds and do not include the type variable name or the <code>extends</code> keyword.  
	 * The signatures may be either unresolved (for source types) or resolved (for binary types). 
	 * See {@link Signature} for details.
	 * 
	 * @return the signatures for the bounds of this formal type parameter
	 * @throws JavaModelException
	 *             if this element does not exist or if an exception occurs while accessing its corresponding resource.
	 * @see Signature
	 * @since 3.6
	 */
	String[] getBoundsSignatures() throws JavaModelException;
</pre>
</li>
<li>
Added a new formatter preference to enable or disable the formatting of line
comments that start on the first column.<br>
Note that the indentation of line comments will also be disabled when activating
this option, as otherwise the formatter could not produce stable outputs...
<p>
The default is to format these comments to have a backward compatible behavior.
</p><p>
This new preferences is controlled with the options:</p>
<code>DefaultCodeFormatterConstants.FORMATTER_COMMENT_FORMAT_LINE_COMMENT_STARTING_ON_FIRST_COLUMN</code>
<pre>
/**
 * FORMATTER / Option to format line comments that start on the first column
 *     - option id:         "org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column"
 *     - possible values:   { TRUE, FALSE }
 *     - default:           TRUE
 * 
 * Note that this option is ignored if either the
 * {@link #FORMATTER_COMMENT_FORMAT_LINE_COMMENT} option has been set to
 * {@link #FALSE} or the formatter is created with the mode
 * {@link ToolFactory#M_FORMAT_NEW}.
 * 
 * @see #TRUE
 * @see #FALSE
 * @see ToolFactory#createCodeFormatter(Map, int)
 * @since 3.6
 */
</pre>
<p>For example, the following snippet:</p>
<pre>
public class X01 {
//    int	a  =   1;
//    int	b  =   2;
}
</pre>
will be untouched by the formatter if both options are activated.
See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=251133">251133</a> for more details.
</li>
<li>New API to fix bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=252431">252431</a>. See the bug for details.
<pre>
org.eclipse.jdt.core.IClasspathEntry
	/**
	 * Returns the classpath entry that is making a reference to this classpath entry. For entry kinds 
	 * {@link #CPE_LIBRARY}, the return value is the entry that is representing the JAR that includes 
	 * <code>this</code> in the MANIFEST.MF file's Class-Path section. For entry kinds other than 
	 * {@link #CPE_LIBRARY}, this returns <code>null</code>. For those entries that are on the raw classpath already, 
	 * this returns <code>null</code>.
	 *
	 * It is possible that multiple library entries refer to the same entry
	 * via the MANIFEST.MF file. In those cases, this method returns the first classpath entry 
	 * that appears in the raw classpath. However, this does not mean that the other referencing 
	 * entries do not relate to their referenced entries. 
	 * See {@link JavaCore#getReferencedClasspathEntries(IClasspathEntry, IJavaProject)} for 
	 * more details.
	 * 
	 * @return the classpath entry that is referencing this entry or <code>null</code> if 
	 * 		not applicable.
	 * @since 3.6
	 */
	IClasspathEntry getReferencingEntry();


org.eclipse.jdt.core.IJavaProject
	/**
	 * Works similar to {@link #setRawClasspath(IClasspathEntry[], IPath, IProgressMonitor)} and 
	 * additionally allows persisting the given array of referenced entries for this project.
	 * The referenced entries and their attributes are stored in the .classpath file of this 
	 * project. For details on referenced entries, see 
	 * {@link JavaCore#getReferencedClasspathEntries(IClasspathEntry, IJavaProject)}
	 * and {@link IClasspathEntry#getReferencingEntry()}.
	 * 
	 * Since the referenced entries are stored in the .classpath file, clients can store additional 
	 * information that belong to these entries and retrieve them across sessions, though the referenced
	 * entries themselves may not be present in the raw classpath. By passing a <code>null</code>
	 * referencedEntries, clients can choose not to modify the already persisted referenced entries,
	 * which is fully equivalent to {@link #setRawClasspath(IClasspathEntry[], IPath, IProgressMonitor)}.
	 * If an empty array is passed as referencedEntries, the already persisted referenced entries, 
	 * if any, will be cleared. 
	 * 
	 * If there are duplicates of a referenced entry or if any of the <code>referencedEntries</code> 
	 * is already present in the raw classpath(<code>entries</code>) those referenced entries will 
	 * be excluded and not be persisted.
	 *
	 * @param entries a list of classpath entries
	 * @param referencedEntries the list of referenced classpath entries to be persisted
	 * @param outputLocation the default output location
	 * @param monitor the given progress monitor
	 * @exception JavaModelException if the classpath could not be set. Reasons include:
	 *  	This Java element does not exist (ELEMENT_DOES_NOT_EXIST)
	 *  	The classpath is being modified during resource change event notification (CORE_EXCEPTION)
	 *  	The classpath failed the validation check as defined by {@link JavaConventions#validateClasspath(IJavaProject, IClasspathEntry[], IPath)}
	 * @see IClasspathEntry
	 * @see #getReferencedClasspathEntries()
	 * @since 3.6
	 */
	void setRawClasspath(IClasspathEntry[] entries, IClasspathEntry[] referencedEntries, IPath outputLocation,
			IProgressMonitor monitor) throws JavaModelException;

	/**
	 * Returns the list of referenced classpath entries stored in the .classpath file of <code>this</code> 
	 * java project. Clients can store the referenced classpath entries using 
	 * {@link #setRawClasspath(IClasspathEntry[], IClasspathEntry[], IPath, IProgressMonitor)}
	 * If the client has not stored any referenced entries for this project, an empty array is returned.
	 *
	 * @throws JavaModelException
	 * @return an array of referenced classpath entries stored for this java project or an empty array if none
	 * 			stored earlier.
	 * @since 3.6
	 */
	IClasspathEntry[] getReferencedClasspathEntries() throws JavaModelException;
	

org.eclipse.jdt.core.IPackageFragmentRoot
	/**
	 * Returns the first resolved classpath entry that corresponds to this package fragment root.
	 * A resolved classpath entry is said to correspond to a root if the path of the resolved
	 * entry is equal to the root's path.
	 * 
	 * @return the first resolved classpath entry that corresponds to this package fragment root
	 * @throws JavaModelException if this element does not exist or if an
	 *		exception occurs while accessing its corresponding resource. 
	 * @since 3.6
	 */
	IClasspathEntry getResolvedClasspathEntry() throws JavaModelException;
	

org.eclipse.jdt.core.JavaCore
	/**
	 * Returns an array of classpath entries that are referenced directly or indirectly 
	 * by a given classpath entry. For the entry kind {@link IClasspathEntry#CPE_LIBRARY}, 
	 * the method returns the libraries that are included in the Class-Path section of 
	 * the MANIFEST.MF file. If a referenced JAR file has further references to other library 
	 * entries, they are processed recursively and added to the list. For entry kinds other 
	 * than {@link IClasspathEntry#CPE_LIBRARY}, this method returns an empty array.
	 *
	 * If a referenced entry has already been stored 
	 * in the given project's .classpath, the stored attributes are populated in the corresponding
	 * referenced entry. For more details on storing referenced entries see
	 * see {@link IJavaProject#setRawClasspath(IClasspathEntry[], IClasspathEntry[], IPath, 
	 * IProgressMonitor)}. 
	 * 
	 * @param libraryEntry the library entry whose referenced entries are sought 
	 * @param project project where the persisted referenced entries to be retrieved from
	 * @return an array of classpath entries that are referenced directly or indirectly by the given entry. 
	 * 			If not applicable, returns an empty array.
	 * @since 3.6
	 */
	public static IClasspathEntry[] getReferencedClasspathEntries(IClasspathEntry libraryEntry, IJavaProject project);	
</pre>
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=252431">252431</a>
New API is needed to better identify referenced jars in the Class-Path: entry
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=251133">251133</a>
[formatter] Automatic formatting single line comments is incoherent among tools
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=248897">248897</a>
[1.5][compiler] Wrong warning 'The local variable 'var' is never read'.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304031">304031</a>
Unused @SuppressWarnings(..) not flagged when suppressed problem is set to Error
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295551">295551</a>
Add option to automatically promote all warnings to errors
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=303810">303810</a>
Compact boolean fields on FlowContext
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=251227">251227</a>
[compiler] Fup of bug 115814, comparing doubles should not be flagged
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=268798">268798</a>
[1.5][compiler] Eclipse 3.5M5/6 produces new compiler errors with generics
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=303448">303448</a>
Wrong code generation optimization when assert condition is false
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=303776">303776</a>
Member types imports are removed too aggressively
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302949">302949</a>
JavaModelManager hangs accessing the nonChainingJars set
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=246594">246594</a>
[model] API request: ITypeParameter#getBoundsSignatures() or #getSignature()
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=253896">253896</a>
[compiler][null] wrong &quot;Null comparison always yields false&quot; problem for auto-unboxing
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284789">284789</a>
[formatter] Does not line-break method declaration exception with parameters
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=303480">303480</a>
[1.5][compiler] CCE: org.eclipse.jdt.internal.compiler.parser.RecoveredBlock cannot be cast to org.eclipse.jdt.internal.compiler.parser.RecoveredType

<a name="v_A36"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M6 - February 23, 2010
<br>Project org.eclipse.jdt.core v_A36
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A36">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>
Added a new formatter preferences to align annotation arguments (i.e. element-value pairs).
<p>
This new preference is controlled with the option:</p>
<code>DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_ANNOTATION</code>
<pre>
/**
 * FORMATTER / Option for alignment of arguments in annotation
 *     - option id:         "org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation"
 *     - possible values:   values returned by <code>createAlignmentValue(boolean, int, int)</code> call
 *     - default:           createAlignmentValue(false, WRAP_NO_SPLIT, INDENT_DEFAULT)
 * 
 * @see #createAlignmentValue(boolean, int, int)
 * @since 3.6
 */
</pre>
<p>For example, the following snippet:</p>
<pre>
@MyAnnot(value1 = "this is an example", value2 = "of an annotation", value3 = "with several arguments", value4 = "which may need to be wrapped")
public class Test {
}
</pre>
formatted with this preference activated, will produce the following output
while using the <code>Eclipse [built-in]</code> profile:
<pre>
@MyAnnot(value1 = "this is an example", value2 = "of an annotation",
		value3 = "with several arguments",
		value4 = "which may need to be wrapped")
public class Test {
}
</pre>
See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=282030">282030</a> for more details.
</li>
<li>In order to get bindings outside the Eclipse environment, the following methods has been added on the ASTParser class.
<br>See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=206391">206391</a> for details.<br>
<pre>
org.eclipse.jdt.core.dom.ASTParser
	/**
	 * Set the environment that can be used when no IJavaProject are available.
	 * 
	 * The user has to be sure to include all required types on the classpaths for binary types
	 * or on the sourcepaths for source types to resolve the given source code.
	 * All classpath and sourcepath entries are absolute paths.
	 * If sourcepaths contain units using a specific encoding (not the platform encoding), then the
	 * given encodings must be set. If the given encodings is set, its length must
	 * match the length of the sourcepaths parameter or an IllegalArgumentException will be thrown.
	 * If encodings is not null, the given sourcepathEntries must not be null.
	 * 
	 * @param classpathEntries the given classpath entries to be used to resolve bindings
	 * @param sourcepathEntries the given sourcepath entries to be used to resolve bindings
	 * @param encodings the encodings of the corresponding sourcepath entries or null if the platform encoding
	 * can be used.
	 * @param includeRunningVMBootclasspath true if the bootclasspath of the running VM must be prepended to the
	 * given classpath and false if the bootclasspath of the running VM should be ignored.
	 * @throws IllegalArgumentException if the size of the given encodings is not equals to the size of the given
	 * sourcepathEntries
	 * @since 3.6
	 */
	public void setEnvironment(String[] classpathEntries, String[] sourcepathEntries, String[] encodings, boolean includeRunningVMBootclasspath);
	
	/**
	 * Creates ASTs for a batch of compilation units. When bindings are being resolved, processing a
	 * batch of compilation units is more efficient because much of the work involved in resolving 
	 * bindings can be shared. 
	 *
	 * When bindings are being resolved, all compilation units are resolved 
	 * using the same environment, which must be set beforehand with 
	 * {@link #setEnvironment(String[], String[], String[], boolean) setEnvironment}.
	 * The compilation units are processed one at a time in no specified order. 
	 * For each of the compilation units in turn,
	 *  - {@link ASTParser#createAST(IProgressMonitor) ASTParser.createAST} is called to parse it 
	 *           and create a corresponding AST. The calls to {@link ASTParser#createAST(IProgressMonitor) ASTParser.createAST} 
	 *           all employ the same settings.</li>
	 *  - {@link FileASTRequestor#acceptAST(String, CompilationUnit) FileASTRequestor.acceptAST} is called passing
	 *           the compilation unit path and the corresponding AST to <code>requestor</code>. The compilation unit path is the same
	 *           path that is passed into the given <code>sourceFilePaths</code> parameter.
	 *
	 * Note only ASTs from the given compilation units are reported
	 * to the requestor. If additional compilation units are required to
	 * resolve the original ones, the corresponding ASTs are <b>not</b>
	 * reported to the requestor.
	 * 
	 * Note also the following parser parameters are used, regardless of what
	 * may have been specified:
	 *  - The {@linkplain #setKind(int) parser kind} is <code>K_COMPILATION_UNIT</code>
	 *  - The {@linkplain #setSourceRange(int,int) source range} is <code>(0, -1)</code>
	 *  - The {@linkplain #setFocalPosition(int) focal position} is not set
	 *
	 * The <code>bindingKeys</code> parameter specifies bindings keys
	 * ({@link IBinding#getKey()}) that are to be looked up. These keys may
	 * be for elements either inside or outside the set of compilation
	 * units being processed. When bindings are being resolved,
	 * the keys and corresponding bindings (or <code>null</code> if none) are
	 * passed to {@link FileASTRequestor#acceptBinding(String, IBinding) FileASTRequestor.acceptBinding}. Note that binding keys
	 * for elements outside the set of compilation units being processed are looked up
	 * after all {@link FileASTRequestor#acceptAST(String, CompilationUnit) ASTRequestor.acceptAST}
	 * callbacks have been made.
	 * Binding keys for elements inside the set of compilation units being processed
	 * are looked up and reported right after the corresponding
	 * {@link FileASTRequestor#acceptAST(String, CompilationUnit) FileASTRequestor.acceptAST} callback has been made.
	 * No {@link FileASTRequestor#acceptBinding(String, IBinding) FileASTRequestor.acceptBinding} callbacks are made unless
	 * bindings are being resolved.
	 *
	 * A successful call to this method returns all settings to their
	 * default values so the object is ready to be reused.
	 * 
	 * The given <code>encodings</code> are used to properly parse the given source units. If the platform encoding is sufficient,
	 * then the given encodings can be set to <code>null</code>.
	 *
	 * @param sourceFilePaths the compilation units to create ASTs for
	 * @param encodings the given encoding for the source units
	 * @param bindingKeys the binding keys to create bindings for
	 * @param requestor the AST requestor that collects abstract syntax trees and bindings
	 * @param monitor the progress monitor used to report progress and request cancellation,
	 *   or <code>null</code> if none
	 * @exception IllegalStateException if the settings provided
	 * are insufficient, contradictory, or otherwise unsupported
	 * @since 3.6
	 */
	 public void createASTs(String[] sourceFilePaths, String[] encodings, String[] bindingKeys, FileASTRequestor requestor, IProgressMonitor monitor)
</pre>
</li>
<li>
Added two new formatter preferences to condense block and javadoc comments.
<p>
These new preferences are controlled respectively with the options:</p>
<code>DefaultCodeFormatterConstants.FORMATTER_COMMENT_NEW_LINES_AT_BLOCK_BOUNDARIES</code><br>
<code>DefaultCodeFormatterConstants.FORMATTER_COMMENT_NEW_LINES_AT_JAVADOC_BOUNDARIES</code>
<pre>
/**
 * FORMATTER / Option to control whether block comments will have new lines at boundaries
 *     - option id:         "org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries"
 *     - possible values:   { TRUE, FALSE }
 *     - default:           TRUE
 * 
 * @see #TRUE
 * @see #FALSE
 * @since 3.6
 */

/**
 * FORMATTER / Option to control whether javadoc comments will have new lines at boundaries
 *     - option id:         "org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries"
 *     - possible values:   { TRUE, FALSE }
 *     - default:           TRUE
 * 
 * @see #TRUE
 * @see #FALSE
 * @since 3.6
 */
 </pre>
<p>For example, the following snippet:</p>
<pre>
public class X {
	/*
	 * This block comment after formatting will no longer use a new line
	 * at the beginning and at the end of the comment...
	 */
	void foo() {
	}
	/**
	 * This javadoc comment after formatting will no longer use a new line
	 * at the beginning and at the end of the comment...
	 */
	void bar() {
	}
}
</pre>
formatted with both the options set to FALSE, will produce the following output:
<pre>
public class X {
	/* This block comment after formatting will no longer use a new line at the
	 * beginning and at the end of the comment... */
	void foo() {
	}

	/** This javadoc comment after formatting will no longer use a new line at
	 * the beginning and at the end of the comment... */
	void bar() {
	}
}
</pre>
See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=270209">270209</a> for more details.
</li>
<li>
The <code>CodeFormatter.F_INCLUDE_COMMENT</code> flag now works for all kind
of snippet while using the formatter.<br>
See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=236406">236406</a> for more details.
</li>
<li>
Added a new formatter preferences to insert a new line after a label.
<p>
This new preference is controlled with the option:</p>
<code>DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_LABEL</code>
<pre>
/**
 * FORMATTER / Option to insert a new line after a label
 *     - option id:         "org.eclipse.jdt.core.formatter.insert_new_line_after_label"
 *     - possible values:   { INSERT, DO_NOT_INSERT }
 *     - default:           DO_NOT_INSERT
 *
 * @see JavaCore#INSERT
 * @see JavaCore#DO_NOT_INSERT
 * @since 3.6
 */
</pre>
<p>For example, the following snippet:</p>
<pre>
public class X {
	void foo() {
		LABEL:for (int i = 0; i &lt; 10; i++) {
		}
	}
}
</pre>
formatted with this preference activated, will produce the following output:
<pre>
public class X {
	void foo() {
		LABEL:
		for (int i = 0; i &lt; 10; i++) {
		}
	}
}
</pre>
See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=150741">150741</a> for more details.
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=298362">298362</a>
[1.5][compiler] Compiler returns java.lang.Object instead of generic type T when javac returns T
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=281655">281655</a>
[formatter] &quot;Never join lines&quot; does not work for annotations.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=282030">282030</a>
[formatter] Java annotation formatting
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=270209">270209</a>
[format] Condensed block comment formatting
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=236406">236406</a>
[formatter] The comments flags should work for all kinds of snippet
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294360">294360</a>
Duplicate entries in Classpath Resolution when importing dependencies from parent project
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=206391">206391</a>
[DOM] Binding Resolutions for projects outside of Eclipse workspace
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=150409">150409</a>
[compiler] AST does not expose method bindings for non-visible inherited field
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302358">302358</a>
Compiler finds wrong method for method invocation with generics
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302919">302919</a>
misreported cast Error when mixing generic and raw class in nested class
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=150741">150741</a>
[formatter] Add  option: &quot;add new line after label&quot;
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287939">287939</a>
[code assist] The instanceof and the auto cast feature should also work for an assignment
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=303108">303108</a>
[import rewrite] ImportRewrite#removeImport(String) does not work with setUseContextToFilterImplicitImports(true)
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295619">295619</a>
Test failure caused by a timing issue in M20091118-0800

<a name="v_A35"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M6 - February 16, 2010
<br>Project org.eclipse.jdt.core v_A35
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A35">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>In order to fix bugs <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=235253">235253</a> and
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=194358">194358</a>, a new API was added to preserve the existing pre-3.6 behavior for existing clients:<br>
<pre>
	/**
	 * Sets whether a context should be used to properly filter implicit imports.
	 *
	 * By default, the option is disabled to preserve pre-3.6 behavior.
	 *
	 *
	 * When this option is set, the context passed to the addImport*(...) methods is used to determine
	 * whether an import can be filtered because the type is implicitly visible. Note that too many imports
	 * may be kept if this option is set and addImport*(...) methods are called without a context.
	 *
	 * 
	 * @param useContextToFilterImplicitImports the given setting
	 * 
	 * @see #setFilterImplicitImports(boolean)
	 * @since 3.6
	 */
	public void setUseContextToFilterImplicitImports(boolean useContextToFilterImplicitImports);
</pre>
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302455">302455</a>
java.lang.ClassCastException in secondary types removal
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102279">102279</a>
[search] method reference performance depends on method name
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=236814">236814</a>
[jsr199] EclipseCompiler#getTask does not respect its contract when its first argument is null
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302552">302552</a>
[formatter] Formatting qualified invocations can be broken when the Line Wrapping policy forces element to be on a new line
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302587">302587</a>
Encoding/decoding of problem arguments in Marker fails if argument contains #
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=301438">301438</a>
Eclipse hangs when attempting to refactor using the &quot;change method signature&quot;
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=260381">260381</a>
[formatter] Javadoc formatter breaks {@code ...} tags.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302446">302446</a>
[compiler] Regression in if statement flow analysis related to null checks
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=194358">194358</a>
[import rewrite] Organize Imports produces wrong order of imports
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=235253">235253</a>
[organize imports] Organize imports removes needed import statement.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302379">302379</a>
[search] JavaSearchTests.testZIPArchive2() test failed in I20100209-0800

<a name="v_A34"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M6 - February 9, 2010
<br>Project org.eclipse.jdt.core v_A34
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A34">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302123">302123</a>
[formatter] AssertionFailedException occurs while formatting a source containing the specific javadoc comment /** ***/
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=300379">300379</a>
[formatter] Fup of bug 287833
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=250056">250056</a>
[compiler][null] Another assert and &quot;Redundant null check&quot;
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=301683">301683</a>
Annotations are broken when native methods are present in a class
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=300734">300734</a>
Extract temp misses duplicate occurrence.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=289560">289560</a>
Eclipse hangs after modifying user libraries
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=301562">301562</a>
[JSR269] Error in EclipseFileManager.collectAllMatchingFiles
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=298637">298637</a>
Could not retrieve declared methods (NPE in ParameterizedTypeBinding.resolve)
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294057">294057</a>
[1.5][compiler] Imports not resolved correctly with generics and inner interfaces

<a name="v_A33"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M6 - February 2, 2010
<br>Project org.eclipse.jdt.core v_A33
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A33">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=300136">300136</a>
classpathentry OPTIONAL attribute not honored for var entries
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=300723">300723</a>
Fup of bug 235783

<a name="v_A32a"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M5 - January 21, 2010 - 3.6.0 M5
<br>Project org.eclipse.jdt.core v_A32a
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A32a">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=300133">300133</a>
[1.5][compiler] Local classes inside enum constants generate default constructor without implicit constructor call
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=300440">300440</a>
icu dependency needs to be udpated
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=299900">299900</a>
[null]Missing potential null warnings for variable on the right of an OR conditional expression
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293917">293917</a>
Invalid 'potential null access' warning reports
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=252379">252379</a>
Organize imports deletes needed static import.

<a name="v_A31"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M5 - January 18, 2010
<br>Project org.eclipse.jdt.core v_A31
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A31">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>New API to fix bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295894">295894</a>. See the bug for details.
<pre>
/**
 * Returns a Java search scope limited to the hierarchy of the given type and to a given project.
 * The Java elements resulting from a search with this scope will be types in this hierarchy.
 *
 * Unlike the createHierarchyScope methods, this method creates strict
 * scopes that only contain types that actually span the hierarchy of the focus
 * type, but do not include additional enclosing or member types.
 *
 *
 * By default, hierarchy scopes include all direct and indirect supertypes and subtypes of the
 * focus type. This method, however, allows to restrict the hierarchy to true subtypes,
 * not including supertypes. Also inclusion of the focus type itself is controled by a parameter. 
 *
 * 
 * @param project the project to which to constrain the search, or null if
 *        search should consider all types in the workspace 
 * @param type the focus of the hierarchy scope
 * @param onlySubtypes if true only subtypes of type are considered
 * @param includeFocusType if true the focus type type is included in the resulting scope, 
 * 		  otherwise it is excluded
 * @param owner the owner of working copies that take precedence over original compilation units, 
 *        or null if the primary working copy owner should be used
 * @return a new hierarchy scope
 * @exception JavaModelException if the hierarchy could not be computed on the given type
 * @since 3.6
 */
public static IJavaSearchScope createStrictHierarchyScope(IJavaProject project, IType type, boolean onlySubtypes, boolean includeFocusType, WorkingCopyOwner owner) throws JavaModelException;
</pre>
</li>
<li>New API added to report a compiler warning when object allocations are unused:
<pre>
org.eclipse.jdt.core.compiler.IProblem.UnusedObjectAllocation

/**
 * Compiler option ID: Reporting Allocation of an Unused Object.
 * When enabled, the compiler will issue an error or a warning if an object is allocated but never used,
 * neither by holding a reference nor by invoking one of the object's methods.
 *
 * Option id:"org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation"
 * Possible values:{ "error", "warning", "ignore" }
 * Default:"ignore"
 *
 * @since 3.6
 * @category CompilerOptionID
 */
public static final String COMPILER_PB_UNUSED_OBJECT_ALLOCATION = PLUGIN_ID + ".compiler.problem.unusedObjectAllocation";
</pre>
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=245007">245007</a>
[compiler] Should not completely ignore anonymous type with missing super type
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295894">295894</a>
[search] Search shows focus type implementation for nested types even though the scope is restricted to subtypes.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=236385">236385</a>
[compiler] Warn for potential programming problem if an object is created but not used

<a name="v_A30"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M5 - January 12, 2010
<br>Project org.eclipse.jdt.core v_A30
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A30">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>New API added to expose the reconcile flags used in the reconcile context:
<pre>
/**
 * Returns the reconcile flag of this context. This flag is a bitwise value of the constant defined
 * in ICompilationUnit.
 *
 * @return the reconcile flag of this context
 * @since 3.6
 *
 * @see ICompilationUnit#ENABLE_BINDINGS_RECOVERY
 * @see ICompilationUnit#ENABLE_STATEMENTS_RECOVERY
 * @see ICompilationUnit#IGNORE_METHOD_BODIES
 */
public int getReconcileFlags();
</pre>
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=243917">243917</a>
[compiler] should not warn about unused field when native method present
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=296343">296343</a>
OOM error caused by java indexing referencing classloader from threadLocal
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=130000">130000</a>
[API] ReconcileContext API: Does getAST3 return AST with bindings?
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=298238">298238</a>
Unresolved import in superclass causes 'Cannot reduce the visibility of the inherited method' in subclass

<a name="v_A29a"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M5 - January 5, 2010
<br>Project org.eclipse.jdt.core v_A29a
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A29a">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293861">293861</a>
Problem with refactoring when existing jar with invalid package names
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=264112">264112</a>
[Formatter] Wrap when necessary too aggressive on short qualifiers
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=298250">298250</a>
[1.6][compiler] NegativeArraySizeException in StackMapFrame.duplicate
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=296998">296998</a>
Unused imports should not prevent execution
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=298243">298243</a>
[formatter] Removing empty lines between import groups
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=297546">297546</a>
[formatter] Formatter removes blank after @see if reference is wrapped
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=235781">235781</a>
[compiler] difference to javac in definite unassignment analysis involving an exception within a constructor
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=235783">235783</a>
[eval] CodeSnippetParser and some 'CodeSnippet*' ast node does not seem up to date

<a name="v_A28"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M5 - December 14, 2009
<br>Project org.eclipse.jdt.core v_A28
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A28">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=196714">196714</a>
[comment] InvalidInputException prevents the AbstractCommentMapper to retrieve tag element
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=297757">297757</a>
Cannot get bindings for IType corresponding to parameterized anonymous type
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=255640">255640</a>
[spec] Methods Signature.toCharArray(..) have unclear precondition
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=262898">262898</a>
BufferChangedEvent must not have @noinstantiate
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=181682">181682</a>
JavaConventions.validateJavaTypeName should list valid constants
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=108784">108784</a>
SourceMapper doesn't find name range of inner class constructors

<a name="v_A27"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M4 - December 8, 2009 - 3.6.0 M4
<br>Project org.eclipse.jdt.core v_A27
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A27">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=297225">297225</a>
[formatter] Indentation may be still wrong in certain circumstances after formatting
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=293697">293697</a>
JavaSearchBugTests.testBug286379c is failing randomly

<a name="v_A26"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M4 - December 7, 2009
<br>Project org.eclipse.jdt.core v_A26
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A26">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=297045">297045</a>
Weird tests failures in N20091204-2000 and N20091205-2000 builds
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293300">293300</a>
[formatter] The formatter is still unstable in certain circumstances

<a name="v_A25"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M4 - December 4, 2009
<br>Project org.eclipse.jdt.core v_A25
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A25">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Match result can now report the access rules through a new API added on <code>TypeNameMatch</code>:
<pre>
/**
 * Returns the accessibility of the type name match
 *
 * @see IAccessRule
 *
 * @return the accessibility of the type name which may be
 * 		{@link IAccessRule#K_ACCESSIBLE}, {@link IAccessRule#K_DISCOURAGED}
 * 		or {@link IAccessRule#K_NON_ACCESSIBLE}.
 * 		The default returned value is {@link IAccessRule#K_ACCESSIBLE}.
 *
 * @since 3.6
 */
public abstract int getAccessibility();
</pre>
See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=296277">296277</a> for more details.
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=296277">296277</a>
[search] SearchEngine#searchAllTypeNames(.., TypeNameMatchRequestor,..) should report access rules
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=296708">296708</a>
[DOM/AST] clarify setters when createASTs(..) is used
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=296629">296629</a>
[quick fix] Cast quick fix not offered for method-local classes
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295948">295948</a>
ElementImpl.hashCode throws an NPE
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=296660">296660</a>
[compiler] Incorrect unused method warning from compiler

<a name="v_A24"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M4 - December 1, 2009
<br>Project org.eclipse.jdt.core v_A24
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A24">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>New API added to ignore method bodies inside AST tree. The new APIs are tagged as 3.5.2 as this code
will be backported to 3.5.2:
<pre>
org.eclipse.jdt.core.dom.ASTParser:
	/**
	 * Requests an abstract syntax tree without method bodies. 
	 * 
	 * When ignore method bodies is enabled, all method bodies are discarded.
	 * This has no impact on the binding resolution.
	 *
	 * If a method contains local types, its method body will be retained.
	 * This settings is not used if the kind used in setKind(int) is either 
	 * K_EXPRESSION or K_STATEMENTS.
	 * @since 3.5.2
	 */
	public void setIgnoreMethodBodies(boolean enabled);

org.eclipse.jdt.core.ICompilationUnit:
	/**
	 * Constant indicating that a reconcile operation could ignore to parse the method bodies.
	 * @see ASTParser#setIgnoreMethodBodies(boolean)
	 * @since 3.5.2
	 */
	public static final int IGNORE_METHOD_BODIES = 0x08;

</pre>
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=288174">288174</a>
[search] NullPointerException when searching for type references
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=277643">277643</a>
Generics compile error
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=288211">288211</a>
APT uses a lot of memory

<a name="v_A23"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M4 - November 24, 2009
<br>Project org.eclipse.jdt.core v_A23
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A23">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295698">295698</a>
[1.5][compiler] ClassCastException in unchecked warning report
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295260">295260</a>
Wrong warnings on Java.Compiler.Errors/Warnings &quot;Redundant null check&quot;
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=190737">190737</a>
[compiler][null] missing 'cannot be null' warning within for loop

<a name="v_A22"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M4 - November 16, 2009
<br>Project org.eclipse.jdt.core v_A22
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A22">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=153429">153429</a>
JUnit4 in Eclipse Testing Framework
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295238">295238</a>
[formatter] The comment formatter add an unexpected new line in block comment
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295175">295175</a>
[formatter] Missing space before a string at the beginning of a line in a javadoc comment
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294529">294529</a>
The Scanner sometimes ignores the given offset if larger than the EOF.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294662">294662</a>
ClassCastException while invoking quick assist
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294404">294404</a>
-target jsr14 flags error on foreach over Collection that does not implement Iterable
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293955">293955</a>
valid javadoc url set on user library, but still says no javadoc
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293443">293443</a>
AbortCompilation when invoking content assist
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293711">293711</a>
Clarify ICompilationUnit#getOwner() javadoc
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293615">293615</a>
error message since v3.6.0M2: name clash by overriding generic methods
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294618">294618</a>
[formatter] The formatter fails to format a compilation unit with deep nesting of html tags
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=248312">248312</a>
[model] IMemberValuePair#getValue() should also work for negative numerals
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294731">294731</a>
Specify value type of JAVADOC_LOCATION_ATTRIBUTE_NAME

<a name="v_A21"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M4 - November 10, 2009
<br>Project org.eclipse.jdt.core v_A21
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A21">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294631">294631</a>
[formatter] The formatter takes two passes to format a common sequence of html tags
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294500">294500</a>
[formatter] MalformedTreeException when formatting an invalid sequence of &lt;code&gt; tags in a javadoc comment
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294488">294488</a>
Javadoc of ISourceReference#getSourceRange() should link to SourceRange#isAvailable(..)
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=199265">199265</a>
[formatter] 3.3 Code Formatter mis-places commented-out import statements
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=241549">241549</a>
[spec] IType#getFields/Initializers/Methods() should define order from class file
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=275805">275805</a>
creating a non-primary working copy causes typeHierarchyChanged event
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=292510">292510</a>
FUP of 292364: Error messages don't identify partial types precisely.

<a name="v_A20"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M4 - November 3, 2009
<br>Project org.eclipse.jdt.core v_A20
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A20">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293384">293384</a>
Eclipse erroneously reports method &quot;is ambiguous for type&quot;
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=285002">285002</a>
[compiler] visibility error for package private method

<a name="v_A19"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M3 - October 29, 2009 - 3.6M3
<br>Project org.eclipse.jdt.core v_A19
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A19">cvs</a>).
<h2>What's new in this drop</h2>
This version was created to tentatively fix bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=293697">293697</a>
but it occurs again in subsequent build. So, it has been reopened and moved to next version...

<h3>Problem Reports Fixed</h3>

<a name="v_A18"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M3 - October 28, 2009
<br>Project org.eclipse.jdt.core v_A18
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A18">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=293496">293496</a>
Adding the serialVersionUID field doesn't work when tab size is 0

<a name="v_A17"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M3 - October 26, 2009
<br>Project org.eclipse.jdt.core v_A17
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A17">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Reverted change for bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=263564">263564</a>.</li>
</ul>
<h3>Problem Reports Fixed</h3>

<a name="v_A16"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M3 - October 25, 2009
<br>Project org.eclipse.jdt.core v_A16
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A16">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=293240">293240</a>
[formatter] 'insert_space_before_opening_brace_in_array_initializer' preference may be reset in certain circumstances
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=263564">263564</a>
API to know when default compiler preference settings have been altered
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=289385">289385</a>
Investigate comment in performance tests
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=286379">286379</a>
[search] Problem while searching class

<a name="v_A15"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M3 - October 20, 2009
<br>Project org.eclipse.jdt.core v_A15
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A15">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=292350">292350</a>
[1.5][compiler] Compiler error: ambiguous method since 3.5.1 using generics and interface inheritance
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=292364">292364</a>
[internal] Type name in CastExpression not treated as Type name.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=292428">292428</a>
Internal compiler error: NullPointerException at org.eclipse.jdt.internal.compiler.ast.CastExpression.checkUnsafeCast(CastExpression.java:333)
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=291985">291985</a>
[compiler][jsr14] Translating Enum with jsr14 target: ECJ causes a runtime error while Sun compiler works fine
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=292240">292240</a>
Compiler error on implementation of raw sub interface

<a name="v_A14"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M3 - October 13, 2009
<br>Project org.eclipse.jdt.core v_A14
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A14">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=291391">291391</a>
update the Bundle-Version of the JDT Core Batch Compiler (ecj) from 3.3.0 to 3.6.*
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284280">284280</a>
[1.5][compiler] Error on use generic interface in abstract super class
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286228">286228</a>
[1.5][compiler] Generics inconsistencies possible regression
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286601">286601</a>
[formatter] Code formatter formats anonymous inner classes wrongly when 'Never join lines' is on
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=215139">215139</a>
[search] More options for HierarchyScope
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=291472">291472</a>
[1.5][compiler] Access to a generic method is compiled incorrectly
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=283539">283539</a>
NamingConventions.suggestVariableNames doesn't work if name contains '_'
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280784">280784</a>
[batch] Allow access restrictions to be reported as errors

<a name="v_A13"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M3 - October 6, 2009
<br>Project org.eclipse.jdt.core v_A13
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A13">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Reverted fix for <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106478">106478</a>.</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=291322">291322</a>
Test errors when running JDT Core tests on Windows 7
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=282770">282770</a>
[compiler] Dead code detection should have specific @SuppressWarnings
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290028">290028</a>
Use IResource#setDerived(boolean, IProgressMonitor) instead of IResource#setDerived(boolean)
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287607">287607</a>
[1.5][compiler] cast of inner of generic enclosing type are not reported as unsafe
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=288749">288749</a>
Redundant superinterface not flagged inside one declaration
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290905">290905</a>
[formatter] Certain formatter pref constellation cause endless loop ==&gt; OOME
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=285124">285124</a>
serialVersionUID still causes error/warning
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290877">290877</a>
[DOM] If using a tag named '@enum' the ASTParser ignores this
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=281575">281575</a>
Eclipse hangs in SourceMapper while doing java proposals
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290470">290470</a>
[JSR199][compiler] JDT compiler not jsr199 compatible.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290730">290730</a>
Rewriting SwitchStatement throws NPE

<a name="v_A12"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M3 - September 29, 2009
<br>Project org.eclipse.jdt.core v_A12
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A12">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287676">287676</a>
[1.5][compiler] Useless cast warning not emited
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290563">290563</a>
add specification for fine grain search flags
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290376">290376</a>
Errant &quot;Comparing identical expressions&quot; warning with assignment
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287592">287592</a>
[1.5][compiler] Wrong ambiguous compilation error
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290049">290049</a>
Reconciling a compilation unit does not return an AST with bindings when it should (probably)
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290034">290034</a>
Effects of @SuppressWarnings(&quot;unchecked&quot;) are broader in Eclipse than in javac
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=267561">267561</a>
[evaluation] LocalEvaluationEngine does not accept primitive types
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=163194">163194</a>
[1.6] compiler should warn about missing @Override annotation for interface method

<a name="v_A11"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M3 - September 22, 2009
<br>Project org.eclipse.jdt.core v_A11
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A11">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=289892">289892</a>
[compiler] NPE during binaryTypeBinding field initialization
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287833">287833</a>
[formatter] Formatter removes the first character after the * in the &lt;pre&gt; tag
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=238943">238943</a>
SortElementsOperation doesn't use project specific settings
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=288621">288621</a>
[1.5][compiler] Creating type hierarchy failed when pressing F4
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=289538">289538</a>
[1.5][compiler] compiler fails to generate correct code for private constructor in inner class
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=289639">289639</a>
Problems opening perspective JavaPerspective, NPE on JavaModelManager.containersReset()
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=289516">289516</a>
Annotations (visible and invisible) should be preserved with target jsr14
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=289576">289576</a>
[1.5][compiler] Compiler changes 'private' modifier on methods with annotated parameter

<a name="v_A10"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M2 - September 14, 2009 - 3.6M2
<br>Project org.eclipse.jdt.core v_A10
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A10">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=288148">288148</a>
[perfs] Comments applied for performance tests may be obsolete
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=289247">289247</a>
[1.5][compiler]Detecting duplicate methods should not consider return type
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=288920">288920</a>
[compiler] NPE renaming run() method
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=288698">288698</a>
Cannot create type hierarchy for abstract types when they have inline descendants and *.class* in project name

<a name="v_A09"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M2 - September 1, 2009
<br>Project org.eclipse.jdt.core v_A09
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A09">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287009">287009</a>
Inner Annotation Checks are Missing
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287701">287701</a>
[dom] Length of Assignment should not include whitespace
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=285230">285230</a>
[performance] Duplicate buffers created for internal classes
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286391">286391</a>
[compiler] jsr14 target behavior changed between ECJ 3.4.2 and ECJ 3.5

<a name="v_A08"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M2 - August 25, 2009
<br>Project org.eclipse.jdt.core v_A08
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A08">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287462">287462</a>
[formatter] new failures in last 2 nightly builds
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=285565">285565</a>
[inline] Inlining constant or local variables causes exceptions with tab width 0
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=285799">285799</a>
HashtableOfObject rehashes and grows buffer on removeKey()
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286912">286912</a>
[formatter] Never join lines preferences makes the formatter unstable in certain circumstances
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286668">286668</a>
[formatter] 'Never Join Lines' joins lines that are split on method invocation
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=248661">248661</a>
Axis2:  Missing required libraries in Axis 2 WS Client Projects
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286918">286918</a>
[javadoc] Compiler should warn when @see and @link tag references in package-info.java don't have fully qualified names
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=285466">285466</a>
[3.5 regression] fails to build IcedTea, works with 3.4.x
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286956">286956</a>
NPE when asking to externalize constant
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=281609">281609</a>
[javadoc] &quot;Javadoc: Invalid reference&quot; warning for @link to Java package

<a name="v_A07"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M2 - August 18, 2009
<br>Project org.eclipse.jdt.core v_A07
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A07">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286840">286840</a>
ClasspathJar getPath() should return a unique path
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=254738">254738</a>
NPE in HierarchyResolver.setFocusType
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=276294">276294</a>
Error does not go away after it is resolved
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284785">284785</a>
[1.5][compiler] Eclipse compiler shows error on javac-valid construct: varargs plus overload
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286405">286405</a>
Default value character of annotations in ClassFileEditor are badly printed
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286407">286407</a>
[Model] IMemberValuePair don't return the right value for java.lang.annotation.RetentionPolicy annotations
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=285701">285701</a>
[1.5][compiler] Internal Compiler Error - ArrayIndexOutOfBoundsException

<a name="v_A06"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M1 - August 3, 2009 - 3.6M1
<br>Project org.eclipse.jdt.core v_A06
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A06">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284948">284948</a>
[1.6][compiler] Java annotations are broken in editor when used on interface methods

<a name="v_A05"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M1 - July 30, 2009
<br>Project org.eclipse.jdt.core v_A05
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A05">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=276526">276526</a>
[content assist] Error - Type Duplicate interface Iterable for the type TestClass
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=191176">191176</a>
JavaProject#getOption optimizations

<a name="v_A04"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M1 - July 28, 2009
<br>Project org.eclipse.jdt.core v_A04
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A04">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=261909">261909</a>
ClassFileReader.getModifiers() answers funny bits
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=283225">283225</a>
[1.6][compiler] classfile versus source conformance check too strict
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284679">284679</a>
[formatter] empty single semi statement prevent enum elements format
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284482">284482</a>
[compiler] Collision cases not detected
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284431">284431</a>
Different inherited thrown exception clauses are not properly handled
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=133911">133911</a>
type.move() returns unclear exception &quot;invalid destination&quot;
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=270436">270436</a>
[assist] Interface type proposed where only class is legal
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=210385">210385</a>
[compiler] ProblemReporter#getProblemCategory misbehaves when passed ProblemSeverities.Ignore as severity parameter
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=282891">282891</a>
[compiler] "Comparing identical expressions" warning sometimes invalid
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=282869">282869</a>
[compiler] Unnecessary cast warning for cast from char to int
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=270437">270437</a>
[assist] Completion proposal leads to cycle detected error
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=217443">217443</a>
Documentation for JavaCore#CORE_ENCODING does not match the observed behavior

<a name="v_A03"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M1 - July 21, 2009
<br>Project org.eclipse.jdt.core v_A03
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A03">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=283467">283467</a>
[formatter] wrong indentation with 'Never join lines' selected
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=281776">281776</a>
Should not warn for comparison of identical expression with float type
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=282768">282768</a>
[compiler] Dead code detection should ignore trivial case for ternary if operator
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=283133">283133</a>
[formatter] IAE when pasting a snippet
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=283299">283299</a>
Complete SourceRange API

<a name="v_A02"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.6M1 - July 13, 2009
<br>Project org.eclipse.jdt.core v_A02
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A02">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Added new API type org.eclipse.jdt.core.SourceRange</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=271296">271296</a>
[assist] void typed proposal may not be appropriate in many contexts
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=281871">281871</a>
[content assist] The extension took too long to return from the 'computeCompletionProposals()' operation
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=281598">281598</a>
[assist] Problems during content assist - if project has empty zip file in classpath
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=235294">235294</a>
[formatter] javadoc for DefaultCodeFormatterConstants#FORMATTER_ALIGNMENT_FOR_ASSIGNMENT cites a non-API constant
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280497">280497</a>
Incorrect null result for IJavaProject.getClasspathEntryFor(IPath)
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=204777">204777</a>
Clarify documentation for ITypeHierarchy created on interface types
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=88265">88265</a>
Make SourceRange API

<a name="v_A01"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M1 - July 7, 2009
<br>Project org.eclipse.jdt.core v_A01
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A01">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=260968">260968</a>
Deadlock in UserLibraryManager

<a name="v_A00"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M1 - June 30, 2009
<br>Project org.eclipse.jdt.core v_A00
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A00">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>New API added to handle the new <code>invokedynamic</code> bytecode:
<pre>
org.eclipse.jdt.core.util.ByteCodeVisitorAdapter:
	public void _invokedynamic(
			int pc,
			int index,
			IConstantPoolEntry nameEntry,
			IConstantPoolEntry descriptorEntry) {
		// default behavior is to do nothing
	}
</pre>
<pre>org.eclipse.jdt.core.util.IBytecodeVisitor#_invokedynamic(int, int, IConstantPoolEntry, IConstantPoolEntry)</pre>
<pre>org.eclipse.jdt.core.util.IOpcodeMnemonics#INVOKEDYNAMIC</pre>
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=277450">277450</a>
[1.5][compiler] Problems with += and Autoboxing/Unboxing
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=206498">206498</a>
[1.7][compiler] Remove fix for bug 206483 once 1.7 VMS can handle .class files with version 51.0
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=191176">191176</a>
JavaProject#getOption optimizations
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=201762">201762</a>
Content Assist has no proposals with certain CU structure
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=281681">281681</a>
Stale code in CompilerOptions
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=231796">231796</a>
[formatter] @throws tag description is not indented using @param preference when there's a syntax error
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=255142">255142</a>
[select] Codeselect should not omit cast
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=235295">235295</a>
[formatter] javadoc of CodeFormatter#F_INCLUDE_COMMENTS needs improvement
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280134">280134</a>
[1.5][compiler] Requesting Java AST from selection has encountered a problem
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=281317">281317</a>
[search] An internal error occurred during: "Java Search".
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=276373">276373</a>
Incorrect resource comparison with IJavaProject.isOnClasspath(IResource)
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=275518">275518</a>
[assist] Content assist does not provide proposals if invoked right after a method's opening brace
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280888">280888</a>
change a java file in one plug-in will compile all related plugin projects
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=274466">274466</a>
[assist] Assert expressions should be proposed with high relevance
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=277382">277382</a>
NPE and other failures in Parser
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=275330">275330</a>
NPE from org.eclipse.jdt.internal.core.ClasspathChange.requestIndexing
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=273385">273385</a>
[model] NPE while closing project
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280079">280079</a>
NPE while parsing K_CLASS_BODY_DECLARATIONS
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280063">280063</a>
org.eclipse.jdt.internal.compiler.parser.Parser.parseClassBodyDeclarations(char[], int, int, CompilationUnitDeclaration) should return consistent results
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=267046">267046</a>
SourceMapper infinite loop on primitive type in generic
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=240934">240934</a>
Add support for the invokedynamic bytecode into the disassembler
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=267551">267551</a>
[formatter] Wrong spacing in default array parameter for annotation type
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=277965">277965</a>
[compiler] NPE in canBeSeenBy due to illegal protected toplevel class
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=273990">273990</a>
[compiler] FUP of 269388: Eclipse accepts code rejected by javac
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=279183">279183</a>
[1.6][compiler] Inconsistent stackmap frames generated by JDT cause VerifyError
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=209778">209778</a>
[search] TypeReferenceMatch#getOtherElements() fails for match in annotation
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=221065">221065</a>
[search] Search still finds overridden method
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=279836">279836</a>
[1.5][compiler] Eclipse compiler shows error on javac-valid construct: raw types on overridden methods
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280616">280616</a>
[formatter] Valid 1.5 code is not formatted inside &lt;pre&gt; tag
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280255">280255</a>
[formatter] Format edited lines adds two new lines on each save
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280061">280061</a>
[formatter] AIOOBE while formatting javadoc comment
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=276938">276938</a>
Remove unreachable removes reachable logic in case statement.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=274898">274898</a>
[recovery] IllegalArgumentException in ASTNode#setSourceRange()
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=277204">277204</a>
IAE in SharedASTProvider for generic local class.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=276741">276741</a>
comparing identical value detection does not work for this
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=276740">276740</a>
comparing identical value detection does not work for primitive types
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=278745">278745</a>
Methods overloaded with unavailable types worked in 3.4 but give "indirectly referenced.." error in 3.5
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=278305">278305</a>
[1.5][compiler] JDT accepts supertype parameterized with wildcard
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=196308">196308</a>
[formatter] Don't escape entity when formatting in &lt;pre&gt; tags within javadoc comments
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=279359">279359</a>
[formatter] Formatter with 'never join lines' produces extra level of indent
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=273619">273619</a>
[formatter] Formatting repeats *} in javadoc

<hr>
<p>For earlier build notes, also see <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.jdt.core/notes/R35_buildnotes_jdt-core.html">build notes up to Release 3.5</a>.</p>
<br>
  <p>
    <a href="http://validator.w3.org/check?uri=referer"><img
        src="http://www.w3.org/Icons/valid-html401"
        alt="Valid HTML 4.01 Transitional" height="31" width="88"></a>
  </p>
</body>
</html>

