FIR: Report diagnostics introduced during call completion
This commit is contained in:
committed by
teamcityserver
parent
09321e5e41
commit
a700fdc312
+6
@@ -13200,6 +13200,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti
|
|||||||
runTest("compiler/testData/diagnostics/tests/inference/completion/equalityConstraintUpstairs.kt");
|
runTest("compiler/testData/diagnostics/tests/inference/completion/equalityConstraintUpstairs.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("errorAfterCompletion.kt")
|
||||||
|
public void testErrorAfterCompletion() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/inference/completion/errorAfterCompletion.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("flexibleType.kt")
|
@TestMetadata("flexibleType.kt")
|
||||||
public void testFlexibleType() throws Exception {
|
public void testFlexibleType() throws Exception {
|
||||||
|
|||||||
+6
@@ -13200,6 +13200,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac
|
|||||||
runTest("compiler/testData/diagnostics/tests/inference/completion/equalityConstraintUpstairs.kt");
|
runTest("compiler/testData/diagnostics/tests/inference/completion/equalityConstraintUpstairs.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("errorAfterCompletion.kt")
|
||||||
|
public void testErrorAfterCompletion() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/inference/completion/errorAfterCompletion.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("flexibleType.kt")
|
@TestMetadata("flexibleType.kt")
|
||||||
public void testFlexibleType() throws Exception {
|
public void testFlexibleType() throws Exception {
|
||||||
|
|||||||
+20
-10
@@ -11,12 +11,14 @@ import org.jetbrains.kotlin.fir.declarations.*
|
|||||||
import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
|
import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
|
||||||
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
|
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
|
import org.jetbrains.kotlin.fir.references.FirNamedReference
|
||||||
import org.jetbrains.kotlin.fir.references.builder.buildErrorNamedReference
|
import org.jetbrains.kotlin.fir.references.builder.buildErrorNamedReference
|
||||||
import org.jetbrains.kotlin.fir.references.builder.buildResolvedCallableReference
|
import org.jetbrains.kotlin.fir.references.builder.buildResolvedCallableReference
|
||||||
import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference
|
import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference
|
||||||
import org.jetbrains.kotlin.fir.resolve.*
|
import org.jetbrains.kotlin.fir.resolve.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.*
|
import org.jetbrains.kotlin.fir.resolve.calls.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.dfa.FirDataFlowAnalyzer
|
import org.jetbrains.kotlin.fir.resolve.dfa.FirDataFlowAnalyzer
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeInapplicableCandidateError
|
||||||
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeTypeParameterInQualifiedAccess
|
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeTypeParameterInQualifiedAccess
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.*
|
import org.jetbrains.kotlin.fir.resolve.inference.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
||||||
@@ -734,17 +736,25 @@ class FirCallCompletionResultsWriterTransformer(
|
|||||||
return arrayOfCall
|
return arrayOfCall
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FirNamedReferenceWithCandidate.toResolvedReference() = if (this is FirErrorReferenceWithCandidate) {
|
private fun FirNamedReferenceWithCandidate.toResolvedReference(): FirNamedReference {
|
||||||
buildErrorNamedReference {
|
val errorDiagnostic = when {
|
||||||
source = this@toResolvedReference.source
|
this is FirErrorReferenceWithCandidate -> this.diagnostic
|
||||||
diagnostic = this@toResolvedReference.diagnostic
|
!candidate.isSuccessful -> ConeInapplicableCandidateError(candidate.currentApplicability, candidate)
|
||||||
candidateSymbol = this@toResolvedReference.candidateSymbol
|
else -> null
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
buildResolvedNamedReference {
|
return if (errorDiagnostic != null) {
|
||||||
source = this@toResolvedReference.source
|
buildErrorNamedReference {
|
||||||
name = this@toResolvedReference.name
|
source = this@toResolvedReference.source
|
||||||
resolvedSymbol = this@toResolvedReference.candidateSymbol
|
diagnostic = errorDiagnostic
|
||||||
|
candidateSymbol = this@toResolvedReference.candidateSymbol
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
buildResolvedNamedReference {
|
||||||
|
source = this@toResolvedReference.source
|
||||||
|
name = this@toResolvedReference.name
|
||||||
|
resolvedSymbol = this@toResolvedReference.candidateSymbol
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
// SKIP_TXT
|
||||||
|
|
||||||
|
fun foo(x: () -> Int): Int = x()
|
||||||
|
|
||||||
|
fun <R> myRun(x: () -> R): R = x()
|
||||||
|
|
||||||
|
private val a = foo { myRun { <!ARGUMENT_TYPE_MISMATCH!>"OK"<!> } }
|
||||||
|
private val b: Int = myRun { <!ARGUMENT_TYPE_MISMATCH!>"OK"<!> }
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
// SKIP_TXT
|
||||||
|
|
||||||
|
fun foo(x: () -> Int): Int = x()
|
||||||
|
|
||||||
|
fun <R> myRun(x: () -> R): R = x()
|
||||||
|
|
||||||
|
private val a = foo { <!TYPE_MISMATCH, TYPE_MISMATCH, TYPE_MISMATCH!>myRun { <!TYPE_MISMATCH!>"OK"<!> }<!> }
|
||||||
|
private val b: Int = <!TYPE_MISMATCH!>myRun { <!TYPE_MISMATCH!>"OK"<!> }<!>
|
||||||
Generated
+6
@@ -13206,6 +13206,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
|
|||||||
runTest("compiler/testData/diagnostics/tests/inference/completion/equalityConstraintUpstairs.kt");
|
runTest("compiler/testData/diagnostics/tests/inference/completion/equalityConstraintUpstairs.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("errorAfterCompletion.kt")
|
||||||
|
public void testErrorAfterCompletion() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/inference/completion/errorAfterCompletion.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("flexibleType.kt")
|
@TestMetadata("flexibleType.kt")
|
||||||
public void testFlexibleType() throws Exception {
|
public void testFlexibleType() throws Exception {
|
||||||
|
|||||||
Reference in New Issue
Block a user