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");
|
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
|
@Test
|
||||||
@TestMetadata("identityComparisonWithInlineClasses.kt")
|
@TestMetadata("identityComparisonWithInlineClasses.kt")
|
||||||
public void testIdentityComparisonWithInlineClasses() throws Exception {
|
public void testIdentityComparisonWithInlineClasses() throws Exception {
|
||||||
@@ -17132,6 +17138,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag
|
|||||||
runTest("compiler/testData/diagnostics/tests/inlineClasses/recursiveInlineClasses.kt");
|
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
|
@Test
|
||||||
@TestMetadata("reservedMembersAndConstructsInsideInlineClass.kt")
|
@TestMetadata("reservedMembersAndConstructsInsideInlineClass.kt")
|
||||||
public void testReservedMembersAndConstructsInsideInlineClass() throws Exception {
|
public void testReservedMembersAndConstructsInsideInlineClass() throws Exception {
|
||||||
|
|||||||
+15
-7
@@ -174,13 +174,21 @@ object FirInlineClassDeclarationChecker : FirRegularClassChecker() {
|
|||||||
context
|
context
|
||||||
)
|
)
|
||||||
|
|
||||||
primaryConstructorParameter.returnTypeRef.isInapplicableParameterType() ->
|
primaryConstructorParameter.returnTypeRef.isInapplicableParameterType() -> {
|
||||||
reporter.reportOn(
|
val inlineClassHasGenericUnderlyingType = primaryConstructorParameter.returnTypeRef.coneType.let {
|
||||||
primaryConstructorParameter.returnTypeRef.source,
|
(it is ConeTypeParameterType || it.isGenericArrayOfTypeParameter())
|
||||||
FirErrors.VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE,
|
}
|
||||||
primaryConstructorParameter.returnTypeRef.coneType,
|
if (!(context.languageVersionSettings.supportsFeature(LanguageFeature.GenericInlineClassParameter) &&
|
||||||
context
|
inlineClassHasGenericUnderlyingType)
|
||||||
)
|
) {
|
||||||
|
reporter.reportOn(
|
||||||
|
primaryConstructorParameter.returnTypeRef.source,
|
||||||
|
FirErrors.VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE,
|
||||||
|
primaryConstructorParameter.returnTypeRef.coneType,
|
||||||
|
context
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
primaryConstructorParameter.returnTypeRef.coneType.isRecursiveInlineClassType(context.session) ->
|
primaryConstructorParameter.returnTypeRef.coneType.isRecursiveInlineClassType(context.session) ->
|
||||||
reporter.reportOnWithSuppression(
|
reporter.reportOnWithSuppression(
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
// CHECK_BYTECODE_LISTING
|
// CHECK_BYTECODE_LISTING
|
||||||
// LANGUAGE: -JvmInlineValueClasses, +GenericInlineClassParameter
|
// LANGUAGE: -JvmInlineValueClasses, +GenericInlineClassParameter
|
||||||
|
// IGNORE_BACKED: JVM
|
||||||
|
|
||||||
inline class ICAny<T>(val value: T)
|
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
|
// !LANGUAGE: +InlineClasses, -JvmInlineValueClasses, +GenericInlineClassParameter
|
||||||
// SKIP_TXT
|
// SKIP_TXT
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
// !LANGUAGE: +InlineClasses, -JvmInlineValueClasses
|
// !LANGUAGE: +InlineClasses, -JvmInlineValueClasses
|
||||||
// SKIP_TXT
|
// 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