fix for calling apply on a prototype added function
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 953f126..fb4ff0a 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
@@ -586,6 +586,9 @@
|| "apply".equals(method.getName())) {
Object x = reference.getParent().getAttribute(
IReferenceAttributes.ELEMENT);
+ if (x == null)
+ x = reference.getParent().getAttribute(
+ IReferenceAttributes.R_METHOD);
if (x instanceof IRMethod) {
return ConstantValue.of(((IRMethod) x).getType());
}
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 712103f..6309bfb 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
@@ -3991,4 +3991,25 @@
final List<IProblem> problems = validate(code.toString());
assertEquals(problems.toString(), 0, problems.size());
}
+
+ public void test2ApplyMethodOnPrototypeMethod() {
+ final StringList code = new StringList();
+ code.add("function MyConstuctor() {}");
+ code.add("/**");
+ code.add(" * @return {String}");
+ code.add(" */");
+ code.add(" MyConstuctor.prototype.newMessage = function(message, params) {");
+ code.add(" return ''");
+ code.add(" }");
+ code.add("/**");
+ code.add(" * @param {String} text");
+ code.add(" */");
+ code.add("function meth2(text) {}");
+ code.add("function testMeth() {");
+ code.add(" var o = new MyConstuctor()");
+ code.add(" meth2(o.newMessage.apply(null,[1,2]))");
+ code.add("}");
+ final List<IProblem> problems = validate(code.toString());
+ assertEquals(problems.toString(), 0, problems.size());
+ }
}