Fix for namespace in expression position vs no class object

This commit is contained in:
Andrey Breslav
2011-10-13 13:18:49 +04:00
parent 1a0a92c11d
commit ae4ca1ef21
2 changed files with 17 additions and 3 deletions
@@ -884,7 +884,9 @@ public class JetTypeInferrer {
}
}
JetType[] result = new JetType[1];
if (furtherNameLookup(expression, referencedName, result, context)) {
TemporaryBindingTrace temporaryTrace = TemporaryBindingTrace.create(context.trace);
if (furtherNameLookup(expression, referencedName, result, context.replaceBindingTrace(temporaryTrace))) {
temporaryTrace.commit();
return context.services.checkType(result[0], expression, context);
}
// To report NO_CLASS_OBJECT when no namespace found
@@ -893,7 +895,8 @@ public class JetTypeInferrer {
context.trace.record(REFERENCE_TARGET, expression, classifier);
return ErrorUtils.createErrorType("No class object in " + expression.getReferencedName());
}
return null;
temporaryTrace.commit();
return result[0];
}
public boolean isNamespacePosition() {
@@ -905,7 +908,7 @@ public class JetTypeInferrer {
if (namespaceType != null) {
// context.trace.getErrorHandler().genericError(expression.getNode(), "Expression expected, but a namespace name found");
context.trace.report(EXPRESSION_EXPECTED_NAMESPACE_FOUND.on(expression));
return true;
result[0] = ErrorUtils.createErrorType("Type for " + referencedName);
}
return false;
}
@@ -0,0 +1,11 @@
namespace foo
class X {}
val s = <!EXPRESSION_EXPECTED_NAMESPACE_FOUND!>java<!>
val ss = <!NO_CLASS_OBJECT!>System<!>
val sss = <!NO_CLASS_OBJECT!>X<!>
val xs = java.<!EXPRESSION_EXPECTED_NAMESPACE_FOUND!>lang<!>
val xss = java.lang.<!NO_CLASS_OBJECT!>System<!>
val xsss = foo.<!NO_CLASS_OBJECT!>X<!>
val xssss = <!EXPRESSION_EXPECTED_NAMESPACE_FOUND!>foo<!>