Support generic underlying type of inline class in FIR
#KT-32162
This commit is contained in:
+12
@@ -17036,6 +17036,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag
|
||||
runTest("compiler/testData/diagnostics/tests/inlineClasses/functionsJvmSignaturesConflictOnInheritance.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("genericInlineClass.kt")
|
||||
public void testGenericInlineClass() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/inlineClasses/genericInlineClass.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("identityComparisonWithInlineClasses.kt")
|
||||
public void testIdentityComparisonWithInlineClasses() throws Exception {
|
||||
@@ -17132,6 +17138,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag
|
||||
runTest("compiler/testData/diagnostics/tests/inlineClasses/recursiveInlineClasses.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("reifiedGenericUnderlyingType.kt")
|
||||
public void testReifiedGenericUnderlyingType() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/inlineClasses/reifiedGenericUnderlyingType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("reservedMembersAndConstructsInsideInlineClass.kt")
|
||||
public void testReservedMembersAndConstructsInsideInlineClass() throws Exception {
|
||||
|
||||
+15
-7
@@ -174,13 +174,21 @@ object FirInlineClassDeclarationChecker : FirRegularClassChecker() {
|
||||
context
|
||||
)
|
||||
|
||||
primaryConstructorParameter.returnTypeRef.isInapplicableParameterType() ->
|
||||
reporter.reportOn(
|
||||
primaryConstructorParameter.returnTypeRef.source,
|
||||
FirErrors.VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE,
|
||||
primaryConstructorParameter.returnTypeRef.coneType,
|
||||
context
|
||||
)
|
||||
primaryConstructorParameter.returnTypeRef.isInapplicableParameterType() -> {
|
||||
val inlineClassHasGenericUnderlyingType = primaryConstructorParameter.returnTypeRef.coneType.let {
|
||||
(it is ConeTypeParameterType || it.isGenericArrayOfTypeParameter())
|
||||
}
|
||||
if (!(context.languageVersionSettings.supportsFeature(LanguageFeature.GenericInlineClassParameter) &&
|
||||
inlineClassHasGenericUnderlyingType)
|
||||
) {
|
||||
reporter.reportOn(
|
||||
primaryConstructorParameter.returnTypeRef.source,
|
||||
FirErrors.VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE,
|
||||
primaryConstructorParameter.returnTypeRef.coneType,
|
||||
context
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
primaryConstructorParameter.returnTypeRef.coneType.isRecursiveInlineClassType(context.session) ->
|
||||
reporter.reportOnWithSuppression(
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
// CHECK_BYTECODE_LISTING
|
||||
// LANGUAGE: -JvmInlineValueClasses, +GenericInlineClassParameter
|
||||
// IGNORE_BACKED: JVM
|
||||
|
||||
inline class ICAny<T>(val value: T)
|
||||
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
// !LANGUAGE: +InlineClasses, -JvmInlineValueClasses, +GenericInlineClassParameter
|
||||
// SKIP_TXT
|
||||
|
||||
inline class ICAny<T>(val value: T)
|
||||
|
||||
inline class ICArray<T>(val value: Array<T>)
|
||||
|
||||
inline class ICList<T>(val value: List<T>)
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE: +InlineClasses, -JvmInlineValueClasses, +GenericInlineClassParameter
|
||||
// SKIP_TXT
|
||||
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// !LANGUAGE: +InlineClasses, -JvmInlineValueClasses
|
||||
// SKIP_TXT
|
||||
|
||||
inline class ICAny<reified T>(val value: T)
|
||||
inline class ICAny<<!REIFIED_TYPE_PARAMETER_NO_INLINE!>reified<!> T>(val value: <!VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>T<!>)
|
||||
|
||||
Reference in New Issue
Block a user