[FIR] KT-58284: Prevent missing diagnostics on for loops
^KT-58284 Fixed
This commit is contained in:
committed by
Space Team
parent
606ffa7273
commit
834ba397ad
+6
@@ -627,6 +627,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia
|
|||||||
runTest("compiler/testData/diagnostics/tests/localInterfaces.kt");
|
runTest("compiler/testData/diagnostics/tests/localInterfaces.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("missingIteratorMissing.kt")
|
||||||
|
public void testMissingIteratorMissing() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/missingIteratorMissing.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("MultilineStringTemplates.kt")
|
@TestMetadata("MultilineStringTemplates.kt")
|
||||||
public void testMultilineStringTemplates() throws Exception {
|
public void testMultilineStringTemplates() throws Exception {
|
||||||
|
|||||||
+6
@@ -627,6 +627,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
|
|||||||
runTest("compiler/testData/diagnostics/tests/localInterfaces.kt");
|
runTest("compiler/testData/diagnostics/tests/localInterfaces.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("missingIteratorMissing.kt")
|
||||||
|
public void testMissingIteratorMissing() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/missingIteratorMissing.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("MultilineStringTemplates.kt")
|
@TestMetadata("MultilineStringTemplates.kt")
|
||||||
public void testMultilineStringTemplates() throws Exception {
|
public void testMultilineStringTemplates() throws Exception {
|
||||||
|
|||||||
+6
@@ -627,6 +627,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir
|
|||||||
runTest("compiler/testData/diagnostics/tests/localInterfaces.kt");
|
runTest("compiler/testData/diagnostics/tests/localInterfaces.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("missingIteratorMissing.kt")
|
||||||
|
public void testMissingIteratorMissing() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/missingIteratorMissing.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("MultilineStringTemplates.kt")
|
@TestMetadata("MultilineStringTemplates.kt")
|
||||||
public void testMultilineStringTemplates() throws Exception {
|
public void testMultilineStringTemplates() throws Exception {
|
||||||
|
|||||||
+6
@@ -627,6 +627,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia
|
|||||||
runTest("compiler/testData/diagnostics/tests/localInterfaces.kt");
|
runTest("compiler/testData/diagnostics/tests/localInterfaces.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("missingIteratorMissing.kt")
|
||||||
|
public void testMissingIteratorMissing() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/missingIteratorMissing.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("MultilineStringTemplates.kt")
|
@TestMetadata("MultilineStringTemplates.kt")
|
||||||
public void testMultilineStringTemplates() throws Exception {
|
public void testMultilineStringTemplates() throws Exception {
|
||||||
|
|||||||
+11
-5
@@ -26,12 +26,9 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.NEXT_NONE_APPLICA
|
|||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.OPERATOR_MODIFIER_REQUIRED
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.OPERATOR_MODIFIER_REQUIRED
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.isOperator
|
import org.jetbrains.kotlin.fir.declarations.utils.isOperator
|
||||||
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnosticHolder
|
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
|
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirWhileLoop
|
import org.jetbrains.kotlin.fir.expressions.FirWhileLoop
|
||||||
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
|
|
||||||
import org.jetbrains.kotlin.fir.references.FirResolvedErrorReference
|
|
||||||
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
||||||
import org.jetbrains.kotlin.fir.references.isError
|
import org.jetbrains.kotlin.fir.references.isError
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.UnsafeCall
|
import org.jetbrains.kotlin.fir.resolve.calls.UnsafeCall
|
||||||
@@ -42,6 +39,7 @@ import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedNameError
|
|||||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||||
import org.jetbrains.kotlin.resolve.calls.tower.isSuccess
|
import org.jetbrains.kotlin.resolve.calls.tower.isSuccess
|
||||||
|
import org.jetbrains.kotlin.util.OperatorNameConventions
|
||||||
|
|
||||||
object FirForLoopChecker : FirBlockChecker() {
|
object FirForLoopChecker : FirBlockChecker() {
|
||||||
override fun check(expression: FirBlock, context: CheckerContext, reporter: DiagnosticReporter) {
|
override fun check(expression: FirBlock, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||||
@@ -118,8 +116,16 @@ object FirForLoopChecker : FirBlockChecker() {
|
|||||||
is ConeUnresolvedNameError -> {
|
is ConeUnresolvedNameError -> {
|
||||||
reporter.reportOn(reportSource, missingFactory, context)
|
reporter.reportOn(reportSource, missingFactory, context)
|
||||||
}
|
}
|
||||||
is ConeInapplicableWrongReceiver -> noneApplicableFactory?.let {
|
is ConeInapplicableWrongReceiver -> when {
|
||||||
reporter.reportOn(reportSource, it, diagnostic.candidateSymbols, context)
|
noneApplicableFactory != null -> {
|
||||||
|
reporter.reportOn(reportSource, noneApplicableFactory, diagnostic.candidateSymbols, context)
|
||||||
|
}
|
||||||
|
calleeReference.name == OperatorNameConventions.ITERATOR -> {
|
||||||
|
reporter.reportOn(reportSource, missingFactory, context)
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
|
error("ConeInapplicableWrongReceiver, but no diagnostic reported")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
is ConeInapplicableCandidateError -> {
|
is ConeInapplicableCandidateError -> {
|
||||||
if (unsafeCallFactory != null || noneApplicableFactory != null) {
|
if (unsafeCallFactory != null || noneApplicableFactory != null) {
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
// FIR_IDENTICAL
|
||||||
|
// ISSUE: KT-58284
|
||||||
|
|
||||||
|
fun foo() {
|
||||||
|
for (i in <!ITERATOR_MISSING!>0<!>) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun String.iterator(): Iterator<Int> = TODO()
|
||||||
Generated
+6
@@ -627,6 +627,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
|
|||||||
runTest("compiler/testData/diagnostics/tests/localInterfaces.kt");
|
runTest("compiler/testData/diagnostics/tests/localInterfaces.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("missingIteratorMissing.kt")
|
||||||
|
public void testMissingIteratorMissing() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/missingIteratorMissing.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("MultilineStringTemplates.kt")
|
@TestMetadata("MultilineStringTemplates.kt")
|
||||||
public void testMultilineStringTemplates() throws Exception {
|
public void testMultilineStringTemplates() throws Exception {
|
||||||
|
|||||||
Reference in New Issue
Block a user