<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<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.2</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.2 stream</b></font>
    </td>
  </tr>
  <tr><td align="left" width="72%" class="title2"><font size="-2">java development tooling core</font></td></tr>
  <tr><td>&nbsp;</td></tr>
  <tr>
  	<td class="title3">
	  <font size="-1">
	  Here are the build notes for the Eclipse JDT/Core plug-in project 
	  <a href="http://www.eclipse.org/jdt/core/main.html"><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.2 planning, please refer to <a href="http://www.eclipse.org/jdt/core/r3.2/main.html#release-plan">JDT/Core release plan</a>, 
	  the next <a href="http://www.eclipse.org/jdt/core/r3.2/main.html#milestone-plan">milestone plan</a>, 
	  the overall <a href="http://www.eclipse.org/eclipse/development/eclipse_project_plan_3_2.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.0 (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>).
	  Older changes which occurred up to Release 3.0 can be found in 
	  <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.jdt.core/notes/R21_buildnotes_jdt-core.html">build notes R2.1</a>.
	  -->
	  This present document covers all changes since Release 3.1 (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_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_623"></a>
<p><hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.2M4 - ?th November 2005
<br>Project org.eclipse.jdt.core v_623
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_623">cvs</a>).
<h2>
What's new in this drop</h2>
<ul>
<li> DOM type bindings for generics got adjusted. There were situations where a reference to a generic type from within itself would expose the declared 
generic type binding, instead of a parameterized type binding (using its own type parameters as type arguments). This is now corrected, clients should 
ensure they did not rely on the previous inconsistency (note: no change was required from direct JDT dependents).
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80472">80472</a>
Binding of parameterized return type List&lt;E&gt; subList(...) should not be generic binding


<a name="v_622"></a>
<p><hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.2M4 - 16th November 2005
<br>Project org.eclipse.jdt.core v_622
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_622">cvs</a>).
<h2>
What's new in this drop</h2>
<ul>
<li>Added API <code>IMethod#getRawParameterNames()</code> that returns the invented names arg0...argn for a binary method.</li>
<li>Added API <code>IOpenable#findRecommendedLineSeparator()</code> that finds the line separator for the given Java element.</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=116419">116419</a>
code assist regression: POTENTIAL_METHOD_DECLARATION not offered anymore
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84750">84750</a>
[perf] BinaryMethod.getParameterNames does not follow IMethod API contract
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110650">110650</a>
Need API for determining Java line delimiter

<a name="v_621"></a>
<p><hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.2M4 - 15th November 2005
<br>Project org.eclipse.jdt.core v_621
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_621">cvs</a>).
<h2>
What's new in this drop</h2>
<ul>
<li>
Due to bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110964">110964</a> fix,
some javadoc compiler options default value have been changed.
<pre>
JavaCore.COMPILER_PB_INVALID_JAVADOC_TAGS:
	- old default value = "enabled"
	- new default value = "disabled"
JavaCore.COMPILER_PB_INVALID_JAVADOC_TAGS__DEPRECATED_REF
	- old default value = "enabled"
	- new default value = "disabled"
JavaCore.COMPILER_PB_INVALID_JAVADOC_TAGS__NOT_VISIBLE_REF
	- old default value = "enabled"
	- new default value = "disabled"
JavaCore.COMPILER_PB_INVALID_JAVADOC_TAGS_VISIBILITY
	- old default value = "private"
	- new default value = "public"
JavaCore.COMPILER_PB_MISSING_JAVADOC_TAGS_VISIBILITY
	- old default value = "private"
	- new default value = "public"
</pre>
</li>
<li>Added new API for org.eclipse.jdt.core.dom.CompilationUnit:
<pre>
	/**
	 * Return the index in the whole comments list {@link #getCommentList() }
	 * of the first leading comments associated with the given node. 
	 * 
	 * @param node the node
	 * @return 0-based index of first leading comment or -1 if node has
	 *	no associated comment before its start position.
	 * @since 3.2
	 */
	public int firstLeadingCommentIndex(ASTNode node)
	/**
	 * Return the index in the whole comments list {@link #getCommentList() }
	 * of the last trailing comments associated with the given node. 
	 * 
	 * @param node the node
	 * @return 0-based index of last trailing comment or -1 if node has
	 * 	no associated comment after its end position.
	 * @since 3.2
	 */
	public int lastTrailingCommentIndex(ASTNode node)
	/**
	 * Returns the column number corresponding to the given source character
	 * position in the original source string. Column number are zero-based. 
	 * Return zero if it is beyond the valid range.
	 * 
	 * @param position a 0-based character position, possibly
	 *   negative or out of range
	 * @return the 0-based coloumn number, or <code>0</code> if the character
	 *    position does not correspond to a source line in the original
	 *    source file or if column number information is not known for this
	 *    compilation unit
	 * @see ASTParser
	 * @since 3.2
	 */
	public int columnNumber(final int position)
	/**
	 * Given a line number and column number, returns the corresponding 
	 * position in the original source string.
	 * Returns 0 if no line number information is available for this
	 * compilation unit or the requested line number is less than one. 
	 * Returns the total size of the source string if <code>line</code>
	 * is greater than the actual number lines in the unit.
	 * Returns 0 if <code>column</code> is less than 0,  
	 * or the position of the last character of the line if <code>column</code>
	 * is beyond the legal range. 
	 * 
	 * @param line the one-based line number
	 * @param column the zero-based column number
	 * @return the 0-based character position in the source string; 
	 * returns <code>0</code> if line/column number information is not known 
	 * for this compilation unit or the inputs are not valid
	 * @since 3.2
	 */
	 public int getPosition(int line, int column)
</pre>
</li>
<li>A tool to automate the update of the build notes is available on this update-site:<br>
http://www.eclipse.org/jdt/core/tools/jdtcoretools/update-site/<br>
<p>This is matching the format of the JDT/Core buildnotes. But the code can be easily customized for a different format.</p>
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=115662">115662</a>
[javadoc][assist] link completion in types
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106140">106140</a>
[compiler] Eclipse3.1.0: unrecognized class invisibility
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=113108">113108</a>
[API][comments] CompilationUnit.getNodeComments(ASTNode)
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110964">110964</a>
[javadoc] Change compiler default options to have minimum javadoc warnings
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=116028">116028</a>
annotations only applied to first field in a declaration
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=112843">112843</a>
Cut blocked by background build
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=116028">116028</a>
annotations only applied to first field in a declaration
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110797">110797</a>
In case of multiple task tags on a single line, the tasks view does not show the complete line for each tag
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110173">110173</a>
[plan] API to extract the Javadoc as HTML from attached HTML
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110188">110188</a>
[plan][assist] Provide hook for completing inside string literal
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=107105">107105</a>
[1.5][compiler] method override check does not detect differences in additional type bounds
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=115408">115408</a>
[compiler] ArrayIndexOutOfBoundsException in CodeStream.java
	  	
<a name="v_620"></a>
<p><hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.2M4 - 8th November 2005
<br>Project org.eclipse.jdt.core v_620
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_620">cvs</a>).
<h2>
What's new in this drop</h2>
<ul>
<li>Added support for participating in reconcile (see <code>compilationParticipant</code> extension point as well as 
     <code>CompilationParticipant</code> and <code>ReconcileContext</code> classes.)
     Note that this support is still work in progress and it is subject to change.
     Ability to participate in building will be added later.
</li>
<li>Code Assist: added support for completing on label in break/continue statement.
</li>
<li>Added new CompletionContext API (first part of fix for bug
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110181">110181</a>) :
<pre>
/**
 * Returns the completed token.
 * This token is either the identifier or Java language keyword
 * or the string literal under, immediately preceding, 
 * the original request offset. If the original request offset
 * is not within or immediately after an identifier or keyword or
 * a string literal then the returned value is &lt;code&gt;null&lt;/code&gt;.
 * 
 * @return completed token or &lt;code&gt;null&lt;/code&gt;
 * @since 3.2
 */
public char[] getToken()

/**
 * Returns the kind of completion token being proposed.
 * 
 * The set of different kinds of completion token is
 * expected to change over time. It is strongly recommended
 * that clients do not assume that the kind is one of the
 * ones they know about, and code defensively for the
 * possibility of unexpected future growth.
 * 
 * @return the kind; one of the kind constants declared on
 * this class whose name starts with &lt;code&gt;TOKEN_KIND&lt;/code&gt;,
 * or possibly a kind unknown to the caller
 * @since 3.2
 */
public int getTokenKind()

/**
 * Returns the character index of the start of the
 * subrange in the source file buffer containing the
 * relevant token being completed. This
 * token is either the identifier or Java language keyword
 * under, or immediately preceding, the original request 
 * offset. If the original request offset is not within
 * or immediately after an identifier or keyword, then the
 * position returned is original request offset and the
 * token range is empty.
 * 
 * @return character index of token start position (inclusive)
 * @since 3.2
 */
public int getTokenStart()

/**
 * Returns the character index of the end (exclusive) of the subrange
 * in the source file buffer containing the
 * relevant token. When there is no relevant token, the
 * range is empty
 * (&lt;code&gt;getTokenEnd() == getTokenStart()&lt;/code&gt;).
 * 
 * @return character index of token end position (exclusive)
 * @since 3.2
 */
public int getTokenEnd()

/**
 * Returns the offset position in the source file buffer
 * after which code assist is requested.
 * 
 * @return offset position in the source file buffer
 * @since 3.2
 */
public int getOffset()
</pre>
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=115363">115363</a>
java.lang.VerifyError in org.eclipse.ui.workbench from HEAD, using N20051107
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22072">22072</a>
Code completion on continue label: broken.
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=113950">113950</a>
[1.5][compiler] Problems implementing inherited generic abstract methods and type erasure
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=115181">115181</a>
[1.5][compiler] Wrongly flagged "Usage of a raw type"
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=113945">113945</a>
No codeassist in anonymous class in generics
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=114086">114086</a>
Refactor->Rename of instance variables fails with "-1" when Code Style->Fields prefix list has dangling ","
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=114341">114341</a>
[javadoc][assist] range of the qualified type completion in javadoc text isn't correct
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=114338">114338</a>
[javadoc] Reconciler reports wrong javadoc warning (missing return type)
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=102286">102286</a>
Error when trying F4-Type Hierarchy
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=114909">114909</a>
AST: String concatenation represented as single node
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=114539">114539</a>
[search] Internal error when refactoring code with errors
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=114855">114855</a>
[compiler] OutOfMemoryError compiling deeply nested try-catch
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=114087">114087</a>
[1.5][compiler] Eclipse compiles code that cannot be compiled with JDK!
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=114304">114304</a>
[1.5][compiler] Return type not compatible with generic subinterface.


<a name="v_619"></a>
<p><hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.2M3 - 31st October 2005 - 3.2 MILESTONE 3
<br>Project org.eclipse.jdt.core v_619
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_619">cvs</a>).
<h2>
What's new in this drop</h2>
<ul>
<li>Three new API methods have been added on SearchPattern (see bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=113549">113549</a>):
<pre>
/**
 * Answers true if the pattern matches the given name using CamelCase rules, or false otherwise. 
 * 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 trailing lowercase characters, which will be match in a case sensitive way. These characters must
 * appear in sequence in the name, after the last matching capital of the pattern. For instance, 'NPExcep' will match
 * 'NullPointerException', but not 'NullPointerExCEPTION'.
 * 
 * For example:
 *  - pattern = "NPE"
 *    name = NullPointerException
 *    result => true
 *  - pattern = "npe"
 *    name = NullPointerException
 *    result => false
 *
 * @see CharOperation#camelCaseMatch(char[], char[])
 * 	Implementation has been entirely copied from this method except for array lengthes
 * 	which were obviously replaced with calls to {@link String#length()}.
 * 
 * @param pattern the given pattern
 * @param name the given name
 * @return true if the pattern matches the given name, false otherwise
 */
public static final boolean camelCaseMatch(String pattern, String name)

/**
 * Answers true if a sub-pattern matches the subpart of the given name using CamelCase rules, or false otherwise.  
 * 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 subpattern 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 trailing lowercase characters, which will be match in a case sensitive way. These characters must
 * appear in sequence in the name, after the last matching capital of the pattern. For instance, 'NPExcep' will match
 * 'NullPointerException', but not 'NullPointerExCEPTION'.
 * 
 * For example:
 *	- pattern = "NPE"
 *    patternStart = 1
 *    patternEnd = 3
 *    name = NullPointerException
 *    nameStart = 0
 *    nameEnd = 20
 *    result => true
 *  - pattern = "npe"
 *    patternStart = 1
 *    patternEnd = 3
 *    name = NullPointerException
 *    nameStart = 0
 *    nameEnd = 20
 *    result => false
 *
 * @see CharOperation#camelCaseMatch(char[], int, int, char[], int, int)
 * 	Implementation has been entirely copied from this method except for array lengthes
 * 	which were obviously replaced with calls to {@link String#length()} and
 * 	for array direct access which were replaced with calls to {@link String#charAt(int)}.
 * 
 * @param pattern the given pattern
 * @param patternStart the given pattern start
 * @param patternEnd the given pattern end
 * @param name the given name
 * @param nameStart the given name start
 * @param nameEnd the given name end
 * @return true if a sub-pattern matches the subpart of the given name, false otherwise
 */
public static final boolean camelCaseMatch(String pattern, int patternStart, int patternEnd, String name, int nameStart, int nameEnd)

/**
 * Validate compatibility between given string pattern and match rule.
 *
 * Optimized (ie. returned match rule is modified) combinations are:
 *  - {@link #R_PATTERN_MATCH} without any '*' or '?' in string pattern:
 * 		pattern match bit is unset,
 * 	- {@link #R_PATTERN_MATCH} and {@link #R_PREFIX_MATCH}  bits simultaneously set:
 * 		prefix match bit is unset,
 * 	- {@link #R_PATTERN_MATCH} and {@link #R_CAMELCASE_MATCH}  bits simultaneously set:
 * 		camel case match bit is unset,
 * 	- {@link #R_CAMELCASE_MATCH} with invalid combination of uppercase and lowercase characters:
 * 		camel case match bit is unset and replaced with prefix match pattern,
 * 	- {@link #R_CAMELCASE_MATCH} combined with {@link #R_PREFIX_MATCH} and {@link #R_CASE_SENSITIVE}
 * 		bits is reduced to only {@link #R_CAMELCASE_MATCH} as Camel Case search is already prefix and case sensitive.
 *
 * Rejected (ie. returned match rule -1) combinations are:
 * 	- {@link #R_REGEXP_MATCH} with any other match mode bit set.
 *
 * @param stringPattern The string pattern
 * @param matchRule The match rule
 * @return Optimized valid match rule or -1 if an incompatibility was detected.
 */
public static int validateMatchRule(String stringPattern, int matchRule) {
</pre>
</li>
<li>Added Camel Case support in completion.
When you perform code complete, the proposals list contains proposals whose name match with the camel case pattern.
<br>
eg. a possible proposal for TT| is ToTo.
</li>
<li>Added option to control Camel Case completion.
<pre>
/**
 * CODEASSIST / Activate Camel Case Sensitive Completion
 *    When active, completion show proposals whose name match to the CamelCase pattern.
 *     - option id:         "org.eclipse.jdt.core.codeComplete.camelCaseMatch"
 *     - possible values:   { "enabled", "disabled" }
 *     - default:           "disabled"
 */
JavaCore#CODEASSIST_CAMEL_CASE_MATCH
</pre>
Currently this option is disabled by default. The default value of this option will be set to enabled when JDT/Text will be able to manage this kind of proposal
(see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=114098">bug 114098</a>)
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=114091">114091</a>
[assist][javadoc] eternal loop 
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=114077">114077</a>
No NLS Warning if unnecessary nls tag before declaration
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83206">83206</a>
ICodeAssist#codeSelect(..) on implicit methods should not return a java element
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=102572">102572</a>
[plan] Add CamelHumps completion
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=113649">113649</a>
[javadoc][assist] CompletionOnJavadocTag token is not correct
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=113765">113765</a>
[1.5] Insufficient recovery in generic method
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=113671">113671</a>
[search] AIOOBE in SearchEngine#searchAllTypeNames
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=113549">113549</a>
Need camel case matching routines for Strings
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=113722">113722</a>
Sort members is confused with syntax errors
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=113273">113273</a>
[1.5][compiler] Compiler confused by multiply bounded type parameter


<a name="v_618"></a>
<p><hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.2M3 - 25th October 2005
<br>Project org.eclipse.jdt.core v_618
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_618">cvs</a>).
<h2>
What's new in this drop</h2>
<ul>
<li>
Completion engine now supports completion inside Javadoc. User can complete after any word
in Javadoc and get most appropriate proposal depending on area of completion.<br>
Here is a breaf summary of code assist functionality in javadoc:
<ul>
<li>Completion of javadoc tag now only gives valid proposals.<br>
Some examples:
<ul>
<li>complete <code>@pa|</code> will give <code>@param</code> proposal only in javadoc of method or generic type declarations,</li>
<li>complete <code>{@co|</code> will give <code>{@code }</code> proposal only if your compiler compliance has been set to 1.5 or over,</li>
<li>etc.</li>
</ul>
</li>
<li>Completion in "formal reference" of <code>@see</code>, <code>@throws</code>, <code>@exception</code>, <code>{@link}</code>,
<code>{@linplain}</code> or <code>{@value}</code> tags will behave like completion in java code. Type qualification for
types will be inserted depending on "Add import instead of qualified name" Code Assist preferences.
</li>
<li>Completion is now available in text area of javadoc comment.<br>
Some examples:
<ul>
<li>complete at caret in following code:
<pre>
/**
 * This is an example of completion inside text area: S|
 */
public class Sample {}
</pre>
will propose both <code>String</code> and <code>Sample</code>, but also <code>{@link String }</code> and
<code>{@link Sample }</code>.
Currently each proposal is available either as java code type name or direclty inserted as a {@link} tag.
This part is still under work and final behavior should depend on a new JDT/UI preferences...<br>
<br>
</li>
<li>complete at caret in following code:
<pre>
/**
 * This is an example of completion inside text area: #m|
 */
public class Sample {
  void method() {}
}
</pre>
will propose <code>{@link #method() }</code>.
</li>
</ul>
</li>
</ul>
<br>
New API methods have also been added to <code>CompletionContext</code>:
<pre>
/**
 * Tell user whether completion takes place in a javadoc comment or not.
 * 
 * @return boolean true if completion takes place in a javadoc comment, false otherwise.
 * @since 3.2
 */
public boolean isInJavadoc() {...}
/**
 * Tell user whether completion takes place in text area of a javadoc comment or not.
 * 
 * @return boolean true if completion takes place in a text area of a javadoc comment, false otherwise.
 * @since 3.2
 */
public boolean isInJavadocText() {...}
/**
 * Tell user whether completion takes place in a formal reference of a javadoc tag or not.
 * Tags with formal reference are:
 * 	- @see
 * 	- @throws
 * 	- @exception
 * 	- {@link Object}
 * 	- {@linkplain Object}
 * 	- {@value} when compiler compliance is set at leats to 1.5
 * 
 * @return boolean true if completion takes place in formal reference of a javadoc tag, false otherwise.
 * @since 3.2
 */
public boolean isInJavadocFormalReference() {...}
</pre>
</li>
<li>Added API <code>org.eclipse.jdt.core.IMember#ISourceRange getJavadocRange() throws JavaModelException</code>. This API can be used
to retrieve the source range of a javadoc comment attached to the corresponding member.
</li>
<li>Added compiler option so as to specify whether optional errors should be fatal or not. By default, an optional error is 
treated as fatal as a normal language error (as defined by the language spec book), when disabling this option, clients will
be able to treat optional errors as severe warnings only, which will be rendered as errors, but no longer prevent from running
the code. There is some work planned on UI side so as to better distinguish amongst mandatory vs. optional errors.
<pre>
* COMPILER / Treating Optional Error as Fatal
*    When enabled, optional errors (i.e. optional problems which severity is set to "error") will be treated as standard
*    compiler errors, yielding problem methods/types preventing from running offending code until the issue got resolved.
*    When disabled, optional errors are only considered as warnings, still carrying an error indication to make them more
*    severe. Note that by default, errors are fatal, whether they are optional or not.
*     - option id:         "org.eclipse.jdt.core.compiler.problem.fatalOptionalError"
*     - possible values:   { "enabled", "disabled" }
*     - default:           "enabled"
</pre>	 
</li>
<li>Added <code>IJavaElementDelta#F_CATEGORIES</code>. This flag is set when one or more categories of an element 
     are added/changed/removed.</li>
<li>
Java search engine is now able to perform search using Camel Case pattern while using new match rule flag
defined on <code>SearchPattern</code> (see bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110060">110060</a>):
<pre>
/**
 * Match rule: The search pattern contains a Camel Case expression.
 * For example, <code>NPE</code> type string pattern will match
 * <code>NullPointerException</code> type.
 * @see CharOperation#camelCaseMatch(char[], char[]) for a detailed explanation
 * of Camel Case matching.
 *
 * Can be combined to {@link #R_PREFIX_MATCH} match rule. For example,
 * when prefix match rule is combined with Camel Case match rule,
 * <code>"nPE"</code> pattern will match <code>nPException</code>.
 *
 * Match rule {@link #R_PATTERN_MATCH} may also be combined but both rules
 * will not be used simultaneously as they are mutually exclusive.
 * Used match rule depends 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 <code>"NPE"</code> string pattern, search will only use
 * Camel Case match rule, but with <code>N*P*E*</code> string pattern, it will 
 * use only Pattern match rule.
 * 
 * @since 3.2
 */
public static final int R_CAMELCASE_MATCH = 0x0080;
</pre>
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=113506">113506</a>
[javadoc][assist] No tag proposals when there is a prefix on a line
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=113376">113376</a>
[javadoc][assist] wrong overwrite range on completion followed by a tag
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=113374">113374</a>
[javadoc][assist] do not propose anything if the prefix is preceded by a special character
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106466">106466</a>
[1.5][compiler] Type parameter followed by other types in bound - rejected by javac, accepted by Eclipse
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110172">110172</a>
[plan] API to extract the Javadoc on org.eclipse.jdt.core.IMember
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=87868">87868</a>
[1.5][javadoc][assist] Dodgy completion in javadoc comment
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86112">86112</a>
[javadoc][assist] Wrong reference to binary static initializer in javadoc
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=67732">67732</a>
[javadoc][assist] Content assist doesn't work in Javadoc "line breaks"
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22043">22043</a>
[javadoc][assist] Code Completion in Javadoc @see/@link doesn't work on partially entered argument types
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=107282">107282</a>
[plan][compiler] Non mandatory JLS errors should not end up in problem methods
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52840">52840</a>
Howto generate the parser: LPG 2.30 is which version of JikesPG?
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=113051">113051</a>
No classpath marker produced when cycle through PDE container
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=113110">113110</a>
TestFailures in DebugSuite
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=112109">112109</a>
Compilation problem: Eclipse does not recognise parametrized notify-method in generic context
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=100970">100970</a>
[1.5][compiler] Interface methods may conflict with Object methods
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=112418">112418</a>
PDE generate build file and ant task eclipse.buildScript ignore javaSource and javaTarget
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=112973">112973</a>
NLS tags like //$NON-NLS-?$ don't have the right range
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110060">110060</a>
[plan][search] Add support for Camel Case search pattern
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=100182">100182</a>
[1.5][compiler] unecessary cast in case of boxing


<a name="v_617"></a>
<p><hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.2M3 - 18th October 2005
<br>Project org.eclipse.jdt.core v_617
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_617">cvs</a>).
<h2>
What's new in this drop</h2>
<ul>
<li>In 5.0 compliant mode, the classfile name for an anonymous class is now correctly referring to its 
innermost enclosing type name, e.g. "X$1$1" for an anonymous nested inside another anonymous; where 
it was "X$2" before 5.0.</li>
<li>Added compiler diagnosis to signal unused label (from labeled statement). Note that a label is considered to be
used if explicitly referenced only.
<pre>
* COMPILER / Reporting Unreferenced Label
*    When enabled, the compiler will issue an error or a warning when encountering a labeled statement which label
*    is never explicitly referenced. A label is considered to be referenced if its name explicitly appears behind a break
*    or continue statement; for instance the following label would be considered unreferenced;   LABEL: { break; }
*     - option id:         "org.eclipse.jdt.core.compiler.problem.unusedLabel"
*     - possible values:   { "error", "warning", "ignore" }
*     - default:           "warning"
</pre>
</li>
<li>Added API <code>org.eclipse.jdt.core.ToolFactory#createDefaultClassFileReader(java.io.InputStream,int)</code>
     that allows to the creation of an org.eclipse.jdt.core.util.IClassFileReader object using an input stream.
</li>
<li>Added API <code>JavaCore#addPreProcessingResourceChangedListener(IResourceChangeListener,int)</code>
     that allows to register an <code>IResourceChangedListener</code> for a given event type that runs
     before JDT Core.</li>
<li>Added APIs to get the values of the @category tag in the Javadoc of a type, field or method: 
     <code>IMember#getCategories()</code> and to get the children of a type for a given category
     <code>IType#getChildrenForCategory(String)</code>.</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=112137">112137</a>
ConcurrentModificationException when CTRL+LeftClick on constructor call in Java editor
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85298">85298</a>
[1.5][enum] IType of anonymous enum declaration says isLocal() == false
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=108856">108856</a>
[1.5][compiler] Inner inner classes have illegal names
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=112231">112231</a>
[1.5][compiler] enum declaration
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=112381">112381</a>
Javadoc of IMethodBinding#overrides(IMethodBinding) refers to wrong JLS2 section
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=105756">105756</a>
[1.5][model] Incorrect warning on using raw types
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=112609">112609</a>
StackOverflow when initializing Java Core
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=112666">112666</a>
[1.5][compiler] Compiler rejects valid assignment to complex capture
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=63840">63840</a>
warning on unused labels
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=112617">112617</a>
[API] Add ToolFactory.createDefaultClassFileReader(InputStream,int)
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=112518">112518</a>
[performance] NLS detection should be faster
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=107814">107814</a>
@SuppressWarnings("unused") requires additional //$NON-NLS-1$
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110613">110613</a>
[1.5][compiler] Should not report warnings for nls string inside annotation declaration
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=112500">112500</a>
[1.5][compiler] bug between inference and wilcard
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111350">111350</a>
[1.5][compiler] method override and generics
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=108782">108782</a>
[1.5][compiler] inconsistent @Override error
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=108780">108780</a>
[1.5][compiler] Subsignature checking does not respect erasure conversion
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=105808">105808</a>
[1.5][dom] MethodBinding#overrides(..) should not consider return types
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23669">23669</a>
[plan][DCR][Javadoc] Add support for @cat / @category organization of class members
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=112268">112268</a>
[1.5][compiler] Type mismatch introduced in 3.1.1
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=112346">112346</a>
[1.5][javadoc] Unexpected "Invalid reference" on javadoc field reference
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=112190">112190</a>
batch compiler option "-warn:+allUnchecked" does not work
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=112223">112223</a>
Scanner#getNextToken() behavior doesn't seems consistent if there is an unicode inside a string.
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=107045">107045</a>
[1.5][compiler] Compiler misses name clash with bounded class type parameter


<a name="v_616"></a>
<p><hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.2M3 - 11th October 2005
<br>Project org.eclipse.jdt.core v_616
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_616">cvs</a>).
<h2>
What's new in this drop</h2>
<ul>
<li>Added CharOperation API to perform CamelCase matching. This new matching mode will be leveraged into
codeassist and search.
<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 '?'. 
*
* 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 trailing lowercase characters, which will be match in a case sensitive way. These characters must
* appear in sequence in the name, after the last matching capital of the pattern. For instance, 'NPExcep' will match
* 'NullPointerException', but not 'NullPointerExCEPTION'.
public static final boolean camelCaseMatch(char[] pattern, char[] name)
public static final boolean camelCaseMatch(char[] pattern, int patternStart, int patternEnd, char[] name, int nameStart, int nameEnd)
</pre>
</li>
<li>Tuned new compiler diagnosis for raw type references. This problem can now be enabled independantly from 
unchecked type operations, and carries its own severity settings. Removed "Type safety:" prefix from problem description
as it is not truly fragilizing type integrity. This warning can still be silenced by <code>@SuppressWarnings("unchecked")</code>
<pre>
* COMPILER / Reporting Raw Type Reference
*    When enabled, the compiler will issue an error or a warning when detecting references to raw types. Raw types are 
*    discouraged, and are intended to help interfacing with legacy code. In the future, the language specification may 
*    reject raw references to generic types.
*     - option id:         "org.eclipse.jdt.core.compiler.problem.rawTypeReference"
*     - possible values:   { "error", "warning", "ignore" }
*     - default:           "ignore"
</pre></li>
<li>Added API <code>CategorizedProblem</code> to extend <code>IProblem</code> definitions with notion of
problem category and marker type. This will enable other pluggable tool to participate in various compilation stages
and report domain specific problems through the existing API (<code>IProblem</code> based). It is recommended that
clients do not directly implement <code>IProblem</code> but instead do extend the abstract class <code>CategorizedProblem</code>.
<pre>
/**
 * Returns an integer identifying the category of this problem. Categories, like problem IDs are
 * defined in the context of some marker type. Custom implementations of <code>CategorizedProblem</code>
 * may choose arbitrary values for problem/category IDs, as long as they are associated with a different
 * marker type.
 * @return id - an integer identifying the category of this problem
 */
public abstract int getCategoryID();
</pre><pre>	
/**
 * Returns the marker type associated to this problem, if it was persisted into a marker by the JavaBuilder
 * Standard Java problems are associated to marker type "org.eclipse.jdt.core.problem"), standard tasks 
 * are associated to marker type "org.eclipse.jdt.core.task".
 * @return the type of the marker which would be associated to the problem
 * @see org.eclipse.jdt.core.IJavaModelMarker#JAVA_MODEL_PROBLEM_MARKER
 * @see org.eclipse.jdt.core.IJavaModelMarker#TASK_MARKER
 */
public abstract String getMarkerType(); 
</pre></li>
<li>Added API <code>IJavaElementDelta#F_AST_AFFECTED</code> and <code>IJavaElementDelta#getCompilationUnitAST()</code>.
     The Java element delta's flag is set to <code>F_AST_AFFECTED</code> when a reconcile operation affects the AST
     created in the last reconcile operation. In this case the AST should be re-acquired using <code>getCompilationUnitAST()</code>.
</li>
<li>Added API to encode and decode a classpath entry (<code>IJavaProject#encodeClasspathEntry(IClasspathEntry)
     and decodeClasspathEntry(String)</code>.
<li>Added API <code>IClassFile#becomeWorkingCopy(...)</code> that returns an <code>ICompilationUnit</code>
     in working copy mode on the given class file. See its Javadoc for more details.</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111898">111898</a>
[compiler] Wrong code generation
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111822">111822</a>
DOMParser.createASTs() NPE at FieldReference.getConstantFor(FieldReference.java:408)
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=109118">109118</a>
[1.5][compiler] Unhandled Exception Compiler error involving generics in java 1.5
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111812">111812</a>
[compiler] should improve error highlighting for static initializer errors
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111208">111208</a>
[1.5][compiler] Compiler gets confused by multiple generic-extends'
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111618">111618</a>
[1.5][dom] Foreach statement shows extraneous semi column into debug variables view
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111703">111703</a>
Static initialization block in anonymous inner class causes compiler to fail
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110168">110168</a>
[plan] Broadcast AST when reconciling
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111767">111767</a>
Disassembler doesn't produce an output that can be compiled for annotation types
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111299">111299</a>
JavaModelCache may overflow the memory.
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110596">110596</a>
[assist] don't rank java.lang types lower if a simple name duplicate exists
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110171">110171</a>
[plan] API to encode/decode a classpath entry into XML form
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111511">111511</a>
Comments in compiler @arguments file
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111420">111420</a>
Disassembler doesn't generate type parameters
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111396">111396</a>
TypeHierarchy doesn't notify listeners on addition of fully qualified subtypes
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110160">110160</a>
[plan] Working copy for class file

<a name="v_615"></a>
<p><hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.2M3 - 4th October 2005
<br>Project org.eclipse.jdt.core v_615
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_615">cvs</a>).
<h2>
What's new in this drop</h2>
<ul>
<li>Compiler diagnosis for unnecessary cast is now able to recognize situations like:
  <ul>
  <li> <code>List l = (ArrayList) someList; </code></li>
  <li> <code>List foo(List someList) { return (ArrayList) someList;} </code></li>
  </ul></li>
  <li>Compliance settings can now refer to "1.6" (aka "6.0") in addition to 1.3, 1.4 and 1.5. When classfile target is toggled to "1.6"
  the major/minor version will be adjusted accordingly. Some 1.6 specific attributes (e.g. StackMapTable) are not produced yet.
  </li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111222">111222</a>
[compiler] add new constants to support JDK 6.0
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111219">111219</a>
Disassembler generates syntactically incorrect code
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111014">111014</a>
Internal Compiler Error
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106010">106010</a>
[1.5][compiler] Wrong warning message issued in generic nesting type casting
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110813">110813</a>
[search] ImportMatchLocatorParser should be implemented in its own CU
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70228">70228</a>
new compiler warning for stuff like Object o = (Integer)(new Object())
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110576">110576</a>
[encoding] Rename CU looses encoding for file which charset is determined by contents
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110304">110304</a>
Formatter has no options for 'return'
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110251">110251</a>
Inaccurate problem description on bad nested class
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110657">110657</a>
[DOM] wrong position for single variable declaration inside enhanced for statement
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110987">110987</a>
[compiler] the operator is not used to InstanceOfExpression
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=108731">108731</a>
improved error message
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110433">110433</a>
JavaModelManager#getElementsOutOfSynchWithBuffers() should use a HashSet
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110434">110434</a>
Move WeakHashSet to model
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110439">110439</a>
HashableWeakReference should be static
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110449">110449</a>
Remove field IndexBasedHierarchyBuilder#handleToWorkingCopy
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110789">110789</a>
ProjectCache.pathToResolvedEntries should be rootToResolvedEntries
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=69471">69471</a>
[DOM/AST] Improve guessing of method binding for overloaded methods
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110773">110773</a>
ITypeBinding#isEqualTo(..) is wrong when comparing NodeList&lt;String&gt;.Cursor to its type declaration
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=109963">109963</a>
[dom] Two VariableDeclarationStatements in switch
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=109940">109940</a>
[dom] IllegalArgumentException is thrown in CharacterLiteral.charValue()
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110270">110270</a>
Failure in model test 20050921-1200
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110082">110082</a>
[compiler] Increase compiler performance for "Remove superfluous NLS strings" warnings
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110849">110849</a>
[compiler] Batch compiler doesn't use the user.dir if no classpath is specified
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110738">110738</a>
[1.5][compiler] Internal compiler error while processing Currency
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110826">110826</a>
[compiler] Batch compiler doesn't work when set on the bootclasspath

<a name="v_614"></a>
<p><hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.2M3 - 27th September 2005
<br>Project org.eclipse.jdt.core v_614
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_614">cvs</a>).
<h2>
What's new in this drop</h2>
<ul>
<li>
Added optional compiler diagnosis for signaling usage of raw types. A raw type is a reference to some
generic type without any type argument (e.g. "List" in place of "List&lt;Element&gt;").
<pre>
* COMPILER / Reporting Raw Type Reference
*    When enabled, the compiler will signal references to raw types. Raw types are discouraged, and are intended to help interfacing
*    with legacy code. In the future, the language specification may reject raw references to generic types.
*    The severity of the problem is controlled with option "org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation".
*     - option id:         "org.eclipse.jdt.core.compiler.problem.rawTypeReference"
*     - possible values:   { "enabled", "disabled" }
*     - default:           "disabled"
</pre>
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=107004">107004</a>
NPE in TypeBinding.getKey()
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=108740">108740</a>
[1.5][compiler] Type hierarchy with generics fails with NPE
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=101456">101456</a>
Proposals and Open Declaration fail with NPE
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110570">110570</a>
[1.5][compiler] error in type deduction
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110563">110563</a>
[1.5][compiler] Internal compiler error for varags
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89529">89529</a>
[1.5][compiler] improve warnings for raw types
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110182">110182</a>
[compiler] Eclipse does not recompile rt.jar properly 


<a name="v_613"></a>
<p><hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.2M2 - 21st September 2005 - 3.2 MILESTONE 2
<br>Project org.eclipse.jdt.core v_613
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_613">cvs</a>).
<h2>
What's new in this drop</h2>
<ul>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=109055">109055</a>
Error starting JDT Core due to IAE: Path for project must have only one segment.
	  	
<a name="v_612"></a>
<p><hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.2M2 - 19th September 2005
<br>Project org.eclipse.jdt.core v_612
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_612">cvs</a>).
<h2>
What's new in this drop</h2>
<ul>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=108203">108203</a>
[1.5][compiler] cannot compile internal class implementing interface with parameterized method
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=107681">107681</a>
[1.5][compiler] invalid ambiguous invocation diagnostic
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=107098">107098</a>
[1.5][compiler] method override check fails with instantiated type parameter in bound
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=103849">103849</a>
[jdk][compiler] Incorrect ambiguity error for generic types + inheritance
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=102631">102631</a>
[1.5][compiler] false java error for ambiguous methods

<a name="v_611"></a>
<p><hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.2M2 - 16th September 2005
<br>Project org.eclipse.jdt.core v_611
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_611">cvs</a>).
<h2>
What's new in this drop</h2>
<ul>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=109646">109646</a>
[DOM] Parsing using K_STATEMENTS doesn't return the right tree for multiple local declarations
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=109535">109535</a>
[DOM] Wrong infix expression when '-' is used within string literals

<a name="v_610"></a>
<p><hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.2M2 - 13th September 2005
<br>Project org.eclipse.jdt.core v_610
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_610">cvs</a>).
<h2>
What's new in this drop</h2>
<ul>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=109333">109333</a>
[DOM/AST] OR_OR and AND_AND expression are not converted to an infix expression using extended operands
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=109340">109340</a>
[Formatter] Wrong positionning of empty statements
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=108622">108622</a>
[javadoc][dom] ASTNode not including javadoc
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52283">52283</a>
do &lt;single-statement&gt; while(&lt;condition&gt;) is ill-formatted
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=101080">101080</a>
NPE during computePriority for problems
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=108783">108783</a>
[1.5][compiler] Runnable masks Iterable interface in bounds
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=107110">107110</a>
IMethodBinding.isSubsignature not yet correctly implemented
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=101380">101380</a>
[1.5][compiler] Problem when implementing generic interface with method that has enum parameter
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=108820">108820</a>
Index based type hierarchy should not consider interfaces in index when focus is a class
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99734">99734</a>
[select] CodeSelect fails when selecting an anonymous class of Object
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=108615">108615</a>
Unable to inherit abstract methods from jarred interface
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=108263">108263</a>
[1.5][compiler] Constants initilialization doesn't work inside Annotation


<a name="v_609"></a>
<p><hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.2M2 - 6th September 2005
<br>Project org.eclipse.jdt.core v_609
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_609">cvs</a>).
<h2>
What's new in this drop</h2>
<ul>
<li>The size limit of the internal Java model cache is now function of the max heap size (-Xmx VM argument) given to the Java Virtual Machine.
      Thus users who give more memory to the VM because they have big .jar files on their classpath will see an increase in performance.
</li>
<li>Reading the .classpath file is now forward compatible with upcoming versions. If a .classpath file contains unknown elements and attributes,
     these are left untouched and are persisted.
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=104695">104695</a>
[1.5][compiler] Compiler allows instanceof with non-reifiable array type
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=101425">101425</a>
Classpath persistence should be resilient with unknown attributes
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=108372">108372</a>
[1.5][compiler] Inner class of enclosing raw type don't works
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106202">106202</a>
JavaModelCache should have configurable LRU cache limits
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=107756">107756</a>
[1.5][compiler] Invalid diagnostic invoking method through raw interface
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=100636">100636</a>
[model] Can't find overriden methods of protected nonstatic inner class.
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=100606">100606</a>
NPE during reconcile
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=101228">101228</a>
JME on code assist
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=103466">103466</a>
Stack Overflow: Requesting Java AST from selection
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=87193">87193</a>
CodeFormatter Indent on column wrapping
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99645">99645</a>
[select] CodeSelect doesn't work for type parameter declaration of a local type
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=71766">71766</a>
[format] Formatter fails to wrap lines for assignment statements
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=102284">102284</a>
[5.0 ] CCE in ParameterizedTypeBinding [code assist]
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83206">83206</a>
ICodeAssist#codeSelect(..) on implicit methods should not return a java element
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72402">72402</a>
[format] align method arguments
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=103706">103706</a>
[formatter] indent empty lines

<a name="v_608"></a>
<p><hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.2M2 - 30th August 2005
<br>Project org.eclipse.jdt.core v_608
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_608">cvs</a>).
<h2>
What's new in this drop</h2>
<ul>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83005">83005</a>
[1.5][assist] Content Assist in annotation offers to override methods
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=105581">105581</a>
Creating a Java project from existing source fails because of "Unhandled event loop exception": ArrayIndexOutOfBoundsException
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=104486">104486</a>
newNotPresentException when reconciling CU in a non-java project
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=104879">104879</a>
BindingKey#internalToSignature() returns invalid signature for local type
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106725">106725</a>
[content assist] wrong method created when overriding static method
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=107330">107330</a>
ASTParser#createASTs(..) returns invalid binding for key of local type
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=107580">107580</a>
Putting a period after an enum element with a constructor causes a crash
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=107735">107735</a>
StringIndexOutOfBoundsException in Util.getNameWithoutJavaLikeExtension()
	  	
<a name="v_607"></a>
<p><hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.2M2 - 23rd August 2005
<br>Project org.eclipse.jdt.core v_607
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_607">cvs</a>).
<h2>
What's new in this drop</h2>
<ul>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=107535">107535</a>
batch compiler should put is own version in the compiler log file
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=107079">107079</a>
[1.5][compiler] mis-compiled Wildcard capture leads to a ClassCastException
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=107249">107249</a>
NullPointerException at BinaryIndexer.indexDocument()
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=104202">104202</a>
Better locations for assignement errors
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=102422">102422</a>
Exception referencing class in large jar files
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=100549">100549</a>
Strange binding keys from AST on class file of nested type
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=101777">101777</a>
[search] selecting class with a main type ignores the default package
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=107124">107124</a>
NullPointerException at ClassFileStruct.u2At
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106581">106581</a>
[javadoc] null type binding for parameter in javadoc
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106936">106936</a>
[1.5][compiler] Unoptimal lub computation
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106865">106865</a>
[1.5][compiler] capture conversion doesn't handle array types
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=105284">105284</a>
[1.5][compiler] Autoboxing: Type mismatch


<a name="v_606"></a>
<p><hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.2M2 - 16th August 2005
<br>Project org.eclipse.jdt.core v_606
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_606">cvs</a>).
<h2>
What's new in this drop</h2>
<ul>
<li>Bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48976">48976</a> is now enabled again. A tool can be installed from <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/jdt-core-home/tools/jdtcoretools/update-site">update site</a>
to easily remove unnecessary nls tags. Copy the link as a new update site under Eclipse. The tool requires a build &gt; 20050812.
<ul>
<li>nls tags are ignored in isolated line comments like:<br>
<pre>
<code>		...
		// System.out.println(""); //$NON-NLS-1$
		...</code>
</pre>
</li>
<li>Other nls comments are reported as unnecessary if they don't match a corresponding string literal</li>
<li>The tool removes the unnecessary nls tags even if the line comment is used for another comment:
<pre>
<code>String s = "Hello, World"; //$NON-NLS-1$ This won't be removed //$NON-NLS-2$ at all</code>
</pre>
becomes:
<pre>
<code>String s = "Hello, World"; //$NON-NLS-1$ This won't be removed  at all</code>
</pre>

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

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106964">106964</a>
[1.5][search] AIOBE in MethodLocator.matchOverriddenMethod
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99903">99903</a>
[1.5][search] range wrong for package-info
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99662">99662</a>
[1.5] JavaModel returns inexistent IType for package-info ICompilationUnits
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106875">106875</a>
[compiler] Unnecessary nls tags detection fails on duplicate tags
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=105284">105284</a>
[1.5][compiler] Autoboxing: Type mismatch
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106834">106834</a>
IMethodBinding#isEqualTo(..) wrong with overloaded parameterized methods
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48976">48976</a>
Remove superfluous $NON-NLS comments
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=105816">105816</a>
Extraneous NLS tag incorrectly found in comments
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106106">106106</a>
[1.5][compiler] Compiler error with Arrays.asList in Java 5 mode?
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106403">106403</a>
PublicScanner returns EOF late
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=105531">105531</a>
[1.5][compiler] ecj from CVS generates spurious incomprehensible error
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106514">106514</a>
[1.5][compiler] Improve diagnostic on bound mismatch for GenericTypeTests.test790


<a name="v_605"></a>
<p><hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.2M1 - 10th August 2005 - 3.2 MILESTONE 1 
<br>Project org.eclipse.jdt.core v_605
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_605">cvs</a>).
<h2>
What's new in this drop</h2>
<ul>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106656">106656</a>
[compiler] Batch compiler exits with error code -1 when only warnings are found


<a name="v_604"></a>
<p><hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.2M1 - 9th August 2005
<br>Project org.eclipse.jdt.core v_604
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_604">cvs</a>).
<h2>
What's new in this drop</h2>
<ul>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106297">106297</a>
[1.5][compiler] new A&lt;X&gt;().new B(){}


<a name="v_603"></a>
<p><hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.2M1 - 8th August 2005
<br>Project org.eclipse.jdt.core v_603
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_603">cvs</a>).
<h2>
What's new in this drop</h2>
<ul>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=100041">100041</a>
[javadoc][dom] Wrong positions when javadoc comment inside method declaration


<a name="v_602"></a>
<p><hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.2M1 - 2nd August 2005
<br>Project org.eclipse.jdt.core v_602
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_602">cvs</a>).
<h2>
What's new in this drop</h2>
<ul>
<li>The compiler won't report anymore unnecessary non nls tags (see bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48976">48976</a> for details).<br>
This will be reverted after 3.2M1 build.
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=105635">105635</a>
incorrect parsing of field declarations with generic types
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=100772">100772</a>
[1.5][search] Search for declarations in hierarchy reports too many matches
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=100695">100695</a>
[1.5][search] Renaming a field of generic array type has no effect

<a name="v_601"></a>
<p><hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.2M1 - 2nd August 2005
<br>Project org.eclipse.jdt.core v_601
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_601">cvs</a>).
<h2>
What's new in this drop</h2>
<ul>
<li>The Java conventions built-in code formatter profile has been updated to reflect the tab size at 8.</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=104765">104765</a>
Tab width error in Java Conventions [built-in]
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=105192">105192</a>
NaiveASTFlattener incorrectly renders a for statement with multiple initializers or multiple updaters

<a name="v_600"></a>
<p><hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.2M1 - 26th July 2005
<br>Project org.eclipse.jdt.core v_600
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_600">cvs</a>).
<h2>
What's new in this drop</h2>
<ul>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=105430">105430</a>
ecj chokes when classpath has leading separator
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=104738">104738</a>
[1.5][compiler] Enclosing method attribute is generated for member type of a local type
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=104704">104704</a>
[compiler] caching in the constant pool could be improved
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=104664">104664</a>
[compiler] repeat mode is broken in the batch compiler
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99423">99423</a>
[1.5] [javadoc] inconsistent getStartPosition()
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=104649">104649</a>
[1.5][compiler] method type variable: inference broken for null
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=104877">104877</a>
[1.5] TypeDeclarationStatement should use DECLARATION_PROPERTY in JLS3 API
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=104780">104780</a>
TVT 3.1: TCT 386 - wrong description for option FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=104655">104655</a>
[1.5] inconsistent compiler behavior in generic methods
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=104551">104551</a>
[1.5][compiler] Method override checks fail with raw subtype and type variable as type bound
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=104492">104492</a>
[AST]java.lang.ClassCastException: org.eclipse.jdt.core.dom.PrimitiveType
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=103485">103485</a>
[1.5][compiler] compiler: wrongfully accepted method call
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=104245">104245</a>
AST.newCompilationUnit javadoc error
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=103994">103994</a>
[1.5][compiler] Internal compiler error while overriding bootstrap class
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=103528">103528</a>
[1.5][compiler] compiler allows invalid assignment with method type parameter and nested wildcards
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=104082">104082</a>
[1.5][compiler] 1.5 source code gets internal eclipse null pointer error
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=104167">104167</a>
[1.5][compiler] incorrect 'unread field' diagnosis
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=103320">103320</a>
Method-local subtype with instance initializer break JDOM
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=103636">103636</a>
JDT compiler produces invalid XML
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=103227">103227</a>
[1.5][compiler] VerifyError in case of a parametrized anonymous class inside a static inner class
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=103148">103148</a>
[1.5][assist] Code completion breaks if using static method generics ( Class.&lt;T&gt;staticMethod(params) )
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=103472">103472</a>
[1.5][compiler] Should detect incompatible super interfaces
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=91426">91426</a>
[Markers] Java task tags in Task View don't have configured priority
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=103023">103023</a>
[1.5][compiler] StackOverflow inferring type arguments
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=102778">102778</a>
Scrapbook page doesn't work with enhanced for statement
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=101283">101283</a>
[1.5][javadoc] Javadoc validation raises missing implementation in compiler
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=100868">100868</a>
Code assist does not recommend methods in anonymous enum subclass
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=101456">101456</a>
Proposals and Open Declaration fail with NPE
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=101387">101387</a>
[1.5][compiler] Incorrect Cycle detected in type hierarchy error
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97326">97326</a>
[dom] ITypeBinding#isFromSource() is always false for type variables, wildcards, and capture types
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=100153">100153</a>
[1.5][compiler] Bound check failure on recursive formal bound
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=100808">100808</a>
[assist] Wrong replace range for package proposals if there is no line termination
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=98532">98532</a>
[1.5][compiler] Spurious 'type parameter T is hiding the type T' warning for static nested classes
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=100797">100797</a>
editor general failure
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=100043">100043</a>
[1.5][compiler] false compiler error on ?: ternary operator with boxing
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=102181">102181</a>
[1.5][compiler] Generic varargs are built with incorrect array type
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=102305">102305</a>
Error in JDT Core during reconcile
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=102213">102213</a>
[1.5][compiler] enum constants cannot be referenced inside enum constants initializer
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=101955">101955</a>
NullPointerException after invoking extract method
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97220">97220</a>
Should not issue nls warning for annotation
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=101885">101885</a>
[mode] sort operation doesn't set the RELATIVE_ORDER for enum constants
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=101247">101247</a>
[formatter] Fails to format some labelled statements
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=101713">101713</a>
[1.5][compiler] Access to static fields within enum constructors inconsistent with javac
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=101779">101779</a>
[1.5][compiler] VerifyError using -- operator on unboxed generic Integer type
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=101208">101208</a>
[compiler] instanceof check cannot be unnecessary on null values
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=100619">100619</a>
[1.5][compiler] Incorrect duplicate bound diagnosis
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94759">94759</a>
[1.5][compiler] @Override doesn't report an error inside interface when specified for clone() method
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=98538">98538</a>
[1.5][compiler] Inference broken for subtypes of subtypes of F-bounded types
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=102650">102650</a>
[ast rewrite] Removing all TYPE_PARAMETERS_PROPERTY values in a derived type gives incompilable code


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

<br>&nbsp;
</body>
</html>
