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);
 }
