<!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_848"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.4M6 - March 26, 2008 - 3.4 MILESTONE 6
<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>

