make sure that it maps to the right overriden function or variable when
sub has the same function or property then a super
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 14ee220..692bd35 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
@@ -281,6 +281,20 @@
 				}
 			}
 			if (left != null && left.exists()) {
+				if (left.getParent() instanceof ThisValue) {
+					// this is an override, make sure that left is really
+					// created.
+					left.getParent().createChild(left.getName());
+					Expression property = node.getLeftExpression();
+					if (property instanceof PropertyExpression) {
+						left.setLocation(ReferenceLocation.create(getSource(),
+								property.sourceStart(), property.sourceEnd(),
+								((PropertyExpression) property).getProperty()
+										.sourceStart(),
+								((PropertyExpression) property).getProperty()
+										.sourceEnd()));
+					}
+				}
 				left.setAttribute(IReferenceAttributes.RESOLVING, Boolean.TRUE);
 				final IValueReference r;
 				try {
diff --git a/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/contentassist/SelectionTests.java b/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/contentassist/SelectionTests.java
index 791d1e3..78c53f2 100644
--- a/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/contentassist/SelectionTests.java
+++ b/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/contentassist/SelectionTests.java
@@ -28,6 +28,7 @@
 import org.eclipse.dltk.core.ISourceRange;
 import org.eclipse.dltk.core.ISourceReference;
 import org.eclipse.dltk.core.ModelException;
+import org.eclipse.dltk.core.model.UnresolvedElement;
 import org.eclipse.dltk.core.search.IDLTKSearchConstants;
 import org.eclipse.dltk.core.search.SearchEngine;
 import org.eclipse.dltk.core.search.SearchMatch;
@@ -354,4 +355,58 @@
 				selectAll(module, lastPositionInFile("String", module, false)));
 	}
 
+	
+	public void testExtends() throws ModelException {
+		IModuleSource module = getModule("extends.js");
+		IModelElement[] elements = select(module,
+				lastPositionInFile("myprop", module, false));
+		assertEquals(1, elements.length);
+		final UnresolvedElement variable1 = (UnresolvedElement) elements[0];
+		elements = select(module,
+				lastPositionInFile("myval", module, false));
+		assertEquals(1, elements.length);
+		final UnresolvedElement variable2 = (UnresolvedElement) elements[0];
+		final int offset1 = variable1.getSourceRange().getOffset();
+		final int offset2 = variable2.getSourceRange().getOffset();
+		
+		assertTrue(offset1 > offset2);
+		
+		ISourceRange nameRange = variable1.getNameRange();
+		assertEquals(
+				"myprop",
+				module.getSourceContents().substring(nameRange.getOffset(),
+						nameRange.getOffset() + nameRange.getLength()));
+		nameRange = variable2.getNameRange();
+		assertEquals(
+				"myval",
+				module.getSourceContents().substring(nameRange.getOffset(),
+						nameRange.getOffset() + nameRange.getLength()));
+	}
+
+	
+	public void testExtends2() throws ModelException {
+		IModuleSource module = getModule("extends.js");
+		IModelElement[] elements = select(module,
+				lastPositionInFile("mypublicfunction", module, false));
+		assertEquals(1, elements.length);
+		IMethod method = (IMethod) elements[0];
+		assertEquals("MySubConstructor", method.getParent().getElementName());
+		ISourceRange nameRange = method.getNameRange();
+		assertEquals(
+				"mypublicfunction",
+				module.getSourceContents().substring(nameRange.getOffset(),
+						nameRange.getOffset() + nameRange.getLength()));
+		
+		elements = select(module,
+				lastPositionInFile("myfunction", module, false));
+		assertEquals(1, elements.length);
+		method = (IMethod) elements[0];
+		assertEquals("MyConstructor", method.getParent().getElementName());
+		nameRange = method.getNameRange();
+		assertEquals(
+				"myfunction",
+				module.getSourceContents().substring(nameRange.getOffset(),
+						nameRange.getOffset() + nameRange.getLength()));
+
+	}
 }
diff --git a/tests/org.eclipse.dltk.javascript.core.tests/workspace/selection/src/extends.js b/tests/org.eclipse.dltk.javascript.core.tests/workspace/selection/src/extends.js
new file mode 100644
index 0000000..1eb776b
--- /dev/null
+++ b/tests/org.eclipse.dltk.javascript.core.tests/workspace/selection/src/extends.js
@@ -0,0 +1,30 @@
+/**

+ * @constructor 

+ */

+function MyConstructor() {

+	this.mypublicfunction = function() {

+		

+	}

+	this.myfunction = function() {

+		

+	}	

+	this.myprop = 10;

+	this.myval = 11;

+}

+/**

+ * @constructor 

+ * @extends {MyConstructor}

+ */

+function MySubConstructor() {

+	this.mypublicfunction = function() {

+	}

+	

+	this.myprop = 11;

+}

+function test() {

+	var x = new MySubConstructor();

+	x.mypublicfunction();

+	x.myfunction();  

+	x.myprop;

+	x.myval;

+}
\ No newline at end of file