<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
   <meta name="Author" content="IBM">
   <title>JDT/Core Release Notes 3.4</title>
   <link rel="stylesheet" href="jdt_core_style.css" charset="iso-8859-1" type="text/css">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<table border=0 cellspacing=5 cellpadding=2 width="100%" >
  <tr>
    <td align="left" width="72%" class="title1">
      <font size="+3"><b>jdt core - build notes 3.4 stream</b></font>
    </td>
  </tr>
  <tr><td align="left" width="72%" class="title2"><font size="-2">java development tooling core</font></td></tr>
  <tr><td>&nbsp;</td></tr>
  <tr>
  	<td class="title3">
	  <font size="-1">
	  Here are the build notes for the Eclipse JDT/Core plug-in project
	  <a href="http://www.eclipse.org/jdt/core/index.php"><b>org.eclipse.jdt.core</b></a>,
	  describing <a href="http://bugs.eclipse.org/bugs" target=new>bug</a> resolution and substantial changes in the <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core"><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_853"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4M7 - April 15, 2008 - 3.4 MILESTONE 7
<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>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 {
 * &#047;&#042;&#042;
 *  &#042; 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.
 *  &#042; &#064;param str The input string &#042;&#047;
 *  void foo(String str){}}
 *
 * will produce the following output:
 *
 * public class X {
 *      &#047;&#042;&#042;
 *       &#042; 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.
 *       &#042; 
 *       &#042; &#064;param str The input string
 *       &#042;&#047;
 *      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 {
 *      &#047;&#042;&#042;
 *       &#042; This is just a simple example to show that comments will be formatted
 *       &#042; while processing a compilation unit only if the constant flag
 *       &#042; <code>F_INCLUDE_COMMENT</code> flag is set.
 *       &#042; 
 *       &#042; &#064;param str
 *       &#042;                 The input string
 *       &#042;&#047;
 *      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=102780">102780</a>
[formatter] CodeFormatter does not format Javadoc
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=219855">219855</a>
[1.5][compiler] StackOverflowError during: "Requesting Java AST from selection"
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=223986">223986</a>
Invalid incompatible return type error
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=226890">226890</a>
[jsr199] enable CompilerToolTests#testCompilerOneClassWithEclipseCompiler4 on Linux
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=226673">226673</a>
CompletionContext.getVisibleElements(..) doesn't find assignable fields
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=178982">178982</a>
[assist] Bad static import relevance in content assist
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225563">225563</a>
Class with compile errors results in invalid class file format
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=226313">226313</a>
Anonymous enum type has wrong name and source range
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=223685">223685</a>
[clean-up] Necessary cast removed
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82712">82712</a>
[1.5] Code assist does not show method parameters from static imports
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=226134">226134</a>
CCE in SourceMethod.getDefaultValue() for constructor
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97310">97310</a>
code assist for type variable bounds: should not suggest classes
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=224402">224402</a>
[compiler] CCE in compiler: MissingTypeBinding cannot be cast to ProblemReferenceBinding
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96604">96604</a>
[1.5][codeassist] missing proposals for wildcard capture

<a name="v_852"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4M7 - April 8, 2008
<br>Project org.eclipse.jdt.core v_852
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_852">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=215331">215331</a>
[assist] Inconsistent completions for member types
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=221904">221904</a>
Java Model Exception while trying to open *.class file
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=223488">223488</a>
'package-info.java' does not exist in PackageBinding.getAnnotations()
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=193045">193045</a>
[1.5][assist] Code completion fails in inner class w/ foreach loop
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=223899">223899</a>
Base type var should not be proposed before Object var in == case
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225577">225577</a>
[compiler] Default abstract methods should be tagged as synthetic
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=133005">133005</a>
BinaryTypeConverter cannot convert generic type reference.
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=224351">224351</a>
Regression in performance test FullSourceWorkspaceModelTests#testFindType
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=215975">215975</a>
new field declaration CompletionProposal cuts changes initial prefix
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=217078">217078</a>
[compiler] compiler.regression.RuntimeTests#test0001_memory_exhaustion failing when using IBM JRE
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=219099">219099</a>
Content assist does not not offer multiple choices for ambiguous static imports

<a name="v_851"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4M7 - April 1, 2008
<br>Project org.eclipse.jdt.core v_851
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_851">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=224715">224715</a>
Missing abstract problem methods should be tagged as synthetic methods

<a name="v_850"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4M6 - March 28, 2008 - 3.4 MILESTONE 6
<br>Project org.eclipse.jdt.core v_850
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_850">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=224458">224458</a>
[search] NPE trying to search for a field declaration

<a name="v_849"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4M6 - March 27, 2008
<br>Project org.eclipse.jdt.core v_849
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_849">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=223878">223878</a>
[content assist] Illegal argument exception from content assist

<a name="v_848"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4M6 - March 26, 2008
<br>Project org.eclipse.jdt.core v_848
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_848">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=222534">222534</a>
[compiler] wrong field hides field warning for private fields

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

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

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

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

</ul>

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

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

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

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

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

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

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

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

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

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

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

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

	


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

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

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

<h3>Problem Reports Fixed</h3>

<a name="v_838"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4M6 - February 19, 2008
<br>Project org.eclipse.jdt.core v_838
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_838">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=217995">217995</a>
Documentation for JavaCore#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION [...] fails to make crystal-clear the cases of Exception and Throwable
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=217910">217910</a>
Parameter annotations should be displayed in front of each parameter in disassembled code
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=219064">219064</a>
Javadoc of AST#newTypeDeclaration() refers to inexistent setEnumeration(..)
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=212096">212096</a>
LocalVariable.hashCode throws NPE when this.parent is null

<a name="v_837"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4M6 - February 12, 2008
<br>Project org.eclipse.jdt.core v_837
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_837">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=217907">217907</a>
Compact mode in the disassembler should also work for annotation values

<a name="v_836"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4M5 - February 5, 2008 - 3.4 MILESTONE 5
<br>Project org.eclipse.jdt.core v_836
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_836">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=212100">212100</a>
[dom] Can't create binding to inner class

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

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

<a name="v_834"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4M5 - January 29, 2008
<br>Project org.eclipse.jdt.core v_834
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_834">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=216692">216692</a>
[1.5][compiler] Protected type not visible in subclass
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=216565">216565</a>
[1.5][compiler] Cannot convert T to T
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=216747">216747</a>
Should use AVOID_NATURE_CONFIG when updating project references
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=208260">208260</a>
[search] Document the pattern syntax for SearchPattern#createPattern(String, ..)
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=130778">130778</a>
Invalid annotation elements cause no annotation to be in the AST
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=210524">210524</a>
[batch][compiler][options] -warn:allDeprecation -warn:-deprecation does not behave as documented
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=216100">216100</a>
[1.5][compiler] Brigdes are not correcly generated
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=213249">213249</a>
Regression in TypeHierarchy when a super-class can't be resolved
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=215681">215681</a>
Type Hierarchy crashes in some cases of user input
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=215333">215333</a>
[batch][compiler][options] the documentation for specialParamHiding needs improvement
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=100278">100278</a>
[compiler] Add compiler warning for explicitly declared runtime exceptions
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=191090">191090</a>
[compiler] Preserve annotations for the problem methods
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=215843">215843</a>
[1.5][compiler] Compiler error with generic covariant

<a name="v_833"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4M5 - January 22, 2008
<br>Project org.eclipse.jdt.core v_833
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_833">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=215976">215976</a>
PublicScanner doesn't contain all the fix of Scanner
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=215759">215759</a>
DOM AST regression tests should be improved
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=215858">215858</a>
[AST/DOM] CCE when using ASTParser.setFocalPosition(int) with the position of a field declaration name
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127739">127739</a>
IAE in Signature.getReturnType while hovering a method of type having $ in its name
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=210746">210746</a>
Class folder in build path does not refresh properly
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=138882">138882</a>
Should surface failure to get CU's contents
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=214972">214972</a>
[1.5][compiler] Wrong Signature for methods inside InnerTypes with generics .

<a name="v_832"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4M5 - January 15, 2008
<br>Project org.eclipse.jdt.core v_832
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_832">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=215019">215019</a>
[search] JavaSearchBugsTests.testBug181488a is randomly failing
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=213703">213703</a>
[search] Indexing job progress should be more detailed
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=186540">186540</a>
[search] engine should allocate progress monitor ticks for reporting package declarations
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=214731">214731</a>
[batch][compiler] ClasspathJar#getPath does not honor its contract
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=211588">211588</a>
[batch][compiler][options] undue interactions between enableJavadoc, javadoc and allJavadoc
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=213427">213427</a>
EFS throws NullPointerException
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=181981">181981</a>
[model] Linked Source Folders with Parallel package structure do not work with occurrences
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=213692">213692</a>
[compiler] Wrong unnecessary NON-NLS diagnostic after syntax recovery
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=214450">214450</a>
annotation is broken
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=176831">176831</a>
[search] No search results due to malformed search scope
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=214647">214647</a>
[dom] NPE in MethodBinding.getParameterAnnotations(..)


<a name="v_831"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4M5 - January 8, 2008
<br>Project org.eclipse.jdt.core v_831
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_831">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=209936">209936</a>
[javadoc] Missing code implementation in the compiler on inner classes
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=210681">210681</a>
Code assist fails to propose inner type
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=211881">211881</a>
[assist] Code assist fails inside an if statement
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=212153">212153</a>
stack overflow when press ctrl+space
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=210518">210518</a>
[batch][compiler][options] -warn:unused wrongly behaves as -warn:+unused
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=214002">214002</a>
[dom] NPE in MethodBinding.getParameterAnnotations()
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=153765">153765</a>
[search] Reference to package is not found in qualified annotation
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=213284">213284</a>
[formatter] NPE on formatting region
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=213283">213283</a>
[formatter] AIOOBE when formatting region
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=213570">213570</a>
IncrementalTests#testRenameMainType() fails with IBM JRE 6.0
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=213509">213509</a>
[dom] IMethodBinding.getParameterAnnotations returns annotations for wrong parameter
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=204749">204749</a>
[1.5][javadoc] NPE in JavadocQualifiedTypeReference
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=212834">212834</a>
[dom] IMethodBinding.getParameterAnnotations does not return annotations
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=211718">211718</a>
[1.5][compiler] compiler error with nested enum in class using generics

<a name="v_830"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4M5 - December 18, 2007
<br>Project org.eclipse.jdt.core v_830
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_830">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=212857">212857</a>
[dom] AST has wrong source range after parameter with array-valued annotation
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=212224">212224</a>
Unresolvable type causes ArrayOutOfBoundsException in IType.resolveType
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=212769">212769</a>
SetClasspathOperation no longer adds project for refresh
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=164862">164862</a>
[ast rewrite] ListRewrite.remove(...) does not remove inserted nodes

<a name="v_829"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4M4 - December 12, 2007 - 3.4 MILESTONE 4
<br>Project org.eclipse.jdt.core v_829
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_829">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=212599">212599</a>
[search] fine grained search must not report matches in Javadoc

<a name="v_828"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4M4 - December 8, 2007
<br>Project org.eclipse.jdt.core v_828
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_828">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=209993">209993</a>
[1.5][search] Generic search does not work properly while using BindingKey
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=211781">211781</a>
[search] clarify 'ALLOCATION_EXPRESSION_TYPE_REFERENCE'
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=211779">211779</a>
[search] better name for SUPERTYPE_TYPE_REFERENCE?
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=211872">211872</a>
[search] References to annotations not found in class file without source
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=210094">210094</a>
Creating type hierarchy does not report progress

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<a name="v_825"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4M4 - November 20, 2007
<br>Project org.eclipse.jdt.core v_825
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_825">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=209623">209623</a>
NullPointerexception on List.toArray + F3
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=209823">209823</a>
IAnnotation#getSourceRange() and #getNameRange() throw JME on annotation of ILocalVariable
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=209961">209961</a>
[compiler][apt] NPE in apt processing
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=209475">209475</a>
BindingKey.isRawType() doesn't return the right result
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=209222">209222</a>
Stack overflow in TypeHierarchyPerfTest
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=209661">209661</a>
ILocalVariable for method parameter misses annotations
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=209655">209655</a>
[jsr199] export package should specify x-internal:=true

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

<h3>Problem Reports Fixed</h3>

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

<a name="v_823"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4M4 - November 6, 2007
<br>Project org.eclipse.jdt.core v_823
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_823">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=208807">208807</a>
JavaCore.getDefaultOptions() throws an exception when there is no workspace
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=178596">178596</a>
[search] Search for method references does not find references to interface method
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=207754">207754</a>
[AST][DOM] source range of ParenthesizedExpression does not include the parenthesis
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=187430">187430</a>
Unresolved types surfacing through DOM AST for annotation default values
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=207929">207929</a>
No import added to declaring class if static member is 'class'
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=207572">207572</a>
[select] codeselect not available if unterminated string literal
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111093">111093</a>
More problems with IMethodBinding#isSubsignature(..)
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=206017">206017</a>
[compiler] Type mistmatch on field declaration should be reported against initialization expression
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=208263">208263</a>
[ast rewrite] performance problems with lots of changes
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=207758">207758</a>
[1.5][compiler] Unused SupressWarnings detection should consider more error situations
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=207573">207573</a>
[1.5][compiler] Internal compiler error: ClassCastException / ArrayBinding
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=208030">208030</a>
[1.7][compiler] Missing unused type argument warning for constructor invocations
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=208386">208386</a>
Annotation Javadoc glitches

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

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

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

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

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

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

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

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

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

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

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

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

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


<a name="v_818"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4M3 - October 9, 2007
<br>Project org.eclipse.jdt.core v_818
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_818">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=205847">205847</a>
[compiler] Compiler referencing Java model code

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

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

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

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

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

<a name="v_815"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4M3 - September 25, 2007
<br>Project org.eclipse.jdt.core v_815
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_815">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=199668">199668</a>
IAE in ASTNode.setSourceRange while editing a class
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=204283">204283</a>
[compiler] synthetic field for class literal access should not be created for int.class
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=190094">190094</a>
Java Outline Causes Eclipse Lock-up.
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=203609">203609</a>
[1.6][compiler] AccSynthetic should be set for package-info type if target &gt;= 1.6
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=203579">203579</a>
[dom] Length of VariableDeclarationFragment is not the same inside a 'for' initialisation
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=204040">204040</a>
Class literal code generation must be improved for cldc target
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=204108">204108</a>
unused import in jdt.internal.compiler.lookup.TypeBinding
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=169049">169049</a>
[1.5][compiler] Bogus bound mismatch errors
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=203905">203905</a>
[1.5][compiler] shows wrong error with generics
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=203721">203721</a>
[compiler] &quot;Parameter is never read&quot; not reported if unnecessary declared checked exception
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=200158">200158</a>
[compiler] inconsistent handling of unreachable code

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

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=204002">204002</a>
AIOB when enabling CLDC 1.1

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

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

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

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


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


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

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=202076">202076</a>
NPE in DeltaProcessor
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=182359">182359</a>
[compiler] optimize line number generation using the new getLineNumber method
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=185350">185350</a>
[1.6][compiler] Code generation seems to be much slower than in 1.5 mode
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=196253">196253</a>
[1.5][compiler] Failure to compile generics with wildcard and inner classes
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=189158">189158</a>
[1.5][compiler] Malformed generic signature for nested classes (. vs $)
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=201062">201062</a>
Missing library in project classpath even library exists

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

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


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

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

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

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

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

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

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

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=198483">198483</a>
BuilderTests: need expectingUniqueCompiledClasses method

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

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

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

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=109636">109636</a>
Comment formatter doesn't support &quot;&amp;#42;/&quot;
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=197169">197169</a>
Formatter expands &amp;#64; in annotation in javadoc, creating invalid tag
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=198153">198153</a>
[formatter] adds extra space before expanded numerical entity
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=197400">197400</a>
NPE for completion engine in class static block
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53727">53727</a>
[Tasks]  longest tags should match

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

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=166093">166093</a>
[search] NPE searching for references to private static method in class file
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=196514">196514</a>
Bunch of exception during code typing in JDT editor
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=186333">186333</a>
[search] Should better locate fields and methods matches on binary super types with unresolved references
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=167357">167357</a>
non-empty init block in local member type has no children
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=186114">186114</a>
IMethodBinding.overrides(..) should consider static

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

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

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

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

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

