[FIR] Implement UNRESOLVED_REFERENCE_WRONG_RECEIVER
This commit is contained in:
+1
-1
@@ -16,6 +16,6 @@ FILE: lambdaAsReceiver.kt
|
||||
fun <anonymous>(): R|kotlin/String| <inline=Unknown> {
|
||||
^ String()
|
||||
}
|
||||
.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /bar>#()
|
||||
.<None of the following candidates is applicable because of receiver type mismatch: [/bar]>#()
|
||||
String().R|/bar|()
|
||||
}
|
||||
|
||||
+1
-1
@@ -9,6 +9,6 @@ fun main1() {
|
||||
}
|
||||
|
||||
fun main2() {
|
||||
{ "" }.<!INAPPLICABLE_CANDIDATE!>bar<!>()
|
||||
{ "" }.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>bar<!>()
|
||||
"".bar()
|
||||
}
|
||||
|
||||
+2
-2
@@ -29,7 +29,7 @@ FILE: lambdaArgInScopeFunction.kt
|
||||
}
|
||||
) }
|
||||
R|<local>/lambda|.R|/checkType|<R|(() -> KotlinClass)?|>(<L> = checkType@fun R|CheckTypeInv<kotlin/Function0<KotlinClass>?>|.<anonymous>(): R|kotlin/Unit| <inline=NoInline> {
|
||||
this@R|special/anonymous|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /_>#<R|(kotlin/Unit) -> KotlinClass?|>()
|
||||
this@R|special/anonymous|.<None of the following candidates is applicable because of receiver type mismatch: [/_]>#<R|(kotlin/Unit) -> KotlinClass?|>()
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -50,7 +50,7 @@ FILE: lambdaArgInScopeFunction.kt
|
||||
}
|
||||
)
|
||||
R|<local>/lambda|.R|/checkType|<R|() -> KotlinClass|>(<L> = checkType@fun R|CheckTypeInv<kotlin/Function0<KotlinClass>>|.<anonymous>(): R|kotlin/Unit| <inline=NoInline> {
|
||||
this@R|special/anonymous|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /_>#<R|(kotlin/Unit) -> KotlinClass?|>()
|
||||
this@R|special/anonymous|.<None of the following candidates is applicable because of receiver type mismatch: [/_]>#<R|(kotlin/Unit) -> KotlinClass?|>()
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ fun case1(kotlinClass: KotlinClass?) {
|
||||
{it}
|
||||
}
|
||||
|
||||
lambda.checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Function1<Unit, KotlinClass?>>() }
|
||||
lambda.checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Function1<Unit, KotlinClass?>>() }
|
||||
}
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case2(kotlinClass: KotlinClass) {
|
||||
@@ -36,5 +36,5 @@ fun case2(kotlinClass: KotlinClass) {
|
||||
{it}
|
||||
}
|
||||
|
||||
lambda.checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Function1<Unit, KotlinClass?>>() }
|
||||
lambda.checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Function1<Unit, KotlinClass?>>() }
|
||||
}
|
||||
|
||||
+4
-4
@@ -29,11 +29,11 @@ FILE: KotlinClass.kt
|
||||
}
|
||||
)
|
||||
R|<local>/invalidType|.R|/checkType|<R|(JavaClass) -> kotlin/Boolean|>(<L> = checkType@fun R|CheckTypeInv<kotlin/Function1<JavaClass, kotlin/Boolean>>|.<anonymous>(): R|kotlin/Unit| <inline=NoInline> {
|
||||
this@R|special/anonymous|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /_>#<R|(kotlin/Nothing) -> kotlin/Boolean|>()
|
||||
this@R|special/anonymous|.<None of the following candidates is applicable because of receiver type mismatch: [/_]>#<R|(kotlin/Nothing) -> kotlin/Boolean|>()
|
||||
}
|
||||
)
|
||||
R|/Case1.Case1|(R|<local>/javaClass|).R|/Case1.x|.R|/checkType|<R|(KotlinClass) -> kotlin/Boolean|>(<L> = checkType@fun R|CheckTypeInv<kotlin/Function1<KotlinClass, kotlin/Boolean>>|.<anonymous>(): R|kotlin/Unit| <inline=NoInline> {
|
||||
this@R|special/anonymous|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /_>#<R|(kotlin/Nothing) -> kotlin/Boolean|>()
|
||||
this@R|special/anonymous|.<None of the following candidates is applicable because of receiver type mismatch: [/_]>#<R|(kotlin/Nothing) -> kotlin/Boolean|>()
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -122,11 +122,11 @@ FILE: KotlinClass.kt
|
||||
}
|
||||
)
|
||||
R|<local>/invalidType|.R|/checkType|<R|(KotlinClass) -> kotlin/Boolean|>(<L> = checkType@fun R|CheckTypeInv<kotlin/Function1<KotlinClass, kotlin/Boolean>>|.<anonymous>(): R|kotlin/Unit| <inline=NoInline> {
|
||||
this@R|special/anonymous|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /_>#<R|(kotlin/Nothing) -> kotlin/Boolean|>()
|
||||
this@R|special/anonymous|.<None of the following candidates is applicable because of receiver type mismatch: [/_]>#<R|(kotlin/Nothing) -> kotlin/Boolean|>()
|
||||
}
|
||||
)
|
||||
R|/Case2.Case2|(R|<local>/kotlinClass|).R|/Case2.x|.R|/checkType|<R|(KotlinClass) -> kotlin/Boolean|>(<L> = checkType@fun R|CheckTypeInv<kotlin/Function1<KotlinClass, kotlin/Boolean>>|.<anonymous>(): R|kotlin/Unit| <inline=NoInline> {
|
||||
this@R|special/anonymous|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /_>#<R|(kotlin/Nothing) -> kotlin/Boolean|>()
|
||||
this@R|special/anonymous|.<None of the following candidates is applicable because of receiver type mismatch: [/_]>#<R|(kotlin/Nothing) -> kotlin/Boolean|>()
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
+4
-4
@@ -26,9 +26,9 @@ fun case1(javaClass: JavaClass?) {
|
||||
|
||||
validType.checkType { _<Function1<JavaClass, Boolean>>() } //ok
|
||||
|
||||
invalidType.checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Function1<Nothing, Boolean>>() } //(!!!)
|
||||
invalidType.checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Function1<Nothing, Boolean>>() } //(!!!)
|
||||
|
||||
Case1(javaClass).x.checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Function1<Nothing, Boolean>>() } //(!!!)
|
||||
Case1(javaClass).x.checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Function1<Nothing, Boolean>>() } //(!!!)
|
||||
}
|
||||
|
||||
class Case1(val javaClass: JavaClass?) {
|
||||
@@ -55,9 +55,9 @@ fun case2(kotlinClass: KotlinClass?) {
|
||||
|
||||
validType.checkType { _<Function1<KotlinClass, Boolean>>() } //ok
|
||||
|
||||
invalidType.checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Function1<Nothing, Boolean>>() } //(!!!)
|
||||
invalidType.checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Function1<Nothing, Boolean>>() } //(!!!)
|
||||
|
||||
Case2(kotlinClass).x.checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Function1<Nothing, Boolean>>() } //(!!!)
|
||||
Case2(kotlinClass).x.checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Function1<Nothing, Boolean>>() } //(!!!)
|
||||
}
|
||||
|
||||
class Case2(val kotlinClass: KotlinClass?) {
|
||||
|
||||
+4
-4
@@ -4,7 +4,7 @@ FILE: orInWhenBranch.kt
|
||||
public final fun test_1(a: R|kotlin/Any?|): R|kotlin/Unit| {
|
||||
when (R|<local>/a|) {
|
||||
($subj$ is R|kotlin/String|) || ($subj$ is R|kotlin/Any|) -> {
|
||||
R|<local>/a|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /foo>#()
|
||||
R|<local>/a|.<None of the following candidates is applicable because of receiver type mismatch: [/foo]>#()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ FILE: orInWhenBranch.kt
|
||||
public final fun test_2(a: R|kotlin/Any?|): R|kotlin/Unit| {
|
||||
when () {
|
||||
(R|<local>/a| is R|kotlin/String|) || (R|<local>/a| is R|kotlin/Any|) -> {
|
||||
R|<local>/a|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /foo>#()
|
||||
R|<local>/a|.<None of the following candidates is applicable because of receiver type mismatch: [/foo]>#()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ FILE: orInWhenBranch.kt
|
||||
public final fun test_3(a: R|kotlin/Any?|, b: R|kotlin/Boolean|): R|kotlin/Unit| {
|
||||
when (R|<local>/a|) {
|
||||
($subj$ is R|kotlin/String|) || ==($subj$, R|<local>/b|) -> {
|
||||
R|<local>/a|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /foo>#()
|
||||
R|<local>/a|.<None of the following candidates is applicable because of receiver type mismatch: [/foo]>#()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ FILE: orInWhenBranch.kt
|
||||
public final fun test_4(a: R|kotlin/Any?|, b: R|kotlin/Boolean|): R|kotlin/Unit| {
|
||||
when () {
|
||||
(R|<local>/a| is R|kotlin/String|) || R|<local>/b| -> {
|
||||
R|<local>/a|.<Inapplicable(INAPPLICABLE_WRONG_RECEIVER): /foo>#()
|
||||
R|<local>/a|.<None of the following candidates is applicable because of receiver type mismatch: [/foo]>#()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -4,24 +4,24 @@ fun String.foo() {}
|
||||
|
||||
fun test_1(a: Any?) {
|
||||
when (a) {
|
||||
is String, is Any -> a.<!INAPPLICABLE_CANDIDATE!>foo<!>() // Should be Bad
|
||||
is String, is Any -> a.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>foo<!>() // Should be Bad
|
||||
}
|
||||
}
|
||||
|
||||
fun test_2(a: Any?) {
|
||||
if (a is String || a is Any) {
|
||||
a.<!INAPPLICABLE_CANDIDATE!>foo<!>() // Should be Bad
|
||||
a.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>foo<!>() // Should be Bad
|
||||
}
|
||||
}
|
||||
|
||||
fun test_3(a: Any?, b: Boolean) {
|
||||
when (a) {
|
||||
is String, b -> a.<!INAPPLICABLE_CANDIDATE!>foo<!>() // Should be Bad
|
||||
is String, b -> a.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>foo<!>() // Should be Bad
|
||||
}
|
||||
}
|
||||
|
||||
fun test_4(a: Any?, b: Boolean) {
|
||||
if (a is String || b) {
|
||||
a.<!INAPPLICABLE_CANDIDATE!>foo<!>() // Should be Bad
|
||||
a.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>foo<!>() // Should be Bad
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -141,9 +141,9 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("checkType.kt")
|
||||
public void testCheckType() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/checkType.kt");
|
||||
@TestMetadata("checkTypeTest.kt")
|
||||
public void testCheckTypeTest() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/checkTypeTest.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
+3
-3
@@ -141,9 +141,9 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("checkType.kt")
|
||||
public void testCheckType() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/checkType.kt");
|
||||
@TestMetadata("checkTypeTest.kt")
|
||||
public void testCheckTypeTest() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/checkTypeTest.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
+4
@@ -111,6 +111,10 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
|
||||
parameter<Symbol>("reference")
|
||||
parameter<String>("message")
|
||||
}
|
||||
|
||||
val UNRESOLVED_REFERENCE_WRONG_RECEIVER by error<PsiElement> {
|
||||
parameter<Collection<Symbol>>("candidates")
|
||||
}
|
||||
}
|
||||
|
||||
val CALL_RESOLUTION by object : DiagnosticGroup("Call resolution") {
|
||||
|
||||
@@ -136,6 +136,7 @@ object FirErrors {
|
||||
val NO_THIS by error0<PsiElement>()
|
||||
val DEPRECATION_ERROR by error2<PsiElement, FirBasedSymbol<*>, String>(SourceElementPositioningStrategies.REFERENCED_NAME_BY_QUALIFIED)
|
||||
val DEPRECATION by warning2<PsiElement, FirBasedSymbol<*>, String>(SourceElementPositioningStrategies.REFERENCED_NAME_BY_QUALIFIED)
|
||||
val UNRESOLVED_REFERENCE_WRONG_RECEIVER by error1<PsiElement, Collection<FirBasedSymbol<*>>>()
|
||||
|
||||
// Call resolution
|
||||
val CREATING_AN_INSTANCE_OF_ABSTRACT_CLASS by error0<KtExpression>()
|
||||
|
||||
+22
-25
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.fir.expressions.arguments
|
||||
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
|
||||
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeAmbiguityError
|
||||
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeInapplicableCandidateError
|
||||
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeInapplicableWrongReceiver
|
||||
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedNameError
|
||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||
import org.jetbrains.kotlin.fir.typeContext
|
||||
@@ -26,7 +27,6 @@ import org.jetbrains.kotlin.fir.types.ConeKotlinErrorType
|
||||
import org.jetbrains.kotlin.fir.types.coneType
|
||||
import org.jetbrains.kotlin.fir.types.render
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
|
||||
import org.jetbrains.kotlin.resolve.calls.tower.CandidateApplicability
|
||||
import org.jetbrains.kotlin.resolve.calls.tower.isSuccess
|
||||
import org.jetbrains.kotlin.types.AbstractTypeChecker
|
||||
|
||||
@@ -63,28 +63,14 @@ object FirDelegatedPropertyChecker : FirPropertyChecker() {
|
||||
(if (isGet) "getValue" else "setValue") + "(${functionCall.arguments.joinToString(", ") { it.typeRef.coneType.render() }})"
|
||||
val delegateDescription = if (isGet) "delegate" else "delegate for var (read-write property)"
|
||||
|
||||
fun reportInapplicableDiagnostics(
|
||||
candidateApplicability: CandidateApplicability,
|
||||
candidates: Collection<FirBasedSymbol<*>>
|
||||
) {
|
||||
if (candidateApplicability == CandidateApplicability.INAPPLICABLE_WRONG_RECEIVER) {
|
||||
reporter.reportOn(
|
||||
errorNamedReference.source,
|
||||
FirErrors.DELEGATE_SPECIAL_FUNCTION_MISSING,
|
||||
expectedFunctionSignature,
|
||||
delegateType,
|
||||
delegateDescription,
|
||||
context
|
||||
)
|
||||
} else {
|
||||
reporter.reportOn(
|
||||
errorNamedReference.source,
|
||||
FirErrors.DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE,
|
||||
expectedFunctionSignature,
|
||||
candidates,
|
||||
context
|
||||
)
|
||||
}
|
||||
fun reportInapplicableDiagnostics(candidates: Collection<FirBasedSymbol<*>>) {
|
||||
reporter.reportOn(
|
||||
errorNamedReference.source,
|
||||
FirErrors.DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE,
|
||||
expectedFunctionSignature,
|
||||
candidates,
|
||||
context
|
||||
)
|
||||
}
|
||||
|
||||
return when (val diagnostic = errorNamedReference.diagnostic) {
|
||||
@@ -110,12 +96,23 @@ object FirDelegatedPropertyChecker : FirPropertyChecker() {
|
||||
context
|
||||
)
|
||||
} else {
|
||||
reportInapplicableDiagnostics(diagnostic.applicability, diagnostic.candidates.map { it.symbol })
|
||||
reportInapplicableDiagnostics(diagnostic.candidates.map { it.symbol })
|
||||
}
|
||||
true
|
||||
}
|
||||
is ConeInapplicableWrongReceiver -> {
|
||||
reporter.reportOn(
|
||||
errorNamedReference.source,
|
||||
FirErrors.DELEGATE_SPECIAL_FUNCTION_MISSING,
|
||||
expectedFunctionSignature,
|
||||
delegateType,
|
||||
delegateDescription,
|
||||
context
|
||||
)
|
||||
true
|
||||
}
|
||||
is ConeInapplicableCandidateError -> {
|
||||
reportInapplicableDiagnostics(diagnostic.applicability, listOf(diagnostic.candidate.symbol))
|
||||
reportInapplicableDiagnostics(listOf(diagnostic.candidate.symbol))
|
||||
true
|
||||
}
|
||||
else -> false
|
||||
|
||||
+2
-4
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.fir.expressions.toResolvedCallableSymbol
|
||||
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
|
||||
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
||||
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeInapplicableCandidateError
|
||||
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeInapplicableWrongReceiver
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
||||
@@ -33,10 +34,7 @@ object FirUpperBoundViolatedExpressionChecker : FirQualifiedAccessExpressionChec
|
||||
if (calleReference is FirResolvedNamedReference) {
|
||||
calleeSymbol = calleReference.toResolvedCallableSymbol()
|
||||
} else if (calleReference is FirErrorNamedReference) {
|
||||
val diagnostic = calleReference.diagnostic
|
||||
if (diagnostic is ConeInapplicableCandidateError &&
|
||||
diagnostic.applicability == CandidateApplicability.INAPPLICABLE_WRONG_RECEIVER
|
||||
) {
|
||||
if (calleReference.diagnostic is ConeInapplicableWrongReceiver) {
|
||||
return
|
||||
}
|
||||
calleeSymbol = calleReference.candidateSymbol as? FirCallableSymbol<*>
|
||||
|
||||
+2
-5
@@ -19,10 +19,7 @@ import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
|
||||
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
|
||||
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeAmbiguityError
|
||||
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeInapplicableCandidateError
|
||||
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeInstanceAccessBeforeSuperCall
|
||||
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedNameError
|
||||
import org.jetbrains.kotlin.fir.resolve.diagnostics.*
|
||||
import org.jetbrains.kotlin.fir.types.ConeKotlinErrorType
|
||||
import org.jetbrains.kotlin.fir.types.FirErrorTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
||||
@@ -121,7 +118,7 @@ class ErrorNodeDiagnosticCollectorComponent(
|
||||
|
||||
// Will be handled by [FirDelegatedPropertyChecker]
|
||||
if (source.kind == FirFakeSourceElementKind.DelegatedPropertyAccessor &&
|
||||
(diagnostic is ConeUnresolvedNameError || diagnostic is ConeAmbiguityError || diagnostic is ConeInapplicableCandidateError)
|
||||
(diagnostic is ConeUnresolvedNameError || diagnostic is ConeAmbiguityError || diagnostic is ConeInapplicableWrongReceiver || diagnostic is ConeInapplicableCandidateError)
|
||||
) {
|
||||
return
|
||||
}
|
||||
|
||||
+2
@@ -430,6 +430,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.UNNECESSARY_SAFE_
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.UNREACHABLE_CODE
|
||||
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_WRONG_RECEIVER
|
||||
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.UNSAFE_INFIX_CALL
|
||||
@@ -797,6 +798,7 @@ class FirDefaultErrorMessages {
|
||||
map.put(ITERATOR_AMBIGUITY, "Method ''iterator()'' is ambiguous for this expression: {0}", SYMBOLS)
|
||||
map.put(HAS_NEXT_FUNCTION_AMBIGUITY, "Method ''hasNext()'' is ambiguous for this expression: {0}", SYMBOLS)
|
||||
map.put(NEXT_AMBIGUITY, "Method ''next()'' is ambiguous for this expression: {0}", SYMBOLS)
|
||||
map.put(UNRESOLVED_REFERENCE_WRONG_RECEIVER, "Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: {0}", SYMBOLS)
|
||||
|
||||
// Types & type parameters
|
||||
map.put(RECURSION_IN_IMPLICIT_TYPES, "Recursion in implicit types")
|
||||
|
||||
+1
@@ -44,6 +44,7 @@ private fun ConeDiagnostic.toFirDiagnostic(
|
||||
is ConeFunctionExpectedError -> FirErrors.FUNCTION_EXPECTED.createOn(source, this.expression, this.type)
|
||||
is ConeResolutionToClassifierError -> FirErrors.RESOLUTION_TO_CLASSIFIER.createOn(source, this.classSymbol)
|
||||
is ConeHiddenCandidateError -> FirErrors.INVISIBLE_REFERENCE.createOn(source, this.candidateSymbol)
|
||||
is ConeInapplicableWrongReceiver -> FirErrors.UNRESOLVED_REFERENCE_WRONG_RECEIVER.createOn(source, this.candidates)
|
||||
is ConeNoCompanionObject -> FirErrors.NO_COMPANION_OBJECT.createOn(source, this.symbol)
|
||||
is ConeAmbiguityError -> when {
|
||||
applicability.isSuccess -> FirErrors.OVERLOAD_RESOLUTION_AMBIGUITY.createOn(source, this.candidates.map { it.symbol })
|
||||
|
||||
@@ -705,6 +705,7 @@ class FirCallResolver(
|
||||
val candidate = candidates.single()
|
||||
val diagnostic = when (applicability) {
|
||||
CandidateApplicability.HIDDEN -> ConeHiddenCandidateError(candidate.symbol)
|
||||
CandidateApplicability.INAPPLICABLE_WRONG_RECEIVER -> ConeInapplicableWrongReceiver(listOf(candidate.symbol))
|
||||
CandidateApplicability.NO_COMPANION_OBJECT -> ConeNoCompanionObject(candidate.symbol as FirRegularClassSymbol)
|
||||
else -> ConeInapplicableCandidateError(applicability, candidate)
|
||||
}
|
||||
|
||||
+11
@@ -63,6 +63,17 @@ class ConeHiddenCandidateError(
|
||||
override val reason: String get() = "HIDDEN: ${describeSymbol(candidateSymbol)} is invisible"
|
||||
}
|
||||
|
||||
class ConeInapplicableWrongReceiver(val candidates: Collection<FirBasedSymbol<*>>) : ConeDiagnostic() {
|
||||
override val reason: String
|
||||
get() = "None of the following candidates is applicable because of receiver type mismatch: ${
|
||||
candidates.map {
|
||||
describeSymbol(
|
||||
it
|
||||
)
|
||||
}
|
||||
}"
|
||||
}
|
||||
|
||||
class ConeInapplicableCandidateError(
|
||||
val applicability: CandidateApplicability,
|
||||
val candidate: Candidate,
|
||||
|
||||
+1
-1
@@ -34,7 +34,7 @@ fun test() {
|
||||
bar<Int>()
|
||||
bar<<!UPPER_BOUND_VIOLATED!>Double?<!>>()
|
||||
bar<<!UPPER_BOUND_VIOLATED!>Double<!>>()
|
||||
1.<!INAPPLICABLE_CANDIDATE!>buzz<!><Double>()
|
||||
1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>buzz<!><Double>()
|
||||
}
|
||||
|
||||
fun <T : Any> foo() {}
|
||||
|
||||
+2
-2
@@ -15,7 +15,7 @@ operator fun String.unaryPlus(): Int = 0
|
||||
fun test() {
|
||||
requireInt(+ "")
|
||||
requireInt(+ Example())
|
||||
requireString(<!ARGUMENT_TYPE_MISMATCH!><!INAPPLICABLE_CANDIDATE!>+<!> ExampleDeprecated()<!>)
|
||||
requireString(<!ARGUMENT_TYPE_MISMATCH!><!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>+<!> ExampleDeprecated()<!>)
|
||||
}
|
||||
|
||||
fun requireInt(n: Int) {}
|
||||
@@ -26,7 +26,7 @@ class Example2 {
|
||||
<!INAPPLICABLE_OPERATOR_MODIFIER!>operator<!> fun minus() = this
|
||||
|
||||
fun test() {
|
||||
<!INAPPLICABLE_CANDIDATE!>+<!>this
|
||||
<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>+<!>this
|
||||
<!UNRESOLVED_REFERENCE!>-<!>this
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -21,10 +21,10 @@ import kotlin.reflect.KProperty0
|
||||
import kotlin.reflect.KProperty1
|
||||
|
||||
fun case() {
|
||||
(V)::a checkType { <!INAPPLICABLE_CANDIDATE!>_<!><KProperty0<Int>>() }
|
||||
(V)::a checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><KProperty0<Int>>() }
|
||||
(V)::a checkType { _<KProperty1<V, String>>() }
|
||||
|
||||
(test.abc.V)::a checkType { <!INAPPLICABLE_CANDIDATE!>_<!><KProperty0<Int>>() }
|
||||
(test.abc.V)::a checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><KProperty0<Int>>() }
|
||||
(test.abc.V)::a checkType { _<KProperty1<V, String>>() }
|
||||
|
||||
V::a checkType { _<KProperty1<V, String>>() }
|
||||
|
||||
Vendored
+1
-1
@@ -15,7 +15,7 @@ fun test1() {
|
||||
bar("", 1, ::foo).checkType { _<Pair<String, Int>>() }
|
||||
bar("", 1, ::fooReturnInt).checkType { _<Pair<String, Int>>() }
|
||||
bar("", 1, ::fooTakeString).checkType { _<Pair<String, Int>>() }
|
||||
bar("", "", ::fooReturnInt).checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Pair<String, Any>>() }
|
||||
bar("", "", ::fooReturnInt).checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Pair<String, Any>>() }
|
||||
|
||||
val x: String = <!INITIALIZER_TYPE_MISMATCH, TYPE_MISMATCH!>bar("", "", ::fooReturnInt)<!>
|
||||
|
||||
|
||||
+1
-1
@@ -10,6 +10,6 @@ fun A.foo() = ""
|
||||
|
||||
class A {
|
||||
fun main() {
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>bar<!>(::<!OVERLOAD_RESOLUTION_AMBIGUITY!>foo<!>) <!INAPPLICABLE_CANDIDATE!>checkType<!> { _<String>() }
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>bar<!>(::<!OVERLOAD_RESOLUTION_AMBIGUITY!>foo<!>) <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>checkType<!> { _<String>() }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
// !CHECK_TYPE
|
||||
|
||||
interface A
|
||||
interface B : A
|
||||
interface C : B
|
||||
|
||||
fun test(b: B) {
|
||||
b checkType { _<B>() }
|
||||
b checkType { <!INAPPLICABLE_CANDIDATE!>_<!><A>() }
|
||||
b checkType { <!INAPPLICABLE_CANDIDATE!>_<!><C>() }
|
||||
}
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !CHECK_TYPE
|
||||
|
||||
interface A
|
||||
+1
-1
@@ -19,5 +19,5 @@ fun check() {
|
||||
val f: IntArray = [1]
|
||||
[f] checkType { _<Array<IntArray>>() }
|
||||
|
||||
[1, ""] checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Array<Any>>() }
|
||||
[1, ""] checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Array<Any>>() }
|
||||
}
|
||||
|
||||
-20
@@ -1,20 +0,0 @@
|
||||
// !CHECK_TYPE
|
||||
// FILE: A.java
|
||||
public class A {
|
||||
public static String foo() {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
// FILE: b.kt
|
||||
fun <T: Any> exclExcl(t: T?): T = t!!
|
||||
|
||||
fun test11() {
|
||||
// not 'String!'
|
||||
exclExcl(A.foo()) checkType { _<String>() }
|
||||
exclExcl(A.foo()) checkType { <!INAPPLICABLE_CANDIDATE!>_<!><String?>() }
|
||||
|
||||
// not 'String!'
|
||||
A.foo()!! checkType { _<String>() }
|
||||
A.foo()!! checkType { <!INAPPLICABLE_CANDIDATE!>_<!><String?>() }
|
||||
}
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !CHECK_TYPE
|
||||
// FILE: A.java
|
||||
public class A {
|
||||
|
||||
Vendored
+1
-1
@@ -4,7 +4,7 @@ fun foo(block: () -> (() -> Int)) {}
|
||||
|
||||
fun test() {
|
||||
val x = <!ANONYMOUS_FUNCTION_WITH_NAME!>fun named1(x: Int): Int { return 1 }<!>
|
||||
x <!INAPPLICABLE_CANDIDATE!>checkType<!> { _<Function1<Int, Int>>() }
|
||||
x <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>checkType<!> { _<Function1<Int, Int>>() }
|
||||
|
||||
foo { fun named2(): Int {return 1} }
|
||||
foo({ fun named3() = 1 })
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
interface Tr
|
||||
|
||||
class A { companion object }
|
||||
class B { companion object : Tr }
|
||||
|
||||
fun Any.f1() {}
|
||||
fun Any?.f2() {}
|
||||
fun Tr.f3() {}
|
||||
fun Tr?.f4() {}
|
||||
fun A.f5() {}
|
||||
|
||||
fun test() {
|
||||
A.f1()
|
||||
A.f2()
|
||||
B.f3()
|
||||
B.f4()
|
||||
A.<!INAPPLICABLE_CANDIDATE!>f5<!>()
|
||||
B.<!INAPPLICABLE_CANDIDATE!>f5<!>()
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
interface Tr
|
||||
|
||||
class A { companion object }
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
// KT-3563 Compiler requiring java.io.File, and it's unclear why
|
||||
|
||||
package bar
|
||||
|
||||
import java.io.File
|
||||
|
||||
class Customer(name1: String)
|
||||
|
||||
fun foo(f: File, c: Customer) {
|
||||
f.name1
|
||||
|
||||
c.<!INAPPLICABLE_CANDIDATE!>name1<!> // name1 should be unresolved here
|
||||
}
|
||||
|
||||
val File.name1: String
|
||||
get() = getName()
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// KT-3563 Compiler requiring java.io.File, and it's unclear why
|
||||
|
||||
package bar
|
||||
|
||||
+9
-9
@@ -6,19 +6,19 @@ package bar
|
||||
fun <R> List<R>.a() {}
|
||||
|
||||
fun test1(i: Int?) {
|
||||
1.<!INAPPLICABLE_CANDIDATE!>a<!>()
|
||||
i.<!INAPPLICABLE_CANDIDATE!>a<!>()
|
||||
1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>a<!>()
|
||||
i.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>a<!>()
|
||||
}
|
||||
|
||||
fun <R> test2(c: Collection<R>) {
|
||||
c.<!INAPPLICABLE_CANDIDATE!>a<!>()
|
||||
c.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>a<!>()
|
||||
}
|
||||
|
||||
fun Int.foo() {}
|
||||
|
||||
fun test3(s: String?) {
|
||||
"".<!INAPPLICABLE_CANDIDATE!>foo<!>()
|
||||
s.<!INAPPLICABLE_CANDIDATE!>foo<!>()
|
||||
"".<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>foo<!>()
|
||||
s.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>foo<!>()
|
||||
"".foo(<!TOO_MANY_ARGUMENTS!>1<!>)
|
||||
s.foo(<!TOO_MANY_ARGUMENTS!>"a"<!>)
|
||||
}
|
||||
@@ -27,7 +27,7 @@ interface A
|
||||
fun <T: A> T.c() {}
|
||||
|
||||
fun test4() {
|
||||
1.<!INAPPLICABLE_CANDIDATE!>c<!>()
|
||||
1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>c<!>()
|
||||
}
|
||||
|
||||
|
||||
@@ -40,16 +40,16 @@ fun test5() {
|
||||
fun <R: Any> R?.sure() : R = this!!
|
||||
|
||||
fun <T> test6(l: List<T>?) {
|
||||
l.<!INAPPLICABLE_CANDIDATE!>sure<!><T>()
|
||||
l.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>sure<!><T>()
|
||||
}
|
||||
|
||||
|
||||
fun List<String>.b() {}
|
||||
|
||||
fun test7(l: List<String?>) {
|
||||
l.<!INAPPLICABLE_CANDIDATE!>b<!>()
|
||||
l.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>b<!>()
|
||||
}
|
||||
|
||||
fun test8(l: List<Any>?) {
|
||||
l.<!INAPPLICABLE_CANDIDATE!>b<!>()
|
||||
l.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>b<!>()
|
||||
}
|
||||
|
||||
-14
@@ -1,14 +0,0 @@
|
||||
package a
|
||||
|
||||
class A {}
|
||||
|
||||
fun test(a1: A, a2: A) {
|
||||
val range = "island".."isle"
|
||||
|
||||
a1<!INAPPLICABLE_CANDIDATE!>..<!>a2
|
||||
}
|
||||
|
||||
|
||||
public operator fun <T: Comparable<T>> T.rangeTo(that: T): ClosedRange<T> {
|
||||
throw UnsupportedOperationException()
|
||||
}
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
package a
|
||||
|
||||
class A {}
|
||||
|
||||
+1
-1
@@ -5,5 +5,5 @@ fun interface Bar {
|
||||
operator fun Bar.plus(b: Bar): String = invoke() + b.invoke()
|
||||
|
||||
fun box(): String {
|
||||
return { "O" } <!INAPPLICABLE_CANDIDATE!>+<!> { "K" }
|
||||
return { "O" } <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>+<!> { "K" }
|
||||
}
|
||||
|
||||
Vendored
+2
-2
@@ -31,8 +31,8 @@ fun bar(aInstance: A, bInstance: B) {
|
||||
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo<!>(bInstance) {
|
||||
<!CANNOT_INFER_PARAMETER_TYPE, COMPONENT_FUNCTION_MISSING, COMPONENT_FUNCTION_MISSING!>(a, b)<!>, (c, d) ->
|
||||
a <!INAPPLICABLE_CANDIDATE!>checkType<!> { _<Int>() }
|
||||
b <!INAPPLICABLE_CANDIDATE!>checkType<!> { _<String>() }
|
||||
a <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>checkType<!> { _<Int>() }
|
||||
b <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>checkType<!> { _<String>() }
|
||||
c checkType { _<Double>() }
|
||||
d checkType { _<Short>() }
|
||||
}
|
||||
|
||||
+3
-3
@@ -22,12 +22,12 @@ fun bar(aList: List<A>) {
|
||||
}
|
||||
|
||||
aList.foo { (<!COMPONENT_FUNCTION_RETURN_TYPE_MISMATCH!>a: String<!>, b) ->
|
||||
a checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Int>() }
|
||||
a checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Int>() }
|
||||
b checkType { _<String>() }
|
||||
}
|
||||
|
||||
aList.foo <!ARGUMENT_TYPE_MISMATCH!>{ (a, b): B ->
|
||||
b checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Int>() }
|
||||
a checkType { <!INAPPLICABLE_CANDIDATE!>_<!><String>() }
|
||||
b checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Int>() }
|
||||
a checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><String>() }
|
||||
}<!>
|
||||
}
|
||||
|
||||
Vendored
+1
-1
@@ -18,7 +18,7 @@ fun bar() {
|
||||
y checkType { _<(A) -> Unit>() }
|
||||
|
||||
val y2 = { (a: Number, b): A ->
|
||||
a checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Int>() }
|
||||
a checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Int>() }
|
||||
b checkType { _<String>() }
|
||||
}
|
||||
|
||||
|
||||
Vendored
+6
-6
@@ -7,8 +7,8 @@ fun foo(block: (A, B) -> Unit) { }
|
||||
|
||||
fun bar() {
|
||||
foo { (a, a), b ->
|
||||
a checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Int>() }
|
||||
b checkType { <!INAPPLICABLE_CANDIDATE!>_<!><String>() }
|
||||
a checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Int>() }
|
||||
b checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><String>() }
|
||||
}
|
||||
|
||||
foo { (a, b), a ->
|
||||
@@ -17,13 +17,13 @@ fun bar() {
|
||||
}
|
||||
|
||||
foo { a, (a, b) ->
|
||||
a checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Int>() }
|
||||
b checkType { <!INAPPLICABLE_CANDIDATE!>_<!><String>() }
|
||||
a checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Int>() }
|
||||
b checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><String>() }
|
||||
}
|
||||
|
||||
foo { (a, b), (c, b) ->
|
||||
a checkType { _<Int>() }
|
||||
b checkType { <!INAPPLICABLE_CANDIDATE!>_<!><String>() }
|
||||
c checkType { <!INAPPLICABLE_CANDIDATE!>_<!><B>() }
|
||||
b checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><String>() }
|
||||
c checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><B>() }
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -42,7 +42,7 @@ fun bar() {
|
||||
}
|
||||
|
||||
foo { (<!COMPONENT_FUNCTION_RETURN_TYPE_MISMATCH!>a: String<!>, b) ->
|
||||
a checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Int>() }
|
||||
a checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Int>() }
|
||||
b checkType { _<String>() }
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -24,9 +24,9 @@ private class Outer<E> {
|
||||
|
||||
doubleStringInt = Outer<Double>().Inner<String>().foo<Int>()()
|
||||
|
||||
doubleStringInt.e.checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Double>() }
|
||||
doubleStringInt.f.checkType { <!INAPPLICABLE_CANDIDATE!>_<!><String>() }
|
||||
doubleStringInt.g.checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Int>() }
|
||||
doubleStringInt.e.checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Double>() }
|
||||
doubleStringInt.f.checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><String>() }
|
||||
doubleStringInt.g.checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Int>() }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -18,7 +18,7 @@ class Q {
|
||||
x = foo<CharSequence>()()
|
||||
y = foo<String>()()
|
||||
|
||||
x.prop.checkType { <!INAPPLICABLE_CANDIDATE!>_<!><CharSequence>() }
|
||||
y.prop.checkType { <!INAPPLICABLE_CANDIDATE!>_<!><String>() }
|
||||
x.prop.checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><CharSequence>() }
|
||||
y.prop.checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><String>() }
|
||||
}
|
||||
}
|
||||
|
||||
Vendored
+2
-2
@@ -15,8 +15,8 @@ class Q {
|
||||
private var x = foo<CharSequence, Number>()()
|
||||
|
||||
fun bar() {
|
||||
x.e.checkType { <!INAPPLICABLE_CANDIDATE!>_<!><CharSequence>() }
|
||||
x.f.checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Number>() }
|
||||
x.e.checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><CharSequence>() }
|
||||
x.f.checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Number>() }
|
||||
x.g.checkType { _<Number>() }
|
||||
}
|
||||
}
|
||||
|
||||
Vendored
+2
-2
@@ -20,7 +20,7 @@ class A : Outer<Double, Short>() {
|
||||
|
||||
fun foo() {
|
||||
Derived().foo() checkType { _<Outer<String, Int>.Inner<Char>>() }
|
||||
Derived().baz() <!INAPPLICABLE_CANDIDATE!>checkType<!> { _<Map<Char, String>>() }
|
||||
Derived().baz() <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>checkType<!> { _<Map<Char, String>>() }
|
||||
A.B().bar() checkType { _<Outer<Float, Long>.Inner<String>>() }
|
||||
A.B().x() <!INAPPLICABLE_CANDIDATE!>checkType<!> { _<Map<String, Float>>() }
|
||||
A.B().x() <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>checkType<!> { _<Map<String, Float>>() }
|
||||
}
|
||||
|
||||
+3
-3
@@ -41,8 +41,8 @@ fun test() {
|
||||
var x = foobar<String>()
|
||||
x = foobar<String>()
|
||||
|
||||
x().foo().a() checkType { <!INAPPLICABLE_CANDIDATE!>_<!><A<String, Double, Short, Long>>() }
|
||||
x().bar() <!INAPPLICABLE_CANDIDATE!>checkType<!> { _<A<String, Double, Short, Char>>() }
|
||||
x().foo().a() checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><A<String, Double, Short, Long>>() }
|
||||
x().bar() <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>checkType<!> { _<A<String, Double, Short, Char>>() }
|
||||
|
||||
x = foobar<Int>()
|
||||
|
||||
@@ -50,5 +50,5 @@ fun test() {
|
||||
y = noParameters()
|
||||
|
||||
y().foo().a() checkType { _<A<Any, Double, Short, Long>>() }
|
||||
y().bar() <!INAPPLICABLE_CANDIDATE!>checkType<!> { _<A<Any, Double, Short, Char>>() }
|
||||
y().bar() <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>checkType<!> { _<A<Any, Double, Short, Char>>() }
|
||||
}
|
||||
|
||||
+3
-3
@@ -42,8 +42,8 @@ class Outer<T> {
|
||||
var x = foobar<String>()
|
||||
x = foobar<String>()
|
||||
|
||||
x().foo().a() checkType { <!INAPPLICABLE_CANDIDATE!>_<!><A<T, F, String, Double, Short, Long>>() }
|
||||
x().bar() <!INAPPLICABLE_CANDIDATE!>checkType<!> { _<A<T, F, String, Double, Short, Char>>() }
|
||||
x().foo().a() checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><A<T, F, String, Double, Short, Long>>() }
|
||||
x().bar() <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>checkType<!> { _<A<T, F, String, Double, Short, Char>>() }
|
||||
|
||||
x = foobar<Int>()
|
||||
x = z.foobar<String>()
|
||||
@@ -52,7 +52,7 @@ class Outer<T> {
|
||||
y = noParameters()
|
||||
|
||||
y().foo().a() checkType { _<A<T, F, Any, Double, Short, Long>>() }
|
||||
y().bar() <!INAPPLICABLE_CANDIDATE!>checkType<!> { _<A<T, F, Any, Double, Short, Char>>() }
|
||||
y().bar() <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>checkType<!> { _<A<T, F, Any, Double, Short, Char>>() }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -15,5 +15,5 @@ class Derived : BaseDerived2<Int>() {
|
||||
|
||||
fun foo() {
|
||||
Derived().foo() checkType { _<Outer<Int, String>.Inner<Char>>() }
|
||||
Derived().baz() <!INAPPLICABLE_CANDIDATE!>checkType<!> { _<Map<Char, Int>>() }
|
||||
Derived().baz() <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>checkType<!> { _<Map<Char, Int>>() }
|
||||
}
|
||||
|
||||
@@ -32,5 +32,5 @@ fun foo() {
|
||||
|
||||
val csIt: Iterator<CharSequence> = A<String>().iterator()
|
||||
|
||||
commonSupertype(A<String>().iterator(), A<Int>().iterator()).checkType { <!INAPPLICABLE_CANDIDATE!>_<!><A<out Any>.MyIt>() }
|
||||
commonSupertype(A<String>().iterator(), A<Int>().iterator()).checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><A<out Any>.MyIt>() }
|
||||
}
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@ class Outer<T> {
|
||||
inner class Inner
|
||||
fun foo(x: Outer<String>.Inner, y: <!WRONG_NUMBER_OF_TYPE_ARGUMENTS!>Outer<!>.Inner, z: Inner) {
|
||||
var inner = Inner()
|
||||
x.checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Inner>() }
|
||||
x.checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Inner>() }
|
||||
x.checkType { _<Outer<String>.Inner>() }
|
||||
z.checkType { _<Inner>() }
|
||||
z.checkType { _<Outer<T>.Inner>() }
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
// !CHECK_TYPE
|
||||
// Incorrect "type mismatch" error for generic extension safe call (required not-null, found nullable)
|
||||
|
||||
// FILE: B.java
|
||||
|
||||
public class B<T> {
|
||||
public String gav() {
|
||||
return "";
|
||||
}
|
||||
|
||||
public static <T> B<T> create() {
|
||||
return new B();
|
||||
}
|
||||
}
|
||||
|
||||
// FILE: A.kt
|
||||
|
||||
class A<T> {
|
||||
fun gav() = ""
|
||||
}
|
||||
fun <R> foo(x: R) = x
|
||||
fun <T> A<T>.bar() = ""
|
||||
fun <T> B<T>.bar() = ""
|
||||
|
||||
fun foo(l: A<String>?) {
|
||||
// No errors should be here
|
||||
foo(l?.bar()) checkType { _<String?>() }
|
||||
foo(l?.gav()) checkType { _<String?>() }
|
||||
if (l != null) {
|
||||
foo(l<!UNNECESSARY_SAFE_CALL!>?.<!>bar()) checkType { <!INAPPLICABLE_CANDIDATE!>_<!><String>() }
|
||||
foo(l<!UNNECESSARY_SAFE_CALL!>?.<!>gav()) checkType { <!INAPPLICABLE_CANDIDATE!>_<!><String>() }
|
||||
}
|
||||
}
|
||||
|
||||
fun fooNotNull(l: A<String>) {
|
||||
// No errors should be here
|
||||
foo(l<!UNNECESSARY_SAFE_CALL!>?.<!>bar()) checkType { <!INAPPLICABLE_CANDIDATE!>_<!><String>() }
|
||||
foo(l<!UNNECESSARY_SAFE_CALL!>?.<!>gav()) checkType { <!INAPPLICABLE_CANDIDATE!>_<!><String>() }
|
||||
}
|
||||
|
||||
fun bar() {
|
||||
val l = B.create<String>()
|
||||
foo(l?.bar()) checkType { _<String?>() }
|
||||
foo(l?.gav()) checkType { _<String?>() }
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !CHECK_TYPE
|
||||
// Incorrect "type mismatch" error for generic extension safe call (required not-null, found nullable)
|
||||
|
||||
|
||||
Vendored
+1
-1
@@ -15,5 +15,5 @@ fun <T> test(a: T) where T : B, T : C {
|
||||
a.foo = ""
|
||||
a.foo = null
|
||||
|
||||
a.foo.checkType { <!INAPPLICABLE_CANDIDATE!>_<!><String>() }
|
||||
a.foo.checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><String>() }
|
||||
}
|
||||
|
||||
+1
-1
@@ -13,6 +13,6 @@ fun <F : String?> bar(x: F) {
|
||||
foo1<<!UPPER_BOUND_VIOLATED!>F<!>>(<!ARGUMENT_TYPE_MISMATCH!>x<!>)
|
||||
|
||||
x<!UNSAFE_CALL!>.<!>foo2()
|
||||
x.<!INAPPLICABLE_CANDIDATE!>foo2<!><F>()
|
||||
x.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>foo2<!><F>()
|
||||
}
|
||||
|
||||
|
||||
Vendored
-17
@@ -1,17 +0,0 @@
|
||||
class A<T> {
|
||||
fun T.foo() {}
|
||||
fun Out<T>.bar() {}
|
||||
}
|
||||
class Out<out E>
|
||||
|
||||
fun test(x: A<out CharSequence>, y: Out<CharSequence>) {
|
||||
with(x) {
|
||||
// TODO: this diagnostic could be replaced with TYPE_MISMATCH_DUE_TO_TYPE_PROJECTION
|
||||
"".<!INAPPLICABLE_CANDIDATE!>foo<!>()
|
||||
y.<!INAPPLICABLE_CANDIDATE!>bar<!>()
|
||||
|
||||
with(y) {
|
||||
<!INAPPLICABLE_CANDIDATE!>bar<!>()
|
||||
}
|
||||
}
|
||||
}
|
||||
Vendored
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
class A<T> {
|
||||
fun T.foo() {}
|
||||
fun Out<T>.bar() {}
|
||||
|
||||
+1
-1
@@ -10,5 +10,5 @@ fun main() {
|
||||
val c : ListOfLists<*> = b
|
||||
val d : ArrayList<ArrayList<*>> = <!INITIALIZER_TYPE_MISMATCH!>c.x<!>
|
||||
|
||||
c.x checkType { <!INAPPLICABLE_CANDIDATE!>_<!><ArrayList<out ArrayList<*>>>() }
|
||||
c.x checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><ArrayList<out ArrayList<*>>>() }
|
||||
}
|
||||
|
||||
+2
-2
@@ -9,10 +9,10 @@ public class Clazz<T> {
|
||||
// FILE: main.kt
|
||||
fun test(clazz: Clazz<*>) {
|
||||
clazz.t checkType { _<Any?>() }
|
||||
clazz.getSuperClass() checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Clazz<*>?>() }
|
||||
clazz.getSuperClass() checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Clazz<*>?>() }
|
||||
clazz.getSuperClass().t checkType { _<Any?>() }
|
||||
|
||||
clazz.superClass checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Clazz<*>?>() }
|
||||
clazz.superClass checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Clazz<*>?>() }
|
||||
clazz.superClass.t checkType { _<Any?>() }
|
||||
|
||||
// See KT-9294
|
||||
|
||||
+3
-3
@@ -12,9 +12,9 @@ class Inv2<T : Inv2<in T>>(val x: T)
|
||||
fun main(a: A<*>, j: JavaClass<*>, i2: Inv2<*>) {
|
||||
// Probably it's too restrictive to suppose star projection type here as Any?,
|
||||
// but looks like we can refine it later
|
||||
a.foo() checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Any?>() }
|
||||
j.foo() checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Any?>() }
|
||||
i2.x checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Any?>() }
|
||||
a.foo() checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Any?>() }
|
||||
j.foo() checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Any?>() }
|
||||
i2.x checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Any?>() }
|
||||
|
||||
j.bar(<!ARGUMENT_TYPE_MISMATCH!>1<!>, <!ARGUMENT_TYPE_MISMATCH!>2<!>, <!ARGUMENT_TYPE_MISMATCH!>Any()<!>)
|
||||
j.bar(null)
|
||||
|
||||
+2
-2
@@ -47,7 +47,7 @@ fun test3() {
|
||||
|
||||
fooSetRef.invoke(foo, <!ARGUMENT_TYPE_MISMATCH!>""<!>)
|
||||
|
||||
foo.x.<!INAPPLICABLE_CANDIDATE!>bar<!>()
|
||||
foo.x.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>bar<!>()
|
||||
}
|
||||
|
||||
fun test4() {
|
||||
@@ -56,5 +56,5 @@ fun test4() {
|
||||
|
||||
fooSetRef.invoke(foo, <!ARGUMENT_TYPE_MISMATCH!>""<!>)
|
||||
|
||||
foo.x.<!INAPPLICABLE_CANDIDATE!>bar<!>()
|
||||
foo.x.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>bar<!>()
|
||||
}
|
||||
|
||||
+2
-2
@@ -6,7 +6,7 @@ fun <T: Any> bar(a: Array<T>): Array<T?> = null!!
|
||||
fun test1(a: Array<out Int>) {
|
||||
val r: Array<out Int?> = <!INITIALIZER_TYPE_MISMATCH!>bar(a)<!>
|
||||
val t = bar(a)
|
||||
t checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Array<out Int?>>() }
|
||||
t checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Array<out Int?>>() }
|
||||
}
|
||||
|
||||
fun <T: Any> foo(l: Array<T>): Array<Array<T?>> = null!!
|
||||
@@ -14,5 +14,5 @@ fun <T: Any> foo(l: Array<T>): Array<Array<T?>> = null!!
|
||||
fun test2(a: Array<out Int>) {
|
||||
val r: Array<out Array<out Int?>> = <!INITIALIZER_TYPE_MISMATCH!>foo(a)<!>
|
||||
val t = foo(a)
|
||||
t checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Array<out Array<out Int?>>>() }
|
||||
t checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Array<out Array<out Int?>>>() }
|
||||
}
|
||||
|
||||
Vendored
+2
-2
@@ -3,11 +3,11 @@
|
||||
fun <T : Any> Array<T?>.filterNotNull(): List<T> = throw Exception()
|
||||
|
||||
fun test1(a: Array<out Int?>) {
|
||||
val list = a.<!INAPPLICABLE_CANDIDATE!>filterNotNull<!>()
|
||||
val list = a.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>filterNotNull<!>()
|
||||
list checkType { _<List<Int>>() }
|
||||
}
|
||||
|
||||
fun test2(vararg a: Int?) {
|
||||
val list = a.<!INAPPLICABLE_CANDIDATE!>filterNotNull<!>()
|
||||
val list = a.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>filterNotNull<!>()
|
||||
list checkType { _<List<Int>>() }
|
||||
}
|
||||
|
||||
@@ -2,5 +2,5 @@ fun <T> Array<T>.foo() {}
|
||||
|
||||
fun test(array: Array<out Int>) {
|
||||
array.foo()
|
||||
array.<!INAPPLICABLE_CANDIDATE!>foo<!><<!PROJECTION_ON_NON_CLASS_TYPE_ARGUMENT!>out Int<!>>()
|
||||
array.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>foo<!><<!PROJECTION_ON_NON_CLASS_TYPE_ARGUMENT!>out Int<!>>()
|
||||
}
|
||||
|
||||
+7
-7
@@ -20,20 +20,20 @@ fun main(x: Foo<out Number?>, y: Bar<out Number?>, z1: Foo<out Number>, z2: Bar<
|
||||
x.foo()
|
||||
x.bar()
|
||||
x.boo1()
|
||||
x.<!INAPPLICABLE_CANDIDATE!>boo2<!>()
|
||||
x.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>boo2<!>()
|
||||
|
||||
y.<!INAPPLICABLE_CANDIDATE!>foo<!>()
|
||||
y.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>foo<!>()
|
||||
y.bar()
|
||||
y.<!INAPPLICABLE_CANDIDATE!>boo1<!>()
|
||||
y.<!INAPPLICABLE_CANDIDATE!>boo2<!>()
|
||||
y.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>boo1<!>()
|
||||
y.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>boo2<!>()
|
||||
|
||||
z1.foo()
|
||||
z1.bar()
|
||||
z1.boo1()
|
||||
z1.<!INAPPLICABLE_CANDIDATE!>boo2<!>()
|
||||
z1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>boo2<!>()
|
||||
|
||||
z2.foo()
|
||||
z2.bar()
|
||||
z2.<!INAPPLICABLE_CANDIDATE!>boo1<!>()
|
||||
z2.<!INAPPLICABLE_CANDIDATE!>boo2<!>()
|
||||
z2.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>boo1<!>()
|
||||
z2.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>boo2<!>()
|
||||
}
|
||||
|
||||
+7
-7
@@ -20,20 +20,20 @@ fun main(x: Foo<out Number?>, y: Bar<out Number?>, z1: Foo<out Number>, z2: Bar<
|
||||
x.foo()
|
||||
x.bar()
|
||||
x.boo1()
|
||||
x.<!INAPPLICABLE_CANDIDATE!>boo2<!>()
|
||||
x.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>boo2<!>()
|
||||
|
||||
y.<!INAPPLICABLE_CANDIDATE!>foo<!>()
|
||||
y.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>foo<!>()
|
||||
y.bar()
|
||||
y.<!INAPPLICABLE_CANDIDATE!>boo1<!>()
|
||||
y.<!INAPPLICABLE_CANDIDATE!>boo2<!>()
|
||||
y.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>boo1<!>()
|
||||
y.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>boo2<!>()
|
||||
|
||||
z1.foo()
|
||||
z1.bar()
|
||||
z1.boo1()
|
||||
z1.<!INAPPLICABLE_CANDIDATE!>boo2<!>()
|
||||
z1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>boo2<!>()
|
||||
|
||||
z2.foo()
|
||||
z2.bar()
|
||||
z2.<!INAPPLICABLE_CANDIDATE!>boo1<!>()
|
||||
z2.<!INAPPLICABLE_CANDIDATE!>boo2<!>()
|
||||
z2.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>boo1<!>()
|
||||
z2.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>boo2<!>()
|
||||
}
|
||||
|
||||
@@ -17,14 +17,14 @@ class SomeClass {
|
||||
val withoutType: LambdaWithReceiver
|
||||
get() = when (e) {
|
||||
E.VALUE -> { param ->
|
||||
<!INAPPLICABLE_CANDIDATE!>method<!>(param)
|
||||
<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>method<!>(param)
|
||||
}
|
||||
}
|
||||
|
||||
val withExplicitType: LambdaWithReceiver
|
||||
get() = when (e) {
|
||||
E.VALUE -> { param: Parameter ->
|
||||
<!INAPPLICABLE_CANDIDATE!>method<!>(param)
|
||||
<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>method<!>(param)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,4 +9,4 @@ fun <T, Q> List<T>.map1(f: (T)-> Q): List<T>? = tail!!.map1(f)
|
||||
|
||||
fun <T, Q> List<T>.map2(f: (T)-> Q): List<T>? = tail.sure().map2(f)
|
||||
|
||||
fun <T, Q> List<T>.map3(f: (T)-> Q): List<T>? = tail.<!INAPPLICABLE_CANDIDATE!>sure<!><T>().<!INAPPLICABLE_CANDIDATE!>map3<!>(f)
|
||||
fun <T, Q> List<T>.map3(f: (T)-> Q): List<T>? = tail.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>sure<!><T>().<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>map3<!>(f)
|
||||
|
||||
@@ -36,7 +36,7 @@ fun Number.num() {}
|
||||
fun main(b: Base<out Number>) {
|
||||
b.foo().num()
|
||||
if (b is Derived<*>) {
|
||||
b.foo().<!INAPPLICABLE_CANDIDATE!>num<!>()
|
||||
b.foo().<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>num<!>()
|
||||
b.baz().length
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@ public class A<E> {
|
||||
// FILE: main.kt
|
||||
|
||||
fun test(x: List<Int>, y: List<String>) {
|
||||
A("", x) checkType { <!INAPPLICABLE_CANDIDATE!>_<!><A<Any?>>() }
|
||||
A("", x) checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><A<Any?>>() }
|
||||
A("", y) checkType { _<A<String?>>() }
|
||||
|
||||
A<CharSequence, String>("", <!ARGUMENT_TYPE_MISMATCH!>x<!>)
|
||||
|
||||
+1
-1
@@ -12,6 +12,6 @@ fun test(x: List<Int>, y: List<String>) {
|
||||
Outer<Int>().Inner("", y, 1) checkType { _<Outer<Int>.Inner<String>>() }
|
||||
Outer<Int>().Inner<CharSequence, String, Int>("", y, 1) checkType { _<Outer<Int>.Inner<CharSequence>>() }
|
||||
|
||||
Outer<Int>().Inner("", x, 1) checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Outer<Int>.Inner<Any>>() }
|
||||
Outer<Int>().Inner("", x, 1) checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Outer<Int>.Inner<Any>>() }
|
||||
Outer<Int>().Inner<CharSequence, String, Int>("", <!ARGUMENT_TYPE_MISMATCH!>x<!>, 1)
|
||||
}
|
||||
|
||||
+4
-4
@@ -20,9 +20,9 @@ public abstract class CollectionWithSize implements java.util.Collection<String>
|
||||
// FILE: main.kt
|
||||
|
||||
fun main(c: CollectionWithSize) {
|
||||
CompressionType.ZIP.<!OVERLOAD_RESOLUTION_AMBIGUITY!>name<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { _<Double>() }
|
||||
c.<!OVERLOAD_RESOLUTION_AMBIGUITY!>size<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { _<String>() }
|
||||
CompressionType.ZIP.<!OVERLOAD_RESOLUTION_AMBIGUITY!>name<!> <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>checkType<!> { _<Double>() }
|
||||
c.<!OVERLOAD_RESOLUTION_AMBIGUITY!>size<!> <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>checkType<!> { _<String>() }
|
||||
|
||||
CompressionType.ZIP::<!OVERLOAD_RESOLUTION_AMBIGUITY!>name<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { _<kotlin.reflect.KProperty0<Double>>() }
|
||||
c::<!OVERLOAD_RESOLUTION_AMBIGUITY!>size<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { _<kotlin.reflect.KProperty0<String>>() }
|
||||
CompressionType.ZIP::<!OVERLOAD_RESOLUTION_AMBIGUITY!>name<!> <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>checkType<!> { _<kotlin.reflect.KProperty0<Double>>() }
|
||||
c::<!OVERLOAD_RESOLUTION_AMBIGUITY!>size<!> <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>checkType<!> { _<kotlin.reflect.KProperty0<String>>() }
|
||||
}
|
||||
|
||||
@@ -11,6 +11,6 @@ public class A {
|
||||
// FILE: main.kt
|
||||
|
||||
fun foo(a: A) {
|
||||
a.<!OVERLOAD_RESOLUTION_AMBIGUITY!>foo<!>() <!INAPPLICABLE_CANDIDATE!>checkType<!> { _<String>() }
|
||||
A.<!OVERLOAD_RESOLUTION_AMBIGUITY!>bar<!>() <!INAPPLICABLE_CANDIDATE!>checkType<!> { _<String>() }
|
||||
a.<!OVERLOAD_RESOLUTION_AMBIGUITY!>foo<!>() <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>checkType<!> { _<String>() }
|
||||
A.<!OVERLOAD_RESOLUTION_AMBIGUITY!>bar<!>() <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>checkType<!> { _<String>() }
|
||||
}
|
||||
|
||||
+2
-2
@@ -35,7 +35,7 @@ fun test() {
|
||||
otherGeneric(<!ARGUMENT_TYPE_MISMATCH!>1<!>)
|
||||
|
||||
val r = either(1, "")
|
||||
r checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Any>() }
|
||||
r checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Any>() }
|
||||
|
||||
use(a, b, c, d, e, f, g, r)
|
||||
}
|
||||
@@ -60,7 +60,7 @@ fun <T> lowerBound(t: T, l : Cov<T>): T = throw Exception("$t $l")
|
||||
|
||||
fun testLowerBound(cov: Cov<String>, covN: Cov<Number>) {
|
||||
val r = lowerBound(1, cov)
|
||||
r checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Any>() }
|
||||
r checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Any>() }
|
||||
|
||||
val n = lowerBound(1, covN)
|
||||
n checkType { _<Number>() }
|
||||
|
||||
Vendored
+1
-1
@@ -29,7 +29,7 @@ fun test() {
|
||||
oldAndNew %= 1
|
||||
|
||||
val onlyOld = OnlyOld()
|
||||
onlyOld <!INAPPLICABLE_CANDIDATE!>%=<!> 1
|
||||
<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>onlyOld %= 1<!>
|
||||
|
||||
val onlyNew = OnlyNew()
|
||||
onlyNew %= 1
|
||||
|
||||
+2
-2
@@ -26,11 +26,11 @@ class IntAndUnit {
|
||||
|
||||
fun test() {
|
||||
OldAndNew() % 1
|
||||
OnlyOld() <!INAPPLICABLE_CANDIDATE!>%<!> 1
|
||||
OnlyOld() <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>%<!> 1
|
||||
OnlyNew() % 1
|
||||
Sample() % 1
|
||||
|
||||
takeInt(IntAndUnit() % 1)
|
||||
}
|
||||
|
||||
fun takeInt(x: Int) {}
|
||||
fun takeInt(x: Int) {}
|
||||
|
||||
+2
-2
@@ -9,5 +9,5 @@ object RemExtension
|
||||
operator fun RemExtension.rem(x: Int) {}
|
||||
|
||||
fun foo() {
|
||||
OldMod <!INAPPLICABLE_CANDIDATE!>%<!> 123
|
||||
}
|
||||
OldMod <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>%<!> 123
|
||||
}
|
||||
|
||||
-26
@@ -1,26 +0,0 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
// !CHECK_TYPE
|
||||
// SKIP_JAVAC
|
||||
// NI_EXPECTED_FILE
|
||||
// FILE: p/J.java
|
||||
|
||||
package p;
|
||||
|
||||
public class J {
|
||||
public static J j() { return null; }
|
||||
}
|
||||
|
||||
// FILE: k.kt
|
||||
|
||||
import p.*
|
||||
|
||||
interface Out<out T1>
|
||||
|
||||
fun <T> f(a: Out<T>, b: Out<T>, c: Out<T>): T = null!!
|
||||
fun <T> out(t: T): Out<MutableList<T>> = null!!
|
||||
|
||||
fun test(a: Out<Nothing>, b: Out<MutableList<J>>) {
|
||||
val v = f(a, b, out(J.j()))
|
||||
v checkType { _<MutableList<J>>() }
|
||||
v checkType { <!INAPPLICABLE_CANDIDATE!>_<!><MutableList<J?>>() }
|
||||
}
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
// !CHECK_TYPE
|
||||
// SKIP_JAVAC
|
||||
|
||||
@@ -11,7 +11,7 @@ class Outer {
|
||||
fun Activity.toast() = Unit
|
||||
class Activity(){
|
||||
class Fragment{
|
||||
fun call() = <!INAPPLICABLE_CANDIDATE!>toast<!>()
|
||||
fun call() = <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toast<!>()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,4 +27,4 @@ public class Manager {
|
||||
<!ARGUMENT_TYPE_MISMATCH!>callback<!>() // Manager is not accessible here, but no error is shown
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
// KT-557 Wrong type inference near sure extension function
|
||||
|
||||
fun <T : Any> T?.sure() : T = this!!
|
||||
|
||||
fun Array<String>.length() : Int {
|
||||
return 0;
|
||||
}
|
||||
|
||||
fun test(array : Array<String?>?) {
|
||||
array?.sure<Array<String?>>().<!INAPPLICABLE_CANDIDATE!>length<!>()
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// KT-557 Wrong type inference near sure extension function
|
||||
|
||||
fun <T : Any> T?.sure() : T = this!!
|
||||
|
||||
Vendored
+3
-3
@@ -3,7 +3,7 @@
|
||||
fun String.invoke(i: Int) {}
|
||||
|
||||
fun foo(i: Int) {
|
||||
<!INAPPLICABLE_CANDIDATE!>i<!>(1)
|
||||
<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>i<!>(1)
|
||||
|
||||
<!INAPPLICABLE_CANDIDATE!>1<!>(1)
|
||||
}
|
||||
<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>1(1)<!>
|
||||
}
|
||||
|
||||
Vendored
+1
-1
@@ -16,7 +16,7 @@ fun test(a: A, b: B) {
|
||||
|
||||
b.(foo)()
|
||||
|
||||
<!ARGUMENT_TYPE_MISMATCH!>(b.<!INAPPLICABLE_CANDIDATE!>foo<!>)()<!>
|
||||
<!ARGUMENT_TYPE_MISMATCH!>(b.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>foo<!>)()<!>
|
||||
|
||||
foo(b)
|
||||
(foo)(b)
|
||||
|
||||
Vendored
+1
-1
@@ -5,7 +5,7 @@ fun Int.invoke() {}
|
||||
class SomeClass
|
||||
|
||||
fun test(identifier: SomeClass, fn: String.() -> Unit) {
|
||||
<!INAPPLICABLE_CANDIDATE!>identifier<!>()
|
||||
<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>identifier<!>()
|
||||
identifier(<!TOO_MANY_ARGUMENTS!>123<!>)
|
||||
identifier(<!TOO_MANY_ARGUMENTS!>1<!>, <!TOO_MANY_ARGUMENTS!>2<!>)
|
||||
<!ARGUMENT_TYPE_MISMATCH!>1<!>.fn()
|
||||
|
||||
+3
-3
@@ -20,7 +20,7 @@ import test.E
|
||||
|
||||
fun foo() {
|
||||
E.Entry checkType { _<E>() }
|
||||
E.Entry checkType { <!INAPPLICABLE_CANDIDATE!>_<!><String>() }
|
||||
E.Entry checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><String>() }
|
||||
E.Companion.Entry checkType { _<String>() }
|
||||
E.NotEntry checkType { _<String>() }
|
||||
Entry checkType { _<E>() }
|
||||
@@ -33,8 +33,8 @@ fun foo() {
|
||||
import test.E as U
|
||||
|
||||
fun bar() {
|
||||
U.Entry checkType { <!INAPPLICABLE_CANDIDATE!>_<!><<!UNRESOLVED_REFERENCE!>E<!>>() }
|
||||
U.Entry checkType { <!INAPPLICABLE_CANDIDATE!>_<!><String>() }
|
||||
U.Entry checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><<!UNRESOLVED_REFERENCE!>E<!>>() }
|
||||
U.Entry checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><String>() }
|
||||
U.Companion.Entry checkType { _<String>() }
|
||||
U.NotEntry checkType { _<String>() }
|
||||
}
|
||||
|
||||
@@ -10,11 +10,11 @@ fun Int.extFun() = 4
|
||||
fun String.test() {
|
||||
<!EXPRESSION_EXPECTED_PACKAGE_FOUND!>some<!>
|
||||
some.A()
|
||||
"".<!INAPPLICABLE_CANDIDATE!>some<!>
|
||||
"".<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>some<!>
|
||||
|
||||
<!INAPPLICABLE_CANDIDATE!>foo<!>
|
||||
"".<!INAPPLICABLE_CANDIDATE!>foo<!>
|
||||
<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>foo<!>
|
||||
"".<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>foo<!>
|
||||
|
||||
<!INAPPLICABLE_CANDIDATE!>extFun<!>()
|
||||
"".<!INAPPLICABLE_CANDIDATE!>extFun<!>()
|
||||
}
|
||||
<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>extFun<!>()
|
||||
"".<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>extFun<!>()
|
||||
}
|
||||
|
||||
@@ -22,10 +22,10 @@ public interface J {
|
||||
|
||||
// FILE: 1.kt
|
||||
fun test(j: J) {
|
||||
j.<!OVERLOAD_RESOLUTION_AMBIGUITY!>foo<!>({ <!UNRESOLVED_REFERENCE!>it<!> checkType { _<Any>() }; "" }, "") <!INAPPLICABLE_CANDIDATE!>checkType<!> { _<Int>() }
|
||||
j.<!OVERLOAD_RESOLUTION_AMBIGUITY!>foo<!>({ <!UNRESOLVED_REFERENCE!>it<!> checkType { _<Any>() }; "" }, "") <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>checkType<!> { _<Int>() }
|
||||
|
||||
j.<!OVERLOAD_RESOLUTION_AMBIGUITY!>bas<!>({ <!UNRESOLVED_REFERENCE!>it<!> checkType { _<Any>() }; "" }, "") <!INAPPLICABLE_CANDIDATE!>checkType<!> { _<Int>() }
|
||||
j.<!OVERLOAD_RESOLUTION_AMBIGUITY!>bas<!>({ <!UNRESOLVED_REFERENCE!>it<!> checkType { _<Any>() }; "" }, "") <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>checkType<!> { _<Int>() }
|
||||
|
||||
// NI: TODO
|
||||
j.bar { it checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Any>() }; "" } checkType { _<Int>() }
|
||||
j.bar { it checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Any>() }; "" } checkType { _<Int>() }
|
||||
}
|
||||
|
||||
+3
-3
@@ -21,10 +21,10 @@ interface K {
|
||||
}
|
||||
|
||||
fun test(k: K) {
|
||||
k.<!OVERLOAD_RESOLUTION_AMBIGUITY!>foo<!> { <!UNRESOLVED_REFERENCE!>it<!> checkType { _<Any>() }; "" } <!INAPPLICABLE_CANDIDATE!>checkType<!> { _<Int>() }
|
||||
k.<!OVERLOAD_RESOLUTION_AMBIGUITY!>foo<!> { <!UNRESOLVED_REFERENCE!>it<!> checkType { _<Any>() }; "" } <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>checkType<!> { _<Int>() }
|
||||
|
||||
k.<!OVERLOAD_RESOLUTION_AMBIGUITY!>bas<!> { <!UNRESOLVED_REFERENCE!>it<!> checkType { _<Any?>() }; "" } <!INAPPLICABLE_CANDIDATE!>checkType<!> { _<Int>() }
|
||||
k.<!OVERLOAD_RESOLUTION_AMBIGUITY!>bas<!> { <!UNRESOLVED_REFERENCE!>it<!> checkType { _<Any?>() }; "" } <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>checkType<!> { _<Int>() }
|
||||
|
||||
// NI: TODO
|
||||
k.bar { it checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Any>() }; "" } checkType { _<Int>() }
|
||||
k.bar { it checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Any>() }; "" } checkType { _<Int>() }
|
||||
}
|
||||
|
||||
+1
-1
@@ -20,6 +20,6 @@ public class AppServiceModule : AbstractModule<String>() {
|
||||
inline fun <reified T> AbstractModule<Int>.bind() {
|
||||
val x = <!PROTECTED_CALL_FROM_PUBLIC_INLINE!>bind<!>(javaClass<T>())
|
||||
|
||||
x checkType { <!INAPPLICABLE_CANDIDATE!>_<!><String>() } // check that Class receiver is used instead of extension one
|
||||
x checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><String>() } // check that Class receiver is used instead of extension one
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ fun BaseOuter.foo(): String = ""
|
||||
class Derived : BaseOuter() {
|
||||
fun test(foo: Foo) {
|
||||
if (foo.base is Derived) {
|
||||
foo.base.foo() checkType { <!INAPPLICABLE_CANDIDATE!>_<!><String>() } // Resolved to extension
|
||||
foo.base.foo() checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><String>() } // Resolved to extension
|
||||
foo.base.bar()
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -7,6 +7,6 @@ class A {
|
||||
constructor(x: Any?)
|
||||
constructor() : this(object {
|
||||
fun bar() = <!UNRESOLVED_REFERENCE!>foo<!>() + this<!UNRESOLVED_LABEL!>@A<!>.foo() +
|
||||
<!INAPPLICABLE_CANDIDATE!>foobar<!>() + super<!UNRESOLVED_LABEL!>@A<!>.hashCode()
|
||||
<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>foobar<!>() + super<!UNRESOLVED_LABEL!>@A<!>.hashCode()
|
||||
})
|
||||
}
|
||||
|
||||
+1
-1
@@ -6,6 +6,6 @@ class A {
|
||||
fun foo() = 1
|
||||
constructor( x: Any = object {
|
||||
fun bar() = <!UNRESOLVED_REFERENCE!>foo<!>() + this<!UNRESOLVED_LABEL!>@A<!>.foo() +
|
||||
<!INAPPLICABLE_CANDIDATE!>foobar<!>()
|
||||
<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>foobar<!>()
|
||||
})
|
||||
}
|
||||
|
||||
+7
-7
@@ -16,37 +16,37 @@ interface C {
|
||||
|
||||
fun foo(x: Any?) {
|
||||
if (x is A && x is B) {
|
||||
x.foo().checkType { <!INAPPLICABLE_CANDIDATE!>_<!><String>() }
|
||||
x.foo().checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><String>() }
|
||||
x.foo().checkType { _<String?>() }
|
||||
}
|
||||
|
||||
if (x is B && x is A) {
|
||||
x.foo().checkType { <!INAPPLICABLE_CANDIDATE!>_<!><String>() }
|
||||
x.foo().checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><String>() }
|
||||
x.foo().checkType { _<String?>() }
|
||||
}
|
||||
|
||||
if (x is A && x is C) {
|
||||
x.foo().checkType { _<String>() }
|
||||
x.foo().checkType { <!INAPPLICABLE_CANDIDATE!>_<!><String?>() }
|
||||
x.foo().checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><String?>() }
|
||||
}
|
||||
|
||||
if (x is C && x is A) {
|
||||
x.foo().checkType { _<String>() }
|
||||
x.foo().checkType { <!INAPPLICABLE_CANDIDATE!>_<!><String?>() }
|
||||
x.foo().checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><String?>() }
|
||||
}
|
||||
|
||||
if (x is A && x is B && x is C) {
|
||||
x.foo().checkType { _<String>() }
|
||||
x.foo().checkType { <!INAPPLICABLE_CANDIDATE!>_<!><String?>() }
|
||||
x.foo().checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><String?>() }
|
||||
}
|
||||
|
||||
if (x is B && x is A && x is C) {
|
||||
x.foo().checkType { _<String>() }
|
||||
x.foo().checkType { <!INAPPLICABLE_CANDIDATE!>_<!><String?>() }
|
||||
x.foo().checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><String?>() }
|
||||
}
|
||||
|
||||
if (x is B && x is C && x is A) {
|
||||
x.foo().checkType { _<String>() }
|
||||
x.foo().checkType { <!INAPPLICABLE_CANDIDATE!>_<!><String?>() }
|
||||
x.foo().checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><String?>() }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ fun case_0() {
|
||||
this as Int
|
||||
this // error in NI: required Int, found Any?; just inferred to Any? in OI
|
||||
}
|
||||
y checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Any?>() }
|
||||
y checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Any?>() }
|
||||
y checkType { _<Int>() }
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ fun case_1(z: Any?) {
|
||||
else -> return@run ""
|
||||
}
|
||||
}
|
||||
y checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Any?>() }
|
||||
y checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Any?>() }
|
||||
y checkType { _<kotlin.String>() }
|
||||
// y is inferred to Any?
|
||||
}
|
||||
@@ -44,7 +44,7 @@ fun case_3(z: Any?) {
|
||||
else -> return@let ""
|
||||
}
|
||||
}
|
||||
y checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Any?>() }
|
||||
y checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Any?>() }
|
||||
y checkType { _<kotlin.String>() }
|
||||
// y is inferred to String
|
||||
}
|
||||
|
||||
+1
-1
@@ -7,5 +7,5 @@ val <T : Any> KClass<T>.java: Class<T> get() = null!!
|
||||
|
||||
val <T : Any> KClass<T>.javaObjectType: Class<T>
|
||||
get() {
|
||||
return java.<!UNRESOLVED_REFERENCE!>lang<!>.Class::class.<!INAPPLICABLE_CANDIDATE!>java<!> as Class<T>
|
||||
return java.<!UNRESOLVED_REFERENCE!>lang<!>.Class::class.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>java<!> as Class<T>
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ interface B<R, T: B<List<R>, <!UPPER_BOUND_VIOLATED!>T<!>>> {
|
||||
|
||||
fun testB(b: B<*, *>) {
|
||||
b.r().checkType { _<Any?>() }
|
||||
b.t().checkType { <!INAPPLICABLE_CANDIDATE!>_<!><B<List<*>, *>>() }
|
||||
b.t().checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><B<List<*>, *>>() }
|
||||
|
||||
b.t().r().size
|
||||
}
|
||||
|
||||
+2
-2
@@ -12,8 +12,8 @@ public class A {
|
||||
// FILE: 1.kt
|
||||
fun fn() {}
|
||||
fun x(r: Runnable) {
|
||||
A.foo(::fn) checkType { <!INAPPLICABLE_CANDIDATE!>_<!><String>() }
|
||||
A.foo {} checkType { <!INAPPLICABLE_CANDIDATE!>_<!><String>() }
|
||||
A.foo(::fn) checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><String>() }
|
||||
A.foo {} checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><String>() }
|
||||
|
||||
A.foo(null) checkType { _<Int>() }
|
||||
A.foo(Runnable { }) checkType { _<Int>() }
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user