Make call to additional type checker if no error happened
This commit is contained in:
@@ -84,7 +84,7 @@ public class RuntimeAssertionInfo(public val needNotNullAssertion: Boolean, publ
|
||||
}
|
||||
|
||||
public object RuntimeAssertionsTypeChecker : AdditionalTypeChecker {
|
||||
override fun checkType(expression: JetExpression, expressionType: JetType, c: ResolutionContext<*>) {
|
||||
override fun checkType(expression: JetExpression, expressionType: JetType, expressionTypeWithSmartCast: JetType, c: ResolutionContext<*>) {
|
||||
if (TypeUtils.noExpectedType(c.expectedType)) return
|
||||
|
||||
val assertionInfo = RuntimeAssertionInfo.create(
|
||||
|
||||
+1
-1
@@ -346,7 +346,7 @@ public class JavaNullabilityWarningsChecker : AdditionalTypeChecker {
|
||||
}
|
||||
}
|
||||
|
||||
override fun checkType(expression: JetExpression, expressionType: JetType, c: ResolutionContext<*>) {
|
||||
override fun checkType(expression: JetExpression, expressionType: JetType, expressionTypeWithSmartCast: JetType, c: ResolutionContext<*>) {
|
||||
doCheckType(
|
||||
expressionType,
|
||||
c.expectedType,
|
||||
|
||||
+1
-1
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
||||
import org.jetbrains.kotlin.types.JetType
|
||||
|
||||
public interface AdditionalTypeChecker {
|
||||
fun checkType(expression: JetExpression, expressionType: JetType, c: ResolutionContext<*>)
|
||||
fun checkType(expression: JetExpression, expressionType: JetType, expressionTypeWithSmartCast: JetType, c: ResolutionContext<*>)
|
||||
fun checkReceiver(
|
||||
receiverParameter: ReceiverParameterDescriptor,
|
||||
receiverArgument: ReceiverValue,
|
||||
|
||||
+34
-16
@@ -164,24 +164,13 @@ public class DataFlowAnalyzer {
|
||||
return typeInfo.replaceType(checkType(typeInfo.getType(), expression, context));
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public JetType checkType(
|
||||
@Nullable JetType expressionType,
|
||||
@NotNull JetExpression expressionToCheck,
|
||||
@NotNull
|
||||
private JetType checkTypeInternal(
|
||||
@NotNull JetType expressionType,
|
||||
@NotNull JetExpression expression,
|
||||
@NotNull ResolutionContext c,
|
||||
@Nullable Ref<Boolean> hasError
|
||||
@NotNull Ref<Boolean> hasError
|
||||
) {
|
||||
if (hasError != null) hasError.set(false);
|
||||
|
||||
JetExpression expression = JetPsiUtil.safeDeparenthesize(expressionToCheck, false);
|
||||
recordExpectedType(c.trace, expression, c.expectedType);
|
||||
|
||||
if (expressionType == null) return null;
|
||||
|
||||
for (AdditionalTypeChecker checker : additionalTypeCheckers) {
|
||||
checker.checkType(expression, expressionType, c);
|
||||
}
|
||||
|
||||
if (noExpectedType(c.expectedType) || !c.expectedType.getConstructor().isDenotable() ||
|
||||
JetTypeChecker.DEFAULT.isSubtypeOf(expressionType, c.expectedType)) {
|
||||
return expressionType;
|
||||
@@ -208,6 +197,35 @@ public class DataFlowAnalyzer {
|
||||
return expressionType;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public JetType checkType(
|
||||
@Nullable JetType expressionType,
|
||||
@NotNull JetExpression expressionToCheck,
|
||||
@NotNull ResolutionContext c,
|
||||
@Nullable Ref<Boolean> hasError
|
||||
) {
|
||||
if (hasError == null) {
|
||||
hasError = Ref.create(false);
|
||||
}
|
||||
else {
|
||||
hasError.set(false);
|
||||
}
|
||||
|
||||
JetExpression expression = JetPsiUtil.safeDeparenthesize(expressionToCheck, false);
|
||||
recordExpectedType(c.trace, expression, c.expectedType);
|
||||
|
||||
if (expressionType == null) return null;
|
||||
|
||||
JetType result = checkTypeInternal(expressionType, expression, c, hasError);
|
||||
if (Boolean.FALSE.equals(hasError.get())) {
|
||||
for (AdditionalTypeChecker checker : additionalTypeCheckers) {
|
||||
checker.checkType(expression, expressionType, result, c);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public JetType checkPossibleCast(
|
||||
@NotNull JetType expressionType,
|
||||
|
||||
Reference in New Issue
Block a user