*** empty log message ***
diff --git a/buildnotes_jdt-core.html b/buildnotes_jdt-core.html
index fc47f8f..d351adf 100644
--- a/buildnotes_jdt-core.html
+++ b/buildnotes_jdt-core.html
@@ -11,16 +11,49 @@
 <h1>
 Eclipse Platform Build Notes&nbsp;<br>
 Java Development Tooling Core</h1>
-Eclipse SDK Build 200205? - ?th May 2002 
+Eclipse SDK Build 20020503 - 3rd May 2002 
 <br>Project org.eclipse.jdt.core v_244
 <h2>
 What's new in this drop</h2>
 <ul>
-	<li>new	</li>
+	<li>JavaCore now persists its options (<code>JavaCore#getOptions</code>) using its plugin property store. Clients no longer need to save them. </li>
+	<li>JavaCore now provides constants for all supported option IDs and values.</li>
+	<li> JavaCore option added, to allow build to abort in presence of invalid classpath. 
+	<pre>
+	 * BUILDER / Abort if Invalid Classpath
+	 *    Allow to toggle the builder to abort if the classpath is invalid
+	 *     - option id:        "org.eclipse.jdt.core.builder.invalidClasspath"
+	 *     - possible values:  { "abort", "ignore" }
+	 *     - default:          "ignore"
+	</pre>
 </ul>
 
 <h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14754">14754</a>
+<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15177">15177</a>
+Classpath markers not correctly updated  
+<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15168">15168</a>
+circular errors not reported
+<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13957">13957</a>
+LaunchingPlugin specification of resourceCopyExclusionFilter
+<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12977">12977</a>
+Adding Java nature to a project does not bring it to like in package view  
+<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15107">15107</a>
+Internal Error organizing imports 
+<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15030">15030</a>
+NPE trying to open or edit source files that reference jbuilder.jar 
+<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14838">14838</a>
+Scrapbook editor: bad handling of // comment 
+<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12543">12543</a>
+Code assist to insert method does not work when there are extra top-level statements
+<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15061">15061</a>
+IllegalArgumentException in ASTNode.setSourceRange 
+<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15036">15036</a>
+ASTVisitor.preVisit and ASTVisitor.postVisit not called correctly 
+<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=3193">3193</a>
+JM - ISourceManipulation.delete send replace-BufferChangedEvent (1FYE8XI)  
+<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15091">15091</a>
+Too many cycle markers generated when cycle is detected  
+<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14754">14754</a>
 CodeAssist - Duplicate method declaration proposal inside anonymous type
 <br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15051">15051</a>
 Synthetic access methods are not reported to be synthetic
@@ -34,7 +67,15 @@
 Bad generated code for '+=' and '-=' operators
 
 <h3>Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14929">14929</a>
+<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13057">13057</a>
+NPE in JavaElementRequestor
+<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11155">11155</a>
+ArrayIndexOutOfBounds exception that caused workbench to freeze
+<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12921">12921</a>
+Build sometimes builds files that have not changed
+<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14962">14962</a>
+JDT Search returning improper type
+<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14929">14929</a>
 External Locations for Output Files
 
 <h1>
diff --git a/codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java b/codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java
index e7eccdf..ca96664 100644
--- a/codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java
+++ b/codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java
@@ -350,283 +350,296 @@
 				findMethods(token,null,scope.enclosingSourceType(),scope,new ObjectVector(),false,false,true,null,null,false);

 			}

 		} else {

-

-			if (astNode instanceof CompletionOnSingleNameReference) {

-

-				token = ((CompletionOnSingleNameReference) astNode).token;

-				findVariablesAndMethods(

-					token,

-					scope,

-					(CompletionOnSingleNameReference) astNode,

-					scope);

-				// can be the start of a qualified type name

-				findTypesAndPackages(token, scope);

-

-			} else {

-

-				if (astNode instanceof CompletionOnSingleTypeReference) {

-

-					token = ((CompletionOnSingleTypeReference) astNode).token;

-					

-					assistNodeIsClass = astNode instanceof CompletionOnClassReference;

-					assistNodeIsException = astNode instanceof CompletionOnExceptionReference;

-					assistNodeIsInterface = astNode instanceof CompletionOnInterfaceReference;

-

-					// can be the start of a qualified type name

-					if (qualifiedBinding == null) {

-						findTypesAndPackages(token, scope);

-						} else {

-							findMemberTypes(

-							token,

-							(ReferenceBinding) qualifiedBinding,

-							scope,

-							scope.enclosingSourceType());

-					}

-				} else {

-					

-					if (astNode instanceof CompletionOnQualifiedNameReference) {

-

-						insideQualifiedReference = true;

-						CompletionOnQualifiedNameReference ref =

-							(CompletionOnQualifiedNameReference) astNode;

-						token = ref.completionIdentifier;

-						long completionPosition = ref.sourcePositions[ref.sourcePositions.length - 1];

-

-						if (qualifiedBinding instanceof VariableBinding) {

-

-							setSourceRange((int) (completionPosition >>> 32), (int) completionPosition);

-							TypeBinding receiverType = ((VariableBinding) qualifiedBinding).type;

-							if (receiverType != null) {

-								findFieldsAndMethods(token, receiverType, scope, ref, scope,false);

-							}

-

-						} else {

-

-							if (qualifiedBinding instanceof ReferenceBinding) {

-

-								ReferenceBinding receiverType = (ReferenceBinding) qualifiedBinding;

-								setSourceRange((int) (completionPosition >>> 32), (int) completionPosition);

-

-								findMemberTypes(token, receiverType, scope, scope.enclosingSourceType());

-

-								findClassField(token, (TypeBinding) qualifiedBinding, scope);

-

-								findFields(

-									token,

-									receiverType,

-									scope,

-									new ObjectVector(),

-									new ObjectVector(),

-									true,

-									ref,

-									scope,

-									false);

-

-								findMethods(

-									token,

-									null,

-									receiverType,

-									scope,

-									new ObjectVector(),

-									true,

-									false,

-									false,

-									ref,

-									scope,

-									false);

-

-							} else {

-

-								if (qualifiedBinding instanceof PackageBinding) {

-

-									setSourceRange(astNode.sourceStart, (int) completionPosition);

-									// replace to the end of the completion identifier

-									findTypesAndSubpackages(token, (PackageBinding) qualifiedBinding);

-								}

-							}

-						}

-

-					} else {

-

-							if (astNode instanceof CompletionOnQualifiedTypeReference) {

-

-							insideQualifiedReference = true;

-							

-							assistNodeIsClass = astNode instanceof CompletionOnQualifiedClassReference;

-							assistNodeIsException = astNode instanceof CompletionOnQualifiedExceptionReference;

-							assistNodeIsInterface = astNode instanceof CompletionOnQualifiedInterfaceReference;

-							

-							CompletionOnQualifiedTypeReference ref =

-								(CompletionOnQualifiedTypeReference) astNode;

-							token = ref.completionIdentifier;

-							long completionPosition = ref.sourcePositions[ref.tokens.length];

-

-							// get the source positions of the completion identifier

-							if (qualifiedBinding instanceof ReferenceBinding) {

-

-								setSourceRange((int) (completionPosition >>> 32), (int) completionPosition);

-								findMemberTypes(

-									token,

-									(ReferenceBinding) qualifiedBinding,

-									scope,

-									scope.enclosingSourceType());

-

-							} else {

-

-								if (qualifiedBinding instanceof PackageBinding) {

-

-									setSourceRange(astNode.sourceStart, (int) completionPosition);

-									// replace to the end of the completion identifier

-									findTypesAndSubpackages(token, (PackageBinding) qualifiedBinding);

-								}

-							}

-

-						} else {

-

-							if (astNode instanceof CompletionOnMemberAccess) {

-

-								CompletionOnMemberAccess access = (CompletionOnMemberAccess) astNode;

-								long completionPosition = access.nameSourcePosition;

-								setSourceRange((int) (completionPosition >>> 32), (int) completionPosition);

+			if(astNode instanceof CompletionOnMethodReturnType) {

 				

-								token = access.token;

-

-								findFieldsAndMethods(

-									token,

-									(TypeBinding) qualifiedBinding,

-									scope,

-									access,

-									scope,

-									false);

-

+				CompletionOnMethodReturnType method = (CompletionOnMethodReturnType) astNode;

+				SingleTypeReference type = (CompletionOnSingleTypeReference) method.returnType;

+				token = type.token;

+				setSourceRange(type.sourceStart, type.sourceEnd);

+				findTypesAndPackages(token, scope);

+				

+				if(method.modifiers == CompilerModifiers.AccDefault) {

+					findMethods(token,null,scope.enclosingSourceType(),scope,new ObjectVector(),false,false,true,null,null,false);

+				}

+			} else {

+				

+				if (astNode instanceof CompletionOnSingleNameReference) {

+	

+					token = ((CompletionOnSingleNameReference) astNode).token;

+					findVariablesAndMethods(

+						token,

+						scope,

+						(CompletionOnSingleNameReference) astNode,

+						scope);

+					// can be the start of a qualified type name

+					findTypesAndPackages(token, scope);

+	

+				} else {

+	

+					if (astNode instanceof CompletionOnSingleTypeReference) {

+	

+						token = ((CompletionOnSingleTypeReference) astNode).token;

+						

+						assistNodeIsClass = astNode instanceof CompletionOnClassReference;

+						assistNodeIsException = astNode instanceof CompletionOnExceptionReference;

+						assistNodeIsInterface = astNode instanceof CompletionOnInterfaceReference;

+	

+						// can be the start of a qualified type name

+						if (qualifiedBinding == null) {

+							findTypesAndPackages(token, scope);

 							} else {

-

-								if (astNode instanceof CompletionOnMessageSend) {

-

-									CompletionOnMessageSend messageSend = (CompletionOnMessageSend) astNode;

-									TypeBinding[] argTypes =

-										computeTypes(messageSend.arguments, (BlockScope) scope);

-									token = messageSend.selector;

-									if (qualifiedBinding == null) {

-										

-										findImplicitMessageSends(token, argTypes, scope, messageSend, scope);

-									} else {

-

-										findMethods(

-											token,

-											argTypes,

-											(ReferenceBinding) qualifiedBinding,

-											scope,

-											new ObjectVector(),

-											false,

-											true,

-											false,

-											messageSend,

-											scope,

-											false);

-									}

-

+								findMemberTypes(

+								token,

+								(ReferenceBinding) qualifiedBinding,

+								scope,

+								scope.enclosingSourceType());

+						}

+					} else {

+						

+						if (astNode instanceof CompletionOnQualifiedNameReference) {

+	

+							insideQualifiedReference = true;

+							CompletionOnQualifiedNameReference ref =

+								(CompletionOnQualifiedNameReference) astNode;

+							token = ref.completionIdentifier;

+							long completionPosition = ref.sourcePositions[ref.sourcePositions.length - 1];

+	

+							if (qualifiedBinding instanceof VariableBinding) {

+	

+								setSourceRange((int) (completionPosition >>> 32), (int) completionPosition);

+								TypeBinding receiverType = ((VariableBinding) qualifiedBinding).type;

+								if (receiverType != null) {

+									findFieldsAndMethods(token, receiverType, scope, ref, scope,false);

+								}

+	

+							} else {

+	

+								if (qualifiedBinding instanceof ReferenceBinding) {

+	

+									ReferenceBinding receiverType = (ReferenceBinding) qualifiedBinding;

+									setSourceRange((int) (completionPosition >>> 32), (int) completionPosition);

+	

+									findMemberTypes(token, receiverType, scope, scope.enclosingSourceType());

+	

+									findClassField(token, (TypeBinding) qualifiedBinding, scope);

+	

+									findFields(

+										token,

+										receiverType,

+										scope,

+										new ObjectVector(),

+										new ObjectVector(),

+										true,

+										ref,

+										scope,

+										false);

+	

+									findMethods(

+										token,

+										null,

+										receiverType,

+										scope,

+										new ObjectVector(),

+										true,

+										false,

+										false,

+										ref,

+										scope,

+										false);

+	

 								} else {

-

-									if (astNode instanceof CompletionOnExplicitConstructorCall) {

-

-										CompletionOnExplicitConstructorCall constructorCall =

-											(CompletionOnExplicitConstructorCall) astNode;

+	

+									if (qualifiedBinding instanceof PackageBinding) {

+	

+										setSourceRange(astNode.sourceStart, (int) completionPosition);

+										// replace to the end of the completion identifier

+										findTypesAndSubpackages(token, (PackageBinding) qualifiedBinding);

+									}

+								}

+							}

+	

+						} else {

+	

+								if (astNode instanceof CompletionOnQualifiedTypeReference) {

+	

+								insideQualifiedReference = true;

+								

+								assistNodeIsClass = astNode instanceof CompletionOnQualifiedClassReference;

+								assistNodeIsException = astNode instanceof CompletionOnQualifiedExceptionReference;

+								assistNodeIsInterface = astNode instanceof CompletionOnQualifiedInterfaceReference;

+								

+								CompletionOnQualifiedTypeReference ref =

+									(CompletionOnQualifiedTypeReference) astNode;

+								token = ref.completionIdentifier;

+								long completionPosition = ref.sourcePositions[ref.tokens.length];

+	

+								// get the source positions of the completion identifier

+								if (qualifiedBinding instanceof ReferenceBinding) {

+	

+									setSourceRange((int) (completionPosition >>> 32), (int) completionPosition);

+									findMemberTypes(

+										token,

+										(ReferenceBinding) qualifiedBinding,

+										scope,

+										scope.enclosingSourceType());

+	

+								} else {

+	

+									if (qualifiedBinding instanceof PackageBinding) {

+	

+										setSourceRange(astNode.sourceStart, (int) completionPosition);

+										// replace to the end of the completion identifier

+										findTypesAndSubpackages(token, (PackageBinding) qualifiedBinding);

+									}

+								}

+	

+							} else {

+	

+								if (astNode instanceof CompletionOnMemberAccess) {

+	

+									CompletionOnMemberAccess access = (CompletionOnMemberAccess) astNode;

+									long completionPosition = access.nameSourcePosition;

+									setSourceRange((int) (completionPosition >>> 32), (int) completionPosition);

+					

+									token = access.token;

+	

+									findFieldsAndMethods(

+										token,

+										(TypeBinding) qualifiedBinding,

+										scope,

+										access,

+										scope,

+										false);

+	

+								} else {

+	

+									if (astNode instanceof CompletionOnMessageSend) {

+	

+										CompletionOnMessageSend messageSend = (CompletionOnMessageSend) astNode;

 										TypeBinding[] argTypes =

-											computeTypes(constructorCall.arguments, (BlockScope) scope);

-										findConstructors(

-											(ReferenceBinding) qualifiedBinding,

-											argTypes,

-											scope,

-											constructorCall,

-											false);

-

-									} else {

-

-										if (astNode instanceof CompletionOnQualifiedAllocationExpression) {

-

-											CompletionOnQualifiedAllocationExpression allocExpression =

-												(CompletionOnQualifiedAllocationExpression) astNode;

-											TypeBinding[] argTypes =

-												computeTypes(allocExpression.arguments, (BlockScope) scope);

+											computeTypes(messageSend.arguments, (BlockScope) scope);

+										token = messageSend.selector;

+										if (qualifiedBinding == null) {

 											

-											ReferenceBinding ref = (ReferenceBinding) qualifiedBinding;

-											if(ref.isClass()) {

-												if(!ref.isAbstract()) {

-													findConstructors(

+											findImplicitMessageSends(token, argTypes, scope, messageSend, scope);

+										} else {

+	

+											findMethods(

+												token,

+												argTypes,

+												(ReferenceBinding) qualifiedBinding,

+												scope,

+												new ObjectVector(),

+												false,

+												true,

+												false,

+												messageSend,

+												scope,

+												false);

+										}

+	

+									} else {

+	

+										if (astNode instanceof CompletionOnExplicitConstructorCall) {

+	

+											CompletionOnExplicitConstructorCall constructorCall =

+												(CompletionOnExplicitConstructorCall) astNode;

+											TypeBinding[] argTypes =

+												computeTypes(constructorCall.arguments, (BlockScope) scope);

+											findConstructors(

+												(ReferenceBinding) qualifiedBinding,

+												argTypes,

+												scope,

+												constructorCall,

+												false);

+	

+										} else {

+	

+											if (astNode instanceof CompletionOnQualifiedAllocationExpression) {

+	

+												CompletionOnQualifiedAllocationExpression allocExpression =

+													(CompletionOnQualifiedAllocationExpression) astNode;

+												TypeBinding[] argTypes =

+													computeTypes(allocExpression.arguments, (BlockScope) scope);

+												

+												ReferenceBinding ref = (ReferenceBinding) qualifiedBinding;

+												if(ref.isClass()) {

+													if(!ref.isAbstract()) {

+														findConstructors(

+															ref,

+															argTypes,

+															scope,

+															allocExpression,

+															false);

+													}

+												}

+												if(!ref.isFinal()){

+													findAnonymousType(

 														ref,

 														argTypes,

 														scope,

-														allocExpression,

-														false);

+														allocExpression);

 												}

-											}

-											if(!ref.isFinal()){

-												findAnonymousType(

-													ref,

-													argTypes,

-													scope,

-													allocExpression);

-											}

-

-										} else {

-

-											if (astNode instanceof CompletionOnClassLiteralAccess) {

-												CompletionOnClassLiteralAccess access = (CompletionOnClassLiteralAccess) astNode;

-												setSourceRange(access.classStart, access.sourceEnd);

-								

-												token = access.completionIdentifier;

-								

-												findClassField(token, (TypeBinding) qualifiedBinding, scope);

+	

 											} else {

-												if(astNode instanceof CompletionOnMethodName) {

-													CompletionOnMethodName method = (CompletionOnMethodName) astNode;

-														

-													setSourceRange(method.sourceStart, method.selectorEnd);

-														

-													FieldBinding[] fields = scope.enclosingSourceType().fields();

-													char[][] excludeNames = new char[fields.length][];

-													for(int i = 0 ; i < fields.length ; i++){

-														excludeNames[i] = fields[i].name;

-													}

-													

-													token = method.selector;

-													

-													findVariableNames(token, method.returnType, excludeNames);

+	

+												if (astNode instanceof CompletionOnClassLiteralAccess) {

+													CompletionOnClassLiteralAccess access = (CompletionOnClassLiteralAccess) astNode;

+													setSourceRange(access.classStart, access.sourceEnd);

+									

+													token = access.completionIdentifier;

+									

+													findClassField(token, (TypeBinding) qualifiedBinding, scope);

 												} else {

-													if (astNode instanceof CompletionOnFieldName) {

-														CompletionOnFieldName field = (CompletionOnFieldName) astNode;

-														

+													if(astNode instanceof CompletionOnMethodName) {

+														CompletionOnMethodName method = (CompletionOnMethodName) astNode;

+															

+														setSourceRange(method.sourceStart, method.selectorEnd);

+															

 														FieldBinding[] fields = scope.enclosingSourceType().fields();

 														char[][] excludeNames = new char[fields.length][];

 														for(int i = 0 ; i < fields.length ; i++){

 															excludeNames[i] = fields[i].name;

 														}

 														

-														token = field.realName;

+														token = method.selector;

 														

-														findVariableNames(field.realName, field.type, excludeNames);

+														findVariableNames(token, method.returnType, excludeNames);

 													} else {

-														if (astNode instanceof CompletionOnLocalName ||

-															astNode instanceof CompletionOnArgumentName){

-															LocalDeclaration variable = (LocalDeclaration) astNode;

+														if (astNode instanceof CompletionOnFieldName) {

+															CompletionOnFieldName field = (CompletionOnFieldName) astNode;

 															

-															LocalVariableBinding[] locals = ((BlockScope)scope).locals;

-															char[][] excludeNames = new char[locals.length][];

-															int localCount = 0;

-															for(int i = 0 ; i < locals.length ; i++){

-																if(locals[i] != null) {

-																	excludeNames[localCount++] = locals[i].name;

+															FieldBinding[] fields = scope.enclosingSourceType().fields();

+															char[][] excludeNames = new char[fields.length][];

+															for(int i = 0 ; i < fields.length ; i++){

+																excludeNames[i] = fields[i].name;

+															}

+															

+															token = field.realName;

+															

+															findVariableNames(field.realName, field.type, excludeNames);

+														} else {

+															if (astNode instanceof CompletionOnLocalName ||

+																astNode instanceof CompletionOnArgumentName){

+																LocalDeclaration variable = (LocalDeclaration) astNode;

+																

+																LocalVariableBinding[] locals = ((BlockScope)scope).locals;

+																char[][] excludeNames = new char[locals.length][];

+																int localCount = 0;

+																for(int i = 0 ; i < locals.length ; i++){

+																	if(locals[i] != null) {

+																		excludeNames[localCount++] = locals[i].name;

+																	}

 																}

+																System.arraycopy(excludeNames, 0, excludeNames = new char[localCount][], 0, localCount);

+																

+																if(variable instanceof CompletionOnLocalName){

+																	token = ((CompletionOnLocalName) variable).realName;

+																} else {

+																	token = ((CompletionOnArgumentName) variable).realName;

+																}

+																findVariableNames(token, variable.type, excludeNames);

 															}

-															System.arraycopy(excludeNames, 0, excludeNames = new char[localCount][], 0, localCount);

-															

-															if(variable instanceof CompletionOnLocalName){

-																token = ((CompletionOnLocalName) variable).realName;

-															} else {

-																token = ((CompletionOnArgumentName) variable).realName;

-															}

-															findVariableNames(token, variable.type, excludeNames);

 														}

 													}

 												}

diff --git a/codeassist/org/eclipse/jdt/internal/codeassist/ISearchableNameEnvironment.java b/codeassist/org/eclipse/jdt/internal/codeassist/ISearchableNameEnvironment.java
index d8f6ed7..959f037 100644
--- a/codeassist/org/eclipse/jdt/internal/codeassist/ISearchableNameEnvironment.java
+++ b/codeassist/org/eclipse/jdt/internal/codeassist/ISearchableNameEnvironment.java
@@ -8,7 +8,7 @@
 

 /**

  * This interface defines the API that may be used to implement any

- * search-based tool (such as a CodeAssist, a Finder, ...)

+ * search-based tool (such as a CodeAssist, a Finder, ...).

  * It is mainly used to hide from the search tool the implementation

  * of the underlying environment and its constructions.

  */

diff --git a/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionOnSingleTypeReference.java b/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionOnSingleTypeReference.java
index 6630f2e..c07e824 100644
--- a/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionOnSingleTypeReference.java
+++ b/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionOnSingleTypeReference.java
@@ -22,8 +22,10 @@
 import org.eclipse.jdt.internal.compiler.lookup.*;

 

 public class CompletionOnSingleTypeReference extends SingleTypeReference {

+public boolean isCompletionNode;

 public CompletionOnSingleTypeReference(char[] source, long pos) {

 	super(source, pos);

+	isCompletionNode = true;

 }

 public void aboutToResolve(Scope scope) {

 	getTypeBinding(scope);

@@ -35,10 +37,18 @@
 	return this;

 }

 public TypeBinding getTypeBinding(Scope scope) {

-	throw new CompletionNodeFound(this, scope);

+	if(isCompletionNode) {

+		throw new CompletionNodeFound(this, scope);

+	} else {

+		return super.getTypeBinding(scope);

+	}

 }

 public TypeBinding resolveTypeEnclosing(BlockScope scope, ReferenceBinding enclosingType) {

-	throw new CompletionNodeFound(this, enclosingType, scope);

+	if(isCompletionNode) {

+		throw new CompletionNodeFound(this, enclosingType, scope);

+	} else {

+		return super.resolveTypeEnclosing(scope, enclosingType);

+	}

 }

 public String toStringExpression(int tab){

 

diff --git a/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionParser.java b/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionParser.java
index a996f05..e664afb 100644
--- a/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionParser.java
+++ b/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionParser.java
@@ -619,7 +619,47 @@
 	}

 	this.restartRecovery = true;

 }

+protected void consumeEnterVariable() {

+	identifierPtr--;

+	identifierLengthPtr--;

 

+	boolean isLocalDeclaration = nestedMethod[nestedType] != 0;

+	int variableIndex = variablesCounter[nestedType];

+	int extendedDimension = intStack[intPtr + 1];

+	

+	if(isLocalDeclaration || indexOfAssistIdentifier() < 0 || variableIndex != 0 || extendedDimension != 0) {

+		identifierPtr++;

+		identifierLengthPtr++;

+		super.consumeEnterVariable();

+	} else {

+		restartRecovery = true;

+		

+		// recovery

+		if (currentElement != null) {

+			int nameSourceStart = (int)(identifierPositionStack[identifierPtr] >>> 32);

+			intPtr--;

+			

+			TypeReference type = getTypeReference(intStack[intPtr--]);

+			intPtr--;

+			

+			if (!(currentElement instanceof RecoveredType)

+				&& (currentToken == TokenNameDOT

+					|| (scanner.getLineNumber(type.sourceStart)

+							!= scanner.getLineNumber(nameSourceStart)))){

+				lastCheckPoint = nameSourceStart;

+				restartRecovery = true;

+				return;

+			}

+			

+			FieldDeclaration completionFieldDecl = new CompletionOnFieldType(type, false);

+			completionFieldDecl.modifiers = intStack[intPtr--];

+			assistNode = completionFieldDecl;

+			lastCheckPoint = type.sourceEnd + 1;

+			currentElement = currentElement.add(completionFieldDecl, 0);

+			lastIgnoredToken = -1;

+		}

+	}

+}

 protected void consumeExitVariableWithInitialization() {

 	super.consumeExitVariableWithInitialization();

 	

@@ -683,8 +723,50 @@
 	this.nextTypeReferenceIsInterface = false;

 }

 protected void consumeMethodHeaderName() {

-	if (this.indexOfAssistIdentifier() < 0) {

-		super.consumeMethodHeaderName();

+	if(this.indexOfAssistIdentifier() < 0) {

+		identifierPtr--;

+		identifierLengthPtr--;

+		if(this.indexOfAssistIdentifier() != 0) {

+			identifierPtr++;

+			identifierLengthPtr++;

+			super.consumeMethodHeaderName();

+		} else {

+			restartRecovery = true;

+			

+			// recovery

+			if (currentElement != null) {

+				//name

+				char[] selector = identifierStack[identifierPtr + 1];

+				long selectorSource = identifierPositionStack[identifierPtr + 1];

+				

+				//type

+				TypeReference type = getTypeReference(intStack[intPtr--]);

+				((CompletionOnSingleTypeReference)type).isCompletionNode = false;

+				//modifiers

+				int declarationSourceStart = intStack[intPtr--];

+				int modifiers = intStack[intPtr--];

+				

+				if(scanner.getLineNumber(type.sourceStart) != scanner.getLineNumber((int) (selectorSource >>> 32))) {

+					FieldDeclaration completionFieldDecl = new CompletionOnFieldType(type, false);

+					completionFieldDecl.modifiers = modifiers;

+					assistNode = completionFieldDecl;

+					lastCheckPoint = type.sourceEnd + 1;

+					currentElement = currentElement.add(completionFieldDecl, 0);

+					lastIgnoredToken = -1;

+				} else {

+					CompletionOnMethodReturnType md = new CompletionOnMethodReturnType(type, this.compilationUnit.compilationResult);

+					md.selector = selector;

+					md.declarationSourceStart = declarationSourceStart;

+					md.modifiers = modifiers;

+					md.bodyStart = lParenPos+1;

+					listLength = 0; // initialize listLength before reading parameters/throws

+					assistNode = md;

+					this.lastCheckPoint = md.bodyStart;

+					currentElement = currentElement.add(md, 0);

+					lastIgnoredToken = -1;

+				}

+			}

+		}

 	} else {

 		// MethodHeaderName ::= Modifiersopt Type 'Identifier' '('

 		CompletionOnMethodName md = new CompletionOnMethodName(this.compilationUnit.compilationResult);

@@ -692,7 +774,6 @@
 		//name

 		md.selector = identifierStack[identifierPtr];

 		long selectorSource = identifierPositionStack[identifierPtr--];

-		identifierLengthPtr--;

 		//type

 		md.returnType = getTypeReference(intStack[intPtr--]);

 		//modifiers

@@ -722,10 +803,11 @@
 				lastCheckPoint = md.sourceStart;

 				restartRecovery = true;

 			}

-		}		

+		}

 	}

 }

 

+

 protected void consumeMethodBody() {

 	super.consumeMethodBody();

 	this.labelCounterPtr--;

diff --git a/compiler/org/eclipse/jdt/core/compiler/IScanner.java b/compiler/org/eclipse/jdt/core/compiler/IScanner.java
index 008ff86..e5c2d7c 100644
--- a/compiler/org/eclipse/jdt/core/compiler/IScanner.java
+++ b/compiler/org/eclipse/jdt/core/compiler/IScanner.java
@@ -21,7 +21,7 @@
   * 
   * When encountering lexical errors, an <code>InvalidInputException</code> is thrown.
   * 
-  * @see ToolFactory
+  * @see org.eclipse.jdt.core.ToolFactory
   * @see ITerminalSymbols
   * @since 2.0
   */
diff --git a/compiler/org/eclipse/jdt/internal/compiler/ClassFile.java b/compiler/org/eclipse/jdt/internal/compiler/ClassFile.java
index 6118995..07de692 100644
--- a/compiler/org/eclipse/jdt/internal/compiler/ClassFile.java
+++ b/compiler/org/eclipse/jdt/internal/compiler/ClassFile.java
@@ -2534,7 +2534,7 @@
 	/**

 	 * INTERNAL USE-ONLY

 	 * That method generates the header of a code attribute.

-	 * - the index inside the constant pool for the attribute name (i.e. Code)

+	 * - the index inside the constant pool for the attribute name (i.e.&nbsp;Code)

 	 * - leave some space for attribute_length(4), max_stack(2), max_locals(2), code_length(4).

 	 */

 	public void generateCodeAttributeHeader() {

diff --git a/compiler/org/eclipse/jdt/internal/compiler/Compiler.java b/compiler/org/eclipse/jdt/internal/compiler/Compiler.java
index c1b22c6..b821640 100644
--- a/compiler/org/eclipse/jdt/internal/compiler/Compiler.java
+++ b/compiler/org/eclipse/jdt/internal/compiler/Compiler.java
@@ -61,13 +61,13 @@
 	 *      specify the rules for handling problems (stop on first error or accumulate

 	 *      them all) and at the same time perform some actions such as opening a dialog

 	 *      in UI when compiling interactively.

-	 *      @see org.eclipse.jdt.internal.compiler.api.problem.DefaultErrorHandlingPolicies

+	 *      @see org.eclipse.jdt.internal.compiler.DefaultErrorHandlingPolicies

 	 *      

 	 *  @param requestor org.eclipse.jdt.internal.compiler.api.ICompilerRequestor

 	 *      Component which will receive and persist all compilation results and is intended

 	 *      to consume them as they are produced. Typically, in a batch compiler, it is 

 	 *      responsible for writing out the actual .class files to the file system.

-	 *      @see org.eclipse.jdt.internal.compiler.api.CompilationResult

+	 *      @see org.eclipse.jdt.internal.compiler.CompilationResult

 	 *

 	 *  @param problemFactory org.eclipse.jdt.internal.compiler.api.problem.IProblemFactory

 	 *      Factory used inside the compiler to create problem descriptors. It allows the

@@ -128,13 +128,13 @@
 	 *      specify the rules for handling problems (stop on first error or accumulate

 	 *      them all) and at the same time perform some actions such as opening a dialog

 	 *      in UI when compiling interactively.

-	 *      @see org.eclipse.jdt.internal.compiler.api.problem.DefaultErrorHandlingPolicies

+	 *      @see org.eclipse.jdt.internal.compiler.DefaultErrorHandlingPolicies

 	 *      

 	 *  @param requestor org.eclipse.jdt.internal.compiler.api.ICompilerRequestor

 	 *      Component which will receive and persist all compilation results and is intended

 	 *      to consume them as they are produced. Typically, in a batch compiler, it is 

 	 *      responsible for writing out the actual .class files to the file system.

-	 *      @see org.eclipse.jdt.internal.compiler.api.CompilationResult

+	 *      @see org.eclipse.jdt.internal.compiler.CompilationResult

 	 *

 	 *  @param problemFactory org.eclipse.jdt.internal.compiler.api.problem.IProblemFactory

 	 *      Factory used inside the compiler to create problem descriptors. It allows the

diff --git a/compiler/org/eclipse/jdt/internal/compiler/IDocumentElementRequestor.java b/compiler/org/eclipse/jdt/internal/compiler/IDocumentElementRequestor.java
index 7518d51..f50ae77 100644
--- a/compiler/org/eclipse/jdt/internal/compiler/IDocumentElementRequestor.java
+++ b/compiler/org/eclipse/jdt/internal/compiler/IDocumentElementRequestor.java
@@ -1,14 +1,12 @@
 package org.eclipse.jdt.internal.compiler;

 

-import org.eclipse.jdt.core.compiler.*;

-

-

+import org.eclipse.jdt.core.compiler.IProblem;

 

 /*

  * (c) Copyright IBM Corp. 2000, 2001.

  * All Rights Reserved.

  */

-/*

+/**

  * Part of the source element parser responsible for building the output.

  * It gets notified of structural information as they are detected, relying

  * on the requestor to assemble them together, based on the notifications it got.

@@ -321,9 +319,9 @@
  * @param parameterNames - a list of the names of the parameters

  * @param parametersEnd - a source position corresponding to the last character of the

  *  parameter list

- * @extendedReturnTypeDimensionCount - the array dimension count as supplied on the

+ * @param extendedReturnTypeDimensionCount - the array dimension count as supplied on the

  *  end of the parameter list, i.e. public int foo()[] {}

- * @extendedReturnTypeDimensionEnd - a source position corresponding to the last character

+ * @param extendedReturnTypeDimensionEnd - a source position corresponding to the last character

  *  of the extended return type dimension. This position should be -1 in case there is no extended

  *  dimension for the type.

  * @param exceptionTypes - a list of the exception types

diff --git a/compiler/org/eclipse/jdt/internal/compiler/ast/EqualExpression.java b/compiler/org/eclipse/jdt/internal/compiler/ast/EqualExpression.java
index 6d96e48..a81bf77 100644
--- a/compiler/org/eclipse/jdt/internal/compiler/ast/EqualExpression.java
+++ b/compiler/org/eclipse/jdt/internal/compiler/ast/EqualExpression.java
@@ -206,7 +206,7 @@
 	}

 }

 /**

- * Normal == or != code generation

+ * Normal == or != code generation.

  *

  * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope

  * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream

diff --git a/compiler/org/eclipse/jdt/internal/compiler/ast/FieldDeclaration.java b/compiler/org/eclipse/jdt/internal/compiler/ast/FieldDeclaration.java
index 9efa08d..d768123 100644
--- a/compiler/org/eclipse/jdt/internal/compiler/ast/FieldDeclaration.java
+++ b/compiler/org/eclipse/jdt/internal/compiler/ast/FieldDeclaration.java
@@ -77,8 +77,8 @@
 	}

 

 	/**

-	 * Code generation for a field declaration

-	 *	i.e. normal assignment to a field 

+	 * Code generation for a field declaration:

+	 *	i.e.&nbsp;normal assignment to a field 

 	 *

 	 * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope

 	 * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream

diff --git a/compiler/org/eclipse/jdt/internal/compiler/ast/Initializer.java b/compiler/org/eclipse/jdt/internal/compiler/ast/Initializer.java
index 4735dbe..cf2453e 100644
--- a/compiler/org/eclipse/jdt/internal/compiler/ast/Initializer.java
+++ b/compiler/org/eclipse/jdt/internal/compiler/ast/Initializer.java
@@ -32,8 +32,8 @@
 	}

 

 	/**

-	 * Code generation for a non-static initializer

-	 *	i.e. normal block code gen

+	 * Code generation for a non-static initializer.

+	 *	i.e.&nbsp;normal block code gen

 	 *

 	 * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope

 	 * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream

diff --git a/compiler/org/eclipse/jdt/internal/compiler/ast/LocalDeclaration.java b/compiler/org/eclipse/jdt/internal/compiler/ast/LocalDeclaration.java
index b8c8418..e1d5676 100644
--- a/compiler/org/eclipse/jdt/internal/compiler/ast/LocalDeclaration.java
+++ b/compiler/org/eclipse/jdt/internal/compiler/ast/LocalDeclaration.java
@@ -65,8 +65,8 @@
 	}

 

 	/**

-	 * Code generation for a local declaration

-	 *	i.e. normal assignment to a local variable + unused variable handling 

+	 * Code generation for a local declaration:

+	 *	i.e.&nbsp;normal assignment to a local variable + unused variable handling 

 	 */

 	public void generateCode(BlockScope currentScope, CodeStream codeStream) {

 

diff --git a/compiler/org/eclipse/jdt/internal/compiler/ast/TypeDeclaration.java b/compiler/org/eclipse/jdt/internal/compiler/ast/TypeDeclaration.java
index a25deda..eb6af5d 100644
--- a/compiler/org/eclipse/jdt/internal/compiler/ast/TypeDeclaration.java
+++ b/compiler/org/eclipse/jdt/internal/compiler/ast/TypeDeclaration.java
@@ -75,7 +75,7 @@
 	 * not need to preserve some of the method specific cached entries since this will be the first method).

 	 * inserts the clinit method declaration in the first position.

 	 * 

-	 * @see org.eclipse.jdt.internal.compiler.codegen.ConstantPool.resetForClinit(int, int)

+	 * @see org.eclipse.jdt.internal.compiler.codegen.ConstantPool#resetForClinit(int, int)

 	 */

 	public final void addClinit() {

 

diff --git a/compiler/org/eclipse/jdt/internal/compiler/classfmt/ClassFileReader.java b/compiler/org/eclipse/jdt/internal/compiler/classfmt/ClassFileReader.java
index b6a3a06..16675ee 100644
--- a/compiler/org/eclipse/jdt/internal/compiler/classfmt/ClassFileReader.java
+++ b/compiler/org/eclipse/jdt/internal/compiler/classfmt/ClassFileReader.java
@@ -42,7 +42,6 @@
  * 

  * @param fullyInitialize boolean

  * 		Flag to fully initialize the new object

- * @return org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader

  * @exception ClassFormatException

  */

 public ClassFileReader(byte[] classFileBytes, char[] fileName, boolean fullyInitialize) throws ClassFormatException {

@@ -210,13 +209,9 @@
 }

 

 /**

- * @param classFileBytes byte[]

- * 		Actual bytes of a .class file

+ * @param classFileBytes Actual bytes of a .class file

+ * @param fileName	Actual name of the file that contains the bytes, can be null

  * 

- * @param fileName char[]

- * 		Actual name of the file that contains the bytes, can be null

- * 

- * @return org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader

  * @exception ClassFormatException

  */

 public ClassFileReader(byte classFileBytes[], char[] fileName) throws ClassFormatException {

diff --git a/compiler/org/eclipse/jdt/internal/compiler/classfmt/FieldInfo.java b/compiler/org/eclipse/jdt/internal/compiler/classfmt/FieldInfo.java
index 600fef4..5156f7d 100644
--- a/compiler/org/eclipse/jdt/internal/compiler/classfmt/FieldInfo.java
+++ b/compiler/org/eclipse/jdt/internal/compiler/classfmt/FieldInfo.java
@@ -68,8 +68,7 @@
 	if (accessFlags == -1) {

 		// compute the accessflag. Don't forget the deprecated attribute

 		accessFlags = u2At(0);

-		readDeprecatedAttributes();

-		readSyntheticAttribute();

+		readDeprecatedAndSyntheticAttributes();

 		if (isDeprecated) {

 			accessFlags |= AccDeprecated;

 		}

@@ -181,7 +180,7 @@
 			.equals(attributeName, ConstantValueName)) {

 			isConstant = true;

 			// read the right constant

-			int relativeOffset = constantPoolOffsets[u2At(14)] - structOffset;

+			int relativeOffset = constantPoolOffsets[u2At(readOffset + 6)] - structOffset;

 			switch (u1At(relativeOffset)) {

 				case IntegerTag :

 					char[] sign = getTypeName();

@@ -232,7 +231,7 @@
 		constant = Constant.NotAConstant;

 	}

 }

-private void readDeprecatedAttributes() {

+private void readDeprecatedAndSyntheticAttributes() {

 	int attributesCount = u2At(6);

 	int readOffset = 8;

 	for (int i = 0; i < attributesCount; i++) {

@@ -240,17 +239,7 @@
 		char[] attributeName = utf8At(utf8Offset + 3, u2At(utf8Offset + 1));

 		if (CharOperation.equals(attributeName, DeprecatedName)) {

 			isDeprecated = true;

-		}

-		readOffset += (6 + u4At(readOffset + 2));

-	}

-}

-private void readSyntheticAttribute() {

-	int attributesCount = u2At(6);

-	int readOffset = 8;

-	for (int i = 0; i < attributesCount; i++) {

-		int utf8Offset = constantPoolOffsets[u2At(readOffset)] - structOffset;

-		char[] attributeName = utf8At(utf8Offset + 3, u2At(utf8Offset + 1));

-		if (CharOperation.equals(attributeName, SyntheticName)) {

+		} else if (CharOperation.equals(attributeName, SyntheticName)) {

 			isSynthetic = true;

 		}

 		readOffset += (6 + u4At(readOffset + 2));

diff --git a/compiler/org/eclipse/jdt/internal/compiler/classfmt/MethodInfo.java b/compiler/org/eclipse/jdt/internal/compiler/classfmt/MethodInfo.java
index a158de1..d9876a2 100644
--- a/compiler/org/eclipse/jdt/internal/compiler/classfmt/MethodInfo.java
+++ b/compiler/org/eclipse/jdt/internal/compiler/classfmt/MethodInfo.java
@@ -85,8 +85,7 @@
 	if (accessFlags == -1) {

 		// compute the accessflag. Don't forget the deprecated attribute

 		accessFlags = u2At(0);

-		readDeprecatedAttribute();

-		readSyntheticAttribute();

+		readDeprecatedAndSyntheticAttributes();

 		if (isDeprecated) {

 			accessFlags |= AccDeprecated;

 		}

@@ -133,7 +132,7 @@
 public boolean isSynthetic() {

 	return (getModifiers() & AccSynthetic) != 0;

 }

-private void readDeprecatedAttribute() {

+private void readDeprecatedAndSyntheticAttributes() {

 	int attributesCount = u2At(6);

 	int readOffset = 8;

 	for (int i = 0; i < attributesCount; i++) {

@@ -141,17 +140,7 @@
 		char[] attributeName = utf8At(utf8Offset + 3, u2At(utf8Offset + 1));

 		if (CharOperation.equals(attributeName, DeprecatedName)) {

 			isDeprecated = true;

-		}

-		readOffset += (6 + u4At(readOffset + 2));

-	}

-}

-private void readSyntheticAttribute() {

-	int attributesCount = u2At(6);

-	int readOffset = 8;

-	for (int i = 0; i < attributesCount; i++) {

-		int utf8Offset = constantPoolOffsets[u2At(readOffset)] - structOffset;

-		char[] attributeName = utf8At(utf8Offset + 3, u2At(utf8Offset + 1));

-		if (CharOperation.equals(attributeName, SyntheticName)) {

+		} else if (CharOperation.equals(attributeName, SyntheticName)) {

 			isSynthetic = true;

 		}

 		readOffset += (6 + u4At(readOffset + 2));

diff --git a/compiler/org/eclipse/jdt/internal/compiler/codegen/CharArrayCache.java b/compiler/org/eclipse/jdt/internal/compiler/codegen/CharArrayCache.java
index dcd721f..a809538 100644
--- a/compiler/org/eclipse/jdt/internal/compiler/codegen/CharArrayCache.java
+++ b/compiler/org/eclipse/jdt/internal/compiler/codegen/CharArrayCache.java
@@ -45,7 +45,6 @@
  *

  * @param char[] key the key that we are looking for

  * @return boolean

- * @see ConstantPoolCache#contains

  */

 public boolean containsKey(char[] key) {

 	int index = hashCodeChar(key);

@@ -61,7 +60,6 @@
  * @param key <CODE>char[]</CODE> the specified key

  * @return int the element for the key or -1 if the key is not

  *	defined in the hash table.

- * @see ConstantPoolCache#put

  */

 public int get(char[] key) {

 	int index = hashCodeChar(key);

@@ -88,7 +86,6 @@
  * 

  * @param key <CODE>Object</CODE> the specified key in the hashtable

  * @param value <CODE>int</CODE> the specified element

- * @see ConstantPoolCache#get

  * @return int the old value of the key, or -1 if it did not have one.

  */

 public int put(char[] key, int value) { 

diff --git a/compiler/org/eclipse/jdt/internal/compiler/codegen/CodeStream.java b/compiler/org/eclipse/jdt/internal/compiler/codegen/CodeStream.java
index 31c411b..a00743f 100644
--- a/compiler/org/eclipse/jdt/internal/compiler/codegen/CodeStream.java
+++ b/compiler/org/eclipse/jdt/internal/compiler/codegen/CodeStream.java
@@ -5504,7 +5504,7 @@
 }

 /**

  * Write a unsigned 8 bits value into the byte array

- * @param 

+ * @param b the signed byte

  */

 public final void writeSignedByte(int b) {

 	try {

@@ -5516,7 +5516,7 @@
 }

 /**

  * Write a signed 16 bits value into the byte array

- * @param 

+ * @param b the signed short

  */

 public final void writeSignedShort(int b) {

 	try {

@@ -5602,7 +5602,7 @@
 }

 /**

  * Write a unsigned 8 bits value into the byte array

- * @param 

+ * @param b the unsigned byte

  */

 public final void writeUnsignedByte(int b) {

 	try {

@@ -5614,7 +5614,7 @@
 }

 /**

  * Write a unsigned 16 bits value into the byte array

- * @param 

+ * @param b the unsigned short

  */

 public final void writeUnsignedShort(int b) {

 	try {

@@ -5632,7 +5632,7 @@
 }

 /**

  * Write a unsigned 32 bits value into the byte array

- * @param 

+ * @param value the unsigned word

  */

 public final void writeUnsignedWord(int value) {

 	try {

diff --git a/compiler/org/eclipse/jdt/internal/compiler/codegen/ConstantPool.java b/compiler/org/eclipse/jdt/internal/compiler/codegen/ConstantPool.java
index 6d62fde..2cb8566 100644
--- a/compiler/org/eclipse/jdt/internal/compiler/codegen/ConstantPool.java
+++ b/compiler/org/eclipse/jdt/internal/compiler/codegen/ConstantPool.java
@@ -3059,7 +3059,7 @@
  * This method is used to clean the receiver in case of a clinit header is generated, but the 

  * clinit has no code.

  * This implementation assumes that the clinit is the first method to be generated.

- * @see org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.addClinit()

+ * @see org.eclipse.jdt.internal.compiler.ast.TypeDeclaration#addClinit()

  */

 public void resetForClinit(int constantPoolIndex, int constantPoolOffset) {

 	currentIndex = constantPoolIndex;

diff --git a/compiler/org/eclipse/jdt/internal/compiler/codegen/DoubleCache.java b/compiler/org/eclipse/jdt/internal/compiler/codegen/DoubleCache.java
index bb798cd..288cfc1 100644
--- a/compiler/org/eclipse/jdt/internal/compiler/codegen/DoubleCache.java
+++ b/compiler/org/eclipse/jdt/internal/compiler/codegen/DoubleCache.java
@@ -42,7 +42,6 @@
  *

  * @param key <CODE>double</CODE> the key that we are looking for

  * @return boolean

- * @see ConstantPoolCache#contains

  */

 public boolean containsKey(double key) {

 	if (key == 0.0) {

@@ -70,7 +69,6 @@
  * @param key <CODE>double</CODE> the specified key

  * @return int the element for the key or -1 if the key is not

  *  defined in the hash table.

- * @see ConstantPoolCache#put

  */

 public int get(double key) {

 	if (key == 0.0) {

@@ -115,7 +113,7 @@
 /**

  * Converts to a rather lengthy String.

  *

- * return String the ascii representation of the receiver

+ * @return String the ascii representation of the receiver

  */

 public String toString() {

 	int max = elementSize;

diff --git a/compiler/org/eclipse/jdt/internal/compiler/codegen/FieldNameAndTypeCache.java b/compiler/org/eclipse/jdt/internal/compiler/codegen/FieldNameAndTypeCache.java
index 10d146e..4e53b3f 100644
--- a/compiler/org/eclipse/jdt/internal/compiler/codegen/FieldNameAndTypeCache.java
+++ b/compiler/org/eclipse/jdt/internal/compiler/codegen/FieldNameAndTypeCache.java
@@ -45,7 +45,6 @@
  *

  * @param char[] key the key that we are looking for

  * @return boolean

- * @see ConstantPoolCache#contains

  */

 public boolean containsKey(FieldBinding key) {

 	int index = hashCode(key);

@@ -67,7 +66,6 @@
  * @param key <CODE>char[]</CODE> the specified key

  * @return int the element for the key or -1 if the key is not

  *	defined in the hash table.

- * @see ConstantPoolCache#put

  */

 public int get(FieldBinding key) {

 	int index = hashCode(key);

@@ -94,7 +92,6 @@
  * 

  * @param key <CODE>Object</CODE> the specified key in the hashtable

  * @param value <CODE>int</CODE> the specified element

- * @see ConstantPoolCache#get

  * @return int the old value of the key, or -1 if it did not have one.

  */

 public int put(FieldBinding key, int value) { 

@@ -138,7 +135,7 @@
 /**

  * Converts to a rather lengthy String.

  *

- * return String the ascii representation of the receiver

+ * @return String the ascii representation of the receiver

  */

 public String toString() {

 	int max = size();

diff --git a/compiler/org/eclipse/jdt/internal/compiler/codegen/FloatCache.java b/compiler/org/eclipse/jdt/internal/compiler/codegen/FloatCache.java
index e819264..a630771 100644
--- a/compiler/org/eclipse/jdt/internal/compiler/codegen/FloatCache.java
+++ b/compiler/org/eclipse/jdt/internal/compiler/codegen/FloatCache.java
@@ -42,7 +42,6 @@
  *

  * @param key <CODE>float</CODE> the key that we are looking for

  * @return boolean

- * @see ConstantPoolCache#contains

  */

 public boolean containsKey(float key) {

 	if (key == 0.0f) {

@@ -70,7 +69,6 @@
  * @param key <CODE>float</CODE> the specified key

  * @return int the element for the key or -1 if the key is not

  *  defined in the hash table.

- * @see ConstantPoolCache#put

  */

 public int get(float key) {

 	if (key == 0.0f) {

@@ -115,7 +113,7 @@
 /**

  * Converts to a rather lengthy String.

  *

- * return String the ascii representation of the receiver

+ * @return String the ascii representation of the receiver

  */

 public String toString() {

 	int max = elementSize;

diff --git a/compiler/org/eclipse/jdt/internal/compiler/codegen/IntegerCache.java b/compiler/org/eclipse/jdt/internal/compiler/codegen/IntegerCache.java
index e74f996..c6f071e 100644
--- a/compiler/org/eclipse/jdt/internal/compiler/codegen/IntegerCache.java
+++ b/compiler/org/eclipse/jdt/internal/compiler/codegen/IntegerCache.java
@@ -44,7 +44,6 @@
  *

  * @param key <CODE>double</CODE> the key that we are looking for

  * @return boolean

- * @see ConstantPoolCache#contains

  */

 public boolean containsKey(int key) {

 	int index = hash(key);

@@ -60,7 +59,6 @@
  * @param key <CODE>double</CODE> the specified key

  * @return int the element for the key or -1 if the key is not

  *  defined in the hash table.

- * @see ConstantPoolCache#put

  */

 public int get(int key) {

 	int index = hash(key);

@@ -75,7 +73,6 @@
  * Return a hashcode for the value of the key parameter.

  * @param key int

  * @return int the hash code corresponding to the key value

- * @see ConstantPoolCache#put

  */

 public int hash(int key) {

 	return (key & 0x7FFFFFFF) % keyTable.length;

@@ -133,7 +130,7 @@
 /**

  * Converts to a rather lengthy String.

  *

- * return String the ascii representation of the receiver

+ * @return String the ascii representation of the receiver

  */

 public String toString() {

 	int max = size();

diff --git a/compiler/org/eclipse/jdt/internal/compiler/codegen/LongCache.java b/compiler/org/eclipse/jdt/internal/compiler/codegen/LongCache.java
index e4f519e..931e346 100644
--- a/compiler/org/eclipse/jdt/internal/compiler/codegen/LongCache.java
+++ b/compiler/org/eclipse/jdt/internal/compiler/codegen/LongCache.java
@@ -44,7 +44,6 @@
  *

  * @param key <CODE>long</CODE> the key that we are looking for

  * @return boolean

- * @see ConstantPoolCache#contains

  */

 public boolean containsKey(long key) {

 	int index = hash(key);

@@ -60,7 +59,6 @@
  * @param key <CODE>long</CODE> the specified key

  * @return int the element for the key or -1 if the key is not

  *  defined in the hash table.

- * @see ConstantPoolCache#put

  */

 public int get(long key) {

 	int index = hash(key);

@@ -75,7 +73,6 @@
  * Return a hashcode for the value of the key parameter.

  * @param key long

  * @return int the hash code corresponding to the key value

- * @see ConstantPoolCache#put

  */

 public int hash(long key) {

 	return ((int) key & 0x7FFFFFFF) % keyTable.length;

@@ -133,7 +130,7 @@
 /**

  * Converts to a rather lengthy String.

  *

- * return String the ascii representation of the receiver

+ * @return String the ascii representation of the receiver

  */

 public String toString() {

 	int max = size();

diff --git a/compiler/org/eclipse/jdt/internal/compiler/codegen/MethodNameAndTypeCache.java b/compiler/org/eclipse/jdt/internal/compiler/codegen/MethodNameAndTypeCache.java
index 9a8ca43..3d5eecc 100644
--- a/compiler/org/eclipse/jdt/internal/compiler/codegen/MethodNameAndTypeCache.java
+++ b/compiler/org/eclipse/jdt/internal/compiler/codegen/MethodNameAndTypeCache.java
@@ -45,7 +45,6 @@
  *

  * @param char[] key the key that we are looking for

  * @return boolean

- * @see ConstantPoolCache#contains

  */

 public boolean containsKey(MethodBinding key) {

 	int index = hashCode(key);

@@ -68,7 +67,6 @@
  * @param key <CODE>char[]</CODE> the specified key

  * @return int the element for the key or -1 if the key is not

  *	defined in the hash table.

- * @see ConstantPoolCache#put

  */

 public int get(MethodBinding key) {

 	int index = hashCode(key);

@@ -95,7 +93,6 @@
  * 

  * @param key <CODE>Object</CODE> the specified key in the hashtable

  * @param value <CODE>int</CODE> the specified element

- * @see ConstantPoolCache#get

  * @return int the old value of the key, or -1 if it did not have one.

  */

 public int put(MethodBinding key, int value) { 

@@ -139,7 +136,7 @@
 /**

  * Converts to a rather lengthy String.

  *

- * return String the ascii representation of the receiver

+ * @return String the ascii representation of the receiver

  */

 public String toString() {

 	int max = size();

diff --git a/compiler/org/eclipse/jdt/internal/compiler/codegen/ObjectCache.java b/compiler/org/eclipse/jdt/internal/compiler/codegen/ObjectCache.java
index 64363a6..2b8ca42 100644
--- a/compiler/org/eclipse/jdt/internal/compiler/codegen/ObjectCache.java
+++ b/compiler/org/eclipse/jdt/internal/compiler/codegen/ObjectCache.java
@@ -43,7 +43,6 @@
  *

  * @param char[] key the key that we are looking for

  * @return boolean

- * @see ConstantPoolCache#contains

  */

 public boolean containsKey(Object key) {

 	int index = hashCode(key);

@@ -59,7 +58,6 @@
  * @param key <CODE>char[]</CODE> the specified key

  * @return int the element for the key or -1 if the key is not

  *  defined in the hash table.

- * @see ConstantPoolCache#put

  */

 public int get(Object key) {

 	int index = hashCode(key);

@@ -86,7 +84,6 @@
  * 

  * @param key <CODE>Object</CODE> the specified key in the hashtable

  * @param value <CODE>int</CODE> the specified element

- * @see ConstantPoolCache#get

  * @return int the old value of the key, or -1 if it did not have one.

  */

 public int put(Object key, int value) { 

@@ -130,7 +127,7 @@
 /**

  * Converts to a rather lengthy String.

  *

- * return String the ascii representation of the receiver

+ * @return String the ascii representation of the receiver

  */

 public String toString() {

 	int max = size();

diff --git a/compiler/org/eclipse/jdt/internal/compiler/env/IDependent.java b/compiler/org/eclipse/jdt/internal/compiler/env/IDependent.java
index 5663ff6..464011d 100644
--- a/compiler/org/eclipse/jdt/internal/compiler/env/IDependent.java
+++ b/compiler/org/eclipse/jdt/internal/compiler/env/IDependent.java
@@ -6,12 +6,11 @@
 import org.eclipse.jdt.internal.compiler.*;

 

 /**

- * This represents the target (ie. the file) of a type dependency.

+ * This represents the target (i.e.&nbsp;the file) of a type dependency.

  *

  * All implementors of this interface are containers for types or types

  * themselves which must be able to identify their source file name

  * when file dependencies are collected.

- * @see IDependencyInfo

  */

 public interface IDependent {

 /**

@@ -20,9 +19,9 @@
  * The path part (optional) must be separated from the actual

  * file proper name by a java.io.File.separator.

  *

- * The proper file name includes the suffix extension (e.g. ".java")

+ * The proper file name includes the suffix extension (e.g.&nbsp;".java")

  *

- * e.g. "c:/com/ibm/compiler/java/api/Compiler.java" 

+ * e.g.&nbsp;"c:/com/ibm/compiler/java/api/Compiler.java" 

  */

 

 char[] getFileName();

diff --git a/compiler/org/eclipse/jdt/internal/compiler/parser/Parser.java b/compiler/org/eclipse/jdt/internal/compiler/parser/Parser.java
index 1eb8ec8..37a3616 100644
--- a/compiler/org/eclipse/jdt/internal/compiler/parser/Parser.java
+++ b/compiler/org/eclipse/jdt/internal/compiler/parser/Parser.java
@@ -2403,6 +2403,7 @@
 		if (currentToken == TokenNameSEMICOLON){

 			method.modifiers |= AccSemicolonBody;			

 			method.declarationSourceEnd = scanner.currentPosition-1;

+			method.bodyEnd = scanner.currentPosition-1;

 			if (currentElement.parent != null){

 				currentElement = currentElement.parent;

 			}

diff --git a/compiler/org/eclipse/jdt/internal/compiler/problem/DefaultProblem.java b/compiler/org/eclipse/jdt/internal/compiler/problem/DefaultProblem.java
index 6874c1f..3626caf 100644
--- a/compiler/org/eclipse/jdt/internal/compiler/problem/DefaultProblem.java
+++ b/compiler/org/eclipse/jdt/internal/compiler/problem/DefaultProblem.java
@@ -128,7 +128,7 @@
 

 	/**

 	 * Answer the type of problem.

-	 * @see org.eclipse.jdt.internal.compiler.problem.IProblem

+	 * @see org.eclipse.jdt.core.compiler.IProblem#getID()

 	 * @return int

 	 */

 	public int getID() {

diff --git a/compiler/org/eclipse/jdt/internal/compiler/util/CharOperation.java b/compiler/org/eclipse/jdt/internal/compiler/util/CharOperation.java
index 79146ef..bc05b10 100644
--- a/compiler/org/eclipse/jdt/internal/compiler/util/CharOperation.java
+++ b/compiler/org/eclipse/jdt/internal/compiler/util/CharOperation.java
@@ -7,6 +7,15 @@
 import org.eclipse.jdt.internal.compiler.lookup.TypeConstants;

 

 public final class CharOperation {

+	

+public static final char[] append(char[] array, char suffix){

+	if (array == null) return new char[]{suffix};

+	int length = array.length;

+	System.arraycopy(array, 0, array = new char[length+1], 0, length);

+	array[length]=suffix;

+	return array;

+}	

+

 public static final char[][] arrayConcat(char[][] first, char[][] second) {

 	if (first == null)

 		return second;

diff --git a/compiler/org/eclipse/jdt/internal/compiler/util/Util.java b/compiler/org/eclipse/jdt/internal/compiler/util/Util.java
index 9704c3a..1ec1148 100644
--- a/compiler/org/eclipse/jdt/internal/compiler/util/Util.java
+++ b/compiler/org/eclipse/jdt/internal/compiler/util/Util.java
@@ -13,6 +13,7 @@
 public class Util {

 

 	public static String LINE_SEPARATOR = System.getProperty("line.separator"); //$NON-NLS-1$

+	public static char[] LINE_SEPARATOR_CHARS = LINE_SEPARATOR.toCharArray();

 	public final static char[] SUFFIX_class = ".class".toCharArray(); //$NON-NLS-1$

 	public final static char[] SUFFIX_CLASS = ".CLASS".toCharArray(); //$NON-NLS-1$

 	public final static char[] SUFFIX_java = ".java".toCharArray(); //$NON-NLS-1$

diff --git a/dom/org/eclipse/jdt/core/dom/AST.java b/dom/org/eclipse/jdt/core/dom/AST.java
index bdf8d08..2618472 100644
--- a/dom/org/eclipse/jdt/core/dom/AST.java
+++ b/dom/org/eclipse/jdt/core/dom/AST.java
@@ -199,10 +199,10 @@
 	 * @param resolveBindings <code>true</code> if bindings are wanted, 

 	 *   and <code>false</code> if bindings are not of interest

 	 * @return the compilation unit node

-	 * @see ASTNode#getFlags

+	 * @see ASTNode#getFlags()

 	 * @see ASTNode#MALFORMED

-	 * @see ASTNode#getStartPositions

-	 * @see ASTNode#getLengths

+	 * @see ASTNode#getStartPosition()

+	 * @see ASTNode#getLength()

 	 */

 	public static CompilationUnit parseCompilationUnit(

 			ICompilationUnit unit,

@@ -293,10 +293,10 @@
 	 * @param project the Java project used to resolve names, or 

 	 *    <code>null</code> if bindings are not resolved

 	 * @return the compilation unit node

-	 * @see ASTNode#getFlags

+	 * @see ASTNode#getFlags()

 	 * @see ASTNode#MALFORMED

-	 * @see ASTNode#getStartPositions

-	 * @see ASTNode#getLengths

+	 * @see ASTNode#getStartPosition()

+	 * @see ASTNode#getLength()

 	 */

 	public static CompilationUnit parseCompilationUnit(

 		char[] source,

@@ -353,10 +353,10 @@
 	 * </p>

 	 * 

 	 * @param source the string to be parsed as a Java compilation unit

-	 * @see ASTNode#getFlags

+	 * @see ASTNode#getFlags()

 	 * @see ASTNode#MALFORMED

-	 * @see ASTNode#getStartPosition

-	 * @see ASTNode#getLength

+	 * @see ASTNode#getStartPosition()

+	 * @see ASTNode#getLength()

 	 */

 	public static CompilationUnit parseCompilationUnit(char[] source) {

 		if (source == null) {

diff --git a/dom/org/eclipse/jdt/core/dom/ASTMatcher.java b/dom/org/eclipse/jdt/core/dom/ASTMatcher.java
index b4ff26f..9c1c6fb 100644
--- a/dom/org/eclipse/jdt/core/dom/ASTMatcher.java
+++ b/dom/org/eclipse/jdt/core/dom/ASTMatcher.java
@@ -53,7 +53,7 @@
 
 	/**
 	 * Returns whether the given lists of AST nodes match pairwise according
-	 * to <code>AST.subtreeMatch</code>.
+	 * to <code>ASTNode.subtreeMatch</code>.
 	 * <p>
 	 * Note that this is a convenience method, useful for writing recursive
 	 * subtree matchers.
@@ -64,8 +64,8 @@
 	 * @param list2 the second list of AST nodes
 	 *    (element type: <code>ASTNode</code>)
 	 * @return <code>true</code> if the list have the same number of elements
-	 *    and match pairwise according to <code>AST.subtreeMatch</code> 
-	 * @see AST#subtreeMatch
+	 *    and match pairwise according to <code>ASTNode.subtreeMatch</code> 
+	 * @see ASTNode#subtreeMatch(ASTMatcher matcher, Object other)
 	 */
 	public final boolean safeSubtreeListMatch(List list1, List list2) {
 		int size1 = list1.size();
@@ -100,7 +100,7 @@
 	 * @return <code>true</code> if the nodes match according
 	 *    to <code>AST.subtreeMatch</code> or both are <code>null</code>, and 
 	 *    <code>false</code> otherwise
-	 * @see AST#subtreeMatch
+	 * @see ASTNode#subtreeMatch(ASTMatcher, Object)
 	 */
 	public final boolean safeSubtreeMatch(Object node1, Object node2) {
 		if (node1 == null && node2 == null) {
diff --git a/dom/org/eclipse/jdt/core/dom/ASTNode.java b/dom/org/eclipse/jdt/core/dom/ASTNode.java
index ead8679..1ce6245 100644
--- a/dom/org/eclipse/jdt/core/dom/ASTNode.java
+++ b/dom/org/eclipse/jdt/core/dom/ASTNode.java
@@ -1230,10 +1230,10 @@
 	

 	/**

 	 * The <code>ASTNode</code> implementation of this <code>Object</code>

-	 * method uses object identity (==). Use <code>subtreeEquals</code> to

+	 * method uses object identity (==). Use <code>subtreeMatch</code> to

 	 * compare two subtrees for equality.

 	 * 

-	 * @see #subtreeEquals

+	 * @see #subtreeMatch(ASTMatcher matcher, Object other)

 	 */

 	public final boolean equals(Object obj) {

 		return this == obj; // equivalent to Object.equals

@@ -1422,7 +1422,7 @@
 	 * 

 	 * @return a (possibly 0) length, or <code>0</code>

 	 *    if no source position information is recorded for this node

-	 * @see #getStartPositions

+	 * @see #getStartPosition()

 	 */

 	public int getLength() {

 		return length;

diff --git a/dom/org/eclipse/jdt/core/dom/ITypeBinding.java b/dom/org/eclipse/jdt/core/dom/ITypeBinding.java
index 96cfccb..6941415 100644
--- a/dom/org/eclipse/jdt/core/dom/ITypeBinding.java
+++ b/dom/org/eclipse/jdt/core/dom/ITypeBinding.java
@@ -19,7 +19,7 @@
  * This interface is not intended to be implemented by clients.

  * </p>

  * 

- * @see ITypeBinding#getDeclaredClasses

+ * @see ITypeBinding#getDeclaredTypes()

  * @since 2.0

  */

 public interface ITypeBinding extends IBinding {

@@ -40,10 +40,9 @@
 	 * @return <code>true</code> if this type binding is for a primitive type,

 	 *   and <code>false</code> otherwise

 	 *

-	 * @see #isArray

-	 * @see #isClass

-	 * @see #isInterface

-	 * @see #wellKnownType

+	 * @see #isArray()

+	 * @see #isClass()

+	 * @see #isInterface()

 	 */

 	public boolean isPrimitive();

 

@@ -72,9 +71,9 @@
 	 *

 	 * @return <code>true</code> if this type binding is for an array type,

 	 *   and <code>false</code> otherwise

-	 * @see #isClass

-	 * @see #isInterface

-	 * @see #isPrimitive

+	 * @see #isClass()

+	 * @see #isInterface()

+	 * @see #isPrimitive()

 	 */

 	public boolean isArray();

 	

@@ -107,9 +106,9 @@
 	 * @return <code>true</code> if this object represents a class,

 	 *    and <code>false</code> otherwise

 	 *

-	 * @see #isArray

-	 * @see #isInterface

-	 * @see #isPrimitive

+	 * @see #isArray()

+	 * @see #isInterface()

+	 * @see #isPrimitive()

 	 */

 	public boolean isClass();

 	

@@ -123,9 +122,9 @@
 	 * @return <code>true</code> if this object represents an interface,

 	 *    and <code>false</code> otherwise

 	 *

-	 * @see #isArray

-	 * @see #isClass

-	 * @see #isPrimitive

+	 * @see #isArray()

+	 * @see #isClass()

+	 * @see #isPrimitive()

 	 */

 	public boolean isInterface();

 	

diff --git a/eval/org/eclipse/jdt/internal/eval/CodeSnippetEnvironment.java b/eval/org/eclipse/jdt/internal/eval/CodeSnippetEnvironment.java
index 6d83388..7d64c48 100644
--- a/eval/org/eclipse/jdt/internal/eval/CodeSnippetEnvironment.java
+++ b/eval/org/eclipse/jdt/internal/eval/CodeSnippetEnvironment.java
@@ -5,9 +5,12 @@
  * All Rights Reserved.

  */

 import org.eclipse.jdt.internal.compiler.ClassFile;

-import org.eclipse.jdt.internal.compiler.env.*;

-import org.eclipse.jdt.internal.compiler.classfmt.*;

-import org.eclipse.jdt.internal.compiler.util.*;

+import org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader;

+import org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException;

+import org.eclipse.jdt.internal.compiler.env.IBinaryType;

+import org.eclipse.jdt.internal.compiler.env.INameEnvironment;

+import org.eclipse.jdt.internal.compiler.env.NameEnvironmentAnswer;

+import org.eclipse.jdt.internal.compiler.util.CharOperation;

 

 /**

  * An environment that wraps the client's name environment.

@@ -26,7 +29,7 @@
 	this.context = context;

 }

 /**

- * @see INameEnvironment

+ * @see INameEnvironment#findType(char[][])

  */

 public NameEnvironmentAnswer findType(char[][] compoundTypeName) {

 	NameEnvironmentAnswer result = this.env.findType(compoundTypeName);

@@ -59,7 +62,7 @@
 	return null;

 }

 /**

- * @see INameEnvironment.

+ * @see INameEnvironment#findType(char[], char[][])

  */

 public NameEnvironmentAnswer findType(char[] typeName, char[][] packageName) {

 	NameEnvironmentAnswer result = this.env.findType(typeName, packageName);

@@ -69,7 +72,7 @@
 	return findType(CharOperation.arrayConcat(packageName, typeName));

 }

 /**

- * @see INameEnvironment.

+ * @see INameEnvironment#isPackage(char[][], char[])

  */

 public boolean isPackage(char[][] parentPackageName, char[] packageName) {

 	return this.env.isPackage(parentPackageName, packageName);

diff --git a/eval/org/eclipse/jdt/internal/eval/CodeSnippetEvaluator.java b/eval/org/eclipse/jdt/internal/eval/CodeSnippetEvaluator.java
index ff6015d..3f63fbd 100644
--- a/eval/org/eclipse/jdt/internal/eval/CodeSnippetEvaluator.java
+++ b/eval/org/eclipse/jdt/internal/eval/CodeSnippetEvaluator.java
@@ -10,6 +10,8 @@
 import org.eclipse.jdt.internal.compiler.env.*;

 import org.eclipse.jdt.internal.compiler.classfmt.*;

 import org.eclipse.jdt.internal.compiler.util.CharOperation;

+import org.eclipse.jdt.internal.compiler.util.Util;

+

 import java.util.*;

 

 /**

@@ -160,7 +162,7 @@
 			

 		}

 		this.mapper = new CodeSnippetToCuMapper(

-			this.codeSnippet,

+			this.codeSnippet, 

 			this.context.packageName,

 			this.context.imports,

 			getClassName(),

diff --git a/eval/org/eclipse/jdt/internal/eval/CodeSnippetParser.java b/eval/org/eclipse/jdt/internal/eval/CodeSnippetParser.java
index 9ad9514..697117a 100644
--- a/eval/org/eclipse/jdt/internal/eval/CodeSnippetParser.java
+++ b/eval/org/eclipse/jdt/internal/eval/CodeSnippetParser.java
@@ -296,8 +296,8 @@
 protected void consumeMethodInvocationName() {

 	// MethodInvocation ::= Name '(' ArgumentListopt ')'

 

-	if (scanner.startPosition >= codeSnippetStart

-		&& scanner.startPosition <= codeSnippetEnd + 1

+	if (scanner.startPosition >= this.codeSnippetStart

+		&& scanner.startPosition <= this.codeSnippetEnd + 1 + Util.LINE_SEPARATOR_CHARS.length // 14838

 		&& isTopLevelType()) {

 			

 		// when the name is only an identifier...we have a message send to "this" (implicit)

@@ -337,8 +337,8 @@
 protected void consumePrimaryNoNewArrayThis() {

 	// PrimaryNoNewArray ::= 'this'

 

-	if (scanner.startPosition >= codeSnippetStart

-		&& scanner.startPosition <= codeSnippetEnd + 1

+	if (scanner.startPosition >= this.codeSnippetStart

+		&& scanner.startPosition <= this.codeSnippetEnd + 1 + Util.LINE_SEPARATOR_CHARS.length // 14838

 		&& isTopLevelType()) {

 		pushOnExpressionStack(

 			new CodeSnippetThisReference(intStack[intPtr--], endPosition, this.evaluationContext, false));

@@ -402,7 +402,7 @@
 	// returned value intercepted by code snippet 

 	// support have to be defined at toplevel only

 	if ((this.hasRecoveredOnExpression

-			|| (scanner.startPosition >= codeSnippetStart && scanner.startPosition <= codeSnippetEnd+1))

+			|| (scanner.startPosition >= codeSnippetStart && scanner.startPosition <= codeSnippetEnd+1+Util.LINE_SEPARATOR_CHARS.length /* 14838*/))

 		&& this.expressionLengthStack[this.expressionLengthPtr] != 0

 		&& isTopLevelType()) {

 		this.expressionLengthPtr--;

@@ -526,7 +526,7 @@
 	/* build a (unspecified) NameReference which may be qualified*/

 

 	if (scanner.startPosition >= codeSnippetStart 

-		&& scanner.startPosition <= codeSnippetEnd+1){

+		&& scanner.startPosition <= codeSnippetEnd+1+Util.LINE_SEPARATOR_CHARS.length /*14838*/){

 		int length;

 		NameReference ref;

 		if ((length = identifierLengthStack[identifierLengthPtr--]) == 1)

@@ -562,7 +562,7 @@
 	look for that it is not a type reference */

 

 	if (scanner.startPosition >= codeSnippetStart 

-		&& scanner.startPosition <= codeSnippetEnd+1){

+		&& scanner.startPosition <= codeSnippetEnd+1+Util.LINE_SEPARATOR_CHARS.length /*14838*/){

 		int length;

 		NameReference ref;

 		if ((length = identifierLengthStack[identifierLengthPtr--]) == 1) {

@@ -630,7 +630,7 @@
  * Records the scanner position if we're parsing a top level type.

  */

 private void recordLastStatementIfNeeded() {

-	if ((isTopLevelType()) && (this.scanner.startPosition <= this.codeSnippetEnd)) {

+	if ((isTopLevelType()) && (this.scanner.startPosition <= this.codeSnippetEnd+Util.LINE_SEPARATOR_CHARS.length /*14838*/)) {

 		this.lastStatement = this.scanner.startPosition;

 	}

 }

diff --git a/eval/org/eclipse/jdt/internal/eval/CodeSnippetSingleNameReference.java b/eval/org/eclipse/jdt/internal/eval/CodeSnippetSingleNameReference.java
index 1306dcf..dbfdfa6 100644
--- a/eval/org/eclipse/jdt/internal/eval/CodeSnippetSingleNameReference.java
+++ b/eval/org/eclipse/jdt/internal/eval/CodeSnippetSingleNameReference.java
@@ -12,7 +12,7 @@
 

 /**

  * A single name reference inside a code snippet can denote a field of a remote

- * receiver object (i.e. the one of the context in the stack frame)

+ * receiver object (i.e.&nbsp;the one of the context in the stack frame).

  */

 public class CodeSnippetSingleNameReference extends SingleNameReference implements EvaluationConstants, InvocationSite, ProblemReasons {

 

diff --git a/eval/org/eclipse/jdt/internal/eval/CodeSnippetSuperReference.java b/eval/org/eclipse/jdt/internal/eval/CodeSnippetSuperReference.java
index 442c8ac..35748ac 100644
--- a/eval/org/eclipse/jdt/internal/eval/CodeSnippetSuperReference.java
+++ b/eval/org/eclipse/jdt/internal/eval/CodeSnippetSuperReference.java
@@ -13,7 +13,7 @@
 

 /**

  * A super reference inside a code snippet denotes a reference to the super type of 

- * the remote receiver object (i.e. the one of the context in the stack frame). This is 

+ * the remote receiver object (i.e.&nbsp;the one of the context in the stack frame). This is 

  * used to report an error through JavaModelException according to the fact that super

  * reference are not supported in code snippet.

  */

diff --git a/eval/org/eclipse/jdt/internal/eval/CodeSnippetThisReference.java b/eval/org/eclipse/jdt/internal/eval/CodeSnippetThisReference.java
index 89ce790..c6c3d5a 100644
--- a/eval/org/eclipse/jdt/internal/eval/CodeSnippetThisReference.java
+++ b/eval/org/eclipse/jdt/internal/eval/CodeSnippetThisReference.java
@@ -10,7 +10,7 @@
 

 /**

  * A this reference inside a code snippet denotes a remote

- * receiver object (i.e. the one of the context in the stack

+ * receiver object (i.e.&nbsp;the one of the context in the stack

  * frame)

  */

 public class CodeSnippetThisReference extends ThisReference implements EvaluationConstants, InvocationSite {

diff --git a/eval/org/eclipse/jdt/internal/eval/CodeSnippetToCuMapper.java b/eval/org/eclipse/jdt/internal/eval/CodeSnippetToCuMapper.java
index 6f88329..7446b33 100644
--- a/eval/org/eclipse/jdt/internal/eval/CodeSnippetToCuMapper.java
+++ b/eval/org/eclipse/jdt/internal/eval/CodeSnippetToCuMapper.java
@@ -128,7 +128,10 @@
 	this.lineNumberOffset++;

 	startPosOffset = buffer.length();

 	buffer.append(codeSnippet);

-	buffer.append('}').append(Util.LINE_SEPARATOR);

+	// a line separator is required after the code snippet source code

+	// in case the code snippet source code ends with a line comment

+	// http://dev.eclipse.org/bugs/show_bug.cgi?id=14838

+	buffer.append(Util.LINE_SEPARATOR).append('}').append(Util.LINE_SEPARATOR);

 

 	// end of class declaration

 	buffer.append('}').append(Util.LINE_SEPARATOR);

diff --git a/eval/org/eclipse/jdt/internal/eval/EvaluationContext.java b/eval/org/eclipse/jdt/internal/eval/EvaluationContext.java
index 0850e13..02f2875 100644
--- a/eval/org/eclipse/jdt/internal/eval/EvaluationContext.java
+++ b/eval/org/eclipse/jdt/internal/eval/EvaluationContext.java
@@ -13,6 +13,8 @@
 import org.eclipse.jdt.internal.compiler.lookup.ProblemReasons;

 import org.eclipse.jdt.internal.compiler.problem.ProblemSeverities;

 import org.eclipse.jdt.internal.compiler.util.CharOperation;

+import org.eclipse.jdt.internal.compiler.util.Util;

+

 import java.io.*;

 import java.util.*;

 import java.util.zip.*;

@@ -149,7 +151,7 @@
 	}

 }

 /**

- * @see org.eclipse.jdt.internal.eval.IEvaluationContext

+ * @see org.eclipse.jdt.core.eval.IEvaluationContext

  * @exception org.eclipse.jdt.internal.eval.InstallException if the code snippet class files could not be deployed.

  */

 public void evaluate(

@@ -235,7 +237,7 @@
 	}

 }

 /**

- * @see org.eclipse.jdt.internal.eval.IEvaluationContext

+ * @see org.eclipse.jdt.core.eval.IEvaluationContext

  * @exception org.eclipse.jdt.internal.eval.InstallException if the code snippet class files could not be deployed.

  */

 public void evaluate(char[] codeSnippet, INameEnvironment environment, Map options, final IRequestor requestor, IProblemFactory problemFactory) throws InstallException {

@@ -294,7 +296,7 @@
 	}

 }

 /**

- * @see org.eclipse.jdt.internal.eval.IEvaluationContext

+ * @see org.eclipse.jdt.core.eval.IEvaluationContext

  * @exception org.eclipse.jdt.internal.eval.InstallException if the code snippet class files could not be deployed.

  * @exception java.lang.IllegalArgumentException if the global has not been installed yet.

  */

@@ -302,7 +304,7 @@
 	this.evaluate(variable.getName(), environment, options, requestor, problemFactory);

 }

 /**

- * @see org.eclipse.jdt.internal.eval.IEvaluationContext

+ * @see org.eclipse.jdt.core.eval.IEvaluationContext

  * @exception org.eclipse.jdt.internal.eval.InstallException if the code snippet class files could not be deployed.

  */

 public void evaluateVariables(INameEnvironment environment, Map options, IRequestor requestor, IProblemFactory problemFactory) throws InstallException {

@@ -362,7 +364,6 @@
 /**

  * Returns the source of the CodeSnippet class.

  * This is used to generate the binary of the CodeSnippetClass

- * @see getCodeSnippetBytes

  */

 public static String getCodeSnippetSource() {

 	return

diff --git a/eval/org/eclipse/jdt/internal/eval/IRequestor.java b/eval/org/eclipse/jdt/internal/eval/IRequestor.java
index 9d33063..82133f9 100644
--- a/eval/org/eclipse/jdt/internal/eval/IRequestor.java
+++ b/eval/org/eclipse/jdt/internal/eval/IRequestor.java
@@ -5,7 +5,6 @@
  * All Rights Reserved.

  */

 import org.eclipse.jdt.core.compiler.IProblem;

-import org.eclipse.jdt.internal.compiler.*;

 import org.eclipse.jdt.internal.compiler.ClassFile;

 

 /**

@@ -13,11 +12,11 @@
  */

 public interface IRequestor {

 /**

- * @see ICodeSnippetRequestor

+ * @see org.eclipse.jdt.core.eval.ICodeSnippetRequestor

  */

 boolean acceptClassFiles(ClassFile[] classFiles, char[] codeSnippetClassName);

 /**

- * @see ICodeSnippetRequestor

+ * @see org.eclipse.jdt.core.eval.ICodeSnippetRequestor

  */

 void acceptProblem(IProblem problem, char[] fragmentSource, int fragmentKind);

 }

diff --git a/formatter/org/eclipse/jdt/internal/formatter/CodeFormatter.java b/formatter/org/eclipse/jdt/internal/formatter/CodeFormatter.java
index d223d76..2f69c0e 100644
--- a/formatter/org/eclipse/jdt/internal/formatter/CodeFormatter.java
+++ b/formatter/org/eclipse/jdt/internal/formatter/CodeFormatter.java
@@ -1912,9 +1912,10 @@
 	/**

 	 * Set the positions to map. The mapped positions should be retrieved using the

 	 * getMappedPositions() method.

-	 * @see getMappedPositions()

 	 * @param positions int[]

 	 * @deprecated Set the positions to map using the format(String, int, int[]) method.

+	 * 

+	 * @see #getMappedPositions()

 	 */

 	public void setPositionsToMap(int[] positions) {

 		positionsToMap = positions;

diff --git a/model/org/eclipse/jdt/core/ElementChangedEvent.java b/model/org/eclipse/jdt/core/ElementChangedEvent.java
index 72bf21c..96d9d32 100644
--- a/model/org/eclipse/jdt/core/ElementChangedEvent.java
+++ b/model/org/eclipse/jdt/core/ElementChangedEvent.java
@@ -24,15 +24,15 @@
 	 * Event type constant (bit mask) indicating an after-the-fact 

 	 * report of creations, deletions, and modifications

 	 * to one or more Java element(s) expressed as a hierarchical

-	 * java element delta as returned by <code>getDelta</code>.

+	 * java element delta as returned by <code>getDelta()</code>.

 	 *

 	 * Note: this notification occurs during the corresponding POST_CHANGE

 	 * resource change notification, and contains a full delta accounting for

 	 * any JavaModel operation  and/or resource change.

 	 *

 	 * @see IJavaElementDelta

-	 * @see IResourceChangeEvent

-	 * @see #getDelta

+	 * @see org.eclipse.core.resources.IResourceChangeEvent

+	 * @see #getDelta()

 	 * @since 2.0

 	 */

 	public static final int POST_CHANGE = 1;

@@ -52,8 +52,8 @@
 	 * fully consistent once the POST_CHANGE notification has occured).

 	 * 

 	 * @see IJavaElementDelta

-	 * @see IResourceChangeEvent

-	 * @see #getDelta

+	 * @see org.eclipse.core.resources.IResourceChangeEvent

+	 * @see #getDelta()

 	 * @since 2.0

 	 */

 	public static final int PRE_AUTO_BUILD = 2;

@@ -68,8 +68,8 @@
 	 * operation.

 	 *

 	 * @see IJavaElementDelta

-	 * @see IResourceChangeEvent

-	 * @see #getDelta

+	 * @see org.eclipse.core.resources.IResourceChangeEvent

+	 * @see #getDelta()

 	 * @since 2.0

 	 */

 	public static final int 	POST_RECONCILE = 4;	

diff --git a/model/org/eclipse/jdt/core/IClasspathEntry.java b/model/org/eclipse/jdt/core/IClasspathEntry.java
index 004839b..4752a15 100644
--- a/model/org/eclipse/jdt/core/IClasspathEntry.java
+++ b/model/org/eclipse/jdt/core/IClasspathEntry.java
@@ -1,9 +1,15 @@
+/**********************************************************************

+Copyright (c) 2000, 2001, 2002 IBM Corp. and others.

+All rights reserved.   This program and the accompanying materials

+are made available under the terms of the Common Public License v0.5

+which accompanies this distribution, and is available at

+http://www.eclipse.org/legal/cpl-v05.html


+Contributors:

+     IBM Corporation - initial API and implementation

+**********************************************************************/

 package org.eclipse.jdt.core;

 

-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

 import org.eclipse.core.runtime.IPath;

 

 /** 

diff --git a/model/org/eclipse/jdt/core/ICodeAssist.java b/model/org/eclipse/jdt/core/ICodeAssist.java
index b8d61a0..13c04ff 100644
--- a/model/org/eclipse/jdt/core/ICodeAssist.java
+++ b/model/org/eclipse/jdt/core/ICodeAssist.java
@@ -1,8 +1,15 @@
+/**********************************************************************

+Copyright (c) 2000, 2001, 2002 IBM Corp. and others.

+All rights reserved.   This program and the accompanying materials

+are made available under the terms of the Common Public License v0.5

+which accompanies this distribution, and is available at

+http://www.eclipse.org/legal/cpl-v05.html


+Contributors:

+     IBM Corporation - initial API and implementation

+**********************************************************************/

 package org.eclipse.jdt.core;

-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

+

 import org.eclipse.jdt.internal.core.*;

 

 /**

diff --git a/model/org/eclipse/jdt/core/ICodeCompletionRequestor.java b/model/org/eclipse/jdt/core/ICodeCompletionRequestor.java
index cf2be93..23ddfe6 100644
--- a/model/org/eclipse/jdt/core/ICodeCompletionRequestor.java
+++ b/model/org/eclipse/jdt/core/ICodeCompletionRequestor.java
@@ -1,9 +1,15 @@
+/**********************************************************************

+Copyright (c) 2000, 2001, 2002 IBM Corp. and others.

+All rights reserved.   This program and the accompanying materials

+are made available under the terms of the Common Public License v0.5

+which accompanies this distribution, and is available at

+http://www.eclipse.org/legal/cpl-v05.html


+Contributors:

+     IBM Corporation - initial API and implementation

+**********************************************************************/

 package org.eclipse.jdt.core;

 

-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

 import org.eclipse.core.resources.IMarker;

 

 /**

diff --git a/model/org/eclipse/jdt/core/ICodeFormatter.java b/model/org/eclipse/jdt/core/ICodeFormatter.java
index 83c44fb..ccd2249 100644
--- a/model/org/eclipse/jdt/core/ICodeFormatter.java
+++ b/model/org/eclipse/jdt/core/ICodeFormatter.java
@@ -1,12 +1,12 @@
 /**********************************************************************
-Copyright (c) 2002 IBM Corp. and others.
+Copyright (c) 2000, 2001, 2002 IBM Corp. and others.
 All rights reserved.   This program and the accompanying materials
 are made available under the terms of the Common Public License v0.5
 which accompanies this distribution, and is available at
 http://www.eclipse.org/legal/cpl-v05.html
  
 Contributors:
-     IBM Corporation - initial API
+     IBM Corporation - initial API and implementation
 **********************************************************************/
 
 package org.eclipse.jdt.core;
@@ -17,7 +17,7 @@
  * In case none is found, a default formatter can be provided through the ToolFactory.
  * 
  * @see ToolFactory#createCodeFormatter()
- * @see ToolFactory#createDefaultCodeFormatter()
+ * @see ToolFactory#createDefaultCodeFormatter(Map options)
  * @since 2.0
  */
 public interface ICodeFormatter {
diff --git a/model/org/eclipse/jdt/core/ICompilationUnit.java b/model/org/eclipse/jdt/core/ICompilationUnit.java
index 3609364..a91c190 100644
--- a/model/org/eclipse/jdt/core/ICompilationUnit.java
+++ b/model/org/eclipse/jdt/core/ICompilationUnit.java
@@ -1,9 +1,15 @@
+/**********************************************************************

+Copyright (c) 2000, 2001, 2002 IBM Corp. and others.

+All rights reserved.   This program and the accompanying materials

+are made available under the terms of the Common Public License v0.5

+which accompanies this distribution, and is available at

+http://www.eclipse.org/legal/cpl-v05.html


+Contributors:

+     IBM Corporation - initial API and implementation

+**********************************************************************/

 package org.eclipse.jdt.core;

 

-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

 import org.eclipse.core.runtime.IProgressMonitor;

 

 /**

diff --git a/model/org/eclipse/jdt/core/ICompletionRequestor.java b/model/org/eclipse/jdt/core/ICompletionRequestor.java
index b8db446..ae39f4b 100644
--- a/model/org/eclipse/jdt/core/ICompletionRequestor.java
+++ b/model/org/eclipse/jdt/core/ICompletionRequestor.java
@@ -1,9 +1,15 @@
+/**********************************************************************

+Copyright (c) 2000, 2001, 2002 IBM Corp. and others.

+All rights reserved.   This program and the accompanying materials

+are made available under the terms of the Common Public License v0.5

+which accompanies this distribution, and is available at

+http://www.eclipse.org/legal/cpl-v05.html


+Contributors:

+     IBM Corporation - initial API and implementation

+**********************************************************************/

 package org.eclipse.jdt.core;

 

-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

 import org.eclipse.core.resources.IMarker;

 import org.eclipse.jdt.core.compiler.IProblem;

 

diff --git a/model/org/eclipse/jdt/core/ICorrectionRequestor.java b/model/org/eclipse/jdt/core/ICorrectionRequestor.java
index ab14a62..1d5533f 100644
--- a/model/org/eclipse/jdt/core/ICorrectionRequestor.java
+++ b/model/org/eclipse/jdt/core/ICorrectionRequestor.java
@@ -1,3 +1,13 @@
+/**********************************************************************

+Copyright (c) 2000, 2001, 2002 IBM Corp. and others.

+All rights reserved.   This program and the accompanying materials

+are made available under the terms of the Common Public License v0.5

+which accompanies this distribution, and is available at

+http://www.eclipse.org/legal/cpl-v05.html


+Contributors:

+     IBM Corporation - initial API and implementation

+**********************************************************************/

 package org.eclipse.jdt.core;

 

 /**

diff --git a/model/org/eclipse/jdt/core/IElementChangedListener.java b/model/org/eclipse/jdt/core/IElementChangedListener.java
index 89e9e8f..dac3529 100644
--- a/model/org/eclipse/jdt/core/IElementChangedListener.java
+++ b/model/org/eclipse/jdt/core/IElementChangedListener.java
@@ -1,8 +1,15 @@
+/**********************************************************************

+Copyright (c) 2000, 2001, 2002 IBM Corp. and others.

+All rights reserved.   This program and the accompanying materials

+are made available under the terms of the Common Public License v0.5

+which accompanies this distribution, and is available at

+http://www.eclipse.org/legal/cpl-v05.html


+Contributors:

+     IBM Corporation - initial API and implementation

+**********************************************************************/

 package org.eclipse.jdt.core;

-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

+

 import org.eclipse.jdt.internal.core.*;

 

 /**

diff --git a/model/org/eclipse/jdt/core/IField.java b/model/org/eclipse/jdt/core/IField.java
index 75e869b..b36f78c 100644
--- a/model/org/eclipse/jdt/core/IField.java
+++ b/model/org/eclipse/jdt/core/IField.java
@@ -1,8 +1,15 @@
+/**********************************************************************

+Copyright (c) 2000, 2001, 2002 IBM Corp. and others.

+All rights reserved.   This program and the accompanying materials

+are made available under the terms of the Common Public License v0.5

+which accompanies this distribution, and is available at

+http://www.eclipse.org/legal/cpl-v05.html


+Contributors:

+     IBM Corporation - initial API and implementation

+**********************************************************************/

 package org.eclipse.jdt.core;

-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

+

 import org.eclipse.jdt.internal.core.*;

 

 /**

diff --git a/model/org/eclipse/jdt/core/IImportContainer.java b/model/org/eclipse/jdt/core/IImportContainer.java
index dc479c3..f908820 100644
--- a/model/org/eclipse/jdt/core/IImportContainer.java
+++ b/model/org/eclipse/jdt/core/IImportContainer.java
@@ -1,8 +1,15 @@
+/**********************************************************************

+Copyright (c) 2000, 2001, 2002 IBM Corp. and others.

+All rights reserved.   This program and the accompanying materials

+are made available under the terms of the Common Public License v0.5

+which accompanies this distribution, and is available at

+http://www.eclipse.org/legal/cpl-v05.html


+Contributors:

+     IBM Corporation - initial API and implementation

+**********************************************************************/

 package org.eclipse.jdt.core;

-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

+

 import org.eclipse.jdt.internal.core.*;

 

 /**

diff --git a/model/org/eclipse/jdt/core/IImportDeclaration.java b/model/org/eclipse/jdt/core/IImportDeclaration.java
index e4c6a5b..53323dc 100644
--- a/model/org/eclipse/jdt/core/IImportDeclaration.java
+++ b/model/org/eclipse/jdt/core/IImportDeclaration.java
@@ -1,8 +1,15 @@
+/**********************************************************************

+Copyright (c) 2000, 2001, 2002 IBM Corp. and others.

+All rights reserved.   This program and the accompanying materials

+are made available under the terms of the Common Public License v0.5

+which accompanies this distribution, and is available at

+http://www.eclipse.org/legal/cpl-v05.html


+Contributors:

+     IBM Corporation - initial API and implementation

+**********************************************************************/

 package org.eclipse.jdt.core;

-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

+

 import org.eclipse.jdt.internal.core.*;

 

 /**

diff --git a/model/org/eclipse/jdt/core/IInitializer.java b/model/org/eclipse/jdt/core/IInitializer.java
index 4d0c596..56bc9f7 100644
--- a/model/org/eclipse/jdt/core/IInitializer.java
+++ b/model/org/eclipse/jdt/core/IInitializer.java
@@ -1,10 +1,15 @@
+/**********************************************************************

+Copyright (c) 2000, 2001, 2002 IBM Corp. and others.

+All rights reserved.   This program and the accompanying materials

+are made available under the terms of the Common Public License v0.5

+which accompanies this distribution, and is available at

+http://www.eclipse.org/legal/cpl-v05.html


+Contributors:

+     IBM Corporation - initial API and implementation

+**********************************************************************/

 package org.eclipse.jdt.core;

 

-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

- 

 /**

  * Represents a stand-alone instance or class (static) initializer in a type.

  * <p>

diff --git a/model/org/eclipse/jdt/core/IJavaElement.java b/model/org/eclipse/jdt/core/IJavaElement.java
index c310ae4..bebb0e8 100644
--- a/model/org/eclipse/jdt/core/IJavaElement.java
+++ b/model/org/eclipse/jdt/core/IJavaElement.java
@@ -1,10 +1,15 @@
+/**********************************************************************

+Copyright (c) 2000, 2001, 2002 IBM Corp. and others.

+All rights reserved.   This program and the accompanying materials

+are made available under the terms of the Common Public License v0.5

+which accompanies this distribution, and is available at

+http://www.eclipse.org/legal/cpl-v05.html


+Contributors:

+     IBM Corporation - initial API and implementation

+**********************************************************************/

 package org.eclipse.jdt.core;

 

-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

- 

 import org.eclipse.core.resources.IResource;

 import org.eclipse.core.runtime.IAdaptable;

 import org.eclipse.core.runtime.IPath;

diff --git a/model/org/eclipse/jdt/core/IJavaElementDelta.java b/model/org/eclipse/jdt/core/IJavaElementDelta.java
index 9320e25..a9238d7 100644
--- a/model/org/eclipse/jdt/core/IJavaElementDelta.java
+++ b/model/org/eclipse/jdt/core/IJavaElementDelta.java
@@ -1,9 +1,15 @@
+/**********************************************************************

+Copyright (c) 2000, 2001, 2002 IBM Corp. and others.

+All rights reserved.   This program and the accompanying materials

+are made available under the terms of the Common Public License v0.5

+which accompanies this distribution, and is available at

+http://www.eclipse.org/legal/cpl-v05.html


+Contributors:

+     IBM Corporation - initial API and implementation

+**********************************************************************/

 package org.eclipse.jdt.core;

 

-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

 import org.eclipse.core.resources.IResourceDelta;

 

 /**

@@ -169,7 +175,7 @@
 	public int F_SOURCEDETACHED = 0x2000;	

 	

 	/**

-	 * Change flag indicating that this is a fine-grained delta, i.e. an analysis down

+	 * Change flag indicating that this is a fine-grained delta, i.e.&nbsp;an analysis down

 	 * to the members level was done to determine if there were structural changes to

 	 * members.

 	 * <p>

diff --git a/model/org/eclipse/jdt/core/IJavaModel.java b/model/org/eclipse/jdt/core/IJavaModel.java
index b61681a..ee5130c 100644
--- a/model/org/eclipse/jdt/core/IJavaModel.java
+++ b/model/org/eclipse/jdt/core/IJavaModel.java
@@ -1,9 +1,15 @@
+/**********************************************************************

+Copyright (c) 2000, 2001, 2002 IBM Corp. and others.

+All rights reserved.   This program and the accompanying materials

+are made available under the terms of the Common Public License v0.5

+which accompanies this distribution, and is available at

+http://www.eclipse.org/legal/cpl-v05.html


+Contributors:

+     IBM Corporation - initial API and implementation

+**********************************************************************/

 package org.eclipse.jdt.core;

 

-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

 import org.eclipse.core.resources.IWorkspace;

 import org.eclipse.core.runtime.IProgressMonitor;

 

diff --git a/model/org/eclipse/jdt/core/IJavaModelMarker.java b/model/org/eclipse/jdt/core/IJavaModelMarker.java
index b188232..5f73511 100644
--- a/model/org/eclipse/jdt/core/IJavaModelMarker.java
+++ b/model/org/eclipse/jdt/core/IJavaModelMarker.java
@@ -1,8 +1,15 @@
+/**********************************************************************

+Copyright (c) 2000, 2001, 2002 IBM Corp. and others.

+All rights reserved.   This program and the accompanying materials

+are made available under the terms of the Common Public License v0.5

+which accompanies this distribution, and is available at

+http://www.eclipse.org/legal/cpl-v05.html


+Contributors:

+     IBM Corporation - initial API and implementation

+**********************************************************************/

 package org.eclipse.jdt.core;

-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

+

 import org.eclipse.jdt.internal.core.*;

 

 /**

diff --git a/model/org/eclipse/jdt/core/IJavaModelStatus.java b/model/org/eclipse/jdt/core/IJavaModelStatus.java
index be78f23..0b38731 100644
--- a/model/org/eclipse/jdt/core/IJavaModelStatus.java
+++ b/model/org/eclipse/jdt/core/IJavaModelStatus.java
@@ -1,9 +1,16 @@
+/**********************************************************************

+Copyright (c) 2000, 2001, 2002 IBM Corp. and others.

+All rights reserved.   This program and the accompanying materials

+are made available under the terms of the Common Public License v0.5

+which accompanies this distribution, and is available at

+http://www.eclipse.org/legal/cpl-v05.html


+Contributors:

+     IBM Corporation - initial API and implementation

+**********************************************************************/

+

 package org.eclipse.jdt.core;

 

-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

 import org.eclipse.core.runtime.IPath;

 import org.eclipse.core.runtime.IStatus;

 

diff --git a/model/org/eclipse/jdt/core/IJavaModelStatusConstants.java b/model/org/eclipse/jdt/core/IJavaModelStatusConstants.java
index d486b40..f902306 100644
--- a/model/org/eclipse/jdt/core/IJavaModelStatusConstants.java
+++ b/model/org/eclipse/jdt/core/IJavaModelStatusConstants.java
@@ -1,8 +1,15 @@
+/**********************************************************************

+Copyright (c) 2000, 2001, 2002 IBM Corp. and others.

+All rights reserved.   This program and the accompanying materials

+are made available under the terms of the Common Public License v0.5

+which accompanies this distribution, and is available at

+http://www.eclipse.org/legal/cpl-v05.html


+Contributors:

+     IBM Corporation - initial API and implementation

+**********************************************************************/

 package org.eclipse.jdt.core;

-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

+

 import org.eclipse.jdt.internal.core.*;

 

 /**

diff --git a/model/org/eclipse/jdt/core/IJavaProject.java b/model/org/eclipse/jdt/core/IJavaProject.java
index b48ece3..0c18f5e 100644
--- a/model/org/eclipse/jdt/core/IJavaProject.java
+++ b/model/org/eclipse/jdt/core/IJavaProject.java
@@ -1,10 +1,15 @@
+/**********************************************************************

+Copyright (c) 2000, 2001, 2002 IBM Corp. and others.

+All rights reserved.   This program and the accompanying materials

+are made available under the terms of the Common Public License v0.5

+which accompanies this distribution, and is available at

+http://www.eclipse.org/legal/cpl-v05.html


+Contributors:

+     IBM Corporation - initial API and implementation

+**********************************************************************/

 package org.eclipse.jdt.core;

 

-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-

 import org.eclipse.core.resources.IProject;

 import org.eclipse.core.resources.IResource;

 import org.eclipse.core.runtime.IProgressMonitor;

diff --git a/model/org/eclipse/jdt/core/IMember.java b/model/org/eclipse/jdt/core/IMember.java
index 634d131..be1dd87 100644
--- a/model/org/eclipse/jdt/core/IMember.java
+++ b/model/org/eclipse/jdt/core/IMember.java
@@ -1,8 +1,15 @@
+/**********************************************************************

+Copyright (c) 2000, 2001, 2002 IBM Corp. and others.

+All rights reserved.   This program and the accompanying materials

+are made available under the terms of the Common Public License v0.5

+which accompanies this distribution, and is available at

+http://www.eclipse.org/legal/cpl-v05.html


+Contributors:

+     IBM Corporation - initial API and implementation

+**********************************************************************/

 package org.eclipse.jdt.core;

-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

+

 import org.eclipse.jdt.internal.core.*;

 

 /**

diff --git a/model/org/eclipse/jdt/core/IMethod.java b/model/org/eclipse/jdt/core/IMethod.java
index 3cce66f..c18eae8 100644
--- a/model/org/eclipse/jdt/core/IMethod.java
+++ b/model/org/eclipse/jdt/core/IMethod.java
@@ -1,8 +1,15 @@
+/**********************************************************************

+Copyright (c) 2000, 2001, 2002 IBM Corp. and others.

+All rights reserved.   This program and the accompanying materials

+are made available under the terms of the Common Public License v0.5

+which accompanies this distribution, and is available at

+http://www.eclipse.org/legal/cpl-v05.html


+Contributors:

+     IBM Corporation - initial API and implementation

+**********************************************************************/

 package org.eclipse.jdt.core;

-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

+

 import org.eclipse.jdt.internal.core.*;

 

 /**

diff --git a/model/org/eclipse/jdt/core/IOpenable.java b/model/org/eclipse/jdt/core/IOpenable.java
index 76490b5..a0de67e 100644
--- a/model/org/eclipse/jdt/core/IOpenable.java
+++ b/model/org/eclipse/jdt/core/IOpenable.java
@@ -1,10 +1,15 @@
+/**********************************************************************

+Copyright (c) 2000, 2001, 2002 IBM Corp. and others.

+All rights reserved.   This program and the accompanying materials

+are made available under the terms of the Common Public License v0.5

+which accompanies this distribution, and is available at

+http://www.eclipse.org/legal/cpl-v05.html


+Contributors:

+     IBM Corporation - initial API and implementation

+**********************************************************************/

 package org.eclipse.jdt.core;

 

-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

- 

 import org.eclipse.core.runtime.IProgressMonitor;

 

 /**

diff --git a/model/org/eclipse/jdt/core/IPackageDeclaration.java b/model/org/eclipse/jdt/core/IPackageDeclaration.java
index fc1418e..486c781 100644
--- a/model/org/eclipse/jdt/core/IPackageDeclaration.java
+++ b/model/org/eclipse/jdt/core/IPackageDeclaration.java
@@ -1,8 +1,15 @@
+/**********************************************************************

+Copyright (c) 2000, 2001, 2002 IBM Corp. and others.

+All rights reserved.   This program and the accompanying materials

+are made available under the terms of the Common Public License v0.5

+which accompanies this distribution, and is available at

+http://www.eclipse.org/legal/cpl-v05.html


+Contributors:

+     IBM Corporation - initial API and implementation

+**********************************************************************/

 package org.eclipse.jdt.core;

-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

+

 import org.eclipse.jdt.internal.core.*;

 

 /**

diff --git a/model/org/eclipse/jdt/core/IPackageFragment.java b/model/org/eclipse/jdt/core/IPackageFragment.java
index fe7ade3..5417728 100644
--- a/model/org/eclipse/jdt/core/IPackageFragment.java
+++ b/model/org/eclipse/jdt/core/IPackageFragment.java
@@ -81,7 +81,7 @@
  * in this package (for example, <code>"Object.java"</code>).

  * The name has to be a valid compilation unit name.

  * This is a handle-only method.  The compilation unit may or may not be present.

- * @See JavaConventions#validateCompilationUnitName

+ * @see JavaConventions#validateCompilationUnitName

  */

 ICompilationUnit getCompilationUnit(String name);

 /**

diff --git a/model/org/eclipse/jdt/core/IProblemRequestor.java b/model/org/eclipse/jdt/core/IProblemRequestor.java
index 2ff6065..5bec053 100644
--- a/model/org/eclipse/jdt/core/IProblemRequestor.java
+++ b/model/org/eclipse/jdt/core/IProblemRequestor.java
@@ -6,9 +6,8 @@
 http://www.eclipse.org/legal/cpl-v05.html
  
 Contributors:
-    Philippe Mulet - Initial API and implementation
+     IBM Corporation - initial API and implementation
 **********************************************************************/
-
 package org.eclipse.jdt.core;
 
 import org.eclipse.jdt.core.compiler.IProblem;
diff --git a/model/org/eclipse/jdt/core/IWorkingCopy.java b/model/org/eclipse/jdt/core/IWorkingCopy.java
index 6bf6cee..99bcb8d 100644
--- a/model/org/eclipse/jdt/core/IWorkingCopy.java
+++ b/model/org/eclipse/jdt/core/IWorkingCopy.java
@@ -151,7 +151,7 @@
 	IJavaElement[] findElements(IJavaElement element);

 	

 	/**

-	 * Finds the primary type of this compilation unit (i.e. the type with the same name as the

+	 * Finds the primary type of this compilation unit (i.e.&nbsp;the type with the same name as the

 	 * compilation unit), or <code>null</code> if no such a type exists.

 	 * 

 	 * @since 2.0

diff --git a/model/org/eclipse/jdt/core/JavaCore.java b/model/org/eclipse/jdt/core/JavaCore.java
index f52e714..20a216a 100644
--- a/model/org/eclipse/jdt/core/JavaCore.java
+++ b/model/org/eclipse/jdt/core/JavaCore.java
@@ -14,6 +14,7 @@
 

 import org.eclipse.jdt.internal.compiler.*;

 import org.eclipse.jdt.internal.compiler.env.*;

+import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;

 import org.eclipse.jdt.internal.core.*;

 import org.eclipse.jdt.internal.core.search.indexing.*;

 

@@ -71,6 +72,74 @@
 		"org.eclipse.jdt.internal.core.JavaModelManager.handleId" ; //$NON-NLS-1$

 

 	/**

+	 * Names of recognized configurable options

+	 */

+	

+	public static final String COMPILER_LOCAL_VARIABLE_ATTR = PLUGIN_ID + ".compiler.debug.localVariable"; //$NON-NLS-1$

+	public static final String COMPILER_LINE_NUMBER_ATTR = PLUGIN_ID + ".compiler.debug.lineNumber"; //$NON-NLS-1$

+	public static final String COMPILER_SOURCE_FILE_ATTR = PLUGIN_ID + ".compiler.debug.sourceFile"; //$NON-NLS-1$

+	public static final String COMPILER_CODEGEN_UNUSED_LOCAL = PLUGIN_ID + ".compiler.codegen.unusedLocal"; //$NON-NLS-1$

+	public static final String COMPILER_CODEGEN_TARGET_PLATFORM = PLUGIN_ID + ".compiler.codegen.targetPlatform"; //$NON-NLS-1$

+	public static final String COMPILER_PB_UNREACHABLE_CODE = PLUGIN_ID + ".compiler.problem.unreachableCode"; //$NON-NLS-1$

+	public static final String COMPILER_PB_INVALID_IMPORT = PLUGIN_ID + ".compiler.problem.invalidImport"; //$NON-NLS-1$

+	public static final String COMPILER_PB_OVERRIDING_PACKAGE_DEFAULT_METHOD = PLUGIN_ID + ".compiler.problem.overridingPackageDefaultMethod"; //$NON-NLS-1$

+	public static final String COMPILER_PB_METHOD_WITH_CONSTRUCTOR_NAME = PLUGIN_ID + ".compiler.problem.methodWithConstructorName"; //$NON-NLS-1$

+	public static final String COMPILER_PB_DEPRECATION = PLUGIN_ID + ".compiler.problem.deprecation"; //$NON-NLS-1$

+	public static final String COMPILER_PB_HIDDEN_CATCH_BLOCK = PLUGIN_ID + ".compiler.problem.hiddenCatchBlock"; //$NON-NLS-1$

+	public static final String COMPILER_PB_UNUSED_LOCAL = PLUGIN_ID + ".compiler.problem.unusedLocal"; //$NON-NLS-1$

+	public static final String COMPILER_PB_UNUSED_PARAMETER = PLUGIN_ID + ".compiler.problem.unusedParameter"; //$NON-NLS-1$

+	public static final String COMPILER_PB_SYNTHETIC_ACCESS_EMULATION = PLUGIN_ID + ".compiler.problem.syntheticAccessEmulation"; //$NON-NLS-1$

+	public static final String COMPILER_PB_NON_NLS_STRING_LITERAL = PLUGIN_ID + ".compiler.problem.nonExternalizedStringLiteral"; //$NON-NLS-1$

+	public static final String COMPILER_PB_ASSERT_IDENTIFIER = PLUGIN_ID + ".compiler.problem.assertIdentifier"; //$NON-NLS-1$

+	public static final String COMPILER_SOURCE = PLUGIN_ID + ".compiler.source"; //$NON-NLS-1$

+	public static final String COMPILER_COMPLIANCE = PLUGIN_ID + ".compiler.compliance"; //$NON-NLS-1$

+

+	public static final String CORE_JAVA_BUILD_ORDER = PLUGIN_ID + ".computeJavaBuildOrder"; //$NON-NLS-1$

+	public static final String CORE_JAVA_BUILD_RESOURCE_COPY_FILTER = PLUGIN_ID + ".builder.resourceCopyExclusionFilter"; //$NON-NLS-1$

+	public static final String CORE_JAVA_BUILD_INVALID_CLASSPATH = PLUGIN_ID + ".builder.invalidClasspath"; //$NON-NLS-1$

+	public static final String CORE_ENCODING = PLUGIN_ID + ".encoding"; //$NON-NLS-1$

+

+	public static final String FORMATTER_NEWLINE_OPENING_BRACE = PLUGIN_ID + ".formatter.newline.openingBrace"; //$NON-NLS-1$

+	public static final String FORMATTER_NEWLINE_CONTROL = PLUGIN_ID + ".formatter.newline.controlStatement"; //$NON-NLS-1$

+	public static final String FORMATTER_NEWLINE_ELSE_IF = PLUGIN_ID + ".formatter.newline.elseIf"; //$NON-NLS-1$

+	public static final String FORMATTER_NEWLINE_EMPTY_BLOCK = PLUGIN_ID + ".formatter.newline.emptyBlock"; //$NON-NLS-1$

+	public static final String FORMATTER_CLEAR_BLANK_LINES = PLUGIN_ID + ".formatter.newline.clearAll"; //$NON-NLS-1$

+	public static final String FORMATTER_LINE_SPLIT = PLUGIN_ID + ".formatter.lineSplit"; //$NON-NLS-1$

+	public static final String FORMATTER_COMPACT_ASSIGNMENT = PLUGIN_ID + ".formatter.style.assignment"; //$NON-NLS-1$

+	public static final String FORMATTER_TAB_CHAR = PLUGIN_ID + ".formatter.tabulation.char"; //$NON-NLS-1$

+	public static final String FORMATTER_TAB_SIZE = PLUGIN_ID + ".formatter.tabulation.size"; //$NON-NLS-1$

+

+	public static final String CODEASSIST_VISIBILITY_CHECK = PLUGIN_ID + ".codeComplete.visibilityCheck"; //$NON-NLS-1$

+	public static final String CODEASSIST_IMPLICIT_QUALIFICATION = PLUGIN_ID + ".codeComplete.forceImplicitQualification"; //$NON-NLS-1$

+	

+	/**

+	 * Possible values for configurable options

+	 */

+	public static final String GENERATE = "generate"; //$NON-NLS-1$

+	public static final String DO_NOT_GENERATE = "do not generate"; //$NON-NLS-1$

+	public static final String PRESERVE = "preserve"; //$NON-NLS-1$

+	public static final String OPTIMIZE_OUT = "optimize out"; //$NON-NLS-1$

+	public static final String VERSION_1_1 = "1.1"; //$NON-NLS-1$

+	public static final String VERSION_1_2 = "1.2"; //$NON-NLS-1$

+	public static final String VERSION_1_3 = "1.3"; //$NON-NLS-1$

+	public static final String VERSION_1_4 = "1.4"; //$NON-NLS-1$

+	public static final String ABORT = "abort"; //$NON-NLS-1$

+	public static final String ERROR = "error"; //$NON-NLS-1$

+	public static final String WARNING = "warning"; //$NON-NLS-1$

+	public static final String IGNORE = "ignore"; //$NON-NLS-1$

+	public static final String COMPUTE = "compute"; //$NON-NLS-1$

+	public static final String INSERT = "insert"; //$NON-NLS-1$

+	public static final String DO_NOT_INSERT = "do not insert"; //$NON-NLS-1$

+	public static final String PRESERVE_ONE = "preserve one"; //$NON-NLS-1$

+	public static final String CLEAR_ALL = "clear all"; //$NON-NLS-1$

+	public static final String NORMAL = "normal"; //$NON-NLS-1$

+	public static final String COMPACT = "compact"; //$NON-NLS-1$

+	public static final String TAB = "tab"; //$NON-NLS-1$

+	public static final String SPACE = "space"; //$NON-NLS-1$

+	public static final String ENABLED = "enabled"; //$NON-NLS-1$

+	public static final String DISABLED = "disabled"; //$NON-NLS-1$

+	

+	/**

 	 * Creates the Java core plug-in.

 	 */

 	public JavaCore(IPluginDescriptor pluginDescriptor) {

@@ -87,7 +156,7 @@
 	 * For finer control of the notification, use <code>addElementChangedListener(IElementChangedListener,int)</code>

 	 * which allows to specify a different eventMask.

 	 * 

-	 * @see ElementChangeEvent

+	 * @see ElementChangedEvent

 	 * @param listener the listener

 	 */

 	public static void addElementChangedListener(IElementChangedListener listener) {

@@ -115,10 +184,10 @@
 	 * 

 	 * @param listener the listener

 	 * @param eventMask the bit-wise OR of all event types of interest to the listener

-	 * @see IElementChangeListener

-	 * @see ElementChangeEvent

-	 * @see #removeElementChangeListener

-	 *	@since 2.0

+	 * @see IElementChangedListener

+	 * @see ElementChangedEvent

+	 * @see #removeElementChangedListener(IElementChangedListener)

+	 * @since 2.0

 	 */

 	public static void addElementChangedListener(IElementChangedListener listener, int eventMask) {

 		JavaModelManager.getJavaModelManager().addElementChangedListener(listener, eventMask);

@@ -448,8 +517,286 @@
 		return result;

 	}

 

-	private static IPath getInstallLocation() {

-		return new Path(getPlugin().getDescriptor().getInstallURL().getFile());

+	/**

+	 * Returns a table of all known configurable options with their default values.

+	 * These options allow to configure the behavior of the underlying components.

+	 * The client may safely use the result as a template that they can modify and

+	 * then pass to <code>setOptions</code>.

+	 * 

+	 * Helper constants have been defined on JavaCore for each of the option ID and 

+	 * their possible constant values.

+	 * 

+	 * Note: more options might be added in further releases.

+	 * </pre>

+	 * RECOGNIZED OPTIONS:

+	 *  COMPILER / Generating Local Variable Debug Attribute

+ 	 *    When generated, this attribute will enable local variable names 

+	 *    to be displayed in debugger, only in place where variables are 

+	 *    definitely assigned (.class file is then bigger)

+	 *     - option id:			"org.eclipse.jdt.core.compiler.debug.localVariable"

+	 *     - possible values:	{ "generate", "do not generate" }

+	 *     - default:			"generate"

+	 *

+	 *  COMPILER / Generating Line Number Debug Attribute 

+	 *    When generated, this attribute will enable source code highlighting in debugger 

+	 *    (.class file is then bigger).

+	 *     - option id:			"org.eclipse.jdt.core.compiler.debug.lineNumber"

+	 *     - possible values:	{ "generate", "do not generate" }

+	 *     - default:			"generate"

+	 *		

+	 *  COMPILER / Generating Source Debug Attribute 

+	 *    When generated, this attribute will enable the debugger to present the 

+	 *    corresponding source code.

+	 *     - option id:			"org.eclipse.jdt.core.compiler.debug.sourceFile"

+	 *     - possible values:	{ "generate", "do not generate" }

+	 *     - default:			"generate"

+	 *		

+	 *  COMPILER / Preserving Unused Local Variables

+	 *    Unless requested to preserve unused local variables (i.e. never read), the 

+	 *    compiler will optimize them out, potentially altering debugging

+	 *     - option id:			"org.eclipse.jdt.core.compiler.codegen.unusedLocal"

+	 *     - possible values:	{ "preserve", "optimize out" }

+	 *     - default:			"preserve"

+	 * 

+	 *  COMPILER / Defining Target Java Platform

+	 *    For binary compatibility reason, .class files can be tagged to with certain VM versions and later.

+	 *    Note that "1.4" target require to toggle compliance mode to "1.4" too.

+	 *     - option id:			"org.eclipse.jdt.core.compiler.codegen.targetPlatform"

+	 *     - possible values:	{ "1.1", "1.2", "1.3", "1.4" }

+	 *     - default:			"1.1"

+	 *

+	 *	COMPILER / Reporting Unreachable Code

+	 *    Unreachable code can optionally be reported as an error, warning or simply 

+	 *    ignored. The bytecode generation will always optimized it out.

+	 *     - option id:			"org.eclipse.jdt.core.compiler.problem.unreachableCode"

+	 *     - possible values:	{ "error", "warning", "ignore" }

+	 *     - default:			"error"

+	 *

+	 *	COMPILER / Reporting Invalid Import

+	 *    An import statement that cannot be resolved might optionally be reported 

+	 *    as an error, as a warning or ignored.

+	 *     - option id:			"org.eclipse.jdt.core.compiler.problem.invalidImport"

+	 *     - possible values:	{ "error", "warning", "ignore" }

+	 *     - default:			"error"

+	 *

+	 *	COMPILER / Reporting Attempt to Override Package-Default Method

+	 *    A package default method is not visible in a different package, and thus 

+	 *    cannot be overriden. When enabling this option, the compiler will signal 

+	 *    such scenarii either as an error or a warning.

+	 *     - option id:			"org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod"

+	 *     - possible values:	{ "error", "warning", "ignore" }

+	 *     - default:			"warning"

+	 *

+	 *  COMPILER / Reporting Method With Constructor Name

+	 *    Naming a method with a constructor name is generally considered poor 

+	 *    style programming. When enabling this option, the compiler will signal such 

+	 *    scenarii either as an error or a warning.

+	 *     - option id:			"org.eclipse.jdt.core.compiler.problem.methodWithConstructorName"

+	 *     - possible values:	{ "error", "warning", "ignore" }

+	 *     - default:			"warning"

+	 *

+	 *  COMPILER / Reporting Deprecation

+	 *    When enabled, the compiler will signal use of deprecated API either as an 

+	 *    error or a warning.

+	 *     - option id:			"org.eclipse.jdt.core.compiler.problem.deprecation"

+	 *     - possible values:	{ "error", "warning", "ignore" }

+	 *     - default:			"warning"

+	 *

+	 *	COMPILER / Reporting Hidden Catch Block

+	 *    Locally to a try statement, some catch blocks may hide others , e.g.

+	 *      try {	throw new java.io.CharConversionException();

+	 *      } catch (java.io.CharConversionException e) {

+	 *      } catch (java.io.IOException e) {}. 

+	 *    When enabling this option, the compiler will issue an error or a warning for hidden 

+	 *    catch blocks corresponding to checked exceptions

+	 *     - option id:			"org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock"

+	 *     - possible values:	{ "error", "warning", "ignore" }

+	 *     - default:			"warning"

+	 *

+	 *  COMPILER / Reporting Unused Local

+	 *    When enabled, the compiler will issue an error or a warning for unused local 

+	 *    variables (i.e. variables never read from)

+	 *     - option id:			"org.eclipse.jdt.core.compiler.problem.unusedLocal"

+	 *     - possible values:	{ "error", "warning", "ignore" }

+	 *     - default:			"ignore"

+	 *

+	 *	COMPILER / Reporting Unused Parameter

+	 *    When enabled, the compiler will issue an error or a warning for unused method 

+	 *    parameters (i.e. parameters never read from)

+	 *     - option id:			"org.eclipse.jdt.core.compiler.problem.unusedParameter"

+	 *     - possible values:	{ "error", "warning", "ignore" }

+	 *     - default:			"ignore"

+	 *

+	 *	COMPILER / Reporting Synthetic Access Emulation

+	 *    When enabled, the compiler will issue an error or a warning whenever it emulates 

+	 *    access to a non-accessible member of an enclosing type. Such access can have

+	 *    performance implications.

+	 *     - option id:			"org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation"

+	 *     - possible values:	{ "error", "warning", "ignore" }

+	 *     - default:			"ignore"

+	 *

+	 * COMPILER / Reporting Non-Externalized String Literal

+	 *    When enabled, the compiler will issue an error or a warning for non externalized 

+	 *    String literal (i.e. non tagged with //$NON-NLS-<n>$). 

+	 *     - option id:			"org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral"

+	 *     - possible values:	{ "error", "warning", "ignore" }

+	 *     - default:			"ignore"

+	 * 

+	 * COMPILER / Reporting Usage of 'assert' Identifier

+	 *    When enabled, the compiler will issue an error or a warning whenever 'assert' is 

+	 *    used as an identifier (reserved keyword in 1.4)

+	 *     - option id:			"org.eclipse.jdt.core.compiler.problem.assertIdentifier"

+	 *     - possible values:	{ "error", "warning", "ignore" }

+	 *     - default:			"ignore"

+	 * 

+	 * COMPILER / Setting Source Compatibility Mode

+	 *    Specify whether source is 1.3 or 1.4 compatible. From 1.4 on, 'assert' is a keyword

+	 *    reserved for assertion support. Also note, than when toggling to 1.4 mode, the target VM

+	 *   level should be set to "1.4" and the compliance mode should be "1.4".

+	 *     - option id:			"org.eclipse.jdt.core.compiler.source"

+	 *     - possible values:	{ "1.3", "1.4" }

+	 *     - default:			"1.3"

+	 * 

+	 * COMPILER / Setting Compliance Level

+	 *    Select the compliance level for the compiler. In "1.3" mode, source and target settings

+	 *    should not go beyond "1.3" level.

+	 *     - option id:			"org.eclipse.jdt.core.compiler.compliance"

+	 *     - possible values:	{ "1.3", "1.4" }

+	 *     - default:			"1.3"

+	 * 

+	 * BUILDER / Specifying Filters for Resource Copying Control

+	 *    Allow to specify some filters to control the resource copy process.

+	 *   Note: no trimming of the names is performed, the list should thus not contain any superfluous

+	 *              character.

+	 *     - option id:			"org.eclipse.jdt.core.builder.resourceCopyExclusionFilter"

+	 *     - possible values:	{ "<name>[,<name>]* } where <name> is a file name pattern (only * wild-cards allowed)

+	 *     - default:			""

+	 * 

+	 * BUILDER / Abort if Invalid Classpath

+	 *    Allow to toggle the builder to abort if the classpath is invalid

+	 *     - option id:			"org.eclipse.jdt.core.builder.invalidClasspath"

+	 *     - possible values:	{ "abort", "ignore" }

+	 *     - default:			"ignore"

+	 * 

+	 *	JAVACORE / Computing Project Build Order

+	 *    Indicate whether JavaCore should enforce the project build order to be based on

+	 *    the classpath prerequisite chain. When requesting to compute, this takes over

+	 *    the platform default order (based on project references).

+	 *     - option id:			"org.eclipse.jdt.core.computeJavaBuildOrder"

+	 *     - possible values:	{ "compute", "ignore" }

+	 *     - default:			"ignore"	 

+	 * 

+	 * JAVACORE / Specify Default Source Encoding Format

+	 *    Get the encoding format for compiled sources. This setting is read-only, it is equivalent

+	 *    to 'ResourcesPlugin.getEncoding()'.

+	 *     - option id:			"org.eclipse.jdt.core.encoding"

+	 *     - possible values:	{ any of the supported encoding name}.

+	 *     - default:			<platform default>

+	 * 

+	 *	FORMATTER / Inserting New Line Before Opening Brace

+	 *    When Insert, a new line is inserted before an opening brace, otherwise nothing

+	 *    is inserted

+	 *     - option id:			"org.eclipse.jdt.core.formatter.newline.openingBrace"

+	 *     - possible values:	{ "insert", "do not insert" }

+	 *     - default:			"do not insert"

+	 * 

+	 *	FORMATTER / Inserting New Line Inside Control Statement

+	 *    When Insert, a new line is inserted between } and following else, catch, finally

+	 *     - option id:			"org.eclipse.jdt.core.formatter.newline.controlStatement"

+	 *     - possible values:	{ "insert", "do not insert" }

+	 *     - default:			"do not insert"

+	 * 

+	 *	FORMATTER / Clearing Blank Lines

+	 *    When Clear all, all blank lines are removed. When Preserve one, only one is kept

+	 *    and all others removed.

+	 *     - option id:			"org.eclipse.jdt.core.formatter.newline.clearAll"

+	 *     - possible values:	{ "clear all", "preserve one" }

+	 *     - default:			"preserve one"

+	 * 

+	 *	FORMATTER / Inserting New Line Between Else/If 

+	 *    When Insert, a blank line is inserted between an else and an if when they are 

+	 *    contiguous. When choosing to not insert, else-if will be kept on the same

+	 *    line when possible.

+	 *     - option id:			"org.eclipse.jdt.core.formatter.newline.elseIf"

+	 *     - possible values:	{ "insert", "do not insert" }

+	 *     - default:			"do not insert"

+	 * 

+	 *	FORMATTER / Inserting New Line In Empty Block

+	 *    When insert, a line break is inserted between contiguous { and }, if } is not followed

+	 *    by a keyword.

+	 *     - option id:			"org.eclipse.jdt.core.formatter.newline.emptyBlock"

+	 *     - possible values:	{ "insert", "do not insert" }

+	 *     - default:			"insert"

+	 * 

+	 *	FORMATTER / Splitting Lines Exceeding Length

+	 *    Enable splitting of long lines (exceeding the configurable length). Length of 0 will

+	 *    disable line splitting

+	 *     - option id:			"org.eclipse.jdt.core.formatter.lineSplit"

+	 *     - possible values:	"<n>", where n is zero or a positive integer

+	 *     - default:			"80"

+	 * 

+	 *	FORMATTER / Compacting Assignment

+	 *    Assignments can be formatted asymmetrically, e.g. 'int x= 2;', when Normal, a space

+	 *    is inserted before the assignment operator

+	 *     - option id:			"org.eclipse.jdt.core.formatter.style.assignment"

+	 *     - possible values:	{ "compact", "normal" }

+	 *     - default:			"normal"

+	 * 

+	 *	FORMATTER / Defining Indentation Character

+	 *    Either choose to indent with tab characters or spaces

+	 *     - option id:			"org.eclipse.jdt.core.formatter.tabulation.char"

+	 *     - possible values:	{ "tab", "space" }

+	 *     - default:			"tab"

+	 * 

+	 *	FORMATTER / Defining Space Indentation Length

+	 *    When using spaces, set the amount of space characters to use for each 

+	 *    indentation mark.

+	 *     - option id:			"org.eclipse.jdt.core.formatter.tabulation.size"

+	 *     - possible values:	"<n>", where n is a positive integer

+	 *     - default:			"4"

+	 * 

+	 *	CODEASSIST / Activate Visibility Sensitive Completion

+	 *    When active, completion doesn't show that you can not see

+	 *    (eg. you can not see private methods of a super class).

+	 *     - option id:			"org.eclipse.jdt.core.codeComplete.visibilityCheck"

+	 *     - possible values:	{ "enabled", "disabled" }

+	 *     - default:			"disabled"

+	 * 

+	 *	CODEASSIST / Automatic Qualification of Implicit Members

+	 *    When active, completion automatically qualifies completion on implicit

+	 *    field references and message expressions.

+	 *     - option id:			"org.eclipse.jdt.core.codeComplete.forceImplicitQualification"

+	 *     - possible values:	{ "enabled", "disabled" }

+	 *     - default:			"disabled"

+	 * </pre>

+	 * 

+	 * @return a mutable table containing the default settings of all known options

+	 *   (key type: <code>String</code>; value type: <code>String</code>)

+	 * @see #setOptions

+	 */

+ 	public static Hashtable getDefaultOptions(){

+	

+		Hashtable defaultOptions = new Hashtable(10);

+

+		// see #initializeDefaultPluginPreferences() for changing default settings

+		Preferences preferences = getPlugin().getPluginPreferences();

+		

+		// get preferences set to their default

+		String[] defaultPropertyNames = preferences.defaultPropertyNames();

+		for (int i = 0; i < defaultPropertyNames.length; i++){

+			String propertyName = defaultPropertyNames[i];

+			defaultOptions.put(propertyName, preferences.getDefaultString(propertyName));

+		}		

+		// get preferences not set to their default

+		String[] propertyNames = preferences.propertyNames();

+		for (int i = 0; i < propertyNames.length; i++){

+			String propertyName = propertyNames[i];

+			defaultOptions.put(propertyName, preferences.getDefaultString(propertyName));

+		}		

+		// get encoding through resource plugin

+		defaultOptions.put(CORE_ENCODING, ""/*ResourcesPlugin.getEncoding()*/); //$NON-NLS-1$

+		

+		return defaultOptions;

 	}

 

 	/**

@@ -478,6 +825,42 @@
 	}

 	

 	/**

+	 * Returns the table of the current options. Initially, all options have their default values,

+	 * and this method returns a table that includes all known options.

+	 * <p>

+	 * For a complete description of the configurable options, see <code>getDefaultOptions</code>.

+	 * </p>

+	 * 

+	 * @return table of current settings of all options 

+	 *   (key type: <code>String</code>; value type: <code>String</code>)

+	 * @see JavaCore#getDefaultOptions

+	 */

+	public static Hashtable getOptions() {

+		

+		Hashtable options = new Hashtable(10);

+

+		// see #initializeDefaultPluginPreferences() for changing default settings

+		Preferences preferences = getPlugin().getPluginPreferences();

+		

+		// get preferences set to their default

+		String[] defaultPropertyNames = preferences.defaultPropertyNames();

+		for (int i = 0; i < defaultPropertyNames.length; i++){

+			String propertyName = defaultPropertyNames[i];

+			options.put(propertyName, preferences.getString(propertyName));

+		}		

+		// get preferences not set to their default

+		String[] propertyNames = preferences.propertyNames();

+		for (int i = 0; i < propertyNames.length; i++){

+			String propertyName = propertyNames[i];

+			options.put(propertyName, preferences.getString(propertyName));

+		}		

+		// get encoding through resource plugin

+		options.put(CORE_ENCODING, ""/*ResourcesPlugin.getEncoding()*/); //$NON-NLS-1$

+		

+		return options;

+	}

+		

+	/**

 	 * Returns the single instance of the Java core plug-in runtime class.

 	 */

 	public static Plugin getPlugin() {

@@ -604,6 +987,56 @@
 	}

 

 	/**

+	 * Initializes the default preferences settings for this plug-in.

+	 */

+	protected void initializeDefaultPluginPreferences() {

+		

+		Preferences preferences = getPluginPreferences();

+	

+		// Compiler settings

+		preferences.setDefault("org.eclipse.jdt.core.compiler.debug.localVariable", "generate"); //$NON-NLS-1$ //$NON-NLS-2$

+		preferences.setDefault("org.eclipse.jdt.core.compiler.debug.lineNumber", "generate"); //$NON-NLS-1$ //$NON-NLS-2$

+		preferences.setDefault("org.eclipse.jdt.core.compiler.debug.sourceFile", "generate"); //$NON-NLS-1$ //$NON-NLS-2$

+		preferences.setDefault("org.eclipse.jdt.core.compiler.codegen.unusedLocal", "preserve"); //$NON-NLS-1$ //$NON-NLS-2$

+		preferences.setDefault("org.eclipse.jdt.core.compiler.codegen.targetPlatform", "1.1"); //$NON-NLS-1$ //$NON-NLS-2$

+		preferences.setDefault("org.eclipse.jdt.core.compiler.problem.unreachableCode", "error"); //$NON-NLS-1$ //$NON-NLS-2$

+		preferences.setDefault("org.eclipse.jdt.core.compiler.problem.invalidImport", "error"); //$NON-NLS-1$ //$NON-NLS-2$

+		preferences.setDefault("org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod", "warning"); //$NON-NLS-1$ //$NON-NLS-2$

+		preferences.setDefault("org.eclipse.jdt.core.compiler.problem.methodWithConstructorName", "warning"); //$NON-NLS-1$ //$NON-NLS-2$

+		preferences.setDefault("org.eclipse.jdt.core.compiler.problem.deprecation", "warning"); //$NON-NLS-1$ //$NON-NLS-2$

+		preferences.setDefault("org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock", "warning"); //$NON-NLS-1$ //$NON-NLS-2$

+		preferences.setDefault("org.eclipse.jdt.core.compiler.problem.unusedLocal", "ignore"); //$NON-NLS-1$ //$NON-NLS-2$

+		preferences.setDefault("org.eclipse.jdt.core.compiler.problem.unusedParameter", "ignore"); //$NON-NLS-1$ //$NON-NLS-2$

+		preferences.setDefault("org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation", "ignore"); //$NON-NLS-1$ //$NON-NLS-2$

+		preferences.setDefault("org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral", "ignore"); //$NON-NLS-1$ //$NON-NLS-2$

+		preferences.setDefault("org.eclipse.jdt.core.compiler.problem.assertIdentifier", "ignore"); //$NON-NLS-1$ //$NON-NLS-2$

+		preferences.setDefault("org.eclipse.jdt.core.compiler.source", "1.3"); //$NON-NLS-1$ //$NON-NLS-2$

+		preferences.setDefault("org.eclipse.jdt.core.compiler.compliance", "1.3"); //$NON-NLS-1$ //$NON-NLS-2$

+

+		// Builder settings

+		preferences.setDefault("org.eclipse.jdt.core.builder.resourceCopyExclusionFilter", ""); //$NON-NLS-1$ //$NON-NLS-2$

+		preferences.setDefault("org.eclipse.jdt.core.builder.invalidClasspath", "ignore");  //$NON-NLS-1$ //$NON-NLS-2$

+		

+		// JavaCore settings

+		preferences.setDefault("org.eclipse.jdt.core.computeJavaBuildOrder", "ignore"); //$NON-NLS-1$ //$NON-NLS-2$

+	

+		// Formatter settings

+		preferences.setDefault("org.eclipse.jdt.core.formatter.newline.openingBrace", "do not insert"); //$NON-NLS-1$ //$NON-NLS-2$

+		preferences.setDefault("org.eclipse.jdt.core.formatter.newline.controlStatement", "do not insert"); //$NON-NLS-1$ //$NON-NLS-2$

+		preferences.setDefault("org.eclipse.jdt.core.formatter.newline.clearAll", "preserve one"); //$NON-NLS-1$ //$NON-NLS-2$

+		preferences.setDefault("org.eclipse.jdt.core.formatter.newline.elseIf", "do not insert"); //$NON-NLS-1$ //$NON-NLS-2$

+		preferences.setDefault("org.eclipse.jdt.core.formatter.newline.emptyBlock", "insert"); //$NON-NLS-1$ //$NON-NLS-2$

+		preferences.setDefault("org.eclipse.jdt.core.formatter.lineSplit", "80"); //$NON-NLS-1$ //$NON-NLS-2$

+		preferences.setDefault("org.eclipse.jdt.core.formatter.style.assignment", "normal"); //$NON-NLS-1$ //$NON-NLS-2$

+		preferences.setDefault("org.eclipse.jdt.core.formatter.tabulation.char", "tab"); //$NON-NLS-1$ //$NON-NLS-2$

+		preferences.setDefault("org.eclipse.jdt.core.formatter.tabulation.size", "4"); //$NON-NLS-1$ //$NON-NLS-2$

+		

+		// CodeAssist settings

+		preferences.setDefault("org.eclipse.jdt.core.codeComplete.visibilityCheck", "disabled"); //$NON-NLS-1$ //$NON-NLS-2$

+		preferences.setDefault("org.eclipse.jdt.core.codeComplete.forceImplicitQualification", "disabled"); //$NON-NLS-1$ //$NON-NLS-2$

+	}

+	

+	/**

 	 * Returns whether the given marker references the given Java element.

 	 * Used for markers which denote a Java element rather than a resource.

 	 *

@@ -681,8 +1114,7 @@
 	 * 	segments

 	 * @return a new container classpath entry

 	 * 

-	 * @see JavaCore#getResolvedClasspathContainer(IPath, IJavaProject)

-	 * @see JavaCore#classpathContainerChanged(IPath, IJavaElement, IProgressMonitor)

+	 * @see JavaCore#getClasspathContainer(IPath, IJavaProject)

 	 * @see JavaCore#newContainerEntry(IPath, boolean)

 	 * @since 2.0

 	 */

@@ -1324,6 +1756,35 @@
 	}

 

 	/**

+	 * Sets the current table of options. All and only the options explicitly included in the given table 

+	 * are remembered; all previous option settings are forgotten, including ones not explicitly

+	 * mentioned.

+	 * <p>

+	 * For a complete description of the configurable options, see <code>getDefaultOptions</code>.

+	 * </p>

+	 * 

+	 * @param newOptions the new options (key type: <code>String</code>; value type: <code>String</code>),

+	 *   or <code>null</code> to reset all options to their default values

+	 * @see JavaCore#getDefaultOptions

+	 */

+	public static void setOptions(Hashtable newOptions) {

+		

+		// see #initializeDefaultPluginPreferences() for changing default settings

+		Preferences preferences = getPlugin().getPluginPreferences();

+

+		if (newOptions == null){

+			newOptions = JavaCore.getDefaultOptions();

+		}

+		Enumeration keys = newOptions.keys();

+		while (keys.hasMoreElements()){

+			String key = (String)keys.nextElement();

+			//if (key.equals(CORE_ENCODING)) continue; // skipped, contributed by resource prefs

+			String value = (String)newOptions.get(key);

+			preferences.setValue(key, value);

+		}

+	}

+	

+	/**

 	 * Shutdown the JavaCore plugin

 	 * <p>

 	 * De-registers the JavaModelManager as a resource changed listener and save participant.

@@ -1395,7 +1856,7 @@
 

 		if (monitor != null && monitor.isCanceled()) return;

 		

-		boolean mayChangeProjectDependencies = false;

+		boolean needCycleCheck = false;

 		int varLength = variableNames.length;

 		

 		// gather classpath information for updating

@@ -1450,14 +1911,14 @@
 								affectedProjects.put(project, ((JavaProject)project).getResolvedClasspath(true));

 								

 								// also check whether it will be necessary to update proj references and cycle markers

-								if (!mayChangeProjectDependencies && entry.getPath().segmentCount() ==  1){

+								if (!needCycleCheck && entry.getPath().segmentCount() ==  1){

 									IPath oldPath = (IPath)JavaModelManager.Variables.get(variableName);

 									if (oldPath != null && oldPath.segmentCount() == 1) {

-										mayChangeProjectDependencies = true;

+										needCycleCheck = true;

 									} else {

 										IPath newPath = variablePaths[k];

 										if (newPath != null && newPath.segmentCount() == 1) {

-											mayChangeProjectDependencies = true;

+											needCycleCheck = true;

 										}

 									}

 								}

@@ -1517,9 +1978,9 @@
 							project.getWorkspace().isAutoBuilding(),

 							// force build if in auto build mode

 							(IClasspathEntry[]) affectedProjects.get(project),

-							size == 1 && mayChangeProjectDependencies); // no individual check if more than 1 project to update

+							size == 1 && needCycleCheck); // no individual check if more than 1 project to update

 				}

-				if (size > 1 && mayChangeProjectDependencies){

+				if (size > 1 && needCycleCheck){

 					try {

 						// use workspace runnable for protecting marker manipulation

 //						ResourcesPlugin.getWorkspace().run(

@@ -1541,515 +2002,4 @@
 			}

 		}

 	}

-	

-	/**

-	 * Sets the current table of options. All and only the options explicitly included in the given table 

-	 * are remembered; all previous option settings are forgotten, including ones not explicitly

-	 * mentioned.

-	 * <p>

-	 * For a complete description of the configurable options, see <code>getDefaultOptions</code>.

-	 * </p>

-	 * 

-	 * @param newOptions the new options (key type: <code>String</code>; value type: <code>String</code>),

-	 *   or <code>null</code> to reset all options to their default values

-	 * @see JavaCore#getDefaultOptions

-	 */

-	public static void setOptions(Hashtable newOptions) {

-		if (newOptions == null){

-			JavaModelManager.Options = getDefaultOptions();

-		} else {

-			JavaModelManager.Options = (Hashtable)newOptions.clone();

-		}

-	}

-

-	/**

-	 * Returns the table of the current options. Initially, all options have their default values,

-	 * and this method returns a table that includes all known options.

-	 * <p>

-	 * For a complete description of the configurable options, see <code>getDefaultOptions</code>.

-	 * </p>

-	 * 

-	 * @return table of current settings of all options 

-	 *   (key type: <code>String</code>; value type: <code>String</code>)

-	 * @see JavaCore#getDefaultOptions

-	 */

-	public static Hashtable getOptions() {

-		return (Hashtable)JavaModelManager.Options.clone();

-	}

-

-	/**

-	 * Returns a table of all known configurable options with their default values.

-	 * These options allow to configure the behavior of the underlying components.

-	 * The client may safely use the result as a template that they can modify and

-	 * then pass to <code>setOptions</code>.

-	 * 

-	 * Note: more options might be added in further releases.

-	 * </pre>

-	 * RECOGNIZED OPTIONS:

-	 *  COMPILER / Generating Local Variable Debug Attribute

- 	 *    When generated, this attribute will enable local variable names 

-	 *    to be displayed in debugger, only in place where variables are 

-	 *    definitely assigned (.class file is then bigger)

-	 *     - option id:			"org.eclipse.jdt.core.compiler.debug.localVariable"

-	 *     - possible values:	{ "generate", "do not generate" }

-	 *     - default:			"generate"

-	 *

-	 *  COMPILER / Generating Line Number Debug Attribute 

-	 *    When generated, this attribute will enable source code highlighting in debugger 

-	 *    (.class file is then bigger).

-	 *     - option id:			"org.eclipse.jdt.core.compiler.debug.lineNumber"

-	 *     - possible values:	{ "generate", "do not generate" }

-	 *     - default:			"generate"

-	 *		

-	 *  COMPILER / Generating Source Debug Attribute 

-	 *    When generated, this attribute will enable the debugger to present the 

-	 *    corresponding source code.

-	 *     - option id:			"org.eclipse.jdt.core.compiler.debug.sourceFile"

-	 *     - possible values:	{ "generate", "do not generate" }

-	 *     - default:			"generate"

-	 *		

-	 *  COMPILER / Preserving Unused Local Variables

-	 *    Unless requested to preserve unused local variables (i.e. never read), the 

-	 *    compiler will optimize them out, potentially altering debugging

-	 *     - option id:			"org.eclipse.jdt.core.compiler.codegen.unusedLocal"

-	 *     - possible values:	{ "preserve", "optimize out" }

-	 *     - default:			"preserve"

-	 * 

-	 *  COMPILER / Defining Target Java Platform

-	 *    For binary compatibility reason, .class files can be tagged to with certain VM versions and later.

-	 *    Note that "1.4" target require to toggle compliance mode to "1.4" too.

-	 *     - option id:			"org.eclipse.jdt.core.compiler.codegen.targetPlatform"

-	 *     - possible values:	{ "1.1", "1.2", "1.3", "1.4" }

-	 *     - default:			"1.1"

-	 *

-	 *	COMPILER / Reporting Unreachable Code

-	 *    Unreachable code can optionally be reported as an error, warning or simply 

-	 *    ignored. The bytecode generation will always optimized it out.

-	 *     - option id:			"org.eclipse.jdt.core.compiler.problem.unreachableCode"

-	 *     - possible values:	{ "error", "warning", "ignore" }

-	 *     - default:			"error"

-	 *

-	 *	COMPILER / Reporting Invalid Import

-	 *    An import statement that cannot be resolved might optionally be reported 

-	 *    as an error, as a warning or ignored.

-	 *     - option id:			"org.eclipse.jdt.core.compiler.problem.invalidImport"

-	 *     - possible values:	{ "error", "warning", "ignore" }

-	 *     - default:			"error"

-	 *

-	 *	COMPILER / Reporting Attempt to Override Package-Default Method

-	 *    A package default method is not visible in a different package, and thus 

-	 *    cannot be overriden. When enabling this option, the compiler will signal 

-	 *    such scenarii either as an error or a warning.

-	 *     - option id:			"org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod"

-	 *     - possible values:	{ "error", "warning", "ignore" }

-	 *     - default:			"warning"

-	 *

-	 *  COMPILER / Reporting Method With Constructor Name

-	 *    Naming a method with a constructor name is generally considered poor 

-	 *    style programming. When enabling this option, the compiler will signal such 

-	 *    scenarii either as an error or a warning.

-	 *     - option id:			"org.eclipse.jdt.core.compiler.problem.methodWithConstructorName"

-	 *     - possible values:	{ "error", "warning", "ignore" }

-	 *     - default:			"warning"

-	 *

-	 *  COMPILER / Reporting Deprecation

-	 *    When enabled, the compiler will signal use of deprecated API either as an 

-	 *    error or a warning.

-	 *     - option id:			"org.eclipse.jdt.core.compiler.problem.deprecation"

-	 *     - possible values:	{ "error", "warning", "ignore" }

-	 *     - default:			"warning"

-	 *

-	 *	COMPILER / Reporting Hidden Catch Block

-	 *    Locally to a try statement, some catch blocks may hide others , e.g.

-	 *      try {	throw new java.io.CharConversionException();

-	 *      } catch (java.io.CharConversionException e) {

-	 *      } catch (java.io.IOException e) {}. 

-	 *    When enabling this option, the compiler will issue an error or a warning for hidden 

-	 *    catch blocks corresponding to checked exceptions

-	 *     - option id:			"org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock"

-	 *     - possible values:	{ "error", "warning", "ignore" }

-	 *     - default:			"warning"

-	 *

-	 *  COMPILER / Reporting Unused Local

-	 *    When enabled, the compiler will issue an error or a warning for unused local 

-	 *    variables (i.e. variables never read from)

-	 *     - option id:			"org.eclipse.jdt.core.compiler.problem.unusedLocal"

-	 *     - possible values:	{ "error", "warning", "ignore" }

-	 *     - default:			"ignore"

-	 *

-	 *	COMPILER / Reporting Unused Parameter

-	 *    When enabled, the compiler will issue an error or a warning for unused method 

-	 *    parameters (i.e. parameters never read from)

-	 *     - option id:			"org.eclipse.jdt.core.compiler.problem.unusedParameter"

-	 *     - possible values:	{ "error", "warning", "ignore" }

-	 *     - default:			"ignore"

-	 *

-	 *	COMPILER / Reporting Synthetic Access Emulation

-	 *    When enabled, the compiler will issue an error or a warning whenever it emulates 

-	 *    access to a non-accessible member of an enclosing type. Such access can have

-	 *    performance implications.

-	 *     - option id:			"org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation"

-	 *     - possible values:	{ "error", "warning", "ignore" }

-	 *     - default:			"ignore"

-	 *

-	 * COMPILER / Reporting Non-Externalized String Literal

-	 *    When enabled, the compiler will issue an error or a warning for non externalized 

-	 *    String literal (i.e. non tagged with //$NON-NLS-<n>$). 

-	 *     - option id:			"org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral"

-	 *     - possible values:	{ "error", "warning", "ignore" }

-	 *     - default:			"ignore"

-	 * 

-	 * COMPILER / Reporting Usage of 'assert' Identifier

-	 *    When enabled, the compiler will issue an error or a warning whenever 'assert' is 

-	 *    used as an identifier (reserved keyword in 1.4)

-	 *     - option id:			"org.eclipse.jdt.core.compiler.problem.assertIdentifier"

-	 *     - possible values:	{ "error", "warning", "ignore" }

-	 *     - default:			"ignore"

-	 * 

-	 * COMPILER / Setting Source Compatibility Mode

-	 *    Specify whether source is 1.3 or 1.4 compatible. From 1.4 on, 'assert' is a keyword

-	 *    reserved for assertion support. Also note, than when toggling to 1.4 mode, the target VM

-	 *   level should be set to "1.4" and the compliance mode should be "1.4".

-	 *     - option id:			"org.eclipse.jdt.core.compiler.source"

-	 *     - possible values:	{ "1.3", "1.4" }

-	 *     - default:			"1.3"

-	 * 

-	 * COMPILER / Setting Compliance Level

-	 *    Select the compliance level for the compiler. In "1.3" mode, source and target settings

-	 *    should not go beyond "1.3" level.

-	 *     - option id:			"org.eclipse.jdt.core.compiler.compliance"

-	 *     - possible values:	{ "1.3", "1.4" }

-	 *     - default:			"1.3"

-	 * 

-	 * BUILDER / Specifying Filters for Resource Copying Control

-	 *    Allow to specify some filters to control the resource copy process.

-	 *   Note: no trimming of the names is performed, the list should thus not contain any superfluous

-	 *              character.

-	 *     - option id:			"org.eclipse.jdt.core.builder.resourceCopyExclusionFilter"

-	 *     - possible values:	{ "<name>[,<name>]* } where <name> is a file name pattern (only * wild-cards allowed)

-	 *     - default:			""

-	 * 

-	 * BUILDER / Abort  if Invalid Classpath

-	 *    Allow to toggle the builder to abort if the classpath is invalid

-	 *     - option id:			"org.eclipse.jdt.core.builder.invalidClasspath"

-	 *     - possible values:	{ "abort", "ignore" }

-	 *     - default:			"ignore"

-	 * 

-	 *	JAVACORE / Computing Project Build Order

-	 *    Indicate whether JavaCore should enforce the project build order to be based on

-	 *    the classpath prerequisite chain. When requesting to compute, this takes over

-	 *    the platform default order (based on project references).

-	 *     - option id:			"org.eclipse.jdt.core.computeJavaBuildOrder"

-	 *     - possible values:	{ "compute", "ignore" }

-	 *     - default:			"ignore"	 

-	 * 

-	 * JAVACORE / Specify Default Source Encoding Format

-	 *    Select the encoding format for compiled sources.

-	 *     - option id:			"org.eclipse.jdt.core.encoding"

-	 *     - possible values:	{ "" for platform default, or any of the supported encoding name}.

-	 *     - default:			""

-	 * 

-	 *	FORMATTER / Inserting New Line Before Opening Brace

-	 *    When Insert, a new line is inserted before an opening brace, otherwise nothing

-	 *    is inserted

-	 *     - option id:			"org.eclipse.jdt.core.formatter.newline.openingBrace"

-	 *     - possible values:	{ "insert", "do not insert" }

-	 *     - default:			"do not insert"

-	 * 

-	 *	FORMATTER / Inserting New Line Inside Control Statement

-	 *    When Insert, a new line is inserted between } and following else, catch, finally

-	 *     - option id:			"org.eclipse.jdt.core.formatter.newline.controlStatement"

-	 *     - possible values:	{ "insert", "do not insert" }

-	 *     - default:			"do not insert"

-	 * 

-	 *	FORMATTER / Clearing Blank Lines

-	 *    When Clear all, all blank lines are removed. When Preserve one, only one is kept

-	 *    and all others removed.

-	 *     - option id:			"org.eclipse.jdt.core.formatter.newline.clearAll"

-	 *     - possible values:	{ "clear all", "preserve one" }

-	 *     - default:			"preserve one"

-	 * 

-	 *	FORMATTER / Inserting New Line Between Else/If 

-	 *    When Insert, a blank line is inserted between an else and an if when they are 

-	 *    contiguous. When choosing to not insert, else-if will be kept on the same

-	 *    line when possible.

-	 *     - option id:			"org.eclipse.jdt.core.formatter.newline.elseIf"

-	 *     - possible values:	{ "insert", "do not insert" }

-	 *     - default:			"do not insert"

-	 * 

-	 *	FORMATTER / Inserting New Line In Empty Block

-	 *    When insert, a line break is inserted between contiguous { and }, if } is not followed

-	 *    by a keyword.

-	 *     - option id:			"org.eclipse.jdt.core.formatter.newline.emptyBlock"

-	 *     - possible values:	{ "insert", "do not insert" }

-	 *     - default:			"insert"

-	 * 

-	 *	FORMATTER / Splitting Lines Exceeding Length

-	 *    Enable splitting of long lines (exceeding the configurable length). Length of 0 will

-	 *    disable line splitting

-	 *     - option id:			"org.eclipse.jdt.core.formatter.lineSplit"

-	 *     - possible values:	"<n>", where n is zero or a positive integer

-	 *     - default:			"80"

-	 * 

-	 *	FORMATTER / Compacting Assignment

-	 *    Assignments can be formatted asymmetrically, e.g. 'int x= 2;', when Normal, a space

-	 *    is inserted before the assignment operator

-	 *     - option id:			"org.eclipse.jdt.core.formatter.style.assignment"

-	 *     - possible values:	{ "compact", "normal" }

-	 *     - default:			"normal"

-	 * 

-	 *	FORMATTER / Defining Indentation Character

-	 *    Either choose to indent with tab characters or spaces

-	 *     - option id:			"org.eclipse.jdt.core.formatter.tabulation.char"

-	 *     - possible values:	{ "tab", "space" }

-	 *     - default:			"tab"

-	 * 

-	 *	FORMATTER / Defining Space Indentation Length

-	 *    When using spaces, set the amount of space characters to use for each 

-	 *    indentation mark.

-	 *     - option id:			"org.eclipse.jdt.core.formatter.tabulation.size"

-	 *     - possible values:	"<n>", where n is a positive integer

-	 *     - default:			"4"

-	 * 

-	 *	CODEASSIST / Activate Visibility Sensitive Completion

-	 *    When active, completion doesn't show that you can not see

-	 *    (eg. you can not see private methods of a super class).

-	 *     - option id:			"org.eclipse.jdt.core.codeComplete.visibilityCheck"

-	 *     - possible values:	{ "enabled", "disabled" }

-	 *     - default:			"disabled"

-	 * 

-	 *	CODEASSIST / Automatic Qualification of Implicit Members

-	 *    When active, completion automatically qualifies completion on implicit

-	 *    field references and message expressions.

-	 *     - option id:			"org.eclipse.jdt.core.codeComplete.forceImplicitQualification"

-	 *     - possible values:	{ "enabled", "disabled" }

-	 *     - default:			"disabled"

-	 * </pre>

-	 * 

-	 * @return a mutable table containing the default settings of all known options

-	 *   (key type: <code>String</code>; value type: <code>String</code>)

-	 * @see #setOptions

-	 */

- 	public static Hashtable getDefaultOptions(){

-	

-		Hashtable defaultOptions = new Hashtable(10);

-	

-		// Compiler settings

-		defaultOptions.put("org.eclipse.jdt.core.compiler.debug.localVariable", "generate"); //$NON-NLS-1$ //$NON-NLS-2$

-		defaultOptions.put("org.eclipse.jdt.core.compiler.debug.lineNumber", "generate"); //$NON-NLS-1$ //$NON-NLS-2$

-		defaultOptions.put("org.eclipse.jdt.core.compiler.debug.sourceFile", "generate"); //$NON-NLS-1$ //$NON-NLS-2$

-		defaultOptions.put("org.eclipse.jdt.core.compiler.codegen.unusedLocal", "preserve"); //$NON-NLS-1$ //$NON-NLS-2$

-		defaultOptions.put("org.eclipse.jdt.core.compiler.codegen.targetPlatform", "1.1"); //$NON-NLS-1$ //$NON-NLS-2$

-		defaultOptions.put("org.eclipse.jdt.core.compiler.problem.unreachableCode", "error"); //$NON-NLS-1$ //$NON-NLS-2$

-		defaultOptions.put("org.eclipse.jdt.core.compiler.problem.invalidImport", "error"); //$NON-NLS-1$ //$NON-NLS-2$

-		defaultOptions.put("org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod", "warning"); //$NON-NLS-1$ //$NON-NLS-2$

-		defaultOptions.put("org.eclipse.jdt.core.compiler.problem.methodWithConstructorName", "warning"); //$NON-NLS-1$ //$NON-NLS-2$

-		defaultOptions.put("org.eclipse.jdt.core.compiler.problem.deprecation", "warning"); //$NON-NLS-1$ //$NON-NLS-2$

-		defaultOptions.put("org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock", "warning"); //$NON-NLS-1$ //$NON-NLS-2$

-		defaultOptions.put("org.eclipse.jdt.core.compiler.problem.unusedLocal", "ignore"); //$NON-NLS-1$ //$NON-NLS-2$

-		defaultOptions.put("org.eclipse.jdt.core.compiler.problem.unusedParameter", "ignore"); //$NON-NLS-1$ //$NON-NLS-2$

-		defaultOptions.put("org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation", "ignore"); //$NON-NLS-1$ //$NON-NLS-2$

-		defaultOptions.put("org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral", "ignore"); //$NON-NLS-1$ //$NON-NLS-2$

-		defaultOptions.put("org.eclipse.jdt.core.compiler.problem.assertIdentifier", "ignore"); //$NON-NLS-1$ //$NON-NLS-2$

-		defaultOptions.put("org.eclipse.jdt.core.compiler.source", "1.3"); //$NON-NLS-1$ //$NON-NLS-2$

-		defaultOptions.put("org.eclipse.jdt.core.compiler.compliance", "1.3"); //$NON-NLS-1$ //$NON-NLS-2$

-

-		// Builder settings

-		defaultOptions.put("org.eclipse.jdt.core.builder.resourceCopyExclusionFilter", ""); //$NON-NLS-1$ //$NON-NLS-2$

-		defaultOptions.put("org.eclipse.jdt.core.builder.invalidClasspath", "ignore");  //$NON-NLS-1$ //$NON-NLS-2$

-		

-		// JavaCore settings

-		defaultOptions.put("org.eclipse.jdt.core.computeJavaBuildOrder", "ignore"); //$NON-NLS-1$ //$NON-NLS-2$

-		defaultOptions.put("org.eclipse.jdt.core.encoding", ""); //$NON-NLS-1$ //$NON-NLS-2$

-	

-		// Formatter settings

-		defaultOptions.put("org.eclipse.jdt.core.formatter.newline.openingBrace", "do not insert"); //$NON-NLS-1$ //$NON-NLS-2$

-		defaultOptions.put("org.eclipse.jdt.core.formatter.newline.controlStatement", "do not insert"); //$NON-NLS-1$ //$NON-NLS-2$

-		defaultOptions.put("org.eclipse.jdt.core.formatter.newline.clearAll", "preserve one"); //$NON-NLS-1$ //$NON-NLS-2$

-		defaultOptions.put("org.eclipse.jdt.core.formatter.newline.elseIf", "do not insert"); //$NON-NLS-1$ //$NON-NLS-2$

-		defaultOptions.put("org.eclipse.jdt.core.formatter.newline.emptyBlock", "insert"); //$NON-NLS-1$ //$NON-NLS-2$

-		defaultOptions.put("org.eclipse.jdt.core.formatter.lineSplit", "80"); //$NON-NLS-1$ //$NON-NLS-2$

-		defaultOptions.put("org.eclipse.jdt.core.formatter.style.assignment", "normal"); //$NON-NLS-1$ //$NON-NLS-2$

-		defaultOptions.put("org.eclipse.jdt.core.formatter.tabulation.char", "tab"); //$NON-NLS-1$ //$NON-NLS-2$

-		defaultOptions.put("org.eclipse.jdt.core.formatter.tabulation.size", "4"); //$NON-NLS-1$ //$NON-NLS-2$

-		

-		// CodeAssist settings

-		defaultOptions.put("org.eclipse.jdt.core.codeComplete.visibilityCheck", "disabled"); //$NON-NLS-1$ //$NON-NLS-2$

-		defaultOptions.put("org.eclipse.jdt.core.codeComplete.forceImplicitQualification", "disabled"); //$NON-NLS-1$ //$NON-NLS-2$

-		

-		return defaultOptions;

-	}

-

-

-	/**

-	 * Names of recognized configurable options

-	 */

-	

-	/** 

-	 * @deprecated - use string value directly

-	 * @see JavaCore#getDefaultOptions

-	 */

-	public static final String COMPILER_LOCAL_VARIABLE_ATTR = PLUGIN_ID + ".compiler.debug.localVariable"; //$NON-NLS-1$

-		// possible values are GENERATE or DO_NOT_GENERATE (default is DO_NOT_GENERATE)

-		

-	/** 

-	 * @deprecated - use string value directly

-	 * @see JavaCore#getDefaultOptions

-	 */

-	public static final String COMPILER_LINE_NUMBER_ATTR = PLUGIN_ID + ".compiler.debug.lineNumber"; //$NON-NLS-1$

-		// possible values are  GENERATE or DO_NOT_GENERATE (default is GENERATE)

-		

-	/** 

-	 * @deprecated - use string value directly

-	 * @see JavaCore#getDefaultOptions

-	 */

-	public static final String COMPILER_SOURCE_FILE_ATTR = PLUGIN_ID + ".compiler.debug.sourceFile"; //$NON-NLS-1$

-		// possible values are  GENERATE or DO_NOT_GENERATE (default is GENERATE)

-

-	/** 

-	 * @deprecated - use string value directly

-	 * @see JavaCore#getDefaultOptions

-	 */

-	public static final String COMPILER_CODEGEN_UNUSED_LOCAL = PLUGIN_ID + ".compiler.codegen.unusedLocal"; //$NON-NLS-1$

-		// possible values are PRESERVE or OPTIMIZE_OUT	(default is OPTIMIZE_OUT)

-

-	/** 

-	 * @deprecated - use string value directly

-	 * @see JavaCore#getDefaultOptions

-	 */

-	public static final String COMPILER_CODEGEN_TARGET_PLATFORM = PLUGIN_ID + ".compiler.codegen.targetPlatform"; //$NON-NLS-1$

-		// possible values are VERSION_1_1 or VERSION_1_2	(default is VERSION_1_1)

-

-	/** 

-	 * @deprecated - use string value directly

-	 * @see JavaCore#getDefaultOptions

-	 */

-	public static final String COMPILER_PB_UNREACHABLE_CODE = PLUGIN_ID + ".compiler.problem.unreachableCode"; //$NON-NLS-1$

-		// possible values are ERROR or WARNING	(default is ERROR)

-

-	/** 

-	 * @deprecated - use string value directly

-	 * @see JavaCore#getDefaultOptions

-	 */

-	public static final String COMPILER_PB_INVALID_IMPORT = PLUGIN_ID + ".compiler.problem.invalidImport"; //$NON-NLS-1$

-		// possible values are ERROR or WARNING	(default is ERROR)

-

-	/** 

-	 * @deprecated - use string value directly

-	 * @see JavaCore#getDefaultOptions

-	 */

-	public static final String COMPILER_PB_OVERRIDING_PACKAGE_DEFAULT_METHOD = PLUGIN_ID + ".compiler.problem.overridingPackageDefaultMethod"; //$NON-NLS-1$

-		// possible values are WARNING or IGNORE (default is WARNING)

-		

-	/** 

-	 * @deprecated - use string value directly

-	 * @see JavaCore#getDefaultOptions

-	 */

-	public static final String COMPILER_PB_METHOD_WITH_CONSTRUCTOR_NAME = PLUGIN_ID + ".compiler.problem.methodWithConstructorName"; //$NON-NLS-1$

-		// possible values are WARNING or IGNORE (default is WARNING)

-

-	/** 

-	 * @deprecated - use string value directly

-	 * @see JavaCore#getDefaultOptions

-	 */

-	public static final String COMPILER_PB_DEPRECATION = PLUGIN_ID + ".compiler.problem.deprecation"; //$NON-NLS-1$

-		// possible values are WARNING or IGNORE (default is WARNING)

-

-	/** 

-	 * @deprecated - use string value directly

-	 * @see JavaCore#getDefaultOptions

-	 */

-	public static final String COMPILER_PB_HIDDEN_CATCH_BLOCK = PLUGIN_ID + ".compiler.problem.hiddenCatchBlock"; //$NON-NLS-1$

-		// possible values are WARNING or IGNORE (default is WARNING)

-

-	/** 

-	 * @deprecated - use string value directly

-	 * @see JavaCore#getDefaultOptions

-	 */

-	public static final String COMPILER_PB_UNUSED_LOCAL = PLUGIN_ID + ".compiler.problem.unusedLocal"; //$NON-NLS-1$

-		// possible values are WARNING or IGNORE (default is WARNING)

-

-	/** 

-	 * @deprecated - use string value directly

-	 * @see JavaCore#getDefaultOptions

-	 */

-	public static final String COMPILER_PB_UNUSED_PARAMETER = PLUGIN_ID + ".compiler.problem.unusedParameter"; //$NON-NLS-1$

-		// possible values are WARNING or IGNORE (default is WARNING)

-

-	/** 

-	 * @deprecated - use string value directly

-	 * @see JavaCore#getDefaultOptions

-	 */

-	public static final String COMPILER_PB_SYNTHETIC_ACCESS_EMULATION = PLUGIN_ID + ".compiler.problem.syntheticAccessEmulation"; //$NON-NLS-1$

-		// possible values are WARNING or IGNORE (default is IGNORE)

-

-	/** 

-	 * @deprecated - use string value directly

-	 * @see JavaCore#getDefaultOptions

-	 */

-	public static final String CORE_JAVA_BUILD_ORDER = PLUGIN_ID + ".computeJavaBuildOrder"; //$NON-NLS-1$

-		// possible values are COMPUTE or IGNORE (default is COMPUTE)

-

-	/**

-	 * Possible values for configurable options

-	 */

-	/** 

-	 * @deprecated - use string value directly

-	 * @see JavaCore#getDefaultOptions

-	 */

-	public static final String GENERATE = "generate"; //$NON-NLS-1$

-

-	/** 

-	 * @deprecated - use string value directly

-	 * @see JavaCore#getDefaultOptions

-	 */

-	public static final String DO_NOT_GENERATE = "do not generate"; //$NON-NLS-1$

-

-	/** 

-	 * @deprecated - use string value directly

-	 * @see JavaCore#getDefaultOptions

-	 */

-	public static final String PRESERVE = "preserve"; //$NON-NLS-1$

-

-	/** 

-	 * @deprecated - use string value directly

-	 * @see JavaCore#getDefaultOptions

-	 */

-	public static final String OPTIMIZE_OUT = "optimize out"; //$NON-NLS-1$

-

-	/** 

-	 * @deprecated - use string value directly

-	 * @see JavaCore#getDefaultOptions

-	 */

-	public static final String VERSION_1_1 = "1.1"; //$NON-NLS-1$

-

-	/** 

-	 * @deprecated - use string value directly

-	 * @see JavaCore#getDefaultOptions

-	 */

-	public static final String VERSION_1_2 = "1.2"; //$NON-NLS-1$

-

-	/** 

-	 * @deprecated - use string value directly

-	 * @see JavaCore#getDefaultOptions

-	 */

-	public static final String ERROR = "error"; //$NON-NLS-1$

-

-	/** 

-	 * @deprecated - use string value directly

-	 * @see JavaCore#getDefaultOptions

-	 */

-	public static final String WARNING = "warning"; //$NON-NLS-1$

-

-	/** 

-	 * @deprecated - use string value directly

-	 * @see JavaCore#getDefaultOptions

-	 */

-	public static final String IGNORE = "ignore"; //$NON-NLS-1$

-

-	/** 

-	 * @deprecated - use string value directly

-	 * @see JavaCore#getDefaultOptions

-	 */

-	public static final String COMPUTE = "compute"; //$NON-NLS-1$

 }
\ No newline at end of file
diff --git a/model/org/eclipse/jdt/core/JavaModelException.java b/model/org/eclipse/jdt/core/JavaModelException.java
index 7f96df3..8572eba 100644
--- a/model/org/eclipse/jdt/core/JavaModelException.java
+++ b/model/org/eclipse/jdt/core/JavaModelException.java
@@ -34,7 +34,6 @@
  * @param exception the <code>Throwable</code>

  * @param code one of the Java-specific status codes declared in

  *   <code>IJavaModelStatusConstants</code>

- * @return the new Java model exception

  * @see IJavaModelStatusConstants

  * @see org.eclipse.core.runtime.IStatus#ERROR

  */

@@ -47,7 +46,6 @@
  * <code>JavaModelException(exception,IJavaModelStatusConstants.CORE_EXCEPTION</code>.

  *

  * @param exception the <code>CoreException</code>

- * @return the new Java model exception

  */

 public JavaModelException(CoreException exception) {

 	super(exception.getStatus());

@@ -57,7 +55,6 @@
  * Creates a Java model exception for the given Java-specific status object.

  *

  * @param status the Java-specific status object

- * @return the new Java model exception

  */

 public JavaModelException(IJavaModelStatus status) {

 	super(status);

diff --git a/model/org/eclipse/jdt/core/ToolFactory.java b/model/org/eclipse/jdt/core/ToolFactory.java
index 3b6e364..8be67c3 100644
--- a/model/org/eclipse/jdt/core/ToolFactory.java
+++ b/model/org/eclipse/jdt/core/ToolFactory.java
@@ -47,7 +47,7 @@
 	 * will default to using the default code formatter.
 	 * 
 	 * @see ICodeFormatter
-	 * @see ToolFactory#createDefaultCodeFormatter()
+	 * @see ToolFactory#createDefaultCodeFormatter(Map)
 	 */
 	public static ICodeFormatter createCodeFormatter(){
 		
diff --git a/model/org/eclipse/jdt/internal/core/BasicCompilationUnit.java b/model/org/eclipse/jdt/internal/core/BasicCompilationUnit.java
index e003ad4..a24c70b 100644
--- a/model/org/eclipse/jdt/internal/core/BasicCompilationUnit.java
+++ b/model/org/eclipse/jdt/internal/core/BasicCompilationUnit.java
@@ -10,10 +10,9 @@
 

 /**

  * A basic implementation of <code>ICompilationUnit</code>

- * for use in the <code>SourceMapper</code>./

+ * for use in the <code>SourceMapper</code>.

  * @see ICompilationUnit

  */

- 

 public class BasicCompilationUnit implements ICompilationUnit {

 	protected char[] contents;

 	protected char[] fileName;

diff --git a/model/org/eclipse/jdt/internal/core/BinaryType.java b/model/org/eclipse/jdt/internal/core/BinaryType.java
index 0881a9e..682c1c7 100644
--- a/model/org/eclipse/jdt/internal/core/BinaryType.java
+++ b/model/org/eclipse/jdt/internal/core/BinaryType.java
@@ -33,7 +33,7 @@
 	Assert.isTrue(name.indexOf('.') == -1);

 }

 /**

- * @see IOpenable

+ * @see IOpenable#close()

  */

 public void close() throws JavaModelException {

 	

@@ -77,7 +77,7 @@
 	}

 }

 /**

- * @see IType

+ * @see IType#codeComplete(char[], int, int, char[][], char[][], int[], boolean, ICompletionRequestor)

  */

 public void codeComplete(char[] snippet,int insertion,int position,char[][] localVariableTypeNames,char[][] localVariableNames,int[] localVariableModifiers,boolean isStatic,ICompletionRequestor requestor) throws JavaModelException {

 	if (requestor == null) {

@@ -94,7 +94,7 @@
 		if ("".equals(encoding)) encoding = null; //$NON-NLS-1$

 		

 		char[] prefix = CharOperation.concat(source.substring(0, insertion).toCharArray(), new char[]{'{'});

-		char[] suffix =  CharOperation.concat(source.substring(insertion).toCharArray(), new char[]{'}'});

+		char[] suffix =  CharOperation.concat(new char[]{'}'}, source.substring(insertion).toCharArray());

 		char[] fakeSource = CharOperation.concat(prefix, snippet, suffix);

 		

 		BasicCompilationUnit cu = 

@@ -109,31 +109,31 @@
 	}

 }

 /**

- * @see IType

+ * @see IType#createField(String, IJavaElement, boolean, IProgressMonitor)

  */

 public IField createField(String contents, IJavaElement sibling, boolean force, IProgressMonitor monitor) throws JavaModelException {

 	throw new JavaModelException(new JavaModelStatus(IJavaModelStatusConstants.READ_ONLY, this));

 }

 /**

- * @see IType

+ * @see IType#createInitializer(String, IJavaElement, IProgressMonitor)

  */

 public IInitializer createInitializer(String contents, IJavaElement sibling, IProgressMonitor monitor) throws JavaModelException {

 	throw new JavaModelException(new JavaModelStatus(IJavaModelStatusConstants.READ_ONLY, this));

 }

 /**

- * @see IType

+ * @see IType#createMethod(String, IJavaElement, boolean, IProgressMonitor)

  */

 public IMethod createMethod(String contents, IJavaElement sibling, boolean force, IProgressMonitor monitor) throws JavaModelException {

 	throw new JavaModelException(new JavaModelStatus(IJavaModelStatusConstants.READ_ONLY, this));

 }

 /**

- * @see IType

+ * @see IType#createType(String, IJavaElement, boolean, IProgressMonitor)

  */

 public IType createType(String contents, IJavaElement sibling, boolean force, IProgressMonitor monitor) throws JavaModelException {

 	throw new JavaModelException(new JavaModelStatus(IJavaModelStatusConstants.READ_ONLY, this));

 }

-/*

- * @see IType

+/**

+ * @see IType#findMethods(IMethod)

  */

 public IMethod[] findMethods(IMethod method) {

 	try {

@@ -144,7 +144,7 @@
 	}

 }

 /**

- * @see IParent 

+ * @see IParent#getChildren()

  */

 public IJavaElement[] getChildren() throws JavaModelException {

 	// ensure present

@@ -161,7 +161,7 @@
 	return (ClassFileInfo) cf.getElementInfo();

 }

 /**

- * @see IMember

+ * @see IMember#getDeclaringType()

  */

 public IType getDeclaringType() {

 	IClassFile classFile = this.getClassFile();

@@ -212,13 +212,13 @@
 	}

 }

 /**

- * @see IType#getField

+ * @see IType#getField(String name)

  */

 public IField getField(String name) {

 	return new BinaryField(this, name);

 }

 /**

- * @see IType

+ * @see IType#getFields()

  */

 public IField[] getFields() throws JavaModelException {

 	ArrayList list = getChildrenOfType(FIELD);

@@ -232,20 +232,20 @@
 	}

 }

 /**

- * @see IMember

+ * @see IMember#getFlags()

  */

 public int getFlags() throws JavaModelException {

 	IBinaryType info = (IBinaryType) getRawInfo();

 	return info.getModifiers();

 }

 /**

- * @see IType

+ * @see IType#getFullyQualifiedName()

  */

 public String getFullyQualifiedName() {

 	return this.getFullyQualifiedName('$');

 }

 /**

- * @see IType(char)

+ * @see IType#getFullyQualifiedName(char enclosingTypeSeparator)

  */

 public String getFullyQualifiedName(char enclosingTypeSeparator) {

 	String packageName = getPackageFragment().getElementName();

@@ -255,25 +255,25 @@
 	return packageName + '.' + getTypeQualifiedName(enclosingTypeSeparator);

 }

 /**

- * @see IType

+ * @see IType#getInitializer(int occurrenceCount)

  */

 public IInitializer getInitializer(int occurrenceCount) {

 	return new Initializer(this, occurrenceCount);

 }

 /**

- * @see IType

+ * @see IType#getInitializers()

  */

 public IInitializer[] getInitializers() {

 	return NO_INITIALIZERS;

 }

 /**

- * @see IType#getMethod

+ * @see IType#getMethod(String name, String[] parameterTypeSignatures)

  */

 public IMethod getMethod(String name, String[] parameterTypeSignatures) {

 	return new BinaryMethod(this, name, parameterTypeSignatures);

 }

 /**

- * @see IType

+ * @see IType#getMethods()

  */

 public IMethod[] getMethods() throws JavaModelException {

 	ArrayList list = getChildrenOfType(METHOD);

@@ -287,7 +287,7 @@
 	}

 }

 /**

- * @see IType

+ * @see IType#getPackageFragment()

  */

 public IPackageFragment getPackageFragment() {

 	IJavaElement parent = fParent;

@@ -303,7 +303,7 @@
 	return null;

 }

 /**

- * @see IType#getSuperclassName

+ * @see IType#getSuperclassName()

  */

 public String getSuperclassName() throws JavaModelException {

 	IBinaryType info = (IBinaryType) getRawInfo();

@@ -314,7 +314,7 @@
 	return new String(ClassFile.translatedName(superclassName));

 }

 /**

- * @see IType#getSuperInterfaceNames

+ * @see IType#getSuperInterfaceNames()

  */

 public String[] getSuperInterfaceNames() throws JavaModelException {

 	IBinaryType info = (IBinaryType) getRawInfo();

@@ -331,14 +331,14 @@
 	return strings;

 }

 /**

- * @see IType#getType

+ * @see IType#getType(String)

  */

 public IType getType(String name) {

 	IClassFile classFile= getPackageFragment().getClassFile(getTypeQualifiedName() + "$" + name + ".class"); //$NON-NLS-2$ //$NON-NLS-1$

 	return new BinaryType(classFile, name);

 }

 /**

- * @see IType#getTypeQualifiedName

+ * @see IType#getTypeQualifiedName()

  */

 public String getTypeQualifiedName() {

 	return this.getTypeQualifiedName('$');

@@ -365,7 +365,7 @@
 	}

 }

 /**

- * @see IType

+ * @see IType#getTypes()

  */

 public IType[] getTypes() throws JavaModelException {

 	ArrayList list = getChildrenOfType(TYPE);

@@ -379,26 +379,26 @@
 	}

 }

 /**

- * @see IParent 

+ * @see IParent#hasChildren()

  */

 public boolean hasChildren() throws JavaModelException {

 	return getChildren().length > 0;

 }

 /**

- * @see IType

+ * @see IType#isClass()

  */

 public boolean isClass() throws JavaModelException {

 	return !isInterface();

 }

 /**

- * @see IType#isInterface

+ * @see IType#isInterface()

  */

 public boolean isInterface() throws JavaModelException {

 	IBinaryType info = (IBinaryType) getRawInfo();

 	return info.isInterface();

 }

 /**

- * @see IType

+ * @see IType#newSupertypeHierarchy(IProgressMonitor monitor)

  */

 public ITypeHierarchy newSupertypeHierarchy(IProgressMonitor monitor) throws JavaModelException {

 	CreateTypeHierarchyOperation op= new CreateTypeHierarchyOperation(this, SearchEngine.createWorkspaceScope(), false);

@@ -406,7 +406,7 @@
 	return op.getResult();

 }

 /**

- * @see IType

+ * @see IType#newTypeHierarchy(IProgressMonitor monitor)

  */

 public ITypeHierarchy newTypeHierarchy(IProgressMonitor monitor) throws JavaModelException {

 	CreateTypeHierarchyOperation op= new CreateTypeHierarchyOperation(this, SearchEngine.createWorkspaceScope(), true);

@@ -414,7 +414,7 @@
 	return op.getResult();

 }

 /**

- * @see IType

+ * @see IType#newTypeHierarchy(IJavaProject project, IProgressMonitor monitor)

  */

 public ITypeHierarchy newTypeHierarchy(IJavaProject project, IProgressMonitor monitor) throws JavaModelException {

 	if (project == null) {

diff --git a/model/org/eclipse/jdt/internal/core/Buffer.java b/model/org/eclipse/jdt/internal/core/Buffer.java
index ad16316..adc2f8e 100644
--- a/model/org/eclipse/jdt/internal/core/Buffer.java
+++ b/model/org/eclipse/jdt/internal/core/Buffer.java
@@ -27,8 +27,6 @@
 	protected int gapStart= -1;

 	protected int gapEnd= -1;

 

-	protected int highWatermark= 300;

-	protected int lowWatermark= 50;

 	protected Object lock= new Object();

 

 	protected static final int F_HAS_UNSAVED_CHANGES= 1;

@@ -57,19 +55,6 @@
 	}

 }

 /**

- * The <code>sizeHint</code> represents the range that will be filled afterwards.

- * If the gap is already at the right position, it must only be

- * resized if it will be no longer between low and high watermark.

- */

-protected void adjustGap(int position, int sizeHint) {

-	if (position == this.gapStart) {

-		int size = (this.gapEnd - this.gapStart) - sizeHint;

-		if (this.lowWatermark <= size && size <= this.highWatermark)

-			return;

-	}

-	moveAndResizeGap(position, sizeHint);

-}

-/**

  * Append the <code>text</code> to the actual content, the gap is moved

  * to the end of the <code>text</code>.

  */

@@ -79,7 +64,7 @@
 			return;

 		}

 		int length = getLength();

-		adjustGap(length, text.length);

+		moveAndResizeGap(length, text.length);

 		System.arraycopy(text, 0, this.contents, length, text.length);

 		this.gapStart += text.length;

 		this.flags |= F_HAS_UNSAVED_CHANGES;

@@ -94,18 +79,7 @@
 	if (text == null) {

 		return;

 	}

-	if (!isReadOnly()) {

-		int textLength = text.length();

-		if (textLength == 0) {

-			return;

-		}

-		int length = getLength();

-		adjustGap(length, textLength);

-		System.arraycopy(text.toCharArray(), 0, this.contents, length, textLength);

-		this.gapStart += textLength;

-		this.flags |= F_HAS_UNSAVED_CHANGES;

-		notifyChanged(new BufferChangedEvent(this, length, 0, text));

-	}

+	this.append(text.toCharArray());

 }

 /**

  * @see IBuffer

@@ -155,16 +129,7 @@
  */

 public String getContents() {

 	if (this.contents == null) return null;

-	synchronized (this.lock) {

-		if (this.gapStart < 0) {

-			return new String(this.contents);

-		}

-		int length = this.contents.length;

-		StringBuffer buffer = new StringBuffer(length - this.gapEnd + this.gapStart);

-		buffer.append(this.contents, 0, this.gapStart);

-		buffer.append(this.contents, this.gapEnd, length - this.gapEnd);

-		return buffer.toString();

-	}

+	return new String(this.getCharacters());

 }

 /**

  * @see IBuffer

@@ -238,8 +203,7 @@
 protected void moveAndResizeGap(int position, int size) {

 	char[] content = null;

 	int oldSize = this.gapEnd - this.gapStart;

-	int newSize = this.highWatermark + size;

-	if (newSize < 0) {

+	if (size < 0) {

 		if (oldSize > 0) {

 			content = new char[this.contents.length - oldSize];

 			System.arraycopy(this.contents, 0, content, 0, this.gapStart);

@@ -249,9 +213,9 @@
 		this.gapStart = this.gapEnd = position;

 		return;

 	}

-	content = new char[this.contents.length + (newSize - oldSize)];

+	content = new char[this.contents.length + (size - oldSize)];

 	int newGapStart = position;

-	int newGapEnd = newGapStart + newSize;

+	int newGapEnd = newGapStart + size;

 	if (oldSize == 0) {

 		System.arraycopy(this.contents, 0, content, 0, newGapStart);

 		System.arraycopy(this.contents, newGapStart, content, newGapEnd, content.length - newGapEnd);

@@ -301,31 +265,28 @@
  */

 public void replace(int position, int length, char[] text) {

 	if (!isReadOnly()) {

-		if (text == null) {

-			text = new char[0];

-		}

+		int textLength = text == null ? 0 : text.length;

 		synchronized (this.lock) {

 			// move gap

-			adjustGap(position + length, text.length - length);

+			moveAndResizeGap(position + length, textLength - length);

 

 			// overwrite

-			int min = Math.min(text.length, length);

-			for (int i = position, j = 0; i < position + min; i++, j++)

-				this.contents[i] = text[j];

-			if (length > text.length) {

+			int min = Math.min(textLength, length);

+			if (min > 0) {

+				System.arraycopy(text, 0, this.contents, position, min);

+			}

+			if (length > textLength) {

 				// enlarge the gap

-				this.gapStart -= (length - text.length);

-			} else

-				if (text.length > length) {

-					// shrink gap

-					this.gapStart += (text.length - length);

-					for (int i = length; i < text.length; i++)

-						this.contents[position + i] = text[i];

-				}

+				this.gapStart -= length - textLength;

+			} else if (textLength > length) {

+				// shrink gap

+				this.gapStart += textLength - length;

+				System.arraycopy(text, 0, this.contents, position, textLength);

+			}

 		}

 		this.flags |= F_HAS_UNSAVED_CHANGES;

 		String string = null;

-		if (text.length > 0) {

+		if (textLength > 0) {

 			string = new String(text);

 		}

 		notifyChanged(new BufferChangedEvent(this, position, length, string));

@@ -337,35 +298,7 @@
  * inserted <code>text</code>.

  */

 public void replace(int position, int length, String text) {

-	if (!isReadOnly()) {

-		int textLength = 0;

-		if (text != null) {

-			textLength = text.length();

-		}

-		

-		synchronized (this.lock) {

-			// move gap

-			adjustGap(position + length, textLength - length);

-

-			// overwrite

-			int min = Math.min(textLength, length);

-			for (int i = position, j = 0; i < position + min; i++, j++)

-				this.contents[i] = text.charAt(j);

-			if (length > textLength) {

-				// enlarge the gap

-				this.gapStart -= (length - textLength);

-			} else

-				if (textLength > length) {

-					// shrink gap

-					this.gapStart += (textLength - length);

-					for (int i = length; i < textLength; i++)

-						this.contents[position + i] = text.charAt(i);

-				}

-		}

-		this.flags |= F_HAS_UNSAVED_CHANGES;

-		

-		notifyChanged(new BufferChangedEvent(this, position, length, text));

-	}

+	this.replace(position, length, text == null ? null : text.toCharArray());

 }

 /**

  * @see IBuffer

@@ -424,28 +357,7 @@
  * @see IBuffer

  */

 public void setContents(String newContents) {

-	// allow special case for first initialization 

-	// after creation by buffer factory

-	if (this.contents == null) {

-		this.contents = newContents.toCharArray();

-		this.flags &= ~ (F_HAS_UNSAVED_CHANGES);

-		return;

-	}

-	

-	if (!isReadOnly()) {

-		char[] charContents = null;

-		if (newContents != null) {

-			charContents = newContents.toCharArray();

-		}

-		BufferChangedEvent event = new BufferChangedEvent(this, 0, this.getLength(), newContents);

-		synchronized (this.lock) {

-			this.contents = charContents;

-			this.flags |= F_HAS_UNSAVED_CHANGES;

-			this.gapStart = -1;

-			this.gapEnd = -1;

-		}

-		notifyChanged(event);

-	}

+	this.setContents(newContents.toCharArray());

 }

 /**

  * Sets this <code>Buffer</code> to be read only.

@@ -457,23 +369,17 @@
 		this.flags &= ~(F_IS_READ_ONLY);

 	}

 }

-/**

- * Adjusts low and high water mark to the specified values.

- */

-public void setWaterMarks(int low, int high) {

-	this.lowWatermark = low;

-	this.highWatermark = high;

-}

 public String toString() {

 	StringBuffer buffer = new StringBuffer();

 	buffer.append("Owner: " + ((JavaElement)this.owner).toStringWithAncestors()); //$NON-NLS-1$

 	buffer.append("\nHas unsaved changes: " + this.hasUnsavedChanges()); //$NON-NLS-1$

 	buffer.append("\nIs readonly: " + this.isReadOnly()); //$NON-NLS-1$

 	buffer.append("\nIs closed: " + this.isClosed()); //$NON-NLS-1$

-	int length = this.contents.length;

 	buffer.append("\nContents:\n"); //$NON-NLS-1$

+	char[] contents = this.getCharacters();

+	int length = contents.length;

 	for (int i = 0; i < length; i++) {

-		char car = this.contents[i];

+		char car = contents[i];

 		switch (car) {

 			case '\n': 

 				buffer.append("\\n\n"); //$NON-NLS-1$

diff --git a/model/org/eclipse/jdt/internal/core/BufferManager.java b/model/org/eclipse/jdt/internal/core/BufferManager.java
index 81f3b88..18bbb3f 100644
--- a/model/org/eclipse/jdt/internal/core/BufferManager.java
+++ b/model/org/eclipse/jdt/internal/core/BufferManager.java
@@ -79,7 +79,7 @@
  * <p> 

  * The <code>Enumeration</code> answered is thread safe.

  *

- * @see OverflowLRUCache

+ * @see OverflowingLRUCache

  * @return Enumeration of IBuffer

  */

 public Enumeration getOpenBuffers() {

diff --git a/model/org/eclipse/jdt/internal/core/ClassFile.java b/model/org/eclipse/jdt/internal/core/ClassFile.java
index 8cb8b45..e19933c 100644
--- a/model/org/eclipse/jdt/internal/core/ClassFile.java
+++ b/model/org/eclipse/jdt/internal/core/ClassFile.java
@@ -40,7 +40,7 @@
 }

 

 /**

- * @see ICodeAssist

+ * @see ICodeAssist#codeComplete(int, ICompletionRequestor)

  */

 public void codeComplete(int offset, ICompletionRequestor requestor) throws JavaModelException {

 	String source = getSource();

@@ -57,7 +57,7 @@
 	}

 }

 /**

- * @see ICodeResolve

+ * @see ICodeAssist#codeSelect(int, int)

  */

 public IJavaElement[] codeSelect(int offset, int length) throws JavaModelException {

 	IBuffer buffer = getBuffer();

@@ -504,7 +504,7 @@
 }

 

 /**

- * @see ICodeAssist

+ * @see ICodeAssist#codeComplete(int, ICodeCompletionRequestor)

  * @deprecated - should use codeComplete(int, ICompletionRequestor) instead

  */

 public void codeComplete(int offset, final ICodeCompletionRequestor requestor) throws JavaModelException {

diff --git a/model/org/eclipse/jdt/internal/core/ClassFileWorkingCopy.java b/model/org/eclipse/jdt/internal/core/ClassFileWorkingCopy.java
index 8c49323..82f0a44 100644
--- a/model/org/eclipse/jdt/internal/core/ClassFileWorkingCopy.java
+++ b/model/org/eclipse/jdt/internal/core/ClassFileWorkingCopy.java
@@ -414,21 +414,21 @@
 	}
 
 	/**
-	 * @see IWorkingCopy#reconcile()
+	 * @see org.eclipse.jdt.core.IWorkingCopy#reconcile()
 	 */
 	public IMarker[] reconcile() throws JavaModelException {
 		throw new JavaModelException(new JavaModelStatus(IJavaModelStatusConstants.ELEMENT_DOES_NOT_EXIST, this));
 	}
 
-	/*
-	 * @see IWorkingCopy#restore()
+	/**
+	 * @see org.eclipse.jdt.core.IWorkingCopy#restore()
 	 */
 	public void restore() throws JavaModelException {
 		throw new JavaModelException(new JavaModelStatus(IJavaModelStatusConstants.ELEMENT_DOES_NOT_EXIST, this));
 	}
 
-	/*
-	 * @see ISourceManipulation#copy(IJavaElement, IJavaElement, String, boolean, IProgressMonitor)
+	/**
+	 * @see org.eclipse.jdt.core.ISourceManipulation#copy(IJavaElement, IJavaElement, String, boolean, IProgressMonitor)
 	 */
 	public void copy(
 		IJavaElement container,
@@ -440,16 +440,16 @@
 		throw new JavaModelException(new JavaModelStatus(IJavaModelStatusConstants.ELEMENT_DOES_NOT_EXIST, this));
 	}
 
-	/*
-	 * @see ISourceManipulation#delete(boolean, IProgressMonitor)
+	/**
+	 * @see org.eclipse.jdt.core.ISourceManipulation#delete(boolean, IProgressMonitor)
 	 */
 	public void delete(boolean force, IProgressMonitor monitor)
 		throws JavaModelException {
 		throw new JavaModelException(new JavaModelStatus(IJavaModelStatusConstants.ELEMENT_DOES_NOT_EXIST, this));
 	}
 
-	/*
-	 * @see ISourceManipulation#move(IJavaElement, IJavaElement, String, boolean, IProgressMonitor)
+	/**
+	 * @see org.eclipse.jdt.core.ISourceManipulation#move(IJavaElement, IJavaElement, String, boolean, IProgressMonitor)
 	 */
 	public void move(
 		IJavaElement container,
@@ -461,24 +461,24 @@
 		throw new JavaModelException(new JavaModelStatus(IJavaModelStatusConstants.ELEMENT_DOES_NOT_EXIST, this));
 	}
 
-	/*
-	 * @see ISourceManipulation#rename(String, boolean, IProgressMonitor)
+	/**
+	 * @see org.eclipse.jdt.core.ISourceManipulation#rename(String, boolean, IProgressMonitor)
 	 */
 	public void rename(String name, boolean replace, IProgressMonitor monitor)
 		throws JavaModelException {
 		throw new JavaModelException(new JavaModelStatus(IJavaModelStatusConstants.ELEMENT_DOES_NOT_EXIST, this));
 	}
 
-	/*
-	 * @see ICodeAssist#codeComplete(int, ICompletionRequestor)
+	/**
+	 * @see org.eclipse.jdt.core.ICodeAssist#codeComplete(int, ICompletionRequestor)
 	 */
 	public void codeComplete(int offset, ICompletionRequestor requestor)
 		throws JavaModelException {
 		throw new JavaModelException(new JavaModelStatus(IJavaModelStatusConstants.ELEMENT_DOES_NOT_EXIST, this));
 	}
 
-	/*
-	 * @see ICodeAssist#codeSelect(int, int)
+	/**
+	 * @see org.eclipse.jdt.core.ICodeAssist#codeSelect(int, int)
 	 */
 	public IJavaElement[] codeSelect(int offset, int length)
 		throws JavaModelException {
@@ -486,7 +486,7 @@
 	}
 
 	/**
-	 * @see ICodeAssist#codeComplete(int, ICodeCompletionRequestor)
+	 * @see org.eclipse.jdt.core.ICodeAssist#codeComplete(int, ICodeCompletionRequestor)
 	 * @deprecated
 	 */
 	public void codeComplete(int offset, ICodeCompletionRequestor requestor)
@@ -494,14 +494,14 @@
 		throw new JavaModelException(new JavaModelStatus(IJavaModelStatusConstants.ELEMENT_DOES_NOT_EXIST, this));
 	}
 
-	/*
-	 * @see IAdaptable#getAdapter(Class)
+	/**
+	 * @see org.eclipse.core.runtime.IAdaptable#getAdapter(Class)
 	 */
 	public Object getAdapter(Class adapter) {
 		return null;
 	}
 
-	/*
+	/**
 	 * @see IJavaElement#getAncestor(int)
 	 */
 	public IJavaElement getAncestor(int ancestorType) {
diff --git a/model/org/eclipse/jdt/internal/core/CommitWorkingCopyOperation.java b/model/org/eclipse/jdt/internal/core/CommitWorkingCopyOperation.java
index d7b72a2..845786b 100644
--- a/model/org/eclipse/jdt/internal/core/CommitWorkingCopyOperation.java
+++ b/model/org/eclipse/jdt/internal/core/CommitWorkingCopyOperation.java
@@ -35,7 +35,7 @@
  *

  * <p>The default conflict resolution setting is the force flag is <code>false</code>

  *

- * @exception JavaModelOperation An exception is thrown either if the commit could not

+ * A JavaModelOperation exception is thrown either if the commit could not

  * be performed or if the new content of the compilation unit violates some Java Model

  * constraint (e.g. if the new package declaration doesn't match the name of the folder

  * containing the compilation unit).

diff --git a/model/org/eclipse/jdt/internal/core/CompilationUnit.java b/model/org/eclipse/jdt/internal/core/CompilationUnit.java
index 289eddf..84a5ddf 100644
--- a/model/org/eclipse/jdt/internal/core/CompilationUnit.java
+++ b/model/org/eclipse/jdt/internal/core/CompilationUnit.java
@@ -89,25 +89,25 @@
 }

 

 /**

- * @see ICodeAssist

+ * @see ICodeAssist#codeComplete(int, ICompletionRequestor)

  */

 public void codeComplete(int offset, ICompletionRequestor requestor) throws JavaModelException {

 	codeComplete(this, isWorkingCopy() ? (org.eclipse.jdt.internal.compiler.env.ICompilationUnit) getOriginalElement() : this, offset, requestor);

 }

 /**

- * @see ICodeResolve

+ * @see ICodeAssist#codeSelect(int, int)

  */

 public IJavaElement[] codeSelect(int offset, int length) throws JavaModelException {

 	return super.codeSelect(this, offset, length);

 }

 /**

- * @see IWorkingCopy

+ * @see IWorkingCopy#commit(boolean, IProgressMonitor)

  */

 public void commit(boolean force, IProgressMonitor monitor) throws JavaModelException {

 	throw new JavaModelException(new JavaModelStatus(IJavaModelStatusConstants.INVALID_ELEMENT_TYPES, this));

 }

 /**

- * @see ISourceManipulation

+ * @see ISourceManipulation#copy(IJavaElement, IJavaElement, String, boolean, IProgressMonitor)

  */

 public void copy(IJavaElement container, IJavaElement sibling, String rename, boolean force, IProgressMonitor monitor) throws JavaModelException {

 	if (container == null) {

@@ -128,7 +128,7 @@
 	return new CompilationUnitElementInfo();

 }

 /**

- * @see ICompilationUnit

+ * @see ICompilationUnit#createImport(String, IJavaElement, IProgressMonitor)

  */

 public IImportDeclaration createImport(String name, IJavaElement sibling, IProgressMonitor monitor) throws JavaModelException {

 	CreateImportOperation op = new CreateImportOperation(name, this);

@@ -139,7 +139,7 @@
 	return getImport(name);

 }

 /**

- * @see ICompilationUnit

+ * @see ICompilationUnit#createPackageDeclaration(String, IProgressMonitor)

  */

 public IPackageDeclaration createPackageDeclaration(String name, IProgressMonitor monitor) throws JavaModelException {

 	

@@ -148,7 +148,7 @@
 	return getPackageDeclaration(name);

 }

 /**

- * @see ICompilationUnit

+ * @see ICompilationUnit#createType(String, IJavaElement, boolean, IProgressMonitor)

  */

 public IType createType(String content, IJavaElement sibling, boolean force, IProgressMonitor monitor) throws JavaModelException {

 	if (!exists()) {

@@ -170,7 +170,7 @@
 	return (IType) op.getResultElements()[0];

 }

 /**

- * @see ISourceManipulation

+ * @see ISourceManipulation#delete(boolean, IProgressMonitor)

  */

 public void delete(boolean force, IProgressMonitor monitor) throws JavaModelException {

 	IJavaElement[] elements= new IJavaElement[] {this};

@@ -179,7 +179,7 @@
 /**

  * This is not a working copy, do nothing.

  *

- * @see IWorkingCopy

+ * @see IWorkingCopy#destroy()

  */

 public void destroy() {

 }

@@ -191,13 +191,13 @@
  *

  * <p>Compilation units must also check working copy state;

  *

- * @see Object#equals

+ * @see Object#equals(java.lang.Object)

  */

 public boolean equals(Object o) {

 	return super.equals(o) && !((ICompilationUnit)o).isWorkingCopy();

 }

 /**

- * @see JavaElement#equalsDOMNode

+ * @see JavaElement#equalsDOMNode(IDOMNode)

  */

 protected boolean equalsDOMNode(IDOMNode node) throws JavaModelException {

 	String name = getElementName();

@@ -219,8 +219,8 @@
 	}

 	return false;

 }

-/*

- * @see IWorkingCopy

+/**

+ * @see IWorkingCopy#findElements(IJavaElement)

  */

 public IJavaElement[] findElements(IJavaElement element) {

 	ArrayList children = new ArrayList();

@@ -266,8 +266,8 @@
 		return null;

 	}

 }

-/*

- * @see IWorkingCopy

+/**

+ * @see IWorkingCopy#findPrimaryType()

  */

 public IType findPrimaryType() {

 	String typeName = Signature.getQualifier(this.getElementName());

@@ -279,7 +279,7 @@
 }

 

 /**

- * @see IWorkingCopy

+ * @see IWorkingCopy#findSharedWorkingCopy(IBufferFactory)

  */

 public IJavaElement findSharedWorkingCopy(IBufferFactory factory) {

 

@@ -298,6 +298,7 @@
 

 /**

  * work-around for UI dependency - TOFIX (should be removed)

+ * @see IWorkingCopy#findSharedWorkingCopy()

  */

 public IJavaElement findSharedWorkingCopy() {

 

@@ -337,7 +338,7 @@
 	}

 }

 /**

- * @see ICompilationUnit

+ * @see ICompilationUnit#getAllTypes()

  */

 public IType[] getAllTypes() throws JavaModelException {

 	IJavaElement[] types = getTypes();

@@ -361,13 +362,13 @@
 	return arrayOfAllTypes;

 }

 /**

- * @see IMember

+ * @see IMember#getCompilationUnit()

  */

 public ICompilationUnit getCompilationUnit() {

 	return this;

 }

 /**

- * @see org.eclipse.jdt.internal.compiler.env.api.ICompilationUnit

+ * @see org.eclipse.jdt.internal.compiler.env.ICompilationUnit#getContents()

  */

 public char[] getContents() {

 	try {

@@ -382,7 +383,7 @@
  * A compilation unit has a corresponding resource unless it is contained

  * in a jar.

  *

- * @see IJavaElement

+ * @see IJavaElement#getCorrespondingResource()

  */

 public IResource getCorrespondingResource() throws JavaModelException {

 	IPackageFragmentRoot root= (IPackageFragmentRoot)getParent().getParent();

@@ -393,7 +394,7 @@
 	}

 }

 /**

- * @see ICompilationUnit

+ * @see ICompilationUnit#getElementAt(int)

  */

 public IJavaElement getElementAt(int position) throws JavaModelException {

 

@@ -404,26 +405,23 @@
 		return e;

 	}

 }

-/**

- * @see org.eclipse.jdt.internal.compiler.env.api.ICompilationUnit

- */

 public char[] getFileName(){

 	return getElementName().toCharArray();

 }

 /**

- * @see JavaElement#getHandleMemento()

+ * @see JavaElement#getHandleMementoDelimiter()

  */

 protected char getHandleMementoDelimiter() {

 	return JavaElement.JEM_COMPILATIONUNIT;

 }

 /**

- * @see ICompilationUnit#getImport

+ * @see ICompilationUnit#getImport(String)

  */

 public IImportDeclaration getImport(String name) {

 	return new ImportDeclaration(getImportContainer(), name);

 }

 /**

- * @see ICompilationUnit

+ * @see ICompilationUnit#getImportContainer()

  */

 public IImportContainer getImportContainer() {

 	return new ImportContainer(this);

@@ -431,7 +429,7 @@
 

 

 /**

- * @see ICompilationUnit

+ * @see ICompilationUnit#getImports()

  */

 public IImportDeclaration[] getImports() throws JavaModelException {

 	IImportContainer container= getImportContainer();

@@ -448,7 +446,7 @@
 

 }

 /**

- * @see org.eclipse.jdt.internal.compiler.env.api.ICompilationUnit

+ * @see org.eclipse.jdt.internal.compiler.env.ICompilationUnit#getMainTypeName()

  */

 public char[] getMainTypeName(){

 	String name= getElementName();

@@ -459,7 +457,7 @@
 /**

  * Returns <code>null</code>, this is not a working copy.

  *

- * @see IWorkingCopy

+ * @see IWorkingCopy#getOriginal(IJavaElement)

  */

 public IJavaElement getOriginal(IJavaElement workingCopyElement) {

 	return null;

@@ -467,7 +465,7 @@
 /**

  * Returns <code>null</code>, this is not a working copy.

  *

- * @see IWorkingCopy

+ * @see IWorkingCopy#getOriginalElement()

  */

 public IJavaElement getOriginalElement() {

 	return null;

@@ -479,7 +477,7 @@
 	return new PackageDeclaration(this, name);

 }

 /**

- * @see ICompilationUnit

+ * @see ICompilationUnit#getPackageDeclarations()

  */

 public IPackageDeclaration[] getPackageDeclarations() throws JavaModelException {

 	ArrayList list = getChildrenOfType(PACKAGE_DECLARATION);

@@ -488,13 +486,13 @@
 	return array;

 }

 /**

- * @see org.eclipse.jdt.internal.compiler.env.api.ICompilationUnit

+ * @see org.eclipse.jdt.internal.compiler.env.ICompilationUnit#getPackageName()

  */

 public char[][] getPackageName() {

 	return null;

 }

-/*

- * @see IJavaElement

+/**

+ * @see IJavaElement#getPath()

  */

 public IPath getPath() {

 	PackageFragmentRoot root = this.getPackageFragmentRoot();

@@ -504,8 +502,8 @@
 		return this.getParent().getPath().append(this.getElementName());

 	}

 }

-/*

- * @see IJavaElement

+/**

+ * @see IJavaElement#getResource()

  */

 public IResource getResource() {

 	PackageFragmentRoot root = this.getPackageFragmentRoot();

@@ -524,7 +522,7 @@
 }

 

 /**

- * @see ISourceReference

+ * @see ISourceReference#getSource()

  */

 public String getSource() throws JavaModelException {

 	IBuffer buffer = getBuffer();

@@ -532,19 +530,19 @@
 	return buffer.getContents();

 }

 /**

- * @see ISourceReference

+ * @see ISourceReference#getSourceRange()

  */

 public ISourceRange getSourceRange() throws JavaModelException {

 	return ((CompilationUnitElementInfo) getElementInfo()).getSourceRange();

 }

 /**

- * @see ICompilationUnit

+ * @see ICompilationUnit#getType(String)

  */

 public IType getType(String name) {

 	return new SourceType(this, name);

 }

 /**

- * @see ICompilationUnit

+ * @see ICompilationUnit#getTypes()

  */

 public IType[] getTypes() throws JavaModelException {

 	ArrayList list = getChildrenOfType(TYPE);

@@ -553,7 +551,7 @@
 	return array;

 }

 /**

- * @see IWorkingCopy

+ * @see IWorkingCopy#getSharedWorkingCopy(IProgressMonitor, IBufferFactory, IProblemRequestor)

  */

 public IJavaElement getSharedWorkingCopy(IProgressMonitor pm, IBufferFactory factory, IProblemRequestor problemRequestor) throws JavaModelException {

 	

@@ -598,14 +596,14 @@
 	}

 }

 /**

- * @see IWorkingCopy

+ * @see IWorkingCopy#getWorkingCopy()

  */

 public IJavaElement getWorkingCopy() throws JavaModelException {

 	return this.getWorkingCopy(null, null, null);

 }

 

 /**

- * @see IWorkingCopy

+ * @see IWorkingCopy#getWorkingCopy(IProgressMonitor, IBufferFactory, IProblemRequestor)

  */

 public IJavaElement getWorkingCopy(IProgressMonitor pm, IBufferFactory factory, IProblemRequestor problemRequestor) throws JavaModelException {

 	WorkingCopy workingCopy = new WorkingCopy((IPackageFragment)getParent(), getElementName(), factory, problemRequestor);

@@ -615,7 +613,7 @@
 }

 

 /**

- * @see Openable

+ * @see Openable#hasBuffer()

  */

 protected boolean hasBuffer() {

 	return true;

@@ -623,7 +621,7 @@
 /**

  * If I am not open, return true to avoid parsing.

  *

- * @see IParent 

+ * @see IParent#hasChildren()

  */

 public boolean hasChildren() throws JavaModelException {

 	if (isOpen()) {

@@ -635,31 +633,31 @@
 /**

  * Returns false, this is not a working copy.

  *

- * @see IWorkingCopy

+ * @see IWorkingCopy#isBasedOn(IResource)

  */

 public boolean isBasedOn(IResource resource) {

 	return false;

 }

 /**

- * @see IOpenable

+ * @see IOpenable#isConsistent()

  */

 public boolean isConsistent() throws JavaModelException {

 	return fgJavaModelManager.getElementsOutOfSynchWithBuffers().get(this) == null;

 }

 /**

- * @see Openable

+ * @see Openable#isSourceElement()

  */

 protected boolean isSourceElement() {

 	return true;

 }

 /**

- * @see IWorkingCopy

+ * @see IWorkingCopy#isWorkingCopy()

  */

 public boolean isWorkingCopy() {

 	return false;

 }

 /**

- * @see IOpenable

+ * @see IOpenable#makeConsistent(IProgressMonitor)

  */

 public void makeConsistent(IProgressMonitor pm) throws JavaModelException {

 	if (!isConsistent()) {

@@ -670,7 +668,7 @@
 }

 

 /**

- * @see ISourceManipulation

+ * @see ISourceManipulation#move(IJavaElement, IJavaElement, String, boolean, IProgressMonitor)

  */

 public void move(IJavaElement container, IJavaElement sibling, String rename, boolean force, IProgressMonitor monitor) throws JavaModelException {

 	if (container == null) {

@@ -726,7 +724,7 @@
 	}

 }

 /**

- * @see Openable

+ * @see Openable#openBuffer(IProgressMonitor)

  */

 protected IBuffer openBuffer(IProgressMonitor pm) throws JavaModelException {

 

@@ -769,7 +767,7 @@
 }

 

 /**

- * @see IWorkingCopy

+ * @see IWorkingCopy#reconcile()

  */

 public IMarker[] reconcile() throws JavaModelException {

 	// Reconciling is not supported on non working copies

@@ -777,7 +775,7 @@
 }

 

 /**

- * @see ISourceManipulation

+ * @see ISourceManipulation#rename(String, boolean, IProgressMonitor)

  */

 public void rename(String name, boolean force, IProgressMonitor monitor) throws JavaModelException {

 	if (name == null) {

@@ -791,7 +789,7 @@
 /**

  * Does nothing - this is not a working copy.

  *

- * @see IWorkingCopy

+ * @see IWorkingCopy#restore()

  */

 public void restore () throws JavaModelException {

 }

@@ -813,7 +811,7 @@
 	triggerSourceEndOffset(amount, nameStart, nameEnd);

 }

 /**

- * @see ICodeAssist

+ * @see ICodeAssist#codeComplete(int, ICodeCompletionRequestor)

  * @deprecated - use codeComplete(int, ICompletionRequestor)

  */

 public void codeComplete(int offset, final ICodeCompletionRequestor requestor) throws JavaModelException {

@@ -881,7 +879,7 @@
 			}

 		});

 }

-/*

+/**

  * @see JavaElement#rootedAt(IJavaProject)

  */

 public IJavaElement rootedAt(IJavaProject project) {

diff --git a/model/org/eclipse/jdt/internal/core/CompilationUnitVisitor.java b/model/org/eclipse/jdt/internal/core/CompilationUnitVisitor.java
index 6ae7593..be3ca48 100644
--- a/model/org/eclipse/jdt/internal/core/CompilationUnitVisitor.java
+++ b/model/org/eclipse/jdt/internal/core/CompilationUnitVisitor.java
@@ -4,20 +4,26 @@
  * (c) Copyright IBM Corp. 2000, 2001.

  * All Rights Reserved.

  */

-import org.eclipse.jdt.internal.compiler.Compiler;

-import org.eclipse.jdt.internal.compiler.*;

-import org.eclipse.jdt.internal.compiler.env.*;

+import java.util.Locale;

+import java.util.Map;

+

 import org.eclipse.jdt.core.ICompilationUnit;

-import org.eclipse.jdt.core.*;

+import org.eclipse.jdt.core.JavaCore;

+import org.eclipse.jdt.core.JavaModelException;

 import org.eclipse.jdt.core.compiler.IProblem;

-import org.eclipse.jdt.internal.compiler.impl.*;

-import org.eclipse.jdt.internal.compiler.ast.*;

+import org.eclipse.jdt.internal.compiler.CompilationResult;

+import org.eclipse.jdt.internal.compiler.Compiler;

+import org.eclipse.jdt.internal.compiler.IAbstractSyntaxTreeVisitor;

+import org.eclipse.jdt.internal.compiler.ICompilerRequestor;

+import org.eclipse.jdt.internal.compiler.IErrorHandlingPolicy;

+import org.eclipse.jdt.internal.compiler.IProblemFactory;

+import org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration;

+import org.eclipse.jdt.internal.compiler.env.INameEnvironment;

+import org.eclipse.jdt.internal.compiler.env.ISourceType;

+import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;

 import org.eclipse.jdt.internal.compiler.lookup.PackageBinding;

 import org.eclipse.jdt.internal.compiler.parser.SourceTypeConverter;

-import org.eclipse.jdt.internal.compiler.problem.*;

-

-import java.io.*;

-import java.util.*;

+import org.eclipse.jdt.internal.compiler.problem.DefaultProblemFactory;

 

 public class CompilationUnitVisitor extends Compiler {

 	

@@ -39,13 +45,13 @@
 	 *      specify the rules for handling problems (stop on first error or accumulate

 	 *      them all) and at the same time perform some actions such as opening a dialog

 	 *      in UI when compiling interactively.

-	 *      @see org.eclipse.jdt.internal.compiler.api.problem.DefaultErrorHandlingPolicies

+	 *      @see org.eclipse.jdt.internal.compiler.DefaultErrorHandlingPolicies

 	 *      

 	 *  @param requestor org.eclipse.jdt.internal.compiler.api.ICompilerRequestor

 	 *      Component which will receive and persist all compilation results and is intended

 	 *      to consume them as they are produced. Typically, in a batch compiler, it is 

 	 *      responsible for writing out the actual .class files to the file system.

-	 *      @see org.eclipse.jdt.internal.compiler.api.CompilationResult

+	 *      @see org.eclipse.jdt.internal.compiler.CompilationResult

 	 *

 	 *  @param problemFactory org.eclipse.jdt.internal.compiler.api.problem.IProblemFactory

 	 *      Factory used inside the compiler to create problem descriptors. It allows the

diff --git a/model/org/eclipse/jdt/internal/core/CreateElementInCUOperation.java b/model/org/eclipse/jdt/internal/core/CreateElementInCUOperation.java
index b68dfa1..e27947a 100644
--- a/model/org/eclipse/jdt/internal/core/CreateElementInCUOperation.java
+++ b/model/org/eclipse/jdt/internal/core/CreateElementInCUOperation.java
@@ -190,7 +190,6 @@
 /**

  * Returns the amount of work for the main task of this operation for

  * progress reporting.

- * @see executeOperation()

  */

 protected int getMainAmountOfWork(){

 	return 2;

@@ -198,9 +197,8 @@
 /**

  * Returns the name of the main task of this operation for

  * progress reporting.

- * @see executeOperation()

  */

-protected abstract String getMainTaskName();

+public abstract String getMainTaskName();

 /**

  * Returns the elements created by this operation.

  */

@@ -278,7 +276,7 @@
  *  <li>INVALID_SIBLING - the sibling provided for positioning is not valid.

  * </ul>

  * @see IJavaModelStatus

- * @see JavaNamingConventions

+ * @see JavaConventions

  */

 public IJavaModelStatus verify() {

 	if (getParentElement() == null) {

diff --git a/model/org/eclipse/jdt/internal/core/CreateFieldOperation.java b/model/org/eclipse/jdt/internal/core/CreateFieldOperation.java
index 3846310..c756635 100644
--- a/model/org/eclipse/jdt/internal/core/CreateFieldOperation.java
+++ b/model/org/eclipse/jdt/internal/core/CreateFieldOperation.java
@@ -55,7 +55,7 @@
 	return getType().getField(fDOMNode.getName());

 }

 /**

- * @see CreateElementInCUOperation#getMainTaskName

+ * @see CreateElementInCUOperation#getMainTaskName()

  */

 public String getMainTaskName(){

 	return Util.bind("operation.createFieldProgress"); //$NON-NLS-1$

diff --git a/model/org/eclipse/jdt/internal/core/CreateImportOperation.java b/model/org/eclipse/jdt/internal/core/CreateImportOperation.java
index 8cb3555..0a028c5 100644
--- a/model/org/eclipse/jdt/internal/core/CreateImportOperation.java
+++ b/model/org/eclipse/jdt/internal/core/CreateImportOperation.java
@@ -68,7 +68,7 @@
 	return getCompilationUnit().getImport(fImportName);

 }

 /**

- * @see CreateElementInCUOperation#getMainTaskName

+ * @see CreateElementInCUOperation#getMainTaskName()

  */

 public String getMainTaskName(){

 	return Util.bind("operation.createImportsProgress"); //$NON-NLS-1$

@@ -111,7 +111,7 @@
  *  <li>INVALID_NAME - not a valid import declaration name.

  * </ul>

  * @see IJavaModelStatus

- * @see JavaNamingConventions

+ * @see JavaConventions

  */

 public IJavaModelStatus verify() {

 	IJavaModelStatus status = super.verify();

diff --git a/model/org/eclipse/jdt/internal/core/CreateInitializerOperation.java b/model/org/eclipse/jdt/internal/core/CreateInitializerOperation.java
index 5fcf9de..ea73087 100644
--- a/model/org/eclipse/jdt/internal/core/CreateInitializerOperation.java
+++ b/model/org/eclipse/jdt/internal/core/CreateInitializerOperation.java
@@ -79,7 +79,7 @@
 	return null;

 }

 /**

- * @see CreateElementInCUOperation#getMainTaskName

+ * @see CreateElementInCUOperation#getMainTaskName()

  */

 public String getMainTaskName(){

 	return Util.bind("operation.createInitializerProgress"); //$NON-NLS-1$

diff --git a/model/org/eclipse/jdt/internal/core/CreateMethodOperation.java b/model/org/eclipse/jdt/internal/core/CreateMethodOperation.java
index 78a5640..be37f1b 100644
--- a/model/org/eclipse/jdt/internal/core/CreateMethodOperation.java
+++ b/model/org/eclipse/jdt/internal/core/CreateMethodOperation.java
@@ -79,7 +79,7 @@
 	return getType().getMethod(name, types);

 }

 /**

- * @see CreateElementInCUOperation#getMainTaskName

+ * @see CreateElementInCUOperation#getMainTaskName()

  */

 public String getMainTaskName(){

 	return Util.bind("operation.createMethodProgress"); //$NON-NLS-1$

diff --git a/model/org/eclipse/jdt/internal/core/CreatePackageDeclarationOperation.java b/model/org/eclipse/jdt/internal/core/CreatePackageDeclarationOperation.java
index cf659b1..63b7160 100644
--- a/model/org/eclipse/jdt/internal/core/CreatePackageDeclarationOperation.java
+++ b/model/org/eclipse/jdt/internal/core/CreatePackageDeclarationOperation.java
@@ -70,7 +70,7 @@
 	return getCompilationUnit().getPackageDeclaration(fName);

 }

 /**

- * @see CreateElementInCUOperation#getMainTaskName

+ * @see CreateElementInCUOperation#getMainTaskName()

  */

 public String getMainTaskName(){

 	return Util.bind("operation.createPackageProgress"); //$NON-NLS-1$

@@ -105,7 +105,7 @@
  * 		package declaration name.

  * </ul>

  * @see IJavaModelStatus

- * @see JavaNamingConventions

+ * @see JavaConventions

  */

 public IJavaModelStatus verify() {

 	IJavaModelStatus status = super.verify();

diff --git a/model/org/eclipse/jdt/internal/core/CreatePackageFragmentOperation.java b/model/org/eclipse/jdt/internal/core/CreatePackageFragmentOperation.java
index 00531e1..03d0dec 100644
--- a/model/org/eclipse/jdt/internal/core/CreatePackageFragmentOperation.java
+++ b/model/org/eclipse/jdt/internal/core/CreatePackageFragmentOperation.java
@@ -95,7 +95,7 @@
  *	<li>ELEMENT_NOT_PRESENT - the underlying resource for the root is missing

  * </ul>

  * @see IJavaModelStatus

- * @see JavaNamingConventions

+ * @see JavaConventions

  */

 public IJavaModelStatus verify() {

 	if (getParentElement() == null) {

diff --git a/model/org/eclipse/jdt/internal/core/CreateTypeOperation.java b/model/org/eclipse/jdt/internal/core/CreateTypeOperation.java
index 0c6b686..26dd79e 100644
--- a/model/org/eclipse/jdt/internal/core/CreateTypeOperation.java
+++ b/model/org/eclipse/jdt/internal/core/CreateTypeOperation.java
@@ -27,7 +27,7 @@
 	super(parentElement, source, force);

 }

 /**

- * @see CreateTypeMemberOperation#generateElementDOM

+ * @see CreateElementInCUOperation#generateElementDOM()

  */

 protected IDOMNode generateElementDOM() throws JavaModelException {

 	if (fDOMNode == null) {

@@ -45,7 +45,7 @@
 	return fDOMNode;

 }

 /**

- * @see CreateElementInCUOperation#generateResultHandle

+ * @see CreateElementInCUOperation#generateResultHandle()

  */

 protected IJavaElement generateResultHandle() {

 	IJavaElement parent= getParentElement();

@@ -58,7 +58,7 @@
 	return null;

 }

 /**

- * @see CreateElementInCUOperation#getMainTaskName

+ * @see CreateElementInCUOperation#getMainTaskName()

  */

 public String getMainTaskName(){

 	return Util.bind("operation.createTypeProgress"); //$NON-NLS-1$

diff --git a/model/org/eclipse/jdt/internal/core/DeleteElementsOperation.java b/model/org/eclipse/jdt/internal/core/DeleteElementsOperation.java
index 91ed360..4ff261a 100644
--- a/model/org/eclipse/jdt/internal/core/DeleteElementsOperation.java
+++ b/model/org/eclipse/jdt/internal/core/DeleteElementsOperation.java
@@ -8,6 +8,7 @@
 

 import org.eclipse.jdt.core.*;

 import org.eclipse.jdt.core.jdom.*;

+import org.eclipse.jdt.internal.core.jdom.DOMNode;

 

 import java.util.*;

 

@@ -22,6 +23,7 @@
  * should be used.

  */

 public class DeleteElementsOperation extends MultiOperation {

+	char[] NO_CHAR = new char[0];

 	/**

 	 * The elements this operation processes grouped by compilation unit

 	 * @see processElements(). Keys are compilation units,

@@ -43,23 +45,7 @@
 	super(elementsToDelete, force);

 	fFactory = new DOMFactory();

 }

-/**

- * Saves the new contents of the compilation unit that has had

- * a member element deleted.

- */

-protected void commitChanges(IDOMCompilationUnit cuDOM, ICompilationUnit cu) throws JavaModelException {

-	// save the resources that need to be saved

-	char[] newContents = cuDOM.getCharacters();

-	if (newContents == null) {

-		newContents = new char[0];

-	}

-	IBuffer buffer = cu.getBuffer();

-	char[] bufferContents = buffer.getCharacters();

-	char[] cuContents = org.eclipse.jdt.internal.core.Util.normalizeCRs(newContents, bufferContents);

-	buffer.setContents(cuContents);

-	cu.save(getSubProgressMonitor(1), fForce);

-	this.hasModifiedResource = !cu.isWorkingCopy();

-}

+

 /**

  * @see MultiOperation

  */

@@ -108,16 +94,18 @@
 	// the import container (i.e. report it in the delta)

 	int numberOfImports = cu.getImports().length;

 

-	IDOMCompilationUnit cuDOM = fFactory.createCompilationUnit(cu.getBuffer().getCharacters(), cu.getElementName());

+	IBuffer buffer = cu.getBuffer();

 	JavaElementDelta delta = new JavaElementDelta(cu);

 	IJavaElement[] cuElements = ((IRegion) fChildrenToRemove.get(cu)).getElements();

-	for (int i = 0; i < cuElements.length; i++) {

+	for (int i = 0, length = cuElements.length; i < length; i++) {

 		IJavaElement e = cuElements[i];

 		if (e.exists()) {

-			IDOMNode node = ((JavaElement) e).findNode(cuDOM);

+			IDOMCompilationUnit cuDOM = fFactory.createCompilationUnit(buffer.getCharacters(), cu.getElementName());

+			DOMNode node = (DOMNode)((JavaElement) e).findNode(cuDOM);

 			// TBD

 			Assert.isTrue(node != null, Util.bind("element.cannotLocate", e.getElementName(), cuDOM.getName())); //$NON-NLS-1$

-			node.remove();

+			int startPosition = node.getStartPosition();

+			buffer.replace(startPosition, node.getEndPosition() - startPosition + 1, NO_CHAR);

 			delta.removed(e);

 			if (e.getElementType() == IJavaElement.IMPORT_DECLARATION) {

 				numberOfImports--;

@@ -128,9 +116,10 @@
 		}

 	}

 	if (delta.getAffectedChildren().length > 0) {

-		commitChanges(cuDOM, cu);

-		if (!cu.isWorkingCopy()) { // if unit is working copy, then commit will have already fired the delta

+		cu.save(getSubProgressMonitor(1), fForce);

+		if (!cu.isWorkingCopy()) { // if unit is working copy, then save will have already fired the delta

 			addDelta(delta);

+			this.hasModifiedResource = true;

 		}

 	}

 }

diff --git a/model/org/eclipse/jdt/internal/core/DeltaProcessor.java b/model/org/eclipse/jdt/internal/core/DeltaProcessor.java
index 7ddca3b..b24c1c2 100644
--- a/model/org/eclipse/jdt/internal/core/DeltaProcessor.java
+++ b/model/org/eclipse/jdt/internal/core/DeltaProcessor.java
@@ -96,6 +96,14 @@
 		} catch (JavaModelException e) {

 		}

 	}

+	/*

+	 * Adds the given project and its dependents to the list of the projects

+	 * to update.

+	 */

+	void addToProjectsToUpdateWithDependents(IProject project) {

+		this.projectsToUpdate.add(JavaCore.create(project));

+		this.addDependentsToProjectsToUpdate(project.getFullPath());

+	}

 	

 	/**

 	 * Adds the given child handle to its parent's cache of children. 

@@ -125,7 +133,7 @@
 	public void performPreBuildCheck(

 		IResourceDelta delta,

 		IJavaElement parent) {

-

+	

 		try {

 			if (!ResourcesPlugin.getWorkspace().isAutoBuilding()) {

 				Iterator iterator = this.projectsToUpdate.iterator();

@@ -134,7 +142,9 @@
 						JavaProject project = (JavaProject)iterator.next();

 						

 						 // force classpath marker refresh

-						project.getResolvedClasspath(true, true);

+						project.getResolvedClasspath(

+							true, // ignoreUnresolvedEntry

+							true); // generateMarkerOnError

 						

 					} catch (JavaModelException e) {

 					}

@@ -150,28 +160,30 @@
 		} finally {

 			this.projectsToUpdate = new HashSet();

 		}

-

+	

 		IResource resource = delta.getResource();

 		IJavaElement element = JavaCore.create(resource);

 		boolean processChildren = false;

-

+	

 		switch (resource.getType()) {

-

+	

 			case IResource.ROOT :

 			case IResource.PROJECT :

-				processChildren = true;

+				if (delta.getKind() == IResourceDelta.CHANGED) {

+					processChildren = true;

+				}

 				break;

 			case IResource.FILE :

 				if (parent.getElementType() == IJavaElement.JAVA_PROJECT) {

 					IFile file = (IFile) resource;

 					JavaProject project = (JavaProject) parent;

-

+	

 					/* check classpath property file change */

 					QualifiedName classpathProp;

 					if (file.getName().equals(

 							project.computeSharedPropertyFileName(

 								classpathProp = project.getClasspathPropertyName()))) {

-

+	

 						switch (delta.getKind()) {

 							case IResourceDelta.REMOVED : // recreate one based on in-memory path

 								try {

@@ -194,7 +206,7 @@
 										break; // could not read, ignore 

 									if (project.isClasspathEqualsTo(project.getRawClasspath(), project.getOutputLocation(), fileEntries))

 										break;

-

+	

 									// will force an update of the classpath/output location based on the file information

 									// extract out the output location

 									IPath outputLocation = null;

@@ -212,7 +224,14 @@
 										outputLocation = SetClasspathOperation.ReuseOutputLocation;

 									}

 									try {

-										project.setRawClasspath(fileEntries, outputLocation, null, true, false, project.getResolvedClasspath(true), true);

+										project.setRawClasspath(

+											fileEntries, 

+											outputLocation, 

+											null, // monitor

+											true, // canChangeResource

+											false, // forceSave

+											project.getResolvedClasspath(true), // ignoreUnresolvedVariable

+											true); // needCycleCheck

 									} catch (JavaModelException e) {

 									}

 								} catch (IOException e) {

@@ -222,7 +241,7 @@
 								} catch (CoreException e) {

 									break;

 								}

-

+	

 						}

 					}

 				}

@@ -501,49 +520,9 @@
 		}

 	}

 

-	/**

-	 * Processing for the closing of an element - there are two cases:<ul>

-	 * <li>when a project is closed (in the platform sense), the

-	 * 		JavaModel reports this as if the JavaProject has been removed.

-	 * <li>otherwise, the JavaModel reports this

-	 *		as a the element being closed (CHANGED + F_CLOSED).

-	 * </ul>

-	 * <p>In both cases, the children of the element are not processed. When

-	 * a resource is closed, the platform reports all children as removed. This

-	 * would effectively delete the classpath if we processed children.

-	 */

-	protected void elementClosed(Openable element, IResourceDelta delta) {

 

-		if (element.getElementType() == IJavaElement.JAVA_PROJECT) {

-			// treat project closing as removal

-			elementRemoved(element, delta);

-		} else {

-			removeFromParentInfo(element);

-			close(element);

-			fCurrentDelta.closed(element);

-		}

-	}

 

-	/**

-	 * Processing for the opening of an element - there are two cases:<ul>

-	 * <li>when a project is opened (in the platform sense), the

-	 * 		JavaModel reports this as if the JavaProject has been added.

-	 * <li>otherwise, the JavaModel reports this

-	 *		as a the element being opened (CHANGED + F_CLOSED).

-	 * </ul>

-	 */

-	protected void elementOpened(Openable element, IResourceDelta delta) {

 

-		if (element.getElementType() == IJavaElement.JAVA_PROJECT) {

-			// treat project opening as addition

-			if (hasJavaNature(delta.getResource())) {

-				elementAdded(element, delta);

-			}

-		} else {

-			addToParentInfo(element);

-			fCurrentDelta.opened(element);

-		}

-	}

 

 	/**

 	 * Generic processing for a removed element:<ul>

@@ -861,19 +840,47 @@
 				if (element == null) throw newInvalidElementType();

 				this.updateIndex(element, delta);

 				this.contentChanged(element, delta);

-			} else if (elementType == IJavaElement.JAVA_PROJECT

-					&& (flags & IResourceDelta.OPEN) != 0) {

-				// project has been opened or closed

-				IProject res = (IProject)delta.getResource();

-				element = this.createElement(res, elementType, project);

-				if (element == null) throw newInvalidElementType();

-				if (res.isOpen()) {

-					this.elementOpened(element, delta);

-				} else {

-					this.elementClosed(element, delta);

+			} else if (elementType == IJavaElement.JAVA_PROJECT) {

+				if ((flags & IResourceDelta.OPEN) != 0) {

+					// project has been opened or closed

+					IProject res = (IProject)delta.getResource();

+					element = this.createElement(res, elementType, project);

+					if (element == null) throw newInvalidElementType();

+					if (res.isOpen()) {

+						if (this.hasJavaNature(res)) {

+							this.elementAdded(element, delta);

+							this.indexManager.indexAll(res);

+						}

+					} else {

+						JavaModel javaModel = JavaModelManager.getJavaModelManager().getJavaModel();

+						boolean wasJavaProject = javaModel.findJavaProject(res) != null;

+						if (wasJavaProject) {

+							this.elementRemoved(element, delta);

+							this.indexManager.removeIndex(res.getFullPath());

+							

+						}

+					}

+					return false; // when a project is open/closed don't process children

 				}

-				this.updateIndex(element, delta);

-				return false; // when a project is open/closed don't process children

+				if ((flags & IResourceDelta.DESCRIPTION) != 0) {

+					IProject res = (IProject)delta.getResource();

+					JavaModel javaModel = JavaModelManager.getJavaModelManager().getJavaModel();

+					boolean wasJavaProject = javaModel.findJavaProject(res) != null;

+					boolean isJavaProject = this.hasJavaNature(res);

+					if (wasJavaProject != isJavaProject) {

+						// project's nature has been added or removed

+						element = this.createElement(res, elementType, project);

+						if (element == null) throw newInvalidElementType();

+						if (isJavaProject) {

+							this.elementAdded(element, delta);

+							this.indexManager.indexAll(res);

+						} else {

+							this.elementRemoved(element, delta);

+							this.indexManager.removeIndex(res.getFullPath());

+						}

+						return false; // when a project's nature is added/removed don't process children

+					}

+				}

 			}

 			return true;

 	}

@@ -1088,8 +1095,9 @@
 		switch (parentType) {

 			case IJavaElement.JAVA_MODEL:

 				if (kind != IResourceDelta.CHANGED

-					|| (flags & IResourceDelta.OPEN) != 0) {

-					// project is added, removed, opened or closed

+					|| (flags & IResourceDelta.OPEN) != 0

+					|| (flags & IResourceDelta.DESCRIPTION) != 0) {

+					// project is added, removed, opened or closed, or its nature is changed

 					return IJavaElement.JAVA_PROJECT;

 				} // else see below

 			case IJavaElement.JAVA_PROJECT:

@@ -1174,12 +1182,13 @@
 		case IJavaElement.JAVA_PROJECT :

 			switch (delta.getKind()) {

 				case IResourceDelta.ADDED :

-				case IResourceDelta.OPEN :

 					indexManager.indexAll(element.getJavaProject().getProject());

 					break;

 				case IResourceDelta.REMOVED :

 					indexManager.removeIndex(element.getJavaProject().getProject().getFullPath());

 					break;

+				// NB: Update of index if project is opened, closed, or its java nature is added or removed

+				//     is done in updateCurrentDeltaAndIndex

 			}

 			break;

 		case IJavaElement.PACKAGE_FRAGMENT_ROOT :

diff --git a/model/org/eclipse/jdt/internal/core/JarPackageFragmentRoot.java b/model/org/eclipse/jdt/internal/core/JarPackageFragmentRoot.java
index 95ed5d0..64c9006 100644
--- a/model/org/eclipse/jdt/internal/core/JarPackageFragmentRoot.java
+++ b/model/org/eclipse/jdt/internal/core/JarPackageFragmentRoot.java
@@ -19,8 +19,8 @@
  * are .class files.

  * <p>NOTE: A jar package fragment root may or may not have an associated resource.

  *

- * @see IPackageFragmentRoot

- * @see JarPackageFragmentRootInfo

+ * @see org.eclipse.jdt.core.IPackageFragmentRoot

+ * @see org.eclipse.jdt.internal.core.JarPackageFragmentRootInfo

  */

 public class JarPackageFragmentRoot extends PackageFragmentRoot {

 	

@@ -608,7 +608,7 @@
 }

 

 	/**

-	 * @private - for use by <code>AttachSourceOperation</code> only.

+	 * For use by <code>AttachSourceOperation</code> only.

 	 * Sets the source mapper associated with this jar.

 	 */

 	public void setSourceMapper(SourceMapper mapper) throws JavaModelException {

diff --git a/model/org/eclipse/jdt/internal/core/JavaElement.java b/model/org/eclipse/jdt/internal/core/JavaElement.java
index 93dc54c..2bf3560 100644
--- a/model/org/eclipse/jdt/internal/core/JavaElement.java
+++ b/model/org/eclipse/jdt/internal/core/JavaElement.java
@@ -564,7 +564,7 @@
 	return buffer.toString();

 }

 /**

- * @private Debugging purposes

+ * Debugging purposes

  */

 public String toDebugString() {

 	StringBuffer buffer = new StringBuffer();

@@ -572,7 +572,7 @@
 	return buffer.toString();

 }

 /**

- * @private Debugging purposes

+ *  Debugging purposes

  */

 public String toString() {

 	StringBuffer buffer = new StringBuffer();

@@ -580,7 +580,7 @@
 	return buffer.toString();

 }

 /**

- * @private Debugging purposes

+ *  Debugging purposes

  */

 protected void toString(int tab, StringBuffer buffer) {

 	Object info = this.toStringInfo(tab, buffer);

@@ -590,7 +590,7 @@
 	this.toStringChildren(tab, buffer, info);

 }

 /**

- * @private Debugging purposes

+ *  Debugging purposes

  */

 public String toStringWithAncestors() {

 	StringBuffer buffer = new StringBuffer();

@@ -599,7 +599,7 @@
 	return buffer.toString();

 }

 /**

- * @private Debugging purposes

+ *  Debugging purposes

  */

 protected void toStringAncestors(StringBuffer buffer) {

 	JavaElement parent = (JavaElement)this.getParent();

@@ -611,7 +611,7 @@
 	}

 }

 /**

- * @private Debugging purposes

+ *  Debugging purposes

  */

 protected void toStringChildren(int tab, StringBuffer buffer, Object info) {

 	if (info == null || !(info instanceof JavaElementInfo)) return;

@@ -622,7 +622,7 @@
 	}

 }

 /**

- * @private Debugging purposes

+ *  Debugging purposes

  */

 public Object toStringInfo(int tab, StringBuffer buffer) {

 	Object info = fgJavaModelManager.peekAtInfo(this);

@@ -630,7 +630,7 @@
 	return info;

 }

 /**

- * @private Debugging purposes

+ *  Debugging purposes

  */

 protected void toStringInfo(int tab, StringBuffer buffer, Object info) {

 	buffer.append(this.tabString(tab));

diff --git a/model/org/eclipse/jdt/internal/core/JavaElementDelta.java b/model/org/eclipse/jdt/internal/core/JavaElementDelta.java
index a3a5f3b..7b0652e 100644
--- a/model/org/eclipse/jdt/internal/core/JavaElementDelta.java
+++ b/model/org/eclipse/jdt/internal/core/JavaElementDelta.java
@@ -579,7 +579,7 @@
  * Returns a string representation of this delta's

  * structure suitable for debug purposes.

  *

- * @see toString

+ * @see #toString()

  */

 public String toDebugString(int depth) {

 	StringBuffer buffer = new StringBuffer();

diff --git a/model/org/eclipse/jdt/internal/core/JavaElementInfo.java b/model/org/eclipse/jdt/internal/core/JavaElementInfo.java
index a399691..194d8a8 100644
--- a/model/org/eclipse/jdt/internal/core/JavaElementInfo.java
+++ b/model/org/eclipse/jdt/internal/core/JavaElementInfo.java
@@ -28,7 +28,7 @@
 	protected static IJavaElement[] fgEmptyChildren = new IJavaElement[]{};

 	/**

 	 * Is the structure of this element known

-	 * @see IJavaElement.isStructureKnown()

+	 * @see IJavaElement#isStructureKnown()

 	 */

 	protected boolean fIsStructureKnown = false;

 

@@ -36,90 +36,90 @@
 	 * Shared empty collection used for efficiency.

 	 */

 	static Object[] NO_NON_JAVA_RESOURCES = new Object[] {};	

-protected JavaElementInfo() {

-	fChildren = fgEmptyChildren;

-}

-public void addChild(IJavaElement child) {

-	if (fChildren == fgEmptyChildren) {

-		setChildren(new IJavaElement[] {child});

-	} else {

-		if (!includesChild(child)) {

-			setChildren(growAndAddToArray(fChildren, child));

-		}

+	protected JavaElementInfo() {

+		fChildren = fgEmptyChildren;

 	}

-}

-public Object clone() {

-	try {

-		return super.clone();

-	}

-	catch (CloneNotSupportedException e) {

-		throw new Error();

-	}

-}

-public IJavaElement[] getChildren() {

-	return fChildren;

-}

-/**

- * Adds the new element to a new array that contains all of the elements of the old array.

- * Returns the new array.

- */

-protected IJavaElement[] growAndAddToArray(IJavaElement[] array, IJavaElement addition) {

-	IJavaElement[] old = array;

-	array = new IJavaElement[old.length + 1];

-	System.arraycopy(old, 0, array, 0, old.length);

-	array[old.length] = addition;

-	return array;

-}

-/**

- * Returns <code>true</code> if this child is in my children collection

- */

-protected boolean includesChild(IJavaElement child) {

-	

-	for (int i= 0; i < fChildren.length; i++) {

-		if (fChildren[i].equals(child)) {

-			return true;

-		}

-	}

-	return false;

-}

-/**

- * @see IJavaElement.isStructureKnown()

- */

-public boolean isStructureKnown() {

-	return fIsStructureKnown;

-}

-/**

- * Returns an array with all the same elements as the specified array except for

- * the element to remove. Assumes that the deletion is contained in the array.

- */

-protected IJavaElement[] removeAndShrinkArray(IJavaElement[] array, IJavaElement deletion) {

-	IJavaElement[] old = array;

-	array = new IJavaElement[old.length - 1];

-	int j = 0;

-	for (int i = 0; i < old.length; i++) {

-		if (!old[i].equals(deletion)) {

-			array[j] = old[i];

+	public void addChild(IJavaElement child) {

+		if (fChildren == fgEmptyChildren) {

+			setChildren(new IJavaElement[] {child});

 		} else {

-			System.arraycopy(old, i + 1, array, j, old.length - (i + 1));

-			return array;

+			if (!includesChild(child)) {

+				setChildren(growAndAddToArray(fChildren, child));

+			}

 		}

-		j++;

 	}

-	return array;

-}

-public void removeChild(IJavaElement child) {

-	if (includesChild(child)) {

-		setChildren(removeAndShrinkArray(fChildren, child));

+	public Object clone() {

+		try {

+			return super.clone();

+		}

+		catch (CloneNotSupportedException e) {

+			throw new Error();

+		}

 	}

-}

-public void setChildren(IJavaElement[] children) {

-	fChildren = children;

-}

-/**

- * Sets whether the structure of this element known

- * @see IJavaElement.isStructureKnown()

- */

-public void setIsStructureKnown(boolean newIsStructureKnown) {

-	fIsStructureKnown = newIsStructureKnown;

-}

+	public IJavaElement[] getChildren() {

+		return fChildren;

+	}

+	/**

+	 * Adds the new element to a new array that contains all of the elements of the old array.

+	 * Returns the new array.

+	 */

+	protected IJavaElement[] growAndAddToArray(IJavaElement[] array, IJavaElement addition) {

+		IJavaElement[] old = array;

+		array = new IJavaElement[old.length + 1];

+		System.arraycopy(old, 0, array, 0, old.length);

+		array[old.length] = addition;

+		return array;

+	}

+	/**

+	 * Returns <code>true</code> if this child is in my children collection

+	 */

+	protected boolean includesChild(IJavaElement child) {

+		

+		for (int i= 0; i < fChildren.length; i++) {

+			if (fChildren[i].equals(child)) {

+				return true;

+			}

+		}

+		return false;

+	}

+	/**

+	 * @see IJavaElement#isStructureKnown()

+	 */

+	public boolean isStructureKnown() {

+		return fIsStructureKnown;

+	}

+	/**

+	 * Returns an array with all the same elements as the specified array except for

+	 * the element to remove. Assumes that the deletion is contained in the array.

+	 */

+	protected IJavaElement[] removeAndShrinkArray(IJavaElement[] array, IJavaElement deletion) {

+		IJavaElement[] old = array;

+		array = new IJavaElement[old.length - 1];

+		int j = 0;

+		for (int i = 0; i < old.length; i++) {

+			if (!old[i].equals(deletion)) {

+				array[j] = old[i];

+			} else {

+				System.arraycopy(old, i + 1, array, j, old.length - (i + 1));

+				return array;

+			}

+			j++;

+		}

+		return array;

+	}

+	public void removeChild(IJavaElement child) {

+		if (includesChild(child)) {

+			setChildren(removeAndShrinkArray(fChildren, child));

+		}

+	}

+	public void setChildren(IJavaElement[] children) {

+		fChildren = children;

+	}

+	/**

+	 * Sets whether the structure of this element known

+	 * @see IJavaElement#isStructureKnown()

+	 */

+	public void setIsStructureKnown(boolean newIsStructureKnown) {

+		fIsStructureKnown = newIsStructureKnown;

+	}

 }

diff --git a/model/org/eclipse/jdt/internal/core/JavaModel.java b/model/org/eclipse/jdt/internal/core/JavaModel.java
index 26ef332..b6170f5 100644
--- a/model/org/eclipse/jdt/internal/core/JavaModel.java
+++ b/model/org/eclipse/jdt/internal/core/JavaModel.java
@@ -70,6 +70,23 @@
 		runOperation(new DeleteElementsOperation(elements, force), monitor);

 	}

 }

+/**

+ * Finds the given project in the list of the java model's children.

+ * Returns null if not found.

+ */

+public IJavaProject findJavaProject(IProject project) {

+	try {

+		IJavaProject[] projects = this.getJavaProjects();

+		for (int i = 0, length = projects.length; i < length; i++) {
+			IJavaProject javaProject = projects[i];
+			if (project.equals(javaProject.getProject())) {

+				return javaProject;

+			}
+		}

+	} catch (JavaModelException e) {

+	}

+	return null;

+}

 

 /**

  */

diff --git a/model/org/eclipse/jdt/internal/core/JavaModelManager.java b/model/org/eclipse/jdt/internal/core/JavaModelManager.java
index 007e806..e1adef6 100644
--- a/model/org/eclipse/jdt/internal/core/JavaModelManager.java
+++ b/model/org/eclipse/jdt/internal/core/JavaModelManager.java
Binary files differ
diff --git a/model/org/eclipse/jdt/internal/core/JavaModelStatus.java b/model/org/eclipse/jdt/internal/core/JavaModelStatus.java
index a98bc64..8abc26e 100644
--- a/model/org/eclipse/jdt/internal/core/JavaModelStatus.java
+++ b/model/org/eclipse/jdt/internal/core/JavaModelStatus.java
@@ -48,273 +48,273 @@
 	 */

 	public static final IJavaModelStatus VERIFIED_OK = new JavaModelStatus(OK);

 

-/**

- * Constructs an Java model status with no corresponding elements.

- */

-public JavaModelStatus() {

-	// no code for an multi-status

-	super(ERROR, JavaCore.PLUGIN_ID, 0, "JavaModelStatus", null); //$NON-NLS-1$

-}

-/**

- * Constructs an Java model status with no corresponding elements.

- */

-public JavaModelStatus(int code) {

-	super(ERROR, JavaCore.PLUGIN_ID, code, "JavaModelStatus", null); //$NON-NLS-1$

-	fElements= JavaElementInfo.fgEmptyChildren;

-}

-/**

- * Constructs an Java model status with the given corresponding

- * elements.

- */

-public JavaModelStatus(int code, IJavaElement[] elements) {

-	super(ERROR, JavaCore.PLUGIN_ID, code, "JavaModelStatus", null); //$NON-NLS-1$

-	fElements= elements;

-	fPath= null;

-}

-/**

- * Constructs an Java model status with no corresponding elements.

- */

-public JavaModelStatus(int code, String string) {

-	super(ERROR, JavaCore.PLUGIN_ID, code, "JavaModelStatus", null); //$NON-NLS-1$

-	fElements= JavaElementInfo.fgEmptyChildren;

-	fPath= null;

-	fString = string;

-}

-/**

- * Constructs an Java model status with no corresponding elements.

- */

-public JavaModelStatus(int code, Throwable throwable) {

-	super(ERROR, JavaCore.PLUGIN_ID, code, "JavaModelStatus", throwable); //$NON-NLS-1$

-	fElements= JavaElementInfo.fgEmptyChildren;

-}

-/**

- * Constructs an Java model status with no corresponding elements.

- */

-public JavaModelStatus(int code, IPath path) {

-	super(ERROR, JavaCore.PLUGIN_ID, code, "JavaModelStatus", null); //$NON-NLS-1$

-	fElements= JavaElementInfo.fgEmptyChildren;

-	fPath= path;

-}

-/**

- * Constructs an Java model status with the given corresponding

- * element.

- */

-public JavaModelStatus(int code, IJavaElement element) {

-	this(code, new IJavaElement[]{element});

-}

-/**

- * Constructs an Java model status with the given corresponding

- * element and string

- */

-public JavaModelStatus(int code, IJavaElement element, String string) {

-	this(code, new IJavaElement[]{element});

-	fString= string;

-}

-/**

- * Constructs an Java model status with no corresponding elements.

- */

-public JavaModelStatus(CoreException coreException) {

-	super(ERROR, JavaCore.PLUGIN_ID, CORE_EXCEPTION, "JavaModelStatus", coreException); //$NON-NLS-1$

-	fElements= JavaElementInfo.fgEmptyChildren;

-}

-protected int getBits() {

-	int severity = 1 << (getCode() % 100 / 33);

-	int category = 1 << ((getCode() / 100) + 3);

-	return severity | category;

-}

-/**

- * @see IStatus

- */

-public IStatus[] getChildren() {

-	return fChildren;

-}

-/**

- * @see IJavaModelStatus

- */

-public IJavaElement[] getElements() {

-	return fElements;

-}

-/**

- * Returns the message that is relevant to the code of this status.

- */

-public String getMessage() {

-	if (getException() == null) {

-		switch (getCode()) {

-			case CORE_EXCEPTION :

-				return Util.bind("status.coreException"); //$NON-NLS-1$

-			case BUILDER_INITIALIZATION_ERROR:

-				return Util.bind("build.initializationError"); //$NON-NLS-1$

-			case BUILDER_SERIALIZATION_ERROR:

-				return Util.bind("build.serializationError"); //$NON-NLS-1$

-			case DEVICE_PATH:

-				return Util.bind("status.cannotUseDeviceOnPath", getPath().toString()); //$NON-NLS-1$

-			case DOM_EXCEPTION:

-				return Util.bind("status.JDOMError"); //$NON-NLS-1$

-			case ELEMENT_DOES_NOT_EXIST:

-				return Util.bind("element.doesNotExist",fElements[0].getElementName()); //$NON-NLS-1$

-			case EVALUATION_ERROR:

-				return Util.bind("status.evaluationError", getString()); //$NON-NLS-1$

-			case INDEX_OUT_OF_BOUNDS:

-				return Util.bind("status.indexOutOfBounds"); //$NON-NLS-1$

-			case INVALID_CONTENTS:

-				return Util.bind("status.invalidContents"); //$NON-NLS-1$

-			case INVALID_DESTINATION:

-				return Util.bind("status.invalidDestination", fElements[0].getElementName()); //$NON-NLS-1$

-			case INVALID_ELEMENT_TYPES:

-				StringBuffer buff= new StringBuffer(Util.bind("operation.notSupported")); //$NON-NLS-1$

-				for (int i= 0; i < fElements.length; i++) {

-					if (i > 0) {

-						buff.append(", "); //$NON-NLS-1$

+	/**

+	 * Constructs an Java model status with no corresponding elements.

+	 */

+	public JavaModelStatus() {

+		// no code for an multi-status

+		super(ERROR, JavaCore.PLUGIN_ID, 0, "JavaModelStatus", null); //$NON-NLS-1$

+	}

+	/**

+	 * Constructs an Java model status with no corresponding elements.

+	 */

+	public JavaModelStatus(int code) {

+		super(ERROR, JavaCore.PLUGIN_ID, code, "JavaModelStatus", null); //$NON-NLS-1$

+		fElements= JavaElementInfo.fgEmptyChildren;

+	}

+	/**

+	 * Constructs an Java model status with the given corresponding

+	 * elements.

+	 */

+	public JavaModelStatus(int code, IJavaElement[] elements) {

+		super(ERROR, JavaCore.PLUGIN_ID, code, "JavaModelStatus", null); //$NON-NLS-1$

+		fElements= elements;

+		fPath= null;

+	}

+	/**

+	 * Constructs an Java model status with no corresponding elements.

+	 */

+	public JavaModelStatus(int code, String string) {

+		super(ERROR, JavaCore.PLUGIN_ID, code, "JavaModelStatus", null); //$NON-NLS-1$

+		fElements= JavaElementInfo.fgEmptyChildren;

+		fPath= null;

+		fString = string;

+	}

+	/**

+	 * Constructs an Java model status with no corresponding elements.

+	 */

+	public JavaModelStatus(int code, Throwable throwable) {

+		super(ERROR, JavaCore.PLUGIN_ID, code, "JavaModelStatus", throwable); //$NON-NLS-1$

+		fElements= JavaElementInfo.fgEmptyChildren;

+	}

+	/**

+	 * Constructs an Java model status with no corresponding elements.

+	 */

+	public JavaModelStatus(int code, IPath path) {

+		super(ERROR, JavaCore.PLUGIN_ID, code, "JavaModelStatus", null); //$NON-NLS-1$

+		fElements= JavaElementInfo.fgEmptyChildren;

+		fPath= path;

+	}

+	/**

+	 * Constructs an Java model status with the given corresponding

+	 * element.

+	 */

+	public JavaModelStatus(int code, IJavaElement element) {

+		this(code, new IJavaElement[]{element});

+	}

+	/**

+	 * Constructs an Java model status with the given corresponding

+	 * element and string

+	 */

+	public JavaModelStatus(int code, IJavaElement element, String string) {

+		this(code, new IJavaElement[]{element});

+		fString= string;

+	}

+	/**

+	 * Constructs an Java model status with no corresponding elements.

+	 */

+	public JavaModelStatus(CoreException coreException) {

+		super(ERROR, JavaCore.PLUGIN_ID, CORE_EXCEPTION, "JavaModelStatus", coreException); //$NON-NLS-1$

+		fElements= JavaElementInfo.fgEmptyChildren;

+	}

+	protected int getBits() {

+		int severity = 1 << (getCode() % 100 / 33);

+		int category = 1 << ((getCode() / 100) + 3);

+		return severity | category;

+	}

+	/**

+	 * @see IStatus

+	 */

+	public IStatus[] getChildren() {

+		return fChildren;

+	}

+	/**

+	 * @see IJavaModelStatus

+	 */

+	public IJavaElement[] getElements() {

+		return fElements;

+	}

+	/**

+	 * Returns the message that is relevant to the code of this status.

+	 */

+	public String getMessage() {

+		if (getException() == null) {

+			switch (getCode()) {

+				case CORE_EXCEPTION :

+					return Util.bind("status.coreException"); //$NON-NLS-1$

+				case BUILDER_INITIALIZATION_ERROR:

+					return Util.bind("build.initializationError"); //$NON-NLS-1$

+				case BUILDER_SERIALIZATION_ERROR:

+					return Util.bind("build.serializationError"); //$NON-NLS-1$

+				case DEVICE_PATH:

+					return Util.bind("status.cannotUseDeviceOnPath", getPath().toString()); //$NON-NLS-1$

+				case DOM_EXCEPTION:

+					return Util.bind("status.JDOMError"); //$NON-NLS-1$

+				case ELEMENT_DOES_NOT_EXIST:

+					return Util.bind("element.doesNotExist",fElements[0].getElementName()); //$NON-NLS-1$

+				case EVALUATION_ERROR:

+					return Util.bind("status.evaluationError", getString()); //$NON-NLS-1$

+				case INDEX_OUT_OF_BOUNDS:

+					return Util.bind("status.indexOutOfBounds"); //$NON-NLS-1$

+				case INVALID_CONTENTS:

+					return Util.bind("status.invalidContents"); //$NON-NLS-1$

+				case INVALID_DESTINATION:

+					return Util.bind("status.invalidDestination", fElements[0].getElementName()); //$NON-NLS-1$

+				case INVALID_ELEMENT_TYPES:

+					StringBuffer buff= new StringBuffer(Util.bind("operation.notSupported")); //$NON-NLS-1$

+					for (int i= 0; i < fElements.length; i++) {

+						if (i > 0) {

+							buff.append(", "); //$NON-NLS-1$

+						}

+						buff.append(fElements[0].getElementName());

 					}

-					buff.append(fElements[0].getElementName());

-				}

-				return buff.toString();

-			case INVALID_NAME:

-				return Util.bind("status.invalidName", getString()); //$NON-NLS-1$

-			case INVALID_PACKAGE:

-				return Util.bind("status.invalidPackage", getString()); //$NON-NLS-1$

-			case INVALID_PATH:

-				return Util.bind("status.invalidPath", getPath() == null ? "null" : getPath().toString()); //$NON-NLS-1$ //$NON-NLS-2$

-			case INVALID_PROJECT:

-				return Util.bind("status.invalidProject", getString()); //$NON-NLS-1$

-			case INVALID_RESOURCE:

-				return Util.bind("status.invalidResource", getString()); //$NON-NLS-1$

-			case INVALID_RESOURCE_TYPE:

-				return Util.bind("status.invalidResourceType", getString()); //$NON-NLS-1$

-			case INVALID_SIBLING:

-				return Util.bind("status.invalidSibling", fElements[0].getElementName()); //$NON-NLS-1$

-			case IO_EXCEPTION:

-				return Util.bind("status.IOException"); //$NON-NLS-1$

-			case NAME_COLLISION:

-				if (fElements != null && fElements.length > 0) {

+					return buff.toString();

+				case INVALID_NAME:

+					return Util.bind("status.invalidName", getString()); //$NON-NLS-1$

+				case INVALID_PACKAGE:

+					return Util.bind("status.invalidPackage", getString()); //$NON-NLS-1$

+				case INVALID_PATH:

+					return Util.bind("status.invalidPath", getPath() == null ? "null" : getPath().toString()); //$NON-NLS-1$ //$NON-NLS-2$

+				case INVALID_PROJECT:

+					return Util.bind("status.invalidProject", getString()); //$NON-NLS-1$

+				case INVALID_RESOURCE:

+					return Util.bind("status.invalidResource", getString()); //$NON-NLS-1$

+				case INVALID_RESOURCE_TYPE:

+					return Util.bind("status.invalidResourceType", getString()); //$NON-NLS-1$

+				case INVALID_SIBLING:

+					return Util.bind("status.invalidSibling", fElements[0].getElementName()); //$NON-NLS-1$

+				case IO_EXCEPTION:

+					return Util.bind("status.IOException"); //$NON-NLS-1$

+				case NAME_COLLISION:

+					if (fElements != null && fElements.length > 0) {

+						IJavaElement element = fElements[0];

+						String name = element.getElementName();

+						if (element instanceof IPackageFragment && name.equals(IPackageFragment.DEFAULT_PACKAGE_NAME)) {

+							return Util.bind("operation.cannotRenameDefaultPackage"); //$NON-NLS-1$

+						}

+					}

+					return Util.bind("status.nameCollision"); //$NON-NLS-1$

+				case NO_ELEMENTS_TO_PROCESS:

+					return Util.bind("operation.needElements"); //$NON-NLS-1$

+				case NULL_NAME:

+					return Util.bind("operation.needName"); //$NON-NLS-1$

+				case NULL_PATH:

+					return Util.bind("operation.needPath"); //$NON-NLS-1$

+				case NULL_STRING:

+					return Util.bind("operation.needString"); //$NON-NLS-1$

+				case PATH_OUTSIDE_PROJECT:

+					return Util.bind("operation.pathOutsideProject", getString(), fElements[0].getElementName()); //$NON-NLS-1$

+				case READ_ONLY:

 					IJavaElement element = fElements[0];

 					String name = element.getElementName();

 					if (element instanceof IPackageFragment && name.equals(IPackageFragment.DEFAULT_PACKAGE_NAME)) {

-						return Util.bind("operation.cannotRenameDefaultPackage"); //$NON-NLS-1$

+						return Util.bind("status.defaultPackageReadOnly"); //$NON-NLS-1$

 					}

-				}

-				return Util.bind("status.nameCollision"); //$NON-NLS-1$

-			case NO_ELEMENTS_TO_PROCESS:

-				return Util.bind("operation.needElements"); //$NON-NLS-1$

-			case NULL_NAME:

-				return Util.bind("operation.needName"); //$NON-NLS-1$

-			case NULL_PATH:

-				return Util.bind("operation.needPath"); //$NON-NLS-1$

-			case NULL_STRING:

-				return Util.bind("operation.needString"); //$NON-NLS-1$

-			case PATH_OUTSIDE_PROJECT:

-				return Util.bind("operation.pathOutsideProject", getString(), fElements[0].getElementName()); //$NON-NLS-1$

-			case READ_ONLY:

-				IJavaElement element = fElements[0];

-				String name = element.getElementName();

-				if (element instanceof IPackageFragment && name.equals(IPackageFragment.DEFAULT_PACKAGE_NAME)) {

-					return Util.bind("status.defaultPackageReadOnly"); //$NON-NLS-1$

-				}

-				return  Util.bind("status.readOnly", name); //$NON-NLS-1$

-			case RELATIVE_PATH:

-				return Util.bind("operation.needAbsolutePath", getPath().toString()); //$NON-NLS-1$

-			case TARGET_EXCEPTION:

-				return Util.bind("status.targetException"); //$NON-NLS-1$

-			case UPDATE_CONFLICT:

-				return Util.bind("status.updateConflict"); //$NON-NLS-1$

-			case NO_LOCAL_CONTENTS :

-				return Util.bind("status.noLocalContents", getPath().toString()); //$NON-NLS-1$

-		}

-		return getString();

-	} else {

-		return getException().getMessage();

-	}

-}

-/**

- * @see IOperationStatus

- */

-public IPath getPath() {

-	return fPath;

-}

-/**

- * @see IStatus

- */

-public int getSeverity() {

-	if (fChildren == fgEmptyChildren) return super.getSeverity();

-	int severity = -1;

-	for (int i = 0, max = fChildren.length; i < max; i++) {

-		int childrenSeverity = fChildren[i].getSeverity();

-		if (childrenSeverity > severity) {

-			severity = childrenSeverity;

+					return  Util.bind("status.readOnly", name); //$NON-NLS-1$

+				case RELATIVE_PATH:

+					return Util.bind("operation.needAbsolutePath", getPath().toString()); //$NON-NLS-1$

+				case TARGET_EXCEPTION:

+					return Util.bind("status.targetException"); //$NON-NLS-1$

+				case UPDATE_CONFLICT:

+					return Util.bind("status.updateConflict"); //$NON-NLS-1$

+				case NO_LOCAL_CONTENTS :

+					return Util.bind("status.noLocalContents", getPath().toString()); //$NON-NLS-1$

+			}

+			return getString();

+		} else {

+			return getException().getMessage();

 		}

 	}

-	return severity;

-}

-/**

- * @see IJavaModelStatus

- */

-public String getString() {

-	return fString;

-}

-/**

- * @see IJavaModelStatus

- */

-public boolean isDoesNotExist() {

-	return getCode() == ELEMENT_DOES_NOT_EXIST;

-}

-/**

- * @see IStatus

- */

-public boolean isMultiStatus() {

-	return fChildren != fgEmptyChildren;

-}

-/**

- * @see IJavaModelStatus

- */

-public boolean isOK() {

-	return getCode() == OK;

-}

-/**

- * @see IStatus#matches

- */

-public boolean matches(int mask) {

-	if (! isMultiStatus()) {

-		return matches(this, mask);

-	} else {

+	/**

+	 * @see IJavaModelStatus#getPath()

+	 */

+	public IPath getPath() {

+		return fPath;

+	}

+	/**

+	 * @see IStatus#getSeverity()

+	 */

+	public int getSeverity() {

+		if (fChildren == fgEmptyChildren) return super.getSeverity();

+		int severity = -1;

 		for (int i = 0, max = fChildren.length; i < max; i++) {

-			if (matches((JavaModelStatus) fChildren[i], mask))

-				return true;

+			int childrenSeverity = fChildren[i].getSeverity();

+			if (childrenSeverity > severity) {

+				severity = childrenSeverity;

+			}

 		}

-		return false;

+		return severity;

 	}

-}

-/**

- * Helper for matches(int).

- */

-protected boolean matches(JavaModelStatus status, int mask) {

-	int severityMask = mask & 0x7;

-	int categoryMask = mask & ~0x7;

-	int bits = status.getBits();

-	return ((severityMask == 0) || (bits & severityMask) != 0) && ((categoryMask == 0) || (bits & categoryMask) != 0);

-}

-/**

- * Creates and returns a new <code>IJavaModelStatus</code> that is a

- * a multi-status status.

- *

- * @see IStatus#.isMultiStatus()

- */

-public static IJavaModelStatus newMultiStatus(IJavaModelStatus[] children) {

-	JavaModelStatus jms = new JavaModelStatus();

-	jms.fChildren = children;

-	return jms;

-}

-/**

- * Returns a printable representation of this exception for debugging

- * purposes.

- */

-public String toString() {

-	if (this == VERIFIED_OK){

-		return "JavaModelStatus[OK]"; //$NON-NLS-1$

+	/**

+	 * @see IJavaModelStatus#getString()

+	 */

+	public String getString() {

+		return fString;

 	}

-	StringBuffer buffer = new StringBuffer();

-	buffer.append("Java Model Status ["); //$NON-NLS-1$

-	buffer.append(getMessage());

-	buffer.append("]"); //$NON-NLS-1$

-	return buffer.toString();

-}

+	/**

+	 * @see IJavaModelStatus#isDoesNotExist()

+	 */

+	public boolean isDoesNotExist() {

+		return getCode() == ELEMENT_DOES_NOT_EXIST;

+	}

+	/**

+	 * @see IStatus#isMultiStatus()

+	 */

+	public boolean isMultiStatus() {

+		return fChildren != fgEmptyChildren;

+	}

+	/**

+	 * @see IStatus#isOK()

+	 */

+	public boolean isOK() {

+		return getCode() == OK;

+	}

+	/**

+	 * @see IStatus#matches(int)

+	 */

+	public boolean matches(int mask) {

+		if (! isMultiStatus()) {

+			return matches(this, mask);

+		} else {

+			for (int i = 0, max = fChildren.length; i < max; i++) {

+				if (matches((JavaModelStatus) fChildren[i], mask))

+					return true;

+			}

+			return false;

+		}

+	}

+	/**

+	 * Helper for matches(int).

+	 */

+	protected boolean matches(JavaModelStatus status, int mask) {

+		int severityMask = mask & 0x7;

+		int categoryMask = mask & ~0x7;

+		int bits = status.getBits();

+		return ((severityMask == 0) || (bits & severityMask) != 0) && ((categoryMask == 0) || (bits & categoryMask) != 0);

+	}

+	/**

+	 * Creates and returns a new <code>IJavaModelStatus</code> that is a

+	 * a multi-status status.

+	 *

+	 * @see IStatus#isMultiStatus()

+	 */

+	public static IJavaModelStatus newMultiStatus(IJavaModelStatus[] children) {

+		JavaModelStatus jms = new JavaModelStatus();

+		jms.fChildren = children;

+		return jms;

+	}

+	/**

+	 * Returns a printable representation of this exception for debugging

+	 * purposes.

+	 */

+	public String toString() {

+		if (this == VERIFIED_OK){

+			return "JavaModelStatus[OK]"; //$NON-NLS-1$

+		}

+		StringBuffer buffer = new StringBuffer();

+		buffer.append("Java Model Status ["); //$NON-NLS-1$

+		buffer.append(getMessage());

+		buffer.append("]"); //$NON-NLS-1$

+		return buffer.toString();

+	}

 }

diff --git a/model/org/eclipse/jdt/internal/core/JavaProject.java b/model/org/eclipse/jdt/internal/core/JavaProject.java
index c2b0bad..6295a15 100644
--- a/model/org/eclipse/jdt/internal/core/JavaProject.java
+++ b/model/org/eclipse/jdt/internal/core/JavaProject.java
@@ -477,28 +477,6 @@
 

 		// register Java builder

 		addToBuildSpec(JavaCore.BUILDER_ID);

-

-		// add project as child of java model

-		JavaModel model = (JavaModel) getJavaModel();

-		JavaElementInfo jmi = model.getElementInfo();

-		jmi.addChild(this);

-

-		// notify Java delta (Java project added) 

-		JavaModelManager manager =

-			(JavaModelManager) JavaModelManager.getJavaModelManager();

-		IProject project = this.getProject();

-		if (!manager.isBeingDeleted(project)) {

-			// create java delta 

-			JavaElementDelta projectDelta = new JavaElementDelta(model);

-			projectDelta.added(this);

-			manager.registerJavaModelDelta(projectDelta);

-			

-			// index project

-			manager.getIndexManager().indexAll(project);

-			

-		} // else project is removed then added 

-		  // -> it will be a changed delta reported by delta processor

-

 	}

 

 	/**

@@ -507,11 +485,8 @@
 	void createClasspathProblemMarker(

 		String message,

 		int severity,

-		boolean cycleDetected) {

+		boolean isCycleProblem) {

 		try {

-			if (cycleDetected){

-				String dummy = null;

-			}

 			IMarker marker = getProject().createMarker(IJavaModelMarker.BUILDPATH_PROBLEM_MARKER);

 			marker.setAttributes(

 				new String[] { 

@@ -523,7 +498,7 @@
 					message,

 					new Integer(severity), 

 					Util.bind("classpath.buildPath"),//$NON-NLS-1$

-					cycleDetected ? "true" : "false"});//$NON-NLS-1$ //$NON-NLS-2$

+					isCycleProblem ? "true" : "false"});//$NON-NLS-1$ //$NON-NLS-2$

 		} catch (CoreException e) {

 		}

 	}

@@ -544,21 +519,6 @@
 

 		// deregister Java builder

 		removeFromBuildSpec(JavaCore.BUILDER_ID);

-		

-		// notify Java delta (Java project removed) 

-		JavaModelManager manager =

-			(JavaModelManager) JavaModelManager.getJavaModelManager();

-		JavaModel model = (JavaModel) getJavaModel();

-		JavaElementDelta projectDelta = new JavaElementDelta(model);

-		projectDelta.removed(this);

-		manager.registerJavaModelDelta(projectDelta);

-		

-		// remove index

-		manager.getIndexManager().removeIndex(this.getProject().getFullPath());

-		

-		// remove project from java model

-		JavaElementInfo jmi = model.getElementInfo();

-		jmi.removeChild(this);

 	}

 

 	/**

@@ -1044,13 +1004,11 @@
 	}

 

 	/**

-	 * Returns a handle to the package fragment root identified by the given path.

+	 * @return A handle to the package fragment root identified by the given path.

 	 * This method is handle-only and the element may or may not exist. Returns

 	 * <code>null</code> if unable to generate a handle from the path (for example,

 	 * an absolute path that has less than 2 segments. The path may be relative or

 	 * absolute.

-	 *

-	 * @private

 	 */

 	public IPackageFragmentRoot getPackageFragmentRoot(IPath path) {

 		Object target = JavaModel.getTarget(getProject().getWorkspace().getRoot(), path, false);

@@ -1270,7 +1228,10 @@
 	public IClasspathEntry[] getResolvedClasspath(boolean ignoreUnresolvedVariable)

 		throws JavaModelException {

 

-		return this.getResolvedClasspath(ignoreUnresolvedVariable, false);

+		return 

+			this.getResolvedClasspath(

+				ignoreUnresolvedVariable, 

+				false); // generateMarkerOnError

 	}

 

 	/**

@@ -1442,7 +1403,7 @@
 	 * which form of storage to use appropriately. Shared properties produce real resource files which

 	 * can be shared through a VCM onto a server. Persistent properties are not shareable.

 	 *

-	 * @see JavaProject.setSharedProperty(...)

+	 * @see JavaProject#setSharedProperty(QualifiedName, String)

 	 */

 	public String getSharedProperty(QualifiedName key) throws CoreException {

 

@@ -1485,7 +1446,7 @@
 	public boolean hasClasspathCycle(IClasspathEntry[] entries) {

 		

 		HashSet cycleParticipants = new HashSet();

-		updateCycleParticipants(entries, new HashSet(), cycleParticipants, getWorkspace().getRoot());

+		updateCycleParticipants(entries, new ArrayList(), cycleParticipants, getWorkspace().getRoot());

 		return !cycleParticipants.isEmpty();

 	}

 	

@@ -1865,7 +1826,7 @@
 	}

 	

 	/**

-	 * Saves the classpath in a shareable format (VCM-wise) if necessary (i.e. semantically different)

+	 * Saves the classpath in a shareable format (VCM-wise) if necessary (i.e.&nbsp;semantically different).

 	 * Will never write an identical one.

 	 * Returns whether the .classpath file was modified.

 	 */

@@ -1982,7 +1943,14 @@
 		IProgressMonitor monitor)

 		throws JavaModelException {

 

-		setRawClasspath(entries, outputLocation, monitor, true, true, getResolvedClasspath(true), true);

+		setRawClasspath(

+			entries, 

+			outputLocation, 

+			monitor, 

+			true, // canChangeResource

+			true, // forceSave

+			getResolvedClasspath(true), // ignoreUnresolvedVariable

+			true); // needCycleCheck

 	}

 

 	public void setRawClasspath(

@@ -1992,7 +1960,7 @@
 		boolean canChangeResource,

 		boolean forceSave,

 		IClasspathEntry[] oldResolvedPath,

-		boolean mayChangeProjectDependencies)

+		boolean needCycleCheck)

 		throws JavaModelException {

 

 		JavaModelManager manager =

@@ -2010,7 +1978,7 @@
 					newOutputLocation,

 					canChangeResource, 

 					forceSave,

-					mayChangeProjectDependencies);

+					needCycleCheck);

 			runOperation(op, monitor);

 			

 		} catch (JavaModelException e) {

@@ -2027,7 +1995,14 @@
 		IProgressMonitor monitor)

 		throws JavaModelException {

 

-		setRawClasspath(entries, SetClasspathOperation.ReuseOutputLocation, monitor, true, true, getResolvedClasspath(true), true);

+		setRawClasspath(

+			entries, 

+			SetClasspathOperation.ReuseOutputLocation, 

+			monitor, 

+			true, // canChangeResource

+			true, // forceSave

+			getResolvedClasspath(true), // ignoreUnresolvedVariable

+			true); // needCycleCheck

 	}

 

 	/**

@@ -2065,7 +2040,7 @@
 	 * shared properties end up in resource files, and thus cannot be modified during

 	 * delta notifications (a CoreException would then be thrown).

 	 * 

-	 * @see JavaProject.getSharedProperty(...)

+	 * @see JavaProject#getSharedProperty(QualifiedName key)

 	 */

 	public void setSharedProperty(QualifiedName key, String value)

 		throws CoreException {

@@ -2081,11 +2056,6 @@
 		}

 	}

 

-	public void updateClassPath(IProgressMonitor monitor, boolean canChangeResource, boolean mayChangeProjectDependencies) throws JavaModelException {

-

-		setRawClasspath(getRawClasspath(), SetClasspathOperation.ReuseOutputLocation, monitor, canChangeResource, false, getResolvedClasspath(true), mayChangeProjectDependencies);

-	}

-

 	/**

 	 * Update cycle markers for all java projects

 	 */

@@ -2096,7 +2066,7 @@
 		IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();

 

 		HashSet cycleParticipants = new HashSet();

-		HashSet visited = new HashSet();

+		ArrayList visited = new ArrayList();

 		int length = projects.length;

 		for (int i = 0; i < length; i++){

 			JavaProject project = (JavaProject)projects[i];

@@ -2110,11 +2080,12 @@
 			JavaProject project = (JavaProject)projects[i];

 			

 			if (cycleParticipants.contains(project)){

-				

-				project.createClasspathProblemMarker(

-					Util.bind("classpath.cycle"), //$NON-NLS-1$

-					IMarker.SEVERITY_ERROR,

-					true); 

+				if (!project.hasCycleMarker()){

+					project.createClasspathProblemMarker(

+						Util.bind("classpath.cycle"), //$NON-NLS-1$

+						IMarker.SEVERITY_ERROR,

+						true); 

+				}

 			} else {

 				project.flushClasspathProblemMarkers(true);

 			}			

@@ -2122,14 +2093,20 @@
 	}

 	

 	/**

-	 * If a cycle is detected, then cycleParticipants contains all the project involved in this cycle (directly or indirectly),

+	 * If a cycle is detected, then cycleParticipants contains all the project involved in this cycle (directly),

 	 * no cycle if the set is empty (and started empty)

 	 */

-	public void updateCycleParticipants(IClasspathEntry[] preferredClasspath, HashSet visited, HashSet cycleParticipants, IWorkspaceRoot workspaceRoot){

+	public void updateCycleParticipants(IClasspathEntry[] preferredClasspath, ArrayList visited, HashSet cycleParticipants, IWorkspaceRoot workspaceRoot){

 

-		if (!visited.add(this)) {

-			cycleParticipants.addAll(visited);

+		int index = visited.indexOf(this);

+		if (index >= 0){

+			// only consider direct participants inside the cycle

+			for (int i = index, size = visited.size(); i < size; i++){

+				cycleParticipants.add(visited.get(i)); 

+			}

 			return;

+		} else {

+			visited.add(this);

 		}

 		

 		try {

diff --git a/model/org/eclipse/jdt/internal/core/MemberElementInfo.java b/model/org/eclipse/jdt/internal/core/MemberElementInfo.java
index d44032f..6fa8695 100644
--- a/model/org/eclipse/jdt/internal/core/MemberElementInfo.java
+++ b/model/org/eclipse/jdt/internal/core/MemberElementInfo.java
@@ -33,58 +33,57 @@
 	 * This member's name

 	 */

 	protected char[] name;

-/**

- * @see IGenericType

- * @see IGenericMethod

- * @see IGenericField

- */

-public int getModifiers() {

-	return this.flags;

-}

-/**

- * @see ISourceType

- * @see ISourceField

- */

-public char[] getName() {

-	return this.name;

-}

-/**

- * @see ISourceType

- * @see ISourceMethod

- * @see ISourceField

- */

-public int getNameSourceEnd() {

-	return this.nameEnd;

-}

-/**

- * @see ISourceType

- * @see ISourceMethod

- * @see ISourceField

- */

-public int getNameSourceStart() {

-	return this.nameStart;

-}

-protected void setFlags(int flags) {

-	this.flags = flags;

-}

-/**

- * Sets this member's name

- */

-protected void setName(char[] name) {

-	this.name= name;

-}

-/**

- * Sets the last position of this member's name, relative

- * to its openable's source buffer.

- */

-protected void setNameSourceEnd(int end) {

-	this.nameEnd= end;

-}

-/**

- * Sets the start position of this member's name, relative

- * to its openable's source buffer.

- */

-protected void setNameSourceStart(int start) {

-	this.nameStart= start;

-}

+	/**

+	 * @see org.eclipse.jdt.internal.compiler.env.IGenericType#getModifiers()

+	 * @see org.eclipse.jdt.internal.compiler.env.IGenericMethod#getModifiers()

+	 * @see org.eclipse.jdt.internal.compiler.env.IGenericField#getModifiers()

+	 */

+	public int getModifiers() {

+		return this.flags;

+	}

+	/**

+	 * @see org.eclipse.jdt.internal.compiler.env.ISourceType#getName()

+	 */

+	public char[] getName() {

+		return this.name;

+	}

+	/**

+	 * @see org.eclipse.jdt.internal.compiler.env.ISourceType#getNameSourceEnd()

+	 * @see org.eclipse.jdt.internal.compiler.env.ISourceMethod#getNameSourceEnd()

+	 * @see org.eclipse.jdt.internal.compiler.env.ISourceField#getNameSourceEnd()

+	 */

+	public int getNameSourceEnd() {

+		return this.nameEnd;

+	}

+	/**

+	 * @see org.eclipse.jdt.internal.compiler.env.ISourceType#getNameSourceStart()

+	 * @see org.eclipse.jdt.internal.compiler.env.ISourceMethod#getNameSourceStart()
+	 * @see org.eclipse.jdt.internal.compiler.env.ISourceField#getNameSourceStart()

+	 */

+	public int getNameSourceStart() {

+		return this.nameStart;

+	}

+	protected void setFlags(int flags) {

+		this.flags = flags;

+	}

+	/**

+	 * Sets this member's name

+	 */

+	protected void setName(char[] name) {

+		this.name= name;

+	}

+	/**

+	 * Sets the last position of this member's name, relative

+	 * to its openable's source buffer.

+	 */

+	protected void setNameSourceEnd(int end) {

+		this.nameEnd= end;

+	}

+	/**

+	 * Sets the start position of this member's name, relative

+	 * to its openable's source buffer.

+	 */

+	protected void setNameSourceStart(int start) {

+		this.nameStart= start;

+	}

 }

diff --git a/model/org/eclipse/jdt/internal/core/NameLookup.java b/model/org/eclipse/jdt/internal/core/NameLookup.java
index 2f04274..7e5c4ed 100644
--- a/model/org/eclipse/jdt/internal/core/NameLookup.java
+++ b/model/org/eclipse/jdt/internal/core/NameLookup.java
@@ -413,15 +413,15 @@
 	 * The domain of the search is bounded by the Java project from which 

 	 * this name lookup was obtained.

 	 *

-	 * @name the name of the type to find

-	 * @pkg the package to search

+	 * @param name the name of the type to find

+	 * @param pkg the package to search

 	 * @param partialMatch partial name matches qualify when <code>true</code>,

 	 *	only exact name matches qualify when <code>false</code>

 	 * @param acceptFlags a bit mask describing if classes, interfaces or both classes and interfaces

 	 * 	are desired results. If no flags are specified, all types are returned.

 	 *

-	 * @see ACCEPT_CLASSES

-	 * @see ACCEPT_INTERFACES

+	 * @see #ACCEPT_CLASSES

+	 * @see #ACCEPT_INTERFACES

 	 */

 	public IType findType(String name, IPackageFragment pkg, boolean partialMatch, int acceptFlags) {

 		if (pkg == null) {

@@ -439,14 +439,14 @@
 	 * if none exist. The domain of

 	 * the search is bounded by the Java project from which this name lookup was obtained.

 	 *

-	 * @name the name of the type to find

+	 * @param name the name of the type to find

 	 * @param partialMatch partial name matches qualify when <code>true</code>,

 	 *	only exact name matches qualify when <code>false</code>

 	 * @param acceptFlags a bit mask describing if classes, interfaces or both classes and interfaces

 	 * 	are desired results. If no flags are specified, all types are returned.

 	 *

-	 * @see ACCEPT_CLASSES

-	 * @see ACCEPT_INTERFACES

+	 * @see #ACCEPT_CLASSES

+	 * @see #ACCEPT_INTERFACES

 	 */

 	public IType findType(String name, boolean partialMatch, int acceptFlags) {

 		int index= name.lastIndexOf('.');

@@ -517,16 +517,19 @@
 	 * Notifies the given requestor of all types (classes and interfaces) in the

 	 * given package fragment with the given (unqualified) name.

 	 * Checks the requestor at regular intervals to see if the requestor

-	 * has canceled.  If the given package fragment is <code>null</code>, all types in the

+	 * has canceled. If the given package fragment is <code>null</code>, all types in the

 	 * project whose simple name matches the given name are found.

 	 *

+	 * @param name The name to search

+	 * @param pkg The corresponding package fragment

 	 * @param partialMatch partial name matches qualify when <code>true</code>;

 	 *	only exact name matches qualify when <code>false</code>

 	 * @param acceptFlags a bit mask describing if classes, interfaces or both classes and interfaces

 	 * 	are desired results. If no flags are specified, all types are returned.

+	 * @param requestor The requestor that collects the result

 	 *

-	 * @see ACCEPT_CLASSES

-	 * @see ACCEPT_INTERFACES

+	 * @see #ACCEPT_CLASSES

+	 * @see #ACCEPT_INTERFACES

 	 */

 	public void seekTypes(String name, IPackageFragment pkg, boolean partialMatch, int acceptFlags, IJavaElementRequestor requestor) {

 

diff --git a/model/org/eclipse/jdt/internal/core/Openable.java b/model/org/eclipse/jdt/internal/core/Openable.java
index a1ed4c7..bb750fc 100644
--- a/model/org/eclipse/jdt/internal/core/Openable.java
+++ b/model/org/eclipse/jdt/internal/core/Openable.java
@@ -27,7 +27,8 @@
 /**

  * Abstract class for implementations of java elements which are IOpenable.

  *

- * @see IJavaElement, IOpenable

+ * @see IJavaElement

+ * @see IOpenable

  */

 public abstract class Openable extends JavaElement implements IOpenable, IBufferChangedListener {

 

diff --git a/model/org/eclipse/jdt/internal/core/OverflowingLRUCache.java b/model/org/eclipse/jdt/internal/core/OverflowingLRUCache.java
index b8c2078..2278a6a 100644
--- a/model/org/eclipse/jdt/internal/core/OverflowingLRUCache.java
+++ b/model/org/eclipse/jdt/internal/core/OverflowingLRUCache.java
@@ -120,10 +120,10 @@
 		return (fCurrentSpace + fOverflow) * 100.0 / fSpaceLimit;

 	}

 	/**

+	 * For internal testing only.

 	 * This method exposed only for testing purposes!

 	 *

 	 * @return Hashtable of entries

-	 * @private - for internal testing only

 	 */

 	public java.util.Hashtable getEntryTable() {

 		return fEntryTable;

@@ -142,44 +142,44 @@
 	public int getOverflow() {

 		return fOverflow;

 	}

-/**

- * Ensures there is the specified amount of free space in the receiver,

- * by removing old entries if necessary.  Returns true if the requested space was

- * made available, false otherwise.  May not be able to free enough space

- * since some elements cannot be removed until they are saved.

- *

- * @param space Amount of space to free up

- */

-protected boolean makeSpace(int space) {

-

-	int limit = fSpaceLimit;

-	if (fOverflow == 0) {

-		/* if space is already available */

+	/**

+	 * Ensures there is the specified amount of free space in the receiver,

+	 * by removing old entries if necessary.  Returns true if the requested space was

+	 * made available, false otherwise.  May not be able to free enough space

+	 * since some elements cannot be removed until they are saved.

+	 *

+	 * @param space Amount of space to free up

+	 */

+	protected boolean makeSpace(int space) {

+	

+		int limit = fSpaceLimit;

+		if (fOverflow == 0) {

+			/* if space is already available */

+			if (fCurrentSpace + space <= limit) {

+				return true;

+			}

+		}

+	

+		/* Free up space by removing oldest entries */

+		int spaceNeeded = (int)((1 - fLoadFactor) * fSpaceLimit);

+		spaceNeeded = (spaceNeeded > space) ? spaceNeeded : space;

+		LRUCacheEntry entry = fEntryQueueTail;

+	

+		while (fCurrentSpace + spaceNeeded > limit && entry != null) {

+			this.privateRemoveEntry(entry, false, false);

+			entry = entry._fPrevious;

+		}

+	

+		/* check again, since we may have aquired enough space */

 		if (fCurrentSpace + space <= limit) {

+			fOverflow = 0;

 			return true;

 		}

+	

+		/* update fOverflow */

+		fOverflow = fCurrentSpace + space - limit;

+		return false;

 	}

-

-	/* Free up space by removing oldest entries */

-	int spaceNeeded = (int)((1 - fLoadFactor) * fSpaceLimit);

-	spaceNeeded = (spaceNeeded > space) ? spaceNeeded : space;

-	LRUCacheEntry entry = fEntryQueueTail;

-

-	while (fCurrentSpace + spaceNeeded > limit && entry != null) {

-		this.privateRemoveEntry(entry, false, false);

-		entry = entry._fPrevious;

-	}

-

-	/* check again, since we may have aquired enough space */

-	if (fCurrentSpace + space <= limit) {

-		fOverflow = 0;

-		return true;

-	}

-

-	/* update fOverflow */

-	fOverflow = fCurrentSpace + space - limit;

-	return false;

-}

 	/**

 	 * Returns a new instance of the reciever.

 	 */

@@ -199,7 +199,7 @@
 		return entry._fValue;

 	}

 /**

- * @private	For testing purposes only

+ * For testing purposes only

  */

 public void printStats() {

 	int forwardListLength = 0;

diff --git a/model/org/eclipse/jdt/internal/core/PackageFragment.java b/model/org/eclipse/jdt/internal/core/PackageFragment.java
index ec555ed..0682ff1 100644
--- a/model/org/eclipse/jdt/internal/core/PackageFragment.java
+++ b/model/org/eclipse/jdt/internal/core/PackageFragment.java
@@ -134,7 +134,7 @@
 	return computeChildren(info, underlyingResource);

 }

 /**

- * @see IPackageFragment

+ * @see IPackageFragment#getClassFile(String)

  */

 public IClassFile getClassFile(String name) {

 	return new ClassFile(this, name);

@@ -144,8 +144,7 @@
  * that has its kind set to <code>IPackageFragmentRoot.K_Source</code> does not

  * recognize class files.

  *

- * @see IPackageFragment

- * @see JarPackageFragment

+ * @see IPackageFragment#getClassFiles()

  */

 public IClassFile[] getClassFiles() throws JavaModelException {

 	if (getKind() == IPackageFragmentRoot.K_SOURCE) {

@@ -158,13 +157,13 @@
 	return array;

 }

 /**

- * @see IPackageFragment

+ * @see IPackageFragment#getCompilationUnit(String)

  */

 public ICompilationUnit getCompilationUnit(String name) {

 	return new CompilationUnit(this, name);

 }

 /**

- * @see IPackageFragment

+ * @see IPackageFragment#getCompilationUnits()

  */

 public ICompilationUnit[] getCompilationUnits() throws JavaModelException {

 	if (getKind() == IPackageFragmentRoot.K_BINARY) {

@@ -177,13 +176,13 @@
 	return array;

 }

 /**

- * @see JavaElement#getHandleMemento()

+ * @see JavaElement#getHandleMementoDelimiter()

  */

 protected char getHandleMementoDelimiter() {

 	return JavaElement.JEM_PACKAGEFRAGMENT;

 }

 /**

- * @see IPackageFragment

+ * @see IPackageFragment#getKind()

  */

 public int getKind() throws JavaModelException {

 	return ((IPackageFragmentRoot)getParent()).getKind();

@@ -199,8 +198,8 @@
 		return ((PackageFragmentInfo) getElementInfo()).getNonJavaResources(getUnderlyingResource());

 	}

 }

-/*

- * @see IJavaElement

+/**

+ * @see IJavaElement#getPath()

  */

 public IPath getPath() {

 	PackageFragmentRoot root = this.getPackageFragmentRoot();

@@ -210,8 +209,8 @@
 		return root.getPath().append(this.getElementName().replace('.', '/'));

 	}

 }

-/*

- * @see IJavaElement

+/**

+ * @see IJavaElement#getResource()

  */

 public IResource getResource() {

 	PackageFragmentRoot root = this.getPackageFragmentRoot();

@@ -227,7 +226,7 @@
 	}

 }

 /**

- * @see IJavaElement

+ * @see IJavaElement#getUnderlyingResource()

  */

 public IResource getUnderlyingResource() throws JavaModelException {

 	IResource rootResource = fParent.getUnderlyingResource();

@@ -253,7 +252,7 @@
 	}

 }

 /**

- * @see IPackageFragment

+ * @see IPackageFragment#hasSubpackages()

  */

 public boolean hasSubpackages() throws JavaModelException {

 	IJavaElement[] packages= ((IPackageFragmentRoot)getParent()).getChildren();

@@ -269,13 +268,13 @@
 	return false;

 }

 /**

- * @see IPackageFragment

+ * @see IPackageFragment#isDefaultPackage()

  */

 public boolean isDefaultPackage() {

 	return this.getElementName().length() == 0;

 }

 /**

- * @see ISourceManipulation

+ * @see ISourceManipulation#move(IJavaElement, IJavaElement, String, boolean, IProgressMonitor)

  */

 public void move(IJavaElement container, IJavaElement sibling, String rename, boolean force, IProgressMonitor monitor) throws JavaModelException {

 	if (container == null) {

@@ -306,7 +305,7 @@
 	}

 }

 /**

- * @see ISourceManipulation

+ * @see ISourceManipulation#rename(String, boolean, IProgressMonitor)

  */

 public void rename(String name, boolean force, IProgressMonitor monitor) throws JavaModelException {

 	if (name == null) {

@@ -327,7 +326,7 @@
 			fName);

 }

 /**

- * @private Debugging purposes

+ * Debugging purposes

  */

 protected void toStringChildren(int tab, StringBuffer buffer, Object info) {

 	if (tab == 0) {

@@ -335,7 +334,7 @@
 	}

 }

 /**

- * @private Debugging purposes

+ * Debugging purposes

  */

 protected void toStringInfo(int tab, StringBuffer buffer, Object info) {

 	buffer.append(this.tabString(tab));

diff --git a/model/org/eclipse/jdt/internal/core/SearchableEnvironment.java b/model/org/eclipse/jdt/internal/core/SearchableEnvironment.java
index ab9d4b8..cde7337 100644
--- a/model/org/eclipse/jdt/internal/core/SearchableEnvironment.java
+++ b/model/org/eclipse/jdt/internal/core/SearchableEnvironment.java
@@ -89,7 +89,7 @@
 	}

 

 	/**

-	 * @see SearchableBuilderEnvironment

+	 * @see ISearchableNameEnvironment#findPackages(char[], ISearchRequestor)

 	 */

 	public void findPackages(char[] prefix, ISearchRequestor requestor) {

 		this.nameLookup.seekPackageFragments(

@@ -99,7 +99,7 @@
 	}

 

 	/**

-	 * @see INameEnvironment

+	 * @see INameEnvironment#findType(char[][])

 	 */

 	public NameEnvironmentAnswer findType(char[][] compoundTypeName) {

 		if (compoundTypeName == null) return null;

@@ -120,7 +120,7 @@
 	}

 

 	/**

-	 * @see INameEnvironment

+	 * @see INameEnvironment#findType(char[], char[][])

 	 */

 	public NameEnvironmentAnswer findType(char[] name, char[][] packageName) {

 		if (name == null) return null;

@@ -131,7 +131,7 @@
 	}

 

 	/**

-	 * @see ISearchableNameEnvironment

+	 * @see ISearchableNameEnvironment#findTypes(char[], ISearchRequestor)

 	 */

 	public void findTypes(char[] prefix, final ISearchRequestor storage) {

 

@@ -270,7 +270,7 @@
 	}

 

 	/**

-	 * @see SearchableBuilderEnvironment

+	 * @see INameEnvironment#isPackage(char[][], char[])

 	 */

 	public boolean isPackage(char[][] parentPackageName, char[] subPackageName) {

 		if (subPackageName == null || CharOperation.contains('.', subPackageName))

@@ -285,9 +285,6 @@
 		return this.nameLookup.findPackageFragments(packageName, false) != null;

 	}

 

-	/**

-	 * @see SearchableBuilderEnvironment

-	 */

 	public boolean isTopLevelPackage(char[] packageName) {

 		return packageName != null &&

 			!CharOperation.contains('.', packageName) &&

diff --git a/model/org/eclipse/jdt/internal/core/SetClasspathOperation.java b/model/org/eclipse/jdt/internal/core/SetClasspathOperation.java
index 8d0b375..8c8af1f 100644
--- a/model/org/eclipse/jdt/internal/core/SetClasspathOperation.java
+++ b/model/org/eclipse/jdt/internal/core/SetClasspathOperation.java
@@ -24,7 +24,7 @@
 	IClasspathEntry[] oldResolvedPath;

 	IClasspathEntry[] newRawPath;

 	boolean canChangeResource;

-	boolean mayChangeProjectDependencies;

+	boolean needCycleCheck;

 	

 	IPath newOutputLocation;

 	public static final IClasspathEntry[] ReuseClasspath = new IClasspathEntry[0];

@@ -40,14 +40,14 @@
 		IPath newOutputLocation,

 		boolean canChangeResource,

 		boolean forceSave,

-		boolean mayChangeProjectDependencies) {

+		boolean needCycleCheck) {

 

 		super(new IJavaElement[] { project });

 		this.oldResolvedPath = oldResolvedPath;

 		this.newRawPath = newRawPath;

 		this.newOutputLocation = newOutputLocation;

 		this.canChangeResource = canChangeResource;

-		this.mayChangeProjectDependencies = mayChangeProjectDependencies;

+		this.needCycleCheck = needCycleCheck;

 	}

 

 	/**

@@ -424,7 +424,9 @@
 

 		// resolve new path (asking for marker creation if problems)

 		IClasspathEntry[] newResolvedPath = 

-			project.getResolvedClasspath(true,  this.canChangeResource);// also update cp markers

+			project.getResolvedClasspath(

+				true, // ignoreUnresolvedEntry

+				this.canChangeResource);// also update cp markers

 

 		if (this.oldResolvedPath != null) {

 			generateClasspathChangeDeltas(

@@ -436,7 +438,7 @@
 			updateAffectedProjects(project.getProject().getFullPath());

 		}

 		

-		if (this.mayChangeProjectDependencies){

+		if (this.needCycleCheck){

 			updateCycleMarkers(newResolvedPath);

 		}

 	}

@@ -464,7 +466,14 @@
 						IClasspathEntry entry = classpath[j];

 						if (entry.getEntryKind() == IClasspathEntry.CPE_PROJECT

 							&& entry.getPath().equals(prerequisiteProjectPath)) {

-							project.updateClassPath(this.fMonitor, this.canChangeResource, this.mayChangeProjectDependencies);

+							project.setRawClasspath(

+								project.getRawClasspath(), 

+								SetClasspathOperation.ReuseOutputLocation, 

+								this.fMonitor, 

+								this.canChangeResource, 

+								false, 

+								project.getResolvedClasspath(true), 

+								false); // no further cycle check

 							break;

 						}

 					}

@@ -545,7 +554,7 @@
 	protected void updateProjectReferencesIfNecessary() throws JavaModelException {

 		

 		if (!this.canChangeResource) return;

-		if (this.newRawPath == ReuseClasspath || !this.mayChangeProjectDependencies) return;

+		if (this.newRawPath == ReuseClasspath || !this.needCycleCheck) return;

 

 		JavaProject jproject = getProject();

 		String[] oldRequired = jproject.getRequiredProjectNames();

diff --git a/model/org/eclipse/jdt/internal/core/SourceMapper.java b/model/org/eclipse/jdt/internal/core/SourceMapper.java
index 75eba32..73837a5 100644
--- a/model/org/eclipse/jdt/internal/core/SourceMapper.java
+++ b/model/org/eclipse/jdt/internal/core/SourceMapper.java
@@ -33,8 +33,7 @@
  * with children in a binary type. A SourceMapper is associated

  * with a JarPackageFragment by an AttachSourceOperation.

  *

- * @see AttachSourceOperation

- * @see JarPackageFragment

+ * @see org.eclipse.jdt.internal.core.JarPackageFragment

  */

 public class SourceMapper

 	extends ReferenceInfoAdapter

diff --git a/model/org/eclipse/jdt/internal/core/SourceRefElementInfo.java b/model/org/eclipse/jdt/internal/core/SourceRefElementInfo.java
index 83d7fdf..23a0363 100644
--- a/model/org/eclipse/jdt/internal/core/SourceRefElementInfo.java
+++ b/model/org/eclipse/jdt/internal/core/SourceRefElementInfo.java
@@ -17,17 +17,17 @@
 	setIsStructureKnown(true);

 }

 /**

- * @see ISourceType

- * @see ISourceMethod

- * @see ISourceField

+ * @see org.eclipse.jdt.internal.compiler.env.ISourceType#getDeclarationSourceEnd()

+ * @see org.eclipse.jdt.internal.compiler.env.ISourceMethod#getDeclarationSourceEnd()

+ * @see org.eclipse.jdt.internal.compiler.env.ISourceField#getDeclarationSourceEnd()

  */

 public int getDeclarationSourceEnd() {

 	return fSourceRangeEnd;

 }

 /**

- * @see ISourceType

- * @see ISourceMethod

- * @see ISourceField

+ * @see org.eclipse.jdt.internal.compiler.env.ISourceType#getDeclarationSourceStart()

+ * @see org.eclipse.jdt.internal.compiler.env.ISourceMethod#getDeclarationSourceStart()

+ * @see org.eclipse.jdt.internal.compiler.env.ISourceField#getDeclarationSourceStart()

  */

 public int getDeclarationSourceStart() {

 	return fSourceRangeStart;

diff --git a/model/org/eclipse/jdt/internal/core/SourceType.java b/model/org/eclipse/jdt/internal/core/SourceType.java
index c002bc9..25ea96d 100644
--- a/model/org/eclipse/jdt/internal/core/SourceType.java
+++ b/model/org/eclipse/jdt/internal/core/SourceType.java
@@ -54,7 +54,7 @@
 		if ("".equals(encoding)) encoding = null; //$NON-NLS-1$

 		

 		char[] prefix = CharOperation.concat(source.substring(0, insertion).toCharArray(), new char[]{'{'});

-		char[] suffix = CharOperation.concat(source.substring(insertion).toCharArray(), new char[]{'}'});

+		char[] suffix = CharOperation.concat(new char[]{'}'}, source.substring(insertion).toCharArray());

 		char[] fakeSource = CharOperation.concat(prefix, snippet, suffix);

 		

 		BasicCompilationUnit cu = 

diff --git a/model/org/eclipse/jdt/internal/core/TypeConverter.java b/model/org/eclipse/jdt/internal/core/TypeConverter.java
index 884454a..bf51604 100644
--- a/model/org/eclipse/jdt/internal/core/TypeConverter.java
+++ b/model/org/eclipse/jdt/internal/core/TypeConverter.java
@@ -3,9 +3,6 @@
  * (c) Copyright IBM Corp. 2000, 2001.
  * All Rights Reserved.
  */
-/**
- * Converter from a type to an AST type declaration.
- */
 import org.eclipse.jdt.core.*;
 import org.eclipse.jdt.internal.compiler.CompilationResult;
 import org.eclipse.jdt.internal.compiler.ast.*;
@@ -14,8 +11,7 @@
 import org.eclipse.jdt.internal.compiler.util.CharOperation;
 
 /**
- * @version 	1.0
- * @author
+ * Converter from a type to an AST type declaration.
  */
 public class TypeConverter {
 	
diff --git a/model/org/eclipse/jdt/internal/core/Util.java b/model/org/eclipse/jdt/internal/core/Util.java
index ea307b9..60115bb 100644
--- a/model/org/eclipse/jdt/internal/core/Util.java
+++ b/model/org/eclipse/jdt/internal/core/Util.java
@@ -9,6 +9,7 @@
 

 import org.eclipse.core.runtime.IPath;

 import org.eclipse.core.runtime.IStatus;

+import org.eclipse.core.runtime.Status;

 import org.eclipse.jdt.core.*;

 import org.eclipse.jdt.internal.compiler.util.CharOperation;

 import org.eclipse.jdt.internal.core.util.CharArrayBuffer;

@@ -165,7 +166,7 @@
 }

 	/**

 	 * Concatenate two strings with a char in between.

-	 * @see concat(String, String)

+	 * @see #concat(String, String)

 	 */

 	public static String concat(String s1, char c, String s2) {

 		if (s1 == null) s1 = "null"; //$NON-NLS-1$

@@ -201,7 +202,7 @@
 

 	/**

 	 * Concatenate three strings.

-	 * @see concat(String, String)

+	 * @see #concat(String, String)

 	 */

 	public static String concat(String s1, String s2, String s3) {

 		if (s1 == null) s1 = "null"; //$NON-NLS-1$

@@ -534,21 +535,19 @@
 		return JavaConventions.validateIdentifier(folderName).getSeverity() != IStatus.ERROR;

 	}	

 

-/**

- * Add entry into the workspace log file

- */

-public static void log(String message){

-	JavaCore.getPlugin().getLog().log(

-		new JavaModelStatus(IStatus.ERROR, message));

-}	

-

-/**

- * Add entry into the workspace log file

- */

-public static void log(Throwable e){

-	JavaCore.getPlugin().getLog().log(

-		new JavaModelStatus(IStatus.ERROR, e));

-}

+	/*

+	 * Add a log entry

+	 */

+	public static void log(Throwable e, String message) {

+		IStatus status= new Status(

+			IStatus.ERROR, 

+			JavaCore.getPlugin().getDescriptor().getUniqueIdentifier(), 

+			IStatus.ERROR, 

+			message, 

+			e); 

+		JavaCore.getPlugin().getLog().log(status);

+	}	

+	

 /**

  * Normalizes the cariage returns in the given text.

  * They are all changed  to use the given buffer's line sepatator.

diff --git a/model/org/eclipse/jdt/internal/core/builder/JavaBuilder.java b/model/org/eclipse/jdt/internal/core/builder/JavaBuilder.java
index a07e501..4d5047e 100644
--- a/model/org/eclipse/jdt/internal/core/builder/JavaBuilder.java
+++ b/model/org/eclipse/jdt/internal/core/builder/JavaBuilder.java
@@ -108,10 +108,7 @@
 		}

 		ok = true;

 	} catch (CoreException e) {

-		if (DEBUG){

-			System.out.println("Builder handling CoreException"); //$NON-NLS-1$

-			 e.printStackTrace();

-		}		

+		Util.log(e, "JavaBuilder handling CoreException"); //$NON-NLS-1$

 		try {

 			IMarker marker = currentProject.createMarker(ProblemMarkerTag);

 			marker.setAttribute(IMarker.MESSAGE, Util.bind("build.inconsistentProject")); //$NON-NLS-1$

@@ -120,10 +117,7 @@
 			throw e;

 		}

 	} catch (ImageBuilderInternalException e) {

-		if (DEBUG){

-			System.out.println("Builder handling ImageBuilderInternalException"); //$NON-NLS-1$

-			 e.printStackTrace();

-		}

+		Util.log(e, "JavaBuilder handling ImageBuilderInternalException"); //$NON-NLS-1$

 		try {

 			IMarker marker = currentProject.createMarker(ProblemMarkerTag);

 			marker.setAttribute(IMarker.MESSAGE, Util.bind("build.inconsistentProject")); //$NON-NLS-1$

@@ -132,18 +126,12 @@
 			throw e.getThrowable();

 		}

 	} catch (IncompleteClassPathException e) {

-		if (DEBUG){

-			System.out.println("Builder handling IncompleteClassPathException"); //$NON-NLS-1$

-			 e.printStackTrace();

-		}

+		Util.log(e, "JavaBuilder handling IncompleteClassPathException"); //$NON-NLS-1$

 		IMarker marker = currentProject.createMarker(ProblemMarkerTag);

 		marker.setAttribute(IMarker.MESSAGE, Util.bind("build.incompleteClassPath", e.missingClassFile)); //$NON-NLS-1$

 		marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_ERROR);

 	} catch (MissingSourceFileException e) {

-		if (DEBUG){

-			System.out.println("Builder handling MissingSourceFileException"); //$NON-NLS-1$

-			 e.printStackTrace();

-		}

+		Util.log(e, "JavaBuilder handling MissingSourceFileException"); //$NON-NLS-1$

 		removeProblemsFor(currentProject); // make this the only problem for this project

 		IMarker marker = currentProject.createMarker(ProblemMarkerTag);

 		marker.setAttribute(IMarker.MESSAGE, Util.bind("build.missingSourceFile", e.missingSourceFile)); //$NON-NLS-1$

diff --git a/model/org/eclipse/jdt/internal/core/eval/EvaluationContextWrapper.java b/model/org/eclipse/jdt/internal/core/eval/EvaluationContextWrapper.java
index c3776cd..d6d2c34 100644
--- a/model/org/eclipse/jdt/internal/core/eval/EvaluationContextWrapper.java
+++ b/model/org/eclipse/jdt/internal/core/eval/EvaluationContextWrapper.java
Binary files differ
diff --git a/model/org/eclipse/jdt/internal/core/hierarchy/HierarchyBinaryType.java b/model/org/eclipse/jdt/internal/core/hierarchy/HierarchyBinaryType.java
index 94292e5..60d0b67 100644
--- a/model/org/eclipse/jdt/internal/core/hierarchy/HierarchyBinaryType.java
+++ b/model/org/eclipse/jdt/internal/core/hierarchy/HierarchyBinaryType.java
@@ -4,8 +4,12 @@
  * (c) Copyright IBM Corp. 2000, 2001.

  * All Rights Reserved.

  */

-import org.eclipse.jdt.internal.compiler.env.*;

-import org.eclipse.jdt.internal.compiler.util.*;

+import org.eclipse.jdt.internal.compiler.env.IBinaryField;

+import org.eclipse.jdt.internal.compiler.env.IBinaryMethod;

+import org.eclipse.jdt.internal.compiler.env.IBinaryNestedType;

+import org.eclipse.jdt.internal.compiler.env.IBinaryType;

+import org.eclipse.jdt.internal.compiler.env.IConstants;

+import org.eclipse.jdt.internal.compiler.util.CharOperation;

 import org.eclipse.jdt.internal.core.search.indexing.IIndexConstants;

 

 public class HierarchyBinaryType implements IBinaryType {

@@ -189,7 +193,7 @@
 }

 

 /**

- * @see org.eclipse.jdt.internal.compiler.env.IBinaryType.

+ * @see org.eclipse.jdt.internal.compiler.env.IBinaryType

  */

 public char[] sourceFileName() {

 	return null;

diff --git a/model/org/eclipse/jdt/internal/core/jdom/AbstractDOMBuilder.java b/model/org/eclipse/jdt/internal/core/jdom/AbstractDOMBuilder.java
index 4f4b2d1..42d4f69 100644
--- a/model/org/eclipse/jdt/internal/core/jdom/AbstractDOMBuilder.java
+++ b/model/org/eclipse/jdt/internal/core/jdom/AbstractDOMBuilder.java
@@ -76,7 +76,7 @@
  *

  * <p>A line separator might corresponds to several characters in the source.

  *

- * @see IDocumentElementRequestor#acceptLineSeparatorPositions

+ * @see IDocumentElementRequestor#acceptLineSeparatorPositions(int[])

  */

 public void acceptLineSeparatorPositions(int[] positions) {

 	if (positions != null) {

@@ -128,13 +128,13 @@
 	}

 }

 /**

- * @see IDOMFactory#createCompilationUnit(String)

+ * @see IDOMFactory#createCompilationUnit(String, String)

  */

 public IDOMCompilationUnit createCompilationUnit(char[] contents, char[] name) {

 	return createCompilationUnit(new CompilationUnit(contents, name));

 }

 /**

- * @see IDOMFactory#createCompilationUnit(String)

+ * @see IDOMFactory#createCompilationUnit(String, String)

  */

 public IDOMCompilationUnit createCompilationUnit(ICompilationUnit compilationUnit) {

 	if (fAbort) {

@@ -144,7 +144,7 @@
 	return (IDOMCompilationUnit)fNode;

 }

 /**

- * @see IDocumentElementRequestor#enterClass

+ * @see IDocumentElementRequestor#enterClass(int, int[], int, int, int, char[], int, int, char[], int, int, char[][], int[], int[], int)

  */

 public void enterCompilationUnit() {

  	if (fBuildingCU) {

@@ -156,7 +156,7 @@
  * Finishes the configuration of the compilation unit DOM object which

  * was created by a previous enterCompilationUnit call.

  *

- * @see IDocumentElementRequestor#exitCompilationUnit

+ * @see IDocumentElementRequestor#exitCompilationUnit(int)

  */

 public void exitCompilationUnit(int declarationEnd) {

 	DOMCompilationUnit cu = (DOMCompilationUnit) fStack.pop();

@@ -178,7 +178,7 @@
 	fNode = type;

 }

 /**

- * @see ILineSeparatorFinder

+ * @see ILineStartFinder#getLineStart(int)

  */

 public int getLineStart(int position) {

 	int lineSeparatorCount = fLineStartPositions.length;

diff --git a/model/org/eclipse/jdt/internal/core/jdom/CompilationUnit.java b/model/org/eclipse/jdt/internal/core/jdom/CompilationUnit.java
index cc24ead..8b86758 100644
--- a/model/org/eclipse/jdt/internal/core/jdom/CompilationUnit.java
+++ b/model/org/eclipse/jdt/internal/core/jdom/CompilationUnit.java
@@ -9,9 +9,9 @@
 import java.io.*;

 

 /**

- * Implements a very simple version of the ICompilationUnit

+ * Implements a very simple version of the ICompilationUnit.

  *

- * <p>Please do not use outside of jdom.

+ * <p>Please do not use outside of jdom.</p>

  */

 public class CompilationUnit implements ICompilationUnit {

 	protected char[] fContents;

diff --git a/model/org/eclipse/jdt/internal/core/jdom/DOMBuilder.java b/model/org/eclipse/jdt/internal/core/jdom/DOMBuilder.java
index 2cadb4e..aae5dee 100644
--- a/model/org/eclipse/jdt/internal/core/jdom/DOMBuilder.java
+++ b/model/org/eclipse/jdt/internal/core/jdom/DOMBuilder.java
@@ -51,7 +51,7 @@
  */

 public DOMBuilder() {}

 /**

- * @see IDocumentElementRequestor.acceptImport(...);

+ * @see IDocumentElementRequestor#acceptImport(int declarationStart, int declarationEnd, int[] javaDocPositions, char[] name, int nameStartPosition, boolean onDemand)

  */

 public void acceptImport(int declarationStart, int declarationEnd, int[] javaDocPositions, char[] name, 

 	int nameStart, boolean onDemand) {

@@ -68,7 +68,7 @@
 	}

 }

 /**

- * @see IDocumentElementRequestor.acceptInitializer(...);

+ * @see IDocumentElementRequestor#acceptInitializer(int declarationStart, int declarationEnd, int[] javaDocPositions, int modifiers, int modifiersStart, int bodyStart, int bodyEnd)

  */

 public void acceptInitializer(int declarationStart, int declarationEnd, int[] javaDocPositions, int modifiers, 

 	int modifiersStart, int bodyStart, int bodyEnd) {

@@ -93,7 +93,7 @@
 	}

 }

 /**

- * @see IDocumentElementRequestor.acceptPackage(...);

+ * @see IDocumentElementRequestor#acceptPackage(int declarationStart, int declarationEnd, int[] javaDocPositions, char[] name, int nameStartPosition)

  */

 public void acceptPackage(int declarationStart, int declarationEnd, int[] javaDocPositions, char[] name, 

 	int nameStartPosition) {

@@ -139,7 +139,7 @@
 	return new DOMCompilationUnit();

 }

 /**

- * @see IDOMFactory#createCompilationUnit(String)

+ * @see IDOMFactory#createCompilationUnit(String, String)

  */

 public IDOMCompilationUnit createCompilationUnit(ICompilationUnit compilationUnit) {

 	initializeBuild(compilationUnit.getContents(), true, true, false);

@@ -147,7 +147,7 @@
 	return super.createCompilationUnit(compilationUnit);

 }

 /**

- * @see IDOMFactory#createField(char[])

+ * @see IDOMFactory#createField(String)

  */

 public IDOMField createField(char[] sourceCode) {

 	initializeBuild(sourceCode, false, false, true);

@@ -195,7 +195,7 @@
 	return new DOMImport();

 }

 /**

- * @see IDOMFactory#createImport(char[])

+ * @see IDOMFactory#createImport(String)

  */

 public IDOMImport createImport(char[] sourceCode) {

 	initializeBuild(sourceCode, false, false, true);

@@ -209,7 +209,7 @@
 /**

  * Creates an INITIALIZER document fragment from the given source.

  *

- * @see IDOMFactory#createInitializer(char[])

+ * @see IDOMFactory#createInitializer(String)

  */

 public IDOMInitializer createInitializer(char[] sourceCode) {

 	initializeBuild(sourceCode, false, false, true);

@@ -221,7 +221,7 @@
 	return (IDOMInitializer)fNode;

 }

 /**

- * @see IDOMFactory#createMethod(char[])

+ * @see IDOMFactory#createMethod(String)

  */

 public IDOMMethod createMethod(char[] sourceCode) {

 	initializeBuild(sourceCode, false, false, true);

@@ -239,7 +239,7 @@
 	return new DOMPackage();

 }

 /**

- * @see IDOMFactory#createPackage(char[])

+ * @see IDOMFactory#createPackage(String)

  */

 public IDOMPackage createPackage(char[] sourceCode) {

 	initializeBuild(sourceCode, false, false, true);

@@ -251,7 +251,7 @@
 	return (IDOMPackage)fNode;

 }

 /**

- * @see IDOMFactory#createType(char[])

+ * @see IDOMFactory#createType(String)

  */

 public IDOMType createType(char[] sourceCode) {

 	initializeBuild(sourceCode, false, true, false);

@@ -353,7 +353,22 @@
 	fStack.push(fNode);

 }

 /**

- * @see IDocumentElementRequestor.enterClass(...);

+ * @see IDocumentElementRequestor#enterClass(

+	int declarationStart,

+	int[] javaDocPositions,

+	int modifiers,

+	int modifiersStart,

+	int classStart, 

+	char[] name,

+	int nameStart,

+	int nameEnd,

+	char[] superclass,

+	int superclassStart,

+	int superclassEnd,

+	char[][] superinterfaces,

+	int[] superinterfaceStarts,

+	int[] superinterfaceEnds,

+	int bodyStart)

  */

 public void enterClass(int declarationStart, int[] javaDocPositions, int modifiers, int modifiersStart, int keywordStart, 

 	char[] name, int nameStart, int nameEnd, char[] superclass, int superclassStart, 

@@ -366,7 +381,25 @@
 		superinterfaceEnds, bodyStart, true);

 }

 /**

- * @see IDocumentElementRequestor.enterConstructor(...);

+ * @see IDocumentElementRequestor#enterConstructor(

+	int declarationStart,

+	int[] javaDocPositions,	

+	int modifiers,

+	int modifiersStart, 

+	char[] name,

+	int nameStart,

+	int nameEnd,

+	char[][] parameterTypes,

+	int [] parameterTypeStarts,

+	int [] parameterTypeEnds,			

+	char[][] parameterNames,

+	int [] parameterNameStarts,

+	int [] parameterNameEnds,

+	int parametersEnd,	

+	char[][] exceptionTypes,

+	int [] exceptionTypeStarts,

+	int [] exceptionTypeEnds,

+	int bodyStart)

  */

 public void enterConstructor(int declarationStart, int[] javaDocPositions, int modifiers, int modifiersStart, 

 	char[] name, int nameStart, int nameEnd, char[][] parameterTypes, 

@@ -390,7 +423,20 @@
 		exceptionTypeEnds, bodyStart,true);

 }

 /**

- * @see IDocumentElementRequestor.enterField(...);

+ * @see IDocumentElementRequestor#enterField(

+	int declarationStart,

+	int[] javaDocPositions,	

+	int modifiers,

+	int modifiersStart,

+	char[] type,

+	int typeStart,

+	int typeEnd,

+ 	int typeDimensionCount,

+	char[] name,

+	int nameStart,

+	int nameEnd,

+	int extendedTypeDimensionCount,

+	int extendedTypeDimensionEnd)

  */

 public void enterField(int declarationStart, int[] javaDocPositions, int modifiers, int modifiersStart, 

 	char[] type, int typeStart, int typeEnd, int typeDimensionCount, char[] name, 

@@ -426,7 +472,19 @@
 	fStack.push(fNode);

 }

 /**

- * @see IDocumentElementRequestor.enterInterface(...);

+ * @see IDocumentElementRequestor#enterInterface(

+	int declarationStart,

+	int[] javaDocPositions,	

+	int modifiers,

+	int modifiersStart,

+	int interfaceStart,

+	char[] name,

+	int nameStart,

+	int nameEnd,

+	char[][] superinterfaces,

+	int[] superinterfaceStarts,

+	int[] superinterfaceEnds,

+	int bodyStart)

  */

 public void enterInterface(int declarationStart, int[] javaDocPositions, int modifiers, int modifiersStart, int keywordStart,

 	char[] name, int nameStart, int nameEnd, char[][] superinterfaces, 

@@ -437,7 +495,31 @@
 		superinterfaceStarts, superinterfaceEnds, bodyStart, false);

 }

 /**

- * @see IDocumentElementRequestor.enterMethod(...);

+ * @see IDocumentElementRequestor#enterMethod(

+	int declarationStart,

+	int[] javaDocPositions,	

+	int modifiers,

+	int modifiersStart, 

+	char[] returnType,

+	int returnTypeStart,

+	int returnTypeEnd,

+ 	int returnTypeDimensionCount,

+	char[] name,

+	int nameStart,

+	int nameEnd,

+	char[][] parameterTypes,

+	int [] parameterTypeStarts,

+	int [] parameterTypeEnds,			

+	char[][] parameterNames,

+	int [] parameterNameStarts,

+	int [] parameterNameEnds,

+	int parametersEnd,

+	int extendedReturnTypeDimensionCount,

+	int extendedReturnTypeDimensionEnd,	

+	char[][] exceptionTypes,

+	int [] exceptionTypeStarts,

+	int [] exceptionTypeEnds,

+	int bodyStart)

  */

 public void enterMethod(int declarationStart, int[] javaDocPositions, int modifiers, int modifiersStart, 

 	char[] returnType, int returnTypeStart, int returnTypeEnd, int returnTypeDimensionCount, 

@@ -454,9 +536,7 @@
 		extendedReturnTypeDimensionEnd, exceptionTypes, exceptionTypeStarts, 

 		exceptionTypeEnds, bodyStart,false);

 }

-/**

- * @see IDocumentElementRequestor.enterType(...);

- */

+

 protected void enterType(int declarationStart, int[] javaDocPositions, 

 	int modifiers, int modifiersStart, int keywordStart, char[] name, 

 	int nameStart, int nameEnd, char[] superclass, int superclassStart, 

@@ -538,7 +618,7 @@
  * Finishes the configuration of the class DOM object which

  * was created by a previous enterClass call.

  *

- * @see IDocumentElementRequestor.exitClass(...);

+ * @see IDocumentElementRequestor#exitClass(int, int)

  */

 public void exitClass(int bodyEnd, int declarationEnd) {

 	exitType(bodyEnd, declarationEnd);

@@ -547,7 +627,7 @@
  * Finishes the configuration of the method DOM object which

  * was created by a previous enterConstructor call.

  *

- * @see IDocumentElementRequestor.exitConstructor(...);

+ * @see IDocumentElementRequestor#exitConstructor(int, int)

  */

 public void exitConstructor(int bodyEnd, int declarationEnd) {

 	exitAbstractMethod(bodyEnd, declarationEnd);

@@ -556,7 +636,7 @@
  * Finishes the configuration of the field DOM object which

  * was created by a previous enterField call.

  *

- * @see IDocumentElementRequestor.exitField(...);

+ * @see IDocumentElementRequestor#exitField(int, int)

  */

 public void exitField(int bodyEnd, int declarationEnd) {

 	DOMField field = (DOMField)fStack.pop();

@@ -583,7 +663,7 @@
  * Finishes the configuration of the interface DOM object which

  * was created by a previous enterInterface call.

  *

- * @see IDocumentElementRequestor.exitInterface(...);

+ * @see IDocumentElementRequestor#exitInterface(int, int)

  */

 public void exitInterface(int bodyEnd, int declarationEnd) {

 	exitType(bodyEnd, declarationEnd);

@@ -592,7 +672,7 @@
  * Finishes the configuration of the method DOM object which

  * was created by a previous enterMethod call.

  *

- * @see IDocumentElementRequestor.exitMethod(...);

+ * @see IDocumentElementRequestor#exitMethod(int, int)

  */

 public void exitMethod(int bodyEnd, int declarationEnd) {

 	exitAbstractMethod(bodyEnd, declarationEnd);

diff --git a/model/org/eclipse/jdt/internal/core/jdom/ILineStartFinder.java b/model/org/eclipse/jdt/internal/core/jdom/ILineStartFinder.java
index e3b2d87..a159218 100644
--- a/model/org/eclipse/jdt/internal/core/jdom/ILineStartFinder.java
+++ b/model/org/eclipse/jdt/internal/core/jdom/ILineStartFinder.java
@@ -9,7 +9,7 @@
  * The <coe>ILineSeparatorFinder</code> finds previous and next line separators

  * in source.

  */

-interface ILineStartFinder {

+public interface ILineStartFinder {

 /**

  * Returns the position of the start of the line at or before the given source position.

  *

diff --git a/model/org/eclipse/jdt/internal/core/jdom/SimpleDOMBuilder.java b/model/org/eclipse/jdt/internal/core/jdom/SimpleDOMBuilder.java
index 06327ee..783024d 100644
--- a/model/org/eclipse/jdt/internal/core/jdom/SimpleDOMBuilder.java
+++ b/model/org/eclipse/jdt/internal/core/jdom/SimpleDOMBuilder.java
@@ -22,9 +22,6 @@
  */

 public class SimpleDOMBuilder extends AbstractDOMBuilder implements ISourceElementRequestor {

 

-/**

-

- */

 public void acceptImport(int declarationStart, int declarationEnd, char[] name, boolean onDemand) {

 	int[] sourceRange = {declarationStart, declarationEnd};

 	String importName = new String(name);

@@ -35,21 +32,19 @@
 	fNode= new DOMImport(fDocument, sourceRange, importName, onDemand);

 	addChild(fNode);	

 }

-/**

- */

 public void acceptPackage(int declarationStart, int declarationEnd, char[] name) {

 	int[] sourceRange= new int[] {declarationStart, declarationEnd};

 	fNode= new DOMPackage(fDocument, sourceRange, CharArrayOps.charToString(name));

 	addChild(fNode);	

 }

 /**

- * @see IDOMFactory#createCompilationUnit(String)

+ * @see IDOMFactory#createCompilationUnit(String, String)

  */

 public IDOMCompilationUnit createCompilationUnit(String sourceCode, String name) {

 	return createCompilationUnit(sourceCode.toCharArray(), name.toCharArray());

 }

 /**

- * @see IDOMFactory#createCompilationUnit(String)

+ * @see IDOMFactory#createCompilationUnit(String, String)

  */

 public IDOMCompilationUnit createCompilationUnit(ICompilationUnit compilationUnit) {

 	initializeBuild(compilationUnit.getContents(), true, true);

@@ -157,7 +152,7 @@
  * Finishes the configuration of the class DOM object which

  * was created by a previous enterClass call.

  *

- * @see ISourceElementRequestor.exitClass(...);

+ * @see ISourceElementRequestor#exitClass(int)

  */

 public void exitClass(int declarationEnd) {

 	exitType(declarationEnd);

@@ -166,7 +161,7 @@
  * Finishes the configuration of the method DOM object which

  * was created by a previous enterConstructor call.

  *

- * @see ISourceElementRequestor.exitConstructor(...);

+ * @see ISourceElementRequestor#exitConstructor(int)

  */

 public void exitConstructor(int declarationEnd) {

 	exitMember(declarationEnd);

diff --git a/model/org/eclipse/jdt/internal/core/util/ClassFileReader.java b/model/org/eclipse/jdt/internal/core/util/ClassFileReader.java
index 0e115f0..b9a918e 100644
--- a/model/org/eclipse/jdt/internal/core/util/ClassFileReader.java
+++ b/model/org/eclipse/jdt/internal/core/util/ClassFileReader.java
@@ -63,7 +63,10 @@
 	 * @param classFileBytes the raw bytes of the .class file
 	 * @param decodingFlags the decoding flags
 	 * 
-	 * @see org.eclipse.jdt.core.util.DecodingFlag
+	 * @see IClassFileReader#ALL
+	 * @see IClassFileReader#CLASSFILE_ATTRIBUTES
+	 * @see IClassFileReader#CONSTANT_POOL
+	 * @see IClassFileReader#FIELD_INFOS
 	 */
 	public ClassFileReader(byte[] classFileBytes, int decodingFlags) throws ClassFormatException {
 	
@@ -319,7 +322,7 @@
 	}
 
 	/**
-	 * @see IClassFileReader#getName()
+	 * @see IClassFileReader#getClassName()
 	 */
 	public char[] getClassName() {
 		return this.className;
diff --git a/model/org/eclipse/jdt/internal/core/util/CodeAttribute.java b/model/org/eclipse/jdt/internal/core/util/CodeAttribute.java
index b90910f..62bedb1 100644
--- a/model/org/eclipse/jdt/internal/core/util/CodeAttribute.java
+++ b/model/org/eclipse/jdt/internal/core/util/CodeAttribute.java
@@ -131,7 +131,7 @@
 	}
 
 	/**
-	 * @see ICodeAttribute#traverseBytecodes(Writer, String, int, IBytecodeVisitor)
+	 * @see ICodeAttribute#traverse(IBytecodeVisitor visitor)
 	 */
 	public void traverse(IBytecodeVisitor visitor) throws ClassFormatException {
 		int pc = this.codeOffset;
diff --git a/model/org/eclipse/jdt/internal/core/util/ConstantValueAttribute.java b/model/org/eclipse/jdt/internal/core/util/ConstantValueAttribute.java
index fc5d07c..ae18762 100644
--- a/model/org/eclipse/jdt/internal/core/util/ConstantValueAttribute.java
+++ b/model/org/eclipse/jdt/internal/core/util/ConstantValueAttribute.java
@@ -47,7 +47,7 @@
 	}
 
 	/**
-	 * @see IClassFileAttribute#getAttributeName()
+	 * @see org.eclipse.jdt.core.util.IClassFileAttribute#getAttributeName()
 	 */
 	public char[] getAttributeName() {
 		return IAttributeNamesConstants.CONSTANT_VALUE;
diff --git a/model/org/eclipse/jdt/internal/core/util/DefaultBytecodeVisitor.java b/model/org/eclipse/jdt/internal/core/util/DefaultBytecodeVisitor.java
index e90c090..447e592 100644
--- a/model/org/eclipse/jdt/internal/core/util/DefaultBytecodeVisitor.java
+++ b/model/org/eclipse/jdt/internal/core/util/DefaultBytecodeVisitor.java
@@ -2502,7 +2502,7 @@
 	}
 
 	/**
-	 * @see IBytecodeVisitor#_multianewarray(int, int, int, IConstantPoolConstant)
+	 * @see IBytecodeVisitor#_multianewarray(int, int, int, IConstantPoolEntry)
 	 */
 	public void _multianewarray(
 		int pc,
@@ -2523,7 +2523,7 @@
 	}
 
 	/**
-	 * @see IBytecodeVisitor#_new(int, int, IConstantPoolConstant)
+	 * @see IBytecodeVisitor#_new(int, int, IConstantPoolEntry)
 	 */
 	public void _new(int pc, int index, IConstantPoolEntry constantClass) {
 		writeTabs();
@@ -2539,7 +2539,7 @@
 	}
 
 	/**
-	 * @see IBytecodeVisitor#_newarray(int)
+	 * @see IBytecodeVisitor#_newarray(int, int)
 	 */
 	public void _newarray(int pc, int atype) {
 		writeTabs();
@@ -2715,7 +2715,7 @@
 	}
 
 	/**
-	 * @see IBytecodeVisitor#_tableswitch(int, int, int, int, int[][])
+	 * @see IBytecodeVisitor#_tableswitch(int, int, int, int, int[])
 	 */
 	public void _tableswitch(
 		int pc, 
diff --git a/model/org/eclipse/jdt/internal/core/util/ExceptionAttribute.java b/model/org/eclipse/jdt/internal/core/util/ExceptionAttribute.java
index 6200d95..16ae65c 100644
--- a/model/org/eclipse/jdt/internal/core/util/ExceptionAttribute.java
+++ b/model/org/eclipse/jdt/internal/core/util/ExceptionAttribute.java
@@ -70,14 +70,14 @@
 	}
 
 	/**
-	 * @see IExceptionAttribute#getExceptionNumber()
+	 * @see IExceptionAttribute#getExceptionsNumber()
 	 */
 	public int getExceptionsNumber() {
 		return this.exceptionsNumber;
 	}
 
 	/**
-	 * @see IClassFileAttribute#getAttributeName()
+	 * @see org.eclipse.jdt.core.util.IClassFileAttribute#getAttributeName()
 	 */
 	public char[] getAttributeName() {
 		return IAttributeNamesConstants.EXCEPTIONS;
diff --git a/model/org/eclipse/jdt/internal/core/util/ExceptionTableEntry.java b/model/org/eclipse/jdt/internal/core/util/ExceptionTableEntry.java
index 56ecdd5..c3fc873 100644
--- a/model/org/eclipse/jdt/internal/core/util/ExceptionTableEntry.java
+++ b/model/org/eclipse/jdt/internal/core/util/ExceptionTableEntry.java
@@ -1,7 +1,13 @@
-/*
- * (c) Copyright 2001 MyCorporation.
- * All Rights Reserved.
- */
+/**********************************************************************
+Copyright (c) 2002 IBM Corp. and others.
+All rights reserved.   This program and the accompanying materials
+are made available under the terms of the Common Public License v0.5
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/cpl-v05.html

+Contributors:
+     IBM Corporation - initial API and implementation
+**********************************************************************/
 package org.eclipse.jdt.internal.core.util;
 
 import org.eclipse.jdt.core.util.ClassFormatException;
@@ -11,8 +17,8 @@
 import org.eclipse.jdt.core.util.IExceptionTableEntry;
 
 /**
- * @version 	1.0
- * @author
+ * This class describes an entry in the exception table attribute according
+ * to the JVM specifications.
  */
 public class ExceptionTableEntry
 	extends ClassFileStruct
diff --git a/model/org/eclipse/jdt/internal/core/util/InnerClassesAttributeEntry.java b/model/org/eclipse/jdt/internal/core/util/InnerClassesAttributeEntry.java
index d46b968..d8e0814 100644
--- a/model/org/eclipse/jdt/internal/core/util/InnerClassesAttributeEntry.java
+++ b/model/org/eclipse/jdt/internal/core/util/InnerClassesAttributeEntry.java
@@ -62,49 +62,49 @@
 	}
 
 	/**
-	 * @see IInnerClassesAttribute#getAccessFlags()
+	 * @see IInnerClassesAttributeEntry#getAccessFlags()
 	 */
 	public int getAccessFlags() {
 		return this.accessFlags;
 	}
 
 	/**
-	 * @see IInnerClassesAttribute#getInnerClassName()
+	 * @see IInnerClassesAttributeEntry#getInnerClassName()
 	 */
 	public char[] getInnerClassName() {
 		return this.innerClassName;
 	}
 
 	/**
-	 * @see IInnerClassesAttribute#getInnerClassNameIndex()
+	 * @see IInnerClassesAttributeEntry#getInnerClassNameIndex()
 	 */
 	public int getInnerClassNameIndex() {
 		return this.innerClassNameIndex;
 	}
 
 	/**
-	 * @see IInnerClassesAttribute#getInnerName()
+	 * @see IInnerClassesAttributeEntry#getInnerName()
 	 */
 	public char[] getInnerName() {
 		return this.innerName;
 	}
 
 	/**
-	 * @see IInnerClassesAttribute#getInnerNameIndex()
+	 * @see IInnerClassesAttributeEntry#getInnerNameIndex()
 	 */
 	public int getInnerNameIndex() {
 		return this.innerNameIndex;
 	}
 
 	/**
-	 * @see IInnerClassesAttribute#getOuterClassName()
+	 * @see IInnerClassesAttributeEntry#getOuterClassName()
 	 */
 	public char[] getOuterClassName() {
 		return this.outerClassName;
 	}
 
 	/**
-	 * @see IInnerClassesAttribute#getOuterClassNameIndex()
+	 * @see IInnerClassesAttributeEntry#getOuterClassNameIndex()
 	 */
 	public int getOuterClassNameIndex() {
 		return this.outerClassNameIndex;
diff --git a/model/org/eclipse/jdt/internal/core/util/LRUCache.java b/model/org/eclipse/jdt/internal/core/util/LRUCache.java
index b6b72e4..07b23c1 100644
--- a/model/org/eclipse/jdt/internal/core/util/LRUCache.java
+++ b/model/org/eclipse/jdt/internal/core/util/LRUCache.java
@@ -20,8 +20,7 @@
  * <p>This implementation is NOT thread-safe.  Synchronization wrappers would

  * have to be added to ensure atomic insertions and deletions from the cache.

  *

- * @see LRUCacheEntry

- * @see ILRUCacheable

+ * @see org.eclipse.jdt.internal.core.util.ILRUCacheable

  */

 public class LRUCache implements Cloneable {

 

diff --git a/model/org/eclipse/jdt/internal/core/util/LineNumberAttribute.java b/model/org/eclipse/jdt/internal/core/util/LineNumberAttribute.java
index b1b7fd2..032781d 100644
--- a/model/org/eclipse/jdt/internal/core/util/LineNumberAttribute.java
+++ b/model/org/eclipse/jdt/internal/core/util/LineNumberAttribute.java
@@ -55,7 +55,7 @@
 	}
 
 	/**
-	 * @see IClassFileAttribute#getAttributeName()
+	 * @see org.eclipse.jdt.core.util.IClassFileAttribute#getAttributeName()
 	 */
 	public char[] getAttributeName() {
 		return IAttributeNamesConstants.LINE_NUMBER;
diff --git a/model/org/eclipse/jdt/internal/core/util/LocalVariableAttribute.java b/model/org/eclipse/jdt/internal/core/util/LocalVariableAttribute.java
index a50a334..2a7f83a 100644
--- a/model/org/eclipse/jdt/internal/core/util/LocalVariableAttribute.java
+++ b/model/org/eclipse/jdt/internal/core/util/LocalVariableAttribute.java
@@ -55,7 +55,7 @@
 	}
 
 	/**
-	 * @see IClassFileAttribute#getAttributeName()
+	 * @see org.eclipse.jdt.core.util.IClassFileAttribute#getAttributeName()
 	 */
 	public char[] getAttributeName() {
 		return IAttributeNamesConstants.LOCAL_VARIABLE;
diff --git a/model/org/eclipse/jdt/internal/core/util/SourceFileAttribute.java b/model/org/eclipse/jdt/internal/core/util/SourceFileAttribute.java
index b0b2cc9..ea438e3 100644
--- a/model/org/eclipse/jdt/internal/core/util/SourceFileAttribute.java
+++ b/model/org/eclipse/jdt/internal/core/util/SourceFileAttribute.java
@@ -50,7 +50,7 @@
 	}
 
 	/**
-	 * @see IClassFileAttribute#getAttributeName()
+	 * @see org.eclipse.jdt.core.util.IClassFileAttribute#getAttributeName()
 	 */
 	public char[] getAttributeName() {
 		return IAttributeNamesConstants.SOURCE;
diff --git a/scripts/exportplugin.xml b/scripts/exportplugin.xml
index 0a9dc38..726bd24 100644
--- a/scripts/exportplugin.xml
+++ b/scripts/exportplugin.xml
@@ -1,53 +1,66 @@
 <?xml version="1.0" encoding="UTF-8"?>

 

 <!-- build script to create a plugin from org.eclipse.jdt.core -->

-<project name="org.eclipse.jdt.core" default="export" basedir="..">

-	<target name="init">

-		<tstamp/>

-		<property name="destdir" value="../../plugin-export" />

-		<property name="dest"  value="${destdir}/org.eclipse.jdt.core" />

-	</target>

+<project name="org.eclipse.jdt.core" default="export plug-in [_1.9.0]" basedir="..">

 

-	<target name="export" depends="init">

+<target name="zz_init">

+	<tstamp/>

+	<property name="export-dir" value="../../plugin-export" />

+</target>

 

-		<echo message="TARGET: ${destdir}" />

-		<mkdir dir="${destdir}" />

-		<delete dir="${dest}" />

-		<mkdir dir="${dest}" />

+<target name="export plug-in [_1.9.0]" depends="zz_init">

+	<antcall target="zz_internal_export">

+	<param name="dest" value="${export-dir}/org.eclipse.jdt.core_1.9.0"/>

+	</antcall>

+</target>

 

-		<echo message="UPDATE jdtcore.jar" />

-		<jar 

-			jarfile="${dest}/jdtcore.jar"

-			basedir="bin" />

+<target name="export plug-in [no version]" depends="zz_init">

+	<antcall target="zz_internal_export">

+	<param name="dest" value="${export-dir}/org.eclipse.jdt.core"/>

+	</antcall>

+</target>

+

+<target name="zz_internal_export">

+

+	<tstamp/>

+

+	<echo message="TARGET: ${export-dir}" />

+	<mkdir dir="${export-dir}" />

+	<delete dir="${dest}" />

+	<mkdir dir="${dest}" />

+

+	<echo message="UPDATE jdtcore.jar" />

+	<jar 

+		jarfile="${dest}/jdtcore.jar"

+		basedir="bin" />

 		

-		<echo message="UPDATE plugin.xml" />

-		<copy file="plugin.xml" todir="${dest}" />

+	<echo message="UPDATE plugin.xml" />

+	<copy file="plugin.xml" todir="${dest}" />

+	<echo message="UPDATE plugin.properties" />

+	<copy file="plugin.properties" todir="${dest}" />

 

-		<echo message="UPDATE plugin.properties" />

-		<copy file="plugin.properties" todir="${dest}" />

-

-		<echo message="UPDATE notice.html" />

-		<copy file="notice.html" todir="${dest}" />

+	<echo message="UPDATE notice.html" />

+	<copy file="notice.html" todir="${dest}" />

 		

-		<echo message="UPDATE .options" />

-		<copy file=".options" todir="${dest}" />

+	<echo message="UPDATE .options" />

+	<copy file=".options" todir="${dest}" />

 

-		<echo message="UPDATE about.html" />

-		<copy file="about.html" todir="${dest}" />

+	<echo message="UPDATE about.html" />

+	<copy file="about.html" todir="${dest}" />

 

-		<echo message="UPDATE jdtCompilerAdapter.jar" />

-		<copy file="jdtCompilerAdapter.jar" todir="${dest}" />

+	<echo message="UPDATE jdtCompilerAdapter.jar" />

+	<copy file="jdtCompilerAdapter.jar" todir="${dest}" />

+	<echo message="UPDATE jdtcoresrc.zip" />

+	<zip zipfile="${dest}/jdtcoresrc.zip">

+	    <zipfileset dir="batch" />

+	    <zipfileset dir="codeassist" />

+	    <zipfileset dir="compiler" />

+	    <zipfileset dir="search" />

+	    <zipfileset dir="eval" />

+	    <zipfileset dir="model" />

+	    <zipfileset dir="formatter" />

+	    <zipfileset dir="dom" />

+	</zip>		

+</target>

 

-		<echo message="UPDATE jdtcoresrc.zip" />

-		<zip zipfile="${dest}/jdtcoresrc.zip">

-		    <zipfileset dir="batch" />

-		    <zipfileset dir="codeassist" />

-		    <zipfileset dir="compiler" />

-		    <zipfileset dir="search" />

-		    <zipfileset dir="eval" />

-		    <zipfileset dir="model" />

-		    <zipfileset dir="formatter" />

-		    <zipfileset dir="dom" />

-  		</zip>		

-	</target>

 </project>

diff --git a/search/org/eclipse/jdt/internal/core/index/IDocument.java b/search/org/eclipse/jdt/internal/core/index/IDocument.java
index 4fe20fa..ec5803c 100644
--- a/search/org/eclipse/jdt/internal/core/index/IDocument.java
+++ b/search/org/eclipse/jdt/internal/core/index/IDocument.java
@@ -7,7 +7,7 @@
 import java.io.IOException;

 

 /**

- * An <code>IDocument</code> represent a data source, e.g. a <code>File</code> (<code>FileDocument</code>), 

+ * An <code>IDocument</code> represent a data source, e.g.&nbsp;a <code>File</code> (<code>FileDocument</code>), 

  * an <code>IFile</code> (<code>IFileDocument</code>), 

  * or other kinds of data sources (URL, ...). An <code>IIndexer</code> indexes an<code>IDocument</code>.

  * <br>

diff --git a/search/org/eclipse/jdt/internal/core/index/impl/BlocksIndexInput.java b/search/org/eclipse/jdt/internal/core/index/impl/BlocksIndexInput.java
index d23c965..9a04279 100644
--- a/search/org/eclipse/jdt/internal/core/index/impl/BlocksIndexInput.java
+++ b/search/org/eclipse/jdt/internal/core/index/impl/BlocksIndexInput.java
@@ -31,15 +31,14 @@
 		blockCache= new LRUCache(CACHE_SIZE);

 	}

 	/**

-	 * @see IndexInput#clearCache

+	 * @see IndexInput#clearCache()

 	 */

 	public void clearCache() {

 		blockCache= new LRUCache(CACHE_SIZE);

 	}

 	/**

-	 * @see IndexInput#close

+	 * @see IndexInput#close()

 	 */

-

 	public void close() throws IOException {

 		if (opened) {

 			raf.close();

@@ -48,9 +47,8 @@
 		}

 	}

 	/**

-	 * @see IndexInput#getCurrentFile

+	 * @see IndexInput#getCurrentFile()

 	 */

-

 	public IndexedFile getCurrentFile() throws IOException {

 		if (!hasMoreFiles())

 			return null;

@@ -65,7 +63,6 @@
 	/**

 	 * Returns the entry corresponding to the given word.

 	 */

-

 	protected WordEntry getEntry(char[] word) throws IOException {

 		int blockNum= summary.getBlockNumForWord(word);

 		if (blockNum == -1) return null;

@@ -75,7 +72,6 @@
 	/**

 	 * Returns the FileListBlock with the given number.

 	 */

-

 	protected FileListBlock getFileListBlock(int blockNum) throws IOException {

 		Integer key= new Integer(blockNum);

 		Block block= (Block) blockCache.get(key);

@@ -89,7 +85,6 @@
 	/**

 	 * Returns the IndexBlock (containing words) with the given number.

 	 */

-

 	protected IndexBlock getIndexBlock(int blockNum) throws IOException {

 		Integer key= new Integer(blockNum);

 		Block block= (Block) blockCache.get(key);

@@ -101,7 +96,7 @@
 		return indexBlock;

 	}

 	/**

-	 * @see IndexInput#getIndexedFile

+	 * @see IndexInput#getIndexedFile(int)

 	 */

 	public IndexedFile getIndexedFile(int fileNum) throws IOException {

 		int blockNum= summary.getBlockNumForFileNum(fileNum);

@@ -111,7 +106,7 @@
 		return block.getFile(fileNum);

 	}

 	/**

-	 * @see IndexInput#getIndexedFile

+	 * @see IndexInput#getIndexedFile(IDocument)

 	 */

 	public IndexedFile getIndexedFile(IDocument document) throws java.io.IOException {

 		setFirstFile();

@@ -138,19 +133,19 @@
 		return entry == null ? new int[0] : entry.getRefs();

 	}

 	/**

-	 * @see IndexInput#getNumFiles

+	 * @see IndexInput#getNumFiles()

 	 */

 	public int getNumFiles() {

 		return summary.getNumFiles();

 	}

 	/**

-	 * @see IndexInput#getNumWords

+	 * @see IndexInput#getNumWords()

 	 */

 	public int getNumWords() {

 		return summary.getNumWords();

 	}

 	/**

-	 * @see IndexInput#getSource

+	 * @see IndexInput#getSource()

 	 */

 	public Object getSource() {

 		return indexFile;

@@ -164,13 +159,13 @@
 		setFirstWord();

 	}

 	/**

-	 * @see IndexInput#moveToNextFile

+	 * @see IndexInput#moveToNextFile()

 	 */

 	public void moveToNextFile() throws IOException {

 		filePosition++;

 	}

 	/**

-	 * @see IndexInput#moveToNextEntry

+	 * @see IndexInput#moveToNextWordEntry()

 	 */

 	public void moveToNextWordEntry() throws IOException {

 		wordPosition++;

@@ -185,7 +180,7 @@
 		}

 	}

 	/**

-	 * @see IndexInput#open

+	 * @see IndexInput#open()

 	 */

 

 	public void open() throws IOException {

@@ -203,7 +198,7 @@
 		}

 	}

 	/**

-	 * @see IndexInput#query

+	 * @see IndexInput#query(String)

 	 */

 	public IQueryResult[] query(String word) throws IOException {

 		open();

@@ -215,132 +210,132 @@
 		}

 		return files;

 	}

-/**

- * If no prefix is provided in the pattern, then this operation will have to walk

- * all the entries of the whole index.

- */

-public IEntryResult[] queryEntriesMatching(char[] pattern/*, boolean isCaseSensitive*/) throws IOException {

-	open();

-

-	if (pattern == null || pattern.length == 0) return null;

-	int[] blockNums = null;

-	int firstStar = CharOperation.indexOf('*', pattern);

-	switch (firstStar){

-		case -1 :

-			WordEntry entry = getEntry(pattern);

-			if (entry == null) return null;

-			return new IEntryResult[]{ new EntryResult(entry.getWord(), entry.getRefs()) };

-		case 0 :

-			blockNums = summary.getAllBlockNums();

-			break;

-		default :

-			char[] prefix = CharOperation.subarray(pattern, 0, firstStar);

-			blockNums = summary.getBlockNumsForPrefix(prefix);

-	}

-	if (blockNums == null || blockNums.length == 0)	return null;

-			

-	IEntryResult[] entries = new IEntryResult[5];

-	int count = 0;

-	for (int i = 0, max = blockNums.length; i < max; i++) {

-		IndexBlock block = getIndexBlock(blockNums[i]);

-		block.reset();

-		boolean found = false;

-		WordEntry entry = new WordEntry();

-		while (block.nextEntry(entry)) {

-			if (CharOperation.match(entry.getWord(), pattern, true)) {

-				if (count == entries.length){

-					System.arraycopy(entries, 0, entries = new IEntryResult[count*2], 0, count);

-				}

-				entries[count++] = new EntryResult(entry.getWord(), entry.getRefs());

-				found = true;

-			} else {

-				if (found) break;

-			}

-		}

-	}

-	if (count != entries.length){

-		System.arraycopy(entries, 0, entries = new IEntryResult[count], 0, count);

-	}

-	return entries;

-}

-public IEntryResult[] queryEntriesPrefixedBy(char[] prefix/*, boolean isCaseSensitive*/) throws IOException {

-	open();

-	

-	int blockLoc = summary.getFirstBlockLocationForPrefix(prefix);

-	if (blockLoc < 0) return null;

-		

-	IEntryResult[] entries = new IEntryResult[5];

-	int count = 0;

-	while(blockLoc >= 0){

-		IndexBlock block = getIndexBlock(summary.getBlockNum(blockLoc));

-		block.reset();

-		boolean found = false;

-		WordEntry entry = new WordEntry();

-		while (block.nextEntry(entry)) {

-			if (CharOperation.prefixEquals(prefix, entry.getWord()/*, isCaseSensitive*/)) {

-				if (count == entries.length){

-					System.arraycopy(entries, 0, entries = new IEntryResult[count*2], 0, count);

-				}

-				entries[count++] = new EntryResult(entry.getWord(), entry.getRefs());

-				found = true;

-			} else {

-				if (found) break;

-			}

-		}

-		/* consider next block ? */

-		blockLoc = summary.getNextBlockLocationForPrefix(prefix, blockLoc);				

-	}

-	if (count == 0) return null;

-	if (count != entries.length){

-		System.arraycopy(entries, 0, entries = new IEntryResult[count], 0, count);

-	}

-	return entries;

-}

-public IQueryResult[] queryFilesReferringToPrefix(char[] prefix) throws IOException {

-	open();

-	

-	int blockLoc = summary.getFirstBlockLocationForPrefix(prefix);

-	if (blockLoc < 0) return null;

-		

-	// each filename must be returned already once

-	org.eclipse.jdt.internal.compiler.util.HashtableOfInt fileMatches = new org.eclipse.jdt.internal.compiler.util.HashtableOfInt(20);

-	int count = 0; 

-	while(blockLoc >= 0){

-		IndexBlock block = getIndexBlock(summary.getBlockNum(blockLoc));

-		block.reset();

-		boolean found = false;

-		WordEntry entry = new WordEntry();

-		while (block.nextEntry(entry)) {

-			if (CharOperation.prefixEquals(prefix, entry.getWord()/*, isCaseSensitive*/)) {

-				int [] refs = entry.getRefs();

-				for (int i = 0, max = refs.length; i < max; i++){

-					int ref = refs[i];

-					if (!fileMatches.containsKey(ref)){

-						count++;

-						fileMatches.put(ref, getIndexedFile(ref));

-					}

-				}

-				found = true;

-			} else {

-				if (found) break;

-			}

-		}

-		/* consider next block ? */

-		blockLoc = summary.getNextBlockLocationForPrefix(prefix, blockLoc);				

-	}

-	/* extract indexed files */

-	IQueryResult[] files = new IQueryResult[count];

-	Object[] indexedFiles = fileMatches.valueTable;

-	for (int i = 0, index = 0, max = indexedFiles.length; i < max; i++){

-		IndexedFile indexedFile = (IndexedFile) indexedFiles[i];

-		if (indexedFile != null){

-			files[index++] = indexedFile;

-		}

-	}	

-	return files;

-}

 	/**

-	 * @see IndexInput#query

+	 * If no prefix is provided in the pattern, then this operation will have to walk

+	 * all the entries of the whole index.

+	 */

+	public IEntryResult[] queryEntriesMatching(char[] pattern/*, boolean isCaseSensitive*/) throws IOException {

+		open();

+	

+		if (pattern == null || pattern.length == 0) return null;

+		int[] blockNums = null;

+		int firstStar = CharOperation.indexOf('*', pattern);

+		switch (firstStar){

+			case -1 :

+				WordEntry entry = getEntry(pattern);

+				if (entry == null) return null;

+				return new IEntryResult[]{ new EntryResult(entry.getWord(), entry.getRefs()) };

+			case 0 :

+				blockNums = summary.getAllBlockNums();

+				break;

+			default :

+				char[] prefix = CharOperation.subarray(pattern, 0, firstStar);

+				blockNums = summary.getBlockNumsForPrefix(prefix);

+		}

+		if (blockNums == null || blockNums.length == 0)	return null;

+				

+		IEntryResult[] entries = new IEntryResult[5];

+		int count = 0;

+		for (int i = 0, max = blockNums.length; i < max; i++) {

+			IndexBlock block = getIndexBlock(blockNums[i]);

+			block.reset();

+			boolean found = false;

+			WordEntry entry = new WordEntry();

+			while (block.nextEntry(entry)) {

+				if (CharOperation.match(entry.getWord(), pattern, true)) {

+					if (count == entries.length){

+						System.arraycopy(entries, 0, entries = new IEntryResult[count*2], 0, count);

+					}

+					entries[count++] = new EntryResult(entry.getWord(), entry.getRefs());

+					found = true;

+				} else {

+					if (found) break;

+				}

+			}

+		}

+		if (count != entries.length){

+			System.arraycopy(entries, 0, entries = new IEntryResult[count], 0, count);

+		}

+		return entries;

+	}

+	public IEntryResult[] queryEntriesPrefixedBy(char[] prefix/*, boolean isCaseSensitive*/) throws IOException {

+		open();

+		

+		int blockLoc = summary.getFirstBlockLocationForPrefix(prefix);

+		if (blockLoc < 0) return null;

+			

+		IEntryResult[] entries = new IEntryResult[5];

+		int count = 0;

+		while(blockLoc >= 0){

+			IndexBlock block = getIndexBlock(summary.getBlockNum(blockLoc));

+			block.reset();

+			boolean found = false;

+			WordEntry entry = new WordEntry();

+			while (block.nextEntry(entry)) {

+				if (CharOperation.prefixEquals(prefix, entry.getWord()/*, isCaseSensitive*/)) {

+					if (count == entries.length){

+						System.arraycopy(entries, 0, entries = new IEntryResult[count*2], 0, count);

+					}

+					entries[count++] = new EntryResult(entry.getWord(), entry.getRefs());

+					found = true;

+				} else {

+					if (found) break;

+				}

+			}

+			/* consider next block ? */

+			blockLoc = summary.getNextBlockLocationForPrefix(prefix, blockLoc);				

+		}

+		if (count == 0) return null;

+		if (count != entries.length){

+			System.arraycopy(entries, 0, entries = new IEntryResult[count], 0, count);

+		}

+		return entries;

+	}

+	public IQueryResult[] queryFilesReferringToPrefix(char[] prefix) throws IOException {

+		open();

+		

+		int blockLoc = summary.getFirstBlockLocationForPrefix(prefix);

+		if (blockLoc < 0) return null;

+			

+		// each filename must be returned already once

+		org.eclipse.jdt.internal.compiler.util.HashtableOfInt fileMatches = new org.eclipse.jdt.internal.compiler.util.HashtableOfInt(20);

+		int count = 0; 

+		while(blockLoc >= 0){

+			IndexBlock block = getIndexBlock(summary.getBlockNum(blockLoc));

+			block.reset();

+			boolean found = false;

+			WordEntry entry = new WordEntry();

+			while (block.nextEntry(entry)) {

+				if (CharOperation.prefixEquals(prefix, entry.getWord()/*, isCaseSensitive*/)) {

+					int [] refs = entry.getRefs();

+					for (int i = 0, max = refs.length; i < max; i++){

+						int ref = refs[i];

+						if (!fileMatches.containsKey(ref)){

+							count++;

+							fileMatches.put(ref, getIndexedFile(ref));

+						}

+					}

+					found = true;

+				} else {

+					if (found) break;

+				}

+			}

+			/* consider next block ? */

+			blockLoc = summary.getNextBlockLocationForPrefix(prefix, blockLoc);				

+		}

+		/* extract indexed files */

+		IQueryResult[] files = new IQueryResult[count];

+		Object[] indexedFiles = fileMatches.valueTable;

+		for (int i = 0, index = 0, max = indexedFiles.length; i < max; i++){

+			IndexedFile indexedFile = (IndexedFile) indexedFiles[i];

+			if (indexedFile != null){

+				files[index++] = indexedFile;

+			}

+		}	

+		return files;

+	}

+	/**

+	 * @see IndexInput#queryInDocumentNames(String)

 	 */

 	public IQueryResult[] queryInDocumentNames(String word) throws IOException {

 		open();

@@ -357,7 +352,7 @@
 		return match;

 	}

 	/**

-	 * @see IndexInput#setFirstFile

+	 * @see IndexInput#setFirstFile()

 	 */

 

 	protected void setFirstFile() throws IOException {

@@ -368,7 +363,7 @@
 		}

 	}

 	/**

-	 * @see IndexInput#setFirstWord

+	 * @see IndexInput#setFirstWord()

 	 */

 

 	protected void setFirstWord() throws IOException {

diff --git a/search/org/eclipse/jdt/internal/core/index/impl/IFileDocument.java b/search/org/eclipse/jdt/internal/core/index/impl/IFileDocument.java
index ff5a9fd..634fb72 100644
--- a/search/org/eclipse/jdt/internal/core/index/impl/IFileDocument.java
+++ b/search/org/eclipse/jdt/internal/core/index/impl/IFileDocument.java
@@ -40,7 +40,7 @@
 		this.charContents= charContents;

 	}

 	/**

-	 * @see IDocument#getByteContent

+	 * @see org.eclipse.jdt.internal.core.index.IDocument#getByteContent()

 	 */

 	public byte[] getByteContent() throws IOException {

 		if (byteContents != null) return byteContents;

@@ -49,7 +49,7 @@
 		return byteContents = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(location.toFile());

 	}

 	/**

-	 * @see IDocument#getCharContent

+	 * @see org.eclipse.jdt.internal.core.index.IDocument#getCharContent()

 	 */

 	public char[] getCharContent() throws IOException {

 		if (charContents != null) return charContents;

@@ -58,19 +58,19 @@
 		return charContents = org.eclipse.jdt.internal.compiler.util.Util.getFileCharContent(location.toFile(), null);

 	}

 	/**

-	 * @see IDocument#getName

+	 * @see org.eclipse.jdt.internal.core.index.IDocument#getName()

 	 */

 	public String getName() {

 		return file.getFullPath().toString();

 	}

 	/**

-	 * @see IDocument#getStringContent

+	 * @see org.eclipse.jdt.internal.core.index.IDocument#getStringContent()

 	 */

 	public String getStringContent() throws java.io.IOException {

 		return new String(getCharContent());

 	}

 	/**

-	 * @see IDocument#getType

+	 * @see org.eclipse.jdt.internal.core.index.IDocument#getType()

 	 */

 	public String getType() {

 		String extension= file.getFileExtension();

diff --git a/search/org/eclipse/jdt/internal/core/index/impl/InMemoryIndex.java b/search/org/eclipse/jdt/internal/core/index/impl/InMemoryIndex.java
index a96f6a3..6a09a84 100644
--- a/search/org/eclipse/jdt/internal/core/index/impl/InMemoryIndex.java
+++ b/search/org/eclipse/jdt/internal/core/index/impl/InMemoryIndex.java
@@ -36,9 +36,7 @@
 	public InMemoryIndex() {

 		init();

 	}

-	/**

-	 * @see IIndex#addFile

-	 */

+

 	public IndexedFile addDocument(IDocument document) {

 		IndexedFile indexedFile= this.files.add(document);

 		this.footprint += indexedFile.footprint() + 4;

@@ -74,43 +72,43 @@
 			this.footprint += entry.addRef(fileNum);

 		}

 	}

-	/**

-	 * @see IIndex#addRef

-	 */

+

 	public void addRef(IndexedFile indexedFile, char[] word) {

 		addRef(word, indexedFile.getFileNumber());

 	}

-	/**

-	 * @see IIndex#addRef

-	 */

+

 	public void addRef(IndexedFile indexedFile, String word) {

 		addRef(word.toCharArray(), indexedFile.getFileNumber());

 	}

+

 	/**

 	 * Returns the footprint of the index.

 	 */

-

 	public long getFootprint() {

 		return this.footprint;

 	}

+

 	/**

 	 * Returns the indexed file with the given path, or null if such file does not exist.

 	 */

 	public IndexedFile getIndexedFile(String path) {

 		return files.get(path);

 	}

+

 	/**

-	 * @see IIndex#getNumFiles

+	 * @see IIndex#getNumDocuments()

 	 */

 	public int getNumFiles() {

 		return files.size();

 	}

+

 	/**

-	 * @see IIndex#getNumWords

+	 * @see IIndex#getNumWords()

 	 */

 	public int getNumWords() {

 		return words.elementSize;

 	}

+	

 	/**

 	 * Returns the words contained in the hashtable of words, sorted by alphabetical order.

 	 */

diff --git a/search/org/eclipse/jdt/internal/core/index/impl/IndexBlock.java b/search/org/eclipse/jdt/internal/core/index/impl/IndexBlock.java
index ab2dfbe..bbfa577 100644
--- a/search/org/eclipse/jdt/internal/core/index/impl/IndexBlock.java
+++ b/search/org/eclipse/jdt/internal/core/index/impl/IndexBlock.java
@@ -23,15 +23,12 @@
 

 	public abstract boolean addEntry(WordEntry entry);

 	/**

-	 * @see Block#clear

+	 * @see Block#clear()

 	 */

 	public void clear() {

 		reset();

 		super.clear();

 	}

-	/**

-	 * @see Block#findEntry

-	 */

 	public WordEntry findEntryMatching(char[] pattern, boolean isCaseSensitive) {

 		reset();

 		WordEntry entry= new WordEntry();

@@ -42,9 +39,6 @@
 		}

 		return null;

 	}

-	/**

-	 * @see Block#findEntry

-	 */

 	public WordEntry findEntryPrefixedBy(char[] word, boolean isCaseSensitive) {

 		reset();

 		WordEntry entry= new WordEntry();

@@ -55,9 +49,6 @@
 		}

 		return null;

 	}

-	/**

-	 * @see Block#findEntry

-	 */

 	public WordEntry findExactEntry(char[] word) {

 		reset();

 		WordEntry entry= new WordEntry();

@@ -72,14 +63,12 @@
 	 * Returns whether the block is empty or not (if it doesn't contain any wordEntry).

 	 */

 	public abstract boolean isEmpty();

+

 	/**

 	 * Finds the next wordEntry and stores it in the given entry.

 	 */

-

 	public abstract boolean nextEntry(WordEntry entry);

-	/**

-	 * @see Block#findEntry

-	 */

+

 	public void reset() {

 	}

 }

diff --git a/search/org/eclipse/jdt/internal/core/index/impl/IndexInput.java b/search/org/eclipse/jdt/internal/core/index/impl/IndexInput.java
index b371386..7a6e307 100644
--- a/search/org/eclipse/jdt/internal/core/index/impl/IndexInput.java
+++ b/search/org/eclipse/jdt/internal/core/index/impl/IndexInput.java
@@ -10,15 +10,13 @@
 

 

 /**

- * This class provides an input on an index, after it has been generated.<br>

+ * This class provides an input on an index, after it has been generated.

  * You can access all the files of an index via getNextFile(), getCurrentFile() 

- * and moveToNextFile() (idem for the word entries).  <br> 

+ * and moveToNextFile() (idem for the word entries). 

  * The usage is the same for every subclass: creation (constructor), opening

  * (the open() method), usage, and closing (the close() method), to release the

  * data source used by this input.

  */

-

-

 public abstract class IndexInput {

 	protected int filePosition;

 	protected WordEntry currentWordEntry;

diff --git a/search/org/eclipse/jdt/internal/core/index/impl/IndexedFile.java b/search/org/eclipse/jdt/internal/core/index/impl/IndexedFile.java
index d5955b9..f2a90e0 100644
--- a/search/org/eclipse/jdt/internal/core/index/impl/IndexedFile.java
+++ b/search/org/eclipse/jdt/internal/core/index/impl/IndexedFile.java
@@ -68,7 +68,7 @@
 	/**

 	 * Returns the path represented by pathString converted back to a path relative to the local file system.

 	 *

-	 * @parame pathString the path to convert:

+	 * @param pathString the path to convert:

 	 * <ul>

 	 *		<li>an absolute IPath (relative to the workspace root) if the path represents a resource in the 

 	 *			workspace

diff --git a/search/org/eclipse/jdt/internal/core/index/impl/JarFileDocument.java b/search/org/eclipse/jdt/internal/core/index/impl/JarFileDocument.java
index 37b8e1c..b88d131 100644
--- a/search/org/eclipse/jdt/internal/core/index/impl/JarFileDocument.java
+++ b/search/org/eclipse/jdt/internal/core/index/impl/JarFileDocument.java
@@ -14,44 +14,44 @@
 

 public class JarFileDocument extends PropertyDocument {

 	protected IFile file;

-/**

- * JarFileDocument constructor comment.

- */

-public JarFileDocument(IFile file) {

-	this.file = file;

-}

-/**

- * This API always return null for a JarFileDocument

- * @see IDocument#getByteContent

- */

-public byte[] getByteContent() throws IOException {

-	return null;

-}

-/**

- * This API always return null for a JarFileDocument

- * @see IDocument#getByteContent

- */

-public char[] getCharContent() throws IOException {

-	return null;

-}

-public File getFile() {

-	return file.getLocation().toFile();

-}

 	/**

-	 * @see IDocument#getName

+	 * JarFileDocument constructor comment.

+	 */

+	public JarFileDocument(IFile file) {

+		this.file = file;

+	}

+	/**

+	 * This API always return null for a JarFileDocument

+	 * @see org.eclipse.jdt.internal.core.index.IDocument#getByteContent()

+	 */

+	public byte[] getByteContent() throws IOException {

+		return null;

+	}

+	/**

+	 * This API always return null for a JarFileDocument

+	 * @see org.eclipse.jdt.internal.core.index.IDocument#getCharContent()

+	 */

+	public char[] getCharContent() throws IOException {

+		return null;

+	}

+	public File getFile() {

+		return file.getLocation().toFile();

+	}

+	/**

+	 * @see org.eclipse.jdt.internal.core.index.IDocument#getName()

 	 */

 	public String getName() {

 		return file.getFullPath().toString();

 	}

-/**

- * This API always return null for a JarFileDocument

- * @see IDocument#getByteContent

- */

-public String getStringContent() throws java.io.IOException {

-	return null;

-}

 	/**

-	 * @see IDocument#getType

+	 * This API always return null for a JarFileDocument

+	 * @see org.eclipse.jdt.internal.core.index.IDocument#getByteContent()

+	 */

+	public String getStringContent() throws java.io.IOException {

+		return null;

+	}

+	/**

+	 * @see org.eclipse.jdt.internal.core.index.IDocument#getType()

 	 */

 	public String getType() {

 		String extension= file.getFileExtension();

diff --git a/search/org/eclipse/jdt/internal/core/index/impl/JarFileEntryDocument.java b/search/org/eclipse/jdt/internal/core/index/impl/JarFileEntryDocument.java
index 1c277de..21ad2ef 100644
--- a/search/org/eclipse/jdt/internal/core/index/impl/JarFileEntryDocument.java
+++ b/search/org/eclipse/jdt/internal/core/index/impl/JarFileEntryDocument.java
@@ -30,33 +30,33 @@
 }

 /**

  * This API always return null for a JarFileDocument

- * @see IDocument#getByteContent

+ * @see org.eclipse.jdt.internal.core.index.IDocument#getByteContent()

  */

 public byte[] getByteContent() throws IOException {

 	return this.byteContents;

 }

 /**

  * This API always return null for a JarFileDocument

- * @see IDocument#getByteContent

+ * @see org.eclipse.jdt.internal.core.index.IDocument#getCharContent()

  */

 public char[] getCharContent() throws IOException {

 	return null;

 }

 	/**

-	 * @see IDocument#getName

+	 * @see org.eclipse.jdt.internal.core.index.IDocument#getName()

 	 */

 	public String getName() {

 		return zipFilePath + JAR_FILE_ENTRY_SEPARATOR + zipEntry.getName();

 	}

 /**

  * This API always return null for a JarFileDocument

- * @see IDocument#getByteContent

+ * @see org.eclipse.jdt.internal.core.index.IDocument#getByteContent()

  */

 public String getStringContent() throws java.io.IOException {

 	return null;

 }

 	/**

-	 * @see IDocument#getType

+	 * @see org.eclipse.jdt.internal.core.index.IDocument#getType()

 	 */

 	public String getType() {

 		return "class"; //$NON-NLS-1$

diff --git a/search/org/eclipse/jdt/internal/core/index/impl/LRUCache.java b/search/org/eclipse/jdt/internal/core/index/impl/LRUCache.java
index 8a6272a..ee5c6ad 100644
--- a/search/org/eclipse/jdt/internal/core/index/impl/LRUCache.java
+++ b/search/org/eclipse/jdt/internal/core/index/impl/LRUCache.java
@@ -21,8 +21,7 @@
  * <p>This implementation is NOT thread-safe.  Synchronization wrappers would

  * have to be added to ensure atomic insertions and deletions from the cache.

  *

- * @see LRUCacheEntry

- * @see ILRUCacheable

+ * @see org.eclipse.jdt.internal.core.index.impl.ILRUCacheable

  */

 public class LRUCache implements Cloneable {

 

diff --git a/search/org/eclipse/jdt/internal/core/index/impl/SimpleIndexInput.java b/search/org/eclipse/jdt/internal/core/index/impl/SimpleIndexInput.java
index 7a477f7..41369e3 100644
--- a/search/org/eclipse/jdt/internal/core/index/impl/SimpleIndexInput.java
+++ b/search/org/eclipse/jdt/internal/core/index/impl/SimpleIndexInput.java
@@ -23,18 +23,18 @@
 		this.index= index;

 	}

 	/**

-	 * @see IndexInput#clearCache

+	 * @see IndexInput#clearCache()

 	 */

 	public void clearCache() {

 	}

 	/**

-	 * @see IndexInput#close

+	 * @see IndexInput#close()

 	 */

 	public void close() throws IOException {

 		sortedFiles= null;

 	}

 	/**

-	 * @see IndexInput#getCurrentFile

+	 * @see IndexInput#getCurrentFile()

 	 */

 	public IndexedFile getCurrentFile() throws IOException {

 		if (!hasMoreFiles())

@@ -42,7 +42,7 @@
 		return currentFile;

 	}

 	/**

-	 * @see IndexInput#getIndexedFile

+	 * @see IndexInput#getIndexedFile(int)

 	 */

 	public IndexedFile getIndexedFile(int fileNum) throws IOException {

 		for (int i= 0; i < sortedFiles.length; i++)

@@ -51,7 +51,7 @@
 		return null;

 	}

 	/**

-	 * @see IndexInput#getIndexedFile

+	 * @see IndexInput#getIndexedFile(IDocument)

 	 */

 	public IndexedFile getIndexedFile(IDocument document) throws IOException {

 		String name= document.getName();

@@ -63,32 +63,29 @@
 		return null;

 	}

 	/**

-	 * @see IndexInput#getNumFiles

+	 * @see IndexInput#getNumFiles()

 	 */

 	public int getNumFiles() {

 		return index.getNumFiles();

 	}

 	/**

-	 * @see IndexInput#getNumWords

+	 * @see IndexInput#getNumWords()

 	 */

 	public int getNumWords() {

 		return sortedWordEntries.length;

 	}

 	/**

-	 * @see IndexInput#getSource

+	 * @see IndexInput#getSource()

 	 */

 	public Object getSource() {

 		return index;

 	}

-	/**

-	 * @see IndexInput#init

-	 */

 	public void init() {

 		index.init();

 

 	}

 	/**

-	 * @see IndexInput#moveToNextFile

+	 * @see IndexInput#moveToNextFile()

 	 */

 	public void moveToNextFile() throws IOException {

 		filePosition++;

@@ -98,7 +95,7 @@
 		currentFile= sortedFiles[filePosition - 1];

 	}

 	/**

-	 * @see IndexInput#moveToNextWordEntry

+	 * @see IndexInput#moveToNextWordEntry()

 	 */

 	public void moveToNextWordEntry() throws IOException {

 		wordPosition++;

@@ -106,7 +103,7 @@
 			currentWordEntry= sortedWordEntries[wordPosition - 1];

 	}

 	/**

-	 * @see IndexInput#open

+	 * @see IndexInput#open()

 	 */

 	public void open() throws IOException {

 		sortedWordEntries= index.getSortedWordEntries();

@@ -117,7 +114,7 @@
 		setFirstWord();

 	}

 	/**

-	 * @see IndexInput#query

+	 * @see IndexInput#query(String)

 	 */

 	public IQueryResult[] query(String word) throws IOException {

 		char[] wordChar= word.toCharArray();

@@ -128,14 +125,14 @@
 			files[i]= getIndexedFile(fileNums[i]);

 		return files;

 	}

-public IEntryResult[] queryEntriesPrefixedBy(char[] prefix) throws IOException {

-	return null;

-}

-public IQueryResult[] queryFilesReferringToPrefix(char[] prefix) throws IOException {

+	public IEntryResult[] queryEntriesPrefixedBy(char[] prefix) throws IOException {

 		return null;

-}

+	}

+	public IQueryResult[] queryFilesReferringToPrefix(char[] prefix) throws IOException {

+			return null;

+	}

 	/**

-	 * @see IndexInput#query

+	 * @see IndexInput#queryInDocumentNames(String)

 	 */

 	public IQueryResult[] queryInDocumentNames(String word) throws IOException {

 		setFirstFile();

@@ -151,7 +148,7 @@
 		return match;

 	}

 	/**

-	 * @see IndexInput#setFirstFile

+	 * @see IndexInput#setFirstFile()

 	 */

 	protected void setFirstFile() throws IOException {

 		filePosition= 1;

@@ -160,7 +157,7 @@
 		}

 	}

 	/**

-	 * @see IndexInput#setFirstWord

+	 * @see IndexInput#setFirstWord()

 	 */

 	protected void setFirstWord() throws IOException {

 		wordPosition= 1;

diff --git a/search/org/eclipse/jdt/internal/core/search/indexing/AbstractIndexer.java b/search/org/eclipse/jdt/internal/core/search/indexing/AbstractIndexer.java
index 78e87e7..0458b3f 100644
--- a/search/org/eclipse/jdt/internal/core/search/indexing/AbstractIndexer.java
+++ b/search/org/eclipse/jdt/internal/core/search/indexing/AbstractIndexer.java
@@ -13,9 +13,7 @@
 

 public abstract class AbstractIndexer implements IIndexer, IIndexConstants, IJavaSearchConstants {

 	IIndexerOutput output;

-/**

- * AbstractIndexer constructor comment.

- */

+

 public AbstractIndexer() {

 	super();

 }

@@ -164,9 +162,8 @@
 	this.output.addRef(CharOperation.concat(TYPE_REF, CharOperation.lastSegment(typeName, '.')));

 }

 /**

- * Constructor declaration entries are encoded as follow: 'constructorDecl/' TypeName '/' Arity

- * 	e.g.	constructorDecl/X/0

- *			constructorDecl/Y/1

+ * Constructor declaration entries are encoded as follow: 'constructorDecl/' TypeName '/' Arity:

+ * 	e.g. &nbsp;constructorDecl/X/0&nbsp;constructorDecl/Y/1

  *

  */

  public static final char[] bestConstructorDeclarationPrefix(char[] typeName, int arity, int matchMode, boolean isCaseSensitive) {

@@ -203,9 +200,8 @@
 	}

 }

 /**

- * Constructor reference entries are encoded as follow: 'constructorRef/' TypeName '/' Arity

- * 	e.g.	constructorRef/X/0

- *			constructorRef/Y/1

+ * Constructor reference entries are encoded as follow: 'constructorRef/' TypeName '/' Arity:

+ * 	e.g.&nbsp;constructorRef/X/0&nbsp;constructorRef/Y/1

  *

  */

  public static final char[] bestConstructorReferencePrefix(char[] typeName, int arity, int matchMode, boolean isCaseSensitive) {

@@ -243,7 +239,7 @@
 }

 /**

  * Method declaration entries are encoded as follow: 'fieldDecl/' Name

- * 	e.g.	fieldDecl/x

+ * 	e.g.&nbsp;fieldDecl/x

  *

  */

  public static final char[] bestFieldDeclarationPrefix(char[] name, int matchMode, boolean isCaseSensitive) {

@@ -272,8 +268,7 @@
 }

 /**

  * Method declaration entries are encoded as follow: 'methodDecl/' Selector '/' Arity

- * 	e.g.	methodDecl/clone/0

- *			methodDecl/append/1

+ * 	e.g.&nbsp;methodDecl/clone/0&nbsp;methodDecl/append/1

  *

  */

  public static final char[] bestMethodDeclarationPrefix(char[] selector, int arity, int matchMode, boolean isCaseSensitive) {

@@ -311,8 +306,7 @@
 }

 /**

  * Method reference entries are encoded as follow: 'methodRef/' Selector '/' Arity

- * 	e.g.	methodRef/clone/0

- *			methodRef/append/1

+ * 	e.g.&nbsp;methodRef/clone/0&nbsp;methodRef/append/1

  *

  */

  public static final char[] bestMethodReferencePrefix(char[] selector, int arity, int matchMode, boolean isCaseSensitive) {

@@ -350,8 +344,7 @@
 }

 /**

  * Type entries are encoded as follow: '<tag>/' Name 

- * 	e.g.	ref/Object

- *			ref/x

+ * 	e.g.&nbsp;ref/Object&nbsp;ref/x

  */

  public static final char[] bestReferencePrefix(char[] tag, char[] name, int matchMode, boolean isCaseSensitive) {

 

@@ -378,9 +371,8 @@
 	}

 }

 /**

- * Type entries are encoded as follow: 'typeDecl/' ('C' | 'I') '/' PackageName '/' TypeName

- * 	e.g.	typeDecl/C/java.lang/Object

- *			typeDecl/I/java.lang/Cloneable

+ * Type entries are encoded as follow: 'typeDecl/' ('C' | 'I') '/' PackageName '/' TypeName:

+ * 	e.g.&nbsp;typeDecl/C/java.lang/Object&nbsp;typeDecl/I/java.lang/Cloneable

  *

  * Current encoding is optimized for queries: all classes/interfaces

  */

@@ -509,9 +501,10 @@
 }

 /**

  * Type entries are encoded as follow: 'typeDecl/' ('C' | 'I') '/' PackageName '/' TypeName '/' EnclosingTypeName

- * 	e.g.	typeDecl/C/java.lang/Object/

- *			typeDecl/I/java.lang/Cloneable/

- *			typeDecl/C/javax.swing/LazyValue/UIDefaults

+ * 	e.g.<ul>

+ * 	<li>typeDecl/C/java.lang/Object/</li>

+ *	<li>typeDecl/I/java.lang/Cloneable/</li>

+ *	<li>typeDecl/C/javax.swing/LazyValue/UIDefaults</li>

  * Current encoding is optimized for queries: all classes/interfaces

  */

  protected static final char[] encodeTypeEntry(char[] packageName, char[][] enclosingTypeNames, char[] typeName, boolean isClass) {

@@ -551,7 +544,7 @@
 

 public abstract String[] getFileTypes();

 /**

- * @see IIndexer#index

+ * @see IIndexer#index(IDocument document, IIndexerOutput output)

  */

 public void index(IDocument document, IIndexerOutput output) throws IOException {

 	this.output = output;

@@ -559,7 +552,7 @@
 }

 protected abstract void indexFile(IDocument document) throws IOException;

 /**

- * @see IIndexer#shouldIndex

+ * @see IIndexer#shouldIndex(IDocument document)

  */

 public boolean shouldIndex(IDocument document) {

 	String type = document.getType();

diff --git a/search/org/eclipse/jdt/internal/core/search/matching/PackageReferencePattern.java b/search/org/eclipse/jdt/internal/core/search/matching/PackageReferencePattern.java
index 4b174b7..0edef61 100644
--- a/search/org/eclipse/jdt/internal/core/search/matching/PackageReferencePattern.java
+++ b/search/org/eclipse/jdt/internal/core/search/matching/PackageReferencePattern.java
@@ -38,7 +38,6 @@
 }

 /**

  * ref/name (where name is the last segment of the package name)

- * @see SearchPattern#decodeIndexEntry

  */ 

 public void decodeIndexEntry(IEntryResult entryResult){

 

@@ -50,7 +49,7 @@
 	this.decodedSegment = CharOperation.subarray(word, tagLength, nameLength);

 }

 /**

- * @see SearchPattern#feedIndexRequestor

+ * @see SearchPattern#feedIndexRequestor(IIndexSearchRequestor requestor, int detailLevel, int[] references, IndexInput input, IJavaSearchScope scope)

  */

 public void feedIndexRequestor(IIndexSearchRequestor requestor, int detailLevel, int[] references, IndexInput input, IJavaSearchScope scope) throws IOException {

 	for (int i = 0, max = references.length; i < max; i++) {

@@ -68,7 +67,7 @@
 	return TAGS;

 }

 /**

- * @see AndPattern#hasNextQuery

+ * @see AndPattern#hasNextQuery()

  */

 protected boolean hasNextQuery() {

 	if (this.segments.length > 2) {

@@ -80,7 +79,7 @@
 	}

 }

 /**

- * @see SearchPattern#indexEntryPrefix

+ * @see SearchPattern#indexEntryPrefix()

  */

 public char[] indexEntryPrefix() {

 	return AbstractIndexer.bestReferencePrefix(

@@ -90,7 +89,7 @@
 		isCaseSensitive);

 }

 /**

- * @see SearchPattern#matchContainer

+ * @see SearchPattern#matchContainer()

  */

 protected int matchContainer() {

 	return COMPILATION_UNIT | CLASS | METHOD | FIELD;

@@ -103,7 +102,7 @@
 	return this.matchesName(this.pkgName, name);

 }

 /**

- * @see SearchPattern#matchIndexEntry

+ * @see SearchPattern#matchIndexEntry()

  */

 protected boolean matchIndexEntry() {

 	switch(matchMode){

@@ -125,7 +124,7 @@
 	return true;

 }

 /**

- * @see SearchPattern#matchReportReference

+ * @see SearchPattern#matchReportReference(AstNode reference, IJavaElement element, int accuracy, MatchLocator locator)

  */

 protected void matchReportReference(AstNode reference, IJavaElement element, int accuracy, MatchLocator locator) throws CoreException {

 	char[][] tokens = null;

@@ -178,7 +177,7 @@
 	locator.reportAccurateReference(reference.sourceStart, reference.sourceEnd, tokens, element, accuracy);

 }

 /**

- * @see AndPattern#resetQuery

+ * @see AndPattern#resetQuery()

  */

 protected void resetQuery() {

 	/* walk the segments from end to start as it will find less potential references using 'lang' than 'java' */

diff --git a/search/org/eclipse/jdt/internal/core/search/processing/JobManager.java b/search/org/eclipse/jdt/internal/core/search/processing/JobManager.java
index a71857c..5513848 100644
--- a/search/org/eclipse/jdt/internal/core/search/processing/JobManager.java
+++ b/search/org/eclipse/jdt/internal/core/search/processing/JobManager.java
@@ -328,11 +328,7 @@
 			}

 		} catch (RuntimeException e) {

 			// log exception

-			JavaCore.getPlugin().getLog().log(

-				new JavaModelStatus(

-					IJavaModelStatus.ERROR,

-					e)

-			);

+			org.eclipse.jdt.internal.core.Util.log(e, "Background Indexer Crash Recovery"); //$NON-NLS-1$

 			

 			// keep job manager alive

 			this.discardJobs(null);