FIR checker: differentiate UNSAFE_IMPLICIT_INVOKE_CALL from UNSAFE_CALL
This commit is contained in:
committed by
Dmitriy Novozhilov
parent
0c0c53cc2e
commit
5e150d62ea
+3
-7
@@ -218,7 +218,6 @@ val DIAGNOSTICS_LIST = DiagnosticListBuilder.buildDiagnosticList {
|
|||||||
parameter<Name>("containingClassName")
|
parameter<Name>("containingClassName")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
val OVERRIDING_FINAL_MEMBER by error<FirSourceElement, KtNamedDeclaration>(PositioningStrategy.OVERRIDE_MODIFIER) {
|
val OVERRIDING_FINAL_MEMBER by error<FirSourceElement, KtNamedDeclaration>(PositioningStrategy.OVERRIDE_MODIFIER) {
|
||||||
parameter<FirCallableDeclaration<*>>("overriddenDeclaration")
|
parameter<FirCallableDeclaration<*>>("overriddenDeclaration")
|
||||||
parameter<Name>("containingClassName")
|
parameter<Name>("containingClassName")
|
||||||
@@ -240,7 +239,6 @@ val DIAGNOSTICS_LIST = DiagnosticListBuilder.buildDiagnosticList {
|
|||||||
parameter<FirMemberDeclaration>("overridingDeclaration")
|
parameter<FirMemberDeclaration>("overridingDeclaration")
|
||||||
parameter<FirMemberDeclaration>("overriddenDeclaration")
|
parameter<FirMemberDeclaration>("overriddenDeclaration")
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
group("Redeclarations") {
|
group("Redeclarations") {
|
||||||
@@ -282,13 +280,11 @@ val DIAGNOSTICS_LIST = DiagnosticListBuilder.buildDiagnosticList {
|
|||||||
parameter<FirMemberDeclaration>("function")
|
parameter<FirMemberDeclaration>("function")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
val FUNCTION_DECLARATION_WITH_NO_NAME by error<FirSourceElement, KtFunction>(PositioningStrategy.DECLARATION_SIGNATURE)
|
val FUNCTION_DECLARATION_WITH_NO_NAME by error<FirSourceElement, KtFunction>(PositioningStrategy.DECLARATION_SIGNATURE)
|
||||||
|
|
||||||
// TODO: val ANONYMOUS_FUNCTION_WITH_NAME by error1<FirSourceElement, PsiElement, Name>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
// TODO: val ANONYMOUS_FUNCTION_WITH_NAME by error1<FirSourceElement, PsiElement, Name>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
||||||
val ANONYMOUS_FUNCTION_PARAMETER_WITH_DEFAULT_VALUE by error<FirSourceElement, KtParameter>(PositioningStrategy.PARAMETER_DEFAULT_VALUE)
|
val ANONYMOUS_FUNCTION_PARAMETER_WITH_DEFAULT_VALUE by error<FirSourceElement, KtParameter>(PositioningStrategy.PARAMETER_DEFAULT_VALUE)
|
||||||
val USELESS_VARARG_ON_PARAMETER by warning<FirSourceElement, KtParameter>()
|
val USELESS_VARARG_ON_PARAMETER by warning<FirSourceElement, KtParameter>()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
group("Properties & accessors") {
|
group("Properties & accessors") {
|
||||||
@@ -324,7 +320,6 @@ val DIAGNOSTICS_LIST = DiagnosticListBuilder.buildDiagnosticList {
|
|||||||
val EXPECTED_DELEGATED_PROPERTY by error<FirSourceElement, KtPropertyDelegate>()
|
val EXPECTED_DELEGATED_PROPERTY by error<FirSourceElement, KtPropertyDelegate>()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
group("Destructuring declaration") {
|
group("Destructuring declaration") {
|
||||||
val INITIALIZER_REQUIRED_FOR_DESTRUCTURING_DECLARATION by error<FirSourceElement, KtDestructuringDeclaration>()
|
val INITIALIZER_REQUIRED_FOR_DESTRUCTURING_DECLARATION by error<FirSourceElement, KtDestructuringDeclaration>()
|
||||||
val COMPONENT_FUNCTION_MISSING by error<FirSourceElement, PsiElement> {
|
val COMPONENT_FUNCTION_MISSING by error<FirSourceElement, PsiElement> {
|
||||||
@@ -340,7 +335,6 @@ val DIAGNOSTICS_LIST = DiagnosticListBuilder.buildDiagnosticList {
|
|||||||
parameter<Name>("componentFunctionName")
|
parameter<Name>("componentFunctionName")
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: val COMPONENT_FUNCTION_ON_NULLABLE by ...
|
|
||||||
// TODO: val COMPONENT_FUNCTION_RETURN_TYPE_MISMATCH by ...
|
// TODO: val COMPONENT_FUNCTION_RETURN_TYPE_MISMATCH by ...
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -363,7 +357,9 @@ val DIAGNOSTICS_LIST = DiagnosticListBuilder.buildDiagnosticList {
|
|||||||
val UNSAFE_CALL by error<FirSourceElement, PsiElement>(PositioningStrategy.DOT_BY_SELECTOR) {
|
val UNSAFE_CALL by error<FirSourceElement, PsiElement>(PositioningStrategy.DOT_BY_SELECTOR) {
|
||||||
parameter<ConeKotlinType>("receiverType")
|
parameter<ConeKotlinType>("receiverType")
|
||||||
}
|
}
|
||||||
// TODO: val UNSAFE_IMPLICIT_INVOKE_CALL by error1<FirSourceElement, PsiElement, ConeKotlinType>()
|
val UNSAFE_IMPLICIT_INVOKE_CALL by error<FirSourceElement, PsiElement>() {
|
||||||
|
parameter<ConeKotlinType>("receiverType")
|
||||||
|
}
|
||||||
// TODO: val UNSAFE_INFIX_CALL by ...
|
// TODO: val UNSAFE_INFIX_CALL by ...
|
||||||
// TODO: val UNSAFE_OPERATOR_CALL by ...
|
// TODO: val UNSAFE_OPERATOR_CALL by ...
|
||||||
// TODO: val UNEXPECTED_SAFE_CALL by ...
|
// TODO: val UNEXPECTED_SAFE_CALL by ...
|
||||||
|
|||||||
@@ -230,6 +230,7 @@ object FirErrors {
|
|||||||
|
|
||||||
// Nullability
|
// Nullability
|
||||||
val UNSAFE_CALL by error1<FirSourceElement, PsiElement, ConeKotlinType>(SourceElementPositioningStrategies.DOT_BY_SELECTOR)
|
val UNSAFE_CALL by error1<FirSourceElement, PsiElement, ConeKotlinType>(SourceElementPositioningStrategies.DOT_BY_SELECTOR)
|
||||||
|
val UNSAFE_IMPLICIT_INVOKE_CALL by error1<FirSourceElement, PsiElement, ConeKotlinType>()
|
||||||
|
|
||||||
// When expressions
|
// When expressions
|
||||||
val NO_ELSE_IN_WHEN by error1<FirSourceElement, KtWhenExpression, List<WhenMissingCase>>(SourceElementPositioningStrategies.WHEN_EXPRESSION)
|
val NO_ELSE_IN_WHEN by error1<FirSourceElement, KtWhenExpression, List<WhenMissingCase>>(SourceElementPositioningStrategies.WHEN_EXPRESSION)
|
||||||
|
|||||||
+1
-1
@@ -101,7 +101,7 @@ object FirDestructuringDeclarationChecker : FirPropertyChecker() {
|
|||||||
reporter.report(
|
reporter.report(
|
||||||
FirErrors.COMPONENT_FUNCTION_ON_NULLABLE.on(
|
FirErrors.COMPONENT_FUNCTION_ON_NULLABLE.on(
|
||||||
originalDestructuringDeclarationOrInitializerSource,
|
originalDestructuringDeclarationOrInitializerSource,
|
||||||
(diagnostic.candidateSymbol.fir as FirSimpleFunction).name
|
(diagnostic.candidate.symbol.fir as FirSimpleFunction).name
|
||||||
),
|
),
|
||||||
context
|
context
|
||||||
)
|
)
|
||||||
|
|||||||
+6
-5
@@ -157,6 +157,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.UNINITIALIZED_VAR
|
|||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.UNRESOLVED_LABEL
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.UNRESOLVED_LABEL
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.UNRESOLVED_REFERENCE
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.UNRESOLVED_REFERENCE
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.UNSAFE_CALL
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.UNSAFE_CALL
|
||||||
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.UNSAFE_IMPLICIT_INVOKE_CALL
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.UNUSED_VARIABLE
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.UNUSED_VARIABLE
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.UPPER_BOUND_VIOLATED
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.UPPER_BOUND_VIOLATED
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.USELESS_VARARG_ON_PARAMETER
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.USELESS_VARARG_ON_PARAMETER
|
||||||
@@ -506,11 +507,11 @@ class FirDefaultErrorMessages : DefaultErrorMessages.Extension {
|
|||||||
"Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type {0}",
|
"Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type {0}",
|
||||||
RENDER_TYPE
|
RENDER_TYPE
|
||||||
)
|
)
|
||||||
//map.put(
|
map.put(
|
||||||
// UNSAFE_IMPLICIT_INVOKE_CALL,
|
UNSAFE_IMPLICIT_INVOKE_CALL,
|
||||||
// "Reference has a nullable type ''{0}'', use explicit \"?.invoke\" to make a function-like call instead.",
|
"Reference has a nullable type ''{0}'', use explicit \"?.invoke\" to make a function-like call instead.",
|
||||||
// RENDER_TYPE
|
RENDER_TYPE
|
||||||
//)
|
)
|
||||||
|
|
||||||
// When expressions
|
// When expressions
|
||||||
map.put(NO_ELSE_IN_WHEN, "''when'' expression must be exhaustive, add necessary {0}", WHEN_MISSING_CASES)
|
map.put(NO_ELSE_IN_WHEN, "''when'' expression must be exhaustive, add necessary {0}", WHEN_MISSING_CASES)
|
||||||
|
|||||||
+7
-8
@@ -58,20 +58,19 @@ private fun mapInapplicableCandidateError(
|
|||||||
source: FirSourceElement,
|
source: FirSourceElement,
|
||||||
): FirDiagnostic<*> {
|
): FirDiagnostic<*> {
|
||||||
// TODO: Need to distinguish SMARTCAST_IMPOSSIBLE
|
// TODO: Need to distinguish SMARTCAST_IMPOSSIBLE
|
||||||
// TODO: handle other UNSAFE_* variants: invoke, infix, operator
|
// TODO: handle other UNSAFE_* variants: infix, operator
|
||||||
val rootCause = diagnostic.diagnostics.find { it.applicability == diagnostic.applicability }
|
val rootCause = diagnostic.candidate.diagnostics.find { it.applicability == diagnostic.applicability }
|
||||||
if (rootCause != null &&
|
if (rootCause != null &&
|
||||||
rootCause is InapplicableWrongReceiver &&
|
rootCause is InapplicableWrongReceiver &&
|
||||||
rootCause.actualType?.isNullable == true &&
|
rootCause.actualType?.isNullable == true &&
|
||||||
(rootCause.expectedType == null || !rootCause.expectedType!!.isMarkedNullable)
|
(rootCause.expectedType == null || rootCause.expectedType!!.isEffectivelyNotNull())
|
||||||
) {
|
) {
|
||||||
val expectedType = rootCause.expectedType
|
if (diagnostic.candidate.callInfo.isImplicitInvoke) {
|
||||||
|
return FirErrors.UNSAFE_IMPLICIT_INVOKE_CALL.on(source, rootCause.actualType!!)
|
||||||
if (expectedType == null || expectedType.isEffectivelyNotNull()) {
|
|
||||||
return FirErrors.UNSAFE_CALL.on(source, rootCause.actualType!!)
|
|
||||||
}
|
}
|
||||||
|
return FirErrors.UNSAFE_CALL.on(source, rootCause.actualType!!)
|
||||||
}
|
}
|
||||||
return FirErrors.INAPPLICABLE_CANDIDATE.on(source, diagnostic.candidateSymbol)
|
return FirErrors.INAPPLICABLE_CANDIDATE.on(source, diagnostic.candidate.symbol)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun ConeSimpleDiagnostic.getFactory(): FirDiagnosticFactory0<FirSourceElement, *> {
|
private fun ConeSimpleDiagnostic.getFactory(): FirDiagnosticFactory0<FirSourceElement, *> {
|
||||||
|
|||||||
@@ -1231,9 +1231,9 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver
|
|||||||
private fun FlowContent.generate(diagnostic: ConeDiagnostic) {
|
private fun FlowContent.generate(diagnostic: ConeDiagnostic) {
|
||||||
when (diagnostic) {
|
when (diagnostic) {
|
||||||
is ConeInapplicableCandidateError -> {
|
is ConeInapplicableCandidateError -> {
|
||||||
describeVerbose(diagnostic.candidateSymbol)
|
describeVerbose(diagnostic.candidate.symbol)
|
||||||
br
|
br
|
||||||
diagnostic.errors.forEach { callDiagnostic ->
|
diagnostic.candidate.system.errors.forEach { callDiagnostic ->
|
||||||
when (callDiagnostic) {
|
when (callDiagnostic) {
|
||||||
is NewConstraintError -> {
|
is NewConstraintError -> {
|
||||||
ident()
|
ident()
|
||||||
|
|||||||
+3
-2
@@ -5,7 +5,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.resolve.calls.tower
|
package org.jetbrains.kotlin.fir.resolve.calls.tower
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier
|
import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier
|
||||||
import org.jetbrains.kotlin.fir.expressions.builder.FirQualifiedAccessExpressionBuilder
|
import org.jetbrains.kotlin.fir.expressions.builder.FirQualifiedAccessExpressionBuilder
|
||||||
@@ -156,7 +155,9 @@ internal class FirInvokeResolveTowerExtension(
|
|||||||
|
|
||||||
val invokeFunctionInfo =
|
val invokeFunctionInfo =
|
||||||
info.copy(
|
info.copy(
|
||||||
explicitReceiver = invokeReceiverExpression, name = OperatorNameConventions.INVOKE,
|
explicitReceiver = invokeReceiverExpression,
|
||||||
|
name = OperatorNameConventions.INVOKE,
|
||||||
|
isImplicitInvoke = true,
|
||||||
candidateForCommonInvokeReceiver = invokeReceiverCandidate.takeUnless { invokeBuiltinExtensionMode }
|
candidateForCommonInvokeReceiver = invokeReceiverCandidate.takeUnless { invokeBuiltinExtensionMode }
|
||||||
).let {
|
).let {
|
||||||
when {
|
when {
|
||||||
|
|||||||
+3
-12
@@ -38,20 +38,11 @@ class ConeHiddenCandidateError(
|
|||||||
override val reason: String get() = "HIDDEN: ${describeSymbol(candidateSymbol)} is invisible"
|
override val reason: String get() = "HIDDEN: ${describeSymbol(candidateSymbol)} is invisible"
|
||||||
}
|
}
|
||||||
|
|
||||||
class ConeInapplicableCandidateError private constructor(
|
class ConeInapplicableCandidateError(
|
||||||
val applicability: CandidateApplicability,
|
val applicability: CandidateApplicability,
|
||||||
val candidateSymbol: AbstractFirBasedSymbol<*>,
|
val candidate: Candidate,
|
||||||
val diagnostics: List<ResolutionDiagnostic>,
|
|
||||||
val errors: List<ConstraintSystemError>
|
|
||||||
) : ConeDiagnostic() {
|
) : ConeDiagnostic() {
|
||||||
constructor(applicability: CandidateApplicability, candidate: Candidate) : this(
|
override val reason: String get() = "Inapplicable($applicability): ${describeSymbol(candidate.symbol)}"
|
||||||
applicability,
|
|
||||||
candidate.symbol,
|
|
||||||
candidate.diagnostics,
|
|
||||||
candidate.system.errors
|
|
||||||
)
|
|
||||||
|
|
||||||
override val reason: String get() = "Inapplicable($applicability): ${describeSymbol(candidateSymbol)}"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class ConeAmbiguityError(val name: Name, val applicability: CandidateApplicability, val candidates: Collection<AbstractFirBasedSymbol<*>>) : ConeDiagnostic() {
|
class ConeAmbiguityError(val name: Name, val applicability: CandidateApplicability, val candidates: Collection<AbstractFirBasedSymbol<*>>) : ConeDiagnostic() {
|
||||||
|
|||||||
@@ -9,13 +9,13 @@ interface T {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun test(t: T) {
|
fun test(t: T) {
|
||||||
t<!UNSAFE_CALL!>.<!>f(1) //unsafe call error
|
t.<!UNSAFE_IMPLICIT_INVOKE_CALL!>f<!>(1) //unsafe call error
|
||||||
t.f?.invoke(1)
|
t.f?.invoke(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun test1(t: T?) {
|
fun test1(t: T?) {
|
||||||
t.<!UNRESOLVED_REFERENCE!>f<!>(1) // todo resolve f as value and report UNSAFE_CALL
|
t.<!UNRESOLVED_REFERENCE!>f<!>(1) // todo resolve f as value and report UNSAFE_CALL
|
||||||
t?.<!UNSAFE_CALL!>f<!>(1)
|
t?.<!UNSAFE_IMPLICIT_INVOKE_CALL!>f<!>(1)
|
||||||
t<!UNSAFE_CALL!>.<!>f?.invoke(1)
|
t<!UNSAFE_CALL!>.<!>f?.invoke(1)
|
||||||
t?.f?.invoke(1)
|
t?.f?.invoke(1)
|
||||||
}
|
}
|
||||||
|
|||||||
-23
@@ -1,23 +0,0 @@
|
|||||||
// FILE: J.java
|
|
||||||
|
|
||||||
import org.jetbrains.annotations.*;
|
|
||||||
|
|
||||||
public class J {
|
|
||||||
public interface Invoke {
|
|
||||||
void invoke();
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
public static Invoke staticNN;
|
|
||||||
@Nullable
|
|
||||||
public static Invoke staticN;
|
|
||||||
public static Invoke staticJ;
|
|
||||||
}
|
|
||||||
|
|
||||||
// FILE: k.kt
|
|
||||||
|
|
||||||
fun test() {
|
|
||||||
J.staticNN()
|
|
||||||
J<!UNSAFE_CALL!>.<!>staticN()
|
|
||||||
J.staticJ()
|
|
||||||
}
|
|
||||||
+1
@@ -1,3 +1,4 @@
|
|||||||
|
// FIR_IDENTICAL
|
||||||
// FILE: J.java
|
// FILE: J.java
|
||||||
|
|
||||||
import org.jetbrains.annotations.*;
|
import org.jetbrains.annotations.*;
|
||||||
|
|||||||
+2
-2
@@ -4,7 +4,7 @@
|
|||||||
operator fun String.invoke(i: Int) {}
|
operator fun String.invoke(i: Int) {}
|
||||||
|
|
||||||
fun foo(s: String?) {
|
fun foo(s: String?) {
|
||||||
<!UNSAFE_CALL!>s<!>(1)
|
<!UNSAFE_IMPLICIT_INVOKE_CALL!>s<!>(1)
|
||||||
|
|
||||||
<!UNSAFE_CALL!>(s ?: null)(1)<!>
|
<!UNSAFE_IMPLICIT_INVOKE_CALL!>(s ?: null)(1)<!>
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -7,8 +7,8 @@ fun test(a: A) {
|
|||||||
(a.x)("")
|
(a.x)("")
|
||||||
}
|
}
|
||||||
"".<!UNRESOLVED_REFERENCE!>(a.x)()<!>
|
"".<!UNRESOLVED_REFERENCE!>(a.x)()<!>
|
||||||
a<!UNSAFE_CALL!>.<!>x("")
|
a.<!UNSAFE_IMPLICIT_INVOKE_CALL!>x<!>("")
|
||||||
<!UNSAFE_CALL!>(a.x)("")<!>
|
<!UNSAFE_IMPLICIT_INVOKE_CALL!>(a.x)("")<!>
|
||||||
|
|
||||||
with("") {
|
with("") {
|
||||||
a.<!INAPPLICABLE_CANDIDATE!>x<!>()
|
a.<!INAPPLICABLE_CANDIDATE!>x<!>()
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ class MemberInvokeOwner {
|
|||||||
|
|
||||||
class Cls {
|
class Cls {
|
||||||
fun testImplicitReceiver() {
|
fun testImplicitReceiver() {
|
||||||
<!UNSAFE_CALL!>nullableExtensionProperty<!>()
|
<!UNSAFE_IMPLICIT_INVOKE_CALL!>nullableExtensionProperty<!>()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -30,7 +30,7 @@ fun testNullableReceiver(nullable: Cls?) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun testNotNullableReceiver(notNullable: Cls) {
|
fun testNotNullableReceiver(notNullable: Cls) {
|
||||||
notNullable<!UNSAFE_CALL!>.<!>nullableExtensionProperty()
|
notNullable.<!UNSAFE_IMPLICIT_INVOKE_CALL!>nullableExtensionProperty<!>()
|
||||||
notNullable?.extensionProperty()
|
notNullable?.extensionProperty()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,6 +38,6 @@ fun testFlexibleReceiver() {
|
|||||||
val flexible = JavaClass.createFlexible()
|
val flexible = JavaClass.createFlexible()
|
||||||
flexible.extensionProperty()
|
flexible.extensionProperty()
|
||||||
flexible?.extensionProperty()
|
flexible?.extensionProperty()
|
||||||
flexible<!UNSAFE_CALL!>.<!>nullableExtensionProperty()
|
flexible.<!UNSAFE_IMPLICIT_INVOKE_CALL!>nullableExtensionProperty<!>()
|
||||||
flexible?.<!UNSAFE_CALL!>nullableExtensionProperty<!>()
|
flexible?.<!UNSAFE_IMPLICIT_INVOKE_CALL!>nullableExtensionProperty<!>()
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -1,7 +1,7 @@
|
|||||||
// !WITH_NEW_INFERENCE
|
// !WITH_NEW_INFERENCE
|
||||||
|
|
||||||
fun f(s: String, action: (String.() -> Unit)?) {
|
fun f(s: String, action: (String.() -> Unit)?) {
|
||||||
s.foo().bar()<!UNSAFE_CALL!>.<!>action()
|
s.foo().bar().<!UNSAFE_IMPLICIT_INVOKE_CALL!>action<!>()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun String.foo() = ""
|
fun String.foo() = ""
|
||||||
@@ -12,4 +12,4 @@ fun String.bar() = ""
|
|||||||
|
|
||||||
val functions: Map<String, () -> Any> = TODO()
|
val functions: Map<String, () -> Any> = TODO()
|
||||||
|
|
||||||
fun run(name: String) = <!UNSAFE_CALL!>functions[name]()<!>
|
fun run(name: String) = <!UNSAFE_IMPLICIT_INVOKE_CALL!>functions[name]()<!>
|
||||||
@@ -361,23 +361,23 @@ fun case_21() {
|
|||||||
// TESTCASE NUMBER: 22
|
// TESTCASE NUMBER: 22
|
||||||
fun case_22(a: (() -> Unit)?) {
|
fun case_22(a: (() -> Unit)?) {
|
||||||
if (a != null !is Boolean) {
|
if (a != null !is Boolean) {
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Unit")!><!UNSAFE_CALL!>a<!>()<!>
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Unit")!><!UNSAFE_IMPLICIT_INVOKE_CALL!>a<!>()<!>
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Unit")!>a()<!><!UNSAFE_CALL!>.<!>equals(null)
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Unit")!><!UNSAFE_IMPLICIT_INVOKE_CALL!>a<!>()<!>.equals(null)
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Unit")!>a()<!><!UNSAFE_CALL!>.<!>propT
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Unit")!><!UNSAFE_IMPLICIT_INVOKE_CALL!>a<!>()<!>.propT
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Unit")!>a()<!><!UNSAFE_CALL!>.<!>propAny
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Unit")!><!UNSAFE_IMPLICIT_INVOKE_CALL!>a<!>()<!>.propAny
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Unit")!>a()<!><!UNSAFE_CALL!>.<!>propNullableT
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Unit")!><!UNSAFE_IMPLICIT_INVOKE_CALL!>a<!>()<!>.propNullableT
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Unit")!>a()<!><!UNSAFE_CALL!>.<!>propNullableAny
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Unit")!><!UNSAFE_IMPLICIT_INVOKE_CALL!>a<!>()<!>.propNullableAny
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Unit")!>a()<!><!UNSAFE_CALL!>.<!>funT()
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Unit")!><!UNSAFE_IMPLICIT_INVOKE_CALL!>a<!>()<!>.funT()
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Unit")!>a()<!><!UNSAFE_CALL!>.<!>funAny()
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Unit")!><!UNSAFE_IMPLICIT_INVOKE_CALL!>a<!>()<!>.funAny()
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Unit")!>a()<!><!UNSAFE_CALL!>.<!>funNullableT()
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Unit")!><!UNSAFE_IMPLICIT_INVOKE_CALL!>a<!>()<!>.funNullableT()
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Unit")!>a()<!><!UNSAFE_CALL!>.<!>funNullableAny()
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Unit")!><!UNSAFE_IMPLICIT_INVOKE_CALL!>a<!>()<!>.funNullableAny()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TESTCASE NUMBER: 23
|
// TESTCASE NUMBER: 23
|
||||||
fun case_23(a: ((Float) -> Int?)?, b: Float?) {
|
fun case_23(a: ((Float) -> Int?)?, b: Float?) {
|
||||||
if (a != null !is Boolean && b !== null is Boolean) {
|
if (a != null !is Boolean && b !== null is Boolean) {
|
||||||
val x = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!><!UNSAFE_CALL!>a<!>(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Float?")!>b<!>)<!>
|
val x = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!><!UNSAFE_IMPLICIT_INVOKE_CALL!>a<!>(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Float?")!>b<!>)<!>
|
||||||
if (x != null) {
|
if (x != null) {
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int & kotlin.Int?")!>x<!>
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int & kotlin.Int?")!>x<!>
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int & kotlin.Int?")!>x<!>.equals(null)
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int & kotlin.Int?")!>x<!>.equals(null)
|
||||||
@@ -396,8 +396,8 @@ fun case_23(a: ((Float) -> Int?)?, b: Float?) {
|
|||||||
// TESTCASE NUMBER: 24
|
// TESTCASE NUMBER: 24
|
||||||
fun case_24(a: ((() -> Unit) -> Unit)?, b: (() -> Unit)?) =
|
fun case_24(a: ((() -> Unit) -> Unit)?, b: (() -> Unit)?) =
|
||||||
if (a !== null is Boolean && b !== null !is Boolean) {
|
if (a !== null is Boolean && b !== null !is Boolean) {
|
||||||
<!UNSAFE_CALL!>a<!>(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<kotlin.Unit>?")!>b<!>)
|
<!UNSAFE_IMPLICIT_INVOKE_CALL!>a<!>(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<kotlin.Unit>?")!>b<!>)
|
||||||
<!UNSAFE_CALL!>a<!>(b)
|
<!UNSAFE_IMPLICIT_INVOKE_CALL!>a<!>(b)
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<kotlin.Unit>?")!>b<!><!UNSAFE_CALL!>.<!>equals(null)
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<kotlin.Unit>?")!>b<!><!UNSAFE_CALL!>.<!>equals(null)
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<kotlin.Unit>?")!>b<!>.propT
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<kotlin.Unit>?")!>b<!>.propT
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<kotlin.Unit>?")!>b<!><!UNSAFE_CALL!>.<!>propAny
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<kotlin.Unit>?")!>b<!><!UNSAFE_CALL!>.<!>propAny
|
||||||
@@ -440,7 +440,7 @@ fun case_25(b: Boolean) {
|
|||||||
// TESTCASE NUMBER: 26
|
// TESTCASE NUMBER: 26
|
||||||
fun case_26(a: ((Float) -> Int?)?, b: Float?) {
|
fun case_26(a: ((Float) -> Int?)?, b: Float?) {
|
||||||
if (a != null == true == false && b != null == true == false) {
|
if (a != null == true == false && b != null == true == false) {
|
||||||
val x = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!><!UNSAFE_CALL!>a<!>(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Float?")!>b<!>)<!>
|
val x = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!><!UNSAFE_IMPLICIT_INVOKE_CALL!>a<!>(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Float?")!>b<!>)<!>
|
||||||
if (x != null == true === false) {
|
if (x != null == true === false) {
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!>x<!>
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!>x<!>
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!>x<!><!UNSAFE_CALL!>.<!>equals(null)
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!>x<!><!UNSAFE_CALL!>.<!>equals(null)
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ fun case_3(b: Boolean) {
|
|||||||
val y = if (b) x else null
|
val y = if (b) x else null
|
||||||
|
|
||||||
if (false || false || false || false || y !== null) {
|
if (false || false || false || false || y !== null) {
|
||||||
val z = <!DEBUG_INFO_EXPRESSION_TYPE("<anonymous>?")!><!UNSAFE_CALL!>y<!>()<!>
|
val z = <!DEBUG_INFO_EXPRESSION_TYPE("<anonymous>?")!><!UNSAFE_IMPLICIT_INVOKE_CALL!>y<!>()<!>
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<<anonymous>?>?")!>y<!><!UNSAFE_CALL!>.<!>equals(null)
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<<anonymous>?>?")!>y<!><!UNSAFE_CALL!>.<!>equals(null)
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<<anonymous>?>?")!>y<!>.propT
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<<anonymous>?>?")!>y<!>.propT
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<<anonymous>?>?")!>y<!><!UNSAFE_CALL!>.<!>propAny
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<<anonymous>?>?")!>y<!><!UNSAFE_CALL!>.<!>propAny
|
||||||
@@ -87,7 +87,7 @@ fun case_3(b: Boolean) {
|
|||||||
// TESTCASE NUMBER: 4
|
// TESTCASE NUMBER: 4
|
||||||
fun case_4(a: ((Float) -> Int?)?, b: Float?) {
|
fun case_4(a: ((Float) -> Int?)?, b: Float?) {
|
||||||
if (a != null == true && b != null == true || false || false || false || false || false || false || false || false || false) {
|
if (a != null == true && b != null == true || false || false || false || false || false || false || false || false || false) {
|
||||||
val x = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!><!UNSAFE_CALL!>a<!>(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Float?")!>b<!>)<!>
|
val x = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!><!UNSAFE_IMPLICIT_INVOKE_CALL!>a<!>(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Float?")!>b<!>)<!>
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function1<kotlin.Float, kotlin.Int?>?")!>a<!><!UNSAFE_CALL!>.<!>equals(null)
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function1<kotlin.Float, kotlin.Int?>?")!>a<!><!UNSAFE_CALL!>.<!>equals(null)
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function1<kotlin.Float, kotlin.Int?>?")!>a<!>.propT
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function1<kotlin.Float, kotlin.Int?>?")!>a<!>.propT
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function1<kotlin.Float, kotlin.Int?>?")!>a<!><!UNSAFE_CALL!>.<!>propAny
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function1<kotlin.Float, kotlin.Int?>?")!>a<!><!UNSAFE_CALL!>.<!>propAny
|
||||||
@@ -274,7 +274,7 @@ fun case_11(b: Boolean) {
|
|||||||
val y = if (b) x else null
|
val y = if (b) x else null
|
||||||
|
|
||||||
if (y === null && true) else {
|
if (y === null && true) else {
|
||||||
val z = <!DEBUG_INFO_EXPRESSION_TYPE("<anonymous>?")!><!UNSAFE_CALL!>y<!>()<!>
|
val z = <!DEBUG_INFO_EXPRESSION_TYPE("<anonymous>?")!><!UNSAFE_IMPLICIT_INVOKE_CALL!>y<!>()<!>
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<<anonymous>?>?")!>y<!><!UNSAFE_CALL!>.<!>equals(null)
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<<anonymous>?>?")!>y<!><!UNSAFE_CALL!>.<!>equals(null)
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<<anonymous>?>?")!>y<!>.propT
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<<anonymous>?>?")!>y<!>.propT
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<<anonymous>?>?")!>y<!><!UNSAFE_CALL!>.<!>propAny
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<<anonymous>?>?")!>y<!><!UNSAFE_CALL!>.<!>propAny
|
||||||
@@ -298,7 +298,7 @@ fun case_12(a: ((Float) -> Int?)?, b: Float?, c: Boolean?) {
|
|||||||
if (true && a == null == true || b == null == true) {
|
if (true && a == null == true || b == null == true) {
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
val x = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!><!UNSAFE_CALL!>a<!>(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Float & kotlin.Float?")!>b<!>)<!>
|
val x = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!><!UNSAFE_IMPLICIT_INVOKE_CALL!>a<!>(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Float & kotlin.Float?")!>b<!>)<!>
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function1<kotlin.Float, kotlin.Int?>?")!>a<!><!UNSAFE_CALL!>.<!>equals(null)
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function1<kotlin.Float, kotlin.Int?>?")!>a<!><!UNSAFE_CALL!>.<!>equals(null)
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function1<kotlin.Float, kotlin.Int?>?")!>a<!>.propT
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function1<kotlin.Float, kotlin.Int?>?")!>a<!>.propT
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function1<kotlin.Float, kotlin.Int?>?")!>a<!><!UNSAFE_CALL!>.<!>propAny
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function1<kotlin.Float, kotlin.Int?>?")!>a<!><!UNSAFE_CALL!>.<!>propAny
|
||||||
|
|||||||
@@ -422,7 +422,7 @@ fun case_21() {
|
|||||||
// TESTCASE NUMBER: 22
|
// TESTCASE NUMBER: 22
|
||||||
fun case_22(a: (() -> Unit)?) {
|
fun case_22(a: (() -> Unit)?) {
|
||||||
if (a != implicitNullableNothingProperty) {
|
if (a != implicitNullableNothingProperty) {
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Unit")!><!UNSAFE_CALL!>a<!>()<!>
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Unit")!><!UNSAFE_IMPLICIT_INVOKE_CALL!>a<!>()<!>
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<kotlin.Unit>?")!>a<!><!UNSAFE_CALL!>.<!>equals(null)
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<kotlin.Unit>?")!>a<!><!UNSAFE_CALL!>.<!>equals(null)
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<kotlin.Unit>?")!>a<!>.propT
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<kotlin.Unit>?")!>a<!>.propT
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<kotlin.Unit>?")!>a<!><!UNSAFE_CALL!>.<!>propAny
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<kotlin.Unit>?")!>a<!><!UNSAFE_CALL!>.<!>propAny
|
||||||
@@ -438,7 +438,7 @@ fun case_22(a: (() -> Unit)?) {
|
|||||||
// TESTCASE NUMBER: 23
|
// TESTCASE NUMBER: 23
|
||||||
fun case_23(a: ((Float) -> Int?)?, b: Float?, z: Nothing?) {
|
fun case_23(a: ((Float) -> Int?)?, b: Float?, z: Nothing?) {
|
||||||
if (a != z && b !== z && b !== z) {
|
if (a != z && b !== z && b !== z) {
|
||||||
val x = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!><!UNSAFE_CALL!>a<!>(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Float?")!>b<!>)<!>
|
val x = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!><!UNSAFE_IMPLICIT_INVOKE_CALL!>a<!>(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Float?")!>b<!>)<!>
|
||||||
if (x != z || x !== implicitNullableNothingProperty) {
|
if (x != z || x !== implicitNullableNothingProperty) {
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!>x<!>
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!>x<!>
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!>x<!><!UNSAFE_CALL!>.<!>equals(null)
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!>x<!><!UNSAFE_CALL!>.<!>equals(null)
|
||||||
@@ -457,7 +457,7 @@ fun case_23(a: ((Float) -> Int?)?, b: Float?, z: Nothing?) {
|
|||||||
// TESTCASE NUMBER: 24
|
// TESTCASE NUMBER: 24
|
||||||
fun case_24(a: ((() -> Unit) -> Unit)?, b: (() -> Unit)?, z: Nothing?) =
|
fun case_24(a: ((() -> Unit) -> Unit)?, b: (() -> Unit)?, z: Nothing?) =
|
||||||
if (a !== z && b !== z) {
|
if (a !== z && b !== z) {
|
||||||
<!UNSAFE_CALL!>a<!>(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<kotlin.Unit>?")!>b<!>)
|
<!UNSAFE_IMPLICIT_INVOKE_CALL!>a<!>(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<kotlin.Unit>?")!>b<!>)
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function1<kotlin.Function0<kotlin.Unit>, kotlin.Unit>?")!>a<!><!UNSAFE_CALL!>.<!>equals(null)
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function1<kotlin.Function0<kotlin.Unit>, kotlin.Unit>?")!>a<!><!UNSAFE_CALL!>.<!>equals(null)
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function1<kotlin.Function0<kotlin.Unit>, kotlin.Unit>?")!>a<!>.propT
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function1<kotlin.Function0<kotlin.Unit>, kotlin.Unit>?")!>a<!>.propT
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function1<kotlin.Function0<kotlin.Unit>, kotlin.Unit>?")!>a<!><!UNSAFE_CALL!>.<!>propAny
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function1<kotlin.Function0<kotlin.Unit>, kotlin.Unit>?")!>a<!><!UNSAFE_CALL!>.<!>propAny
|
||||||
@@ -489,7 +489,7 @@ fun case_25(b: Boolean, z: Nothing?) {
|
|||||||
val y = if (b) x else z
|
val y = if (b) x else z
|
||||||
|
|
||||||
if (y !== z || y != implicitNullableNothingProperty) {
|
if (y !== z || y != implicitNullableNothingProperty) {
|
||||||
val z1 = <!DEBUG_INFO_EXPRESSION_TYPE("<anonymous>?")!><!UNSAFE_CALL!>y<!>()<!>
|
val z1 = <!DEBUG_INFO_EXPRESSION_TYPE("<anonymous>?")!><!UNSAFE_IMPLICIT_INVOKE_CALL!>y<!>()<!>
|
||||||
|
|
||||||
if (z1 != z && implicitNullableNothingProperty !== z1) {
|
if (z1 != z && implicitNullableNothingProperty !== z1) {
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("<anonymous>?")!>z1<!><!UNSAFE_CALL!>.<!>a
|
<!DEBUG_INFO_EXPRESSION_TYPE("<anonymous>?")!>z1<!><!UNSAFE_CALL!>.<!>a
|
||||||
@@ -511,7 +511,7 @@ fun case_26(a: ((Float) -> Int?)?, b: Float?) {
|
|||||||
var z = null
|
var z = null
|
||||||
|
|
||||||
if (a != z == true && b != implicitNullableNothingProperty == true) {
|
if (a != z == true && b != implicitNullableNothingProperty == true) {
|
||||||
val x = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!><!UNSAFE_CALL!>a<!>(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Float?")!>b<!>)<!>
|
val x = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!><!UNSAFE_IMPLICIT_INVOKE_CALL!>a<!>(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Float?")!>b<!>)<!>
|
||||||
if (x != implicitNullableNothingProperty == true || z !== x) {
|
if (x != implicitNullableNothingProperty == true || z !== x) {
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!>x<!>
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!>x<!>
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!>x<!><!UNSAFE_CALL!>.<!>equals(null)
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!>x<!><!UNSAFE_CALL!>.<!>equals(null)
|
||||||
@@ -575,7 +575,7 @@ fun case_29(x: Boolean) {
|
|||||||
val y = if (x) z else null
|
val y = if (x) z else null
|
||||||
|
|
||||||
if (false || false || false || false || y !== v) {
|
if (false || false || false || false || y !== v) {
|
||||||
val t = <!DEBUG_INFO_EXPRESSION_TYPE("<anonymous>?")!><!UNSAFE_CALL!>y<!>()<!>
|
val t = <!DEBUG_INFO_EXPRESSION_TYPE("<anonymous>?")!><!UNSAFE_IMPLICIT_INVOKE_CALL!>y<!>()<!>
|
||||||
|
|
||||||
if (z !== t || false) {
|
if (z !== t || false) {
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("<anonymous>?")!>t<!><!UNSAFE_CALL!>.<!>a
|
<!DEBUG_INFO_EXPRESSION_TYPE("<anonymous>?")!>t<!><!UNSAFE_CALL!>.<!>a
|
||||||
@@ -595,7 +595,7 @@ fun case_29(x: Boolean) {
|
|||||||
// TESTCASE NUMBER: 30
|
// TESTCASE NUMBER: 30
|
||||||
fun case_30(a: ((Float) -> Int?)?, b: Float?) {
|
fun case_30(a: ((Float) -> Int?)?, b: Float?) {
|
||||||
if (implicitNullableNothingProperty != a == true && b != implicitNullableNothingProperty == true || false || false || false || false || false || false || false || false || false) {
|
if (implicitNullableNothingProperty != a == true && b != implicitNullableNothingProperty == true || false || false || false || false || false || false || false || false || false) {
|
||||||
val x = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!><!UNSAFE_CALL!>a<!>(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Float?")!>b<!>)<!>
|
val x = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!><!UNSAFE_IMPLICIT_INVOKE_CALL!>a<!>(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Float?")!>b<!>)<!>
|
||||||
if (false || implicitNullableNothingProperty != x == true) {
|
if (false || implicitNullableNothingProperty != x == true) {
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!>x<!>
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!>x<!>
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!>x<!><!UNSAFE_CALL!>.<!>equals(null)
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!>x<!><!UNSAFE_CALL!>.<!>equals(null)
|
||||||
@@ -651,7 +651,7 @@ fun case_33(a: ((Float) -> Int?)?, b: Float?, c: Boolean?) {
|
|||||||
if (true && a == z == true || b == null == true) {
|
if (true && a == z == true || b == null == true) {
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
val x = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!><!UNSAFE_CALL!>a<!>(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Float & kotlin.Float?")!>b<!>)<!>
|
val x = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!><!UNSAFE_IMPLICIT_INVOKE_CALL!>a<!>(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Float & kotlin.Float?")!>b<!>)<!>
|
||||||
if (x == z == true && x === z || (c != z && <!UNSAFE_CALL!>!<!>c)) {
|
if (x == z == true && x === z || (c != z && <!UNSAFE_CALL!>!<!>c)) {
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@@ -1054,7 +1054,7 @@ fun case_60(b: Boolean) {
|
|||||||
val y = if (b) x else nullableNothingProperty
|
val y = if (b) x else nullableNothingProperty
|
||||||
|
|
||||||
if (y != nullableNothingProperty) {
|
if (y != nullableNothingProperty) {
|
||||||
val z = <!DEBUG_INFO_EXPRESSION_TYPE("<anonymous>?")!><!UNSAFE_CALL!>y<!>()<!>
|
val z = <!DEBUG_INFO_EXPRESSION_TYPE("<anonymous>?")!><!UNSAFE_IMPLICIT_INVOKE_CALL!>y<!>()<!>
|
||||||
|
|
||||||
if (z == nullableNothingProperty) {
|
if (z == nullableNothingProperty) {
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("<anonymous>?")!>z<!>
|
<!DEBUG_INFO_EXPRESSION_TYPE("<anonymous>?")!>z<!>
|
||||||
|
|||||||
@@ -406,7 +406,7 @@ fun case_21() {
|
|||||||
fun case_22(a: (() -> Unit)?) {
|
fun case_22(a: (() -> Unit)?) {
|
||||||
var y = null
|
var y = null
|
||||||
if (a != null || y != a) {
|
if (a != null || y != a) {
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Unit")!><!UNSAFE_CALL!>a<!>()<!>
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Unit")!><!UNSAFE_IMPLICIT_INVOKE_CALL!>a<!>()<!>
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<kotlin.Unit>?")!>a<!><!UNSAFE_CALL!>.<!>equals(null)
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<kotlin.Unit>?")!>a<!><!UNSAFE_CALL!>.<!>equals(null)
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<kotlin.Unit>?")!>a<!>.propT
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<kotlin.Unit>?")!>a<!>.propT
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<kotlin.Unit>?")!>a<!><!UNSAFE_CALL!>.<!>propAny
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<kotlin.Unit>?")!>a<!><!UNSAFE_CALL!>.<!>propAny
|
||||||
@@ -422,7 +422,7 @@ fun case_22(a: (() -> Unit)?) {
|
|||||||
// TESTCASE NUMBER: 23
|
// TESTCASE NUMBER: 23
|
||||||
fun case_23(a: ((Float) -> Int?)?, b: Float?, c: Nothing?) {
|
fun case_23(a: ((Float) -> Int?)?, b: Float?, c: Nothing?) {
|
||||||
if (a != null && b !== null || a != c && b !== c) {
|
if (a != null && b !== null || a != c && b !== c) {
|
||||||
val x = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!><!UNSAFE_CALL!>a<!>(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Float?")!>b<!>)<!>
|
val x = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!><!UNSAFE_IMPLICIT_INVOKE_CALL!>a<!>(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Float?")!>b<!>)<!>
|
||||||
if (x != null || c !== x) {
|
if (x != null || c !== x) {
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!>x<!>
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!>x<!>
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!>x<!><!UNSAFE_CALL!>.<!>equals(null)
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!>x<!><!UNSAFE_CALL!>.<!>equals(null)
|
||||||
@@ -441,7 +441,7 @@ fun case_23(a: ((Float) -> Int?)?, b: Float?, c: Nothing?) {
|
|||||||
// TESTCASE NUMBER: 24
|
// TESTCASE NUMBER: 24
|
||||||
fun case_24(a: ((() -> Unit) -> Unit)?, b: (() -> Unit)?) =
|
fun case_24(a: ((() -> Unit) -> Unit)?, b: (() -> Unit)?) =
|
||||||
if (a !== null && b !== null || implicitNullableNothingProperty != a && nullableNothingProperty !== b) {
|
if (a !== null && b !== null || implicitNullableNothingProperty != a && nullableNothingProperty !== b) {
|
||||||
<!UNSAFE_CALL!>a<!>(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<kotlin.Unit>?")!>b<!>)
|
<!UNSAFE_IMPLICIT_INVOKE_CALL!>a<!>(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function0<kotlin.Unit>?")!>b<!>)
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function1<kotlin.Function0<kotlin.Unit>, kotlin.Unit>?")!>a<!><!UNSAFE_CALL!>.<!>equals(null)
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function1<kotlin.Function0<kotlin.Unit>, kotlin.Unit>?")!>a<!><!UNSAFE_CALL!>.<!>equals(null)
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function1<kotlin.Function0<kotlin.Unit>, kotlin.Unit>?")!>a<!>.propT
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function1<kotlin.Function0<kotlin.Unit>, kotlin.Unit>?")!>a<!>.propT
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function1<kotlin.Function0<kotlin.Unit>, kotlin.Unit>?")!>a<!><!UNSAFE_CALL!>.<!>propAny
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Function1<kotlin.Function0<kotlin.Unit>, kotlin.Unit>?")!>a<!><!UNSAFE_CALL!>.<!>propAny
|
||||||
@@ -475,7 +475,7 @@ fun case_25(b: Boolean) {
|
|||||||
|
|
||||||
if (y !== null || x()!!.b != y) {
|
if (y !== null || x()!!.b != y) {
|
||||||
if (x()!!.b != y) {
|
if (x()!!.b != y) {
|
||||||
val z = <!DEBUG_INFO_EXPRESSION_TYPE("<anonymous>?")!><!UNSAFE_CALL!>y<!>()<!>
|
val z = <!DEBUG_INFO_EXPRESSION_TYPE("<anonymous>?")!><!UNSAFE_IMPLICIT_INVOKE_CALL!>y<!>()<!>
|
||||||
|
|
||||||
if (z != null) {
|
if (z != null) {
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("<anonymous> & <anonymous>?")!>z<!>.a
|
<!DEBUG_INFO_EXPRESSION_TYPE("<anonymous> & <anonymous>?")!>z<!>.a
|
||||||
@@ -498,7 +498,7 @@ fun case_26(a: ((Float) -> Int?)?, b: Float?) {
|
|||||||
var c: Nothing? = null
|
var c: Nothing? = null
|
||||||
|
|
||||||
if (a != null == true && b != null == true || c != a == true && b != c == true) {
|
if (a != null == true && b != null == true || c != a == true && b != c == true) {
|
||||||
val x = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!><!UNSAFE_CALL!>a<!>(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Float?")!>b<!>)<!>
|
val x = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int?")!><!UNSAFE_IMPLICIT_INVOKE_CALL!>a<!>(<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Float?")!>b<!>)<!>
|
||||||
if (x != null == true) {
|
if (x != null == true) {
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int & kotlin.Int?")!>x<!>
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int & kotlin.Int?")!>x<!>
|
||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int & kotlin.Int?")!>x<!>.equals(null)
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int & kotlin.Int?")!>x<!>.equals(null)
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ internal fun FirReference.getResolvedKtSymbolOfNameReference(builder: KtSymbolBy
|
|||||||
|
|
||||||
internal fun FirErrorNamedReference.getCandidateSymbols(): Collection<FirBasedSymbol<*>> =
|
internal fun FirErrorNamedReference.getCandidateSymbols(): Collection<FirBasedSymbol<*>> =
|
||||||
when (val diagnostic = diagnostic) {
|
when (val diagnostic = diagnostic) {
|
||||||
is ConeInapplicableCandidateError -> listOf(diagnostic.candidateSymbol)
|
is ConeInapplicableCandidateError -> listOf(diagnostic.candidate.symbol)
|
||||||
is ConeHiddenCandidateError -> listOf(diagnostic.candidateSymbol)
|
is ConeHiddenCandidateError -> listOf(diagnostic.candidateSymbol)
|
||||||
is ConeAmbiguityError -> diagnostic.candidates
|
is ConeAmbiguityError -> diagnostic.candidates
|
||||||
is ConeOperatorAmbiguityError -> diagnostic.candidates
|
is ConeOperatorAmbiguityError -> diagnostic.candidates
|
||||||
|
|||||||
+1
-1
@@ -268,7 +268,7 @@ internal object FirReferenceResolveHelper {
|
|||||||
val candidates = when (val diagnostic = fir.diagnostic) {
|
val candidates = when (val diagnostic = fir.diagnostic) {
|
||||||
is ConeAmbiguityError -> diagnostic.candidates
|
is ConeAmbiguityError -> diagnostic.candidates
|
||||||
is ConeOperatorAmbiguityError -> diagnostic.candidates
|
is ConeOperatorAmbiguityError -> diagnostic.candidates
|
||||||
is ConeInapplicableCandidateError -> listOf(diagnostic.candidateSymbol)
|
is ConeInapplicableCandidateError -> listOf(diagnostic.candidate.symbol)
|
||||||
else -> emptyList()
|
else -> emptyList()
|
||||||
}
|
}
|
||||||
return candidates.mapNotNull { it.fir.buildSymbol(symbolBuilder) }
|
return candidates.mapNotNull { it.fir.buildSymbol(symbolBuilder) }
|
||||||
|
|||||||
Reference in New Issue
Block a user