Checks for . and ?. fixed for namespaces, a liitle bit of logic added for "foo.1"
This commit is contained in:
@@ -176,11 +176,18 @@ public class JetTypeInferrer {
|
|||||||
|
|
||||||
private void checkNullSafety(JetType receiverType, JetQualifiedExpression expression) {
|
private void checkNullSafety(JetType receiverType, JetQualifiedExpression expression) {
|
||||||
if (receiverType != null) {
|
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);
|
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) {
|
else if (!nullable && expression.getOperationSign() == JetTokens.SAFE_ACCESS) {
|
||||||
semanticServices.getErrorHandler().genericWarning(expression.getOperationTokenNode(), "Unnecessary safe call on a non-null receiver of type " + receiverType);
|
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);
|
JetType receiverType = getType(scope, receiverExpression, false);
|
||||||
if (receiverType != null) {
|
if (receiverType != null) {
|
||||||
checkNullSafety(receiverType, expression);
|
checkNullSafety(receiverType, expression);
|
||||||
if (selectorExpression != null) {
|
if (selectorExpression instanceof JetSimpleNameExpression) {
|
||||||
// TODO : review
|
|
||||||
|
|
||||||
JetScope compositeScope = new ScopeWithReceiver(scope, receiverType);
|
JetScope compositeScope = new ScopeWithReceiver(scope, receiverType);
|
||||||
result = getType(compositeScope, selectorExpression, false);
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user