support for properties with a getter ("get")
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 fb4ff0a..13673e2 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
@@ -620,6 +620,19 @@
.getType(), valueMember
.getSource()));
}
+ valueMember = ((IRRecordType) member
+ .getType()).getMember("get");
+ if (valueMember != null) {
+ IRType valueType = valueMember
+ .getType();
+ if (valueType instanceof IRFunctionType) {
+ valueType = ((IRFunctionType) valueType)
+ .getReturnType();
+ }
+ newMembers.add(new RRecordMember(member
+ .getName(), valueType,
+ valueMember.getSource()));
+ }
}
}
if (newMembers.size() > 0) {
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 6309bfb..184e265 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
@@ -4012,4 +4012,21 @@
final List<IProblem> problems = validate(code.toString());
assertEquals(problems.toString(), 0, problems.size());
}
+
+
+ public void test2PrototypeWithGetSetProperty() {
+ final StringList code = new StringList();
+ code.add("function x(){}");
+ code.add("x.prototype = Object.create(Object.prototype, {");
+ code.add(" bar: {");
+ code.add(" configurable: false,");
+ code.add(" get: function() { return 10 },");
+ code.add(" set: function(value) { }");
+ code.add("}});");
+ code.add("var p = new x();");
+ code.add("var o = p.bar;");
+ final List<IProblem> problems = validate(code.toString());
+ assertEquals(problems.toString(), 0, problems.size());
+
+ }
}