Improve diagnostics for lateinit properties with generic type
#KT-11834 Fixed
This commit is contained in:
+4
-1
@@ -45,9 +45,12 @@ object LateinitModifierApplicabilityChecker {
|
|||||||
trace.report(Errors.INAPPLICABLE_LATEINIT_MODIFIER.on(modifier, "is allowed only on mutable $variables"))
|
trace.report(Errors.INAPPLICABLE_LATEINIT_MODIFIER.on(modifier, "is allowed only on mutable $variables"))
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TypeUtils.isNullableType(type)) {
|
if (type.isMarkedNullable) {
|
||||||
trace.report(Errors.INAPPLICABLE_LATEINIT_MODIFIER.on(modifier, "is not allowed on $variables of nullable types"))
|
trace.report(Errors.INAPPLICABLE_LATEINIT_MODIFIER.on(modifier, "is not allowed on $variables of nullable types"))
|
||||||
}
|
}
|
||||||
|
else if (TypeUtils.isNullableType(type)) {
|
||||||
|
trace.report(Errors.INAPPLICABLE_LATEINIT_MODIFIER.on(modifier, "is not allowed on $variables of a type with nullable upper bound"))
|
||||||
|
}
|
||||||
|
|
||||||
if (KotlinBuiltIns.isPrimitiveType(type)) {
|
if (KotlinBuiltIns.isPrimitiveType(type)) {
|
||||||
trace.report(Errors.INAPPLICABLE_LATEINIT_MODIFIER.on(modifier, "is not allowed on $variables of primitive types"))
|
trace.report(Errors.INAPPLICABLE_LATEINIT_MODIFIER.on(modifier, "is not allowed on $variables of primitive types"))
|
||||||
|
|||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
class C<V>() {
|
||||||
|
<error descr="[INAPPLICABLE_LATEINIT_MODIFIER] 'lateinit' modifier is not allowed on properties of a type with nullable upper bound">lateinit</error> var item: V
|
||||||
|
}
|
||||||
@@ -1004,6 +1004,12 @@ public class PsiCheckerTestGenerated extends AbstractPsiCheckerTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("lateinitOfATypeWithNullableUpperBound.kt")
|
||||||
|
public void testLateinitOfATypeWithNullableUpperBound() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/checker/diagnosticsMessage/lateinitOfATypeWithNullableUpperBound.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("nArgumentsExpectedMessage.kt")
|
@TestMetadata("nArgumentsExpectedMessage.kt")
|
||||||
public void testNArgumentsExpectedMessage() throws Exception {
|
public void testNArgumentsExpectedMessage() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/checker/diagnosticsMessage/nArgumentsExpectedMessage.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/checker/diagnosticsMessage/nArgumentsExpectedMessage.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user