<!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 tools core</font></td></tr>
  <tr><td>&nbsp;</td></tr>
  <tr>
  	<td class="title3">
	  <font size="-1">
	  Here are the build notes for the Eclipse JDT/Core plug-in project
	  <a href="http://www.eclipse.org/jdt/core/index.php"><b>org.eclipse.jdt.core</b></a>,
	  describing <a href="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"><b>HEAD</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_874"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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 tools 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>

