protected fields of a super reassigned made them public
diff --git a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/ti/TypeInferencerVisitor.java b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/ti/TypeInferencerVisitor.java
index 6057d50..2585112 100644
--- a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/ti/TypeInferencerVisitor.java
+++ b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/ti/TypeInferencerVisitor.java
@@ -288,8 +288,14 @@
 			if (left != null && left.exists()) {
 				if (left.getParent() instanceof ThisValue) {
 					// this is an override, make sure that left is really
-					// created.
+					// created. copy over the variable (so that visibility is used)
+					Object variable = left
+							.getAttribute(IReferenceAttributes.R_VARIABLE);
 					left.getParent().createChild(left.getName());
+					if (variable != null) {
+						left.setAttribute(IReferenceAttributes.R_VARIABLE,
+								variable);
+					}
 					Expression property = node.getLeftExpression();
 					if (property instanceof PropertyExpression) {
 						left.setLocation(ReferenceLocation.create(getSource(),
diff --git a/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/validation/TypeInfoValidationTests.java b/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/validation/TypeInfoValidationTests.java
index d52498e..1836472 100644
--- a/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/validation/TypeInfoValidationTests.java
+++ b/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/validation/TypeInfoValidationTests.java
@@ -3490,6 +3490,31 @@
 		assertEquals(problems.toString(), 1, problems.size());
 	}
 	
+	public void testProtectedMemberInAssignedInSubtype() {
+		if (notYetImplemented(this)) {
+			return;
+		}
+		final StringList code = new StringList();
+		code.add("/** @constructor*/");
+		code.add("function proto() {");
+		code.add(" /** @protected */");
+		code.add(" this.map = null");
+		code.add("}");
+		code.add("/**");
+		code.add(" * @constructor");
+		code.add(" * @extends {proto}");
+		code.add(" */");
+		code.add("function ProtoExt() {");
+		code.add(" this.map = 1");
+		code.add("}");
+		code.add("function testProtoExt() {");
+		code.add(" var x = new ProtoExt()");
+		code.add(" x.map;");
+		code.add("}");
+		final List<IProblem> problems = validate(code.toString());
+		assertEquals(problems.toString(), 1, problems.size());
+	}
+	
 	public void testFunctionTypeExactParam() {
 		final StringList code = new StringList();
 		code.add("/**");
@@ -3620,5 +3645,4 @@
 		assertEquals(problems.toString(), 0, problems.size());
 	}
 
-
 }