<!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.4</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.4 stream</b></font>
    </td>
  </tr>
  <tr><td align="left" width="72%" class="title2"><font size="-2">java development tooling 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="http://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/?only_with_tag=R3_4_maintenance"><b>R3_4_maintenance</b></a> branch.
	  For more information on 3.4 planning, please refer to <a href="http://www.eclipse.org/jdt/core/r3.4/index.php#release-plan">JDT/Core release plan</a>,
	  the next <a href="http://www.eclipse.org/jdt/core/r3.4/index.php#milestone-plan">milestone plan</a>,
	  the overall <a href="http://www.eclipse.org/eclipse/development/eclipse_project_plan_3_4.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.3 (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_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_899_R34x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4.3 - October 27, 2009 - 3.4.3
<br>Project org.eclipse.jdt.core v_899_R34x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_899_R34x">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Incremented org.eclipse.jdt.core plug-in ID to "3.4.9"</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=124646">124646</a>
Connecting type parameter fails for local types
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=291322">291322</a>
Test errors when running JDT Core tests on Windows 7

<a name="v_898_R34x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.4.3 - October 1, 2009
<br>Project org.eclipse.jdt.core v_898_R34x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_898_R34x">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Incremented org.eclipse.jdt.core plug-in ID to "3.4.8"</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=285124">285124</a>
serialVersionUID still causes error/warning

<a name="v_897_R34x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4.3 - June 30, 2009
<br>Project org.eclipse.jdt.core v_897_R34x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_897_R34x">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Incremented org.eclipse.jdt.core plug-in ID to "3.4.7"</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=275330">275330</a>
NPE from org.eclipse.jdt.internal.core.ClasspathChange.requestIndexing

<a name="v_896_R34x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4.3 - May 20, 2009
<br>Project org.eclipse.jdt.core v_896_R34x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_896_R34x">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Incremented org.eclipse.jdt.core plug-in ID to "3.4.6"</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=261722">261722</a>
[search] NPE after removing a project
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=265962">265962</a>
[compiler] Internal compiler error on while with return clause
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=265103">265103</a>
Manifest Class-Path is not read correctly with ECJ
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=266582">266582</a>
[1.5][compiler] AbortCompilation while decoding the type variable of an anonymous type
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=264843">264843</a>
[1.5][compiler] Eclipse compiler fails to reject invalid code with primitives autoboxed to generics
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=257716">257716</a>
[compiler] Erroneous blank field field may not have been initialized
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=263877">263877</a>
[1.5][compiler] forward reference error flagged within enum

<a name="v_895_R34x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4.3 - February 6, 2009
<br>Project org.eclipse.jdt.core v_895_R34x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_895_R34x">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Incremented org.eclipse.jdt.core plug-in ID to "3.4.5"</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=249930">249930</a>
Deadlock with JavaModelManager$PerProjectInfo
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=261510">261510</a>
[compiler] Deadlock in static initializer of JDT classes

<a name="v_894_R34x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4.2 - January 28, 2009 - 3.4.2 RELEASE
<br>Project org.eclipse.jdt.core v_894_R34x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_894_R34x">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=244762">244762</a>
[1.5][compiler] Internal compiler error java.lang.NullPointerException after importing file
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=262389">262389</a>
Internal code must not use ICompilationUnit.applyTextEdit

<a name="v_893_R34x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4.2 - January 14, 2009
<br>Project org.eclipse.jdt.core v_893_R34x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_893_R34x">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=239607">239607</a>
[formatter] Incorrect removal of asterisk (*) within a block comment when formatting

<a name="v_892_R34x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4.2 - December 17, 2008
<br>Project org.eclipse.jdt.core v_892_R34x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_892_R34x">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=257869">257869</a>
Adjust Java model cache size using a property
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=257849">257849</a>
[1.5][compiler] Internal compiler error using generics w/ abstract classes &amp; interfaces
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=257434">257434</a>
[1.5][compiler] Should detect type mismatch after capture

<a name="v_891_R34x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4.2 - December 3, 2008
<br>Project org.eclipse.jdt.core v_891_R34x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_891_R34x">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=232478">232478</a>
[buildpath] Classpath failed to bind to installed JRE
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=255452">255452</a>
[1.5][compiler] Eclipse allows forward reference in enum constructor
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=252555">252555</a>
[javadoc] NPE on duplicate package-info

<a name="v_890_R34x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4.2 - November 19, 2008
<br>Project org.eclipse.jdt.core v_890_R34x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_890_R34x">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=250297">250297</a>
[compiler] NPE in org.eclipse.jdt.internal.compiler.problem.ProblemReporter.missingTypeInMethod(ProblemReporter.java:4925)

<a name="v_889_R34x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4.2 - November 12, 2008
<br>Project org.eclipse.jdt.core v_889_R34x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_889_R34x">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=252868">252868</a>
[batch][compiler] ConcurrentModificationException in org.eclipse.jdt.internal.compiler.batch.ClasspathJar.fetchLinkedJars

<a name="v_888_R34x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4.2 - November 5, 2008
<br>Project org.eclipse.jdt.core v_888_R34x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_888_R34x">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=253892">253892</a>
scripts/exportplugin.xml needs update to 3.4.4
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=241821">241821</a>
[compiler] Multiple interfaces and incompatible return types
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=251279">251279</a>
[1.5][compiler] Covariant generics interfaces causes compile error

<a name="v_887_R34x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4.2 - October 31, 2008
<br>Project org.eclipse.jdt.core v_887_R34x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_887_R34x">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Incremented org.eclipse.jdt.core plug-in ID to "3.4.4"</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=250211">250211</a>
[search] Organize Imports Hangs
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=175226">175226</a>
[buildpath] Build path contains duplicate entry
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=250975">250975</a>
[1.5][compiler] Stack overflow on static import.
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=239273">239273</a>
[1.5][compiler] ClassCastException in BinaryTypeBinding.convertMemberValue() trying to cast an ArrayBinding as a ReferenceBinding

<a name="v_886_R34x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4.2 - October 22, 2008
<br>Project org.eclipse.jdt.core v_886_R34x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_886_R34x">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=251091">251091</a>
Covariant return types not honored for combined extension and implementation

<a name="v_885_R34x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4.2 - October 8, 2008
<br>Project org.eclipse.jdt.core v_885_R34x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_885_R34x">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Incremented org.eclipse.jdt.core plug-in ID to "3.4.3"</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=243820">243820</a>
[1.5][compiler] Method has same erasure as an interface method but is not considered to implement it
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=249140">249140</a>
[1.5][compiler] asymmetric errors with covariant inherited methods
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=243692">243692</a>
[buildpath] Cannot set Attached Source from Class File Editor
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=242448">242448</a>
[1.5][compiler] Sun's javac compiles the following but jdt does not
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=245435">245435</a>
[1.5][compiler] &quot;Value for annotation attribute must be a constant expression&quot; error on valid constant expression
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=247666">247666</a>
[1.5][compiler] AIOOBE inside missing type reporting

<a name="v_884_R34x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4.2 - October 1, 2008
<br>Project org.eclipse.jdt.core v_884_R34x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_884_R34x">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=246020">246020</a>
[compiler] BatchCompilerTest#test063 fails in the IDE
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=248243">248243</a>
Add apt.pluggable.core as x-friend for jdt.core
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=247118">247118</a>
Endless loop in Signature.encodeQualifiedName
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=245576">245576</a>
[buildpath] No error message for updating read-only .classpath file
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=237772">237772</a>
[implementation] Deadlock in JDT causing UI freeze
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=186858">186858</a>
Intermittent failure of org.eclipse.jdt.core.tests.model.ExclusionPatternsTests#testCreateExcludedPackage2

<a name="v_883_R34x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4.1 - September 3, 2008 - 3.4.1
<br>Project org.eclipse.jdt.core v_883_R34x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_883_R34x">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=242933">242933</a>
[1.5] NullPointerException for @Range(min=1, max=9999999999999999)

<a name="v_882_R34x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4.1 - August 27, 2008
<br>Project org.eclipse.jdt.core v_882_R34x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_882_R34x">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=241687">241687</a>
[formatter] problem formatting block comments
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=240686">240686</a>
[formatter] Formatter do unexpected things
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=242646">242646</a>
deadlock on org.eclipse.jdt.internal.core.ExternalFoldersManager

<a name="v_881_R34x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4.1 - August 20, 2008
<br>Project org.eclipse.jdt.core v_881_R34x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_881_R34x">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=241345">241345</a>
[formatter] Didn't Format HTML tags is unavailable

<a name="v_880_R34x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4.1 - July 31, 2008
<br>Project org.eclipse.jdt.core v_880_R34x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_880_R34x">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Incremented org.eclipse.jdt.core plug-in ID to "3.4.2"</li>
</ul>
<h3>Problem Reports Fixed</h3>

<a name="v_879_R34x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4.1 - July 29, 2008
<br>Project org.eclipse.jdt.core v_879_R34x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_879_R34x">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=239439">239439</a>
[1.5][compiler] Behavior change for binding for parameterized type
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=236096">236096</a>
Incorrectly allow raw return type in overridden method
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=238014">238014</a>
[1.5][compiler] Missing "name clash" error?
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=238817">238817</a>
[1.5][compiler] Unexpected nameclash reported
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=237418">237418</a>
deadlock between auto-build/refresh right after startup

<a name="v_878_R34x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4.1 - July 22, 2008 - 3.4.1 RELEASE
<br>Project org.eclipse.jdt.core v_878_R34x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_878_R34x">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=237469">237469</a>
[assist] AbortCompilation in log during normal editing

<a name="v_877_R34x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4.1 - July 15, 2008
<br>Project org.eclipse.jdt.core v_877_R34x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_877_R34x">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=240214">240214</a>
[compiler] final bit should be cleared from class file access flag for anonymous class

<a name="v_876_R34x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4.1 - July 9, 2008
<br>Project org.eclipse.jdt.core v_876_R34x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_876_R34x">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=101610">101610</a>
Code assist not offered without transitive dependency
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=239941">239941</a>
[formatter] Unclosed html tags make the formatter to produce incorrect outputs
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=239719">239719</a>
[formatter] Code formatter destroys pre formatted javadoc comments
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=237931">237931</a>
[1.6][compiler] wrong signature of String[][] in class file
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=238923">238923</a>
[1.6][compiler] Internal compiler error caused by a for loop in an initializer block
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=239229">239229</a>
[compiler] Regression bug against Eclipse 3.3: cannot resolve correct import
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=239758">239758</a>
[1.5][compiler] Generic interface inheritance and overriding error
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=239305">239305</a>
[compiler] VerifyError caused by casting long to long to int

<a name="v_875_R34x"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4.1 - July 3, 2008
<br>Project org.eclipse.jdt.core v_875_R34x
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_875_R34x">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Incremented org.eclipse.jdt.core plug-in ID to "3.4.1"</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=239198">239198</a>
[compiler] NegativeArraySizeException thrown for triple quotes
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=238920">238920</a>
[formatter] Code Formatter removes javadoc status if @category present
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=238853">238853</a>
[formatter] Code Formatter does not properly format valid xhtml (&lt;br /&gt; &amp; &lt;p /&gt;) in javadoc.
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=238210">238210</a>
[formatter] CodeFormatter wraps line comments without whitespaces
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=236336">236336</a>
[1.6][compiler] Stack map generation error with 10,000-line method in Java
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=232565">232565</a>
[1.5][compiler] wrong autoboxing code generation leads to VerifyError at runtime
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=238484">238484</a>
[1.5][compiler] Eclipse generates bad code (major regression)
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=235882">235882</a>
[compiler] constructor-scoped inner classes unable to recognize final member variable initialization
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=235921">235921</a>
[1.5][compiler] Incorrect generic signature attribute created for inner anonymous type
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=234619">234619</a>
[1.5][compiler] Object#getClass() has wrong expression type binding with JRE from 1.6
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=233259">233259</a>
[formatter] html tag should not be split by formatter
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=238090">238090</a>
[formatter] New lines wrongly added while formatting too long @see references
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=237051">237051</a>
[formatter] Formatter insert blank lines after javadoc if javadoc contains Commons Attributes @@ annotations
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=236230">236230</a>
[formatter] SIOOBE while formatting a compilation unit.
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=226357">226357</a>
[dom] NPE in MethodBinding.getParameterAnnotations() if some, but not all parameters are annotated
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=235778">235778</a>
Potential race condition computing resolved classpath
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=236445">236445</a>
NPE in content assist
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=234172">234172</a>
[1.5][select] no hover in qualified name with generics
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=222665">222665</a>
Error opening workbench


<a name="v_874"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4.0 - June 13, 2008 - 3.4.0
<br>Project org.eclipse.jdt.core v_874
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_874">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=236599">236599</a>
Fix wording of JDT

<a name="v_873"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4.0 - June 9, 2008
<br>Project org.eclipse.jdt.core v_873
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_873">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=236252">236252</a>
Batch compiler's help should not have 'release candidate-4' in the version name

<a name="v_872"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4RC4 - June 3, 2008 - 3.4 RELEASE CANDIDATE 4
<br>Project org.eclipse.jdt.core v_872
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_872">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=234718">234718</a>
JarPackageFragmentRoot.computeChildren(..) is slow
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=234848">234848</a>
Need to trace classpath container initialization failures

<a name="v_871"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4RC3 - May 29, 2008 - 3.4 RELEASE CANDIDATE 3
<br>Project org.eclipse.jdt.core v_871
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_871">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=234307">234307</a>
Java Model Exception from org.eclipse.jdt.internal.core.Buffer.save(Buffer.javga:361)

<a name="v_870"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4RC3 - May 29, 2008
<br>Project org.eclipse.jdt.core v_870
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_870">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=234336">234336</a>
[formatter] JavaDocTestCase.testMultiLineCommentIndent* tests fail in I20080527-2000 build
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=233800">233800</a>
[1.5][compiler] Internal compiler NPE on checkUnsafeCast

<a name="v_869"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4RC3 - May 27, 2008
<br>Project org.eclipse.jdt.core v_869
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_869">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=234120">234120</a>
PublicScanner not in sync with internal Scanner
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=233625">233625</a>
Content Assist outof memory
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=232768">232768</a>
[formatter] does not format block and single line comment if too much selected
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=233887">233887</a>
[javadoc][1.5] Build of Eclipse project stop by NullPointerException and will not continue on Eclipse version later than 3.4M7
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=232814">232814</a>
[compiler] Testcase with &quot;value1 - (-value2)&quot; not working when value2 is final

<a name="v_868"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4RC2 - May 22, 2008 - 3.4 RELEASE CANDIDATE 2
<br>Project org.eclipse.jdt.core v_868
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_868">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=230944">230944</a>
[formatter] Formatter does not respect /*-

<a name="v_867"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4RC2 - May 22, 2008
<br>Project org.eclipse.jdt.core v_867
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_867">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=232788">232788</a>
[formatter] Formatter misaligns stars when formatting block comments
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=233228">233228</a>
[formatter] line comments which contains \\u are not correctly formatted
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=233224">233224</a>
[formatter] Xdoclet tags looses @ on format
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=232466">232466</a>
[formatter] References of inlined tags are still split in certain circumstances
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=228648">228648</a>
AST: no binding for Javadoc reference to inner class

<a name="v_866"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4RC2 - May 20, 2008
<br>Project org.eclipse.jdt.core v_866
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_866">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=232803">232803</a>
Reconcile doesn't find methods with a $ in parameter types
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=232488">232488</a>
[formatter] Code formatter scrambles JavaDoc of Generics
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225737">225737</a>
[compiler][1.5] Generics - JDT cannot compile hudson-core when javac can
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=231861">231861</a>
[1.5][compiler] Generics: problem with partial generics


<a name="v_865"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4RC1 - May 15, 2008- 3.4 RELEASE CANDIDATE 1
<br>Project org.eclipse.jdt.core v_865
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_865">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=232285">232285</a>
[formatter] New comment formatter wrongly formats javadoc header/footer with several contiguous stars
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229480">229480</a>
[builder] compiler exception causes NPE in AbstractImageBuilder.acceptResult()

<a name="v_864"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4RC1 - May 14, 2008
<br>Project org.eclipse.jdt.core v_864
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_864">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=232037">232037</a>
CompilationUnit#equals(Object) throws NPE if owner is null
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=227185">227185</a>
[1.5][compiler] Compiler error using generics with static class
 

<a name="v_863"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4RC1 - May 13, 2008
<br>Project org.eclipse.jdt.core v_863
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_863">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=231297">231297</a>
[formatter] New JavaDoc formatter wrongly split inline tags before reference
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=231263">231263</a>
[formatter] New JavaDoc formatter wrongly indent tags description
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229682">229682</a>
[formatter] New comment put text over the max line length in some cases
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=231293">231293</a>
New errors about indirectly referenced classes from required .class files in 20080508-200
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=231622">231622</a>
Some classes from Missing classes from Cntrl-Shift-T
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=231747">231747</a>
[assist] UnsupportedOperationException even when the context is extended

<a name="v_862"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4RC1 - May 12, 2008
<br>Project org.eclipse.jdt.core v_862
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_862">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=231579">231579</a>
Converting compiler.tool to API tools support
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=231367">231367</a>
org.eclipse.jdt.compiler.tool is not singleton
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=230026">230026</a>
[1.5][compiler] CCE during static import resolution with parameterized type
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=230885">230885</a>
[content assist] NPE at ParameterGuesser.createVariable()
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=163200">163200</a>
Moving code with compile errors outside of a source folder preserve compile errors
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229951">229951</a>
StackOverflowError during JavaSearchScope.add for large workspace
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=230864">230864</a>
[assist] Code assist do not work in parameterized method with 'this' as receive

<a name="v_861"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4RC1 - May 8, 2008
<br>Project org.eclipse.jdt.core v_861
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_861">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=230127">230127</a>
[clean up] NPE in Organize Imports save action
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=231053">231053</a>
[formatter] Comment formatter fails to format long strings in @see references
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=231060">231060</a>
[formatter] '*' are not preserved in Javadoc comments when located at the beginning of the line

<a name="v_860"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4RC1 - May 7, 2008
<br>Project org.eclipse.jdt.core v_860
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_860">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=222284">222284</a>
[search] ZipException while searching if linked jar doesn't exist any longer
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=191322">191322</a>
[javadoc] @see or @link reference to method without signature fails to resolve to base class method
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=194743">194743</a>
Constructor tooltip does not show constructor javadoc without source attachment
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=228464">228464</a>
Annotation.getMemberValuePairs() empty for single attribute with empty value
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229128">229128</a>
[search] Search finding matches in working copies that are not part of scope
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=230391">230391</a>
[organize imports] unmatched packages group is always first
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229927">229927</a>
No code assist in array initializer

<a name="v_859"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4RC1 - May 5, 2008
<br>Project org.eclipse.jdt.core v_859
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_859">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=230364">230364</a>
[formatter] Test failure in CleanUpStressTest after changes to comment formatter
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=214558">214558</a>
[1.5][compiler] javac reports ambiguous method ref that Eclipse does not identify
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=228291">228291</a>
[1.5][compiler] Incorrect unsafe warning for casting complex but static types.
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=230070">230070</a>
[1.5][compiler] Internal compiler error: NullPointerException at org.eclipse.jdt.internal.compiler.ast.CastExpression.checkUnsafeCast()
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=230230">230230</a>
[formatter] New comment formatter does not handle properly all scanner exceptions
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=230184">230184</a>
[formatter] New comment formatter split comment line between contiguous tokens
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229954">229954</a>
[formatter] New comment formatter fails to format correctly when invalid throws reference
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229932">229932</a>
[formatter] New comment formatter wrongly formats @param tags with wrong syntax
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229683">229683</a>
[formatter] New comment formatter takes 2 passes to format when tags are inside text
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229968">229968</a>
Perf regression while computing type hierarchy
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229636">229636</a>
JavaModelException should stay instanciatable
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=228109">228109</a>
[1.5][compiler] Enum static field initializer in enum constructor failed to give compilation error

<a name="v_858"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M7 - April 30, 2008 - 3.4 MILESTONE 7
<br>Project org.eclipse.jdt.core v_858
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_858">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=228651">228651</a>
[dom] NPE in MemberValuePairBinding.isDefault()
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229569">229569</a>
[formatter] New comments formatter does not indent lines inside immutable tags
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229526">229526</a>
Conversion to Api tools adds a new internal method inside an API class
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229595">229595</a>
OptionTests.testBug68993() failing due to wrong assumption

<a name="v_857"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M7 - April 29, 2008
<br>Project org.eclipse.jdt.core v_857
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_857">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=229373">229373</a>
[formatter] New comment formatter gets lost when encountering invalid closing tags
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229304">229304</a>
cannot 'Open Type' a binary type that is present in an external folder
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229326">229326</a>
[formatter] New comment formatter takes 2 passes to format some block comments
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=227730">227730</a>
[Javadoc] Missing description should not be warned for {@inheritDoc}

<a name="v_856"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M7 - April 28, 2008
<br>Project org.eclipse.jdt.core v_856
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_856">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=229108">229108</a>
[formatter] New comment formatter adds unnecessary spaces before and after &lt;code&gt; tags
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229107">229107</a>
[formatter] New comment formatter fails to format correctly when &lt;table ...&gt; tags is used
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229103">229103</a>
[formatter] New comment formatter split inlined tags incorrectly

<a name="v_855"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M7 - April 27, 2008
<br>Project org.eclipse.jdt.core v_855
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_855">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=227043">227043</a>
[formatter] CodeFormatter does not format line and block comments
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=228528">228528</a>
NPE when interrupting the build
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=228639">228639</a>
Source attachment root detection doesn't work if source folder contains META-INF
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79798">79798</a>
[compiler] Wrong compiler error when interface overrides two methods with same signature but different exceptions
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=227546">227546</a>
[assist] No method declaration completion in enum constant
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=158526">158526</a>
[search] NPE in JavaSearchScope.addEnclosingProjectOrJar(..)
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=182738">182738</a>
[search] Avoid keeping list of roots in JavaWorkspaceScope
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=228193">228193</a>
[formatter] Javadoc comments are still formatted using JavaDocRegion!
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=227822">227822</a>
[select] ClassCastException thrown if unable to resolve core Java types
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=227855">227855</a>
incorrect compilation errors related to annotations
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=208010">208010</a>
[compiler] Compiler reports unneccessary warning for static members
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=222735">222735</a>
DOM AST: hide recovered bindings unless 'recovered bindings' is enabled

<a name="v_854"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M7 - April 22, 2008
<br>Project org.eclipse.jdt.core v_854
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_854">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>ZIP archives that have an extension other than <code>.zip</code> and <code>.jar</code> can now be put on the classpath as well.
      See <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=182360">bug 182360</a> for details.</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=209643">209643</a>
keyword completion proposals for @interface and enum
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=227531">227531</a>
add one exception logging in ASTParser
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=227941">227941</a>
org.eclipse.jdt.internal.compiler.batch.Main writes bad characters to an xml log file
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=227930">227930</a>
[compiler] NPE during exception reporting
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=227502">227502</a>
[1.5][compiler] Bad error message for abstract enum
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=227761">227761</a>
NPE from CompletionContext.getVisibleElements
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=227813">227813</a>
root detection in in external linked source folders
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=209149">209149</a>
[1.7][compiler] 1.7 compliance allows type params to be declared in any order
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=182360">182360</a>
Only Jar and Zip files allowed for java.io.File in ClasspathContainers using
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=222326">222326</a>
[1.5][compiler] NullPointerException during: "Compute launch button tooltip"
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=161030">161030</a>
add code assist for enum values
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=207631">207631</a>
[Content Assist] Autocompletion fails after use of binary right-shift operators
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=226918">226918</a>
[jsr199] the standard java file manager returned by the Eclipse compiler does not accept non-modifiable iterators as remaining arg to JavaFileManager#handleOption

<a name="v_853"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M7 - April 15, 2008
<br>Project org.eclipse.jdt.core v_853
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_853">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>The Java compiler now uses multiple CPUs when running in batch mode. See bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=142126">142126</a>.</li>
<li>In order to avoid breaking existing clients while fixing bug 
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=102780">102780</a>, 
the new formatter behavior (i.e. format comments while formatting the whole
compilation unit) will be activated only if a specific flag was set.
<p>
This flag is defined in CodeFormatter and named <code>'F_INCLUDE_COMMENTS'</code>.
Clients will have to combine it with existing CodeFormatter.K_COMPILATION_UNIT
or CodeFormatter.UNKNOWN kinds to see the fix for this bug activated...
</p>
Here's its complete new API changes done on
<code>org.eclipse.jdt.core.formatter.CodeFormatter</code>:
<pre>
/**
 * Flag used to include the comments during the formatting of the code
 * snippet.
 *
 * This flag can only be combined with following kinds:
 *      . {@link #K_COMPILATION_UNIT}
 *      . {@link #K_UNKNOWN}
 *
 * Note also that it has an effect only when the option
 * {@link DefaultCodeFormatterConstants
 *  #FORMATTER_COMMENT_FORMAT_JAVADOC_COMMENT}
 * is set to {@link DefaultCodeFormatterConstants#TRUE} while calling
 * {@link #format(int, String, int, int, int, String)} or
 * {@link #format(int, String, IRegion[], int, String)} methods
 *
 * For example, with the Eclipse default formatter options, the formatting of
 * the following code snippet using {@link #K_COMPILATION_UNIT}:
 *
 * public class X {
 * /**
 *  * This is just a simple example to show that comments will be formatted while processing a compilation unit only if the constant flag <code>F_INCLUDE_COMMENT</code> flag is set.
 *  * @param str The input string */
 *  void foo(String str){}}
 *
 * will produce the following output:
 *
 * public class X {
 *      /**
 *       * This is just a simple example to show that comments will be formatted while processing a compilation unit only if the constant flag <code>F_INCLUDE_COMMENT</code> flag is set.
 *       * 
 *       * @param str The input string
 *       */
 *      void foo(String str){
 *      }
 *  }
 *
 * Adding this flavor to the kind given while formatting the same source
 * (e.g. {@link #K_COMPILATION_UNIT} | {@link #F_INCLUDE_COMMENTS})
 * will produce the following output instead:
 *
 * public class X {
 *      /**
 *       * This is just a simple example to show that comments will be formatted
 *       * while processing a compilation unit only if the constant flag
 *       * <code>F_INCLUDE_COMMENT</code> flag is set.
 *       * 
 *       * @param str
 *       *                 The input string
 *       */
 *      void foo(String str){
 *      }
 *  }
 *
 * <i><u>Note</u>: Although we're convinced that the formatter should
 * always include the comments while processing a
 * {@link #K_COMPILATION_UNIT kind of compilation unit}, we
 * have decided to add a specific flag to fix this formatter incorrect behavior.
 * This will prevent all existing clients using the {@link #K_COMPILATION_UNIT}
 * kind to be broken while formatting.</i>
 *
 * @since 3.4
 */
public static final int F_INCLUDE_COMMENTS = 0x1000;
</pre>
Note that CodeFormatter.UNKNOWN and CodeFormatter.K_COMPILATION_UNIT
specification will be updated to include this new possible combination:
<pre>
/**
 * Unknown kind
 * 
 * Note that since 3.4, the {@link #F_INCLUDE_COMMENTS} flag can be added
 * to this constant in order to get the comments formatted if a
 * compilation unit is processed.
 */
public static final int K_UNKNOWN = 0x00;

/**
 * Kind used to format a compilation unit
 *
 * Note that using this constant, the javadoc comments are only indented while
 * processing the compilation unit.
 *
 * <b>Since 3.4</b>, if the corresponding comment option is set to
 * <code>true</code> then it is also possible to format the comments on the fly
 * by adding the {@link #F_INCLUDE_COMMENTS} flag to this kind of format.
 */
public static final int K_COMPILATION_UNIT = 0x08;
</pre>
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=142126">142126</a>
utilizing multiple CPUs for Java compiler
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=102780">102780</a>
[formatter] CodeFormatter does not format Javadoc
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=219855">219855</a>
[1.5][compiler] StackOverflowError during: "Requesting Java AST from selection"
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=223986">223986</a>
Invalid incompatible return type error
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=226890">226890</a>
[jsr199] enable CompilerToolTests#testCompilerOneClassWithEclipseCompiler4 on Linux
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=226673">226673</a>
CompletionContext.getVisibleElements(..) doesn't find assignable fields
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=178982">178982</a>
[assist] Bad static import relevance in content assist
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225563">225563</a>
Class with compile errors results in invalid class file format
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=226313">226313</a>
Anonymous enum type has wrong name and source range
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=223685">223685</a>
[clean-up] Necessary cast removed
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82712">82712</a>
[1.5] Code assist does not show method parameters from static imports
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=226134">226134</a>
CCE in SourceMethod.getDefaultValue() for constructor
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97310">97310</a>
code assist for type variable bounds: should not suggest classes
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=224402">224402</a>
[compiler] CCE in compiler: MissingTypeBinding cannot be cast to ProblemReferenceBinding
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96604">96604</a>
[1.5][codeassist] missing proposals for wildcard capture

<a name="v_852"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M7 - April 8, 2008
<br>Project org.eclipse.jdt.core v_852
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_852">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=215331">215331</a>
[assist] Inconsistent completions for member types
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=221904">221904</a>
Java Model Exception while trying to open *.class file
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=223488">223488</a>
'package-info.java' does not exist in PackageBinding.getAnnotations()
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=193045">193045</a>
[1.5][assist] Code completion fails in inner class w/ foreach loop
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=223899">223899</a>
Base type var should not be proposed before Object var in == case
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225577">225577</a>
[compiler] Default abstract methods should be tagged as synthetic
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=133005">133005</a>
BinaryTypeConverter cannot convert generic type reference.
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=224351">224351</a>
Regression in performance test FullSourceWorkspaceModelTests#testFindType
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=215975">215975</a>
new field declaration CompletionProposal cuts changes initial prefix
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=217078">217078</a>
[compiler] compiler.regression.RuntimeTests#test0001_memory_exhaustion failing when using IBM JRE
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=219099">219099</a>
Content assist does not not offer multiple choices for ambiguous static imports

<a name="v_851"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M7 - April 1, 2008
<br>Project org.eclipse.jdt.core v_851
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_851">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=224715">224715</a>
Missing abstract problem methods should be tagged as synthetic methods

<a name="v_850"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M6 - March 28, 2008 - 3.4 MILESTONE 6
<br>Project org.eclipse.jdt.core v_850
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_850">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=224458">224458</a>
[search] NPE trying to search for a field declaration

<a name="v_849"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M6 - March 27, 2008
<br>Project org.eclipse.jdt.core v_849
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_849">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=223878">223878</a>
[content assist] Illegal argument exception from content assist

<a name="v_848"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M6 - March 26, 2008
<br>Project org.eclipse.jdt.core v_848
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_848">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=222534">222534</a>
[compiler] wrong field hides field warning for private fields

<a name="v_847"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M6 - March 25, 2008
<br>Project org.eclipse.jdt.core v_847
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_847">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li><code>JavaCore.COMPILER_PB_MISSING_JAVADOC_TAG_DESCRIPTION_ALL_TAGS</code> introduced in 3.4M3 has been renamed to 
     <code>COMPILER_PB_MISSING_JAVADOC_TAG_DESCRIPTION_ALL_STANDARD_TAGS</code>.</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=223838">223838</a>
[dom] AnnotationBinding.isRecovered() always return false
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=221267">221267</a>
[1.5][compiler] missing annotation bindings on interface method parameter

<a name="v_846"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M6 - March 23, 2008
<br>Project org.eclipse.jdt.core v_846
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_846">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>The batch compiler now uses the <code>Class-Path</code> clause of jar files 
    manifests to complete the classpath. For jar files that are specified on a
    <code>-classpath</code> option, the compiler follows <code>Class-Path</code>
    clauses recursively and appends each referenced jar file to the end of the 
    classpath, provided it is not on the classpath yet. See bug
    <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97332">97332</a> for
    further details.</li>
<li>Added APIs to call the batch compiler from a stand-alone application:
	 <code>BatchCompiler#compiler(String, PrintWriter, PrintWriter, CompilationProgress)</code> and
	 <code>BatchCompiler#compiler(String[], PrintWriter, PrintWriter, CompilationProgress)</code>.
	 See <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=217233">217233</a> for more details.</li>
<li>All search reference matches may now have a local element. Clients can access
this local element using the <code>getLocalElement()</code> method on the new
<code>ReferenceMatch</code> API class:<pre>

/**
 * An abstract Java search match that represents a reference.
 *
 * This class is not intended to be subclassed by clients.
 *
 * @since 3.4
 */
public abstract class ReferenceMatch extends SearchMatch {
...
/**
 * Returns the local element of this search match, or <code>null</code> if none.
 * A local element is the inner most element that contains the reference and that is not
 * reachable by navigating from the root of the {@link IJavaModel} using 
 * {@link IParent#getChildren()}.
 *
 * Known element types for local elements are {@link IJavaElement#ANNOTATION}, 
 * {@link IJavaElement#LOCAL_VARIABLE} and {@link IJavaElement#TYPE_PARAMETER}.
 * However clients should not assume that this set of element types is closed as
 * other types of elements may be returned in the future, e.g. if new types
 * of elements are added in the Java model. Clients can only assume that the
 * {@link IJavaElement#getParent() parent} chain of this local element eventually leads 
 * to the element from {@link #getElement()}.
 *
 * The local element being an {@link IAnnotation} is the most usal case. For example,
 *
 *    . searching for the references to the method <code>Annot.clazz()</code> in
 * 
 *             public class Test {
 *                 void method() {
 *                     @Annot(clazz=Test.class) int x;
 *                 }
 *             }
 * 
 *      will return one {@link MethodReferenceMatch} match whose local element
 *      is the {@link IAnnotation} '<code>Annot</code>'.
 *
 *    . searching for the references to the type <code>Deprecated</code> in
 * 
 *             public class Test {
 *                @Deprecated void method() {}
 *             }
 * 
 *      will return one {@link TypeReferenceMatch} match whose local element
 *      is the {@link IAnnotation} '<code>Deprecated</code>'.
 *
 *    . searching for the references to the field <code>CONST</code> in
 * 
 *              @Num(number= Num.CONST)
 *              @interface Num {
 *                  public static final int CONST= 42;
 *                  int number();
 *              }
 * 
 *      will return one {@link FieldReferenceMatch} match whose local element
 *      is the {@link IAnnotation} '<code>Num</code>'.
 *
 * A local element may also be a {@link ILocalVariable} whose type is the referenced type. For example,
 *
 *    . searching for the references to the type <code>Test</code> in
 * 
 *         public class Test {
 *             void foo() {
 *                Test local;
 *             }
 *         }
 * 
 *      will return one {@link TypeReferenceMatch} match whose local element
 *      is the {@link ILocalVariable} '<code>local</code>'.
 *
 * Or a local element may be an {@link ITypeParameter} that extends the referenced type. For example,
 *
 *    . searching for the references to the type <code>Test</code> in 
 * 
 *         public class X&lt;T extends Test&gt; {
 *         }
 * 
 *      will return one {@link TypeReferenceMatch} match whose local element
 *      is the {@link ITypeParameter} '<code>T</code>'.
 * 
 * @return the local element of this search match, or <code>null</code> if none.
 * 
 * @since 3.4
 */
public IJavaElement getLocalElement() {
	return null;
}
</pre>
See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=209996">bug 209996</a>
for more details.
</li>

</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=209996">209996</a>
[search] Add a way to access the most local enclosing annotation for reference search matches
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=222902">222902</a>
[Javadoc] Missing description should not be warned in some cases
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=217233">217233</a>
[compiler] Add compiler API to call the batch compiler from a stand-alone application
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=223495">223495</a>
[assist] Member types of missing parametrized types are not proposed
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=223479">223479</a>
[assist] Member types of missing types are not proposed in class body
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=223253">223253</a>
NPE in TypeBinding.getName
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=223360">223360</a>
[search] Huge error message if OOME while building workspace
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=222213">222213</a>
Java model not updated after quick fix 'Add unimplemented methods'
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97332">97332</a>
[compiler] Add support for classpath specified in manifest file inside a jar
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=218824">218824</a>
[DOM/AST] incorrect code leads to IllegalArgumentException during AST creation
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=183211">183211</a>
[1.5][compiler] single static import for a field is ambiguous

<a name="v_845"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M6 - March 18, 2008
<br>Project org.eclipse.jdt.core v_845
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_845">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Added new API <code>org.eclipse.jdt.core.JavaCore#getOptionForConfigurableSeverity(int)</code>
    to link back problem IDs to options that configure problems:<br>
<pre>
	/**
	 * Returns the option that can be used to configure the severity of the 
	 * compiler problem identified by problemID if any, null otherwise. Non-null 
	 * return values are taken from the constants defined by this class whose 
	 * names start with COMPILER_PB and for which the possible values of the 
	 * option are defined by { "error", "warning", "ignore" }. A null return 
	 * value means that the provided problem ID is unknown or that it matches 
	 * a problem whose severity cannot be configured.
	 * @param problemID one of the problem IDs defined by {@link IProblem}
	 * @return the option that can be used to configure the severity of the 
	 *         compiler problem identified by problemID if any, null otherwise
	 * @since 3.4
	 */
	public static String getOptionForConfigurableSeverity(int problemID) {...}
</pre>
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=222399">222399</a>
Regression in several Model performance tests
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=221680">221680</a>
Classpath gets reset randomly in headless mode
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=222458">222458</a>
IType#getFullyQualifiedParameterizedName() is underspecified
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=221723">221723</a>
Override method fails with and error saying &quot;1&quot; due to a java.lang.ArrayIndexOutOfBoundsException:
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=218603">218603</a>
[api] provide a mapping from problem id to preference key
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=219625">219625</a>
[1.5][compiler] Generics related AbstractMethodError that is not given by Sun Java
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=216930">216930</a>
[1.5][compiler] Wrong compiler error when using static method with same signature as non static one but with variable arguments
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=222457">222457</a>
Javadoc fixes for IType#get*QualifiedName()
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=222080">222080</a>
[assist] Wrong proposals order when completing on an item of an array
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=222182">222182</a>
[formatter] AIOOB in Util.getLineNumber(Util.java:438)
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=156168">156168</a>
[model] type separator is ignored in BinaryType.getFullyQualifiedName(enclosingTypeSeparator)

<a name="v_844"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M6 - March 11, 2008
<br>Project org.eclipse.jdt.core v_844
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_844">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>CodeAssist: Added new API to give more information about completion context:<br>
<ul>
<li>CompletionContext#getEnclosingElement() - This method returns the innermost enclosing Java element which contains the completion location.
<pre>
public class X {
	void foo() {
		zzz| // ctrl+space at | location
	}
}
</pre>
<code>getEnclosingElement()</code> returns the IMethod named foo.
</li>
<li>CompletionContext#getVisibleElements(String) - This method returns the elements visible from the completion location.
<pre>
public class X {
	p.Y f1;
	p.Z f2;
	void foo() {
		p.Y l1;
		p.Z l2;
		zzz| // ctrl+space at | location
	}
}
</pre>
<code>getVisibleElements("Lp/Z;")</code> returns the IField named f2 and the ILocalVariable name l2.
</li>
</ul>

<pre>
public class CompletionRequestor {
	...
	
	/**
	 * Returns whether this requestor requires an extended context.
	 * 
	 * By default this method return <code>false</code>.
	 * 
	 * @return <code>true</code> if this requestor requires an extended context.
	 * 
	 * @see CompletionContext#isExtended()
	 * 
	 * @since 3.4
	 */
	public boolean isExtendedContextRequired() {...}
	
	/**
	 * Sets whether this requestor requires an extended context.
	 * 
	 * @param require <code>true</code> if this requestor requires an extended context.
	 * 
	 * @see CompletionContext#isExtended()
	 * 
	 * @since 3.4
	 */
	public void setRequireExtendedContext(boolean require) {...}
	
	...
}
 </pre>
 <pre>
public class CompletionContext {
	...
	
	/**
	 * Returns whether this completion context is an extended context.
	 * Some methods of this context can be used only if this context is an extended context but an extended context consumes more memory.
	 * 
	 * @return <code>true</code> if this completion context is an extended context.
	 * 
	 * @since 3.4
	 */
	public boolean isExtended() {...}
	
	/**
	 * Returns the innermost enclosing Java element which contains the completion location or <code>null</code> if this element cannot be computed.
	 * The returned Java element and all Java elements in the same compilation unit which can be navigated to from the returned Java element are special Java elements:
	 *
	 * - they are based on the current content of the compilation unit's buffer, they are not the result of a reconcile operation
	 * - they are not updated if the buffer changes.
	 * - they do not contain local types which are not visible from the completion location.
	 * - they do not give information about categories. {@link IMember#getCategories()} will return an empty array
	 * 
	 * Reasons for returning <code>null</code> include:
	 * 
	 * - the compilation unit no longer exists
	 * - the completion occurred in a binary type. However this restriction might be relaxed in the future.
	 * 
	 * @return the innermost enclosing Java element which contains the completion location or <code>null</code> if this element cannot be computed.
	 * 
	 * @exception UnsupportedOperationException if the context is not an extended context
	 * 
	 * @since 3.4
	 */
	public IJavaElement getEnclosingElement() {...}
	
	/**
	 * Return the elements which are visible from the completion location and which can be assigned to the given type.
	 * An element is assignable if its type can be assigned to a variable
	 * of the given type, as specified in section 5.2 of <em>The Java Language
	 * Specification, Third Edition</em> (JLS3).
	 * A visible element is either:
	 *
	 * - a {@link ILocalVariable} - the element type is {@link ILocalVariable#getTypeSignature()}
	 * - a {@link IField} - the element type is {@link IField#getTypeSignature()}
	 * - a {@link IMethod} - the element type is {@link IMethod#getReturnType()}
	 * 
	 * Returned elements defined in the completed compilation unit are special Java elements:
	 * 
	 * - they are based on the current content of the compilation unit's buffer, they are not the result of a reconcile operation
	 * - they are not updated if the buffer changes.
	 * - they do not contain local types which are not visible from the completion location.
	 * - they do not give information about categories. {@link IMember#getCategories()} will return an empty array
	 * 
	 * Note the array can be empty if:
	 *
	 * - the compilation unit no longer exists
	 * - the completion occurred in a binary type. However this restriction might be relaxed in the future.
	 * 
	 * @param typeSignature elements which can be assigned to this type are returned.
	 * 		If <code>null</code> there is no constraint on the type of the returned elements.
	 * 
	 * @return elements which are visible from the completion location and which can be assigned to the given type.
	 * 
	 * @exception UnsupportedOperationException if the context is not an extended context
	 * 
	 * @see #isExtended()
	 * 
	 * @since 3.4
	 */
	public IJavaElement[] getVisibleElements(String typeSignature) {...}
	
	...
}
 </pre>
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=221266">221266</a>
Bad syntax error report on string literals containing escapes
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=202470">202470</a>
[assist] provide all elements that are visible

<a name="v_843"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M6 - March 5, 2008
<br>Project org.eclipse.jdt.core v_843
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_843">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Added new compiler option to control whether Exception and Throwable are
    considered or not while reporting unused declared thrown exceptions.
<pre>
 * Compiler option ID: Reporting Unused Declared Thrown Exception Exempts Exception And Throwable.
 *    When enabled, the compiler will issue an error or a warning when a 
 *    method or a constructor is declaring a checked exception else than
 *    java.lang.Throwable or java.lang.Exception as thrown,
 *    but its body actually raises neither that exception, nor any other 
 *    exception extending it. When disabled, the compiler will issue an 
 *    error or a warning when a method or a constructor is declaring a 
 *    checked exception (including java.lang.Throwable and 
 *    java.lang.Exception) as thrown, but its body actually raises 
 *    neither that exception, nor any other exception extending it. 
 *    The severity of the unused declared thrown exception problem is 
 *    controlled with option COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION.
 *    This diagnostic is further tuned by options
 *    COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_INCLUDE_DOC_COMMENT_REFERENCE
 *    and COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_WHEN_OVERRIDING.
 *
 *    Option id: "org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable"
 *    Possible values: { "enabled", "disabled" }
 *    Default: "enabled"
 </pre>
(note that the specification for unusedDeclaredThrownException has been
amended accordingly, and that another option that had been added in 3.4M5 but
never surfaced in the IDE has been withdrawn; see 
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=219461">bug 219461</a>
for details)
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=221215">221215</a>
[assist] NPE in problem reporter
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=219461">219461</a>
[compiler][options] Limit warning for unecessary unchecked exceptions to Throwable and Exception

<a name="v_842"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M6 - March 4, 2008
<br>Project org.eclipse.jdt.core v_842
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_842">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Added one new <code>IJavaSearchConstants</code> fine grained search API
constant to reduce the search to type references used in the <code>instanceof</code>
pattern (see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=221130">bug 221130</a>):
<pre>
/**
 * Return only type references used as an instance of.
 *
 * When this flag is set, only {@link TypeReferenceMatch} matches will be
 * returned.
 *
 * @since 3.4
 * @category limitTo
 */
int INSTANCEOF_TYPE_REFERENCE = 0x100000;
</pre>
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=221110">221110</a>
[search] NPE at org.eclipse.jdt.internal.compiler.util.SimpleLookupTable.removeKey
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=221130">221130</a>
[search] No fine-grain search for instanceof criteria
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220565">220565</a>
adapt to new API ICompilationUnit.applyEdits
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=219937">219937</a>
Javadoc content assist does not propose method inherited from interface
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=167262">167262</a>
[1.5][compiler] @Override specification
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220967">220967</a>
[compiler] Extra secondary error in presence of missing type
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220811">220811</a>
NPE trying to update classpath
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=215841">215841</a>
[search] Opening Type Hierarchy extremely slow
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220542">220542</a>
Trailing separator in classpath entry lost

<a name="v_841"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M6 - February 27, 2008
<br>Project org.eclipse.jdt.core v_841
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_841">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>New API added on ICompilationUnit to apply text edits to its buffer. 
<pre>
public interface ICompilationUnit {
	...
	
   /**
    * Applies a text edit to the compilation unit's buffer. 
    * 
    * @param edit the edit to apply
    * @param monitor the progress monitor to use or <code>null</code> if
    *                no progress should be reported
    * @return the undo edit 
    * @throws JavaModelException if this edit can not be applied to the
    *                            compilation unit's buffer. Reasons include:
    * This compilation unit does not exist
    * ({@link IJavaModelStatusConstants#ELEMENT_DOES_NOT_EXIST}).
    * The provided edit can not be applied as there is a problem with the
    * text edit locations ({@link IJavaModelStatusConstants#BAD_TEXT_EDIT_LOCATION}).
    * 
    * @since 3.4
    */
    public UndoEdit applyTextEdit(TextEdit edit, IProgressMonitor monitor) throws JavaModelException;
    ...
}
</pre>
Implementors of IBuffer can now additionally implement <code>IBuffer.ITextEditCapability</code>
and provide the implementation for <code>applyTextEdit</code>. Calls to <code>ICompilationUnit.applyTextEdit</code>
will then be forwarded to this API.
</li>
<li>Compiler is now also able to recover missing parameterized types (e.g. <code>Zork&lt;String&gt;</code>).</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=196200">196200</a>
[jsr269] Need annotation bindings even when code contains errors
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220361">220361</a>
[1.5][compiler] Compiler incorrectly rejects static raw member type as parameterized
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220111">220111</a>
[1.5][compiler] Type mismatch errors on identical types; code compiles with javac
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=117694">117694</a>
[api] Applying edits to a ICompilationUnit.
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220453">220453</a>
Addition of externalFoldersManager inside the java model manager breaks retrieval of JavaCore.getOptions() with no headless eclipse

	


<a name="v_840"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M6 - February 26, 2008
<br>Project org.eclipse.jdt.core v_840
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_840">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>External library folders are now supported. One can use the existing API <code>JavaCore#newLibraryEntry(...)</code> with 
     a file system path to an external library folder to add this folder on the build path. Note that one can also use an external source folder
     as a source attachment using the same API.</li>
<li>Code Assist: Added API to give information about the completed token location.<br>
Clients can call <code>CompletionContext#getTokenLocation()</code> to know if the completed token is at the start of the member
or at the start of a statement. In the future this API could be improved and more locations could be recognized.
<pre>
public class CompletionContext {
	...
	
	/**
	 * The completed token is the first token of a member declaration.
	 * e.g.
	 *
	 * public class X {
	 *   Foo| // completion occurs at |
	 * }
	 * 
	 * @see #getTokenLocation()
	 * 
	 * @since 3.4
	 */
	public static final int TL_MEMBER_START = 1;
	
	/**
	 * The completed token is the first token of a statement.
	 * e.g.
	 *
	 * public class X {
	 *   public void bar() {
	 *     Foo| // completion occurs at |
	 *   }
	 * }
	 * 
	 * @see #getTokenLocation()
	 * 
	 * @since 3.4
	 */
	public static final int TL_STATEMENT_START = 2;
	
	/**
	 * Returns the location of completion token being proposed.
	 * The returned location is a bit mask which can contain some values
	 * of the constants declared on this class whose name starts with <code>TL</code>,
	 * or possibly values unknown to the caller.
	 * 
	 * The set of different location values is expected to change over time.
	 * It is strongly recommended that clients do <b>not</b> assume that
	 * the location contains only known value, and code defensively for 
	 * the possibility of unexpected future growth.
	 * 
	 * @return the location
	 * 
	 * @since 3.4
	 */
	public int getTokenLocation() {...}
	
	...
}
</pre>
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=218397">218397</a>
[search] Can't find references of generic local class.
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220171">220171</a>
[assist] No suggesting 'hasGenericError' variable
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=182537">182537</a>
Enhance classpath container to support external class folders
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=202467">202467</a>
[assist] provide info what is completed

<a name="v_839"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M6 - February 22, 2008
<br>Project org.eclipse.jdt.core v_839
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_839">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>The compiler is now better resilient to missing types referenced from sources. This will improve secondary errors, 
and all JDT stack manipulating DOM AST and bindings. Annotation processors are also now able to see such missing types
(also see bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=196200">196200</a>). Note that with current support, 
parameterized types are not fully recovered.</li>
</ul>

<h3>Problem Reports Fixed</h3>

<a name="v_838"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M6 - February 19, 2008
<br>Project org.eclipse.jdt.core v_838
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_838">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=217995">217995</a>
Documentation for JavaCore#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION [...] fails to make crystal-clear the cases of Exception and Throwable
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=217910">217910</a>
Parameter annotations should be displayed in front of each parameter in disassembled code
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=219064">219064</a>
Javadoc of AST#newTypeDeclaration() refers to inexistent setEnumeration(..)
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=212096">212096</a>
LocalVariable.hashCode throws NPE when this.parent is null

<a name="v_837"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M6 - February 12, 2008
<br>Project org.eclipse.jdt.core v_837
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_837">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=217907">217907</a>
Compact mode in the disassembler should also work for annotation values

<a name="v_836"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M5 - February 5, 2008 - 3.4 MILESTONE 5
<br>Project org.eclipse.jdt.core v_836
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_836">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=212100">212100</a>
[dom] Can't create binding to inner class

<a name="v_835"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M5 - February 3, 2008
<br>Project org.eclipse.jdt.core v_835
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_835">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Code formatter: 3 new options were added to better handle the addition of new lines after annotations.
<pre>
 * FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_MEMBER
 * FORMATTER / Option to insert a new line after an annotation on a member (package, class, method, field declaration)
 *     - option id:         "org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member"
 *     - possible values:   { INSERT, DO_NOT_INSERT }
 *     - default:           INSERT
 * 
 * FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_PARAMETER
 * FORMATTER / Option to insert a new line after an annotation on a parameter
 *     - option id:         "org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter"
 *     - possible values:   { INSERT, DO_NOT_INSERT }
 *     - default:           DO_NOT_INSERT
 *
 * FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_LOCAL_VARIABLE
 * FORMATTER / Option to insert a new line after an annotation on a local variable
 *     - option id:         "org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable"
 *     - possible values:   { INSERT, DO_NOT_INSERT }
 *     - default:           INSERT
</pre>
The addition of new lines after annotations has been discussed in <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=122247">bug 122247</a><br>
Also note that previously available code formatter constant FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION has been deprecated.<br>
All new options must be enabled to activate old strategy.
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=210425">210425</a>
[1.5][compiler] @SuppressWarnings(&quot;unchecked&quot;)  not considered necessary for unconstrained generic parameters
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=217059">217059</a>
Regression in Model performance test testProjectFindUnknownType()
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=212912">212912</a>
Javadoc bugs in IMemberValuePair
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=122247">122247</a>
[formatter] add support to handle parameter annotations
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=216686">216686</a>
[1.5][compiler] Failures of inference and overload resolution
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=216897">216897</a>
[compiler][options] Compile error when disabling 'Ignore Unchecked Exception'
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=216683">216683</a>
[1.5][compiler] Confusion when homnymous types in local and enclosing scope
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=202490">202490</a>
Javadoc of JavaCore options hard to use
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=216291">216291</a>
[1.5][compiler] Compiler messages should use &quot;1.5&quot; instead of &quot;5.0&quot;
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=216875">216875</a>
[search] Field- and LocalVariableReferenceMatch confuse read/write for field access on LHS
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=216895">216895</a>
NPE found in .log while running ClasspathTests
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=216817">216817</a>
JavaCore.getEncoding() fails when there is no workspace.

<a name="v_834"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M5 - January 29, 2008
<br>Project org.eclipse.jdt.core v_834
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_834">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=216692">216692</a>
[1.5][compiler] Protected type not visible in subclass
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=216565">216565</a>
[1.5][compiler] Cannot convert T to T
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=216747">216747</a>
Should use AVOID_NATURE_CONFIG when updating project references
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=208260">208260</a>
[search] Document the pattern syntax for SearchPattern#createPattern(String, ..)
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=130778">130778</a>
Invalid annotation elements cause no annotation to be in the AST
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=210524">210524</a>
[batch][compiler][options] -warn:allDeprecation -warn:-deprecation does not behave as documented
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=216100">216100</a>
[1.5][compiler] Brigdes are not correcly generated
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=213249">213249</a>
Regression in TypeHierarchy when a super-class can't be resolved
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=215681">215681</a>
Type Hierarchy crashes in some cases of user input
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=215333">215333</a>
[batch][compiler][options] the documentation for specialParamHiding needs improvement
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=100278">100278</a>
[compiler] Add compiler warning for explicitly declared runtime exceptions
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=191090">191090</a>
[compiler] Preserve annotations for the problem methods
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=215843">215843</a>
[1.5][compiler] Compiler error with generic covariant

<a name="v_833"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M5 - January 22, 2008
<br>Project org.eclipse.jdt.core v_833
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_833">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=215976">215976</a>
PublicScanner doesn't contain all the fix of Scanner
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=215759">215759</a>
DOM AST regression tests should be improved
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=215858">215858</a>
[AST/DOM] CCE when using ASTParser.setFocalPosition(int) with the position of a field declaration name
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127739">127739</a>
IAE in Signature.getReturnType while hovering a method of type having $ in its name
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=210746">210746</a>
Class folder in build path does not refresh properly
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=138882">138882</a>
Should surface failure to get CU's contents
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=214972">214972</a>
[1.5][compiler] Wrong Signature for methods inside InnerTypes with generics .

<a name="v_832"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M5 - January 15, 2008
<br>Project org.eclipse.jdt.core v_832
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_832">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=215019">215019</a>
[search] JavaSearchBugsTests.testBug181488a is randomly failing
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=213703">213703</a>
[search] Indexing job progress should be more detailed
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=186540">186540</a>
[search] engine should allocate progress monitor ticks for reporting package declarations
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=214731">214731</a>
[batch][compiler] ClasspathJar#getPath does not honor its contract
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=211588">211588</a>
[batch][compiler][options] undue interactions between enableJavadoc, javadoc and allJavadoc
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=213427">213427</a>
EFS throws NullPointerException
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=181981">181981</a>
[model] Linked Source Folders with Parallel package structure do not work with occurrences
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=213692">213692</a>
[compiler] Wrong unnecessary NON-NLS diagnostic after syntax recovery
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=214450">214450</a>
annotation is broken
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=176831">176831</a>
[search] No search results due to malformed search scope
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=214647">214647</a>
[dom] NPE in MethodBinding.getParameterAnnotations(..)


<a name="v_831"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M5 - January 8, 2008
<br>Project org.eclipse.jdt.core v_831
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_831">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=209936">209936</a>
[javadoc] Missing code implementation in the compiler on inner classes
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=210681">210681</a>
Code assist fails to propose inner type
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=211881">211881</a>
[assist] Code assist fails inside an if statement
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=212153">212153</a>
stack overflow when press ctrl+space
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=210518">210518</a>
[batch][compiler][options] -warn:unused wrongly behaves as -warn:+unused
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=214002">214002</a>
[dom] NPE in MethodBinding.getParameterAnnotations()
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=153765">153765</a>
[search] Reference to package is not found in qualified annotation
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=213284">213284</a>
[formatter] NPE on formatting region
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=213283">213283</a>
[formatter] AIOOBE when formatting region
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=213570">213570</a>
IncrementalTests#testRenameMainType() fails with IBM JRE 6.0
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=213509">213509</a>
[dom] IMethodBinding.getParameterAnnotations returns annotations for wrong parameter
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=204749">204749</a>
[1.5][javadoc] NPE in JavadocQualifiedTypeReference
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=212834">212834</a>
[dom] IMethodBinding.getParameterAnnotations does not return annotations
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=211718">211718</a>
[1.5][compiler] compiler error with nested enum in class using generics

<a name="v_830"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M5 - December 18, 2007
<br>Project org.eclipse.jdt.core v_830
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_830">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=212857">212857</a>
[dom] AST has wrong source range after parameter with array-valued annotation
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=212224">212224</a>
Unresolvable type causes ArrayOutOfBoundsException in IType.resolveType
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=212769">212769</a>
SetClasspathOperation no longer adds project for refresh
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=164862">164862</a>
[ast rewrite] ListRewrite.remove(...) does not remove inserted nodes

<a name="v_829"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M4 - December 12, 2007 - 3.4 MILESTONE 4
<br>Project org.eclipse.jdt.core v_829
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_829">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=212599">212599</a>
[search] fine grained search must not report matches in Javadoc

<a name="v_828"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M4 - December 8, 2007
<br>Project org.eclipse.jdt.core v_828
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_828">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=209993">209993</a>
[1.5][search] Generic search does not work properly while using BindingKey
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=211781">211781</a>
[search] clarify 'ALLOCATION_EXPRESSION_TYPE_REFERENCE'
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=211779">211779</a>
[search] better name for SUPERTYPE_TYPE_REFERENCE?
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=211872">211872</a>
[search] References to annotations not found in class file without source
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=210094">210094</a>
Creating type hierarchy does not report progress

<a name="v_827"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M4 - December 4, 2007
<br>Project org.eclipse.jdt.core v_827
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_827">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Added <code>IJavaSearchConstants</code> API constants for fine grained search
(see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=155013">bug 155013</a>).<br>
These constants are additional flags which should be set on <code>limitTo</code>
parameter while calling <code>SearchPattern.createPattern(...)</code> methods.<br>
They can be combined to get results of multiple fine grain search in one single query.
<p>
Here is the exhaustive list of these fine grain search flags:<pre>

/**
 * Return only type references used as the type of a field declaration.
 *
 * When this flag is set, only {@link TypeReferenceMatch} matches will be
 * returned.
 *
 * @since 3.4
 * @category limitTo
 */
int FIELD_DECLARATION_TYPE_REFERENCE = 0x40;

/**
 * Return only type references used as the type of a local variable declaration.
 *
 * When this flag is set, only {@link TypeReferenceMatch} matches will be
 * returned.
 *
 * @since 3.4
 * @category limitTo
 */
int LOCAL_VARIABLE_DECLARATION_TYPE_REFERENCE = 0x80;

/**
 * Return only type references used as the type of a method parameter
 * declaration.
 *
 * When this flag is set, only {@link TypeReferenceMatch} matches will be
 * returned.
 *
 * @since 3.4
 * @category limitTo
 */
int PARAMETER_DECLARATION_TYPE_REFERENCE = 0x100;

/**
 * Return only type references used as a super type or as a super interface.
 *
 * When this flag is set, only {@link TypeReferenceMatch} matches will be
 * returned.
 *
 * @since 3.4
 * @category limitTo
 */
int SUPERTYPE_TYPE_REFERENCE = 0x200;

/**
 * Return only type references used in a throws clause.
 *
 * When this flag is set, only {@link TypeReferenceMatch} matches will be
 * returned.
 *
 * @since 3.4
 * @category limitTo
 */
int THROWS_CLAUSE_TYPE_REFERENCE = 0x400;

/**
 * Return only type references used in a cast expression.
 *
 * When this flag is set, only {@link TypeReferenceMatch} matches will be
 * returned.
 *
 * @since 3.4
 * @category limitTo
 */
int CAST_TYPE_REFERENCE = 0x800;

/**
 * Return only type references used in a catch header.
 *
 * When this flag is set, only {@link TypeReferenceMatch} matches will be
 * returned.
 *
 * @since 3.4
 * @category limitTo
 */
int CATCH_TYPE_REFERENCE = 0x1000;

/**
 * Return only type references used in class instance creation.
 *
 * When this flag is set, only {@link TypeReferenceMatch} matches will be
 * returned.
 *
 * Example:
 * 	public class Test {
 * 		Test() {}
 * 		static Test bar()  {
 * 			return new <i>Test</i>();
 * 		}
 * 	}
 *
 * Searching references to the type <code>Test</code> using this flag in the
 * above snippet will match only the reference in italic.
 * 
 * Note that array creations are not returned when using this flag.
 * 
 * @since 3.4
 * @category limitTo
 */
int CLASS_INSTANCE_CREATION_TYPE_REFERENCE = 0x2000;

/**
 * Return only type references used as a method return type.
 *
 * When this flag is set, only {@link TypeReferenceMatch} matches will be
 * returned.
 *
 * @since 3.4
 * @category limitTo
 */
int RETURN_TYPE_REFERENCE = 0x4000;

/**
 * Return only type references used in an import declaration.
 *
 * When this flag is set, only {@link TypeReferenceMatch} matches will be
 * returned.
 *
 * @since 3.4
 * @category limitTo
 */
int IMPORT_DECLARATION_TYPE_REFERENCE = 0x8000;

/**
 * Return only type references used as an annotation.
 *
 * When this flag is set, only {@link TypeReferenceMatch} matches will be
 * returned.
 *
 * @since 3.4
 * @category limitTo
 */
int ANNOTATION_TYPE_REFERENCE = 0x10000;

/**
 * Return only type references used as a type argument in a parameterized
 * type or a parameterized method.
 *
 * When this flag is set, only {@link TypeReferenceMatch} matches will be
 * returned.
 *
 * @since 3.4
 * @category limitTo
 */
int TYPE_ARGUMENT_TYPE_REFERENCE = 0x20000;

/**
 * Return only type references used as a type variable bound.
 *
 * When this flag is set, only {@link TypeReferenceMatch} matches will be
 * returned.
 *
 * @since 3.4
 * @category limitTo
 */
int TYPE_VARIABLE_BOUND_TYPE_REFERENCE = 0x40000;

/**
 * Return only type references used as a wildcard bound.
 *
 * When this flag is set, only {@link TypeReferenceMatch} matches will be
 * returned.
 *
 * @since 3.4
 * @category limitTo
 */
int WILDCARD_BOUND_TYPE_REFERENCE = 0x80000;

/**
 * Return only super field accesses or super method invocations (e.g. using the
 * <code>super</code> qualifier).
 *
 * When this flag is set, the kind of returned matches will depend on the
 * specified nature of the searched element:
 * 	. for the {@link #FIELD} nature, only {@link FieldReferenceMatch}
 * 		matches will be returned,
 * 	. for the {@link #METHOD} nature, only {@link MethodReferenceMatch}
 * 		matches will be returned.
 *
 * @since 3.4
 * @category limitTo
 */
int SUPER_REFERENCE = 0x1000000;

/**
 * Return only qualified field accesses or qualified method invocations.
 *
 * When this flag is set, the kind of returned matches will depend on the
 * specified nature of the searched element:
 * 	. for the {@link #FIELD} nature, only {@link FieldReferenceMatch}
 * 		matches will be returned,
 * 	. for the {@link #METHOD} nature, only {@link MethodReferenceMatch}
 * 		matches will be returned.
 *
 * @since 3.4
 * @category limitTo
 */
int QUALIFIED_REFERENCE = 0x2000000;

/**
 * Return only primary field accesses or primary method invocations (e.g. using
 * the <code>this</code> qualifier).
 *
 * When this flag is set, the kind of returned matches will depend on the
 * specified nature of the searched element:
 * 	. for the {@link #FIELD} nature, only {@link FieldReferenceMatch}
 * 		matches will be returned,
 * 	. for the {@link #METHOD} nature, only {@link MethodReferenceMatch}
 * 		matches will be returned.
 *
 * @since 3.4
 * @category limitTo
 */
int THIS_REFERENCE = 0x4000000;

/**
 * Return only field accesses or method invocations without any qualification.
 *
 * When this flag is set, the kind of returned matches will depend on the
 * specified nature of the searched element:
 * 	. for the {@link #FIELD} nature, only {@link FieldReferenceMatch}
 * 		matches will be returned,
 * 	. for the {@link #METHOD} nature, only {@link MethodReferenceMatch}
 * 		matches will be returned.
 *
 * @since 3.4
 * @category limitTo
 */
int IMPLICIT_THIS_REFERENCE = 0x8000000;
</pre>
</li>
<li>Fix for <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=209642">bug 209642</a> required the index version to be incremented. 
    Indexes will be automatically regenerated upon subsequent search queries (accounting for indexing notification in search progress 
    dialogs).
</li>
<li>Search Engine is now able to find references to annotations inside class files which do not have any attached sources.
(see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=211366">bug 211366</a> for more details).
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=211857">211857</a>
[search] Standard annotations references not found on binary fields and methods when no source is attached
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=211366">211366</a>
[search] does not return references to types in binary classes
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=211762">211762</a>
ConcurrentModificationException initializing Java Tools
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=210498">210498</a>
Extra type in hierarchy when focusing on local class
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=211609">211609</a>
[compiler][1.5] Unable to resolve annotations defined with a Class attribute
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=209936">209936</a>
[javadoc] Missing code implementation in the compiler on inner classes
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=206597">206597</a>
IType#resolveType(String) is not implemented for binary types
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=207775">207775</a>
incomplete source range for anonymous type
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=211290">211290</a>
Wrong delta renaming .classpath file
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=207890">207890</a>
Checking out JFace and then SWT leads to a strange state
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=209642">209642</a>
[index] Improve search for annotation references by using a specific category
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=155013">155013</a>
[search] [DCR] More finegrained options for Java search

<a name="v_826"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M4 - November 27, 2007
<br>Project org.eclipse.jdt.core v_826
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_826">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Tuned the compiler diagnosis for unused <code>@SuppressWarnings</code> to only complain if the relevant warnings were effectively
enabled when compiling. So if you turn off certain warnings, then the compiler is not going to suggest getting rid of existing <code>@SuppressWarnings</code>
in your code, until you will have enabled these back, and the compiler will have proved that there is no occurrence of them.
</li>
<li>Added API <code>IMethod#getDefaultValue()</code> to retrieve the default value of an annotation method.</li>
<li>Added API <code>IMemberValuePair#K_SIMPLE_NAME</code> to indicate that the value kind of the value is a simple name reference.</li>
<li>Added API <code>IJavaProject#findElement(String, WorkingCopyOwner)</code> to retrieve a <code>IJavaElement</code> from a binding key.</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=192670">192670</a>
[api] need api to get from binding key to a IJavaElement
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=210567">210567</a>
[1.5][search] Parameterized type reference not found when used in type parameter bounds
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=210922">210922</a>
ArrayStoreException when formatting set of regions
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=210353">210353</a>
Improve documentation for overridingPackageDefaultMethod option in JavaCore#getDefaultOptions' javadoc
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=208541">208541</a>
[formatter] Formatter does not format whole region/selection
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=210638">210638</a>
[Debug] Can't restore Breakpoints view : concurrent access/hashmap
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=210691">210691</a>
[search] Type references position invalid in import references when using &quot;*&quot; pattern
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=210689">210689</a>
[search] Type references are not found in import declarations when JUnit tests only use working copies
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=210565">210565</a>
Null value is obtained from IMemberValuePair, when type is Enum
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=209958">209958</a>
Support getting default value from IMethod
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=210310">210310</a>
IJavaElementDelta contains wrong data after APT processor is enabled
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=210213">210213</a>
[1.5][compiler] Unused SuppressWarnings shouldn't complain if warnings are not even enabled
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=210070">210070</a>
Type hierarchy unpredictable
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=210404">210404</a>
Method parameters are not recovered when followed by an annotation with a syntax error
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=210422">210422</a>
[compiler] Need to have local bindings created in error cases
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=210273">210273</a>
Content Assist cannot cope with explicit parameter types

<a name="v_825"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M4 - November 20, 2007
<br>Project org.eclipse.jdt.core v_825
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_825">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=209623">209623</a>
NullPointerexception on List.toArray + F3
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=209823">209823</a>
IAnnotation#getSourceRange() and #getNameRange() throw JME on annotation of ILocalVariable
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=209961">209961</a>
[compiler][apt] NPE in apt processing
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=209475">209475</a>
BindingKey.isRawType() doesn't return the right result
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=209222">209222</a>
Stack overflow in TypeHierarchyPerfTest
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=209661">209661</a>
ILocalVariable for method parameter misses annotations
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=209655">209655</a>
[jsr199] export package should specify x-internal:=true

<a name="v_824"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M4 - November 13, 2007
<br>Project org.eclipse.jdt.core v_824
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_824">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Added new compiler option to find redundant superinterfaces.
<pre>
* COMPILER / Reporting Redundant Superinterface
*    When enabled, the compiler will issue an error or a warning if a type
*    explicitly implements an interface that is already implemented by any 
*    of its supertypes.
*     - option id: "org.eclipse.jdt.core.compiler.problem.redundantSuperinterface"
*     - possible values:   { "error", "warning", "ignore" }
*     - default:           "ignore"
</pre>
(see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77918">bug 77918</a>)
</li>
</ul>

<h3>Problem Reports Fixed</h3>

<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=200951">200951</a>
[ast rewrite] removing parentheses yields syntax error
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=209319">209319</a>
[ast rewrite] @SuppressWarning is inserting an extra line break
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=208383">208383</a>
IProblem.UnusedWarningToken has wrong category
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=209153">209153</a>
[1.5][compiler] VerifyError due to generic cast to a non visible type
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=209150">209150</a>
[dom] Recovered type binding for &quot;java.lang.Object&quot; information are not complete
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=186410">186410</a>
[dom] StackOverflowError due to endless superclass bindings hierarchy
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77918">77918</a>
[compiler] Unnecessary implementation of interface in class declaration
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=208995">208995</a>
Static method hides method from instance when using generics
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=209054">209054</a>
[search] for references to method finds wrong interface call
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=208234">208234</a>
Specify that CodeFormatter is not intended to be subclassed
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=138018">138018</a>
When passed unsupported javac -warn warning options, fail gracefully &amp; ignore
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=206423">206423</a>
Optimization opportunity in DefaultProblemFactory
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=208960">208960</a>
Internal Compiler Error on valid code with particular combination of org.eclipse.jdt.core.compiler.codegen.targetPlatform and o.e.j.c.c.source

<a name="v_823"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M4 - November 6, 2007
<br>Project org.eclipse.jdt.core v_823
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_823">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=208807">208807</a>
JavaCore.getDefaultOptions() throws an exception when there is no workspace
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=178596">178596</a>
[search] Search for method references does not find references to interface method
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=207754">207754</a>
[AST][DOM] source range of ParenthesizedExpression does not include the parenthesis
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=187430">187430</a>
Unresolved types surfacing through DOM AST for annotation default values
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=207929">207929</a>
No import added to declaring class if static member is 'class'
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=207572">207572</a>
[select] codeselect not available if unterminated string literal
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111093">111093</a>
More problems with IMethodBinding#isSubsignature(..)
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=206017">206017</a>
[compiler] Type mistmatch on field declaration should be reported against initialization expression
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=208263">208263</a>
[ast rewrite] performance problems with lots of changes
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=207758">207758</a>
[1.5][compiler] Unused SupressWarnings detection should consider more error situations
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=207573">207573</a>
[1.5][compiler] Internal compiler error: ClassCastException / ArrayBinding
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=208030">208030</a>
[1.7][compiler] Missing unused type argument warning for constructor invocations
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=208386">208386</a>
Annotation Javadoc glitches

<a name="v_822"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M3 - October 31, 2007 - 3.4 MILESTONE 3
<br>Project org.eclipse.jdt.core v_822
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_822">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Added API <code>CodeFormatter#format(int, String, IRegion[], int, String)</code> to allow the formatting of a set of
	 <code>org.eclipse.jface.text.IRegion</code>s.</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=203304">203304</a>
Allow to format set of regions

<a name="v_821"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M3 - October 27, 2007
<br>Project org.eclipse.jdt.core v_821
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_821">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Added new compiler optional warning for diagnosing unnecessary @SuppressWarnings annotation. This is mostly helpful
to get rid of <code>@SupressWarnings(...)</code> annotations which were necessary a while ago, but are no longer useful.
Note that <code>@SuppressWarnings("all")</code> is still silencing the warning for unnecessary <code>@SuppressWarnings</code>,
as it is the master switch to silence ALL warnings.
Also added option: <code>JavaCore.COMPILER_PB_UNUSED_WARNING_TOKEN</code> and problem ID
<code>IProblem.UnusedWarningToken</code>.
<pre>
* COMPILER / Reporting Unnecessary @SuppressWarnings
*    When enabled, the compiler will issue an error or a warning when encountering @SuppressWarnings annotation 
*    for which no corresponding warning got detected in the code. This diagnostic is provided to help developers to get
*    rid of transient @SuppressWarnings no longer needed. Note that <code>@SuppressWarnings("all")</code> is still 
*    silencing the warning for unnecessary <code>@SuppressWarnings</code>, as it is the master switch to silence ALL warnings.
*     - option id:         "org.eclipse.jdt.core.compiler.problem.unusedWarningToken"
*     - possible values:   { "error", "warning", "ignore" }
*     - default:           "warning"
</pre>
(see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127533">bug 127533</a>)
</li>
<li>Added the following APIs to support annotation in the Java model (see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79112">bug 79112</a>
     for more details):
     <ul>
     <li><pre>
public interface IAnnotation extends IJavaElement, ISourceReference {
	String getElementName();
	IMemberValuePair[] getMemberValuePairs() throws JavaModelException;
	ISourceRange getNameRange() throws JavaModelException;
	int getOccurrenceCount();
}    </pre></li>
     <li><pre>
public interface IMemberValuePair {
	int K_INT = 1;
	int K_BYTE = 2;
	int K_SHORT = 3;
	int K_CHAR = 4;
	int K_FLOAT = 5;
	int K_DOUBLE = 6;
	int K_LONG = 7;
	int K_BOOLEAN = 8;
	int K_STRING = 9;
	int K_ANNOTATION = 10;
	int K_CLASS = 11;
	int K_QUALIFIED_NAME = 12;
	int K_UNKNOWN = 13;
	String getMemberName();
	Object getValue();
	int getValueKind();
}    </pre></li>
     <li><pre>
public interface IAnnotatable {
	IAnnotation getAnnotation(String name);
	IAnnotation[] getAnnotations() throws JavaModelException;
}    </pre><code>IField</code>, <code>IMethod</code>, <code>IType</code>, <code>IPackageDeclaration</code>, and <code>ILocalVariable</code>
     now implement this interface.</li>
     <li><pre>
public interface IJavaElement extends IAdaptable {
	...
	int ANNOTATION = 16;
	...
}    </pre></li>
     <li><pre>
public interface IJavaElementDelta {
	...
	public int F_ANNOTATIONS = 0x400000;
	public IJavaElementDelta[] getAnnotationDeltas();	
	...
}    </pre></li>
     </ul>
</li>
<li>Code Assist: Added API <code>CompletionRequestor#CompletionRequestor(boolean ignoreAll)</code> to be able to ignore all completion kinds by default instead of propose all completion kinds by default.
</li>
<li>Code Assist: Improved code assist inside an <code>if</code> statement with an <code>instanceof</code> expression as condition.<br>
When a member access is completed in this case then the members of the <code>instanceof</code> type are proposed and the receiver is casted to this type.
<pre>
Object x = ... ;
if (x instanceof IType) {
   x.get|code assist
</pre>
The method <code>IType#getFullyQualifiedName()</code> will be proposed and the receiver will be casted to <code>IType</code>.
The completion string will be '((IType)x).getFullyQualifiedName()'.<br>
<br>
These proposals will be proposed with the new proposal kinds <code>CompletionProposal#METHOD_REF_WITH_CASTED_RECEIVER</code> and
<code>CompletionProposal#FIELD_REF_WITH_CASTED_RECEIVER</code>.<br>
These new proposals require new API on CompletionProposal to be usable by client.
<pre>
public class CompletionProposal {
   ...

   /**
    * Completion is a reference to a method with a casted receiver.
    * This kind of completion might occur in a context like
    * &lt;code&gt;"receiver.fo^();"&lt;/code&gt; and complete it to
    * &lt;code&gt;""((X)receiver).foo();"&lt;/code&gt;.
    * &lt;p&gt;
    * The following additional context information is available
    * for this kind of completion proposal at little extra cost:
    * &lt;ul&gt;
    * &lt;li&gt;{@link #getDeclarationSignature()} -
    * the type signature of the type that declares the method that is referenced
    * &lt;/li&gt;
    * &lt;li&gt;{@link #getFlags()} -
    * the modifiers flags of the method that is referenced
    * &lt;/li&gt;
    * &lt;li&gt;{@link #getName()} -
    * the simple name of the method that is referenced
    * &lt;/li&gt;
    * &lt;li&gt;{@link #getReceiverSignature()} -
    * the type signature of the receiver type. It's the type of the cast expression.
    * &lt;/li&gt;
    * &lt;li&gt;{@link #getSignature()} -
    * the method signature of the method that is referenced
    * &lt;/li&gt;
    * &lt;/ul&gt;
    * &lt;/p&gt;
    * 
    * @see #getKind()
    * 
    * @since 3.4
    */
    public static final int METHOD_REF_WITH_CASTED_RECEIVER;

   /**
    * Completion is a reference to a field with a casted receiver.
    * This kind of completion might occur in a context like
    * &lt;code&gt;"recevier.ref^ = 0;"&lt;/code&gt; and complete it to
    * &lt;code&gt;"((X)receiver).refcount = 0;"&lt;/code&gt;.
    * &lt;p&gt;
    * The following additional context information is available
    * for this kind of completion proposal at little extra cost:
    * &lt;ul&gt;
    * &lt;li&gt;{@link #getDeclarationSignature()} -
    * the type signature of the type that declares the field that is referenced
    * &lt;/li&gt;
    * &lt;li&gt;{@link #getFlags()} -
    * the modifiers flags (including ACC_ENUM) of the field that is referenced
    * &lt;/li&gt;
    * &lt;li&gt;{@link #getName()} -
    * the simple name of the field that is referenced
    * &lt;/li&gt;
    * &lt;li&gt;{@link #getReceiverSignature()} -
    * the type signature of the receiver type. It's the type of the cast expression.
    * &lt;/li&gt;
    * &lt;li&gt;{@link #getSignature()} -
    * the type signature of the field's type (as opposed to the
    * signature of the type in which the referenced field
    * is declared)
    * &lt;/li&gt;
    * 
    * &lt;/ul&gt;
    * &lt;/p&gt;
    * 
    * @see #getKind()
    * 
    * @since 3.4
    */
   public static final int FIELD_REF_WITH_CASTED_RECEIVER;

   /**
    * Returns the type signature or package name of the relevant
    * receiver in the context, or &lt;code&gt;null&lt;/code&gt; if none.
    * &lt;p&gt;
    * This field is available for the following kinds of
    * completion proposals:
    * &lt;ul&gt;
    *  &lt;li&gt;&lt;code&gt;FIELD_REF_WITH_CASTED_RECEIVER&lt;/code&gt; - type signature
    * of the type that cast the receiver of the field that is referenced&lt;/li&gt;
    *  &lt;li&gt;&lt;code&gt;METHOD_REF_WITH_CASTED_RECEIVER&lt;/code&gt; - type signature
    * of the type that cast the receiver of the method that is referenced&lt;/li&gt;
    * &lt;/ul&gt;
    * For kinds of completion proposals, this method returns
    * &lt;code&gt;null&lt;/code&gt;. Clients must not modify the array
    * returned.
    * &lt;/p&gt;
    * 
    * @return a type signature or a package name (depending
    * on the kind of completion), or &lt;code&gt;null&lt;/code&gt; if none
    * @see Signature
    * 
    * @since 3.4
    */
   public char[] getReceiverSignature() {}

   /**
    * Returns the character index of the start of the
    * subrange in the source file buffer containing the
    * relevant receiver of the member being completed. This
    * receiver is an expression.
    * 
    * &lt;p&gt;
    * This field is available for the following kinds of
    * completion proposals:
    * &lt;ul&gt;
    *  &lt;li&gt;&lt;code&gt;FIELD_REF_WITH_CASTED_RECEIVER&lt;/code&gt;&lt;/li&gt;
    *  &lt;li&gt;&lt;code&gt;METHOD_REF_WITH_CASTED_RECEIVER&lt;/code&gt;&lt;/li&gt;
    * &lt;/ul&gt;
    * For kinds of completion proposals, this method returns &lt;code&gt;0&lt;/code&gt;.
    * &lt;/p&gt;
    * 
    * @return character index of receiver start position (inclusive)
    * 
    * @since 3.4
    */
   public int getReceiverStart() {}

   /**
    * Returns the character index of the end (exclusive) of the subrange
    * in the source file buffer containing the
    * relevant receiver of the member being completed.
    * 
    * * &lt;p&gt;
    * This field is available for the following kinds of
    * completion proposals:
    * &lt;ul&gt;
    *  &lt;li&gt;&lt;code&gt;FIELD_REF_WITH_CASTED_RECEIVER&lt;/code&gt;&lt;/li&gt;
    *  &lt;li&gt;&lt;code&gt;METHOD_REF_WITH_CASTED_RECEIVER&lt;/code&gt;&lt;/li&gt;
    * &lt;/ul&gt;
    * For kinds of completion proposals, this method returns &lt;code&gt;0&lt;/code&gt;.
    * &lt;/p&gt;
    * 
    * @return character index of receiver end position (exclusive)
    * 
    * @since 3.4
    */
   public int getReceiverEnd() {}

   ...
}
</pre>
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127533">127533</a>
[1.5][compiler] warning on unused @SuppressWarnings annotations
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=207445">207445</a>
IMemberValuePair with heterogenous array values should be of kind K_UNKNOWN
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=207257">207257</a>
[search] SearchEngine returns incorrectly typed SearchMatch when searching for local variable declarations
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=207441">207441</a>
Wrong delta for files created in folders that are on a java project as classes folder
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=207465">207465</a>
[assist] CompletionRequestor javadoc doesn't specify if 'isIgnored' has an effect on required proposals
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=193210">193210</a>
[1.5][compiler] Internal compiler error java.lang.NullPointerException
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=193909">193909</a>
improve content assist after 'instanceof'
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=207299">207299</a>
[1.5][compiler] StackOverflow when eliminating type variables
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=207418">207418</a>
Need API on CompletionRequestor to ignore all proposals
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79112">79112</a>
[1.5] [model] accessing annotation on Java elements

<a name="v_820"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M3 - October 23, 2007
<br>Project org.eclipse.jdt.core v_820
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_820">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Added a new compiler participant API to notify participants when a project's build is finished
(see <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=180107">bug 180107</a>):
<pre>
/**
 * Notifies this participant that a build has finished for the project.
 * This will be sent, even if buildStarting() was not sent when no source files needed to be compiled
 * or the build failed.
 * Only sent to participants interested in the project.
 * @param project the project about to build
 * @since 3.4
  */
public void buildFinished(IJavaProject project)
</pre>
</li>
<li>The 'Null pointer access' potential programming problem is now reported as a 
    warning by default, whereas it was previously ignored. See details in bug
    <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=192875">192875</a>.
</li> 
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=157541">157541</a>
[organize imports] organize imports does not work in package-info.java
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=200724">200724</a>
[compiler] Assignment with no effect undetected
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=192875">192875</a>
[compiler][options][null] Set &quot;Null pointer access&quot; to warning by default
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=180107">180107</a>
[PERF] need CompilationParticipant.buildComplete() API
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=205860">205860</a>
ASTParser.createBindings() returns [null]
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=206027">206027</a>
JavaCore#initializeAfterLoad - Util.setSourceAttachmentProperty performance
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=206522">206522</a>
Chkpii error in N20071016-0010
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=206483">206483</a>
[compiler][1.7] 1.7 VMs cannot read .class files generated with target 1.7

<a name="v_819"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M3 - October 16, 2007
<br>Project org.eclipse.jdt.core v_819
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_819">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Added new compiler optional warning for diagnosing generic invocations of non-generic methods. Basically, from Java7 compliance on, a non-generic method
may be invoked with explicit type arguments syntax, which though unused are to be silently ignored. With this warning, the compiler will still flag such situations.
The warning is on by default, and is suppressable with <code>@SuppressWarnings("unused")</code>.
Also added option: <code>JavaCore.COMPILER_PB_UNUSED_TYPE_ARGUMENTS_FOR_METHOD_INVOCATION</code> and problem ID
<code>IProblem.UnusedTypeArgumentsForMethodInvocation</code>.
<pre>
* COMPILER / Reporting Presence of Type Arguments for a Non-Generic Method Invocation
*    When enabled, the compiler will issue an error or a warning whenever type arguments are encountered for a
*    non-generic method invocation. Note that prior to compliance level is "1.7", this situation would automatically result
*    in an error. From Java7 on, unused type arguments are being tolerated, and optionally warned against.
*     - option id:         "org.eclipse.jdt.core.compiler.problem.unusedTypeArgumentsForMethodInvocation"
*     - possible values:   { "error", "warning", "ignore" }
*     - default:           "warning"
</pre>
</li>
<li>Fix for <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=122885">bug 122885</a> required the build state format to change. 
    As a consequence, a full rebuild is expected when reusing existing workspaces.
</li>
</ul>
<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=168230">168230</a>
[1.5][compiler] Non-generic methods can be called with type arguments
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=206336">206336</a>
[assist] CompletionProposal#getTokenStart() return always 0
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=122885">122885</a>
[builder] Project build states should not store the access restrictions templates
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=205235">205235</a>
[1.5][compiler] Eclipse syntax highlighting flag correct syntax as a hierarchy cycle
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=200026">200026</a>
[1.5][compiler] compiler message on incomplete enum declarations
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=200016">200016</a>
[1.5][compiler] better error message when enum constants must implement methods
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=121024">121024</a>
[1.5][compiler] Call of parametrized method reported ambiguous by eclipse not by javac
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=206021">206021</a>
Improve progress reporting in &quot;Initializing Java Tooling&quot; job
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=204845">204845</a>
BatchCompilerTest tests fail when the runtime JRE points to a path containing white spaces
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=195823">195823</a>
ClassFormatException during class file indexing
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=120088">120088</a>
[1.5][compiler] Incomparable types - object.getClass() == Some.class
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=148046">148046</a>
[compiler][1.5] should raise an incompatible types error when a given type variable cannot fulfill its bounds
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=158870">158870</a>
[1.5][compiler] javac inconvertible types on cast allowed by Eclipse
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89940">89940</a>
[1.5][compiler] wrong cast allowed
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=90437">90437</a>
[1.5][compiler] Casting with Erasure generates warning in Eclipse but ERROR with JDK
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=165352">165352</a>
[1.5][compiler] Cast should be rejected


<a name="v_818"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M3 - October 9, 2007
<br>Project org.eclipse.jdt.core v_818
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_818">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=205847">205847</a>
[compiler] Compiler referencing Java model code

<a name="v_817"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M3 - October 8, 2007
<br>Project org.eclipse.jdt.core v_817
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_817">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Added API <code>SearchPattern#R_CAMELCASE_SAME_PART_COUNT_MATCH</code>.<br>
This constant tells Search Engine to report matches which have <b>exactly</b>
the same count of parts (i.e. uppercase characters) than the Camel Case pattern 
(see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=201426">bug 201426</a>):
<pre>
/**
 * Match rule: The search pattern contains a Camel Case expression with
 * a strict expected number of parts.
 *
 * Examples:
 * 	. 'HM' type string pattern will match 'HashMap' and 'HtmlMapper' types,
 * 	  but not 'HashMapEntry'
 * 	. 'HMap' type string pattern will still match previous 'HashMap' and
 * 	  'HtmlMapper' types, but not 'HighMagnitude'
 *
 * This rule is not intended to be combined with any other match rule. In case
 * of other match rule flags are combined with this one, then match rule validation
 * will return a modified rule in order to perform a better appropriate search request
 * (see {@link #validateMatchRule(String, int)} for more details).
 *
 * @see CharOperation#camelCaseMatch(char[], char[], boolean) for a detailed
 * explanation of Camel Case matching.
 *
 * @since 3.4
 */
public static final int R_CAMELCASE_SAME_PART_COUNT_MATCH = 0x0100;
</pre>
Note that this constant replace previous one <code>R_CAMEL_CASE_MATCH</code>
added while fixing <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=124624">bug 124624</a>.<br>
Also note that <code>R_CAMELCASE_MATCH</code> is no longer deprecated as, finally,
Camel Case match rule flags are not supposed to be combined with other ones (e.g.
<code>R_PREFIX_MATCH</code> or <code>R_PATTERN_MATCH</code>).
</li>
<li>Existing API method <code>SearchPattern#validateMatchRule(String, int)</code>
has been modified to include the new <code>#R_CAMELCASE_SAME_PART_COUNT_MATCH</code> constant:
<pre>
/**
 * Validate compatibility between given string pattern and match rule.
 *
 * In certain circumstances described in the table below, the returned match rule is
 * modified in order to provide a more efficient search pattern:
 * 	1.	when the {@link #R_REGEXP_MATCH} flag is set, then <b>the pattern is
 * 		rejected</b> as this kind of match is not supported yet and <code>-1</code>
 * 		s returned).
 * 	2.	when the string pattern has <u>no</u> pattern characters (e.g. '*' or '?')
 * 		and the pattern match flag is set (i.e. the match rule has the {@link #R_PATTERN_MATCH}
 * 		flag), then <b>the pattern match flag is reset</b>.
 * 		Reversely, when the string pattern has pattern characters and the pattern
 * 		match flag is <u>not</u> set, then <b>the pattern match flag is set</b>.
 * 	3.	when the {@link #R_PATTERN_MATCH} flag is set then, <b>other
 * 		{@link #R_PREFIX_MATCH}, {@link #R_CAMELCASE_MATCH} or
 * 		{@link #R_CAMELCASE_SAME_PART_COUNT_MATCH} flags are reset</b>
 * 		if they are tentatively combined.
 * 	4.	when the {@link #R_CAMELCASE_MATCH} flag is set, then <b>other 
 * 		{@link #R_PREFIX_MATCH} or {@link #R_CAMELCASE_SAME_PART_COUNT_MATCH}
 * 		flags are reset</b> if they are tentatively combined.
 * 		Reversely, if the string pattern cannot be a camel case pattern (i.e. contains
 * 		invalid Java identifier characters or does not have at least two uppercase
 * 		characters - one for method camel case patterns), then <b>the CamelCase
 * 		match flag is replaced with a prefix match flag</b>.
 * 	5.	when the {@link #R_CAMELCASE_SAME_PART_COUNT_MATCH} flag is set,
 * 		then <b>({@link #R_PREFIX_MATCH} flag is reset</b> if it's tentatively
 * 		combined.
 * 		Reversely, if the string pattern cannot be a camel case pattern (i.e. contains
 * 		invalid Java identifier characters or does not have at least two uppercase
 * 		characters - one for method camel case patterns), then <b>the CamelCase
 * 		part count match flag is reset</b>.
 * <i>Note: the rules are validated in the documented order. For example, it means
 * 	that as soon as the string pattern contains one pattern character, the pattern
 * 	match flag will be set and all other match flags reset: validation of rule 2)
 * 	followed by rule 3)...</i>
 *
 * @param stringPattern The string pattern
 * @param matchRule The match rule
 * @return Optimized valid match rule or -1 if an incompatibility was detected.
 * @since 3.2
 */
public static int validateMatchRule(String stringPattern, int matchRule) {
...
}
</pre>
</li>
<li><code>CharOperation</code> and <code>SearchPattern</code> Camel Case API methods
added while fixing <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=124624">bug 124624</a>)
have been modified to clarify the behavior of the additional boolean parameter.<br>
This parameter now indicates whether the pattern and the name should have the same
count of parts (i.e. uppercase characters) or not:
<pre>
/**
 *...
 * CamelCase can be restricted to match only the same count of parts. When this
 * restriction is specified the given pattern and the given name must have <b>exactly</b>
 * the same number of parts (i.e. the same number of uppercase characters).
 * For instance, 'HM' , 'HaMa' and  'HMap' patterns will match 'HashMap' and
 * 'HatMapper' <b>but not</b> 'HashMapEntry'.
 *...
 * . pattern = "HM".toCharArray()
 * name = "HashMapEntry".toCharArray()
 * result =&gt; (samePartCount == false)
 *...
 * @param samePartCount flag telling whether the pattern and the name should
 * 	have the same count of parts or not.
 * 	&nbsp;&nbsp;For example:
 * 		. 'HM' type string pattern will match 'HashMap' and 'HtmlMapper' types,
 * 				but not 'HashMapEntry'
 * 		. 'HMap' type string pattern will still match previous 'HashMap' and
 * 				'HtmlMapper' types, but not 'HighMagnitude'
 * @return true if the pattern matches the given name, false otherwise
 * @since 3.4
 */
public static final boolean camelCaseMatch(char[] pattern, char[] name, boolean samePartCount) {
...
}

/**
 *...
 * CamelCase can be restricted to match only the same count of parts. When this
 * restriction is specified the given pattern and the given name must have <b>exactly</b>
 * the same number of parts (i.e. the same number of uppercase characters).
 * For instance, 'HM' , 'HaMa' and  'HMap' patterns will match 'HashMap' and
 * 'HatMapper' <b>but not</b> 'HashMapEntry'.
 *...
 * . pattern = "HM".toCharArray()
 * patternStart = 0
 * patternEnd = 2
 * name = "HashMapEntry".toCharArray()
 * nameStart = 0
 * nameEnd = 12
 * result =&gt; (samePartCount == false)
 *...
 * @param samePartCount flag telling whether the pattern and the name should
 * 	have the same count of parts or not.
 * 	&nbsp;&nbsp;For example:
 * 		. 'HM' type string pattern will match 'HashMap' and 'HtmlMapper' types,
 * 				but not 'HashMapEntry'
 * 		. 'HMap' type string pattern will still match previous 'HashMap' and
 * 				'HtmlMapper' types, but not 'HighMagnitude'
 * @return true if a sub-pattern matches the sub-part of the given name, false otherwise
 * @since 3.4
 */
public static final boolean camelCaseMatch(char[] pattern, int patternStart, int patternEnd, char[] name, int nameStart, int nameEnd, boolean prefixMatch) {
...
}
</pre>
Note that similar modifications have been done on <code>SearchPattern</code>
corresponding methods:
<pre>
public static final boolean camelCaseMatch(String pattern, String name, boolean samePartCount) {
...
}
public static final boolean camelCaseMatch(String pattern, int patternStart, int patternEnd, String name, int nameStart, int nameEnd, boolean samePartCount) {
...
}
</pre>
</li>
<li>Modified API <code>CompletionProposal#getRequiredProposals()</code>.<br>
<code>TYPE_REF</code> proposals can now have a TYPE_REF proposal as required proposal 
</li>
<li>CodeAssist: Member types and static members are proposed when the receiver is a not yet imported type.
<pre>
package p;
public class X {
   public static void bar() {}
}

package q;
public class Y {
   public void foo() {
      X.bar
   }
}
</pre>
When the completion occurs after <i>X.bar</i> the method <code>X#bar()</code> is proposed with a required proposal to complete the not yet imported type.
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44627">44627</a>
[assist] improve content assist for static members when import missing
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=125518">125518</a>
[javadoc] Embedding html in a link placed in a @see JavaDoc tag causes a warning
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86769">86769</a>
[javadoc] Warn/Error for 'Missing javadoc comments' doesn't recognize private inner classes
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=168849">168849</a>
[javadoc] Javadoc warning on @see reference in class level docs.
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=190970">190970</a>
[javadoc] &quot;field never read locally&quot; analysis should not consider javadoc
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=195374">195374</a>
[javadoc] Missing Javadoc warning for required qualification for inner types at 1.4 level
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=192449">192449</a>
[javadoc][assist] SelectionJavadocParser should not report problems
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73352">73352</a>
[Javadoc] Missing description should be warned for all tags
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=191931">191931</a>
BatchImageBuilder sometimes marks resources as derived before deleting them
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=201426">201426</a>
[search] New SearchPattern constant R_CAMEL_CASE_MATCH name may be misleading for users

<a name="v_816"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M3 - October 2, 2007
<br>Project org.eclipse.jdt.core v_816
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_816">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Added API <code>IJavaElementDelta#F_RESOLVED_CLASSPATH_CHANGED</code>. This flag is set when the resolved classpath of a Java project changes.
     This is independent from <code>IJavaElementDelta#F_CLASSPATH_CHANGED</code> which indicates that the raw classpath has changed.</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=204624">204624</a>
[1.5][compiler] No error on abstract method implementation with missing parameter generics
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=204339">204339</a>
[compiler] Invalid length for missing package declaration in empty package-info.java file
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=203587">203587</a>
Improve messages consistency in case of generic methods having same erasure
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=204662">204662</a>
org.eclipse.jdt.internal.compiler.parser.Parser.endParse throws NullPointerException
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=203662">203662</a>
Perf: Unnecessary compilation when package added to second source root
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=204805">204805</a>
ICompilationUnit.commitWorkingCopy doesn't send typeHierarchyChanged
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=204652">204652</a>
&quot;Open Type&quot;: ClassCastException in conjunction with a class folder
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=204534">204534</a>
[1.5][compiler] Annoying consequence of method verification problem
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=204417">204417</a>
NullPointerException in SelectionOnQualifiedAllocationExpression.resolveType
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=204536">204536</a>
[1.5][compiler] Type variables insufficiently connected in presence of errors
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=154071">154071</a>
No notification of change if a project is added or removed from a container

<a name="v_815"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M3 - September 25, 2007
<br>Project org.eclipse.jdt.core v_815
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_815">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=199668">199668</a>
IAE in ASTNode.setSourceRange while editing a class
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=204283">204283</a>
[compiler] synthetic field for class literal access should not be created for int.class
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=190094">190094</a>
Java Outline Causes Eclipse Lock-up.
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=203609">203609</a>
[1.6][compiler] AccSynthetic should be set for package-info type if target &gt;= 1.6
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=203579">203579</a>
[dom] Length of VariableDeclarationFragment is not the same inside a 'for' initialisation
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=204040">204040</a>
Class literal code generation must be improved for cldc target
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=204108">204108</a>
unused import in jdt.internal.compiler.lookup.TypeBinding
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=169049">169049</a>
[1.5][compiler] Bogus bound mismatch errors
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=203905">203905</a>
[1.5][compiler] shows wrong error with generics
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=203721">203721</a>
[compiler] &quot;Parameter is never read&quot; not reported if unnecessary declared checked exception
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=200158">200158</a>
[compiler] inconsistent handling of unreachable code

<a name="v_814"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M2 - September 19, 2007 - 3.4 MILESTONE 2
<br>Project org.eclipse.jdt.core v_814
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_814">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=204002">204002</a>
AIOB when enabling CLDC 1.1

<a name="v_813"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M2 - September 17, 2007
<br>Project org.eclipse.jdt.core v_813
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_813">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>The <code>SearchPattern#R_CAMELCASE_MATCH</code> constant is no longer deprecated and<br>
the new constant <code>SearchPattern#R_CAMEL_CASE_MATCH</code> <b>will surely be renamed in next milestone</b>.<br>
(see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=201426">bug 201426</a> to follow-up
work in progress in this area...)
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=203577">203577</a>
ClassFormatException viewing annotation with empty target annotation

<a name="v_812"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M2 - September 15, 2007
<br>Project org.eclipse.jdt.core v_812
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_812">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Added new API <code>org.eclipse.jdt.core.JavaCore#VERSION_CLDC_1_1</code> in order to support the cldc1.1 target inside the IDE.
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=120223">120223</a>
[compiler] Support for "-target cldc1.1"
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=203241">203241</a>
[compiler] Missing warning when a serializable class without serialVersionUID is also abstract
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=203454">203454</a>
NPE in compiler when processing annotations
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=203342">203342</a>
AST of a NumberLiteral has wrong source code range
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=203089">203089</a>
getDefaultOptions misses option
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=159214">159214</a>
[1.5] [compiler] Eclipse compiler wildcard bug
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=202404">202404</a>
[1.5][compiler] Incorrect handling of type variable bounds issued by capture conversion
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=203318">203318</a>
[1.5][compiler] Improper capture of wildcard with lesser bound than parameter
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=202936">202936</a>
[compiler] Compiler error for Java switch expression provides inaccurate list of allowed data types
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=203061">203061</a>
[compiler] Uninitialized member variables used in nonstatic initializers of peer members don't trigger compilation error
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=203058">203058</a>
Building workspace hangs in endless loop
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=202830">202830</a>
[compiler][1.5] eclipse fails to compile subclass when superclass has two generic methods of the same name
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=203020">203020</a>
formatter may change code semantics on unary operators
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=201182">201182</a>
[compiler][null] Null pointer access compiler warning fails when &quot;throw null&quot;


<a name="v_811"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M2 - September 11, 2007
<br>Project org.eclipse.jdt.core v_811
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_811">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Added an option that allows @throws javadoc entries to defuse the unused
    declared thrown exception check. 
<pre>
COMPILER / Consider Reference in Doc Comment for Unused Declared Thrown Exception Check
   When enabled, the compiler will consider doc comment references to exceptions 
   (i.e. @throws clauses) for the unused declared thrown exception check. Thus, 
   documented exceptions will be considered as mandated as per doc contract.
   The severity of the unused declared thrown exception problem is controlled 
   with option "org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException".
   Note: this option has no effect until the doc comment support is enabled 
   according to the option "org.eclipse.jdt.core.compiler.doc.comment.support".
    - option id:         "org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocReference"
    - possible values:   { "enabled", "disabled" }
    - default:           "enabled"
</pre>
See bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73244">73244</a>
for details.
</li>
</ul>
<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73244">73244</a>
[options] Improve &quot;Unnecessary declaration of thrown checked exceptions&quot;
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89301">89301</a>
Any user operation that would trigger an autobuild should cancel a running autobuild
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184298">184298</a>
[compiler][null] Spurious &quot;Variable can only be null&quot; warning in case of an infinite loop
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=201929">201929</a>
Member of local type should not have a fully qualified name
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=202134">202134</a>
[1.6][compiler] org.eclipse.jdt.tests.compiler.regression.ConformTest#test003 never ends in .16 mode


<a name="v_810"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M2 - September 4, 2007
<br>Project org.eclipse.jdt.core v_810
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_810">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=202076">202076</a>
NPE in DeltaProcessor
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=182359">182359</a>
[compiler] optimize line number generation using the new getLineNumber method
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=185350">185350</a>
[1.6][compiler] Code generation seems to be much slower than in 1.5 mode
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=196253">196253</a>
[1.5][compiler] Failure to compile generics with wildcard and inner classes
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=189158">189158</a>
[1.5][compiler] Malformed generic signature for nested classes (. vs $)
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=201062">201062</a>
Missing library in project classpath even library exists

<a name="v_809"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M2 - August 28, 2007
<br>Project org.eclipse.jdt.core v_809
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_809">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Prefix matching can be disabled while using Camel Case API methods. (see 
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=124624">bug 124624</a>).<br>
Following API methods have been added on <code>org.eclipse.jdt.core.compiler.CharOperation</code>:
<pre>
/**
 * Answers true if the pattern matches the given name using CamelCase rules, or
 * false otherwise. char[] CamelCase matching does NOT accept explicit wild-cards
 * '*' and '?' and is inherently case sensitive.
 *
 * CamelCase denotes the convention of writing compound names without spaces,
 * and capitalizing every term. This function recognizes both upper and lower
 * CamelCase, depending whether the leading character is capitalized or not.
 * The leading part of an upper CamelCase pattern is assumed to contain a
 * sequence of capitals which are appearing in the matching name; e.g. 'NPE' will
 * match 'NullPointerException', but not 'NewPerfData'. A lower CamelCase pattern
 * uses a lowercase first character. In Java, type names follow the upper
 * CamelCase convention, whereas method or field names follow the lower
 * CamelCase convention.
 *
 * The pattern may contain lowercase characters, which will be match in a case
 * sensitive way. These characters must appear in sequence in the name.
 * For instance, 'NPExcep' will match 'NullPointerException', but not
 * 'NullPointerExCEPTION' or 'NuPoEx' will match 'NullPointerException', but not
 * 'NoPointerException'.
 *
 * Digit characters are treated in a special way. They can be used in the pattern
 * but are not always considered as leading character. For instance, both
 * 'UTF16DSS' and 'UTFDSS' patterns will match 'UTF16DocumentScannerSupport'.
 *
 * CamelCase may or may not match prefixes depending on the given parameter.
 * When the prefix match parameter is <code>true</code>, the given pattern can
 * match only a prefix of the given name. For instance, 'HM' , 'HaMa' and  'HMap'
 * patterns will all match 'HashMap', 'HatMapper' <b>and</b> 'HashMapEntry'.
 * Reversely, if the prefix match parameter is <code>false</code>, then pattern
 * and name must have <b>exactly</b> the same number of parts, and their last
 * parts must be identical if they contain lowercase characters.
 * For instance, 'HMap' and 'HaMap' patterns will match 'HashMap' but neither
 * 'HashMapEntry' nor 'HatMapper'. Note that when the last part does not contain
 * lowercase characters, then the name may end with lowercase characters.
 * So, 'HM' pattern will match both 'HashMap' <b>and</b> 'HatMapper' but will not
 * match 'HashMapEntry'.
 *
 * Examples:
 *  1.	pattern = { 'N', 'P', 'E' }
 *  	name = { 'N', 'u','l', 'l', 'P', 'o', 'i', 'n', 't', 'e', 'r', 'E', 'x', 'c', 'e', 'p', 't', 'i', 'o', 'n' }
 *  	result =&gt; true
 *  2.	pattern = { 'N', 'P', 'E' }
 *  	name = { 'N', 'o', 'P', 'e', 'r', 'm', 'i', 's', 's', 'i', 'o', 'n', 'E', 'x', 'c', 'e', 'p', 't', 'i', 'o', 'n' }
 *  	result =&gt; true
 *  3.	pattern = { 'N', 'u', 'P', 'o', 'E', 'x' }
 *  	name = { 'N', 'u','l', 'l', 'P', 'o', 'i', 'n', 't', 'e', 'r', 'E', 'x', 'c', 'e', 'p', 't', 'i', 'o', 'n' }
 *  	result =&gt; true
 *  4.	pattern = { 'N', 'u', 'P', 'o', 'E', 'x' }
 *  	name = { 'N', 'o', 'P', 'e', 'r', 'm', 'i', 's', 's', 'i', 'o', 'n', 'E', 'x', 'c', 'e', 'p', 't', 'i', 'o', 'n' }
 *  	result =&gt; false
 *  5.	pattern = { 'n', p', 'e' }
 *  	name = { 'N', 'u','l', 'l', 'P', 'o', 'i', 'n', 't', 'e', 'r', 'E', 'x', 'c', 'e', 'p', 't', 'i', 'o', 'n' }
 *  	result =&gt; false
 *  6.	pattern = { 'I', 'P', 'L', '3' }
 *  	name = { 'I', 'P', 'e', 'r', 's', 'p', 'e', 'c', 't', 'i', 'v', 'e', 'L', 'i', 's', 't', 'e', 'n', 'e', 'r', '3' }
 *  	result =&gt; true
 *  7.	pattern = { 'H', M' }
 *  	name = { 'H', 'a', 's', 'h', 'M', 'a', 'p', 'E', 'n', 't', 'r', 'y' }
 *  	result =&gt; (prefixMatch == true)
 *  8.	pattern = { 'H', M', 'a', 'p' }
 *  	name = { 'H', 'a', 't', 'M', 'a', 'p', 'p', 'e', 'r' }
 *  	result =&gt; (prefixMatch == true)
 * 
 * @param pattern the given pattern
 * @param name the given name
 * @param prefixMatch flag telling whether the pattern can match name prefix or not.
 * 		. For example, when it's <code>true</code>:
 * 			- 'HM' type string pattern will match  'HashMap' and 'HtmlMapper' types,
 * 			  but not 'HashMapEntry'
 * 			- 'HMap' type string pattern will match  'HashMap' type but not 'HtmlMapper'.
 * 		. and, when it's <code>false</code>:
 * 			- 'HM' type string pattern will match both   'HashMap' and 'HtmlMapper'
 * 			  and 'HashMapEntry'
 * 			- 'HMap' type string pattern will match both 'HashMap' and 'HtmlMapper'
 * 			  types.
 *
 * @return true if the pattern matches the given name, false otherwise
 * @since 3.4
 */
public static final boolean camelCaseMatch(char[] pattern, char[] name, boolean prefixMatch) {
...
}

/**
 * Answers true if a sub-pattern matches the sub-part of the given name using 
 * CamelCase rules, or false otherwise.  char[] CamelCase matching does NOT
 * accept explicit wild-cards '*' and '?' and is inherently case sensitive. 
 * Can match only subset of name/pattern, considering end positions as
 * non-inclusive. The sub-pattern is defined by the patternStart and patternEnd
 * positions.
 *
 * CamelCase denotes the convention of writing compound names without spaces,
 * and capitalizing every term. This function recognizes both upper and lower
 * CamelCase, depending whether the leading character is capitalized or not.
 * The leading part of an upper CamelCase pattern is assumed to contain
 * a sequence of capitals which are appearing in the matching name; e.g. 'NPE' will
 * match 'NullPointerException', but not 'NewPerfData'. A lower CamelCase pattern
 * uses a lowercase first character. In Java, type names follow the upper
 * CamelCase convention, whereas method or field names follow the lower
 * CamelCase convention.
 *
 * The pattern may contain lowercase characters, which will be match in a case
 * sensitive way. These characters must appear in sequence in the name.
 * For instance, 'NPExcep' will match 'NullPointerException', but not
 * 'NullPointerExCEPTION' or 'NuPoEx' will match 'NullPointerException', but not
 * 'NoPointerException'.
 *
 * Digit characters are treated in a special way. They can be used in the pattern
 * but are not always considered as leading character. For instance, both
 * 'UTF16DSS' and 'UTFDSS' patterns will match 'UTF16DocumentScannerSupport'.
 *
 * CamelCase may or may not match prefixes depending on the given parameter.
 * When the prefix match parameter is <code>true</code>, the given pattern can
 * match only a prefix of the given name. For instance, 'HM' , 'HaMa' and  'HMap'
 * patterns will all match 'HashMap', 'HatMapper' <b>and</b> 'HashMapEntry'.
 * Reversely, if the prefix match parameter is <code>false</code>, then pattern
 * and name must have <b>exactly</b> the same number of parts, and their last
 * parts must be identical if they contain lowercase characters.
 * For instance, 'HMap' and 'HaMap' patterns will match 'HashMap' but neither
 * 'HashMapEntry' nor 'HatMapper'. Note that when the last part does not contain
 * lowercase characters, then the name may end with lowercase characters.
 * So, 'HM' pattern will match both 'HashMap' <b>and</b> 'HatMapper' but will not
 * match 'HashMapEntry'.
 *
 * Examples:
 *  1.	pattern = { 'N', 'P', 'E' }
 *  	patternStart = 0
 *  	patternEnd = 3
 *  	name = { 'N', 'u','l', 'l', 'P', 'o', 'i', 'n', 't', 'e', 'r', 'E', 'x', 'c', 'e', 'p', 't', 'i', 'o', 'n' }
 *  	nameStart = 0
 *  	nameEnd = 20
 *  	result =&gt; true
 *  2.	pattern = { 'N', 'P', 'E' }
 *  	patternStart = 0
 *  	patternEnd = 3
 *  	name = { 'N', 'o', 'P', 'e', 'r', 'm', 'i', 's', 's', 'i', 'o', 'n', 'E', 'x', 'c', 'e', 'p', 't', 'i', 'o', 'n' }
 *  	nameStart = 0
 *  	nameEnd = 21
 *  	result =&gt; true
 *  3.	pattern = { 'N', 'u', 'P', 'o', 'E', 'x' }
 *  	patternStart = 0
 *  	patternEnd = 6
 *  	name = { 'N', 'u','l', 'l', 'P', 'o', 'i', 'n', 't', 'e', 'r', 'E', 'x', 'c', 'e', 'p', 't', 'i', 'o', 'n' }
 *  	nameStart = 0
 *  	nameEnd = 20
 *  	result =&gt; true
 *  4.	pattern = { 'N', 'u', 'P', 'o', 'E', 'x' }
 *  	patternStart = 0
 *  	patternEnd = 6
 *  	name = { 'N', 'o', 'P', 'e', 'r', 'm', 'i', 's', 's', 'i', 'o', 'n', 'E', 'x', 'c', 'e', 'p', 't', 'i', 'o', 'n' }
 *  	nameStart = 0
 *  	nameEnd = 21
 *  	result =&gt; false
 *  5.	pattern = { 'n', p', 'e' }
 *  	patternStart = 0
 *  	patternEnd = 3
 *  	name = { 'N', 'u','l', 'l', 'P', 'o', 'i', 'n', 't', 'e', 'r', 'E', 'x', 'c', 'e', 'p', 't', 'i', 'o', 'n' }
 *  	nameStart = 20
 *  	nameEnd = 9
 *  	result =&gt; false
 *  6.	pattern = { 'I', 'P', 'L', '3' }
 *  	patternStart = 0
 *  	patternEnd = 4
 *  	name = { 'I', 'P', 'e', 'r', 's', 'p', 'e', 'c', 't', 'i', 'v', 'e', 'L', 'i', 's', 't', 'e', 'n', 'e', 'r', '3' }
 *  	nameStart = 0
 *  	nameEnd = 21
 *  	result =&gt; true
 *  7.	pattern = { 'H', M' }
 *  	patternStart = 0
 *  	patternEnd = 2
 *  	name = { 'H', 'a', 's', 'h', 'M', 'a', 'p', 'E', 'n', 't', 'r', 'y' }
 *  	nameStart = 0
 *  	nameEnd = 12
 *  	result =&gt; (prefixMatch == true)
 *  8.	pattern = { 'H', M', 'a', 'p' }
 *  	patternStart = 0
 *  	patternEnd = 4
 *  	name = { 'H', 'a', 't', 'M', 'a', 'p', 'p', 'e', 'r' }
 *  	nameStart = 0
 *  	nameEnd = 9
 *  	result =&gt; (prefixMatch == true)
 * 
 * @param pattern the given pattern
 * @param patternStart the start index of the pattern, inclusive
 * @param patternEnd the end index of the pattern, exclusive
 * @param name the given name
 * @param nameStart the start index of the name, inclusive
 * @param nameEnd the end index of the name, exclusive
 * @param prefixMatch flag telling whether the pattern can match name prefix or not.
 * 		. For example, when it's <code>true</code>:
 * 			- 'HM' type string pattern will match  'HashMap' and 'HtmlMapper' types,
 * 			  but not 'HashMapEntry'
 * 			- 'HMap' type string pattern will match  'HashMap' type but not 'HtmlMapper'.
 * 		. and, when it's <code>false</code>:
 * 			- 'HM' type string pattern will match both   'HashMap' and 'HtmlMapper'
 * 			  and 'HashMapEntry'
 * 			- 'HMap' type string pattern will match both 'HashMap' and 'HtmlMapper'
 * 			  types.
 *
 * @return true if a sub-pattern matches the sub-part of the given name, false otherwise
 * @since 3.4
 */
public static final boolean camelCaseMatch(char[] pattern, int patternStart, int patternEnd, char[] name, int nameStart, int nameEnd, boolean prefixMatch) {
...
}
</pre>
Note that same methods have been added on <code>SearchPattern</code> but with
<code>String</code> parameters instead of <code>char[]</code> ones (javadoc comments
are identical):
<pre>
public static final boolean camelCaseMatch(String pattern, String name, boolean prefixMatch) {
...
}
public static final boolean camelCaseMatch(String pattern, int patternStart, int patternEnd, String name, int nameStart, int nameEnd, boolean prefixMatch) {
...
}
</pre>
Note also that methods <code>camelCaseMatch(String, int, int, String, int, int)</code>
of <code>CharOperation</code> and <code>SearchPattern</code> classes have been
deprecated to avoid too many 'camelCaseMatch*' methods on these classes.
</li>
<li>Search Engine has been modified to better handle additional <code>SearchPattern</code>
constants while using Camel Case one (see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=200400">bug 200400</a>).<br>
Existing <code>SearchPattern#R_CAMELCASE_MATCH</code> constant has been deprecated and<br>
is <b>now replaced by <code>SearchPattern#R_CAMEL_CASE_MATCH</code></b>:<pre>
	/**
	 * Match rule: The search pattern contains a Camel Case expression with
	 * a strict number of parts and preventing automatic prefix matching for the last
	 * part (if it consists of multiple letters).
	 * 
	 * Examples:
	 * 	. 'HM' type string pattern will match 'HashMap' and 'HtmlMapper' types,
	 * 		but not 'HashMapEntry'
	 * 	. 'HMap' type string pattern will match 'HashMap' type but not 'HtmlMapper'.
	 *
	 * This Camel Case match rule does not allow prefix match but accept insensitive
	 * case. For instance, 'HashMap' or 'HASHMAP' patterns using this Camel Case
	 * rule will match both 'HashMap' but not 'HashMapEntry'.
	 *
	 * This rule still can be combined to prefix match to accept prefix matches
	 * ('HashMap' pattern matching 'HashMapEntry' name). It can also be combined
	 * to case sensitive match to reject case insensitive matches ('HAMA' pattern
	 * will not match 'HashMap' name).
	 *
	 * If {@link #R_PATTERN_MATCH} rule is also combined, then the real used
	 * match rule will depend on whether string pattern contains specific pattern
	 * characters (e.g. '*' or '?') or not. If it does, then only Pattern match rule will
	 * be used, otherwise only Camel Case match will be used.
	 * For example, with 'NPE' string pattern, search will only use
	 * Camel Case match rule, but with 'N*P*E*' string pattern, it will 
	 * use only Pattern match rule.
	 *
	 * @see CharOperation#camelCaseMatch(char[], char[], boolean) for a detailed
	 * explanation of Camel Case matching.
	 *
	 * @since 3.4
	 */
	public static final int R_CAMEL_CASE_MATCH = 0x0100;
</pre>
This change was necessary has the obsolete <code>R_CAMELCASE_MATCH</code> could
not support correctly additional constants as <code>R_PREFIX_MATCH</code> or 
<code>R_CASE_SENSITIVE</code>.<br>
However, this deprecated constant is still accepted for backward compatibility
but user is advised to replace it with <code>R_CAMEL_CASE_MATCH | R_PREFIX_MATCH</code>
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=201066">201066</a>
[prefs] Preferences listeners are not removed while shutting down JavaModelManager
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=152841">152841</a>
[model] IJavaProject.findType(name, monitor) doesn't find secondary type
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=108456">108456</a>
IPackageFragmentRoot#getPackageFragment() should not accept invalid package names
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=201104">201104</a>
JavaElement of a recovered type binding should not return a compilation unit with no parent
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=190622">190622</a>
type binding marked as recovered but all is compiling
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=201064">201064</a>
[search] SearchEngine.searchAllTypeNames(..) does not find CamelCase match
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=183117">183117</a>
User Library Lost
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=200400">200400</a>
[search] Camel Case match prefix insensitive although spec says prefix sensitive
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=124624">124624</a>
[search] Camelcase matching routines should support end character
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=191739">191739</a>
"Duplicate nested type" bogus error on static class of abstract class or interface
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=200931">200931</a>
GENERATED_BY references still exist in some javadoc comments
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=200547">200547</a>
[1.5][compiler] Invalid ambiguous error when calling an overriden generic method with MULTIPLE bounds
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=198120">198120</a>
[1.5][compiler] Cannot directly invoke the abstract method huch(I1) for the type I1
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=196254">196254</a>
Overrides wrong for wildcard parameterized methods
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=193265">193265</a>
[1.5][compiler] Incorrect ambiguous method error involving abstract classes and enums
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=198253">198253</a>
unversioned downloads of ecj.jar and ecjsrc.zip


<a name="v_808"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M2 - August 21, 2007
<br>Project org.eclipse.jdt.core v_808
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_808">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>New fix for <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=186781">bug 186781</a> required the index version to be incremented.
     Indexes will be automatically regenerated upon subsequent search queries (accounting for indexing notification in search progress dialogs).
</li>
<li>API method <code>JavaProject.setOption(String, String)</code> behavior has been slightly changed consequent upon following bugs fixing:
<ul>
<li><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=152562">bug 152562</a>: 
<code>null</code> is now accepted for the option value and remove the corresponding preference from the project,</li>
<li><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=152578">bug 152578</a>: 
the preference is not removed from project when the value is equals to the workspace preference value.</li>
</ul>
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=183923">183923</a>
[prefs] NPE in JavaProject#setOptions
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=152578">152578</a>
[prefs] IJavaProject.setOption(Object,Object) wrongly removes key when value is equals to JavaCore one
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=152562">152562</a>
[prefs] IJavaProject.setOption(..., null) does not work
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=200449">200449</a>
[model] Classpath variable deprecation message is not flushed from cache when variable is removed
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=186113">186113</a>
[model] classpath variable deprecation messages not initialized when called
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=109695">109695</a>
[search] Numbers should be treated as upper-case letters in CamelCase matching
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=186781">186781</a>
StackOverflowError while computing launch button tooltip

<a name="v_807"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M2 - August 15, 2007
<br>Project org.eclipse.jdt.core v_807
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_807">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>New fix for <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=200064">bug 200064</a> required the index version to be incremented.
     Indexes will be automatically regenerated upon subsequent search queries (accounting for indexing notification in search progress dialogs).
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=200064">200064</a>
[search] ResourceException while searching for method reference
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=198051">198051</a>
[1.5][compiler] Improper Polymorphic Exception Handling 
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=194399">194399</a>
IJavaProject.findType(String, String, WorkingCopyOwner) doesn't return the same element with different VMs.

<a name="v_806"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M2 - August 14, 2007
<br>Project org.eclipse.jdt.core v_806
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_806">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>New fix for <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=138184">bug 138184</a> required the index version to be incremented.
     Indexes will be automatically regenerated upon subsequent search queries (accounting for indexing notification in search progress dialogs).
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=169970">169970</a>
[model] code assist favorites must honour build path of project in context
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=135493">135493</a>
[search] Clarify TypeNameRequestor#acceptType(...)
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=138184">138184</a>
[search] Type Dialog (Could not uniquely map the name to a type)
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=199004">199004</a>
[search] Java Search in 'JRE libraries' finds matches in Application Libraries

<a name="v_805"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M1 - August 2, 2007 - 3.4 MILESTONE 1
<br>Project org.eclipse.jdt.core v_805
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_805">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=198483">198483</a>
BuilderTests: need expectingUniqueCompiledClasses method

<a name="v_804"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M1 - August 1, 2007
<br>Project org.eclipse.jdt.core v_804
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_804">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>All tests projects and org.eclipse.jdt.compiler.tool project's versions have been incremented.</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=198362">198362</a>
Formatter stops working when source code contains following line

<a name="v_803"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M1 - July 30, 2007
<br>Project org.eclipse.jdt.core v_803
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_803">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=109636">109636</a>
Comment formatter doesn't support &quot;&amp;#42;/&quot;
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=197169">197169</a>
Formatter expands &amp;#64; in annotation in javadoc, creating invalid tag
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=198153">198153</a>
[formatter] adds extra space before expanded numerical entity
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=197400">197400</a>
NPE for completion engine in class static block
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53727">53727</a>
[Tasks]  longest tags should match

<a name="v_802"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M1 - July 23, 2007
<br>Project org.eclipse.jdt.core v_802
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_802">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=166093">166093</a>
[search] NPE searching for references to private static method in class file
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=196514">196514</a>
Bunch of exception during code typing in JDT editor
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=186333">186333</a>
[search] Should better locate fields and methods matches on binary super types with unresolved references
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=167357">167357</a>
non-empty init block in local member type has no children
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=186114">186114</a>
IMethodBinding.overrides(..) should consider static

<a name="v_801"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M1 - July 17, 2007
<br>Project org.eclipse.jdt.core v_801
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_801">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Incremented JDT/Core plug-in id to "3.4.0" as fix for 186822 adds new constants in <code>org.eclipse.jdt.core.compiler.IProblem</code>.
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=196339">196339</a>
[search] SearchEngine not returning correct result
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=196354">196354</a>
ClassCastException in package binding
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=196249">196249</a>
problem in parsing
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=195802">195802</a>
Name clash compile error generated if superclass is abstract
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=195468">195468</a>
[1.5][compiler] Eclipse compiler differs from javac with generics (name clash)
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=196653">196653</a>
[compiler] More resilience with unbound caught exceptions
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=192387">192387</a>
Wrong warning location for a non static reference to an enum value.
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=195228">195228</a>
[search] Invalid path in open type dialog
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=186822">186822</a>
[1.5][compiler] Add more resilience on annotation and enum type declaration with type parameters
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97998">97998</a>
[builder] improve the error handling in case the build encounters a locked file within the the output folder
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=188876">188876</a>
[assist] Proposals inside an import statement shouldn't be fully qualified

<a name="v_800"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tooling core</h1>
Eclipse SDK 3.4M1 - July 9, 2007
<br>Project org.eclipse.jdt.core v_800
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_800">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Incremented JDT/Core plug-in id to "3.3.100". Will go to "3.4.0" as soon as an API/feature gets added.
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=190960">190960</a>
[batch][compiler] help message for annotations processing should be improved
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=103654">103654</a>
BindingKey.getTypeArguments bug with qualified types
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=191125">191125</a>
[1.5] [assist] NPE in CompletionEngine.proposeType()
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=195489">195489</a>
[search] Javadoc reference not found while using SearchEngine.searchDeclarationsOfReferencedTypes
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=195317">195317</a>
[compiler] java.lang.ClassFormatError: Invalid pc in LineNumberTable
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=195509">195509</a>
Need to improve classpath resolution for Apache Harmony in org/eclipse/jdt/core/tests/util/Util.java
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=195526">195526</a>
org.eclipse.jdt.core.tests.compiler.regression.GenericTypeTest.test0744 depends on non-specified package-private class HashMap.Entry implementation
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=191082">191082</a>
AnnotationMirror.getPosition() returns wrong value
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=189799">189799</a>
[jsr269] Make getDocComment() behave more like javac
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=192774">192774</a>
Annotation AST nodes should have unique IAnnotationBindings
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=171703">171703</a>
Eclipse cannot find source for *.class files
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=193979">193979</a>
AST parser generates wrong AST
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95288">95288</a>
[model] CreatePackageFragmentOperation runs with wrong ISchedulingRule
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=142044">142044</a>
[search] &quot;And&quot; Pattern fails with NullPointerException
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111882">111882</a>
[assist] Invalid relevance while completing in case of a switch
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=195263">195263</a>
Update exportplugins.xml to 3.3.100 and 3.4
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=181488">181488</a>
[index] Lots of unbuffered sequential reads in DiskIndex
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18311">18311</a>
api: ISourceReference::getSource can return undocumented result
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=129560">129560</a>
[spec] Questionable javadoc for IJavaElement#isStructureKnown()
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=178226">178226</a>
Clarify spec for IJarEntryResource
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=163229">163229</a>
[model] IAccessRule does not say it cannot be implemented by clients
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=149590">149590</a>
[model] bindings for duplicate local variables share same key
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=195091">195091</a>
Index is rebuilt on each startup
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=170889">170889</a>
[5.0][content assist] strange label for 'class' proposal
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=190965">190965</a>
[compiler] useless assignment to local variable parameters in Scope line 431
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=153125">153125</a>
[getter setter] Getters/setters for variables starting with non-Latin letter are generated incorrectly
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=186760">186760</a>
Two cases of switch in DeltaProcessor#fire could be merged
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=170954">170954</a>
void should not be proposed inside method
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=120766">120766</a>
problems when using classes of the same name
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=137452">137452</a>
Autocomplete adds &quot;Void&quot; instead of doing nothing
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=194420">194420</a>
Misleading error message when build fails due to out of sync workspace
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=132139">132139</a>
[assist] Duplicate names while completing in local variable declaration
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99631">99631</a>
[assist][5.0] Unnecessary proposals on annotation completion
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=171037">171037</a>
[codeassist] if 1.4 or higher code assist after 'import' should not suggest types from default package
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=139446">139446</a>
[build path] bug in the Edit Library dialog box, when changing the default JRE, and switching from alternate JRE to workspace default
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=192497">192497</a>
Cannot always find method definition, depending on cursor position
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=151967">151967</a>
[1.5][assist] Code completion with enumerations implementing an interface
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=150632">150632</a>
[assist] Content Assist and Parameter Hints sometimes don't work for constructor call
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=194435">194435</a>
JDT Core manifest contains invalid prereqed version
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=185318">185318</a>
[assist] No proposals when completing inside a method import
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=102031">102031</a>
Content assist proposes same type twice after &quot;call(new |&quot;
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=157069">157069</a>
[assist] Content Assist introduces compile error
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=119434">119434</a>
[code select] Code select returns doubled java element
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=194034">194034</a>
[1.5][Compiler] Inconsistency with javac: subclass does not properly inherit generic method
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=185037">185037</a>
Optimization opportunity in MethodVerifier
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=191928">191928</a>
Use Util.log instead of printStackTrace at AbstractImageBuilder#612
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=194185">194185</a>
[search] for package declarations finds also subpackages
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=191908">191908</a>
[1.5][compiler] Missing strike through for deprecated declaration fragment
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=192285">192285</a>
[formatter] Java source formatter not working if class has annotation on single line multiple fields declaration.

<hr>
<p>For earlier build notes, also see <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.jdt.core/notes/R33_buildnotes_jdt-core.html">build notes up to Release 3.3</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>

