Skip to content

Commit 24b7d23

Browse files
committed
support for properties with a getter ("get")
1 parent 64540aa commit 24b7d23

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/ti/TypeInferencerVisitor.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -620,6 +620,19 @@ protected IValueReference checkSpecialJavascriptFunctionCalls(
620620
.getType(), valueMember
621621
.getSource()));
622622
}
623+
valueMember = ((IRRecordType) member
624+
.getType()).getMember("get");
625+
if (valueMember != null) {
626+
IRType valueType = valueMember
627+
.getType();
628+
if (valueType instanceof IRFunctionType) {
629+
valueType = ((IRFunctionType) valueType)
630+
.getReturnType();
631+
}
632+
newMembers.add(new RRecordMember(member
633+
.getName(), valueType,
634+
valueMember.getSource()));
635+
}
623636
}
624637
}
625638
if (newMembers.size() > 0) {

tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/validation/TypeInfoValidationTests.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4012,4 +4012,21 @@ public void test2ApplyMethodOnPrototypeMethod() {
40124012
final List<IProblem> problems = validate(code.toString());
40134013
assertEquals(problems.toString(), 0, problems.size());
40144014
}
4015+
4016+
4017+
public void test2PrototypeWithGetSetProperty() {
4018+
final StringList code = new StringList();
4019+
code.add("function x(){}");
4020+
code.add("x.prototype = Object.create(Object.prototype, {");
4021+
code.add(" bar: {");
4022+
code.add(" configurable: false,");
4023+
code.add(" get: function() { return 10 },");
4024+
code.add(" set: function(value) { }");
4025+
code.add("}});");
4026+
code.add("var p = new x();");
4027+
code.add("var o = p.bar;");
4028+
final List<IProblem> problems = validate(code.toString());
4029+
assertEquals(problems.toString(), 0, problems.size());
4030+
4031+
}
40154032
}

0 commit comments

Comments
 (0)