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