fix to support for Object.create(null)
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 1f0c063..1087f11 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
@@ -408,7 +408,7 @@
RTypes.localType(name, context
.getParent().getChild(name)));
}
- }
+ }
else {
left.setKind(ReferenceKind.FIELD);
final Comment comment = JSDocSupport
@@ -536,8 +536,7 @@
if (methods != null && methods.size() == 1) {
final IRMethod method = methods.get(0);
IValueReference ref = checkSpecialJavascriptFunctionCalls(
- reference,
- arguments, method);
+ reference, arguments, method);
if (ref != null)
return ref;
if (method.isGeneric()) {
@@ -597,10 +596,12 @@
}
} else if (method.getName().equals("create")
&& RTypes.OBJECT.getDeclaration().equals(
- method.getDeclaringType()) && arguments.length > 0) {
+ method.getDeclaringType()) && arguments.length > 0
+ && arguments[0] != null) {
AnonymousValue value = new AnonymousValue();
IValue argumentValue = ((IValueProvider) arguments[0])
.getValue();
+
if (argumentValue != null)
value.getValue().addValue(argumentValue);
if (arguments.length == 2) {
@@ -616,9 +617,9 @@
.getType()).getMember("value");
if (valueMember != null) {
newMembers.add(new RRecordMember(member
- .getName(), valueMember
+ .getName(), valueMember
.getType(), member
- .getSource()));
+ .getSource()));
}
valueMember = ((IRRecordType) member
.getType()).getMember("get");
@@ -639,7 +640,7 @@
}
if (newMembers.size() > 0) {
value.addValue(ConstantValue.of(RTypes
- .recordType(newMembers)), true);
+ .recordType(newMembers)), true);
}
}
}
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 7bc391a..9dbda10 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
@@ -1367,5 +1367,14 @@
assertEquals(20, location.getNameStart());
assertEquals(26, location.getNameEnd());
}
+
+ public void testObjectCreateCallWithNull() {
+ final StringList code = new StringList();
+ code.add("var p = Object.create(null)");
+ final IValueCollection collection = inference(code.toString());
+ IValueReference func = collection.getChild("p").getChild("hasOwnProperty");
+ assertTrue(func.exists());
+
+ }
}