Fix for namespace in expression position vs no class object
This commit is contained in:
@@ -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<!>
|
||||
Reference in New Issue
Block a user