<!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_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>
	/**
	 * 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 of the Eclipse environment, the following method 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>
	/**
	 * 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);
</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, when both of these options are used, 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 this preference activated, 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 kind 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>
<ul>
<li>New API added in <code>org.eclipse.jdt.core.JavaCore</code> in order to fix bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=263564">263564</a>:
<pre>
	/**
	 * Returns an immutable map of all known configurable options with their original default values
	 * as defined by JDT/Core.
	 * 
	 * The values of these options might be different from the values returned by getDefaultOptions()
	 * as getDefaultOptions() returned the default options defined by an installation/product/configuration
	 * (i.e. modified by the usage of a plugin_customization.ini file for example).
	 * 
	 * These options allow to configure the behaviour of the underlying components.
	 * If the map is being modified, an UnsupportedOperationException> exception is thrown.
	 * Helper constants have been defined on JavaCore for each of the option IDs
	 * (categorized in Code assist option ID, Compiler option ID and Core option ID)
	 * and some of their acceptable values (categorized in Option value). Some
	 * options accept open value sets beyond the documented constant values.
	 * Note: each release may add new options.
	 *
	 * @return an immutable map of all known configurable options with their original default values
	 * as defined by JDT/Core
	 * @since 3.6
	 */
	public static Map getOriginalDefaultOptions();
</pre>
</li>
</ul>

<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>

