<!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.8</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.8 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.8 planning, please refer to <a href="http://www.eclipse.org/jdt/core/r3.8/plan.php">JDT/Core release plan</a>,
	  the next <a href="http://www.eclipse.org/jdt/core/r3.8/plan.php#current-milestone">milestone plan</a>,
	  the overall <a href="http://www.eclipse.org/projects/project-plan.php?planurl=http://www.eclipse.org/eclipse/development/plans/eclipse_project_plan_3_7.xml">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.7 (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_7_maintenance">R3.7.x</a>,
		  <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=R3_6_maintenance">R3.6.x</a>,
		  <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_C40"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - March 13, 2012 - 3.8.0 M6
<br>Project org.eclipse.jdt.core v_C40
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_C40">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=374063">374063</a>
[builder][regression] bug 372012 causes regular problems to be reported against the package

<a name="v_C39"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - March 13, 2012
<br>
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=373953">373953</a>
FUP of bug 127575: java.eclipse.core.runtime.Assert  is being recognized as org.eclipse.core.runtime.Assert

<a name="v_C38"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - March 12, 2012
<br>
<h2>What's new in this drop</h2>
<ul>
<li> New IProblems for distinguishing null warnings based on flow analysis vs. null annotations.
<pre>
	/** @since 3.8 */
	int RedundantNullCheckOnSpecdNonNullLocalVariable = Internal + 931;

	/** @since 3.8 */
	int SpecdNonNullLocalVariableComparisonYieldsFalse = Internal + 932;

	/** @since 3.8 */
	int RequiredNonNullButProvidedSpecdNullable = Internal + 933;
</pre>
</li>
<li> New IProblems for reporting missing NonNullByDefault annotation on package/type.
<pre>
	/** @since 3.8 */
	int MissingNonNullByDefaultAnnotationOnPackage = Internal + 913;
	
	/** @since 3.8 */
	int MissingNonNullByDefaultAnnotationOnType = Internal + 930;
</pre>
</li>
<li>Added new option in JavaCore to control warning for missing default nullness annotation:
<pre>
	/**
	 * Compiler option ID: Reporting missing default nullness annotation.
	 * 
	 * When enabled, the compiler will issue an error or a warning in the following cases:
	 * 
	 * 1. When a package does not contain a default nullness annotation, as a result of missing package-info.java 
	 * or missing default nullness annotation in package-info.java.
	 * 2. When a type inside a default package does not contain a default nullness annotation.
	 * 
	 * This option only has an effect if the option {@link #COMPILER_ANNOTATION_NULL_ANALYSIS} is enabled.
	 * 
	 * Option id:"org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation"
	 * Possible values:{ "error", "warning", "ignore" }
	 * Default:"ignore"
	 * 
	 * @since 3.8
	 * @category CompilerOptionID
	 */
	public static final String COMPILER_PB_MISSING_NONNULL_BY_DEFAULT_ANNOTATION = PLUGIN_ID + ".compiler.annotation.missingNonNullByDefaultAnnotation"
</pre>
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=365859">365859</a>
[compiler][null] distinguish warnings based on flow analysis vs. null annotations
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=373571">373571</a>
[null][regression] Incorrect application of null annotations to primitive types
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=367836">367836</a>
Inconsistent source range for error from build and reconciler (declared package does not match expected)
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=368646">368646</a>
[rename] rejects LocalVariable with initializer
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=372012">372012</a>
[compiler][null] Warn when defaults not specified

<a name="v_C37"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - March 6, 2012
<br>
<h2>What's new in this drop</h2>

<ul>
<li> New IProblems for reporting if an enum switch lacks a default cause (recommended by the JLS).
<pre>
	/** @since 3.8 */
	int MissingEnumDefaultCase = Internal + 766;
</pre>
</li>
<li>Adjusted the specification of the corresponding constant in JavaCore:
<pre>
	/**
	 * Compiler option ID: Reporting Incomplete Enum Switch.
	 *    
	 * When enabled, the compiler will issue an error or a warning whenever
	 * an enum switch statement lacks a default case.
	 * If no default case is given, additionally one error or warning is issued
	 * regarding each enum constant for which a corresponding case label is lacking.
	 * 
	 * Option id: "org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch"
	 * Possible values: { "error", "warning", "ignore" }
	 * Default: "warning"
	 * @since 3.1
	 * @category CompilerOptionID
	 */
	public static final String COMPILER_PB_INCOMPLETE_ENUM_SWITCH = PLUGIN_ID + ".compiler.problem.incompleteEnumSwitch"; //$NON-NLS-1$
</pre>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=371732">371732</a>
Deprecate AST.JLS3
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=372909">372909</a>
message verbiage for instanceof erasure
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=347386">347386</a>
Cannot delete package from java project (two source and output folders)
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=372011">372011</a>
[compiler][null] Restore behaviour of null defaults for binary types
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=127575">127575</a>
Null reference checks don't handle Assert
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=265744">265744</a>
Enum switch should warn about missing default

<a name="v_C36"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - February 28, 2012
<br>
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=372377">372377</a>
ASTParser#createASTs(..) should not ignore optional compile problems
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=372351">372351</a>
Illegal implementation of 'org.eclipse.jdt.internal.compiler.env.ICompilationUnit' in Tomcat Jasper
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=220928">220928</a>
[buildpath] Should be able to ignore warnings from certain source folders

<a name="v_C35"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - February 21, 2012
<br>
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=365499">365499</a>
Add a system property to control for JavaModelManager's jar type cache size
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=368152">368152</a>
ConcurrentModificationException on startup in ExternalFoldersManager.createPendingFolders
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=244544">244544</a>
codeSelect fails on constant declaration in anonymous and local classes
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=291040">291040</a>
codeSelect(..) does not work for a deeply nested method invocation in nested and anonymous class
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=370930">370930</a>
NonNull annotation not considered for enhanced for loops
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=366063">366063</a>
Compiler should not add synthetic @NonNull annotations
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=365531">365531</a>
[compiler][null] investigate alternative strategy for internally encoding nullness defaults
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=370639">370639</a>
[compiler][resource] restore the default for resource leak warnings

<a name="v_C34"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - February 14, 2012
<br>
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=123836">123836</a>
[1.5][search] for references to overriding method with bound type variable is not polymorphic
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=368546">368546</a>
[compiler][resource] Avoid remaining false positives found when compiling the Eclipse SDK
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=364254">364254</a>
Reduce console output during JDT/Core junits execution.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=362633">362633</a>
NPE while trying to rename a class

<a name="v_C33"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - January 25, 2012 - 3.8.0 M5
<br>
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=369595">369595</a>
Javadoc fixes for IClasspathAttribute.SOURCE_ATTACHMENT_ENCODING

<a name="v_C32"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - January 24, 2012
<br>
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=366829">366829</a>
Batch compiler option and SuppressWarnings token for Overriding a Synchronized Method with a Non-synchronized Method

<a name="v_C31"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - January 22, 2012
<br>
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=369251">369251</a>
Starved worker threads
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=365208">365208</a>
[compiler][batch] command line options for annotation based null analysis

<a name="v_C30"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - January 20, 2012
<br>
<h2>What's new in this drop</h2>
<ul>
<li>New constant for the name of the encoding to be used for source attachments in IClasspathAttribute (see bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=361356">361356</a> for details)
<pre>
	/**
	 * Constant for the name of the encoding to be used for source attachments.
	 *
	 * &lt;p&gt;The value of this attribute has to be a string representation of a valid encoding. The encoding
	 * for a source attachment is determined in the following order:  &lt;/p&gt;
	 *
	 * &lt;ul&gt;
	 * &lt;li&gt; Encoding explicitly set on the source file (java or zip), i.e. <code>org.eclipse.core.resources.IFile#getCharset(false)</code> &lt;/li&gt;
	 * &lt;li&gt; Encoding set on the corresponding classpath entry &lt;/li&gt;
	 * &lt;li&gt; If the source attachment is a member of the project, then the project's default charSet&lt;/li&gt;
	 * &lt;li&gt; Workspace default charSet &lt;/li&gt;
	 * &lt;/ul&gt;
	 *
	 * @since 3.8
	 */
	String SOURCE_ATTACHMENT_ENCODING = "source_encoding";
</pre>
</li>
<li> New IProblems for messages relating to contradictory or redundant null annotations
<pre>
	/** @since 3.8 */
	int RedundantNullDefaultAnnotation = Internal + 925;
	/** @since 3.8 */
	int RedundantNullDefaultAnnotationPackage = Internal + 926;
	/** @since 3.8 */
	int RedundantNullDefaultAnnotationType = Internal + 927;
	/** @since 3.8 */
	int RedundantNullDefaultAnnotationMethod = Internal + 928;
	/** @since 3.8 */
	int ContradictoryNullAnnotations = Internal + 929;
</pre>
</li>
</ul>
<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=361356">361356</a>
Allow to specify encoding for source attachments
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=365582">365582</a>
FUP of bug 361938: Other error code pattern
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=365662">365662</a>
[compiler][null] warn on contradictory and redundant null annotations

<a name="v_C29"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - January 17, 2012
<br>
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=368842">368842</a>
test failure because test case refers to java.util.Objects
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=368709">368709</a>
Endless loop in FakedTrackingVariable.markPassedToOutside
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=361407">361407</a>
Resource leak warning when resource is assigned to a field outside of constructor
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=362331">362331</a>
Resource leak not detected when closeable not assigned to variable
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=362332">362332</a>
Only report potential leak when closeable not created in the local scope
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=360908">360908</a>
Avoid resource leak warning when the underlying/chained resource is closed explicitly
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=361073">361073</a>
Avoid resource leak warning when the top level resource is closed explicitly
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=358903">358903</a>
Filter practically unimportant resource leak warnings
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=365387">365387</a>
[compiler][null] bug 186342: Issues to follow up post review and verification.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=365519">365519</a>
editorial cleanup after bug 186342 and bug 365387
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=368435">368435</a>
[compiler] NPE while compile a method with unused local
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=361963">361963</a>
Stack overflow when trying to code complete a generic list
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=365437">365437</a>
Private methods tagged with @Inject should not be flagged with unused warning
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=366131">366131</a>
[1.5][compiler] New generics compile error in Indigo SR1 for code that compiles in earlier Eclipse and javac

<a name="v_C28"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - January 10, 2012
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=367023">367023</a>
Error in JDT Core during AST creation
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=354229">354229</a>
[compiler][1.7] Name clash error not being reported by ecj.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=367879">367879</a>
Incorrect &quot;Potential null pointer access&quot; warning on statement after try-with-resources within try-finally
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=366999">366999</a>
VerifyError: Inconsistent stackmap frames
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=346175">346175</a>
@SuppressWarnings should clear all errors including fatal optional errors
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=366544">366544</a>
[index] Test testUseIndexInternalJarAfterRestart failed on Mac and Linux
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302850">302850</a>
13 failures in JavaModel tests for the N20100214-2000 Mac OS X - Cocoa test machine

<a name="v_C27"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - January 3, 2012 - 3.8.0 M5
<br>
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=367566">367566</a>
In try-with-resources statement close() method of resource is not called
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=364890">364890</a>
BinaryTypeBinding should use char constants from Util
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=365992">365992</a>
[builder] [null] Change of nullness for a parameter doesn't trigger a build for the files that call the method
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=367203">367203</a>
[compiler][null] detect assigning null to nonnull argument
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=367154">367154</a>
[compiler][null]  Problem in propagating null defaults.

<a name="v_C26"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - December 20, 2011
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=362711">362711</a>
possibly incorrect JDT POST_CHANGE event fired when a file is replaced
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=365835">365835</a>
[compiler][null] inconsistent error reporting.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=365836">365836</a>
[compiler][null] Incomplete propagation of null defaults.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=365983">365983</a>
[compiler][null] AIOOB with null annotation analysis and varargs
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=366003">366003</a>
CCE in ASTNode.resolveAnnotations(ASTNode.java:639)
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=366829">366829</a>
Batch compiler option and SuppressWarnings token for Overriding a Synchronized Method with a Non-synchronized Method
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=364450">364450</a>
Dubious class path error triggers a full rebuild

<a name="v_C25"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - December 13, 2011
<h2>What's new in this drop</h2>
<ul>
<li>New constant for the name of index location class path attribute in IClasspathAttribute(see bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=356620">356620</a> for details)
<pre>
   /**
     * Constant for the name of the index location attribute.
     * 
     * The value for this attribute has to be the string representation of a URL.
     * It should point to an existing index file in a folder or a jar. The URL can also be of platform protocol.
     * 
     * @since 3.8
     */
     String INDEX_LOCATION_ATTRIBUTE_NAME = "index_location"; 
</pre>
</li>
<li>New API org.eclipse.jdt.core.index.JavaIndexer.generateIndexForJar to generate the index file for a given jar
<pre>
   /**
     * Generates the index file for the specified jar.
     *
     * @param pathToJar The full path to the jar that needs to be indexed
     * @param pathToIndexFile The full path to the index file that needs to be generated
     * @throws IOException if the jar is not found or could not write into the index file
     * @since 3.8
     */
     public static void generateIndexForJar(String pathToJar, String pathToIndexFile) throws IOException;
</pre>
</li>
<li> New application org.eclipse.jdt.core.JavaIndexer to generate index file for the given jar
</li>
<li> New ant task eclipse.buildJarIndex to generate the index file for the given jar </li>
</ul>
<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=356620">356620</a>
Make it possible to provide indexes for defined libraries

<a name="v_C24"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - December 5, 2011 - 3.8.1 M4

<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=365566">365566</a>
set resource leak diagnostic to &quot;ignore&quot; until bug 358903 is fixed

<a name="v_C23"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0
<h2>What's new in this drop</h2>
<ul>
<li>New Javacore option org.eclipse.jdt.core.JavaCore.COMPILER_ANNOTATION_NULL_ANALYSIS (see bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=186342">186342</a> for details):
<pre>
    /**
     * Compiler option ID: Annotation-based Null Analysis.
     * 
     * This option controls whether the compiler will use null annotations for
     * improved analysis of (potential) null references.
     * 
     * When enabled, the compiler will interpret the annotation types defined using
     * {@link #COMPILER_NONNULL_ANNOTATION_NAME} and {@link #COMPILER_NULLABLE_ANNOTATION_NAME}
     * as specifying whether or not a given type includes the value <code>null</code>.
     * 
     * The effect of these analyses is further controlled by the options
     * {@link #COMPILER_PB_NULL_SPECIFICATION_VIOLATION},
     * {@link #COMPILER_PB_POTENTIAL_NULL_SPECIFICATION_VIOLATION} and
     * {@link #COMPILER_PB_NULL_SPECIFICATION_INSUFFICIENT_INFO}.
     * 
     * Option id: <code>"org.eclipse.jdt.core.compiler.annotation.nullanalysis"</code>
     * Possible values: <code>{ "disabled", "enabled" }</code>
     * Default: <code>"disabled"</code>
     * @since 3.8
     * @category CompilerOptionID
     */
    public static final String COMPILER_ANNOTATION_NULL_ANALYSIS = PLUGIN_ID + ".compiler.annotation.nullanalysis";
</pre></li>
<li>New Javacore option org.eclipse.jdt.core.JavaCore.COMPILER_NULLABLE_ANNOTATION_NAME (see bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=186342">186342</a> for details):
<pre>
    /**
     * Compiler option ID: Name of Annotation Type for Nullable Types.
     * 
     * This option defines a fully qualified Java type name that the compiler may use
     * to perform special null analysis.
     * 
     * If the annotation specified by this option is applied to a type in a method
     * signature or variable declaration, this will be interpreted as a specification
     * that <code>null</code> is a legal value in that position. Currently supported
     * positions are: method parameters, method return type and local variables.
     * 
     * If a value whose type
     * is annotated with this annotation is dereferenced without checking for null,
     * the compiler will trigger a diagnostic as further controlled by
     * {@link #COMPILER_PB_POTENTIAL_NULL_REFERENCE}.
     * 
     * The compiler may furthermore check adherence to the null specification as
     * further controlled by {@link #COMPILER_PB_NULL_SPECIFICATION_VIOLATION},
     * {@link #COMPILER_PB_POTENTIAL_NULL_SPECIFICATION_VIOLATION} and
     * {@link #COMPILER_PB_NULL_SPECIFICATION_INSUFFICIENT_INFO}.
     * 
     * This option only has an effect if the the option {@link #COMPILER_ANNOTATION_NULL_ANALYSIS} is enabled.
     * 
     * Option id: <code>"org.eclipse.jdt.core.compiler.annotation.nullable"</code>
     * Possible values: any legal, fully qualified Java type name; must resolve to an annotation type.
     * Default: <code>"org.eclipse.jdt.annotation.Nullable"</code>
     * @since 3.8
     * @category CompilerOptionID
     */
    public static final String COMPILER_NULLABLE_ANNOTATION_NAME = PLUGIN_ID + ".compiler.annotation.nullable";
</pre></li>
<li>New Javacore option org.eclipse.jdt.core.JavaCore.COMPILER_NONNULL_ANNOTATION_NAME (see bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=186342">186342</a> for details):
<pre>
    /**
     * Compiler option ID: Name of Annotation Type for Non-Null Types.
     * 
     * This option defines a fully qualified Java type name that the compiler may use
     * to perform special null analysis.
     * 
     * If the annotation specified by this option is applied to a type in a method
     * signature or variable declaration, this will be interpreted as a specification
     * that <code>null</code> is <b>not</b> a legal value in that position. Currently
     * supported positions are: method parameters, method return type and local variables.
     * 
     * For values declared with this annotation, the compiler will never trigger a null
     * reference diagnostic (as controlled by {@link #COMPILER_PB_POTENTIAL_NULL_REFERENCE}
     * and {@link #COMPILER_PB_NULL_REFERENCE}), because the assumption is made that null
     * will never occur at runtime in these positions.
     * 
     * The compiler may furthermore check adherence to the null specification as further
     * controlled by {@link #COMPILER_PB_NULL_SPECIFICATION_VIOLATION},
     * {@link #COMPILER_PB_POTENTIAL_NULL_SPECIFICATION_VIOLATION} and
     * {@link #COMPILER_PB_NULL_SPECIFICATION_INSUFFICIENT_INFO}.
     * 
     * This option only has an effect if the the option {@link #COMPILER_ANNOTATION_NULL_ANALYSIS} is enabled.
     * 
     * Option id: <code>"org.eclipse.jdt.core.compiler.annotation.nonnull"</code>
     * Possible values: any legal, fully qualified Java type name; must resolve to an annotation type.
     * Default: <code>"org.eclipse.jdt.annotation.NonNull"</code>
     * @since 3.8
     * @category CompilerOptionID
     */
    public static final String COMPILER_NONNULL_ANNOTATION_NAME = PLUGIN_ID + ".compiler.annotation.nonnull";
</pre></li>
<li>New Javacore option org.eclipse.jdt.core.JavaCore.COMPILER_NONNULL_BY_DEFAULT_ANNOTATION_NAME (see bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=186342">186342</a> for details):
<pre>
    /**
     * Compiler option ID: Name of Annotation Type to specify a nullness default for unannotated types.
     * 
     * This option defines a fully qualified Java type name that the compiler may use
     * to perform special null analysis.
     * 
     * If the annotation is applied without an argument, all unannotated types in method signatures
     * within the annotated element will be treated as if they were specified with the non-null annotation
     * (see {@link #COMPILER_NONNULL_ANNOTATION_NAME}).
     * 
     * If the annotation is applied with the constant <code>false</code> as its argument
     * all corresponding defaults at outer scopes will be canceled for the annotated element.
     * This includes defaults specified using this annotation type or a default defined using
     * the compiler option {@link #COMPILER_NONNULL_IS_DEFAULT}.
     * 
     * This option only has an effect if the the option {@link #COMPILER_ANNOTATION_NULL_ANALYSIS} is enabled.
     * 
     * Option id: <code>"org.eclipse.jdt.core.compiler.annotation.nonnullbydefault"</code>
     * Possible values: any legal, fully qualified Java type name; must resolve to an annotation type.
     *     That annotation type should have exactly one boolean parameter.
     * Default: <code>"org.eclipse.jdt.annotation.NonNullByDefault"</code>
     * @since 3.8
     * @category CompilerOptionID
     */
    public static final String COMPILER_NONNULL_BY_DEFAULT_ANNOTATION_NAME = PLUGIN_ID + ".compiler.annotation.nonnullbydefault";
</pre></li>
<li>New Javacore option org.eclipse.jdt.core.JavaCore.COMPILER_NONNULL_IS_DEFAULT (see bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=186342">186342</a> for details):
<pre>
    /**
     * Compiler option ID: Globally specify non-null as the assumed default for unannotated types.
     * 
     * When enabled this option globally achieves the same effect 
     * as specifying {@link #COMPILER_NONNULL_ANNOTATION_NAME} does for individual elements.
     * 
     * This option only has an effect if the the option {@link #COMPILER_ANNOTATION_NULL_ANALYSIS} is enabled.
     *
     * Option id: <code>"org.eclipse.jdt.core.compiler.annotation.nonnullisdefault"</code>
     * Possible values: <code>{ "disabled", "enabled" }</code>.
     * Default: <code>"disabled"</code>
     * @since 3.8
     * @category CompilerOptionID
     */
    public static final String COMPILER_NONNULL_IS_DEFAULT = PLUGIN_ID + ".compiler.annotation.nonnullisdefault";
</pre></li>
<li>New Javacore option org.eclipse.jdt.core.JavaCore.COMPILER_PB_NULL_SPECIFICATION_VIOLATION (see bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=186342">186342</a> for details):
<pre>
    /**
     * Compiler option ID: Reporting Violations of Null Specifications.
     * 
     * Depending on this option, the compiler will issue either an error or a warning
     * whenever one of the following situations is detected:
     * 
     * 1. A method declared with a nonnull annotation returns an expression that is
     *    statically known to evaluate to a null value.
     * 2. An expression that is statically known to evaluate to a null value is passed
     *    as an argument in a method call where the corresponding parameter of the called
     *    method is declared with a nonnull annotation.
     * 3. An expression that is statically known to evaluate to a null value is assigned
     *    to a local variable that is declared with a nonnull annotation.
     * 4. A method that overrides an inherited method declared with a nonnull annotation
     *    tries to relax that contract by specifying a nullable annotation
     *    (prohibition of contravariant return).
     * 5. A method that overrides an inherited method which has a nullable declaration
     *    for at least one of its parameters, tries to tighten that null contract by
     *    specifying a nonnull annotation for its corresponding parameter
     *    (prohibition of covariant parameters).
     * 
     * The compiler options {@link #COMPILER_NONNULL_ANNOTATION_NAME} and
     * {@link #COMPILER_NULLABLE_ANNOTATION_NAME} control which annotations the compiler
     * shall interpret as nonnull or nullable annotations, respectively.
     * 
     * This option only has an effect if the the option {@link #COMPILER_ANNOTATION_NULL_ANALYSIS} is enabled.
     *
     * Option id: <code>"org.eclipse.jdt.core.compiler.problem.nullSpecViolation"</code>
     * Possible values: <code>{ "error", "warning" }</code>
     * Default: <code>"error"</code>
     * 
     * @since 3.8
     * @category CompilerOptionID
     */
    public static final String COMPILER_PB_NULL_SPECIFICATION_VIOLATION = PLUGIN_ID + ".compiler.problem.nullSpecViolation";
</pre></li>
<li>New Javacore option org.eclipse.jdt.core.JavaCore.COMPILER_PB_POTENTIAL_NULL_SPECIFICATION_VIOLATION (see bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=186342">186342</a> for details):
<pre>
    /**
     * Compiler option ID: Reporting Violations of Null Specifications with Potential Null Value.
     * 
     * When enabled, the compiler will issue an error or a warning whenever one of the
     * following situations is detected:
     *
     * 1. A method declared with a nonnull annotation returns an expression that is
     *    statically known to evaluate to a null value on some flow.
     * 2. An expression that is statically known to evaluate to a null value on some flow
     *    is passed as an argument in a method call where the corresponding parameter of
     *    the called method is declared with a nonnull annotation.
     * 3. An expression that is statically known to evaluate to a null value on some flow
     *    is assigned to a local variable that is declared with a nonnull annotation.
     * 
     * The compiler options {@link #COMPILER_NONNULL_ANNOTATION_NAME} and
     * {@link #COMPILER_NULLABLE_ANNOTATION_NAME} control which annotations the compiler
     * shall interpret as nonnull or nullable annotations, respectively.
     * 
     * 
     * This option only has an effect if the the option {@link #COMPILER_ANNOTATION_NULL_ANALYSIS} is enabled.
     *
     * Option id: <code>"org.eclipse.jdt.core.compiler.problem.potentialNullSpecViolation"</code>
     * Possible values: <code>{ "error", "warning", "ignore" }</code>
     * Default: <code>"error"</code>
     * 
     * @since 3.8
     * @category CompilerOptionID
     */
    public static final String COMPILER_PB_POTENTIAL_NULL_SPECIFICATION_VIOLATION = PLUGIN_ID + ".compiler.problem.potentialNullSpecViolation";
</pre></li>
<li>New Javacore option org.eclipse.jdt.core.JavaCore.COMPILER_PB_NULL_SPECIFICATION_INSUFFICIENT_INFO (see bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=186342">186342</a> for details):
<pre>
    /**
     * Compiler option ID: Reporting Insufficient Information for Analysing Adherence to Null Specifications.
     * 
     * When enabled, the compiler will issue an error or a warning whenever one of the
     * following situations is detected:
     *
     * 1. A method declared with a nonnull annotation returns an expression for which
     *    insufficient nullness information is available for statically proving that no
     *    flow will pass a null value at runtime.
     * 2. An expression for which insufficient nullness information is available for
     *    statically proving that it will never evaluate to a null value at runtime
     *    is passed as an argument in a method call where the corresponding parameter of
     *    the called method is declared with a nonnull annotation.
     * 3. An expression for which insufficient nullness information is available for
     *    statically proving that it will never evaluate to a null value at runtime
     *    is assigned to a local variable that is declared with a nonnull annotation.
     *
     * Insufficient nullness information is usually a consequence of using other unannotated
     * variables or methods.
     * 
     * The compiler options {@link #COMPILER_NONNULL_ANNOTATION_NAME} and
     * {@link #COMPILER_NULLABLE_ANNOTATION_NAME} control which annotations the compiler
     * shall interpret as nonnull or nullable annotations, respectively.
     * 
     * This option only has an effect if the the option {@link #COMPILER_ANNOTATION_NULL_ANALYSIS} is enabled.
     * 
     * Option id: <code>"org.eclipse.jdt.core.compiler.problem.nullSpecInsufficientInfo"</code>
     * Possible values: <code>{ "error", "warning", "ignore" }</code>
     * Default: <code>"warning"</code>
     * 
     * @since 3.8
     * @category CompilerOptionID
     */
    public static final String COMPILER_PB_NULL_SPECIFICATION_INSUFFICIENT_INFO = PLUGIN_ID + ".compiler.problem.nullSpecInsufficientInfo";
</pre></li>
<li>New Javacore option org.eclipse.jdt.core.JavaCore.COMPILER_PB_REDUNDANT_NULL_ANNOTATION (see bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=186342">186342</a> for details):
<pre>
    /**
     * Compiler option ID: Reporting Redundant Null Annotations.
     * 
     * When enabled, the compiler will issue an error or a warning when a non-null annotation
     * (see {@link #COMPILER_NONNULL_ANNOTATION_NAME})
     * is applied although the same effect is already achieved by a default applicable at the
     * current location. Such a default may be effective by enabling the option
     * {@link #COMPILER_NONNULL_IS_DEFAULT} or by using the annotation specified by the option
     * {@link #COMPILER_NONNULL_BY_DEFAULT_ANNOTATION_NAME}.
     * 
     * This option only has an effect if the the option {@link #COMPILER_ANNOTATION_NULL_ANALYSIS} is enabled.
     * 
     * Option id: <code>"org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation"</code>
     * Possible values: <code>{ "error", "warning", "ignore" }</code>
     * Default: <code>"warning"</code>
     * 
     * @since 3.8
     * @category CompilerOptionID
     */
    public static final String COMPILER_PB_REDUNDANT_NULL_ANNOTATION = PLUGIN_ID + ".compiler.problem.redundantNullAnnotation";
</pre>
</li>
<li>New API added to org.eclipse.jdt.core.compiler.IProblem to signal null-related issues:
	<ul>
	<li> int RequiredNonNullButProvidedNull</li>
	<li> int RequiredNonNullButProvidedPotentialNull</li>
	<li> int RequiredNonNullButProvidedUnknown</li>
	<li> int MissingNullAnnotationType</li>
	<li> int IllegalReturnNullityRedefinition</li>
	<li> int IllegalRedefinitionToNonNullParameter</li>
	<li> int IllegalDefinitionToNonNullParameter</li>
	<li> int ParameterLackingNonNullAnnotation</li>
	<li> int ParameterLackingNullableAnnotation</li>
	<li> int PotentialNullMessageSendReference</li>
	<li> int RedundantNullCheckOnNonNullMessageSend</li>
	<li> int CannotImplementIncompatibleNullness</li>
	<li> int RedundantNullAnnotation</li>
	<li> int IllegalAnnotationForBaseType</li>
	</ul>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=363858">363858</a>
[dom] early throwing of AbortCompilation causes NPE in CompilationUnitResolver
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=331647">331647</a>
[compiler][null] support flexible default mechanism for null-annotations
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=334457">334457</a>
[compiler][null] check compatibility of inherited null contracts
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=186342">186342</a>
[compiler][null] Using annotations for null checking

<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - November 29, 2011
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=340945">340945</a>
Extension Request of JavaContentAssistInvocationContext
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=364672">364672</a>
[compiler] ecj fails to compile valid calls to varargs method

<a name="v_C21"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - November 22, 2011
<h2>What's new in this drop</h2>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=350738">350738</a>
&quot;The method is never used locally&quot; is not shown for parameterized recursive methods
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=361053">361053</a>
java.lang.VerifyError on try-with-resources
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=346038">346038</a>
[1.5][compiler] ecj vs. javac differ for methods using vararg parameters of different primitive types
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=346039">346039</a>
[1.5][compiler] ecj vs. javac differ for varargs overloading
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=362279">362279</a>
ecj vs. javac differ for automatic boxing of implicitly converted types
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=362591">362591</a>
VerifyError: Inconsistent stackmap frames

<a name="v_C20"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - November 15, 2011
<br>Project org.eclipse.jdt.core v_C20
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_C20">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=361327">361327</a>
Static import resolution does not record all static elements being imported
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=346042">346042</a>
[1.5][compiler] ecj compiles code rejected by javac for varargs parameters of inaccessible type
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=361938">361938</a>
Formerly working JLS3 parser not working -- Scanner reports com.sun.jdi.InvocationException occurred invoking method.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=359284">359284</a>
Unnecessary checkast from null
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=361441">361441</a>
Error in JDT Core during AST creation
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=363293">363293</a>
resource leaks in org.eclipse.jdt.compiler.tool.tests

<a name="v_C19"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - November 8, 2011
<br>Project org.eclipse.jdt.core v_C19
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_C19">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=361922">361922</a>
Fup of 357425: ensure all reported regressions are witnessed by tests
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=354766">354766</a>
Javadoc content does not appear in content assist info window for non-static inner class constructors

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

<h3>Problem Reports Fixed</h3>

<a name="v_C17"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - October 20, 2011
<br>Project org.eclipse.jdt.core v_C17
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_C17">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Added a new API OUTPUT_LOCATION_OVERLAPPING_ANOTHER_SOURCE(see bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287164">287164</a> for details):
<pre>
/**
 * Status constant indicating that the default or specific output folder is overlapping
 * with another source location.
 * @since 3.8 
 */
public static final int OUTPUT_LOCATION_OVERLAPPING_ANOTHER_SOURCE = 1013;
</pre>
</li>

<li>Added a new option CORE_OUTPUT_LOCATION_OVERLAPPING_ANOTHER_SOURCE to report an output location overlapping another source location(see bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287164">287164</a> for details):
<pre>
/**
 * Core option ID: Reporting an output location overlapping another source location.
 * Indicate the severity of the problem reported when a source entry's output location overlaps another
 * source entry.
 * 
 * Option id:"org.eclipse.jdt.core.classpath.outputOverlappingAnotherSource"
 * Possible values:{ "error", "warning", "ignore" }
 * Default:"error"
 * 
 * @since 3.8
 */
public static final String CORE_OUTPUT_LOCATION_OVERLAPPING_ANOTHER_SOURCE = PLUGIN_ID + ".classpath.outputOverlappingAnotherSource";
</pre>
</li>
</ul>
<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287164">287164</a>
Report build path error if source folder has other source folder as output folder
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=359721">359721</a>
[options] add command line option for new warning token &quot;resource&quot;
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=343480">343480</a>
[compiler] Incorrect/confusing error message on inner class static field declaration
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=318401">318401</a>
FUP of 317858: Clarify eclipse compiler behavior on imports &amp; shadowing
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=360317">360317</a>
[compiler] report switch over enum in 1.4- mode
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=360164">360164</a>
Compile error in XSDImpl
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=359727">359727</a>
[1.7][doc] Update doc for new resource leak warnings

<a name="v_C16"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - October 18, 2011
<br>Project org.eclipse.jdt.core v_C16
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_C16">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Added a new API IBootstrapMethodsEntry to describe the bootstrap method table entry(see bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=359943">359943</a> for details):
<pre>
/**
 * Description of a bootstrap method table entry as specified in the JVM specifications.
 *
 * This interface may be implemented by clients.
 *
 * @since 3.8
 */
public interface IBootstrapMethodsEntry;
</pre>
</li>

<li>Added a new API IBootstrapMethodsAttribute to describe the bootstrap method attribute(see bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=359943">359943</a> for details):
<pre>
/**
 * Description of a bootstrap methods attribute as described in the JVM specifications.
 *
 * This interface may be implemented by clients.
 *
 * @since 3.8
 */
public interface IBootstrapMethodsAttribute
</pre>
</li>

<li>Added a new API in IBootstrapMethodsAttribute to obtain the number of bootstrap methods of this entry(see bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=359943">359943</a> for details):
<pre>
/**
 * Answer back the number of bootstrap methods of this entry as specified in
 * the JVM specifications.
 *
 * @return the number of bootstrap methods of this entry as specified in
 * the JVM specifications
 */
int getBootstrapMethodsLength();
</pre>
</li>

<li>Added a new API in IBootstrapMethodsAttribute to obtain the bootstrap methods table of this entry(see bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=359943">359943</a> for details):
<pre>
/**
 * Answer back the bootstrap methods table of this entry as specified in
 * the JVM specifications. Answer an empty array if none.
 *
 * @return the bootstrap methods table of this entry as specified in
 * the JVM specifications. Answer an empty array if none
 */
IBootstrapMethodsEntry[] getBootstrapMethods();
</pre>
</li>

<li>Added IConstantPoolEntry2 to describe the new constant pool entry from Java 7 onwards(see bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=359943">359943</a> for details):
<pre>
/**
 * Description of the new constant pool entry as described in the JVM specifications
 * added for Java 7 support.
 * Its contents is initialized according to its kind.
 *
 * This interface may be implemented by clients.
 *
 * @since 3.8
 */
public interface IConstantPoolEntry2
</pre>
</li>

<li>Added new API in IConstantPoolEntry2 to return the descriptor index for MethodType entry(see bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=359943">359943</a> for details):
<pre>
/**
 * Returns the descriptor index. This value is set only when decoding a MethodType entry.
 * The value is unspecified otherwise. The corresponding UTF8 value can be retrieved by using
 * {@link #getMethodDescriptor()}.
 *
 * @return the descriptor index. This value is set only when decoding a MethodType entry.
 * @see IConstantPoolConstant#CONSTANT_MethodType
 */
int getDescriptorIndex();
</pre>
</li>

<li>Added new API in IConstantPoolEntry2 to return the reference kind for MethodHandle entry(see bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=359943">359943</a> for details):
<pre>
/**
 * Returns the reference kind. This value is set only when decoding a MethodHandle entry.
 * The value is unspecified otherwise.
 *
 * @return the reference kind. This value is set only when decoding a MethodHandle entry.
 * @see IConstantPoolConstant#CONSTANT_MethodHandle
 */
int getReferenceKind();
</pre>
</li>

<li>Added new API in IConstantPoolEntry2 to return the reference index for MethodHandle entry(see bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=359943">359943</a> for details):
<pre>
/**
 * Returns the reference index. This value is set only when decoding a MethodHandle entry.
 * The value is unspecified otherwise.
 *
 * @return the reference kind. This value is set only when decoding a MethodHandle entry.
 * @see IConstantPoolConstant#CONSTANT_MethodHandle
 */
int getReferenceIndex();
</pre>
</li>

<li>Added new API in IConstantPoolEntry2 to return the bootstrap method attribute index(see bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=359943">359943</a> for details):
<pre>
/**
 * Returns the bootstrap method attribute index. This value is set only when decoding a InvokeDynamic entry.
 * The value is unspecified otherwise.
 *
 * @return the reference kind. This value is set only when decoding a MethodHandle entry.
 * @see IConstantPoolConstant#CONSTANT_InvokeDynamic
 */
int getBootstrapMethodAttributeIndex();
</pre>
</li>

<li>Added new API in IByteCodeVisitor(see bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=359943">359943</a> for details):
<pre>
	/**
	 * @since 3.8
	 */
	void _invokedynamic(
			int pc,
			int index,
			IConstantPoolEntry invokeDynamic);
</pre>
<p>
This has been added in place of the deprecated API
<pre>
	void _invokedynamic(
			int pc,
			int index,
			IConstantPoolEntry nameEntry,
			IConstantPoolEntry descriptorEntry);
</pre>
</li>
</ul>
<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=359943">359943</a>
invokedynamic in generated class file is not correctly recognized by the eclipse compiler
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=360644">360644</a>
Scope.isDefinedInSameUnit(ReferenceBinding) fails for a ParameterizedTypeBinding
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=358762">358762</a>
NPE in JDT compiler
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=360328">360328</a>
[compiler][null] detect null problems in nested code (local class inside a loop)

<a name="v_C15"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - October 11, 2011
<br>Project org.eclipse.jdt.core v_C15
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_C15">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=350285">350285</a>
ASTRewrite destroys formatting on CatchClause#setBody(copyTarget)
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=353474">353474</a>
type converters should include more annotations

<a name="v_C14"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - October 5, 2011
<br>Project org.eclipse.jdt.core v_C14
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_C14">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=354181">354181</a>
migrate jdt.core to git
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=359831">359831</a>
Fix messages for &quot;new warning for missing try-with-resources&quot;

<a name="v_C13"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - October 3, 2011
<br>Project org.eclipse.jdt.core v_C13
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_C13">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>New Javacore option org.eclipse.jdt.core.JavaCore.COMPILER_PB_UNCLOSED_CLOSEABLE to raise a warning or error
  when a resource of type Closeable or AutoCloseable is not closed locally.  
(see details in bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=349326">349326</a>):
<pre>
	/**
	 * Compiler option ID: Reporting a resource that is not closed properly.
	 *
	 * When enabled, the compiler will issue an error or a warning if
	 * a local variable holds a value of type <code>java.lang.AutoCloseable</code> (compliance>=1.7) 
	 * or a value of type <code>java.io.Closeable</code> (compliance<=1.6) and if
	 * flow analysis shows that the method <code>close()</code> is not invoked locally on that value.
	 * 
	 * Option id: <code>"org.eclipse.jdt.core.compiler.problem.reportUnclosedCloseable"</code>
	 * Possible values: <code>{ "error", "warning", "ignore" }</code>
	 * Default: <code>"warning"</code>
	 *
	 * @since 3.8
	 * @category CompilerOptionID
	 */
	public static final String COMPILER_PB_UNCLOSED_CLOSEABLE = PLUGIN_ID + ".compiler.problem.unclosedCloseable"; //$NON-NLS-1$
</pre>
</li>
<li>New Javacore option org.eclipse.jdt.core.JavaCore.COMPILER_PB_POTENTIALLY_UNCLOSED_CLOSEABLE to raise a warning or error
  when a resource of type Closeable or AutoCloseable is not definitely closed locally.
(see details in bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=349326">349326</a>):
<pre>
	/**
	 * Compiler option ID: Reporting a resource that may not be closed properly.
	 * 
	 * When enabled, the compiler will issue an error or a warning if
	 * a local variable holds a value of type <code>java.lang.AutoCloseable</code> (compliance>=1.7) 
	 * or a value of type <code>java.io.Closeable</code> (compliance<=1.6) and if
	 * flow analysis shows that the method <code>close()</code> is 
	 * not invoked locally on that value for all execution paths.
	 * 
	 * Option id: <code>"org.eclipse.jdt.core.compiler.problem.reportPotentiallyUnclosedCloseable"</code>
	 * Possible values: <code>{ "error", "warning", "ignore" }</code>
	 * Default: <code>"ignore"</code>
	 * 
	 * @since 3.8
	 * @category CompilerOptionID
	 */
	public static final String COMPILER_PB_POTENTIALLY_UNCLOSED_CLOSEABLE = PLUGIN_ID + ".compiler.problem.potentiallyUnclosedCloseable"; //$NON-NLS-1$
</pre>
</li>
<li>New Javacore option org.eclipse.jdt.core.JavaCore.COMPILER_PB_EXPLICITLY_CLOSED_AUTOCLOSEABLE to raise a warning or error
  when a resource of type AutoCloseable is closed explicitly rather than using a try-with-resources block.
(see details in bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=349326">349326</a>):
<pre>
	/**
	 * Compiler option ID: Reporting a resource that is not managed by try-with-resources.
	 * 
	 * When enabled, the compiler will issue an error or a warning if a local variable 
	 * holds a value of type <code>java.lang.AutoCloseable</code>, and if the method
	 * <code>close()</code> is explicitly invoked on that resource, but the resource is
	 * not managed by a try-with-resources block.
	 * 
	 * Option id: <code>"org.eclipse.jdt.core.compiler.problem.reportPotentiallyUnclosedCloseable"</code>
	 * Possible values: <code>{ "error", "warning", "ignore" }</code>
	 * Default: <code>"ignore"</code>
	 * 
	 * @since 3.8
	 * @category CompilerOptionID
	 */
	public static final String COMPILER_PB_EXPLICITLY_CLOSED_AUTOCLOSEABLE = PLUGIN_ID + ".compiler.problem.explicitlyClosedAutoCloseable"; //$NON-NLS-1$
</pre>
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=359495">359495</a>
[1.7][compiler] VerifyError in try-finally block with lock encompassing for-each block and unlock in finally clause
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=161129">161129</a>
[batch][compiler] Add -warn:all to report all warnings
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=359646">359646</a>
Formatter fails silently if Java source contains 0x8000000000000000L
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=256796">256796</a>
[compiler] dead code detection: &quot;if (DEBUG) return;&quot; should also be trivial IF stmt
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=359334">359334</a>
Analysis for resource leak warnings does not consider exceptions as method exit points
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=359362">359362</a>
FUP of bug 349326: Resource leak on non-Closeable resource.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=348186">348186</a>
[compiler] Improve wording for the warning for masked/hidden catch block
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=355838">355838</a>
[compiler] ecj compiles the code that javac6 rejects
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=349326">349326</a>
[1.7] new warning for missing try-with-resources
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=354502">354502</a>
Incorrect Compiler Warning: &quot;Method can be declared as static&quot;
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=241834">241834</a>
[search] ClassCastException during move class refactoring
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=358827">358827</a>
[1.7] exception analysis for t-w-r spoils null analysis

<a name="v_C12"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - September 23, 2011
<br>Project org.eclipse.jdt.core v_C12
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_C12">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Tagging to prepare for the git migration</li>
</ul>

<h3>Problem Reports Fixed</h3>

<a name="v_C11"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - September 20, 2011
<br>Project org.eclipse.jdt.core v_C11
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_C11">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=357110">357110</a>
Problem with inner classes referenced from jars or class folders: &quot;The type ... cannot be resolved&quot;
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=357471">357471</a>
ASTParser cannot resolve binding of PackageDeclaration if class name is equal to the first segment of the package name

<a name="v_C10"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - September 13, 2011 - 3.8.0 M2
<br>Project org.eclipse.jdt.core v_C10
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_C10">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=357259">357259</a>
[dom] AST#newArrayType(Type, int) should allow array type as argument

<a name="v_C09"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - September 9, 2011
<br>Project org.eclipse.jdt.core v_C09
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_C09">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=354332">354332</a>
DeltaProcessor exhibits O(N^2) behavior
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=355605">355605</a>
NPE in HierarchyResolver
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=347396">347396</a>
ASTParser returns empty or partial AST if we parse the the body contains empty for loop
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=356746">356746</a>
ECJ accepts illegal unicode escape sequences
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=337935">337935</a>
Test failures when run as an IDE (org.eclipse.sdk.ide)

<a name="v_C08"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - September 6, 2011
<br>Project org.eclipse.jdt.core v_C08
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_C08">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=356325">356325</a>
[select] Open declaration on a constructor of a local class with type parameters doesn't work
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=24804">24804</a>
Organize imports wipes comments between statements [code manipulation]
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=356363">356363</a>
Many links to java.sun.com are broken
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=346529">346529</a>
Don't show &quot;The method * from the type * is never used locally&quot; warning for private methods annotated with standard annotations like @PostConstruct

<a name="v_C07"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - August 30, 2011
<br>Project org.eclipse.jdt.core v_C07
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_C07">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=356002">356002</a>
VerifyError &quot;Inconsistent stackmap frames&quot; for switch-string statement with nested for-loop
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=350095">350095</a>
The 2000th (0-based) enum constant is null
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=234074">234074</a>
Compliance_1_5#test088 fails when launched with JRE 6 and -Dcompliance=1.5
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=350612">350612</a>
OutOfMemoryError while &quot;Initializing Java Tooling&quot;
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=348024">348024</a>
Empty AST for class with static inner class in a package with package-info.java
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=346010">346010</a>
[model] strange initialization dependency in OptionTests
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=353640">353640</a>
AIOOBE in ParameterizedTypeBinding.substitute

<a name="v_C06"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - August 23, 2011
<br>Project org.eclipse.jdt.core v_C06
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_C06">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=348507">348507</a>
[search] Hyperlinks from the Java Stack Trace console should search the workspace in CLASSPATH order
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=345949">345949</a>
[compiler] Inconsistent name clash behavior vis-a-vis javac7
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=354766">354766</a>
Javadoc content does not appear in content assist info window for non-static inner class constructors
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=353535">353535</a>
Eclipse compiler generates wrong bytecode for nested try-with-resources statements
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=354579">354579</a>
Fup of bug 289247: Investigate validity of the fix vis-a-vis JLS.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=354078">354078</a>
[dom] ASTConverter.removeTrailingCommentFromExpressionEndingWithAParen() ??

<a name="v_C05"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - August 16, 2011
<br>Project org.eclipse.jdt.core v_C05
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_C05">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=354554">354554</a>
[null] conditional with redundant condition yields weak error message
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=354536">354536</a>
compiling package-info.java still depends on the order of compilation units
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=292087">292087</a>
anonymous class in array member initializer confuses content assist
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=352412">352412</a>
Switching on strings in 1.6- modes produces misleading message
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317719">317719</a>
Method incorrectly flagged as having same erasure output when return type differs

<a name="v_C04"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - August 9, 2011
<br>Project org.eclipse.jdt.core v_C04
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_C04">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Added a new API in BindingKey to return it's declaring type(see bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=351165">351165</a> for details):
<pre>
/**
 * Returns the binding key of the declaring type of the element represented by this binding key. If the binding key
 * does not represent a member or if the member doesn't have a declaring type, returns <code>null</code>.
 * 
 * Note that only binding keys for references to methods and fields
 * are fully supported. The binding keys for declarations will not have type parameters.
 * 
 * @return the type binding key or <code>null</code>
 * @since 3.7.1
 */
public BindingKey getDeclaringType();
</pre>
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=354052">354052</a>
[1.7] NPE in org.eclipse.jdt.internal.compiler.ClassFile.traverse(ClassFile.java:4507)
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=346741">346741</a>
[1.7][doc] Update doc when java 1.7 support is done
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=353238">353238</a>
[1.7] update unusedTypeArgs option description for the batch compiler
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=353089">353089</a>
[1.7][compiler] Incorrect name clash error with ecj
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=351165">351165</a>
[1.7] API to get the type arguments of the declaring type for constructor invocations

<a name="v_C03"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - August 3, 2011 - 3.8.0 M1
<br>Project org.eclipse.jdt.core v_C03
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_C03">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=353553">353553</a>
Rename readableNames.properties to avoid translation
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=353085">353085</a>
[1.7] Cannot cast from Object to boolean

<a name="v_C02"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - July 28, 2011
<br>Project org.eclipse.jdt.core v_C02
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_C02">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=353250">353250</a>
[1.7] merging Java 7 work to HEAD

<a name="v_C01"></a>
<hr><h1>
Eclipse Platform Build Notes<br>
Java development tools core</h1>
Eclipse SDK 3.8.0 - July 27, 2011
<br>Project org.eclipse.jdt.core v_C01
(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_C01">cvs</a>).
<h2>What's new in this drop</h2>
<ul>
<li>Bundle version has been incremented to 3.8.0.qualifier</li>
<li>Added a new API in CompletionProposal to tell whether it diamond operator can be used (see bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=351444">351444</a> for details):
<pre>
/** 
 * Returns whether it is safe to use the '&lt;&gt;' (diamond) operator in place of explicitly specifying
 * type arguments for this proposal. 
 * 
 * This is only relevant for source level 1.7 or greater.
 * 
 * @param coreContext the completion context associated with the proposal
 * @since 3.7.1
 * @return <code>true</code> if it is safe to use the diamond operator for the constructor invocation, 
 * <code>false</code> otherwise. Also returns <code>false</code> for source levels below 1.7
 */
public boolean canUseDiamond(CompletionContext coreContext);
</pre>
</li>
<li>New Javacore option org.eclipse.jdt.core.JavaCore.COMPILER_PB_REDUNDANT_TYPE_ARGUMENTS added to raise warning or error for redundant
usage of type arguments when diamond operator can be used instead. (see details in bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=340747">340747</a>):
<pre>
	/**
	 * Compiler option ID: Reporting redundant specification of type arguments in class instance creation expressions.
	 * When enabled, the compiler will issue an error or a warning if type arguments are used in a class instance creation,
	 * when the '&lt;&gt;' operator can be used instead.
	 *
	 * This option only has an effect if the compiler compliance is 1.7 or greater.
	 * 
	 * Option id:<code>"org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments"</code>
	 * Possible values:<code>{ "error", "warning", "ignore" }</code>
	 * Default:<code>"ignore"</code>
	 * 
	 * @since 3.7.1
	 * @category CompilerOptionID
	 */
	public static final String COMPILER_PB_REDUNDANT_TYPE_ARGUMENTS = PLUGIN_ID + ".compiler.problem.redundantSpecificationOfTypeArguments";
	</pre>
</li>
<li>Added a new API in ClassInstanceCreation to tell whether the resolved type is inferred from the assignment context:
<br>(see bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=350897">350897</a> for details):
<pre>
	/**
	 * Returns <code>true</code> if the resolved class type has been inferred
	 * from the assignment context (JLS4 15.12.2.8), <code>false</code> otherwise.
	 *
	 * This information is available only when bindings are requested when the AST is being built.
	 *
	 * @return <code>true</code> if the resolved class type has been inferred
	 * 	from the assignment context (JLS3 15.12.2.8), <code>false</code> otherwise
	 * @since 3.7.1
	 */
	public boolean isResolvedTypeInferredFromExpectedType();
</pre>
</li>
</ul>

<h3>Problem Reports Fixed</h3>
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=342936">342936</a>
NPEs and inconsistencies when running jdt.compiler.tool.tests against Java 7
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=351426">351426</a>
[1.7][code assist] CompletionContext.getExpectedTypesKeys() returns wrong type
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=353137">353137</a>
[1.7] Make sure TagBits.AnnotationSafeVarargs and AnnotationPolymorphicSignature are handled everywhere
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=353093">353093</a>
IMethod#getAnnotations() doesn't return @SafeVarargs of java.util.Arrays#asList(T...)
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=352464">352464</a>
[1.7] Incorrect Javadoc shown for reference of invokeExact
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=351498">351498</a>
[model]java.util.ConcurrentModificationException upon startup
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=352699">352699</a>
[1.7][compiler] Improve error range for redundant type parameter warning
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=352665">352665</a>
[1.6][compiler] Internal compiler Error: ArrayIndexOutOfBoundsException when compiling certain classes with outer access error
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=352553">352553</a>
[1.7] 'char a\u200b' is being accepted in 1.6 mode
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=352496">352496</a>
tests using wrong version of JCL
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=300576">300576</a>
NPE Computing type hierarchy when compliance doesn't match libraries
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=352145">352145</a>
[1.7][compiler] VerifyError with aload0 being involved into ConditionalExpression
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=351965">351965</a>
[1.7] CCE when using diamond in 1.4
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=351444">351444</a>
[1.7][content assist] Need to know whether I can use diamond
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=352014">352014</a>
\u1369 no longer accepted as a valid java identifier part
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=351653">351653</a>
[1.7][compiler]: VerifyError in try statement with finally and return statements
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=340747">340747</a>
[1.7][compiler] compiler option to warn when diamond can be used, but type args are used instead.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=350895">350895</a>
[1.7][formatter] New option to wrap before/after '|' in multi-catch
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=350652">350652</a>
[1.7][assist] Completion issues with multicatch (FUP of 343637)
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=347503">347503</a>
[DOM] ASTParser.setEnvironment() ignores includeRunningVMBootclasspath parameter
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=350897">350897</a>
[1.7][api] ClassInstanceCreation#isResolvedTypeInferredFromExpectedType()
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=351170">351170</a>
[1.7] ASTRewrite issues in Try with resources
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=348493">348493</a>
[1.7] Improve error msg for Diamond operator in 1.5 mode
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=350885">350885</a>
[Search] The pull up refactoring throws an NPE when pulling up a member that already exists in the superclass
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=350611">350611</a>
[1.7] Inconsistent error msg and error location for illegal diamond
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=350579">350579</a>
[1.7][compiler] VerifyError running example from bug 338402 comment 5
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=350767">350767</a>
[1.7][assist] CCE while invoking assist on a multi-catch block
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=349312">349312</a>
[1.7][compiler] improved problem messages
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=350003">350003</a>
[1.7] [compiler] AnnotationPolymorphicSignature tag is not being set to invokeExact while compiling MethodHandle source file
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=350496">350496</a>
[1.7] @PolymorphicSignature IMethods are missing the annotation
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=349314">349314</a>
[1.7][formatter] Line wrapping for multi-catch arguments
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=350039">350039</a>
[1.7] ASTParser#createASTs(..) doesn't resolve IMethodBinding for @PolymorphicSignature method reference
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=349396">349396</a>
[1.7][formatter] Line wrapping and indentation options for try with resources
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=350361">350361</a>
[1.7] Unhandled exception type Exception
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=349488">349488</a>
[1.7] IMethodBinding#getMethodDeclaration() should return the declaration of @PolymorphicSignature methods
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=349487">349487</a>
[1.7] IMethodBinding#getJavaElement() returns inexistent element for @PolymorphicSignature methods
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=349862">349862</a>
[1.7] NPE when trying to use UnionType as TryStatement resource
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=349864">349864</a>
[1.7][compiler] Error message considers AutoCloseable as class
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=348956">348956</a>
[1.7] ITypeBinding#isAssignmentCompatible(ITypeBinding) returns different result
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=349312">349312</a>
[1.7][compiler] improved problem messages
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=349008">349008</a>
[1.7] Ugly formatting for try with resources
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=349072">349072</a>
[1.7] &quot;Cannot infer elided type(s)&quot; sounds too elite
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=348705">348705</a>
[1.7][compiler] Improve error message for unhandled IOException generated due to compiler-generated close()
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=348050">348050</a>
[1.7] Error in JDT Core during AST creation
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=348406">348406</a>
[1.7] Incorrect error msg on try with resources in 1.5 mode 
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=348492">348492</a>
[1.7] Improve error msg on strings in switch in 1.5 mode
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=348491">348491</a>
[1.7] Rename IProblem.IllegalBinaryLiteral to BinaryLiteralNotBelow17 and IProblem.IllegalUsageOfUnderscore to UnderscoreInLiteralsNotBelow17
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=348369">348369</a>
[1.7] Missing error &quot;No exception of type Exception[] can be thrown&quot;
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=348379">348379</a>
[1.7][compiler] Null pointer access warning for strings in switch
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=346415">346415</a>
[1.7][assist] No proposal inside catch statement from 3rd catch block onwards
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=346454">346454</a>
[1.7][content assist]Getting NegativeArraySizeException while trying content assist after diamond
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=347600">347600</a>
[1.7][compiler] Suspect bounds check failure after inference.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=347746">347746</a>
[1.7][compiler] Bounds check failure during method inference
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=283353">283353</a>
[1.5][compiler] Eclipse compiler shows error on javac-valid construct: Bound mismatch
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=347145">347145</a>
[1.7][compiler] Bounds check issue with raw types in method inference
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=347426">347426</a>
[1.7][compiler] ecj behavior differs from javac
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=344522">344522</a>
[1.7] Incorrect source range for ParameterizedType in case of Diamond
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=341795">341795</a>
[1.7][compiler] Cannot assign a generic method with multiple bounds return value to any variable
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=242159">242159</a>
[1.7][compiler] type inference with unbounded wildcard in result type
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=343693">343693</a>
[1.7] Adjust subclasses of AllocationExpression for &lt;&gt; support
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=343637">343637</a>
[1.7] Already used exception offered again in a Mulicatch block
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=345968">345968</a>
[1.7][compiler] NPE while using diamond for inner class allocation
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=334313">334313</a>
[1.5][compiler] Bug in the way eclipse handles overriding of generic abstract method by a non-abstract method
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=346029">346029</a>
[1.7][compiler] Eclipse compiles code rejected by JDK7
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=345628">345628</a>
[1.7] Rename disjunctive type to union type
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=345559">345559</a>
[1.7][compiler] Type inference for generic allocation can be avoided for invalid constructor
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=342819">342819</a>
Code rejected by javac with name clash error compiles under eclipse.
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=334306">334306</a>
[1.7][compiler] name clash reported in javac 1.7 and not in javac 1.6
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=345579">345579</a>
[1.7][compiler] Weird error message in rethrow site
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=345522">345522</a>
[1.7][compiler] Compilers fails to compute precisely rethrown types
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=344824">344824</a>
[1.7][compiler] Incorrect error range for unreachable catch block error in multi-catch
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=340486">340486</a>
[1.7][compiler] Missing error in multi catch scenario
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=345359">345359</a>
[1.7][compiler] AIOOB on diamond construct with argument error
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=345239">345239</a>
[1.7][compiler] Compiler should issue better diagnostics for use of &lt;&gt; with anonymous classes
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=344655">344655</a>
[1.7][compiler] Prohibit use of &lt;&gt; with explicit type arguments to generic constructor
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=328575">328575</a>
Inheritance of annotation fails with generic classes
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=343785">343785</a>
[1.7] Incorrect line numbers in stack trace with try with resources
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=343687">343687</a>
[1.7] IAE in NumberLiteral#setToken(String) for binary tokens and tokens with underscore
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=339478">339478</a>
[1.7][compiler] support for diamond case
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=343476">343476</a>
[1.7][assist] propose String variables and fields inside catch expression
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=292087">292087</a>
anonymous class in array member initializer confuses content assist
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=343475">343475</a>
[1.7] Compiler warning for invalid type inside switch needs to be improved
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=342416">342416</a>
[1.7] Signature#createIntersectionTypeSignature(..) should take array of signatures
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=340059">340059</a>
[1.7] IAE when dealing with Signature of disjunctive type
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=338789">338789</a>
[1.7][assist] No proposal inside a multi catch statement after '|'
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=341333">341333</a>
[1.7][compiler] DisjunctiveTypeReference#resolveType(..) does not set the value for DisjunctiveTypeReference$resolvedType
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=340634">340634</a>
[1.7][compiler][multicatch] Compiler accepts type variables as catch parameter type
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=340626">340626</a>
[1.7][compiler] Inconsistent source pinpointing in multi-catch blocks
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=340513">340513</a>
[1.7][compiler] Unicode 6.0 characters work at compiler compliance level 1.5 and 1.6
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=340445">340445</a>
[1.7] ASTRewriteAnalyzer and ASTRewriteFlattener need updates
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=340372">340372</a>
[1.7] NaiveASTFlattener needs to support the new AST nodes
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=340365">340365</a>
[1.7] Problems in new APIs (TryStatementWithResources, DisjunctiveType)
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=340375">340375</a>
[1.7] Merge TryStatementWithResources into TryStatement
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=340022">340022</a>
[1.7][compiler] Support for precise rethrow
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=339837">339837</a>
[1.7][compiler] Multicatch syntax not rejected at 1.6-
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=339864">339864</a>
[1.7] Add recovery in ASTConverter for all new constructs in JLS3 mode
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=338402">338402</a>
[1.7][compiler][enh] Open issues in try with resources implementation
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=337795">337795</a>
[1.7][compiler] Missing unchecked warning at varargs method/ctor declaration site
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=337802">337802</a>
[1.7][compiler] Usage of 0x0ffffffff is being reported as out of range.
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=337799">337799</a>
[1.7][compiler][varargs] Eclipse fails to report error on incorrect SafeVarargs usage
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=337738">337738</a>
[1.7][content assist]Test CompletionParserTest#testEA_1 fails
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=336782">336782</a>
[1.7][recovery]Extra error tokens with invalid unary operator
<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=336322">336322</a>
[1.7][search]CCE while searching for a type reference in multiple catch parameters

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

