diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java index 6ccd009a9f2..a60c73ab053 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java @@ -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; } diff --git a/idea/testData/checkerWithErrorTypes/quick/NamespaceInExpressionPosition.jet b/idea/testData/checkerWithErrorTypes/quick/NamespaceInExpressionPosition.jet new file mode 100644 index 00000000000..863f25630cc --- /dev/null +++ b/idea/testData/checkerWithErrorTypes/quick/NamespaceInExpressionPosition.jet @@ -0,0 +1,11 @@ +namespace foo + +class X {} + +val s = java +val ss = System +val sss = X +val xs = java.lang +val xss = java.lang.System +val xsss = foo.X +val xssss = foo