update to v_B22 (3.7M3)
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/AbstractCompletionTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/AbstractCompletionTest.java
index 9f0f5bf..87f0a25 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/AbstractCompletionTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/AbstractCompletionTest.java
@@ -141,9 +141,10 @@
 			parser.parseBlockStatements((AbstractMethodDeclaration)foundMethod, unit);
 		} else {
 			TypeDeclaration type = (TypeDeclaration)foundMethod;
-			if (type.fields != null) {
-				done : for (int i = 0; i < type.fields.length; i++) {
-					FieldDeclaration field = type.fields[i];
+			FieldDeclaration[] fields = type.fields;
+			if (fields != null) {
+				done : for (int i = 0; i < fields.length; i++) {
+					FieldDeclaration field = fields[i];
 					if (field.declarationSourceStart <= cursorLocation && (cursorLocation <= field.declarationSourceEnd || field.declarationSourceEnd == 0)) {
 						if (field instanceof Initializer) {
 							parser.parseBlockStatements((Initializer)field, type, unit);
@@ -359,9 +360,10 @@
 			}
 		}
 	}
-	if (type.fields != null) {
-		for (int i = 0; i < type.fields.length; i++) {
-			FieldDeclaration field = type.fields[i];
+	FieldDeclaration[] fields = type.fields;
+	if (fields != null) {
+		for (int i = 0; i < fields.length; i++) {
+			FieldDeclaration field = fields[i];
 			if (field instanceof Initializer && field.declarationSourceStart <= cursorLocation && (cursorLocation <= field.declarationSourceEnd || field.declarationSourceEnd == 0)) {
 				return type;
 			}
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/AbstractSelectionTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/AbstractSelectionTest.java
index e9b1b4d..84e4801 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/AbstractSelectionTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/AbstractSelectionTest.java
@@ -167,9 +167,10 @@
 // SH}
 	} else {
 		TypeDeclaration type = (TypeDeclaration)foundMethod;
-		if (type.fields != null) {
-			for (int i = 0; i < type.fields.length; i++) {
-				FieldDeclaration field = type.fields[i];
+		FieldDeclaration[] fields = type.fields;
+		if (fields != null) {
+			for (int i = 0; i < fields.length; i++) {
+				FieldDeclaration field = fields[i];
 				if (field instanceof Initializer && field.sourceStart <= selectionStart && selectionStart <= field.sourceEnd) {
 					parser.parseBlockStatements((Initializer)field, type, unit);
 					break;
@@ -299,9 +300,10 @@
 			}
 		}
 	}
-	if (type.fields != null) {
-		for (int i = 0; i < type.fields.length; i++) {
-			FieldDeclaration field = type.fields[i];
+	FieldDeclaration[] fields = type.fields;
+	if (fields != null) {
+		for (int i = 0; i < fields.length; i++) {
+			FieldDeclaration field = fields[i];
 			if (field instanceof Initializer) {
 				Initializer initializer = (Initializer)field;
 				Block block = initializer.block;
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/AnnotationTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/AnnotationTest.java
index 321d830..5072b23 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/AnnotationTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/AnnotationTest.java
@@ -8,6 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Stephan Herrmann  - Contribution for bug 295551
+ *     Stephan Herrmann <stephan@cs.tu-berlin.de> - Contribution for bug 185682 - Increment/decrement operators mark local variables as read
  *******************************************************************************/
 package org.eclipse.jdt.core.tests.compiler.regression;
 
@@ -9355,7 +9356,7 @@
 			"1. ERROR in A.java (at line 3)\n" + 
 			"	private int i;\n" + 
 			"	            ^\n" + 
-			"The field A.i is never read locally\n" + 
+			"The value of the field A.i is not used\n" + 
 			"----------\n";
 	runNegativeTest(
 			true,
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/AssertionTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/AssertionTest.java
index 1788884..2b601e0 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/AssertionTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/AssertionTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -507,5 +507,114 @@
 			"The local variable error6 may not have been initialized\n" + 
 			"----------\n");
 	}
-	
+	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=328361
+	public void test018() {
+		this.runNegativeTest(new String[] {
+			"X.java",
+			"public class X {\n" + 
+			"    static final int i;\n" + 
+			"    static {\n" + 
+			"        assert (i = 0) == 0;\n" + 
+			"        System.out.println(i);\n" + 
+			"    }\n" + 
+			"}"
+		},
+		"----------\n" + 
+		"1. ERROR in X.java (at line 2)\n" + 
+		"	static final int i;\n" + 
+		"	                 ^\n" + 
+		"The blank final field i may not have been initialized\n" + 
+		"----------\n" + 
+		"2. ERROR in X.java (at line 5)\n" + 
+		"	System.out.println(i);\n" + 
+		"	                   ^\n" + 
+		"The blank final field i may not have been initialized\n" + 
+		"----------\n");
+	}
+	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=328361
+	public void test019() {
+		this.runConformTest(new String[] {
+			"X.java",
+			"public class X {\n" + 
+			"    static final int i;\n" + 
+			"    static {\n" +
+			"        i = 0;\n" + 
+			"        assert i == 0;\n" + 
+			"        System.out.println(i);\n" + 
+			"    }\n" + 
+			"}"
+		},
+		"");
+	}
+	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=328361
+	public void test020() throws Exception {
+		this.runNegativeTest(
+			new String[] {
+					"X.java",
+					"public class X {\n" +
+						"    void method1() {\n" +
+						"		 int i;" +	
+						"        assert (i = 0) == 0;\n" +	
+						"        System.out.println(i);\n" +	
+						"    }\n" +	
+						"}\n"	
+			},
+			"----------\n" + 
+			"1. ERROR in X.java (at line 4)\n" + 
+			"	System.out.println(i);\n" + 
+			"	                   ^\n" + 
+			"The local variable i may not have been initialized\n" + 
+			"----------\n");
+	}
+	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=328361
+	public void test021() throws Exception {
+		this.runNegativeTest(
+			new String[] {
+				"X.java",
+				"public class X {\n" +
+					"	public int bar() {\n" +
+					"		return 1;\n" +
+					"	}\n" +
+					"    void method1() {\n" +
+						"		 int i;" +	
+						"        assert (i = this.bar()) == 0;\n" +	
+						"        System.out.println(i);\n" +	
+						"    }\n" +	
+						"}\n"	
+			},
+			"----------\n" + 
+			"1. ERROR in X.java (at line 7)\n" + 
+			"	System.out.println(i);\n" + 
+			"	                   ^\n" + 
+			"The local variable i may not have been initialized\n" + 
+			"----------\n");
+	}
+	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=328361
+	public void test022() throws Exception {
+		this.runNegativeTest(
+			new String[] {
+				"X.java",
+				"public class X {\n" +
+					"	public int bar() {\n" +
+					"		return 1;\n" +
+					"	}\n" +
+					"    void method1() {\n" +
+						"		 int i;\n" +	
+						"        assert i++ == 0;\n" +	
+						"        System.out.println(i);\n" +	
+						"    }\n" +	
+						"}\n"	
+			},
+			"----------\n" + 
+			"1. ERROR in X.java (at line 7)\n" + 
+			"	assert i++ == 0;\n" + 
+			"	       ^\n" + 
+			"The local variable i may not have been initialized\n" + 
+			"----------\n" + 
+			"2. ERROR in X.java (at line 8)\n" + 
+			"	System.out.println(i);\n" + 
+			"	                   ^\n" + 
+			"The local variable i may not have been initialized\n" + 
+			"----------\n");
+	}
 }
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/AssignmentTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/AssignmentTest.java
index d173e09..42ccda4 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/AssignmentTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/AssignmentTest.java
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann <stephan@cs.tu-berlin.de> - Contribution for bug 185682 - Increment/decrement operators mark local variables as read
  *******************************************************************************/
 package org.eclipse.jdt.core.tests.compiler.regression;
 
@@ -223,12 +224,12 @@
 		"1. WARNING in X.java (at line 4)\n" +
 		"	private final Object o;\n" +
 		"	                     ^\n" +
-		"The field X.Test1.o is never read locally\n" +
+		"The value of the field X.Test1.o is not used\n" +
 		"----------\n" +
 		"2. WARNING in X.java (at line 13)\n" +
 		"	private final Object o;\n" +
 		"	                     ^\n" +
-		"The field X.Test2.o is never read locally\n" +
+		"The value of the field X.Test2.o is not used\n" +
 		"----------\n" +
 		"3. ERROR in X.java (at line 25)\n" +
 		"	System.out.println(o); // illegal; o is not definitely assigned\n" +
@@ -238,7 +239,7 @@
 		"4. WARNING in X.java (at line 42)\n" +
 		"	private final Object o;\n" +
 		"	                     ^\n" +
-		"The field X.Test5.o is never read locally\n" +
+		"The value of the field X.Test5.o is not used\n" +
 		"----------\n" +
 		"5. ERROR in X.java (at line 44)\n" +
 		"	Test5() {\n" +
@@ -253,7 +254,7 @@
 		"7. WARNING in X.java (at line 52)\n" +
 		"	private final Object o;\n" +
 		"	                     ^\n" +
-		"The field X.Test6.o is never read locally\n" +
+		"The value of the field X.Test6.o is not used\n" +
 		"----------\n" +
 		"8. ERROR in X.java (at line 59)\n" +
 		"	other.o = new Object(); // illegal!  other.o is not assignable\n" +
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/BatchCompilerTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/BatchCompilerTest.java
index 66bd0f1..caa85bf 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/BatchCompilerTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/BatchCompilerTest.java
@@ -10,6 +10,7 @@
  *     Benjamin Muskalla - Contribution for bug 239066
  *     Stephan Herrmann  - Contribution for bug 236385
  *     Stephan Herrmann  - Contribution for bug 295551
+ *     Stephan Herrmann <stephan@cs.tu-berlin.de> - Contribution for bug 185682 - Increment/decrement operators mark local variables as read
  *     Technical University Berlin - adapted for Object Teams
  *******************************************************************************/
 package org.eclipse.jdt.core.tests.compiler.regression;
@@ -2943,7 +2944,7 @@
 	        "7. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/p/Z.java (at line 58)\n" +
 	        "	final XX<?, XY> l1 = (XX<?, XY>) i.getKey();\n" +
 	        "	                ^^\n" +
-	        "The local variable l1 is never read\n" +
+	        "The value of the local variable l1 is not used\n" +
 	        "----------\n" +
 	        "8. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/p/Z.java (at line 58)\n" +
 	        "	final XX<?, XY> l1 = (XX<?, XY>) i.getKey();\n" +
@@ -3123,7 +3124,7 @@
         "7. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/p/Z.java (at line 58)\n" +
         "	final XX<?, XY> l1 = (XX<?, XY>) i.getKey();\n" +
         "	                ^^\n" +
-        "The local variable l1 is never read\n" +
+        "The value of the local variable l1 is not used\n" +
         "----------\n" +
         "8. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/p/Z.java (at line 58)\n" +
         "	final XX<?, XY> l1 = (XX<?, XY>) i.getKey();\n" +
@@ -6292,7 +6293,7 @@
 		"2. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 5)\n" +
 		"	String u;\n" +
 		"	       ^\n" +
-		"The local variable u is never read\n" +
+		"The value of the local variable u is not used\n" +
 		"----------\n" +
 		"2 problems (2 warnings)",
 		true);
@@ -6379,7 +6380,7 @@
 		"1. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 5)\n" +
 		"	String u;\n" +
 		"	       ^\n" +
-		"The local variable u is never read\n" +
+		"The value of the local variable u is not used\n" +
 		"----------\n" +
 		"1 problem (1 warning)",
 		true);
@@ -6411,7 +6412,7 @@
 		"2. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 5)\n" +
 		"	String u;\n" +
 		"	       ^\n" +
-		"The local variable u is never read\n" +
+		"The value of the local variable u is not used\n" +
 		"----------\n" +
 		"2 problems (2 warnings)",
 		true);
@@ -6438,7 +6439,7 @@
 		"1. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 5)\n" +
 		"	String u;\n" +
 		"	       ^\n" +
-		"The local variable u is never read\n" +
+		"The value of the local variable u is not used\n" +
 		"----------\n" +
 		"1 problem (1 warning)",
 		true);
@@ -6464,7 +6465,7 @@
 		"1. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 5)\n" +
 		"	String u;\n" +
 		"	       ^\n" +
-		"The local variable u is never read\n" +
+		"The value of the local variable u is not used\n" +
 		"----------\n" +
 		"1 problem (1 warning)",
 		true);
@@ -6495,7 +6496,7 @@
 		"2. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 5)\n" +
 		"	String u;\n" +
 		"	       ^\n" +
-		"The local variable u is never read\n" +
+		"The value of the local variable u is not used\n" +
 		"----------\n" +
 		"2 problems (2 warnings)",
 		true);
@@ -6527,7 +6528,7 @@
 		"2. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 5)\n" +
 		"	String u;\n" +
 		"	       ^\n" +
-		"The local variable u is never read\n" +
+		"The value of the local variable u is not used\n" +
 		"----------\n" +
 		"2 problems (2 warnings)",
 		true);
@@ -7628,7 +7629,7 @@
 		"3. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 4)\n" +
 		"	int j;\n" +
 		"	    ^\n" +
-		"The local variable j is never read\n" +
+		"The value of the local variable j is not used\n" +
 		"----------\n" +
 		"4. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 5)\n" +
 		"	this.<String>bar();\n" +
@@ -7691,7 +7692,7 @@
 		"3. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 3)\n" +
 		"	private void foo(int i) throws java.io.IOException {\n" +
 		"	                     ^\n" +
-		"The parameter i is never read\n" +
+		"The value of the parameter i is not used\n" +
 		"----------\n" +
 		"4. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 3)\n" +
 		"	private void foo(int i) throws java.io.IOException {\n" +
@@ -7701,7 +7702,7 @@
 		"5. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 4)\n" +
 		"	int j;\n" +
 		"	    ^\n" +
-		"The local variable j is never read\n" +
+		"The value of the local variable j is not used\n" +
 		"----------\n" +
 		"6. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 5)\n" +
 		"	this.<String>bar();\n" +
@@ -7746,7 +7747,7 @@
 		"1. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 3)\n" +
 		"	private void foo(int i) throws java.io.IOException {\n" +
 		"	                     ^\n" +
-		"The parameter i is never read\n" +
+		"The value of the parameter i is not used\n" +
 		"----------\n" +
 		"1 problem (1 warning)",
 		true);
@@ -7851,7 +7852,7 @@
 		"1. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 4)\n" +
 		"	int j;\n" +
 		"	    ^\n" +
-		"The local variable j is never read\n" +
+		"The value of the local variable j is not used\n" +
 		"----------\n" +
 		"1 problem (1 warning)",
 		true);
@@ -8006,7 +8007,7 @@
 		"4. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 4)\n" +
 		"	int j;\n" +
 		"	    ^\n" +
-		"The local variable j is never read\n" +
+		"The value of the local variable j is not used\n" +
 		"----------\n" +
 		"5. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 5)\n" +
 		"	this.<String>bar();\n" +
@@ -8056,7 +8057,7 @@
 		"2. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 3)\n" +
 		"	private void foo(int i) throws java.io.IOException {\n" +
 		"	                     ^\n" +
-		"The parameter i is never read\n" +
+		"The value of the parameter i is not used\n" +
 		"----------\n" +
 		"3. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 3)\n" +
 		"	private void foo(int i) throws java.io.IOException {\n" +
@@ -8066,7 +8067,7 @@
 		"4. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 4)\n" +
 		"	int j;\n" +
 		"	    ^\n" +
-		"The local variable j is never read\n" +
+		"The value of the local variable j is not used\n" +
 		"----------\n" +
 		"5. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 5)\n" +
 		"	this.<String>bar();\n" +
@@ -8121,7 +8122,7 @@
 		"3. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 3)\n" +
 		"	private void foo(int i) throws java.io.IOException {\n" +
 		"	                     ^\n" +
-		"The parameter i is never read\n" +
+		"The value of the parameter i is not used\n" +
 		"----------\n" +
 		"4. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 3)\n" +
 		"	private void foo(int i) throws java.io.IOException {\n" +
@@ -8131,7 +8132,7 @@
 		"5. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 4)\n" +
 		"	int j;\n" +
 		"	    ^\n" +
-		"The local variable j is never read\n" +
+		"The value of the local variable j is not used\n" +
 		"----------\n" +
 		"6. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 5)\n" +
 		"	this.<String>bar();\n" +
@@ -8181,7 +8182,7 @@
 		"3. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 3)\n" +
 		"	private void foo(int i) throws java.io.IOException {\n" +
 		"	                     ^\n" +
-		"The parameter i is never read\n" +
+		"The value of the parameter i is not used\n" +
 		"----------\n" +
 		"4. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 3)\n" +
 		"	private void foo(int i) throws java.io.IOException {\n" +
@@ -8236,7 +8237,7 @@
 		"2. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 3)\n" +
 		"	private void foo(int i) throws java.io.IOException {\n" +
 		"	                     ^\n" +
-		"The parameter i is never read\n" +
+		"The value of the parameter i is not used\n" +
 		"----------\n" +
 		"3. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 3)\n" +
 		"	private void foo(int i) throws java.io.IOException {\n" +
@@ -8246,7 +8247,7 @@
 		"4. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 4)\n" +
 		"	int j;\n" +
 		"	    ^\n" +
-		"The local variable j is never read\n" +
+		"The value of the local variable j is not used\n" +
 		"----------\n" +
 		"5. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 5)\n" +
 		"	this.<String>bar();\n" +
@@ -8301,12 +8302,12 @@
 		"3. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 3)\n" +
 		"	private void foo(int i) throws java.io.IOException {\n" +
 		"	                     ^\n" +
-		"The parameter i is never read\n" +
+		"The value of the parameter i is not used\n" +
 		"----------\n" +
 		"4. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 4)\n" +
 		"	int j;\n" +
 		"	    ^\n" +
-		"The local variable j is never read\n" +
+		"The value of the local variable j is not used\n" +
 		"----------\n" +
 		"5. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 5)\n" +
 		"	this.<String>bar();\n" +
@@ -8361,7 +8362,7 @@
 		"3. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 3)\n" +
 		"	private void foo(int i) throws java.io.IOException {\n" +
 		"	                     ^\n" +
-		"The parameter i is never read\n" +
+		"The value of the parameter i is not used\n" +
 		"----------\n" +
 		"4. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 3)\n" +
 		"	private void foo(int i) throws java.io.IOException {\n" +
@@ -8371,7 +8372,7 @@
 		"5. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 4)\n" +
 		"	int j;\n" +
 		"	    ^\n" +
-		"The local variable j is never read\n" +
+		"The value of the local variable j is not used\n" +
 		"----------\n" +
 		"6. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 6)\n" +
 		"	next: for (;;) {\n" +
@@ -8444,7 +8445,7 @@
 		"1. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 5)\n" +
 		"	public void foo(int i) {\n" +
 		"	                    ^\n" +
-		"The parameter i is never read\n" +
+		"The value of the parameter i is not used\n" +
 		"----------\n" +
 		"1 problem (1 warning)",
 		true);
@@ -8535,7 +8536,7 @@
 		"2. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 5)\n" +
 		"	public void foo(int i) {\n" +
 		"	                    ^\n" +
-		"The parameter i is never read\n" +
+		"The value of the parameter i is not used\n" +
 		"----------\n" +
 		"2 problems (2 warnings)",
 		true);
@@ -8561,7 +8562,7 @@
 		"1. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 5)\n" +
 		"	public void foo(int i) {\n" +
 		"	                    ^\n" +
-		"The parameter i is never read\n" +
+		"The value of the parameter i is not used\n" +
 		"----------\n" +
 		"1 problem (1 warning)",
 		true);
@@ -9043,7 +9044,7 @@
 		"1. WARNING in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 5)\n" +
 		"	public void foo(int i) {\n" +
 		"	                    ^\n" +
-		"The parameter i is never read\n" +
+		"The value of the parameter i is not used\n" +
 		"----------\n" +
 		"1 problem (1 warning)",
 		true);
@@ -11398,7 +11399,7 @@
 		"2. ERROR in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 3)\n" + 
 		"	private int i;\n" + 
 		"	            ^\n" + 
-		"The field X.i is never read locally\n" + 
+		"The value of the field X.i is not used\n" + 
 		"----------\n" + 
 		"2 problems (1 error, 1 warning)",
 		true);
@@ -11438,7 +11439,7 @@
 		"1. ERROR in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 3)\n" + 
 		"	private int i;\n" + 
 		"	            ^\n" + 
-		"The field X.i is never read locally\n" + 
+		"The value of the field X.i is not used\n" + 
 		"----------\n" + 
 		"1 problem (1 error)",
 		true);
@@ -11461,7 +11462,7 @@
 		"1. ERROR in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 3)\n" + 
 		"	private int i;\n" + 
 		"	            ^\n" + 
-		"The field X.i is never read locally\n" + 
+		"The value of the field X.i is not used\n" + 
 		"----------\n" + 
 		"1 problem (1 error)",
 		true);
@@ -11489,7 +11490,7 @@
 		"2. ERROR in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 3)\n" + 
 		"	private int i;\n" + 
 		"	            ^\n" + 
-		"The field X.i is never read locally\n" + 
+		"The value of the field X.i is not used\n" + 
 		"----------\n" + 
 		"2 problems (1 error, 1 warning)",
 		true);
@@ -11512,7 +11513,7 @@
 		"1. ERROR in ---OUTPUT_DIR_PLACEHOLDER---/X.java (at line 3)\n" + 
 		"	private int i;\n" + 
 		"	            ^\n" + 
-		"The field X.i is never read locally\n" + 
+		"The value of the field X.i is not used\n" + 
 		"----------\n" + 
 		"1 problem (1 error)",
 		true);
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/Compliance_1_4.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/Compliance_1_4.java
index 76d67ab..2bbc588 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/Compliance_1_4.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/Compliance_1_4.java
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann <stephan@cs.tu-berlin.de> - Contribution for bug 185682 - Increment/decrement operators mark local variables as read
  *******************************************************************************/
 package org.eclipse.jdt.core.tests.compiler.regression;
 
@@ -1713,7 +1714,7 @@
 		"1. WARNING in p\\A.java (at line 6)\n" +
 		"	private int i;\n" +
 		"	            ^\n" +
-		"The field A.i is never read locally\n" +
+		"The value of the field A.i is not used\n" +
 		"----------\n" +
 		"2. ERROR in p\\A.java (at line 8)\n" +
 		"	int x = i;\n" +
@@ -1946,7 +1947,7 @@
 		"3. WARNING in p\\FieldQualification.java (at line 6)\n" +
 		"	String field = \"Enclosing field for anonymous type\";\n" +
 		"	       ^^^^^\n" +
-		"The field Local.field is never read locally\n" +
+		"The value of the field Local.field is not used\n" +
 		"----------\n" +
 		"4. WARNING in p\\FieldQualification.java (at line 7)\n" +
 		"	void foo() {\n" +
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest.java
index 155374a..7179a17 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest.java
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann <stephan@cs.tu-berlin.de> - Contribution for bug 282152 - [1.5][compiler] Generics code rejected by Eclipse but accepted by javac
  *******************************************************************************/
 package org.eclipse.jdt.core.tests.compiler.regression;
 
@@ -379,4 +380,138 @@
 			"Incompatible operand types Class<X> and Class<I>\n" + 
 			"----------\n");
 	}
+
+//https://bugs.eclipse.org/bugs/show_bug.cgi?id=282152
+public void test282152() {
+    this.runConformTest(
+        new String[] {
+            "Test.java",
+            "public interface Test<T extends Number> {\n" +
+            "    public <U> void test(Test<? super U> t, U value);\n" +
+            "    public void setValue(T v);" +
+            "}",
+            "Impl.java",
+            "public class Impl<T extends Number> implements Test<T>{\n" +
+            "    T val;" +
+            "    public <U> void test(Test<? super U> t, U value) {\n" +
+            "        t.setValue(value);\n" +
+            "    }\n" +
+            "    public void setValue(T v) {\n" +
+            "        this.val = v;\n" +
+            "    }\n" +
+            "}",
+            "Client.java",
+            "public class Client {\n" +
+            "    void test() {\n" +
+            "        Impl<Integer> t1 = new Impl<Integer>();\n" +
+            "        Double n = Double.valueOf(3.14);\n" +
+            "        t1.test(new Impl<Number>(), n);\n" +
+            "    }\n" +
+            "}\n"
+        },
+        ""); // no specific success output string
+}
+//https://bugs.eclipse.org/bugs/show_bug.cgi?id=282152
+// violating lower bound
+public void test282152b() {
+    this.runNegativeTest(
+        new String[] {
+            "Test.java",
+            "public interface Test<T extends Number> {\n" +
+            "    public <U> void test(Test<? super U> t, U value);\n" +
+            "    public void setValue(T v);" +
+            "}",
+            "Impl.java",
+            "public class Impl<T extends Number> implements Test<T>{\n" +
+            "    T val;" +
+            "    public <U> void test(Test<? super U> t, U value) {\n" +
+            "        t.setValue(value);\n" +
+            "    }\n" +
+            "    public void setValue(T v) {\n" +
+            "        this.val = v;\n" +
+            "    }\n" +
+            "}",
+            "Client.java",
+            "public class Client {\n" +
+            "    void test() {\n" +
+            "        Impl<Integer> t1 = new Impl<Integer>();\n" +
+            "        Number n = Double.valueOf(3.14);\n" +
+            "        t1.test(new Impl<Double>(), n);\n" +
+            "    }\n" +
+            "}\n"
+        },
+        "----------\n" + 
+		"1. ERROR in Client.java (at line 5)\n" + 
+		"	t1.test(new Impl<Double>(), n);\n" + 
+		"	   ^^^^\n" + 
+		"The method test(Test<? super U>, U) in the type Impl<Integer> is not applicable for the arguments (Impl<Double>, Number)\n" + 
+		"----------\n");
+}
+//https://bugs.eclipse.org/bugs/show_bug.cgi?id=282152
+// contradictory bounds
+public void test282152c() {
+    this.runNegativeTest(
+        new String[] {
+            "Test.java",
+            "public interface Test<T extends Number> {\n" +
+            "    public <U extends Exception> void test(Test<? super U> t, U value);\n" +
+            "    public void setValue(T v);" +
+            "}"
+        },
+        "----------\n" + 
+		"1. ERROR in Test.java (at line 2)\n" + 
+		"	public <U extends Exception> void test(Test<? super U> t, U value);\n" + 
+		"	                                            ^^^^^^^^^\n" + 
+		"Bound mismatch: The type ? super U is not a valid substitute for the bounded parameter <T extends Number> of the type Test<T>\n" + 
+		"----------\n");
+}
+//https://bugs.eclipse.org/bugs/show_bug.cgi?id=282152
+// compatible constraints
+public void test282152d() {
+    this.runConformTest(
+        new String[] {
+            "Test.java",
+            "public interface Test<T extends Number> {\n" +
+            "    public <U extends Integer> void test(Test<? super U> t, U value);\n" +
+            "    public void setValue(T v);" +
+            "}",
+            "Impl.java",
+            "public class Impl<T extends Number> implements Test<T>{\n" +
+            "    T val;" +
+            "    public <U extends Integer> void test(Test<? super U> t, U value) {\n" +
+            "        t.setValue(value);\n" +
+            "    }\n" +
+            "    public void setValue(T v) {\n" +
+            "        this.val = v;\n" +
+            "    }\n" +
+            "}",
+            "Client.java",
+            "public class Client {\n" +
+            "    void test() {\n" +
+            "        Impl<Integer> t1 = new Impl<Integer>();\n" +
+            "        Integer i = Integer.valueOf(3);\n" +
+            "        t1.test(new Impl<Integer>(), i);\n" +
+            "    }\n" +
+            "}\n"
+        },
+        ""); // no specific success output string
+}
+//https://bugs.eclipse.org/bugs/show_bug.cgi?id=282152
+// direct use of type variable does not involve capture, thus no merging of constraints happens
+public void test282152e() {
+	this.runNegativeTest(
+	    new String[] {
+	        "Test.java",
+	        "public interface Test<T extends Number> {\n" +
+	        "    public <U> void test(Test<U> t, U value);\n" +
+	        "    public void setValue(T v);" +
+	        "}"
+	    },
+	    "----------\n" + 
+		"1. ERROR in Test.java (at line 2)\n" + 
+		"	public <U> void test(Test<U> t, U value);\n" + 
+		"	                          ^\n" + 
+		"Bound mismatch: The type U is not a valid substitute for the bounded parameter <T extends Number> of the type Test<T>\n" + 
+		"----------\n");
+}
 }
\ No newline at end of file
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/JavadocBugsTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/JavadocBugsTest.java
index 1686c43..c267c86 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/JavadocBugsTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/JavadocBugsTest.java
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann <stephan@cs.tu-berlin.de> - Contribution for bug 185682 - Increment/decrement operators mark local variables as read
  *******************************************************************************/
 package org.eclipse.jdt.core.tests.compiler.regression;
 
@@ -7190,12 +7191,12 @@
 		"1. WARNING in X.java (at line 2)\n" +
 		"	private int unused1;\n" +
 		"	            ^^^^^^^\n" +
-		"The field X.unused1 is never read locally\n" +
+		"The value of the field X.unused1 is not used\n" +
 		"----------\n" +
 		"2. WARNING in X.java (at line 7)\n" +
 		"	private int unused2;\n" +
 		"	            ^^^^^^^\n" +
-		"The field X.unused2 is never read locally\n" +
+		"The value of the field X.unused2 is not used\n" +
 		"----------\n",
 		null, null,
 		JavacTestOptions.Excuse.EclipseHasSomeMoreWarnings
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/JavadocTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/JavadocTest.java
index 07a5b39..e72f71c 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/JavadocTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/JavadocTest.java
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann <stephan@cs.tu-berlin.de> - Contribution for bug 185682 - Increment/decrement operators mark local variables as read
  *******************************************************************************/
 package org.eclipse.jdt.core.tests.compiler.regression;
 
@@ -279,7 +280,7 @@
 		"1. WARNING in test\\AbstractVisibility.java (at line 5)\n" + 
 		"	public int avf_public = avf_private;\n" + 
 		"	           ^^^^^^^^^^\n" + 
-		"The field AbstractVisibility.AvcPrivate.avf_public is never read locally\n" + 
+		"The value of the field AbstractVisibility.AvcPrivate.avf_public is not used\n" + 
 		"----------\n" + 
 		"2. WARNING in test\\AbstractVisibility.java (at line 10)\n" + 
 		"	public int avm_public() {\n" + 
@@ -290,7 +291,7 @@
 		"1. WARNING in test\\Visibility.java (at line 5)\n" + 
 		"	public int vf_public = vf_private;\n" + 
 		"	           ^^^^^^^^^\n" + 
-		"The field Visibility.VcPrivate.vf_public is never read locally\n" + 
+		"The value of the field Visibility.VcPrivate.vf_public is not used\n" + 
 		"----------\n" + 
 		"2. WARNING in test\\Visibility.java (at line 11)\n" + 
 		"	public int vm_public() {\n" + 
@@ -301,7 +302,7 @@
 		"1. WARNING in test\\copy\\VisibilityPackage.java (at line 5)\n" + 
 		"	public int vf_public = vf_private;\n" + 
 		"	           ^^^^^^^^^\n" + 
-		"The field VisibilityPackage.VpPrivate.vf_public is never read locally\n" + 
+		"The value of the field VisibilityPackage.VpPrivate.vf_public is not used\n" + 
 		"----------\n" + 
 		"2. WARNING in test\\copy\\VisibilityPackage.java (at line 10)\n" + 
 		"	public int vm_public() {\n" + 
@@ -312,7 +313,7 @@
 		"1. WARNING in test\\copy\\VisibilityPublic.java (at line 5)\n" + 
 		"	public int vf_public = vf_private;\n" + 
 		"	           ^^^^^^^^^\n" + 
-		"The field VisibilityPublic.VpPrivate.vf_public is never read locally\n" + 
+		"The value of the field VisibilityPublic.VpPrivate.vf_public is not used\n" + 
 		"----------\n" + 
 		"2. WARNING in test\\copy\\VisibilityPublic.java (at line 10)\n" + 
 		"	public int vm_public() {\n" + 
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/LocalVariableTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/LocalVariableTest.java
index 2343ce6..2d92f0d 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/LocalVariableTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/LocalVariableTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann <stephan@cs.tu-berlin.de> - Contribution for bug 185682 - Increment/decrement operators mark local variables as read
  *******************************************************************************/
 package org.eclipse.jdt.core.tests.compiler.regression;
 
@@ -411,7 +412,7 @@
 		"1. ERROR in X.java (at line 7)\n" +
 		"	void bar(int value) { // X#bar(...)\n" +
 		"	             ^^^^^\n" +
-		"The parameter value is never read\n" +
+		"The value of the parameter value is not used\n" +
 		"----------\n",
 		// javac options
 		JavacTestOptions.Excuse.EclipseWarningConfiguredAsError /* javac test options */);
@@ -469,17 +470,17 @@
 		"1. ERROR in X.java (at line 5)\n" +
 		"	void foo(int value) { // X#foo(...)\n" +
 		"	             ^^^^^\n" +
-		"The parameter value is never read\n" +
+		"The value of the parameter value is not used\n" +
 		"----------\n" +
 		"2. ERROR in X.java (at line 7)\n" +
 		"	void bar(int value) { // X#bar(...)\n" +
 		"	             ^^^^^\n" +
-		"The parameter value is never read\n" +
+		"The value of the parameter value is not used\n" +
 		"----------\n" +
 		"3. ERROR in X.java (at line 24)\n" +
 		"	void parent(int value) { /* Parent#parent(...) */}\n" +
 		"	                ^^^^^\n" +
-		"The parameter value is never read\n" +
+		"The value of the parameter value is not used\n" +
 		"----------\n",
 		// javac options
 		JavacTestOptions.Excuse.EclipseWarningConfiguredAsError /* javac test options */);
@@ -537,17 +538,17 @@
 		"1. ERROR in X.java (at line 5)\n" +
 		"	void foo(int value) { // X#foo(...)\n" +
 		"	             ^^^^^\n" +
-		"The parameter value is never read\n" +
+		"The value of the parameter value is not used\n" +
 		"----------\n" +
 		"2. ERROR in X.java (at line 7)\n" +
 		"	void bar(int value) { // X#bar(...)\n" +
 		"	             ^^^^^\n" +
-		"The parameter value is never read\n" +
+		"The value of the parameter value is not used\n" +
 		"----------\n" +
 		"3. ERROR in X.java (at line 24)\n" +
 		"	void parent(int value) { /* Parent#parent(...) */}\n" +
 		"	                ^^^^^\n" +
-		"The parameter value is never read\n" +
+		"The value of the parameter value is not used\n" +
 		"----------\n",
 		// javac options
 		JavacTestOptions.Excuse.EclipseWarningConfiguredAsError /* javac test options */);
@@ -605,32 +606,32 @@
 		"1. ERROR in X.java (at line 5)\n" +
 		"	void foo(int value) { // X#foo(...)\n" +
 		"	             ^^^^^\n" +
-		"The parameter value is never read\n" +
+		"The value of the parameter value is not used\n" +
 		"----------\n" +
 		"2. ERROR in X.java (at line 7)\n" +
 		"	void bar(int value) { // X#bar(...)\n" +
 		"	             ^^^^^\n" +
-		"The parameter value is never read\n" +
+		"The value of the parameter value is not used\n" +
 		"----------\n" +
 		"3. ERROR in X.java (at line 10)\n" +
 		"	void top(int value) { /* X#top(...)*/}\n" +
 		"	             ^^^^^\n" +
-		"The parameter value is never read\n" +
+		"The value of the parameter value is not used\n" +
 		"----------\n" +
 		"4. ERROR in X.java (at line 11)\n" +
 		"	void parent(int value) { /* X#parent(...) */}\n" +
 		"	                ^^^^^\n" +
-		"The parameter value is never read\n" +
+		"The value of the parameter value is not used\n" +
 		"----------\n" +
 		"5. ERROR in X.java (at line 12)\n" +
 		"	public void doit(int value) { /* X#doit(...) */}\n" +
 		"	                     ^^^^^\n" +
-		"The parameter value is never read\n" +
+		"The value of the parameter value is not used\n" +
 		"----------\n" +
 		"6. ERROR in X.java (at line 24)\n" +
 		"	void parent(int value) { /* Parent#parent(...) */}\n" +
 		"	                ^^^^^\n" +
-		"The parameter value is never read\n" +
+		"The value of the parameter value is not used\n" +
 		"----------\n",
 		// javac options
 		JavacTestOptions.Excuse.EclipseWarningConfiguredAsError /* javac test options */);
@@ -683,32 +684,32 @@
 		"1. ERROR in X.java (at line 3)\n" +
 		"	void foo(int value) { // X#foo(...)\n" +
 		"	             ^^^^^\n" +
-		"The parameter value is never read\n" +
+		"The value of the parameter value is not used\n" +
 		"----------\n" +
 		"2. ERROR in X.java (at line 5)\n" +
 		"	void bar(int value) { // X#bar(...)\n" +
 		"	             ^^^^^\n" +
-		"The parameter value is never read\n" +
+		"The value of the parameter value is not used\n" +
 		"----------\n" +
 		"3. ERROR in X.java (at line 9)\n" +
 		"	void top(int value) { /* X#top(...)*/}\n" +
 		"	             ^^^^^\n" +
-		"The parameter value is never read\n" +
+		"The value of the parameter value is not used\n" +
 		"----------\n" +
 		"4. ERROR in X.java (at line 11)\n" +
 		"	void parent(int value) { /* X#parent(...) */}\n" +
 		"	                ^^^^^\n" +
-		"The parameter value is never read\n" +
+		"The value of the parameter value is not used\n" +
 		"----------\n" +
 		"5. ERROR in X.java (at line 13)\n" +
 		"	public void doit(int value) { /* X#doit(...) */}\n" +
 		"	                     ^^^^^\n" +
-		"The parameter value is never read\n" +
+		"The value of the parameter value is not used\n" +
 		"----------\n" +
 		"6. ERROR in X.java (at line 21)\n" +
 		"	void parent(int value) { /* Parent#parent(...) */}\n" +
 		"	                ^^^^^\n" +
-		"The parameter value is never read\n" +
+		"The value of the parameter value is not used\n" +
 		"----------\n",
 		// javac options
 		JavacTestOptions.Excuse.EclipseWarningConfiguredAsError /* javac test options */);
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/LookupTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/LookupTest.java
index f057a10..a1e545c 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/LookupTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/LookupTest.java
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann <stephan@cs.tu-berlin.de> - Contribution for bug 185682 - Increment/decrement operators mark local variables as read
  *******************************************************************************/
 package org.eclipse.jdt.core.tests.compiler.regression;
 
@@ -94,7 +95,7 @@
 		"1. WARNING in p1\\A.java (at line 3)\n" +
 		"	private int value;								\n" +
 		"	            ^^^^^\n" +
-		"The field A.value is never read locally\n" +
+		"The value of the field A.value is not used\n" +
 		"----------\n" +
 		"2. ERROR in p1\\A.java (at line 6)\n" +
 		"	value = 2;								\n" +
@@ -344,7 +345,7 @@
 		"1. WARNING in p1\\A.java (at line 3)\n" +
 		"	private String success = \"SUCCESS\";			\n" +
 		"	               ^^^^^^^\n" +
-		"The field A.success is never read locally\n" +
+		"The value of the field A.success is not used\n" +
 		"----------\n" +
 		"2. ERROR in p1\\A.java (at line 7)\n" +
 		"	public void aTask() {System.out.println(A.success);}\n" +
@@ -2263,7 +2264,7 @@
 				"1. WARNING in com\\internap\\other\\ScopeExample.java (at line 4)\r\n" +
 				"	private static final String LOGGER = \"FAILED\";\r\n" +
 				"	                            ^^^^^^\n" +
-				"The field ScopeExample.LOGGER is never read locally\n" +
+				"The value of the field ScopeExample.LOGGER is not used\n" +
 				"----------\n" +
 				"2. ERROR in com\\internap\\other\\ScopeExample.java (at line 8)\r\n" +
 				"	System.out.println(LOGGER);\r\n" +
@@ -2654,7 +2655,7 @@
 		"1. WARNING in X.java (at line 2)\n" +
 		"	private String value;\n" +
 		"	               ^^^^^\n" +
-		"The field D.value is never read locally\n" +
+		"The value of the field D.value is not used\n" +
 		"----------\n" +
 		"2. ERROR in X.java (at line 13)\n" +
 		"	super(getValue());\n" +
@@ -3264,12 +3265,12 @@
 		"2. WARNING in B.java (at line 3)\n" + 
 		"	public final String length = \"very long\";\n" + 
 		"	                    ^^^^^^\n" + 
-		"The field A.B.length is never read locally\n" + 
+		"The value of the field A.B.length is not used\n" + 
 		"----------\n" + 
 		"3. WARNING in B.java (at line 5)\n" + 
 		"	private int [] B = new int[5];\n" + 
 		"	               ^\n" + 
-		"The field A.B is never read locally\n" + 
+		"The value of the field A.B is not used\n" + 
 		"----------\n" + 
 		"4. ERROR in B.java (at line 9)\n" + 
 		"	System.out.println(A.B.length);\n" + 
@@ -3298,12 +3299,12 @@
 		"1. WARNING in B.java (at line 3)\n" + 
 		"	private final String length = \"very long\";\n" + 
 		"	                     ^^^^^^\n" + 
-		"The field A.B.length is never read locally\n" + 
+		"The value of the field A.B.length is not used\n" + 
 		"----------\n" + 
 		"2. WARNING in B.java (at line 5)\n" + 
 		"	private int [] B = new int[5];\n" + 
 		"	               ^\n" + 
-		"The field A.B is never read locally\n" + 
+		"The value of the field A.B is not used\n" + 
 		"----------\n" + 
 		"3. ERROR in B.java (at line 9)\n" + 
 		"	System.out.println(A.B.length);\n" + 
@@ -3338,17 +3339,17 @@
 		"1. WARNING in A.java (at line 2)\n" + 
 		"	private int x;\n" + 
 		"	            ^\n" + 
-		"The field A.x is never read locally\n" + 
+		"The value of the field A.x is not used\n" + 
 		"----------\n" + 
 		"2. WARNING in A.java (at line 4)\n" + 
 		"	private int x;\n" + 
 		"	            ^\n" + 
-		"The field A.B.x is never read locally\n" + 
+		"The value of the field A.B.x is not used\n" + 
 		"----------\n" + 
 		"3. WARNING in A.java (at line 5)\n" + 
 		"	private C c = new C() {\n" + 
 		"	          ^\n" + 
-		"The field A.B.c is never read locally\n" + 
+		"The value of the field A.B.c is not used\n" + 
 		"----------\n" + 
 		"4. WARNING in A.java (at line 6)\n" + 
 		"	void foo() {\n" + 
@@ -3363,7 +3364,7 @@
 		"6. WARNING in A.java (at line 12)\n" + 
 		"	private int x;\n" + 
 		"	            ^\n" + 
-		"The field A.C.x is never read locally\n" + 
+		"The value of the field A.C.x is not used\n" + 
 		"----------\n");
 }
 // https://bugs.eclipse.org/bugs/show_bug.cgi?id=316956
@@ -3393,17 +3394,17 @@
 		"1. WARNING in A.java (at line 2)\n" + 
 		"	private int x;\n" + 
 		"	            ^\n" + 
-		"The field A.x is never read locally\n" + 
+		"The value of the field A.x is not used\n" + 
 		"----------\n" + 
 		"2. WARNING in A.java (at line 4)\n" + 
 		"	private int x;\n" + 
 		"	            ^\n" + 
-		"The field A.B.x is never read locally\n" + 
+		"The value of the field A.B.x is not used\n" + 
 		"----------\n" + 
 		"3. WARNING in A.java (at line 5)\n" + 
 		"	private C c = new C() {\n" + 
 		"	          ^\n" + 
-		"The field A.B.c is never read locally\n" + 
+		"The value of the field A.B.c is not used\n" + 
 		"----------\n" + 
 		"4. WARNING in A.java (at line 6)\n" + 
 		"	void foo() {\n" + 
@@ -3435,12 +3436,12 @@
 		"1. WARNING in A.java (at line 2)\n" + 
 		"	private int x;\n" + 
 		"	            ^\n" + 
-		"The field A.x is never read locally\n" + 
+		"The value of the field A.x is not used\n" + 
 		"----------\n" + 
 		"2. WARNING in A.java (at line 3)\n" + 
 		"	private C c = new C() {\n" + 
 		"	          ^\n" + 
-		"The field A.c is never read locally\n" + 
+		"The value of the field A.c is not used\n" + 
 		"----------\n" + 
 		"3. WARNING in A.java (at line 4)\n" + 
 		"	void foo() {\n" + 
@@ -3455,7 +3456,7 @@
 		"5. WARNING in A.java (at line 9)\n" + 
 		"	private int x;\n" + 
 		"	            ^\n" + 
-		"The field A.C.x is never read locally\n" + 
+		"The value of the field A.C.x is not used\n" + 
 		"----------\n");
 }
 public static Class testClass() {	return LookupTest.class;
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/MethodVerifyTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/MethodVerifyTest.java
index 297b5b2..8c62e5e 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/MethodVerifyTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/MethodVerifyTest.java
@@ -11010,7 +11010,7 @@
 		"Name clash: The method foo(T) of type Interface<T> has the same erasure as foo(T) of type Base<T> but does not override it\n" + 
 		"----------\n");
 }
-//https://bugs.eclipse.org/bugs/show_bug.cgi?id=324850 
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=324850 
 public void _test213() {
 	Map compilerOptions15 = getCompilerOptions();
 	compilerOptions15.put(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, JavaCore.VERSION_1_5);
@@ -11061,4 +11061,25 @@
 		compilerOptions14,
 		null);
 }
+public void test326354() {
+	this.runConformTest(
+			new String[] {
+					"X.java",
+					"public class X extends Y<I>  implements I {\n" +
+					"    public static void main(String[] args) {\n" +
+					"        ((I) new X()).foo(null);\n" +
+					"    }\n" +
+					"}\n" +
+					"\n" +
+					"interface I {\n" +
+					"    public void foo(I i);\n" +
+					"}\n" +
+					" \n" +
+					"abstract class Y<T> {\n" +
+					"	   public void foo(T t) {}\n" +
+					"}\n"
+			},
+			""
+	);
+}
 }
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/ProblemConstructorTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/ProblemConstructorTest.java
index 4aee3b4..828a73b 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/ProblemConstructorTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/ProblemConstructorTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann <stephan@cs.tu-berlin.de> - Contribution for bug 185682 - Increment/decrement operators mark local variables as read
  *******************************************************************************/
 package org.eclipse.jdt.core.tests.compiler.regression;
 
@@ -185,7 +186,7 @@
 		"3. WARNING in X.java (at line 6)\n" + 
 		"	public int unusedField = 0;\n" + 
 		"	           ^^^^^^^^^^^\n" + 
-		"The field X.M.unusedField is never read locally\n" + 
+		"The value of the field X.M.unusedField is not used\n" + 
 		"----------\n" + 
 		"4. WARNING in X.java (at line 7)\n" + 
 		"	public class N {}\n" + 
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/ProgrammingProblemsTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/ProgrammingProblemsTest.java
index 0b2db7a..56ae7e3 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/ProgrammingProblemsTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/ProgrammingProblemsTest.java
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann <stephan@cs.tu-berlin.de> - Contribution for bug 185682 - Increment/decrement operators mark local variables as read
  *******************************************************************************/
 package org.eclipse.jdt.core.tests.compiler.regression;
 
@@ -143,7 +144,7 @@
 		"1. WARNING in X.java (at line 2)\r\n" +
 		"	public void foo(boolean b) {\r\n" +
 		"	                        ^\n" +
-		"The parameter b is never read\n" +
+		"The value of the parameter b is not used\n" +
 		"----------\n" /* expectedCompilerLog */,
 		"" /* expectedOutputString */,
 		false /* forceExecution */,
@@ -214,7 +215,7 @@
 		"1. WARNING in X.java (at line 3)\n" +
 		"	public void foo(boolean b) {\n" +
 		"	                        ^\n" +
-		"The parameter b is never read\n" +
+		"The value of the parameter b is not used\n" +
 		"----------\n" /* expectedCompilerLog */,
 		"" /* expectedOutputString */,
 		false /* forceExecution */,
@@ -279,7 +280,7 @@
 		"1. ERROR in X.java (at line 2)\r\n" +
 		"	public void foo(boolean b) {\r\n" +
 		"	                        ^\n" +
-		"The parameter b is never read\n" +
+		"The value of the parameter b is not used\n" +
 		"----------\n" /* expectedCompilerLog */,
 		"" /* expectedOutputString */,
 		false /* forceExecution */,
@@ -555,7 +556,7 @@
 		"1. WARNING in X.java (at line 3)\n" +
 		"	void foo(int unused) throws IOException {}\n" +
 		"	             ^^^^^^\n" +
-		"The parameter unused is never read\n" +
+		"The value of the parameter unused is not used\n" +
 		"----------\n" +
 		"2. ERROR in X.java (at line 3)\n" +
 		"	void foo(int unused) throws IOException {}\n" +
@@ -594,7 +595,7 @@
 		"1. WARNING in X.java (at line 3)\n" +
 		"	void foo(int unused) throws IOException {}\n" +
 		"	             ^^^^^^\n" +
-		"The parameter unused is never read\n" +
+		"The value of the parameter unused is not used\n" +
 		"----------\n" +
 		"2. WARNING in X.java (at line 3)\n" +
 		"	void foo(int unused) throws IOException {}\n" +
@@ -631,7 +632,7 @@
 		"1. ERROR in X.java (at line 2)\n" +
 		"	public X(boolean b) {\n" +
 		"	                 ^\n" +
-		"The parameter b is never read\n" +
+		"The value of the parameter b is not used\n" +
 		"----------\n" /* expectedCompilerLog */,
 		"" /* expectedOutputString */,
 		false /* forceExecution */,
@@ -1683,4 +1684,441 @@
 		"The assignment to variable nvx has no effect\n" + 
 		"----------\n");
 }
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=185682
+public void test0046() {
+	if (this.complianceLevel < ClassFileConstants.JDK1_5)
+		return;
+	Map customOptions = getCompilerOptions();
+	customOptions.put(CompilerOptions.OPTION_ReportUnusedLocal, CompilerOptions.WARNING);
+	this.runNegativeTest(
+			new String[] {
+				"X.java",
+				"class X {\n" + 
+				"    int foo() {\n" + 
+				"        int i=1;\n" + 
+				"        boolean b=false;\n" + 
+				"        b|=true;\n" + 			// not a relevant usage
+				"        int k = 2;\n" + 
+				"        --k;\n" + 				// not a relevant usage
+				"        k+=3;\n" + 			// not a relevant usage
+				"        Integer j = 3;\n" + 
+				"        j++;\n" + 				// relevant because unboxing is involved
+				"        i++;\n" +				// not relevant but should still not report because next is relevant
+				"        return i++;\n" + 		// value after increment is used
+				"    }\n" + 
+				"}"
+			},
+			"----------\n" + 
+			"1. WARNING in X.java (at line 4)\n" + 
+			"	boolean b=false;\n" + 
+			"	        ^\n" + 
+			"The value of the local variable b is not used\n" + 
+			"----------\n" + 
+			"2. WARNING in X.java (at line 6)\n" + 
+			"	int k = 2;\n" + 
+			"	    ^\n" + 
+			"The value of the local variable k is not used\n" + 
+			"----------\n",
+			null/*classLibraries*/,
+			true/*shouldFlushOutputDirectory*/,
+			customOptions);
+}
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=185682
+// variant with private fields instead of locals
+public void test0046_field() {
+	if (this.complianceLevel < ClassFileConstants.JDK1_5)
+		return;
+	Map customOptions = getCompilerOptions();
+	customOptions.put(CompilerOptions.OPTION_ReportUnusedLocal, CompilerOptions.WARNING);
+	this.runNegativeTest(
+			new String[] {
+				"X.java",
+				"class X {\n" + 
+				"    private int i=1;\n" + 
+				"    private boolean b=false;\n" + 
+				"    private int k = 2;\n" + 
+				"    private Integer j = 3;\n" + 
+				"    int foo() {\n" + 
+				"        b|=true;\n" + 			// not a relevant usage
+				"        --k;\n" + 				// not a relevant usage
+				"        k+=3;\n" + 			// not a relevant usage
+				"        j++;\n" + 				// relevant because unboxing is involved
+				"        return i++;\n" + 		// value after increment is used
+				"    }\n" + 
+				"}"
+			},
+			"----------\n" + 
+			"1. WARNING in X.java (at line 3)\n" + 
+			"	private boolean b=false;\n" + 
+			"	                ^\n" + 
+			"The value of the field X.b is not used\n" + 
+			"----------\n" + 
+			"2. WARNING in X.java (at line 4)\n" + 
+			"	private int k = 2;\n" + 
+			"	            ^\n" + 
+			"The value of the field X.k is not used\n" + 
+			"----------\n",
+			null/*classLibraries*/,
+			true/*shouldFlushOutputDirectory*/,
+			customOptions);
+}
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=185682
+// variant with private fields instead of locals - this-qualified access
+public void test0046_field_this_qualified() {
+	if (this.complianceLevel < ClassFileConstants.JDK1_5)
+		return;
+	Map customOptions = getCompilerOptions();
+	customOptions.put(CompilerOptions.OPTION_ReportUnusedLocal, CompilerOptions.WARNING);
+	this.runNegativeTest(
+			new String[] {
+				"X.java",
+				"class X {\n" + 
+				"    private int i=1;\n" + 
+				"    private boolean b=false;\n" + 
+				"    private int k = 2;\n" + 
+				"    private Integer j = 3;\n" + 
+				"    int foo() {\n" + 
+				"        this.b|=true;\n" + 		// not a relevant usage
+				"        --this.k;\n" + 			// not a relevant usage
+				"        getThis().k+=3;\n" + 		// not a relevant usage
+				"        this.j++;\n" + 			// relevant because unboxing is involved
+				"        return this.i++;\n" + 		// value after increment is used
+				"    }\n" +
+				"    X getThis() { return this; }\n" + 
+				"}"
+			},
+			"----------\n" + 
+			"1. WARNING in X.java (at line 3)\n" + 
+			"	private boolean b=false;\n" + 
+			"	                ^\n" + 
+			"The value of the field X.b is not used\n" + 
+			"----------\n" + 
+			"2. WARNING in X.java (at line 4)\n" + 
+			"	private int k = 2;\n" + 
+			"	            ^\n" + 
+			"The value of the field X.k is not used\n" + 
+			"----------\n",
+			null/*classLibraries*/,
+			true/*shouldFlushOutputDirectory*/,
+			customOptions);
+}
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=185682
+// variant with private fields instead of locals - regular qualified access
+public void test0046_field_qualified() {
+	if (this.complianceLevel < ClassFileConstants.JDK1_5)
+		return;
+	Map customOptions = getCompilerOptions();
+	customOptions.put(CompilerOptions.OPTION_ReportUnusedLocal, CompilerOptions.WARNING);
+	this.runNegativeTest(
+			new String[] {
+				"X.java",
+				"class X {\n" + 
+				"    private int i=1;\n" + 
+				"    private boolean b=false;\n" + 
+				"    private int k = 2;\n" + 
+				"    private Integer j = 3;\n" + 
+				"    int foo(X that) {\n" + 
+				"        that.b|=true;\n" + 		// not a relevant usage
+				"        --that.k;\n" + 			// not a relevant usage
+				"        that.k+=3;\n" + 			// not a relevant usage
+				"        that.j++;\n" + 			// relevant because unboxing is involved
+				"        that.i++;\n"+				// not relevant but should still not report because next is relevant
+				"        return that.i++;\n" + 		// value after increment is used
+				"    }\n" + 
+				"}"
+			},
+			"----------\n" + 
+			"1. WARNING in X.java (at line 3)\n" + 
+			"	private boolean b=false;\n" + 
+			"	                ^\n" + 
+			"The value of the field X.b is not used\n" + 
+			"----------\n" + 
+			"2. WARNING in X.java (at line 4)\n" + 
+			"	private int k = 2;\n" + 
+			"	            ^\n" + 
+			"The value of the field X.k is not used\n" + 
+			"----------\n",
+			null/*classLibraries*/,
+			true/*shouldFlushOutputDirectory*/,
+			customOptions);
+}
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=185682
+// variant with fields inside a private type
+public void test0046_field_in_private_type() {
+	if (this.complianceLevel < ClassFileConstants.JDK1_5)
+		return;
+	Map customOptions = getCompilerOptions();
+	customOptions.put(CompilerOptions.OPTION_ReportUnusedLocal, CompilerOptions.WARNING);
+	this.runNegativeTest(
+			new String[] {
+				"X.java",
+				"class X {\n" +
+				"    private class Y {\n" + 
+				"        int i=1;\n" + 
+				"        public boolean b=false;\n" + 
+				"        protected int k = 2;\n" + 
+				"        Integer j = 3;\n" +
+				"    }\n" + 
+				"    int foo(Y y) {\n" + 
+				"        y.b|=true;\n" + 				// not a relevant usage
+				"        --y.k;\n" + 					// not a relevant usage
+				"        y.k+=3;\n" + 					// not a relevant usage
+				"        y.j++;\n" + 					// relevant because unboxing is involved
+				"        int result = y.i++;\n" + 	// value after increment is used
+				"        y.i++;\n" +					// not relevant, but previous is
+				"        return result;\n" +
+				"    }\n" + 
+				"}"
+			},
+			"----------\n" + 
+			"1. WARNING in X.java (at line 4)\n" + 
+			"	public boolean b=false;\n" + 
+			"	               ^\n" + 
+			"The value of the field X.Y.b is not used\n" + 
+			"----------\n" + 
+			"2. WARNING in X.java (at line 5)\n" + 
+			"	protected int k = 2;\n" + 
+			"	              ^\n" + 
+			"The value of the field X.Y.k is not used\n" + 
+			"----------\n",
+			null/*classLibraries*/,
+			true/*shouldFlushOutputDirectory*/,
+			customOptions);
+}
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=185682
+public void test0047() {
+	if (this.complianceLevel < ClassFileConstants.JDK1_5)
+		return;
+	Map customOptions = getCompilerOptions();
+	customOptions.put(CompilerOptions.OPTION_ReportUnusedParameter, CompilerOptions.WARNING);
+	customOptions.put(CompilerOptions.OPTION_ReportUnusedLocal, CompilerOptions.WARNING);
+	this.runNegativeTest(
+			new String[] {
+				"X.java",
+				"class X {\n" + 
+				"    void foo(int param1, int param2, Integer param3) {\n" + 
+				"        boolean b=false;\n" + 
+				"        b|=true;\n" + 			// not a relevant usage
+				"        param1++;\n" + 		// not a relevant usage
+				"        {\n" +
+				"            int val=23;\n" +
+				"            param2 += val;\n" +// not a relevant usage of param2
+				"        }\n" +
+				"        param3++;\n" + 		// relevant because unboxing is involved
+				"    }\n" + 
+				"}"
+			},
+			"----------\n" + 
+			"1. WARNING in X.java (at line 2)\n" + 
+			"	void foo(int param1, int param2, Integer param3) {\n" + 
+			"	             ^^^^^^\n" + 
+			"The value of the parameter param1 is not used\n" + 
+			"----------\n" + 
+			"2. WARNING in X.java (at line 2)\n" + 
+			"	void foo(int param1, int param2, Integer param3) {\n" + 
+			"	                         ^^^^^^\n" + 
+			"The value of the parameter param2 is not used\n" + 
+			"----------\n" + 
+			"3. WARNING in X.java (at line 3)\n" + 
+			"	boolean b=false;\n" + 
+			"	        ^\n" + 
+			"The value of the local variable b is not used\n" + 
+			"----------\n",
+			null/*classLibraries*/,
+			true/*shouldFlushOutputDirectory*/,
+			customOptions);
+}
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=185682
+// To verify that unused parameter warning is not shown for an implementing method's parameter when
+// CompilerOptions.OPTION_ReportUnusedParameterWhenImplementingAbstract is disabled
+public void test0048() {
+	if (this.complianceLevel < ClassFileConstants.JDK1_5)
+		return;
+	Map customOptions = getCompilerOptions();
+	customOptions.put(CompilerOptions.OPTION_ReportUnusedParameter, CompilerOptions.WARNING);
+	customOptions.put(CompilerOptions.OPTION_ReportUnusedParameterWhenImplementingAbstract, CompilerOptions.DISABLED);
+	customOptions.put(CompilerOptions.OPTION_ReportUnusedLocal, CompilerOptions.WARNING);
+	this.runNegativeTest(
+			new String[] {
+				"X.java",
+				"public class X extends A implements Y{\n" + 
+				"   public void foo(int param1, int param2, Integer param3) {\n" + // implementing method, so dont warn
+				"        boolean b=false;\n" + 
+				"        b|=true;\n" + 			// not a relevant usage
+				"        param1++;\n" + 		// not a relevant usage
+				"        param2 += 1;\n" + 		// not a relevant usage
+				"        param3++;\n" + 		// relevant because unboxing is involved
+				"    }\n" + 
+				"   public void foo(int param1, int param2) {\n" + // warn
+				"        boolean b=false;\n" + 
+				"        b|=true;\n" + 			// not a relevant usage
+				"        param1++;\n" + 		// not a relevant usage
+				"        param2 += 1;\n" + 		// not a relevant usage
+				"    }\n" +
+				"   public void bar(int param1, int param2, Integer param3) {\n" + // implementing method, so dont warn
+				"        param1++;\n" + 		// not a relevant usage
+				"        param2 += 1;\n" + 		// not a relevant usage
+				"        param3++;\n" + 		// relevant because unboxing is involved
+				"    }\n" +
+				"}\n" +
+				"interface Y{\n" +
+				"	public void foo(int param1, int param2, Integer param3);" +
+				"}\n" +
+				"abstract class A{\n" +
+				"	public abstract void bar(int param1, int param2, Integer param3);" +
+				"}\n"
+			},
+			"----------\n" + 
+			"1. WARNING in X.java (at line 3)\n" + 
+			"	boolean b=false;\n" + 
+			"	        ^\n" + 
+			"The value of the local variable b is not used\n" + 
+			"----------\n" + 
+			"2. WARNING in X.java (at line 9)\n" + 
+			"	public void foo(int param1, int param2) {\n" + 
+			"	                    ^^^^^^\n" + 
+			"The value of the parameter param1 is not used\n" + 
+			"----------\n" + 
+			"3. WARNING in X.java (at line 9)\n" + 
+			"	public void foo(int param1, int param2) {\n" + 
+			"	                                ^^^^^^\n" + 
+			"The value of the parameter param2 is not used\n" + 
+			"----------\n" + 
+			"4. WARNING in X.java (at line 10)\n" + 
+			"	boolean b=false;\n" + 
+			"	        ^\n" + 
+			"The value of the local variable b is not used\n" + 
+			"----------\n",
+			null/*classLibraries*/,
+			true/*shouldFlushOutputDirectory*/,
+			customOptions);
+}
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=185682
+// To verify that unused parameter warning is not shown for an overriding method's parameter when
+// CompilerOptions.OPTION_ReportUnusedParameterWhenOverridingConcrete is disabled
+public void test0049() {
+	if (this.complianceLevel < ClassFileConstants.JDK1_5)
+		return;
+	Map customOptions = getCompilerOptions();
+	customOptions.put(CompilerOptions.OPTION_ReportUnusedParameter, CompilerOptions.WARNING);
+	customOptions.put(CompilerOptions.OPTION_ReportUnusedParameterWhenOverridingConcrete, CompilerOptions.DISABLED);
+	customOptions.put(CompilerOptions.OPTION_ReportUnusedLocal, CompilerOptions.WARNING);
+	this.runNegativeTest(
+			new String[] {
+				"X.java",
+				"public class X extends A {\n" + 
+				"   public void foo(int param1, int param2, Integer param3) {\n" + // overriding method, so dont warn
+				"        boolean b=false;\n" + 
+				"        b|=true;\n" + 			// not a relevant usage
+				"        param1++;\n" + 		// not a relevant usage
+				"        param2 += 1;\n" + 		// not a relevant usage
+				"        param3++;\n" + 		// relevant because unboxing is involved
+				"    }\n" + 
+				"   public void foo(int param1, Integer param3) {\n" + // overriding method, so dont warn
+				"        param1++;\n" + 		// not a relevant usage
+				"        param3++;\n" + 		// relevant because unboxing is involved
+				"    }\n" + 
+				"}\n" +
+				"class A{\n" +
+				"   public void foo(int param1, int param2, Integer param3) {\n" +
+				"        param1 -=1;\n" + 		// not a relevant usage
+				"        param2--;\n" + 		// not a relevant usage
+				"        param3--;\n" + 		// relevant because unboxing is involved
+				"    }\n" + 
+				"}\n"
+			},
+			"----------\n" + 
+			"1. WARNING in X.java (at line 3)\n" + 
+			"	boolean b=false;\n" + 
+			"	        ^\n" + 
+			"The value of the local variable b is not used\n" + 
+			"----------\n" + 
+			"2. WARNING in X.java (at line 9)\n" + 
+			"	public void foo(int param1, Integer param3) {\n" + 
+			"	                    ^^^^^^\n" + 
+			"The value of the parameter param1 is not used\n" + 
+			"----------\n" + 
+			"3. WARNING in X.java (at line 15)\n" + 
+			"	public void foo(int param1, int param2, Integer param3) {\n" + 
+			"	                    ^^^^^^\n" + 
+			"The value of the parameter param1 is not used\n" + 
+			"----------\n" + 
+			"4. WARNING in X.java (at line 15)\n" + 
+			"	public void foo(int param1, int param2, Integer param3) {\n" + 
+			"	                                ^^^^^^\n" + 
+			"The value of the parameter param2 is not used\n" + 
+			"----------\n",
+			null/*classLibraries*/,
+			true/*shouldFlushOutputDirectory*/,
+			customOptions);
+}
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=185682
+// To verify that unused local warning is not shown for locals declared in unreachable code
+public void test0050() {
+	if (this.complianceLevel < ClassFileConstants.JDK1_5)
+		return;
+	Map customOptions = getCompilerOptions();
+	customOptions.put(CompilerOptions.OPTION_ReportUnusedLocal, CompilerOptions.WARNING);
+	this.runNegativeTest(
+			new String[] {
+				"X.java",
+				"class X {\n" + 
+				"    int foo() {\n" + 
+				"        int i=1;\n" +
+				"		 if (false) {\n" + 
+				"        	boolean b=false;\n" + // don't complain as unused
+				"        	b|=true;\n" +
+				"		 }\n" + 			// not a relevant usage
+				"        int k = 2;\n" + 
+				"        --k;\n" + 			// not a relevant usage
+				"        k+=3;\n" + 		// not a relevant usage
+				"        Integer j = 3;\n" + 
+				"        j++;\n" + 			// relevant because unboxing is involved
+				"        return i++;\n" + 	// value after increment is used
+				"    }\n" + 
+				"}"
+			},
+			"----------\n" + 
+			"1. WARNING in X.java (at line 4)\n" + 
+			"	if (false) {\n" + 
+			"        	boolean b=false;\n" + 
+			"        	b|=true;\n" + 
+			"		 }\n" + 
+			"	           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+			"Dead code\n" + 
+			"----------\n" + 
+			"2. WARNING in X.java (at line 8)\n" + 
+			"	int k = 2;\n" + 
+			"	    ^\n" + 
+			"The value of the local variable k is not used\n" + 
+			"----------\n",
+			null/*classLibraries*/,
+			true/*shouldFlushOutputDirectory*/,
+			customOptions);
+}
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=185682
+// To verify that a constructor argument is handled correctly
+public void test0051() {
+	Map customOptions = getCompilerOptions();
+	customOptions.put(CompilerOptions.OPTION_ReportUnusedParameter, CompilerOptions.WARNING);
+	this.runNegativeTest(
+			new String[] {
+					"X.java",
+					"class X {\n" + 
+					"    X(int abc) {\n" + 
+					"        abc++;\n" +    // not a relevant usage
+					"    }\n" + 
+					"}"
+			},
+			"----------\n" + 
+			"1. WARNING in X.java (at line 2)\n" + 
+			"	X(int abc) {\n" + 
+			"	      ^^^\n" + 
+			"The value of the parameter abc is not used\n" + 
+			"----------\n",
+			null/*classLibraries*/,
+			true/*shouldFlushOutputDirectory*/,
+			customOptions);
+}
+
 }
\ No newline at end of file
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/ScannerTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/ScannerTest.java
index 08299d7..cd7b363 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/ScannerTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/ScannerTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -267,10 +267,9 @@
 		char[] source = "0xaapaf".toCharArray(); //$NON-NLS-1$
 		scanner.setSource(source);
 		scanner.resetTo(0, source.length - 1);
-		int counter = 0;
 		try {
 			while (scanner.getNextToken() != ITerminalSymbols.TokenNameEOF) {
-				counter++;
+				// ignore
 			}
 		} catch (InvalidInputException e) {
 			assertTrue(true);
@@ -287,10 +286,9 @@
 		char[] source = "0xaap.1f".toCharArray(); //$NON-NLS-1$
 		scanner.setSource(source);
 		scanner.resetTo(0, source.length - 1);
-		int counter = 0;
 		try {
 			while (scanner.getNextToken() != ITerminalSymbols.TokenNameEOF) {
-				counter++;
+				// ignore
 			}
 		} catch (InvalidInputException e) {
 			assertTrue(true);
@@ -383,10 +381,9 @@
 		char[] source = "0x".toCharArray(); //$NON-NLS-1$
 		scanner.setSource(source);
 		scanner.resetTo(0, source.length - 1);
-		int counter = 0;
 		try {
 			while (scanner.getNextToken() != ITerminalSymbols.TokenNameEOF) {
-				counter++;
+				// ignore
 			}
 		} catch (InvalidInputException e) {
 			assertTrue(true);
@@ -403,10 +400,9 @@
 		char[] source = "0x".toCharArray(); //$NON-NLS-1$
 		scanner.setSource(source);
 		scanner.resetTo(0, source.length - 1);
-		int counter = 0;
 		try {
 			while (scanner.getNextToken() != ITerminalSymbols.TokenNameEOF) {
-				counter++;
+				// ignore
 			}
 		} catch (InvalidInputException e) {
 			assertTrue(true);
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/StaticImportTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/StaticImportTest.java
index a62206d..6c96c2c 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/StaticImportTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/StaticImportTest.java
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann <stephan@cs.tu-berlin.de> - Contribution for bug 185682 - Increment/decrement operators mark local variables as read
  *******************************************************************************/
 package org.eclipse.jdt.core.tests.compiler.regression;
 
@@ -660,7 +661,7 @@
 			"1. WARNING in bug\\C.java (at line 3)\n" +
 			"	private static B b;\n" +
 			"	                 ^\n" +
-			"The field C.b is never read locally\n" +
+			"The value of the field C.b is not used\n" +
 			"----------\n");
 	}
 
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/VarargsTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/VarargsTest.java
index dbb24dd..1514c78 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/VarargsTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/VarargsTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,7 +33,7 @@
 	// All specified tests which does not belong to the class are skipped...
 	static {
 //		TESTS_NAMES = new String[] { "test000" };
-//		TESTS_NUMBERS = new int[] { 60 };
+//		TESTS_NUMBERS = new int[] { 62 };
 //		TESTS_RANGE = new int[] { 11, -1 };
 	}
 	public static Test suite() {
@@ -2168,4 +2168,32 @@
 				"Zork cannot be resolved to a type\n" +
 				"----------\n");
 	}
+	//https://bugs.eclipse.org/bugs/show_bug.cgi?id=328247
+	public void test062() throws Exception {
+		this.runConformTest(
+			new String[] {
+				"X.java",
+				"public class X {\r\n" + 
+				"	private static final String CONST = \"\";\r\n" + 
+				"\r\n" + 
+				"	public static class A {\r\n" + 
+				"		A(Integer i, String... tab) {}\r\n" + 
+				"	}\r\n" + 
+				"	\r\n" + 
+				"	Object foo(final Float f) {\r\n" + 
+				"		return new A(new Integer(0), CONST) {\r\n" + 
+				"			public String toString() {\r\n" + 
+				"				return f.toString();\r\n" + 
+				"			}\r\n" + 
+				"		};\r\n" + 
+				"	}\r\n" + 
+				"}",
+			},
+			"");
+		String expectedOutput =
+			"  // Method descriptor #10 (LX;Ljava/lang/Integer;[Ljava/lang/String;Ljava/lang/Float;)V\n" + 
+			"  // Stack: 3, Locals: 5\n" + 
+			"  X$1(X arg0, java.lang.Integer $anonymous0, java.lang.String... $anonymous1, java.lang.Float arg3);\n";
+		checkDisassembledClassFile(OUTPUT_DIR + File.separator + "X$1.class", "X$1", expectedOutput);
+	}
 }
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/eval/SimpleTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/eval/SimpleTest.java
index 2ec690a..8019e42 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/eval/SimpleTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/eval/SimpleTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -174,7 +174,6 @@
 	int begin = problem.getSourceStart() >= source.length ? source.length - 1 : problem.getSourceStart();
 	int relativeStart = 0;
 	int end = problem.getSourceEnd() >= source.length ? source.length - 1 : problem.getSourceEnd();
-	int relativeEnd = 0;
 	label : for (relativeStart = 0;; relativeStart++) {
 		if (begin == 0)
 			break label;
@@ -182,7 +181,7 @@
 			break label;
 		begin--;
 	}
-	label : for (relativeEnd = 0;; relativeEnd++) {
+	label : for (;;) {
 		if ((end + 1) >= source.length)
 			break label;
 		if ((source[end + 1] == '\r') || (source[end + 1] == '\n')) {
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/util/Util.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/util/Util.java
index 4cdbb54..0684aa1 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/util/Util.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/util/Util.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -341,6 +341,17 @@
     flushDirectoryContent(classesDir);
     compile(pathsAndContents, getCompileOptions(compliance), folderPath);
 }
+public static void createEmptyJar(String jarPath, String compliance) throws IOException {
+	org.eclipse.jdt.core.tests.util.Util.createJar(
+			null,
+			new String[] {
+				"META-INF/MANIFEST.MF",
+				"Manifest-Version: 1.0\n",
+			},
+			jarPath,
+			null,
+			compliance);	
+}
 public static void createJar(String[] pathsAndContents, Map options, String jarPath) throws IOException {
 	createJar(pathsAndContents, null, options, null, jarPath);
 }