<!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.6</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.6 stream</b></font>
    </td>
  </tr>
  <tr><td align="left" width="72%" class="title2"><font size="-2">Java development tools core</font></td></tr>
  <tr><td>&nbsp;</td></tr>
  <tr>
  	<td class="title3">
	  <font size="-1">
	  Here are the build notes for the Eclipse JDT/Core plug-in project
	  <a href="http://www.eclipse.org/jdt/core/index.php"><b>org.eclipse.jdt.core</b></a>,
	  describing <a href="https://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.6 planning, please refer to <a href="http://www.eclipse.org/jdt/core/r3.6/index.php#release-plan">JDT/Core release plan</a>,
	  the next <a href="http://www.eclipse.org/jdt/core/r3.6/index.php#milestone-plan">milestone plan</a>,
	  the overall <a href="http://www.eclipse.org/eclipse/development/eclipse_project_plan_3_6.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.5 (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_5_maintenance">R3.5.x</a>,
		  <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=R3_4_maintenance">R3.4.x</a>,
		  <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_A37"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M6 - March 2, 2010 - 3.6.0 M6
<br>Project org.eclipse.jdt.core v_A37
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A37">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Added new configurable option to fix bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295551">295551</a>:<br>
<pre>
/**
 * Compiler option ID: Further Determining the Effect of @SuppressWarnings if also
 * COMPILER_PB_SUPPRESS_WARNINGS is enabled.
 * When enabled, the @SuppressWarnings annotation can additionally be used to suppress 
 * optional compiler diagnostics that have been configured as ERROR.
 * When disabled, all @SuppressWarnings annotations only affects warnings.
 *
 * Option id: "org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors"
 * Possible values: { "enabled", "disabled" }
 * Default: "disabled"
 * 
 * @since 3.6
 * @category CompilerOptionID
 */
public static final String COMPILER_PB_SUPPRESS_OPTIONAL_ERRORS = PLUGIN_ID + ".compiler.problem.suppressOptionalErrors";
</pre>
</li>
<li>
Added a new formatter preferences to align method declaration.
<p>
This new preference is controlled with the option:</p>
<code>DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_METHOD_DECLARATION</code>
<pre>
/**
 * FORMATTER / Option for alignment of method declaration
 *     - option id:         "org.eclipse.jdt.core.formatter.alignment_for_method_declaration"
 *     - possible values:   values returned by <code>createAlignmentValue(boolean, int, int)</code> call
 *     - default:           createAlignmentValue(false, WRAP_NO_SPLIT, INDENT_DEFAULT)
 * 
 * @see #createAlignmentValue(boolean, int, int)
 * @since 3.6
 */
</pre>
<p>For example, the following snippet:</p>
<pre>
public class Test {
public final synchronized java.lang.String a_method_which_has_a_very_long_name() {
return null;
}
}
</pre>
formatted with this preference activated as 'Wrap only when necessary', will
produce the following output:
<pre>
public class Test {
	public final synchronized java.lang.String
			a_method_which_has_a_very_long_name() {
		return null;
	}
}
</pre>
See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284789">284789</a> for more details.
</li>
<li>New API to fix bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=246594">246594</a>. See the bug for details.
<pre>
	/**
	 * Returns the signatures for this type parameter's bounds. The type parameter may have 
	 * been declared as part of a type or a method. The signatures represent only the individual 
	 * bounds and do not include the type variable name or the <code>extends</code> keyword.  
	 * The signatures may be either unresolved (for source types) or resolved (for binary types). 
	 * See {@link Signature} for details.
	 * 
	 * @return the signatures for the bounds of this formal type parameter
	 * @throws JavaModelException
	 *             if this element does not exist or if an exception occurs while accessing its corresponding resource.
	 * @see Signature
	 * @since 3.6
	 */
	String[] getBoundsSignatures() throws JavaModelException;
</pre>
</li>
<li>
Added a new formatter preference to enable or disable the formatting of line
comments that start on the first column.<br>
Note that the indentation of line comments will also be disabled when activating
this option, as otherwise the formatter could not produce stable outputs...
<p>
The default is to format these comments to have a backward compatible behavior.
</p><p>
This new preferences is controlled with the options:</p>
<code>DefaultCodeFormatterConstants.FORMATTER_COMMENT_FORMAT_LINE_COMMENT_STARTING_ON_FIRST_COLUMN</code>
<pre>
/**
 * FORMATTER / Option to format line comments that start on the first column
 *     - option id:         "org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column"
 *     - possible values:   { TRUE, FALSE }
 *     - default:           TRUE
 * 
 * Note that this option is ignored if the formatter is created with the mode {@link ToolFactory#M_FORMAT_NEW}.
 * @see #TRUE
 * @see #FALSE
 * @see ToolFactory#createCodeFormatter(Map, int)
 * @since 3.6
 */
</pre>
<p>For example, the following snippet:</p>
<pre>
public class X01 {
//    int	a  =   1;
//    int	b  =   2;
}
</pre>
will be untouched by the formatter if both options are activated.
See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=251133">251133</a> for more details.
</li>
<li>New API to fix bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=252431">252431</a>. See the bug for details.
<pre>
org.eclipse.jdt.core.IClasspathEntry
	/**
	 * Returns the classpath entry that is making a reference to this classpath entry. For entry kinds 
	 * {@link #CPE_LIBRARY}, the return value is the entry that is representing the JAR that includes 
	 * <code>this</code> in the MANIFEST.MF file's Class-Path section. For entry kinds other than 
	 * {@link #CPE_LIBRARY}, this returns <code>null</code>. For those entries that are on the raw classpath already, 
	 * this returns <code>null</code>.
	 *
	 * It is possible that multiple library entries refer to the same entry
	 * via the MANIFEST.MF file. In those cases, this method returns the first classpath entry 
	 * that appears in the raw classpath. However, this does not mean that the other referencing 
	 * entries do not relate to their referenced entries. 
	 * See {@link JavaCore#getReferencedClasspathEntries(IClasspathEntry, IJavaProject)} for 
	 * more details.
	 * 
	 * @return the classpath entry that is referencing this entry or <code>null</code> if 
	 * 		not applicable.
	 * @since 3.6
	 */
	IClasspathEntry getReferencingEntry();


org.eclipse.jdt.core.IJavaProject
	/**
	 * Works similar to {@link #setRawClasspath(IClasspathEntry[], IPath, IProgressMonitor)} and 
	 * additionally allows persisting the given array of referenced entries for this project.
	 * The referenced entries and their attributes are stored in the .classpath file of this 
	 * project. For details on referenced entries, see 
	 * {@link JavaCore#getReferencedClasspathEntries(IClasspathEntry, IJavaProject)}
	 * and {@link IClasspathEntry#getReferencingEntry()}.
	 * 
	 * Since the referenced entries are stored in the .classpath file, clients can store additional 
	 * information that belong to these entries and retrieve them across sessions, though the referenced
	 * entries themselves may not be present in the raw classpath. By passing a <code>null</code>
	 * referencedEntries, clients can choose not to modify the already persisted referenced entries,
	 * which is fully equivalent to {@link #setRawClasspath(IClasspathEntry[], IPath, IProgressMonitor)}.
	 * If an empty array is passed as referencedEntries, the already persisted referenced entries, 
	 * if any, will be cleared. 
	 * 
	 * If there are duplicates of a referenced entry or if any of the <code>referencedEntries</code> 
	 * is already present in the raw classpath(<code>entries</code>) those referenced entries will 
	 * be excluded and not be persisted.
	 *
	 * @param entries a list of classpath entries
	 * @param referencedEntries the list of referenced classpath entries to be persisted
	 * @param outputLocation the default output location
	 * @param monitor the given progress monitor
	 * @exception JavaModelException if the classpath could not be set. Reasons include:
	 *  	This Java element does not exist (ELEMENT_DOES_NOT_EXIST)
	 *  	The classpath is being modified during resource change event notification (CORE_EXCEPTION)
	 *  	The classpath failed the validation check as defined by {@link JavaConventions#validateClasspath(IJavaProject, IClasspathEntry[], IPath)}
	 * @see IClasspathEntry
	 * @see #getReferencedClasspathEntries()
	 * @since 3.6
	 */
	void setRawClasspath(IClasspathEntry[] entries, IClasspathEntry[] referencedEntries, IPath outputLocation,
			IProgressMonitor monitor) throws JavaModelException;

	/**
	 * Returns the list of referenced classpath entries stored in the .classpath file of <code>this</code> 
	 * java project. Clients can store the referenced classpath entries using 
	 * {@link #setRawClasspath(IClasspathEntry[], IClasspathEntry[], IPath, IProgressMonitor)}
	 * If the client has not stored any referenced entries for this project, an empty array is returned.
	 *
	 * @throws JavaModelException
	 * @return an array of referenced classpath entries stored for this java project or an empty array if none
	 * 			stored earlier.
	 * @since 3.6
	 */
	IClasspathEntry[] getReferencedClasspathEntries() throws JavaModelException;
	

org.eclipse.jdt.core.IPackageFragmentRoot
	/**
	 * Returns the first resolved classpath entry that corresponds to this package fragment root.
	 * A resolved classpath entry is said to correspond to a root if the path of the resolved
	 * entry is equal to the root's path.
	 * 
	 * @return the first resolved classpath entry that corresponds to this package fragment root
	 * @throws JavaModelException if this element does not exist or if an
	 *		exception occurs while accessing its corresponding resource. 
	 * @since 3.6
	 */
	IClasspathEntry getResolvedClasspathEntry() throws JavaModelException;
	

org.eclipse.jdt.core.JavaCore
	/**
	 * Returns an array of classpath entries that are referenced directly or indirectly 
	 * by a given classpath entry. For the entry kind {@link IClasspathEntry#CPE_LIBRARY}, 
	 * the method returns the libraries that are included in the Class-Path section of 
	 * the MANIFEST.MF file. If a referenced JAR file has further references to other library 
	 * entries, they are processed recursively and added to the list. For entry kinds other 
	 * than {@link IClasspathEntry#CPE_LIBRARY}, this method returns an empty array.
	 *
	 * If a referenced entry has already been stored 
	 * in the given project's .classpath, the stored attributes are populated in the corresponding
	 * referenced entry. For more details on storing referenced entries see
	 * see {@link IJavaProject#setRawClasspath(IClasspathEntry[], IClasspathEntry[], IPath, 
	 * IProgressMonitor)}. 
	 * 
	 * @param libraryEntry the library entry whose referenced entries are sought 
	 * @param project project where the persisted referenced entries to be retrieved from
	 * @return an array of classpath entries that are referenced directly or indirectly by the given entry. 
	 * 			If not applicable, returns an empty array.
	 * @since 3.6
	 */
	public static IClasspathEntry[] getReferencedClasspathEntries(IClasspathEntry libraryEntry, IJavaProject project);	
</pre>
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=252431">252431</a>
New API is needed to better identify referenced jars in the Class-Path: entry
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=251133">251133</a>
[formatter] Automatic formatting single line comments is incoherent among tools
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=248897">248897</a>
[1.5][compiler] Wrong warning 'The local variable 'var' is never read'.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304031">304031</a>
Unused @SuppressWarnings(..) not flagged when suppressed problem is set to Error
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295551">295551</a>
Add option to automatically promote all warnings to errors
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=303810">303810</a>
Compact boolean fields on FlowContext
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=251227">251227</a>
[compiler] Fup of bug 115814, comparing doubles should not be flagged
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=268798">268798</a>
[1.5][compiler] Eclipse 3.5M5/6 produces new compiler errors with generics
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=303448">303448</a>
Wrong code generation optimization when assert condition is false
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=303776">303776</a>
Member types imports are removed too aggressively
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302949">302949</a>
JavaModelManager hangs accessing the nonChainingJars set
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=246594">246594</a>
[model] API request: ITypeParameter#getBoundsSignatures() or #getSignature()
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=253896">253896</a>
[compiler][null] wrong &quot;Null comparison always yields false&quot; problem for auto-unboxing
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284789">284789</a>
[formatter] Does not line-break method declaration exception with parameters
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=303480">303480</a>
[1.5][compiler] CCE: org.eclipse.jdt.internal.compiler.parser.RecoveredBlock cannot be cast to org.eclipse.jdt.internal.compiler.parser.RecoveredType

<a name="v_A36"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M6 - February 23, 2010
<br>Project org.eclipse.jdt.core v_A36
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A36">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>
Added a new formatter preferences to align annotation arguments (ie. element-value pairs).
<p>
This new preference is controlled with the option:</p>
<code>DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_ANNOTATION</code>
<pre>
/**
 * FORMATTER / Option for alignment of arguments in annotation
 *     - option id:         "org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation"
 *     - possible values:   values returned by <code>createAlignmentValue(boolean, int, int)</code> call
 *     - default:           createAlignmentValue(false, WRAP_NO_SPLIT, INDENT_DEFAULT)
 * 
 * @see #createAlignmentValue(boolean, int, int)
 * @since 3.6
 */
</pre>
<p>For example, the following snippet:</p>
<pre>
@MyAnnot(value1 = "this is an example", value2 = "of an annotation", value3 = "with several arguments", value4 = "which may need to be wrapped")
public class Test {
}
</pre>
formatted with this preference activated, will produce the following output
while using the <code>Eclipse [built-in]</code> profile:
<pre>
@MyAnnot(value1 = "this is an example", value2 = "of an annotation",
		value3 = "with several arguments",
		value4 = "which may need to be wrapped")
public class Test {
}
</pre>
See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=282030">282030</a> for more details.
</li>
<li>In order to get bindings outside of the Eclipse environment, the following method has been added on the ASTParser class.
<br>See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=206391">206391</a> for details.<br>
<pre>
	/**
	 * Set the environment that can be used when no IJavaProject are available.
	 * 
	 * The user has to be sure to include all required types on the classpaths for binary types
	 * or on the sourcepaths for source types to resolve the given source code.
	 * All classpath and sourcepath entries are absolute paths.
	 * If sourcepaths contain units using a specific encoding (not the platform encoding), then the
	 * given encodings must be set. If the given encodings is set, its length must
	 * match the length of the sourcepaths parameter or an IllegalArgumentException will be thrown.
	 * If encodings is not null, the given sourcepathEntries must not be null.
	 * 
	 * @param classpathEntries the given classpath entries to be used to resolve bindings
	 * @param sourcepathEntries the given sourcepath entries to be used to resolve bindings
	 * @param encodings the encodings of the corresponding sourcepath entries or null if the platform encoding
	 * can be used.
	 * @param includeRunningVMBootclasspath true if the bootclasspath of the running VM must be prepended to the
	 * given classpath and false if the bootclasspath of the running VM should be ignored.
	 * @throws IllegalArgumentException if the size of the given encodings is not equals to the size of the given
	 * sourcepathEntries
	 * @since 3.6
	 */
	public void setEnvironment(String[] classpathEntries, String[] sourcepathEntries, String[] encodings, boolean includeRunningVMBootclasspath);
</pre>
</li>
<li>
Added two new formatter preferences to condense block and javadoc comments.
<p>
These new preferences are controlled respectively with the options:</p>
<code>DefaultCodeFormatterConstants.FORMATTER_COMMENT_NEW_LINES_AT_BLOCK_BOUNDARIES</code><br>
<code>DefaultCodeFormatterConstants.FORMATTER_COMMENT_NEW_LINES_AT_JAVADOC_BOUNDARIES</code>
<pre>
/**
 * FORMATTER / Option to control whether block comments will have new lines at boundaries
 *     - option id:         "org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries"
 *     - possible values:   { TRUE, FALSE }
 *     - default:           TRUE
 * 
 * @see #TRUE
 * @see #FALSE
 * @since 3.6
 */

/**
 * FORMATTER / Option to control whether javadoc comments will have new lines at boundaries
 *     - option id:         "org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries"
 *     - possible values:   { TRUE, FALSE }
 *     - default:           TRUE
 * 
 * @see #TRUE
 * @see #FALSE
 * @since 3.6
 */
 </pre>
<p>For example, when both of these options are used, the following snippet:</p>
<pre>
public class X {
	/*
	 * This block comment after formatting will no longer use a new line
	 * at the beginning and at the end of the comment...
	 */
	void foo() {
	}
	/**
	 * This javadoc comment after formatting will no longer use a new line
	 * at the beginning and at the end of the comment...
	 */
	void bar() {
	}
}
</pre>
formatted with this preference activated, will produce the following output:
<pre>
public class X {
	/* This block comment after formatting will no longer use a new line at the
	 * beginning and at the end of the comment... */
	void foo() {
	}

	/** This javadoc comment after formatting will no longer use a new line at
	 * the beginning and at the end of the comment... */
	void bar() {
	}
	}
}
</pre>
See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=270209">270209</a> for more details.
</li>
<li>
Added two new formatter preferences to condense block and javadoc comments.
<p>
These new preferences are controlled respectively with the options:</p>
<code>DefaultCodeFormatterConstants.FORMATTER_COMMENT_CONDENSED_BLOCK_COMMENT</code><br>
<code>DefaultCodeFormatterConstants.FORMATTER_COMMENT_CONDENSED_JAVADOC_COMMENT</code>
<pre>
/**
 * FORMATTER / Option to control whether block comments are condensed or not
 *     - option id:         "org.eclipse.jdt.core.formatter.comment.condensed_block_comment"
 *     - possible values:   { TRUE, FALSE }
 *     - default:           FALSE
 * 
 * @see #TRUE
 * @see #FALSE
 * @since 3.6
 */

/**
 * FORMATTER / Option to control whether javadoc comments are condensed or not
 *     - option id:         "org.eclipse.jdt.core.formatter.comment.condensed_javadoc_comment"
 *     - possible values:   { TRUE, FALSE }
 *     - default:           FALSE
 * 
 * @see #TRUE
 * @see #FALSE
 * @since 3.6
 */
 </pre>
<p>For example, when both of these options are used, the following snippet:</p>
<pre>
public class X {
	/*
	 * This block comment after formatting will no longer use a new line
	 * at the beginning and at the end of the comment...
	 */
	void foo() {
	}
	/**
	 * This javadoc comment after formatting will no longer use a new line
	 * at the beginning and at the end of the comment...
	 */
	void bar() {
	}
}
</pre>
formatted with this preference activated, will produce the following output:
<pre>
public class X {
	/* This block comment after formatting will no longer use a new line at the
	 * beginning and at the end of the comment... */
	void foo() {
	}

	/** This javadoc comment after formatting will no longer use a new line at
	 * the beginning and at the end of the comment... */
	void bar() {
	}
	}
}
</pre>
See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=270209">270209</a> for more details.
</li>
<li>
The <code>CodeFormatter.F_INCLUDE_COMMENT</code> flag now works for all kind
of snippet while using the formatter.<br>
See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=236406">236406</a> for more details.
</li>
<li>
Added a new formatter preferences to insert a new line after a label.
<p>
This new preference is controlled with the option:<br>
<code>DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_LABEL</code>
<pre>
/**
 * FORMATTER / Option to insert a new line after a label
 *     - option id:         "org.eclipse.jdt.core.formatter.insert_new_line_after_label"
 *     - possible values:   { INSERT, DO_NOT_INSERT }
 *     - default:           DO_NOT_INSERT
 *
 * @see JavaCore#INSERT
 * @see JavaCore#DO_NOT_INSERT
 * @since 3.6
 */
</pre>
</p>
For example, the following snippet:
<pre>
public class X {
	void foo() {
		LABEL:for (int i = 0; i &lt; 10; i++) {
		}
	}
}
</pre>
formatted with this preference activated, will produce the following output:
<pre>
public class X {
	void foo() {
		LABEL:
		for (int i = 0; i &lt; 10; i++) {
		}
	}
}
</pre>
See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=150741">150741</a> for more details.
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=298362">298362</a>
[1.5][compiler] Compiler returns java.lang.Object instead of generic type T when javac returns T
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=281655">281655</a>
[formatter] &quot;Never join lines&quot; does not work for annotations.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=282030">282030</a>
[formatter] Java annotation formatting
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=270209">270209</a>
[format] Condensed block comment formatting
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=236406">236406</a>
[formatter] The comments flags should work for all kind of snippet
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294360">294360</a>
Duplicate entries in Classpath Resolution when importing dependencies from parent project
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=206391">206391</a>
[DOM] Binding Resolutions for projects outside of Eclipse workspace
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=150409">150409</a>
[compiler] AST does not expose method bindings for non-visible inherited field
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302358">302358</a>
Compiler finds wrong method for method invocation with generics
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302919">302919</a>
misreported cast Error when mixing generic and raw class in nested class
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=150741">150741</a>
[formatter] Add  option: &quot;add new line after label&quot;
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287939">287939</a>
[code assist] The instanceof and the auto cast feature should also work for an assignment
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=303108">303108</a>
[import rewrite] ImportRewrite#removeImport(String) does not work with setUseContextToFilterImplicitImports(true)
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295619">295619</a>
Test failure caused by a timing issue in M20091118-0800

<a name="v_A35"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M6 - February 17, 2010
<br>Project org.eclipse.jdt.core v_A35
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A35">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>In order to fix bugs <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=235253">235253</a> and
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=194358">194358</a>, a new API was added to preserve the existing pre-3.6 behavior for existing clients:<br>
<pre>
	/**
	 * Sets whether a context should be used to properly filter implicit imports.
	 *
	 * By default, the option is disabled to preserve pre-3.6 behavior.
	 *
	 *
	 * When this option is set, the context passed to the addImport*(...) methods is used to determine
	 * whether an import can be filtered because the type is implicitly visible. Note that too many imports
	 * may be kept if this option is set and addImport*(...) methods are called without a context.
	 *
	 * 
	 * @param useContextToFilterImplicitImports the given setting
	 * 
	 * @see #setFilterImplicitImports(boolean)
	 * @since 3.6
	 */
	public void setUseContextToFilterImplicitImports(boolean useContextToFilterImplicitImports);
</pre>
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302455">302455</a>
java.lang.ClassCastException in secondary types removal
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102279">102279</a>
[search] method reference performance depends on method name
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=236814">236814</a>
[jsr199] EclipseCompiler#getTask does not respect its contract when its first argument is null
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302552">302552</a>
[formatter] Formatting qualified invocations can be broken when the Line Wrapping policy forces element to be on a new line
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302587">302587</a>
Encoding/decoding of problem arguments in Marker fails if argument contains #
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=301438">301438</a>
Eclipse hangs when attempting to refactor using the &quot;change method signature&quot;
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=260381">260381</a>
[formatter] Javadoc formatter breaks {@code ...} tags.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302446">302446</a>
[compiler] Regression in if statement flow analysis related to null checks
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=194358">194358</a>
[import rewrite] Organize Imports produces wrong order of imports
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=235253">235253</a>
[organize imports] Organize imports removes needed import statement.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302379">302379</a>
[search] JavaSearchTests.testZIPArchive2() test failed in I20100209-0800


<a name="v_A34"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M6 - February 10, 2010
<br>Project org.eclipse.jdt.core v_A34
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A34">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302123">302123</a>
[formatter] AssertionFailedException occurs while formatting a source containing the specific javadoc comment /** ***/
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=300379">300379</a>
[formatter] Fup of bug 287833
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=250056">250056</a>
[compiler][null] Another assert and &quot;Redundant null check&quot;
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=301683">301683</a>
Annotations are broken when native methods are present in a class
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=300734">300734</a>
Extract temp misses duplicate occurrence.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=289560">289560</a>
Eclipse hangs after modifying user libraries
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=301562">301562</a>
[JSR269] Error in EclipseFileManager.collectAllMatchingFiles
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=298637">298637</a>
Could not retrieve declared methods (NPE in ParameterizedTypeBinding.resolve)
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294057">294057</a>
[1.5][compiler] Imports not resolved correctly with generics and inner interfaces

<a name="v_A33"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M6 - February 2, 2010
<br>Project org.eclipse.jdt.core v_A33
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A33">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=300136">300136</a>
classpathentry OPTIONAL attribute not honored for var entries
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=300723">300723</a>
Fup of bug 235783

<a name="v_A32"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M5 - January 22, 2010 - 3.6.0 M5
<br>Project org.eclipse.jdt.core v_A32
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A32">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=300133">300133</a>
[1.5][compiler] Local classes inside enum constants generate default constructor without implicit constructor call
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=300440">300440</a>
icu dependency needs to be udpated
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=299900">299900</a>
[null]Missing potential null warnings for variable on the right of an OR conditional expression
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293917">293917</a>
Invalid 'potential null access' warning reports
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=252379">252379</a>
Organize imports deletes needed static import.

<a name="v_A31"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M5 - January 19, 2010
<br>Project org.eclipse.jdt.core v_A31
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A31">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>New API to fix bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295894">295894</a>. See the bug for details.
<pre>
/**
 * Returns a Java search scope limited to the hierarchy of the given type and to a given project.
 * The Java elements resulting from a search with this scope will be types in this hierarchy.
 *
 * Unlike the createHierarchyScope methods, this method creates strict
 * scopes that only contain types that actually span the hierarchy of the focus
 * type, but do not include additional enclosing or member types.
 *
 *
 * By default, hierarchy scopes include all direct and indirect supertypes and subtypes of the
 * focus type. This method, however, allows to restrict the hierarchy to true subtypes,
 * not including supertypes. Also inclusion of the focus type itself is controled by a parameter. 
 *
 * 
 * @param project the project to which to constrain the search, or null if
 *        search should consider all types in the workspace 
 * @param type the focus of the hierarchy scope
 * @param onlySubtypes if true only subtypes of type are considered
 * @param includeFocusType if true the focus type type is included in the resulting scope, 
 * 		  otherwise it is excluded
 * @param owner the owner of working copies that take precedence over original compilation units, 
 *        or null if the primary working copy owner should be used
 * @return a new hierarchy scope
 * @exception JavaModelException if the hierarchy could not be computed on the given type
 * @since 3.6
 */
public static IJavaSearchScope createStrictHierarchyScope(IJavaProject project, IType type, boolean onlySubtypes, boolean includeFocusType, WorkingCopyOwner owner) throws JavaModelException;
</pre>
</li>
<li>New API added to report a compiler warning when object allocations are unused:
<pre>
org.eclipse.jdt.core.compiler.IProblem.UnusedObjectAllocation

/**
 * Compiler option ID: Reporting Allocation of an Unused Object.
 * When enabled, the compiler will issue an error or a warning if an object is allocated but never used,
 * neither by holding a reference nor by invoking one of the object's methods.
 *
 * Option id:"org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation"
 * Possible values:{ "error", "warning", "ignore" }
 * Default:"ignore"
 *
 * @since 3.6
 * @category CompilerOptionID
 */
public static final String COMPILER_PB_UNUSED_OBJECT_ALLOCATION = PLUGIN_ID + ".compiler.problem.unusedObjectAllocation";
</pre>
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=245007">245007</a>
[compiler] Should not completely ignore anonymous type with missing super type
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295894">295894</a>
[search] Search shows focus type implementation for nested types even though the scope is restricted to subtypes.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=236385">236385</a>
[compiler] Warn for potential programming problem if an object is created but not used

<a name="v_A30"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M5 - January 12, 2010
<br>Project org.eclipse.jdt.core v_A30
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A30">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>New API added to expose the reconcile flags used in the reconcile context:
<pre>
/**
 * Returns the reconcile flag of this context. This flag is a bitwise value of the constant defined
 * in ICompilationUnit.
 *
 * @return the reconcile flag of this context
 * @since 3.6
 *
 * @see ICompilationUnit#ENABLE_BINDINGS_RECOVERY
 * @see ICompilationUnit#ENABLE_STATEMENTS_RECOVERY
 * @see ICompilationUnit#IGNORE_METHOD_BODIES
 */
public int getReconcileFlags();
</pre>
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=243917">243917</a>
[compiler] should not warn about unused field when native method present
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=296343">296343</a>
OOM error caused by java indexing referencing classloader from threadLocal
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=130000">130000</a>
[API] ReconcileContext API: Does getAST3 return AST with bindings?
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=298238">298238</a>
Unresolved import in superclass causes 'Cannot reduce the visibility of the inherited method' in subclass

<a name="v_A29a"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M5 - January 5, 2010
<br>Project org.eclipse.jdt.core v_A29a
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A29a">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293861">293861</a>
Problem with refactoring when existing jar with invalid package names
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=264112">264112</a>
[Formatter] Wrap when necessary too aggressive on short qualifiers
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=298250">298250</a>
[1.6][compiler] NegativeArraySizeException in StackMapFrame.duplicate
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=296998">296998</a>
Unused imports should not prevent execution
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=298243">298243</a>
[formatter] Removing empty lines between import groups
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=297546">297546</a>
[formatter] Formatter removes blank after @see if reference is wrapped
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=235781">235781</a>
[compiler] difference to javac in definite unassignment analysis involving an exception within a constructor
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=235783">235783</a>
[eval] CodeSnippetParser and some 'CodeSnippet*' ast node does not seem up to date

<a name="v_A28"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M5 - December 14, 2009
<br>Project org.eclipse.jdt.core v_A28
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A28">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=196714">196714</a>
[comment] InvalidInputException prevents the AbstractCommentMapper to retrieve tag element
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=297757">297757</a>
Cannot get bindings for IType corresponding to parameterized anonymous type
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=255640">255640</a>
[spec] Methods Signature.toCharArray(..) have unclear precondition
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=262898">262898</a>
BufferChangedEvent must not have @noinstantiate
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=181682">181682</a>
JavaConventions.validateJavaTypeName should list valid constants
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=108784">108784</a>
SourceMapper doesn't find name range of inner class constructors

<a name="v_A27"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M4 - December 8, 2009 - 3.6.0 M4
<br>Project org.eclipse.jdt.core v_A27
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A27">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=297225">297225</a>
[formatter] Indentation may be still wrong in certain circumstances after formatting
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=293697">293697</a>
JavaSearchBugTests.testBug286379c is failing randomly

<a name="v_A26"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M4 - December 7, 2009
<br>Project org.eclipse.jdt.core v_A26
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A26">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=297045">297045</a>
Weird tests failures in N20091204-2000 and N20091205-2000 builds
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293300">293300</a>
[formatter] The formatter is still unstable in certain circumstances

<a name="v_A25"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M4 - December 4, 2009
<br>Project org.eclipse.jdt.core v_A25
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A25">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Match result can now report the access rules through a new API added on <code>TypeNameMatch</code>:
<pre>
/**
 * Returns the accessibility of the type name match
 *
 * @see IAccessRule
 *
 * @return the accessibility of the type name which may be
 * 		{@link IAccessRule#K_ACCESSIBLE}, {@link IAccessRule#K_DISCOURAGED}
 * 		or {@link IAccessRule#K_NON_ACCESSIBLE}.
 * 		The default returned value is {@link IAccessRule#K_ACCESSIBLE}.
 *
 * @since 3.6
 */
public abstract int getAccessibility();
</pre>
See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=296277">296277</a> for more details.
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=296277">296277</a>
[search] SearchEngine#searchAllTypeNames(.., TypeNameMatchRequestor,..) should report access rules
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=296708">296708</a>
[DOM/AST] clarify setters when createASTs(..) is used
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=296629">296629</a>
[quick fix] Cast quick fix not offered for method-local classes
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295948">295948</a>
ElementImpl.hashCode throws an NPE
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=296660">296660</a>
[compiler] Incorrect unused method warning from compiler

<a name="v_A24"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M4 - December 1, 2009
<br>Project org.eclipse.jdt.core v_A24
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A24">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>New API added to ignore method bodies inside AST tree. The new APIs are tagged as 3.5.2 as this code
will be backported to 3.5.2:
<pre>
org.eclipse.jdt.core.dom.ASTParser:
	/**
	 * Requests an abstract syntax tree without method bodies. 
	 * 
	 * When ignore method bodies is enabled, all method bodies are discarded.
	 * This has no impact on the binding resolution.
	 *
	 * If a method contains local types, its method body will be retained.
	 * This settings is not used if the kind used in setKind(int) is either 
	 * K_EXPRESSION or K_STATEMENTS.
	 * @since 3.5.2
	 */
	public void setIgnoreMethodBodies(boolean enabled);

org.eclipse.jdt.core.ICompilationUnit:
	/**
	 * Constant indicating that a reconcile operation could ignore to parse the method bodies.
	 * @see ASTParser#setIgnoreMethodBodies(boolean)
	 * @since 3.5.2
	 */
	public static final int IGNORE_METHOD_BODIES = 0x08;

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

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=288174">288174</a>
[search] NullPointerException when searching for type references
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=277643">277643</a>
Generics compile error
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=288211">288211</a>
APT uses a lot of memory

<a name="v_A23"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M4 - November 24, 2009
<br>Project org.eclipse.jdt.core v_A23
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A23">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295698">295698</a>
[1.5][compiler] ClassCastException in unchecked warning report
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295260">295260</a>
Wrong warnings on Java.Compiler.Errors/Warnings &quot;Redundant null check&quot;
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=190737">190737</a>
[compiler][null] missing 'cannot be null' warning within for loop

<a name="v_A22"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M4 - November 16, 2009
<br>Project org.eclipse.jdt.core v_A22
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A22">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=153429">153429</a>
JUnit4 in Eclipse Testing Framework
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295238">295238</a>
[formatter] The comment formatter add an unexpected new line in block comment
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295175">295175</a>
[formatter] Missing space before a string at the beginning of a line in a javadoc comment
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294529">294529</a>
The Scanner sometimes ignores the given offset if larger than the EOF.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294662">294662</a>
ClassCastException while invoking quick assist
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294404">294404</a>
-target jsr14 flags error on foreach over Collection that does not implement Iterable
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293955">293955</a>
valid javadoc url set on user library, but still says no javadoc
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293443">293443</a>
AbortCompilation when invoking content assist
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293711">293711</a>
Clarify ICompilationUnit#getOwner() javadoc
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293615">293615</a>
error message since v3.6.0M2: name clash by overriding generic methods
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294618">294618</a>
[formatter] The formatter fails to format a compilation unit with deep nesting of html tags
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=248312">248312</a>
[model] IMemberValuePair#getValue() should also work for negative numerals
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294731">294731</a>
Specify value type of JAVADOC_LOCATION_ATTRIBUTE_NAME

<a name="v_A21"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M4 - November 10, 2009
<br>Project org.eclipse.jdt.core v_A21
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A21">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294631">294631</a>
[formatter] The formatter takes two passes to format a common sequence of html tags
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294500">294500</a>
[formatter] MalformedTreeException when formatting an invalid sequence of &lt;code&gt; tags in a javadoc comment
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294488">294488</a>
Javadoc of ISourceReference#getSourceRange() should link to SourceRange#isAvailable(..)
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=199265">199265</a>
[formatter] 3.3 Code Formatter mis-places commented-out import statements
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=241549">241549</a>
[spec] IType#getFields/Initializers/Methods() should define order from class file
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=275805">275805</a>
creating a non-primary working copy causes typeHierarchyChanged event
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=292510">292510</a>
FUP of 292364: Error messages don't identify partial types precisely.

<a name="v_A20"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M4 - November 3, 2009
<br>Project org.eclipse.jdt.core v_A20
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A20">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293384">293384</a>
Eclipse erroneously reports method &quot;is ambiguous for type&quot;
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=285002">285002</a>
[compiler] visibility error for package private method

<a name="v_A19"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M3 - October 29, 2009 - 3.6M3
<br>Project org.eclipse.jdt.core v_A19
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A19">cvs</a>).
<h2>What's new in this drop</h2>
This version was created to tentatively fix bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=293697">293697</a>
but it occurs again in subsequent build. So, it has been reopened and moved to next version...

<h3>Problem Reports Fixed</h3>

<a name="v_A18"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M3 - October 28, 2009
<br>Project org.eclipse.jdt.core v_A18
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A18">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=293496">293496</a>
Adding the serialVersionUID field doesn't work when tab size is 0

<a name="v_A17"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M3 - October 26, 2009
<br>Project org.eclipse.jdt.core v_A17
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A17">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Reverted change for bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=263564">263564</a>.</li>
</ul>
<h3>Problem Reports Fixed</h3>

<a name="v_A16"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M3 - October 25, 2009
<br>Project org.eclipse.jdt.core v_A16
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A16">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>New API added in <code>org.eclipse.jdt.core.JavaCore</code> in order to fix bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=263564">263564</a>:
<pre>
	/**
	 * Returns an immutable map of all known configurable options with their original default values
	 * as defined by JDT/Core.
	 * 
	 * The values of these options might be different from the values returned by getDefaultOptions()
	 * as getDefaultOptions() returned the default options defined by an installation/product/configuration
	 * (i.e. modified by the usage of a plugin_customization.ini file for example).
	 * 
	 * These options allow to configure the behaviour of the underlying components.
	 * If the map is being modified, an UnsupportedOperationException> exception is thrown.
	 * Helper constants have been defined on JavaCore for each of the option IDs
	 * (categorized in Code assist option ID, Compiler option ID and Core option ID)
	 * and some of their acceptable values (categorized in Option value). Some
	 * options accept open value sets beyond the documented constant values.
	 * Note: each release may add new options.
	 *
	 * @return an immutable map of all known configurable options with their original default values
	 * as defined by JDT/Core
	 * @since 3.6
	 */
	public static Map getOriginalDefaultOptions();
</pre>
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=293240">293240</a>
[formatter] 'insert_space_before_opening_brace_in_array_initializer' preference may be reset in certain circumstances
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=263564">263564</a>
API to know when default compiler preference settings have been altered
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=289385">289385</a>
Investigate comment in performance tests
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=286379">286379</a>
[search] Problem while searching class

<a name="v_A15"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M3 - October 20, 2009
<br>Project org.eclipse.jdt.core v_A15
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A15">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=292350">292350</a>
[1.5][compiler] Compiler error: ambiguous method since 3.5.1 using generics and interface inheritance
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=292364">292364</a>
[internal] Type name in CastExpression not treated as Type name.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=292428">292428</a>
Internal compiler error: NullPointerException at org.eclipse.jdt.internal.compiler.ast.CastExpression.checkUnsafeCast(CastExpression.java:333)
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=291985">291985</a>
[compiler][jsr14] Translating Enum with jsr14 target: ECJ causes a runtime error while Sun compiler works fine
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=292240">292240</a>
Compiler error on implementation of raw sub interface

<a name="v_A14"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M3 - October 13, 2009
<br>Project org.eclipse.jdt.core v_A14
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A14">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=291391">291391</a>
update the Bundle-Version of the JDT Core Batch Compiler (ecj) from 3.3.0 to 3.6.*
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284280">284280</a>
[1.5][compiler] Error on use generic interface in abstract super class
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286228">286228</a>
[1.5][compiler] Generics inconsistencies possible regression
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286601">286601</a>
[formatter] Code formatter formats anonymous inner classes wrongly when 'Never join lines' is on
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=215139">215139</a>
[search] More options for HierarchyScope
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=291472">291472</a>
[1.5][compiler] Access to a generic method is compiled incorrectly
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=283539">283539</a>
NamingConventions.suggestVariableNames doesn't work if name contains '_'
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280784">280784</a>
[batch] Allow access restrictions to be reported as errors

<a name="v_A13"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M3 - October 6, 2009
<br>Project org.eclipse.jdt.core v_A13
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A13">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Reverted fix for <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106478">106478</a>.</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=291322">291322</a>
Test errors when running JDT Core tests on Windows 7
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=282770">282770</a>
[compiler] Dead code detection should have specific @SuppressWarnings
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290028">290028</a>
Use IResource#setDerived(boolean, IProgressMonitor) instead of IResource#setDerived(boolean)
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287607">287607</a>
[1.5][compiler] cast of inner of generic enclosing type are not reported as unsafe
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=288749">288749</a>
Redundant superinterface not flagged inside one declaration
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290905">290905</a>
[formatter] Certain formatter pref constellation cause endless loop ==&gt; OOME
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=285124">285124</a>
serialVersionUID still causes error/warning
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290877">290877</a>
[DOM] If using a tag named '@enum' the ASTParser ignores this
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=281575">281575</a>
Eclipse hangs in SourceMapper while doing java proposals
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290470">290470</a>
[JSR199][compiler] JDT compiler not jsr199 compatible.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290730">290730</a>
Rewriting SwitchStatement throws NPE

<a name="v_A12"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M3 - September 29, 2009
<br>Project org.eclipse.jdt.core v_A12
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A12">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287676">287676</a>
[1.5][compiler] Useless cast warning not emited
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290563">290563</a>
add specification for fine grain search flags
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290376">290376</a>
Errant &quot;Comparing identical expressions&quot; warning with assignment
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287592">287592</a>
[1.5][compiler] Wrong ambiguous compilation error
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290049">290049</a>
Reconciling a compilation unit does not return an AST with bindings when it should (probably)
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290034">290034</a>
Effects of @SuppressWarnings(&quot;unchecked&quot;) are broader in Eclipse than in javac
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=267561">267561</a>
[evaluation] LocalEvaluationEngine does not accept primitive types
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=163194">163194</a>
[1.6] compiler should warn about missing @Override annotation for interface method

<a name="v_A11"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M3 - September 22, 2009
<br>Project org.eclipse.jdt.core v_A11
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A11">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=289892">289892</a>
[compiler] NPE during binaryTypeBinding field initialization
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287833">287833</a>
[formatter] Formatter removes the first character after the * in the &lt;pre&gt; tag
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=238943">238943</a>
SortElementsOperation doesn't use project specific settings
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=288621">288621</a>
[1.5][compiler] Creating type hierarchy failed when pressing F4
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=289538">289538</a>
[1.5][compiler] compiler fails to generate correct code for private constructor in inner class
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=289639">289639</a>
Problems opening perspective JavaPerspective, NPE on JavaModelManager.containersReset()
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=289516">289516</a>
Annotations (visible and invisible) should be preserved with target jsr14
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=289576">289576</a>
[1.5][compiler] Compiler changes 'private' modifier on methods with annotated parameter

<a name="v_A10"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M2 - September 14, 2009 - 3.6M2
<br>Project org.eclipse.jdt.core v_A10
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A10">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=288148">288148</a>
[perfs] Comments applied for performance tests may be obsolete
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=289247">289247</a>
[1.5][compiler]Detecting duplicate methods should not consider return type
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=288920">288920</a>
[compiler] NPE renaming run() method
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=288698">288698</a>
Cannot create type hierarchy for abstract types when they have inline descendants and *.class* in project name

<a name="v_A09"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M2 - September 1, 2009
<br>Project org.eclipse.jdt.core v_A09
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A09">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287009">287009</a>
Inner Annotation Checks are Missing
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287701">287701</a>
[dom] Length of Assignment should not include whitespace
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=285230">285230</a>
[performance] Duplicate buffers created for internal classes
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286391">286391</a>
[compiler] jsr14 target behavior changed between ECJ 3.4.2 and ECJ 3.5

<a name="v_A08"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M2 - August 25, 2009
<br>Project org.eclipse.jdt.core v_A08
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A08">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287462">287462</a>
[formatter] new failures in last 2 nightly builds
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=285565">285565</a>
[inline] Inlining constant or local variables causes exceptions with tab width 0
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=285799">285799</a>
HashtableOfObject rehashes and grows buffer on removeKey()
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286912">286912</a>
[formatter] Never join lines preferences makes the formatter unstable in certain circumstances
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286668">286668</a>
[formatter] 'Never Join Lines' joins lines that are split on method invocation
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=248661">248661</a>
Axis2:  Missing required libraries in Axis 2 WS Client Projects
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286918">286918</a>
[javadoc] Compiler should warn when @see and @link tag references in package-info.java don't have fully qualified names
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=285466">285466</a>
[3.5 regression] fails to build IcedTea, works with 3.4.x
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286956">286956</a>
NPE when asking to externalize constant
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=281609">281609</a>
[javadoc] &quot;Javadoc: Invalid reference&quot; warning for @link to Java package

<a name="v_A07"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M2 - August 18, 2009
<br>Project org.eclipse.jdt.core v_A07
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A07">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286840">286840</a>
ClasspathJar getPath() should return a unique path
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=254738">254738</a>
NPE in HierarchyResolver.setFocusType
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=276294">276294</a>
Error does not go away after it is resolved
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284785">284785</a>
[1.5][compiler] Eclipse compiler shows error on javac-valid construct: varargs plus overload
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286405">286405</a>
Default value character of annotations in ClassFileEditor are badly printed
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286407">286407</a>
[Model] IMemberValuePair don't return the right value for java.lang.annotation.RetentionPolicy annotations
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=285701">285701</a>
[1.5][compiler] Internal Compiler Error - ArrayIndexOutOfBoundsException

<a name="v_A06"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M1 - August 3, 2009 - 3.6M1
<br>Project org.eclipse.jdt.core v_A06
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A06">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284948">284948</a>
[1.6][compiler] Java annotations are broken in editor when used on interface methods

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

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=276526">276526</a>
[content assist] Error - Type Duplicate interface Iterable for the type TestClass
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=191176">191176</a>
JavaProject#getOption optimizations

<a name="v_A04"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M1 - July 28, 2009
<br>Project org.eclipse.jdt.core v_A04
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A04">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=261909">261909</a>
ClassFileReader.getModifiers() answers funny bits
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=283225">283225</a>
[1.6][compiler] classfile versus source conformance check too strict
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284679">284679</a>
[formatter] empty single semi statement prevent enum elements format
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284482">284482</a>
[compiler] Collision cases not detected
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284431">284431</a>
Different inherited thrown exception clauses are not properly handled
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=133911">133911</a>
type.move() returns unclear exception &quot;invalid destination&quot;
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=270436">270436</a>
[assist] Interface type proposed where only class is legal
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=210385">210385</a>
[compiler] ProblemReporter#getProblemCategory misbehaves when passed ProblemSeverities.Ignore as severity parameter
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=282891">282891</a>
[compiler] "Comparing identical expressions" warning sometimes invalid
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=282869">282869</a>
[compiler] Unnecessary cast warning for cast from char to int
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=270437">270437</a>
[assist] Completion proposal leads to cycle detected error
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=217443">217443</a>
Documentation for JavaCore#CORE_ENCODING does not match the observed behavior

<a name="v_A03"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M1 - July 21, 2009
<br>Project org.eclipse.jdt.core v_A03
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A03">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=283467">283467</a>
[formatter] wrong indentation with 'Never join lines' selected
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=281776">281776</a>
Should not warn for comparison of identical expression with float type
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=282768">282768</a>
[compiler] Dead code detection should ignore trivial case for ternary if operator
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=283133">283133</a>
[formatter] IAE when pasting a snippet
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=283299">283299</a>
Complete SourceRange API

<a name="v_A02"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java Development Tooling Core</h1>
Eclipse SDK 3.6M1 - July 13, 2009
<br>Project org.eclipse.jdt.core v_A02
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A02">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Added new API type org.eclipse.jdt.core.SourceRange</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=271296">271296</a>
[assist] void typed proposal may not be appropriate in many contexts
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=281871">281871</a>
[content assist] The extension took too long to return from the 'computeCompletionProposals()' operation
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=281598">281598</a>
[assist] Problems during content assist - if project has empty zip file in classpath
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=235294">235294</a>
[formatter] javadoc for DefaultCodeFormatterConstants#FORMATTER_ALIGNMENT_FOR_ASSIGNMENT cites a non-API constant
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280497">280497</a>
Incorrect null result for IJavaProject.getClasspathEntryFor(IPath)
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=204777">204777</a>
Clarify documentation for ITypeHierarchy created on interface types
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=88265">88265</a>
Make SourceRange API

<a name="v_A01"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M1 - July 7, 2009
<br>Project org.eclipse.jdt.core v_A01
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A01">cvs</a>).
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=260968">260968</a>
Deadlock in UserLibraryManager

<a name="v_A00"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.6M1 - June 30, 2009
<br>Project org.eclipse.jdt.core v_A00
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A00">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>New API added to handle the new <code>invokedynamic</code> bytecode:
<pre>
org.eclipse.jdt.core.util.ByteCodeVisitorAdapter:
	public void _invokedynamic(
			int pc,
			int index,
			IConstantPoolEntry nameEntry,
			IConstantPoolEntry descriptorEntry) {
		// default behavior is to do nothing
	}
</pre>
<pre>org.eclipse.jdt.core.util.IBytecodeVisitor#_invokedynamic(int, int, IConstantPoolEntry, IConstantPoolEntry)</pre>
<pre>org.eclipse.jdt.core.util.IOpcodeMnemonics#INVOKEDYNAMIC</pre>
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=277450">277450</a>
[1.5][compiler] Problems with += and Autoboxing/Unboxing
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=206498">206498</a>
[1.7][compiler] Remove fix for bug 206483 once 1.7 VMS can handle .class files with version 51.0
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=191176">191176</a>
JavaProject#getOption optimizations
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=201762">201762</a>
Content Assist has no proposals with certain CU structure
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=281681">281681</a>
Stale code in CompilerOptions
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=231796">231796</a>
[formatter] @throws tag description is not indented using @param preference when there's a syntax error
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=255142">255142</a>
[select] Codeselect should not omit cast
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=235295">235295</a>
[formatter] javadoc of CodeFormatter#F_INCLUDE_COMMENTS needs improvement
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280134">280134</a>
[1.5][compiler] Requesting Java AST from selection has encountered a problem
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=281317">281317</a>
[search] An internal error occurred during: "Java Search".
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=276373">276373</a>
Incorrect resource comparison with IJavaProject.isOnClasspath(IResource)
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=275518">275518</a>
[assist] Content assist does not provide proposals if invoked right after a method's opening brace
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280888">280888</a>
change a java file in one plug-in will compile all related plugin projects
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=274466">274466</a>
[assist] Assert expressions should be proposed with high relevance
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=277382">277382</a>
NPE and other failures in Parser
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=275330">275330</a>
NPE from org.eclipse.jdt.internal.core.ClasspathChange.requestIndexing
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=273385">273385</a>
[model] NPE while closing project
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280079">280079</a>
NPE while parsing K_CLASS_BODY_DECLARATIONS
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280063">280063</a>
org.eclipse.jdt.internal.compiler.parser.Parser.parseClassBodyDeclarations(char[], int, int, CompilationUnitDeclaration) should return consistent results
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=267046">267046</a>
SourceMapper infinite loop on primitive type in generic
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=240934">240934</a>
Add support for the invokedynamic bytecode into the disassembler
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=267551">267551</a>
[formatter] Wrong spacing in default array parameter for annotation type
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=277965">277965</a>
[compiler] NPE in canBeSeenBy due to illegal protected toplevel class
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=273990">273990</a>
[compiler] FUP of 269388: Eclipse accepts code rejected by javac
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=279183">279183</a>
[1.6][compiler] Inconsistent stackmap frames generated by JDT cause VerifyError
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=209778">209778</a>
[search] TypeReferenceMatch#getOtherElements() fails for match in annotation
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=221065">221065</a>
[search] Search still finds overridden method
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=279836">279836</a>
[1.5][compiler] Eclipse compiler shows error on javac-valid construct: raw types on overridden methods
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280616">280616</a>
[formatter] Valid 1.5 code is not formatted inside &lt;pre&gt; tag
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280255">280255</a>
[formatter] Format edited lines adds two new lines on each save
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280061">280061</a>
[formatter] AIOOBE while formatting javadoc comment
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=276938">276938</a>
Remove unreachable removes reachable logic in case statement.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=274898">274898</a>
[recovery] IllegalArgumentException in ASTNode#setSourceRange()
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=277204">277204</a>
IAE in SharedASTProvider for generic local class.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=276741">276741</a>
comparing identical value detection does not work for this
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=276740">276740</a>
comparing identical value detection does not work for primitive types
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=278745">278745</a>
Methods overloaded with unavailable types worked in 3.4 but give "indirectly referenced.." error in 3.5
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=278305">278305</a>
[1.5][compiler] JDT accepts supertype parameterized with wildcard
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=196308">196308</a>
[formatter] Don't escape entity when formatting in &lt;pre&gt; tags within javadoc comments
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=279359">279359</a>
[formatter] Formatter with 'never join lines' produces extra level of indent
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=273619">273619</a>
[formatter] Formatting repeats *} in javadoc

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

