提交 1e0d077a 编写于 作者: A Andrey Breslav

Checks for . and ?. fixed for namespaces, a liitle bit of logic added for "foo.1"

上级 71610fb7
......@@ -176,11 +176,18 @@ public class JetTypeInferrer {
private void checkNullSafety(JetType receiverType, JetQualifiedExpression expression) {
if (receiverType != null) {
if (receiverType.isNullable() && expression.getOperationSign() == JetTokens.DOT) {
boolean namespaceType = receiverType instanceof NamespaceType;
boolean nullable = !namespaceType && receiverType.isNullable();
if (nullable && expression.getOperationSign() == JetTokens.DOT) {
semanticServices.getErrorHandler().genericError(expression.getOperationTokenNode(), "Only safe calls (?.) are allowed on a nullable receiver of type " + receiverType);
}
else if (!receiverType.isNullable() && expression.getOperationSign() == JetTokens.SAFE_ACCESS) {
semanticServices.getErrorHandler().genericWarning(expression.getOperationTokenNode(), "Unnecessary safe call on a non-null receiver of type " + receiverType);
else if (!nullable && expression.getOperationSign() == JetTokens.SAFE_ACCESS) {
if (namespaceType) {
semanticServices.getErrorHandler().genericError(expression.getOperationTokenNode(), "Safe calls are not allowed on namespaces");
}
else {
semanticServices.getErrorHandler().genericWarning(expression.getOperationTokenNode(), "Unnecessary safe call on a non-null receiver of type " + receiverType);
}
}
}
}
......@@ -547,12 +554,14 @@ public class JetTypeInferrer {
JetType receiverType = getType(scope, receiverExpression, false);
if (receiverType != null) {
checkNullSafety(receiverType, expression);
if (selectorExpression != null) {
// TODO : review
if (selectorExpression instanceof JetSimpleNameExpression) {
JetScope compositeScope = new ScopeWithReceiver(scope, receiverType);
result = getType(compositeScope, selectorExpression, false);
}
else if (selectorExpression != null) {
// TODO : not a simple name -> resolve in scope, expect property type or a function type
throw new UnsupportedOperationException();
}
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册