[compiler] missed type parameters in local properties (KTIJ-23583)
even though local variables won't contain type parameters, let's build fir for them
This commit is contained in:
+4
-2
@@ -32,8 +32,10 @@ object FirPropertyTypeParametersChecker : FirPropertyChecker() {
|
||||
declaration.contextReceivers.forEach { collectAllTypes(it.typeRef.coneType) }
|
||||
|
||||
val usedNames = usedTypes.filterIsInstance<ConeTypeParameterType>().map { it.lookupTag.name }
|
||||
declaration.typeParameters.filterNot { usedNames.contains(it.name) }.forEach { danglingParam ->
|
||||
reporter.reportOn(danglingParam.source, FirErrors.TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER, context)
|
||||
if (!declaration.isLocal) {
|
||||
declaration.typeParameters.filterNot { usedNames.contains(it.name) }.forEach { danglingParam ->
|
||||
reporter.reportOn(danglingParam.source, FirErrors.TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER, context)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
@@ -1173,6 +1173,7 @@ class DeclarationsConverter(
|
||||
isLateInit = modifiers.hasLateinit()
|
||||
}
|
||||
|
||||
typeParameters += firTypeParameters
|
||||
generateAccessorsByDelegate(
|
||||
delegateBuilder,
|
||||
baseModuleData,
|
||||
|
||||
@@ -1611,6 +1611,7 @@ open class RawFirBuilder(
|
||||
isLocal = true
|
||||
symbol = FirPropertySymbol(propertyName)
|
||||
|
||||
extractTypeParametersTo(this, symbol)
|
||||
backingField = this@toFirProperty.fieldDeclaration.toFirBackingField(
|
||||
this@toFirProperty,
|
||||
propertySymbol = symbol,
|
||||
|
||||
+3
@@ -120,6 +120,9 @@ open class FirDeclarationsResolveTransformer(transformer: FirAbstractBodyResolve
|
||||
property.getter?.let { it.transformStatus(this, it.resolveStatus(containingProperty = property).mode()) }
|
||||
property.setter?.let { it.transformStatus(this, it.resolveStatus(containingProperty = property).mode()) }
|
||||
property.backingField?.let { it.transformStatus(this, it.resolveStatus(containingProperty = property).mode()) }
|
||||
context.withProperty(property) {
|
||||
doTransformTypeParameters(property)
|
||||
}
|
||||
return transformLocalVariable(property)
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -9,6 +9,6 @@ class SomeClass {
|
||||
val <<!WRONG_ANNOTATION_TARGET!>@A1<!> <!WRONG_ANNOTATION_TARGET!>@A2(3)<!> <!REPEATED_ANNOTATION, WRONG_ANNOTATION_TARGET!>@A2<!> <!REPEATED_ANNOTATION, WRONG_ANNOTATION_TARGET!>@A1(<!TOO_MANY_ARGUMENTS!>12<!>)<!> <!REPEATED_ANNOTATION, WRONG_ANNOTATION_TARGET!>@A2(<!ARGUMENT_TYPE_MISMATCH!>"Test"<!>)<!> T> T.field: Int get() = 12
|
||||
|
||||
fun foo() {
|
||||
val <!LOCAL_VARIABLE_WITH_TYPE_PARAMETERS!><@A1 @A2(3) @A2 @A1(12) @A2("Test") T><!> localVal = 12
|
||||
val <!LOCAL_VARIABLE_WITH_TYPE_PARAMETERS!><<!WRONG_ANNOTATION_TARGET!>@A1<!> <!WRONG_ANNOTATION_TARGET!>@A2(3)<!> <!REPEATED_ANNOTATION, WRONG_ANNOTATION_TARGET!>@A2<!> <!REPEATED_ANNOTATION, WRONG_ANNOTATION_TARGET!>@A1(<!TOO_MANY_ARGUMENTS!>12<!>)<!> <!REPEATED_ANNOTATION, WRONG_ANNOTATION_TARGET!>@A2(<!ARGUMENT_TYPE_MISMATCH!>"Test"<!>)<!> T><!> localVal = 12
|
||||
}
|
||||
}
|
||||
|
||||
Vendored
+2
-2
@@ -5,8 +5,8 @@ import kotlin.reflect.KProperty
|
||||
|
||||
fun test() {
|
||||
val <!LOCAL_VARIABLE_WITH_TYPE_PARAMETERS_WARNING!><T><!> a0 = 0
|
||||
val <!LOCAL_VARIABLE_WITH_TYPE_PARAMETERS_WARNING!><T : __UNRESOLVED__><!> a1 = ""
|
||||
val <!LOCAL_VARIABLE_WITH_TYPE_PARAMETERS_WARNING!><T : String><!> a2 = 0
|
||||
val <!LOCAL_VARIABLE_WITH_TYPE_PARAMETERS_WARNING!><T : <!UNRESOLVED_REFERENCE!>__UNRESOLVED__<!>><!> a1 = ""
|
||||
val <!LOCAL_VARIABLE_WITH_TYPE_PARAMETERS_WARNING!><T : <!FINAL_UPPER_BOUND!>String<!>><!> a2 = 0
|
||||
<!WRONG_MODIFIER_TARGET!>const<!> val <!LOCAL_VARIABLE_WITH_TYPE_PARAMETERS_WARNING!><T><!> a3 = 0
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> val <!LOCAL_VARIABLE_WITH_TYPE_PARAMETERS_WARNING!><T><!> a4 = 0
|
||||
val <!LOCAL_VARIABLE_WITH_TYPE_PARAMETERS_WARNING!><T><!> a5 by Delegate<Int>()
|
||||
|
||||
Vendored
+2
-2
@@ -5,8 +5,8 @@ import kotlin.reflect.KProperty
|
||||
|
||||
fun test() {
|
||||
val <!LOCAL_VARIABLE_WITH_TYPE_PARAMETERS!><T><!> a0 = 0
|
||||
val <!LOCAL_VARIABLE_WITH_TYPE_PARAMETERS!><T : __UNRESOLVED__><!> a1 = ""
|
||||
val <!LOCAL_VARIABLE_WITH_TYPE_PARAMETERS!><T : String><!> a2 = 0
|
||||
val <!LOCAL_VARIABLE_WITH_TYPE_PARAMETERS!><T : <!UNRESOLVED_REFERENCE!>__UNRESOLVED__<!>><!> a1 = ""
|
||||
val <!LOCAL_VARIABLE_WITH_TYPE_PARAMETERS!><T : <!FINAL_UPPER_BOUND!>String<!>><!> a2 = 0
|
||||
<!WRONG_MODIFIER_TARGET!>const<!> val <!LOCAL_VARIABLE_WITH_TYPE_PARAMETERS!><T><!> a3 = 0
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> val <!LOCAL_VARIABLE_WITH_TYPE_PARAMETERS!><T><!> a4 = 0
|
||||
val <!LOCAL_VARIABLE_WITH_TYPE_PARAMETERS!><T><!> a5 by Delegate<Int>()
|
||||
|
||||
Vendored
+8
-8
@@ -27,8 +27,8 @@ fun case_4() {
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun case_5() {
|
||||
val <!LOCAL_VARIABLE_WITH_TYPE_PARAMETERS!><T : __UNRESOLVED__><!> x1: Map<Int, Int> = mapOf(1 to 1)
|
||||
var <!LOCAL_VARIABLE_WITH_TYPE_PARAMETERS!><T : __UNRESOLVED__><!> x2: Map<Int, Int> = mapOf(1 to 1)
|
||||
val <!LOCAL_VARIABLE_WITH_TYPE_PARAMETERS!><T : <!UNRESOLVED_REFERENCE!>__UNRESOLVED__<!>><!> x1: Map<Int, Int> = mapOf(1 to 1)
|
||||
var <!LOCAL_VARIABLE_WITH_TYPE_PARAMETERS!><T : <!UNRESOLVED_REFERENCE!>__UNRESOLVED__<!>><!> x2: Map<Int, Int> = mapOf(1 to 1)
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -77,18 +77,18 @@ fun case_11() {
|
||||
|
||||
// TESTCASE NUMBER: 12
|
||||
fun case_12() {
|
||||
val <!LOCAL_VARIABLE_WITH_TYPE_PARAMETERS!><T : __UNRESOLVED__><!> x: Int
|
||||
var <!LOCAL_VARIABLE_WITH_TYPE_PARAMETERS!><T : __UNRESOLVED__><!> x: Int
|
||||
val <!LOCAL_VARIABLE_WITH_TYPE_PARAMETERS!><T : <!UNRESOLVED_REFERENCE!>__UNRESOLVED__<!>><!> x: Int
|
||||
var <!LOCAL_VARIABLE_WITH_TYPE_PARAMETERS!><T : <!UNRESOLVED_REFERENCE!>__UNRESOLVED__<!>><!> x: Int
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 13
|
||||
fun case_13() {
|
||||
val <!LOCAL_VARIABLE_WITH_TYPE_PARAMETERS!><T : __UNRESOLVED__><!> x: Int where __UNRESOLVED__: __UNRESOLVED__
|
||||
var <!LOCAL_VARIABLE_WITH_TYPE_PARAMETERS!><T : __UNRESOLVED__><!> x: Int where __UNRESOLVED__: __UNRESOLVED__
|
||||
val <!LOCAL_VARIABLE_WITH_TYPE_PARAMETERS!><T : <!UNRESOLVED_REFERENCE!>__UNRESOLVED__<!>><!> x: Int where __UNRESOLVED__: __UNRESOLVED__
|
||||
var <!LOCAL_VARIABLE_WITH_TYPE_PARAMETERS!><T : <!UNRESOLVED_REFERENCE!>__UNRESOLVED__<!>><!> x: Int where __UNRESOLVED__: __UNRESOLVED__
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 14
|
||||
fun case_14() {
|
||||
val <!LOCAL_VARIABLE_WITH_TYPE_PARAMETERS!><T : T><!> x1 = 1
|
||||
var <!LOCAL_VARIABLE_WITH_TYPE_PARAMETERS!><T : T><!> x2 = 1
|
||||
val <!LOCAL_VARIABLE_WITH_TYPE_PARAMETERS!><<!CYCLIC_GENERIC_UPPER_BOUND!>T : T<!>><!> x1 = 1
|
||||
var <!LOCAL_VARIABLE_WITH_TYPE_PARAMETERS!><<!CYCLIC_GENERIC_UPPER_BOUND!>T : T<!>><!> x2 = 1
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user