[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
|
val usedTypeParameter: KtTypeParameterSymbol
|
||||||
}
|
}
|
||||||
|
|
||||||
interface InitializerTypeMismatch : KtFirDiagnostic<KtProperty> {
|
interface InitializerTypeMismatch : KtFirDiagnostic<KtNamedDeclaration> {
|
||||||
override val diagnosticClass get() = InitializerTypeMismatch::class
|
override val diagnosticClass get() = InitializerTypeMismatch::class
|
||||||
val expectedType: KtType
|
val expectedType: KtType
|
||||||
val actualType: KtType
|
val actualType: KtType
|
||||||
|
|||||||
+1
-1
@@ -2583,7 +2583,7 @@ internal class InitializerTypeMismatchImpl(
|
|||||||
override val isMismatchDueToNullability: Boolean,
|
override val isMismatchDueToNullability: Boolean,
|
||||||
firDiagnostic: KtPsiDiagnostic,
|
firDiagnostic: KtPsiDiagnostic,
|
||||||
token: KtLifetimeToken,
|
token: KtLifetimeToken,
|
||||||
) : KtAbstractFirDiagnostic<KtProperty>(firDiagnostic, token), KtFirDiagnostic.InitializerTypeMismatch
|
) : KtAbstractFirDiagnostic<KtNamedDeclaration>(firDiagnostic, token), KtFirDiagnostic.InitializerTypeMismatch
|
||||||
|
|
||||||
internal class GetterVisibilityDiffersFromPropertyVisibilityImpl(
|
internal class GetterVisibilityDiffersFromPropertyVisibilityImpl(
|
||||||
firDiagnostic: KtPsiDiagnostic,
|
firDiagnostic: KtPsiDiagnostic,
|
||||||
|
|||||||
+6
@@ -7072,6 +7072,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia
|
|||||||
runTest("compiler/testData/diagnostics/tests/controlStructures/forLoopWithNullableRange.kt");
|
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
|
@Test
|
||||||
@TestMetadata("forWithNullableIterator.kt")
|
@TestMetadata("forWithNullableIterator.kt")
|
||||||
public void testForWithNullableIterator() throws Exception {
|
public void testForWithNullableIterator() throws Exception {
|
||||||
|
|||||||
+6
@@ -7072,6 +7072,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
|
|||||||
runTest("compiler/testData/diagnostics/tests/controlStructures/forLoopWithNullableRange.kt");
|
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
|
@Test
|
||||||
@TestMetadata("forWithNullableIterator.kt")
|
@TestMetadata("forWithNullableIterator.kt")
|
||||||
public void testForWithNullableIterator() throws Exception {
|
public void testForWithNullableIterator() throws Exception {
|
||||||
|
|||||||
+6
@@ -7072,6 +7072,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir
|
|||||||
runTest("compiler/testData/diagnostics/tests/controlStructures/forLoopWithNullableRange.kt");
|
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
|
@Test
|
||||||
@TestMetadata("forWithNullableIterator.kt")
|
@TestMetadata("forWithNullableIterator.kt")
|
||||||
public void testForWithNullableIterator() throws Exception {
|
public void testForWithNullableIterator() throws Exception {
|
||||||
|
|||||||
+6
@@ -7078,6 +7078,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia
|
|||||||
runTest("compiler/testData/diagnostics/tests/controlStructures/forLoopWithNullableRange.kt");
|
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
|
@Test
|
||||||
@TestMetadata("forWithNullableIterator.kt")
|
@TestMetadata("forWithNullableIterator.kt")
|
||||||
public void testForWithNullableIterator() throws Exception {
|
public void testForWithNullableIterator() throws Exception {
|
||||||
|
|||||||
+2
-1
@@ -1055,7 +1055,8 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
|
|||||||
) {
|
) {
|
||||||
parameter<FirTypeParameterSymbol>("usedTypeParameter")
|
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>("expectedType")
|
||||||
parameter<ConeKotlinType>("actualType")
|
parameter<ConeKotlinType>("actualType")
|
||||||
parameter<Boolean>("isMismatchDueToNullability")
|
parameter<Boolean>("isMismatchDueToNullability")
|
||||||
|
|||||||
+1
-1
@@ -561,7 +561,7 @@ object FirErrors {
|
|||||||
val CONST_VAL_WITH_NON_CONST_INITIALIZER by error0<KtExpression>()
|
val CONST_VAL_WITH_NON_CONST_INITIALIZER by error0<KtExpression>()
|
||||||
val WRONG_SETTER_PARAMETER_TYPE by error2<KtTypeReference, ConeKotlinType, ConeKotlinType>()
|
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 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 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 SETTER_VISIBILITY_INCONSISTENT_WITH_PROPERTY_VISIBILITY by error0<KtModifierListOwner>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
|
||||||
val WRONG_SETTER_RETURN_TYPE by error0<KtTypeReference>()
|
val WRONG_SETTER_RETURN_TYPE by error0<KtTypeReference>()
|
||||||
|
|||||||
+7
-3
@@ -929,9 +929,13 @@ object PositioningStrategies {
|
|||||||
val REIFIED_MODIFIER: PositioningStrategy<KtModifierListOwner> =
|
val REIFIED_MODIFIER: PositioningStrategy<KtModifierListOwner> =
|
||||||
ModifierSetBasedPositioningStrategy(KtTokens.REIFIED_KEYWORD)
|
ModifierSetBasedPositioningStrategy(KtTokens.REIFIED_KEYWORD)
|
||||||
|
|
||||||
val PROPERTY_INITIALIZER: PositioningStrategy<KtProperty> = object : PositioningStrategy<KtProperty>() {
|
val PROPERTY_INITIALIZER: PositioningStrategy<KtNamedDeclaration> = object : PositioningStrategy<KtNamedDeclaration>() {
|
||||||
override fun mark(element: KtProperty): List<TextRange> {
|
override fun mark(element: KtNamedDeclaration): List<TextRange> {
|
||||||
return markElement(element.initializer ?: element)
|
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");
|
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
|
@Test
|
||||||
@TestMetadata("forWithNullableIterator.kt")
|
@TestMetadata("forWithNullableIterator.kt")
|
||||||
public void testForWithNullableIterator() throws Exception {
|
public void testForWithNullableIterator() throws Exception {
|
||||||
|
|||||||
Reference in New Issue
Block a user