[FIR] Change diagnostic INITIALIZER_TYPE_MISMATCH to work with for loop
^KTIJ-25251 fixed Merge-request: KT-MR-10507 Merged-by: Egor Kulikov <Egor.Kulikov@jetbrains.com>
This commit is contained in:
+1
-1
@@ -2142,7 +2142,7 @@ sealed interface KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
|
||||
val usedTypeParameter: KtTypeParameterSymbol
|
||||
}
|
||||
|
||||
interface InitializerTypeMismatch : KtFirDiagnostic<KtProperty> {
|
||||
interface InitializerTypeMismatch : KtFirDiagnostic<KtNamedDeclaration> {
|
||||
override val diagnosticClass get() = InitializerTypeMismatch::class
|
||||
val expectedType: KtType
|
||||
val actualType: KtType
|
||||
|
||||
+1
-1
@@ -2583,7 +2583,7 @@ internal class InitializerTypeMismatchImpl(
|
||||
override val isMismatchDueToNullability: Boolean,
|
||||
firDiagnostic: KtPsiDiagnostic,
|
||||
token: KtLifetimeToken,
|
||||
) : KtAbstractFirDiagnostic<KtProperty>(firDiagnostic, token), KtFirDiagnostic.InitializerTypeMismatch
|
||||
) : KtAbstractFirDiagnostic<KtNamedDeclaration>(firDiagnostic, token), KtFirDiagnostic.InitializerTypeMismatch
|
||||
|
||||
internal class GetterVisibilityDiffersFromPropertyVisibilityImpl(
|
||||
firDiagnostic: KtPsiDiagnostic,
|
||||
|
||||
+6
@@ -7072,6 +7072,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia
|
||||
runTest("compiler/testData/diagnostics/tests/controlStructures/forLoopWithNullableRange.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("forWithIncorrectTypeSpecializer.kt")
|
||||
public void testForWithIncorrectTypeSpecializer() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/controlStructures/forWithIncorrectTypeSpecializer.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("forWithNullableIterator.kt")
|
||||
public void testForWithNullableIterator() throws Exception {
|
||||
|
||||
+6
@@ -7072,6 +7072,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
|
||||
runTest("compiler/testData/diagnostics/tests/controlStructures/forLoopWithNullableRange.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("forWithIncorrectTypeSpecializer.kt")
|
||||
public void testForWithIncorrectTypeSpecializer() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/controlStructures/forWithIncorrectTypeSpecializer.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("forWithNullableIterator.kt")
|
||||
public void testForWithNullableIterator() throws Exception {
|
||||
|
||||
+6
@@ -7072,6 +7072,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir
|
||||
runTest("compiler/testData/diagnostics/tests/controlStructures/forLoopWithNullableRange.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("forWithIncorrectTypeSpecializer.kt")
|
||||
public void testForWithIncorrectTypeSpecializer() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/controlStructures/forWithIncorrectTypeSpecializer.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("forWithNullableIterator.kt")
|
||||
public void testForWithNullableIterator() throws Exception {
|
||||
|
||||
+6
@@ -7078,6 +7078,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia
|
||||
runTest("compiler/testData/diagnostics/tests/controlStructures/forLoopWithNullableRange.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("forWithIncorrectTypeSpecializer.kt")
|
||||
public void testForWithIncorrectTypeSpecializer() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/controlStructures/forWithIncorrectTypeSpecializer.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("forWithNullableIterator.kt")
|
||||
public void testForWithNullableIterator() throws Exception {
|
||||
|
||||
+2
-1
@@ -1055,7 +1055,8 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
|
||||
) {
|
||||
parameter<FirTypeParameterSymbol>("usedTypeParameter")
|
||||
}
|
||||
val INITIALIZER_TYPE_MISMATCH by error<KtProperty>(PositioningStrategy.PROPERTY_INITIALIZER) {
|
||||
// Type parameter is KtNamedDeclaration because PSI of FirProperty can be KtParameter in for loop
|
||||
val INITIALIZER_TYPE_MISMATCH by error<KtNamedDeclaration>(PositioningStrategy.PROPERTY_INITIALIZER) {
|
||||
parameter<ConeKotlinType>("expectedType")
|
||||
parameter<ConeKotlinType>("actualType")
|
||||
parameter<Boolean>("isMismatchDueToNullability")
|
||||
|
||||
+1
-1
@@ -561,7 +561,7 @@ object FirErrors {
|
||||
val CONST_VAL_WITH_NON_CONST_INITIALIZER by error0<KtExpression>()
|
||||
val WRONG_SETTER_PARAMETER_TYPE by error2<KtTypeReference, ConeKotlinType, ConeKotlinType>()
|
||||
val DELEGATE_USES_EXTENSION_PROPERTY_TYPE_PARAMETER by deprecationError1<KtProperty, FirTypeParameterSymbol>(ForbidUsingExtensionPropertyTypeParameterInDelegate, SourceElementPositioningStrategies.PROPERTY_DELEGATE)
|
||||
val INITIALIZER_TYPE_MISMATCH by error3<KtProperty, ConeKotlinType, ConeKotlinType, Boolean>(SourceElementPositioningStrategies.PROPERTY_INITIALIZER)
|
||||
val INITIALIZER_TYPE_MISMATCH by error3<KtNamedDeclaration, ConeKotlinType, ConeKotlinType, Boolean>(SourceElementPositioningStrategies.PROPERTY_INITIALIZER)
|
||||
val GETTER_VISIBILITY_DIFFERS_FROM_PROPERTY_VISIBILITY by error0<KtModifierListOwner>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
|
||||
val SETTER_VISIBILITY_INCONSISTENT_WITH_PROPERTY_VISIBILITY by error0<KtModifierListOwner>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
|
||||
val WRONG_SETTER_RETURN_TYPE by error0<KtTypeReference>()
|
||||
|
||||
+7
-3
@@ -929,9 +929,13 @@ object PositioningStrategies {
|
||||
val REIFIED_MODIFIER: PositioningStrategy<KtModifierListOwner> =
|
||||
ModifierSetBasedPositioningStrategy(KtTokens.REIFIED_KEYWORD)
|
||||
|
||||
val PROPERTY_INITIALIZER: PositioningStrategy<KtProperty> = object : PositioningStrategy<KtProperty>() {
|
||||
override fun mark(element: KtProperty): List<TextRange> {
|
||||
return markElement(element.initializer ?: element)
|
||||
val PROPERTY_INITIALIZER: PositioningStrategy<KtNamedDeclaration> = object : PositioningStrategy<KtNamedDeclaration>() {
|
||||
override fun mark(element: KtNamedDeclaration): List<TextRange> {
|
||||
return markElement(when (element) {
|
||||
is KtProperty -> element.initializer ?: element
|
||||
is KtParameter -> element.typeReference ?: element
|
||||
else -> element
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Vendored
+9
@@ -0,0 +1,9 @@
|
||||
open class Base
|
||||
class Derived : Base()
|
||||
|
||||
fun main() {
|
||||
val derivedList: List<Base> = <!UNRESOLVED_REFERENCE!>listOf<!>(Derived(), Derived(), Derived())
|
||||
|
||||
for (derived: <!INITIALIZER_TYPE_MISMATCH!>Derived<!> in derivedList) {
|
||||
}
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
open class Base
|
||||
class Derived : Base()
|
||||
|
||||
fun main() {
|
||||
val derivedList: List<Base> = <!UNRESOLVED_REFERENCE!>listOf<!>(Derived(), Derived(), Derived())
|
||||
|
||||
for (derived: <!TYPE_MISMATCH_IN_FOR_LOOP!>Derived<!> in derivedList) {
|
||||
}
|
||||
}
|
||||
Generated
+6
@@ -7078,6 +7078,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
|
||||
runTest("compiler/testData/diagnostics/tests/controlStructures/forLoopWithNullableRange.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("forWithIncorrectTypeSpecializer.kt")
|
||||
public void testForWithIncorrectTypeSpecializer() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/controlStructures/forWithIncorrectTypeSpecializer.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("forWithNullableIterator.kt")
|
||||
public void testForWithNullableIterator() throws Exception {
|
||||
|
||||
Reference in New Issue
Block a user