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