"this" should never be a reference but always be a copy so that changes
to the instance are not shown up on the this so also on the other
instances.
diff --git a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/ti/ThisValue.java b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/ti/ThisValue.java
index c9f2d0c..99914d7 100644
--- a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/ti/ThisValue.java
+++ b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/ti/ThisValue.java
@@ -28,6 +28,11 @@
}
@Override
+ public boolean isReference() {
+ return false;
+ }
+
+ @Override
public ReferenceKind getKind() {
return ReferenceKind.THIS;
}
diff --git a/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/typeinference/TypeInferenceTests.java b/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/typeinference/TypeInferenceTests.java
index a4a2d64..4a54506 100644
--- a/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/typeinference/TypeInferenceTests.java
+++ b/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/typeinference/TypeInferenceTests.java
@@ -1315,4 +1315,30 @@
assertNotNull(o);
assertEquals(ITypeNames.STRING, o.getName());
}
+
+ public void testBaseTypeWith2SubClasses() {
+ final StringList code = new StringList();
+
+ code.add("/** @constructor */");
+ code.add("function base() {");
+ code.add(" this.baseVar = 10;");
+ code.add(" this.baseMethod = function(){};");
+ code.add("}");
+ code.add("/** @constructor ");
+ code.add(" * @extends {base} */");
+ code.add("function A1() {};");
+ code.add("A1.prototype = new base();");
+ code.add("A1.prototype.constructor = A1;");
+ code.add("A1.prototype.methodAddedToA1Prototype = function() {};");
+ code.add("/** @constructor ");
+ code.add(" * @extends {base} */");
+ code.add("function A2() {};");
+ code.add("A2.prototype = new base();");
+ code.add("A2.prototype.constructor = A2;");
+ code.add("var x = new A2();");
+ final IValueCollection collection = inference(code.toString());
+ IValueReference test = collection.getChild("x");
+ Set<String> directChildren = test.getDirectChildren();
+ assertEquals(2, directChildren.size());
+ }
}