Fir2Ir, JVM IR: support flexible Array types loaded from Java
We don't have true flexible types in the IR, but we approximate it with internal type annotations, such as FlexibleNullability, FlexibleMutability, RawType. These annotations are then handled specially in JvmIrTypeSystemContext, which can construct a fake flexible type so that type checker on IR types would behave exactly as on frontend types. As shown in KT-63441, one instance of flexible types where flexibility was lost during conversion to IR is Java array/vararg types. It's necessary to support it so that IR fake overrides could be constructed correctly, because IR fake override checker requires parameter types to be equal. So this change introduces another internal type annotation, FlexibleArrayElementVariance, which is only applicable to types with classifier kotlin/Array, and which signifies that the annotated type `Array<X>` should rather be seen as `Array<X>..Array<out X>`. #KT-63441 Fixed #KT-63446 Fixed
This commit is contained in:
committed by
Space Team
parent
e98902ce74
commit
ee8d42532b
+30
@@ -31060,6 +31060,36 @@ public class LLFirBlackBoxCodegenBasedTestGenerated extends AbstractLLFirBlackBo
|
||||
runTest("compiler/testData/codegen/box/javaInterop/notFoundClasses.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithArrayParameterType.kt")
|
||||
public void testOverrideWithArrayParameterType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithArrayParameterType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithArrayParameterType2.kt")
|
||||
public void testOverrideWithArrayParameterType2() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithArrayParameterType2.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithArrayParameterTypeNotNull.kt")
|
||||
public void testOverrideWithArrayParameterTypeNotNull() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithArrayParameterTypeNotNull.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithGenericArrayParameterType.kt")
|
||||
public void testOverrideWithGenericArrayParameterType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithGenericArrayParameterType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithVarargParameterType.kt")
|
||||
public void testOverrideWithVarargParameterType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithVarargParameterType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("protectedField.kt")
|
||||
public void testProtectedField() throws Exception {
|
||||
|
||||
+30
@@ -31060,6 +31060,36 @@ public class LLFirReversedBlackBoxCodegenBasedTestGenerated extends AbstractLLFi
|
||||
runTest("compiler/testData/codegen/box/javaInterop/notFoundClasses.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithArrayParameterType.kt")
|
||||
public void testOverrideWithArrayParameterType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithArrayParameterType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithArrayParameterType2.kt")
|
||||
public void testOverrideWithArrayParameterType2() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithArrayParameterType2.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithArrayParameterTypeNotNull.kt")
|
||||
public void testOverrideWithArrayParameterTypeNotNull() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithArrayParameterTypeNotNull.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithGenericArrayParameterType.kt")
|
||||
public void testOverrideWithGenericArrayParameterType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithGenericArrayParameterType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithVarargParameterType.kt")
|
||||
public void testOverrideWithVarargParameterType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithVarargParameterType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("protectedField.kt")
|
||||
public void testProtectedField() throws Exception {
|
||||
|
||||
+2
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.ir.symbols.impl.DescriptorlessExternalPackageFragmen
|
||||
import org.jetbrains.kotlin.ir.util.createImplicitParameterDeclarationWithWrappedDescriptor
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.StandardClassIds.Annotations.EnhancedNullability
|
||||
import org.jetbrains.kotlin.name.StandardClassIds.Annotations.FlexibleArrayElementVariance
|
||||
import org.jetbrains.kotlin.name.StandardClassIds.Annotations.FlexibleMutability
|
||||
import org.jetbrains.kotlin.name.StandardClassIds.Annotations.FlexibleNullability
|
||||
import org.jetbrains.kotlin.name.StandardClassIds.Annotations.RawTypeAnnotation
|
||||
@@ -43,6 +44,7 @@ class Fir2IrJvmSpecialAnnotationSymbolProvider : Fir2IrSpecialSymbolProvider() {
|
||||
FlexibleNullability -> id.toIrClass(kotlinInternalIrPackage).symbol
|
||||
FlexibleMutability -> id.toIrClass(kotlinInternalIrPackage).symbol
|
||||
RawTypeAnnotation -> id.toIrClass(kotlinInternalIrPackage).symbol
|
||||
FlexibleArrayElementVariance -> id.toIrClass(kotlinInternalIrPackage).symbol
|
||||
else -> null
|
||||
}
|
||||
|
||||
|
||||
@@ -49,6 +49,13 @@ class Fir2IrBuiltIns(
|
||||
internal fun flexibleMutabilityAnnotationConstructorCall(): IrConstructorCall? =
|
||||
flexibleMutabilityAnnotationSymbol?.toConstructorCall()
|
||||
|
||||
private val flexibleArrayElementVarianceAnnotationSymbol by lazy {
|
||||
specialAnnotationIrSymbolById(StandardClassIds.Annotations.FlexibleArrayElementVariance)
|
||||
}
|
||||
|
||||
internal fun flexibleArrayElementVarianceAnnotationConstructorCall(): IrConstructorCall? =
|
||||
flexibleArrayElementVarianceAnnotationSymbol?.toConstructorCall()
|
||||
|
||||
private val rawTypeAnnotationSymbol by lazy {
|
||||
specialAnnotationIrSymbolById(StandardClassIds.Annotations.RawTypeAnnotation)
|
||||
}
|
||||
|
||||
@@ -16,14 +16,11 @@ import org.jetbrains.kotlin.fir.types.*
|
||||
import org.jetbrains.kotlin.fir.types.impl.*
|
||||
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.ir.types.IrTypeArgument
|
||||
import org.jetbrains.kotlin.ir.types.IrTypeProjection
|
||||
import org.jetbrains.kotlin.ir.types.*
|
||||
import org.jetbrains.kotlin.ir.types.impl.IrDynamicTypeImpl
|
||||
import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl
|
||||
import org.jetbrains.kotlin.ir.types.impl.IrStarProjectionImpl
|
||||
import org.jetbrains.kotlin.ir.types.impl.makeTypeProjection
|
||||
import org.jetbrains.kotlin.ir.types.makeNotNull
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.StandardClassIds
|
||||
import org.jetbrains.kotlin.name.StandardClassIds.Annotations.ExtensionFunctionType
|
||||
@@ -99,6 +96,7 @@ class Fir2IrTypeConverter(
|
||||
annotations: List<FirAnnotation> = emptyList(),
|
||||
hasFlexibleNullability: Boolean = false,
|
||||
hasFlexibleMutability: Boolean = false,
|
||||
hasFlexibleArrayElementVariance: Boolean = false,
|
||||
addRawTypeAnnotation: Boolean = false
|
||||
): IrType {
|
||||
return when (this) {
|
||||
@@ -132,6 +130,11 @@ class Fir2IrTypeConverter(
|
||||
typeAnnotations += it
|
||||
}
|
||||
}
|
||||
if (hasFlexibleArrayElementVariance) {
|
||||
builtIns.flexibleArrayElementVarianceAnnotationConstructorCall()?.let {
|
||||
typeAnnotations += it
|
||||
}
|
||||
}
|
||||
|
||||
if (isExtensionFunctionType && annotations.getAnnotationsByClassId(ExtensionFunctionType, session).isEmpty()) {
|
||||
builtIns.extensionFunctionTypeAnnotationConstructorCall()?.let {
|
||||
@@ -169,6 +172,7 @@ class Fir2IrTypeConverter(
|
||||
annotations,
|
||||
hasFlexibleNullability = lowerBound.nullability != upperBound.nullability,
|
||||
hasFlexibleMutability = isMutabilityFlexible(),
|
||||
hasFlexibleArrayElementVariance = false,
|
||||
addRawTypeAnnotation = true
|
||||
)
|
||||
}
|
||||
@@ -189,14 +193,16 @@ class Fir2IrTypeConverter(
|
||||
typeOrigin,
|
||||
annotations,
|
||||
hasFlexibleNullability = lower.nullability != upper.nullability,
|
||||
hasFlexibleMutability = isMutabilityFlexible()
|
||||
hasFlexibleMutability = isMutabilityFlexible(),
|
||||
hasFlexibleArrayElementVariance = hasFlexibleArrayElementVariance(),
|
||||
)
|
||||
} else {
|
||||
upperBound.toIrType(
|
||||
typeOrigin,
|
||||
annotations,
|
||||
hasFlexibleNullability = lowerBound.nullability != upperBound.nullability,
|
||||
hasFlexibleMutability = isMutabilityFlexible()
|
||||
hasFlexibleMutability = isMutabilityFlexible(),
|
||||
hasFlexibleArrayElementVariance = false,
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -231,6 +237,15 @@ class Fir2IrTypeConverter(
|
||||
}
|
||||
}
|
||||
|
||||
private fun ConeFlexibleType.hasFlexibleArrayElementVariance(): Boolean =
|
||||
lowerBound.let { lowerBound ->
|
||||
lowerBound is ConeClassLikeType && lowerBound.lookupTag.classId == StandardClassIds.Array &&
|
||||
lowerBound.typeArguments.single().kind == ProjectionKind.INVARIANT
|
||||
} && upperBound.let { upperBound ->
|
||||
upperBound is ConeClassLikeType && upperBound.lookupTag.classId == StandardClassIds.Array &&
|
||||
upperBound.typeArguments.single().kind == ProjectionKind.OUT
|
||||
}
|
||||
|
||||
private fun ConeFlexibleType.isMutabilityFlexible(): Boolean {
|
||||
val lowerFqName = lowerBound.classId?.asSingleFqName() ?: return false
|
||||
val upperFqName = upperBound.classId?.asSingleFqName() ?: return false
|
||||
|
||||
+30
@@ -30675,6 +30675,36 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr
|
||||
runTest("compiler/testData/codegen/box/javaInterop/notFoundClasses.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithArrayParameterType.kt")
|
||||
public void testOverrideWithArrayParameterType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithArrayParameterType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithArrayParameterType2.kt")
|
||||
public void testOverrideWithArrayParameterType2() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithArrayParameterType2.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithArrayParameterTypeNotNull.kt")
|
||||
public void testOverrideWithArrayParameterTypeNotNull() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithArrayParameterTypeNotNull.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithGenericArrayParameterType.kt")
|
||||
public void testOverrideWithGenericArrayParameterType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithGenericArrayParameterType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithVarargParameterType.kt")
|
||||
public void testOverrideWithVarargParameterType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithVarargParameterType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("protectedField.kt")
|
||||
public void testProtectedField() throws Exception {
|
||||
|
||||
+30
@@ -30675,6 +30675,36 @@ public class FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated
|
||||
runTest("compiler/testData/codegen/box/javaInterop/notFoundClasses.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithArrayParameterType.kt")
|
||||
public void testOverrideWithArrayParameterType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithArrayParameterType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithArrayParameterType2.kt")
|
||||
public void testOverrideWithArrayParameterType2() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithArrayParameterType2.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithArrayParameterTypeNotNull.kt")
|
||||
public void testOverrideWithArrayParameterTypeNotNull() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithArrayParameterTypeNotNull.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithGenericArrayParameterType.kt")
|
||||
public void testOverrideWithGenericArrayParameterType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithGenericArrayParameterType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithVarargParameterType.kt")
|
||||
public void testOverrideWithVarargParameterType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithVarargParameterType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("protectedField.kt")
|
||||
public void testProtectedField() throws Exception {
|
||||
|
||||
+30
@@ -30675,6 +30675,36 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo
|
||||
runTest("compiler/testData/codegen/box/javaInterop/notFoundClasses.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithArrayParameterType.kt")
|
||||
public void testOverrideWithArrayParameterType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithArrayParameterType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithArrayParameterType2.kt")
|
||||
public void testOverrideWithArrayParameterType2() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithArrayParameterType2.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithArrayParameterTypeNotNull.kt")
|
||||
public void testOverrideWithArrayParameterTypeNotNull() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithArrayParameterTypeNotNull.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithGenericArrayParameterType.kt")
|
||||
public void testOverrideWithGenericArrayParameterType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithGenericArrayParameterType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithVarargParameterType.kt")
|
||||
public void testOverrideWithVarargParameterType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithVarargParameterType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("protectedField.kt")
|
||||
public void testProtectedField() throws Exception {
|
||||
|
||||
@@ -1156,6 +1156,9 @@ class JvmSymbols(
|
||||
|
||||
val RAW_TYPE_ANNOTATION_FQ_NAME: FqName =
|
||||
StandardClassIds.Annotations.RawTypeAnnotation.asSingleFqName()
|
||||
|
||||
val FLEXIBLE_VARIANCE_ANNOTATION_FQ_NAME: FqName =
|
||||
StandardClassIds.Annotations.FlexibleArrayElementVariance.asSingleFqName()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+33
-3
@@ -6,16 +6,20 @@
|
||||
package org.jetbrains.kotlin.backend.jvm.ir
|
||||
|
||||
import org.jetbrains.kotlin.backend.jvm.JvmSymbols
|
||||
import org.jetbrains.kotlin.backend.jvm.JvmSymbols.Companion.FLEXIBLE_VARIANCE_ANNOTATION_FQ_NAME
|
||||
import org.jetbrains.kotlin.builtins.StandardNames
|
||||
import org.jetbrains.kotlin.ir.IrBuiltIns
|
||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||
import org.jetbrains.kotlin.ir.types.*
|
||||
import org.jetbrains.kotlin.ir.types.impl.IrStarProjectionImpl
|
||||
import org.jetbrains.kotlin.ir.types.impl.buildSimpleType
|
||||
import org.jetbrains.kotlin.ir.types.impl.makeTypeProjection
|
||||
import org.jetbrains.kotlin.ir.util.fqNameWhenAvailable
|
||||
import org.jetbrains.kotlin.ir.util.hasAnnotation
|
||||
import org.jetbrains.kotlin.ir.util.render
|
||||
import org.jetbrains.kotlin.name.StandardClassIds
|
||||
import org.jetbrains.kotlin.types.FlexibleTypeBoundsChecker
|
||||
import org.jetbrains.kotlin.types.Variance
|
||||
import org.jetbrains.kotlin.types.model.FlexibleTypeMarker
|
||||
|
||||
internal interface IrJvmFlexibleType : FlexibleTypeMarker {
|
||||
@@ -23,13 +27,22 @@ internal interface IrJvmFlexibleType : FlexibleTypeMarker {
|
||||
val upperBound: IrSimpleType
|
||||
}
|
||||
|
||||
/**
|
||||
* @param arrayVariance used for representing array types loaded from Java.
|
||||
* Java type `X[]` is loaded in Kotlin as `Array<X!>..Array<out X!>?` (where flexible nullability is handled by [nullability]).
|
||||
*/
|
||||
private class IrJvmFlexibleTypeImpl(
|
||||
val irType: IrSimpleType,
|
||||
val builtIns: IrBuiltIns,
|
||||
val nullability: Boolean,
|
||||
val mutability: Boolean,
|
||||
val arrayVariance: Boolean,
|
||||
val raw: Boolean,
|
||||
) : IrJvmFlexibleType {
|
||||
init {
|
||||
check(!arrayVariance || !raw) { "Flexible variance is only possible for Array types, which cannot be raw: ${irType.render()}" }
|
||||
}
|
||||
|
||||
override val lowerBound: IrSimpleType
|
||||
get() = irType.buildSimpleType {
|
||||
if (this@IrJvmFlexibleTypeImpl.nullability) nullability = SimpleTypeNullability.NOT_SPECIFIED
|
||||
@@ -52,7 +65,9 @@ private class IrJvmFlexibleTypeImpl(
|
||||
else -> error("Mutability-flexible type with unknown classifier: ${irType.render()}, FQ name: $readonlyClassFqName")
|
||||
}
|
||||
}
|
||||
|
||||
if (arrayVariance) {
|
||||
arguments = listOf(makeTypeProjection(irType.getArrayElementType(), Variance.INVARIANT))
|
||||
}
|
||||
}
|
||||
|
||||
override val upperBound: IrSimpleType
|
||||
@@ -74,11 +89,21 @@ private class IrJvmFlexibleTypeImpl(
|
||||
else -> error("Mutability-flexible type with unknown classifier: ${irType.render()}, FQ name: $readonlyClassFqName")
|
||||
}
|
||||
}
|
||||
if (arrayVariance) {
|
||||
arguments = listOf(makeTypeProjection(irType.getArrayElementType(), Variance.OUT_VARIANCE))
|
||||
}
|
||||
if (raw) {
|
||||
arguments = List(arguments.size) { IrStarProjectionImpl }
|
||||
}
|
||||
kotlinType = null
|
||||
}
|
||||
|
||||
private fun IrSimpleType.getArrayElementType(): IrType =
|
||||
when (val argument = arguments.singleOrNull()) {
|
||||
is IrTypeProjection -> argument.type
|
||||
is IrStarProjection -> error("Star projection is not possible for the argument of Array type: ${irType.render()}")
|
||||
null -> error("Flexible variance is only possible for Array types: ${irType.render()}")
|
||||
}
|
||||
}
|
||||
|
||||
fun IrType.isWithFlexibleNullability(): Boolean =
|
||||
@@ -87,20 +112,25 @@ fun IrType.isWithFlexibleNullability(): Boolean =
|
||||
internal fun IrType.isWithFlexibleMutability(): Boolean =
|
||||
hasAnnotation(JvmSymbols.FLEXIBLE_MUTABILITY_ANNOTATION_FQ_NAME)
|
||||
|
||||
private fun IrType.isWithFlexibleVariance(): Boolean =
|
||||
hasAnnotation(StandardClassIds.Annotations.FlexibleArrayElementVariance)
|
||||
|
||||
internal fun IrType.asJvmFlexibleType(builtIns: IrBuiltIns): FlexibleTypeMarker? {
|
||||
if (this !is IrSimpleType || annotations.isEmpty()) return null
|
||||
|
||||
val nullability = isWithFlexibleNullability()
|
||||
val mutability = isWithFlexibleMutability()
|
||||
val flexibleVariance = isWithFlexibleVariance()
|
||||
val raw = isRawType()
|
||||
if (!nullability && !mutability && !raw) return null
|
||||
if (!nullability && !mutability && !flexibleVariance && !raw) return null
|
||||
|
||||
val baseType = this.removeAnnotations { irCtorCall ->
|
||||
val fqName = irCtorCall.type.classFqName
|
||||
fqName == JvmSymbols.FLEXIBLE_NULLABILITY_ANNOTATION_FQ_NAME ||
|
||||
fqName == JvmSymbols.FLEXIBLE_MUTABILITY_ANNOTATION_FQ_NAME ||
|
||||
fqName == FLEXIBLE_VARIANCE_ANNOTATION_FQ_NAME ||
|
||||
fqName == JvmSymbols.RAW_TYPE_ANNOTATION_FQ_NAME
|
||||
} as IrSimpleType
|
||||
|
||||
return IrJvmFlexibleTypeImpl(baseType, builtIns, nullability, mutability, raw)
|
||||
return IrJvmFlexibleTypeImpl(baseType, builtIns, nullability, mutability, flexibleVariance, raw)
|
||||
}
|
||||
|
||||
+1
-1
@@ -106,7 +106,7 @@ class CopyIrTreeWithSymbolsForFakeOverrides(
|
||||
}
|
||||
|
||||
private companion object {
|
||||
// TODO: RawTypeAnnotation, FlexibleMutability, EnhancedNullability?
|
||||
// TODO (KT-64715): RawTypeAnnotation, FlexibleMutability, EnhancedNullability, RawType, FlexibleArrayElementVariance?
|
||||
val TYPE_ANNOTATIONS_TO_MERGE = listOf(
|
||||
FlexibleNullability.asSingleFqName(),
|
||||
)
|
||||
|
||||
+2
-2
@@ -88,8 +88,8 @@ FILE fqName:<root> fileName:/test.kt
|
||||
$receiver: CALL 'public final fun map <T, R> (transform: kotlin.Function1<T of kotlin.collections.map, R of kotlin.collections.map>): kotlin.collections.List<R of kotlin.collections.map> declared in kotlin.collections' type=kotlin.collections.List<kotlin.String> origin=null
|
||||
<T>: @[FlexibleNullability] kotlin.Annotation?
|
||||
<R>: kotlin.String
|
||||
$receiver: TYPE_OP type=kotlin.Array<out @[FlexibleNullability] kotlin.Annotation?> origin=IMPLICIT_NOTNULL typeOperand=kotlin.Array<out @[FlexibleNullability] kotlin.Annotation?>
|
||||
CALL 'public open fun getAnnotations (): @[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] kotlin.Annotation?>? declared in java.lang.reflect.Field' type=@[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] kotlin.Annotation?>? origin=GET_PROPERTY
|
||||
$receiver: TYPE_OP type=@[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] kotlin.Annotation?> origin=IMPLICIT_NOTNULL typeOperand=@[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] kotlin.Annotation?>
|
||||
CALL 'public open fun getAnnotations (): @[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] kotlin.Annotation?>? declared in java.lang.reflect.Field' type=@[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] kotlin.Annotation?>? origin=GET_PROPERTY
|
||||
$this: CALL 'public open fun getDeclaredField (p0: @[FlexibleNullability] kotlin.String?): @[FlexibleNullability] java.lang.reflect.Field? declared in java.lang.Class' type=@[FlexibleNullability] java.lang.reflect.Field? origin=null
|
||||
$this: CALL 'public final fun <get-java> <T> (): java.lang.Class<T of kotlin.jvm.<get-java>> declared in kotlin.jvm' type=java.lang.Class<<root>.Foo> origin=GET_PROPERTY
|
||||
<T>: <root>.Foo
|
||||
|
||||
+2
-2
@@ -247,8 +247,8 @@ FILE fqName:<root> fileName:/targetOnPrimaryCtorParameter.kt
|
||||
$receiver: CALL 'public final fun map <T, R> (transform: kotlin.Function1<T of kotlin.collections.map, R of kotlin.collections.map>): kotlin.collections.List<R of kotlin.collections.map> declared in kotlin.collections' type=kotlin.collections.List<kotlin.String> origin=null
|
||||
<T>: @[FlexibleNullability] kotlin.Annotation?
|
||||
<R>: kotlin.String
|
||||
$receiver: TYPE_OP type=kotlin.Array<out @[FlexibleNullability] kotlin.Annotation?> origin=IMPLICIT_NOTNULL typeOperand=kotlin.Array<out @[FlexibleNullability] kotlin.Annotation?>
|
||||
CALL 'public open fun getAnnotations (): @[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] kotlin.Annotation?>? declared in java.lang.reflect.Field' type=@[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] kotlin.Annotation?>? origin=GET_PROPERTY
|
||||
$receiver: TYPE_OP type=@[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] kotlin.Annotation?> origin=IMPLICIT_NOTNULL typeOperand=@[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] kotlin.Annotation?>
|
||||
CALL 'public open fun getAnnotations (): @[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] kotlin.Annotation?>? declared in java.lang.reflect.Field' type=@[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] kotlin.Annotation?>? origin=GET_PROPERTY
|
||||
$this: CALL 'public open fun getDeclaredField (p0: @[FlexibleNullability] kotlin.String?): @[FlexibleNullability] java.lang.reflect.Field? declared in java.lang.Class' type=@[FlexibleNullability] java.lang.reflect.Field? origin=null
|
||||
$this: CALL 'public final fun <get-java> <T> (): java.lang.Class<T of kotlin.jvm.<get-java>> declared in kotlin.jvm' type=java.lang.Class<<root>.Foo> origin=GET_PROPERTY
|
||||
<T>: <root>.Foo
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
// TARGET_BACKEND: JVM
|
||||
// FILE: J.java
|
||||
|
||||
interface J {
|
||||
String foo(String[] a);
|
||||
}
|
||||
|
||||
// FILE: 1.kt
|
||||
|
||||
class Inv : J {
|
||||
override fun foo(a: Array<String>): String = a[0]
|
||||
}
|
||||
|
||||
class Out : J {
|
||||
override fun foo(a: Array<out String>): String = a[0]
|
||||
}
|
||||
|
||||
class Vararg : J {
|
||||
override fun foo(vararg a: String): String = a[0]
|
||||
}
|
||||
|
||||
class InvNullableElement : J {
|
||||
override fun foo(a: Array<String?>): String = a[0] ?: "Fail"
|
||||
}
|
||||
|
||||
class InvNullableArray : J {
|
||||
override fun foo(a: Array<String>?): String = a?.get(0) ?: "Fail"
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
if (Inv().foo(arrayOf("OK")) != "OK") return "Fail Inv"
|
||||
if (Out().foo(arrayOf("OK")) != "OK") return "Fail Out"
|
||||
if (Vararg().foo("OK") != "OK") return "Fail Vararg"
|
||||
if (InvNullableElement().foo(arrayOf("OK")) != "OK") return "Fail InvNullableElement"
|
||||
if (InvNullableArray().foo(arrayOf("OK")) != "OK") return "Fail InvNullableArray"
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
// TARGET_BACKEND: JVM
|
||||
// FILE: J.java
|
||||
|
||||
import java.util.List;
|
||||
|
||||
// This is a bit more elaborate version of overrideWithArrayParameterType.kt, which also checks interaction of:
|
||||
// flexible nullability, flexible mutability, raw types, varargs.
|
||||
interface J {
|
||||
List<String>[] foo(List... a);
|
||||
}
|
||||
|
||||
// FILE: 1.kt
|
||||
|
||||
class C1 : J {
|
||||
override fun foo(vararg a: MutableList<Any?>?): Array<out MutableList<String>>? = null
|
||||
}
|
||||
class C2 : J {
|
||||
override fun foo(vararg a: List<Any?>): Array<MutableList<out String>>? = null
|
||||
}
|
||||
class C3 : J {
|
||||
override fun foo(vararg a: List<*>): Array<List<String>?>? = null
|
||||
}
|
||||
class C4 : J {
|
||||
override fun foo(vararg a: MutableList<out Any?>): Array<out List<String?>>? = null
|
||||
}
|
||||
class C5 : J {
|
||||
override fun foo(a: Array<List<Any?>>): Array<MutableList<String>>? = null
|
||||
}
|
||||
class C6 : J {
|
||||
override fun foo(a: Array<out MutableList<Any?>?>): Array<out MutableList<String>>? = null
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
C1().foo()
|
||||
C2().foo()
|
||||
C3().foo()
|
||||
C4().foo()
|
||||
C5().foo(emptyArray())
|
||||
C6().foo(emptyArray())
|
||||
return "OK"
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
// TARGET_BACKEND: JVM
|
||||
// FILE: J.java
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
interface J {
|
||||
String foo(@NotNull String[] a);
|
||||
}
|
||||
|
||||
// FILE: 1.kt
|
||||
|
||||
class Inv : J {
|
||||
override fun foo(a: Array<String>): String = a[0]
|
||||
}
|
||||
|
||||
class Out : J {
|
||||
override fun foo(a: Array<out String>): String = a[0]
|
||||
}
|
||||
|
||||
class Vararg : J {
|
||||
override fun foo(vararg a: String): String = a[0]
|
||||
}
|
||||
|
||||
class InvNullableElement : J {
|
||||
override fun foo(a: Array<String?>): String = a[0] ?: "Fail"
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
if (Inv().foo(arrayOf("OK")) != "OK") return "Fail Inv"
|
||||
if (Out().foo(arrayOf("OK")) != "OK") return "Fail Out"
|
||||
if (Vararg().foo("OK") != "OK") return "Fail Vararg"
|
||||
if (InvNullableElement().foo(arrayOf("OK")) != "OK") return "Fail InvNullableElement"
|
||||
return "OK"
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
// TARGET_BACKEND: JVM
|
||||
// FILE: J.java
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface J<T> {
|
||||
String foo(T t, List<T[]> list);
|
||||
}
|
||||
|
||||
// FILE: 1.kt
|
||||
|
||||
class A
|
||||
|
||||
class C : J<A> {
|
||||
override fun foo(a: A, list: List<Array<A>>?): String = "OK"
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val c: J<A> = C()
|
||||
return c.foo(A(), null)
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
// TARGET_BACKEND: JVM
|
||||
// FILE: J.java
|
||||
|
||||
interface J {
|
||||
String foo(String... a);
|
||||
}
|
||||
|
||||
// FILE: 1.kt
|
||||
|
||||
class Inv : J {
|
||||
override fun foo(a: Array<String>): String = a[0]
|
||||
}
|
||||
|
||||
class Out : J {
|
||||
override fun foo(a: Array<out String>): String = a[0]
|
||||
}
|
||||
|
||||
class Vararg : J {
|
||||
override fun foo(vararg a: String): String = a[0]
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
if (Inv().foo(arrayOf("OK")) != "OK") return "Fail Inv"
|
||||
if (Out().foo(arrayOf("OK")) != "OK") return "Fail Out"
|
||||
if (Vararg().foo("OK") != "OK") return "Fail Vararg"
|
||||
return "OK"
|
||||
}
|
||||
@@ -46,16 +46,16 @@ FILE fqName:<root> fileName:/ArrayListOverrides.kt
|
||||
overridden:
|
||||
public open fun clone (): @[EnhancedNullability] kotlin.Any declared in java.util.ArrayList
|
||||
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<kotlin.String>
|
||||
FUN FAKE_OVERRIDE name:toArray visibility:public modality:OPEN <> ($this:java.util.ArrayList<kotlin.String>) returnType:@[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] kotlin.Any?>? [fake_override]
|
||||
FUN FAKE_OVERRIDE name:toArray visibility:public modality:OPEN <> ($this:java.util.ArrayList<kotlin.String>) returnType:@[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] kotlin.Any?>? [fake_override]
|
||||
overridden:
|
||||
public open fun toArray (): @[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] kotlin.Any?>? declared in java.util.ArrayList
|
||||
public open fun toArray (): @[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] kotlin.Any?>? declared in java.util.ArrayList
|
||||
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<kotlin.String>
|
||||
FUN FAKE_OVERRIDE name:toArray visibility:public modality:OPEN <T> ($this:java.util.ArrayList<kotlin.String>, p0:@[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] T of <root>.A1.toArray?>?) returnType:@[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] T of <root>.A1.toArray?>? [fake_override]
|
||||
FUN FAKE_OVERRIDE name:toArray visibility:public modality:OPEN <T> ($this:java.util.ArrayList<kotlin.String>, p0:@[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] T of <root>.A1.toArray?>?) returnType:@[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] T of <root>.A1.toArray?>? [fake_override]
|
||||
overridden:
|
||||
public open fun toArray <T> (p0: @[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] T of java.util.ArrayList.toArray?>?): @[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] T of java.util.ArrayList.toArray?>? declared in java.util.ArrayList
|
||||
public open fun toArray <T> (p0: @[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] T of java.util.ArrayList.toArray?>?): @[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] T of java.util.ArrayList.toArray?>? declared in java.util.ArrayList
|
||||
TYPE_PARAMETER name:T index:0 variance: superTypes:[@[FlexibleNullability] kotlin.Any?] reified:false
|
||||
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<kotlin.String>
|
||||
VALUE_PARAMETER name:p0 index:0 type:@[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] T of <root>.A1.toArray?>?
|
||||
VALUE_PARAMETER name:p0 index:0 type:@[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] T of <root>.A1.toArray?>?
|
||||
FUN FAKE_OVERRIDE name:get visibility:public modality:OPEN <> ($this:java.util.ArrayList<kotlin.String>, p0:kotlin.Int) returnType:@[EnhancedNullability] kotlin.String [fake_override,operator]
|
||||
overridden:
|
||||
public open fun get (p0: kotlin.Int): @[EnhancedNullability] E of java.util.ArrayList declared in java.util.ArrayList
|
||||
@@ -243,16 +243,16 @@ FILE fqName:<root> fileName:/ArrayListOverrides.kt
|
||||
overridden:
|
||||
public open fun clone (): @[EnhancedNullability] kotlin.Any declared in java.util.ArrayList
|
||||
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<kotlin.String>
|
||||
FUN FAKE_OVERRIDE name:toArray visibility:public modality:OPEN <> ($this:java.util.ArrayList<kotlin.String>) returnType:@[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] kotlin.Any?>? [fake_override]
|
||||
FUN FAKE_OVERRIDE name:toArray visibility:public modality:OPEN <> ($this:java.util.ArrayList<kotlin.String>) returnType:@[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] kotlin.Any?>? [fake_override]
|
||||
overridden:
|
||||
public open fun toArray (): @[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] kotlin.Any?>? declared in java.util.ArrayList
|
||||
public open fun toArray (): @[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] kotlin.Any?>? declared in java.util.ArrayList
|
||||
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<kotlin.String>
|
||||
FUN FAKE_OVERRIDE name:toArray visibility:public modality:OPEN <T> ($this:java.util.ArrayList<kotlin.String>, p0:@[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] T of <root>.A2.toArray?>?) returnType:@[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] T of <root>.A2.toArray?>? [fake_override]
|
||||
FUN FAKE_OVERRIDE name:toArray visibility:public modality:OPEN <T> ($this:java.util.ArrayList<kotlin.String>, p0:@[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] T of <root>.A2.toArray?>?) returnType:@[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] T of <root>.A2.toArray?>? [fake_override]
|
||||
overridden:
|
||||
public open fun toArray <T> (p0: @[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] T of java.util.ArrayList.toArray?>?): @[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] T of java.util.ArrayList.toArray?>? declared in java.util.ArrayList
|
||||
public open fun toArray <T> (p0: @[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] T of java.util.ArrayList.toArray?>?): @[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] T of java.util.ArrayList.toArray?>? declared in java.util.ArrayList
|
||||
TYPE_PARAMETER name:T index:0 variance: superTypes:[@[FlexibleNullability] kotlin.Any?] reified:false
|
||||
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<kotlin.String>
|
||||
VALUE_PARAMETER name:p0 index:0 type:@[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] T of <root>.A2.toArray?>?
|
||||
VALUE_PARAMETER name:p0 index:0 type:@[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] T of <root>.A2.toArray?>?
|
||||
FUN FAKE_OVERRIDE name:get visibility:public modality:OPEN <> ($this:java.util.ArrayList<kotlin.String>, p0:kotlin.Int) returnType:@[EnhancedNullability] kotlin.String [fake_override,operator]
|
||||
overridden:
|
||||
public open fun get (p0: kotlin.Int): @[EnhancedNullability] E of java.util.ArrayList declared in java.util.ArrayList
|
||||
|
||||
+10
-10
@@ -252,16 +252,16 @@ FILE fqName:<root> fileName:/MultiList.kt
|
||||
overridden:
|
||||
public open fun <get-size> (): kotlin.Int declared in java.util.ArrayList
|
||||
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>
|
||||
FUN FAKE_OVERRIDE name:toArray visibility:public modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>) returnType:@[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] kotlin.Any?>? [fake_override]
|
||||
FUN FAKE_OVERRIDE name:toArray visibility:public modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>) returnType:@[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] kotlin.Any?>? [fake_override]
|
||||
overridden:
|
||||
public open fun toArray (): @[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] kotlin.Any?>? declared in java.util.ArrayList
|
||||
public open fun toArray (): @[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] kotlin.Any?>? declared in java.util.ArrayList
|
||||
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>
|
||||
FUN FAKE_OVERRIDE name:toArray visibility:public modality:OPEN <T> ($this:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>, p0:@[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] T of <root>.SomeList.toArray?>?) returnType:@[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] T of <root>.SomeList.toArray?>? [fake_override]
|
||||
FUN FAKE_OVERRIDE name:toArray visibility:public modality:OPEN <T> ($this:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>, p0:@[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] T of <root>.SomeList.toArray?>?) returnType:@[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] T of <root>.SomeList.toArray?>? [fake_override]
|
||||
overridden:
|
||||
public open fun toArray <T> (p0: @[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] T of java.util.ArrayList.toArray?>?): @[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] T of java.util.ArrayList.toArray?>? declared in java.util.ArrayList
|
||||
public open fun toArray <T> (p0: @[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] T of java.util.ArrayList.toArray?>?): @[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] T of java.util.ArrayList.toArray?>? declared in java.util.ArrayList
|
||||
TYPE_PARAMETER name:T index:0 variance: superTypes:[@[FlexibleNullability] kotlin.Any?] reified:false
|
||||
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>
|
||||
VALUE_PARAMETER name:p0 index:0 type:@[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] T of <root>.SomeList.toArray?>?
|
||||
VALUE_PARAMETER name:p0 index:0 type:@[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] T of <root>.SomeList.toArray?>?
|
||||
FUN FAKE_OVERRIDE name:add visibility:public modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>, p0:@[EnhancedNullability] <root>.Some<T of <root>.SomeList>) returnType:kotlin.Boolean [fake_override]
|
||||
overridden:
|
||||
public open fun add (p0: @[EnhancedNullability] E of java.util.ArrayList): kotlin.Boolean declared in java.util.ArrayList
|
||||
@@ -441,16 +441,16 @@ FILE fqName:<root> fileName:/MultiList.kt
|
||||
overridden:
|
||||
public open fun <get-size> (): kotlin.Int declared in <root>.SomeList
|
||||
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<<root>.Some<kotlin.String>>
|
||||
FUN FAKE_OVERRIDE name:toArray visibility:public modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<kotlin.String>>) returnType:@[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] kotlin.Any?>? [fake_override]
|
||||
FUN FAKE_OVERRIDE name:toArray visibility:public modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<kotlin.String>>) returnType:@[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] kotlin.Any?>? [fake_override]
|
||||
overridden:
|
||||
public open fun toArray (): @[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] kotlin.Any?>? declared in <root>.SomeList
|
||||
public open fun toArray (): @[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] kotlin.Any?>? declared in <root>.SomeList
|
||||
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<<root>.Some<kotlin.String>>
|
||||
FUN FAKE_OVERRIDE name:toArray visibility:public modality:OPEN <T> ($this:java.util.ArrayList<<root>.Some<kotlin.String>>, p0:@[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] T of <root>.FinalList.toArray?>?) returnType:@[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] T of <root>.FinalList.toArray?>? [fake_override]
|
||||
FUN FAKE_OVERRIDE name:toArray visibility:public modality:OPEN <T> ($this:java.util.ArrayList<<root>.Some<kotlin.String>>, p0:@[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] T of <root>.FinalList.toArray?>?) returnType:@[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] T of <root>.FinalList.toArray?>? [fake_override]
|
||||
overridden:
|
||||
public open fun toArray <T> (p0: @[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] T of <root>.SomeList.toArray?>?): @[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] T of <root>.SomeList.toArray?>? declared in <root>.SomeList
|
||||
public open fun toArray <T> (p0: @[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] T of <root>.SomeList.toArray?>?): @[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] T of <root>.SomeList.toArray?>? declared in <root>.SomeList
|
||||
TYPE_PARAMETER name:T index:0 variance: superTypes:[@[FlexibleNullability] kotlin.Any?] reified:false
|
||||
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<<root>.Some<kotlin.String>>
|
||||
VALUE_PARAMETER name:p0 index:0 type:@[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] T of <root>.FinalList.toArray?>?
|
||||
VALUE_PARAMETER name:p0 index:0 type:@[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] T of <root>.FinalList.toArray?>?
|
||||
FUN FAKE_OVERRIDE name:add visibility:public modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<kotlin.String>>, p0:@[EnhancedNullability] <root>.Some<kotlin.String>) returnType:kotlin.Boolean [fake_override]
|
||||
overridden:
|
||||
public open fun add (p0: @[EnhancedNullability] <root>.Some<T of <root>.SomeList>): kotlin.Boolean declared in <root>.SomeList
|
||||
|
||||
Vendored
+3
-3
@@ -36,18 +36,18 @@ FILE fqName:<root> fileName:/reflectFindAnnotationOnDefaultMethodParameter.kt
|
||||
<T>: <root>.box.<no name provided>
|
||||
$receiver: GET_VAR 'val impl: <root>.box.<no name provided> declared in <root>.box' type=<root>.box.<no name provided> origin=null
|
||||
p0: CONST String type=kotlin.String value="m"
|
||||
p1: VARARG type=@[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] java.lang.Class<*>?>? varargElementType=@[FlexibleNullability] java.lang.Class<*>?
|
||||
p1: VARARG type=@[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] java.lang.Class<*>?>? varargElementType=@[FlexibleNullability] java.lang.Class<*>?
|
||||
CALL 'public final fun <get-java> <T> (): java.lang.Class<T of kotlin.jvm.<get-java>> declared in kotlin.jvm' type=java.lang.Class<kotlin.String> origin=GET_PROPERTY
|
||||
<T>: kotlin.String
|
||||
$receiver: CLASS_REFERENCE 'CLASS IR_EXTERNAL_DECLARATION_STUB CLASS name:String modality:FINAL visibility:public superTypes:[kotlin.Comparable<kotlin.String>; kotlin.CharSequence; java.io.Serializable]' type=kotlin.reflect.KClass<kotlin.String>
|
||||
VAR name:parameter type:@[FlexibleNullability] java.lang.reflect.Parameter? [val]
|
||||
CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=@[FlexibleNullability] java.lang.reflect.Parameter? origin=null
|
||||
$this: CALL 'public open fun getParameters (): @[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] java.lang.reflect.Parameter?>? declared in java.lang.reflect.Method' type=@[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] java.lang.reflect.Parameter?>? origin=GET_PROPERTY
|
||||
$this: CALL 'public open fun getParameters (): @[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] java.lang.reflect.Parameter?>? declared in java.lang.reflect.Method' type=@[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] java.lang.reflect.Parameter?>? origin=GET_PROPERTY
|
||||
$this: GET_VAR 'val method: @[FlexibleNullability] java.lang.reflect.Method? declared in <root>.box' type=@[FlexibleNullability] java.lang.reflect.Method? origin=null
|
||||
index: CONST Int type=kotlin.Int value=0
|
||||
VAR name:size type:kotlin.Int [val]
|
||||
CALL 'public final fun <get-size> (): kotlin.Int declared in kotlin.Array' type=kotlin.Int origin=GET_PROPERTY
|
||||
$this: CALL 'public open fun getAnnotations (): @[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] kotlin.Annotation?>? declared in java.lang.reflect.Parameter' type=@[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] kotlin.Annotation?>? origin=GET_PROPERTY
|
||||
$this: CALL 'public open fun getAnnotations (): @[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] kotlin.Annotation?>? declared in java.lang.reflect.Parameter' type=@[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] kotlin.Annotation?>? origin=GET_PROPERTY
|
||||
$this: GET_VAR 'val parameter: @[FlexibleNullability] java.lang.reflect.Parameter? declared in <root>.box' type=@[FlexibleNullability] java.lang.reflect.Parameter? origin=null
|
||||
WHEN type=kotlin.Unit origin=IF
|
||||
BRANCH
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
FILE fqName:<root> fileName:/throwableStackTrace.kt
|
||||
FUN name:foo visibility:public modality:FINAL <> (t:kotlin.Throwable) returnType:kotlin.Unit
|
||||
VALUE_PARAMETER name:t index:0 type:kotlin.Throwable
|
||||
BLOCK_BODY
|
||||
CALL 'public open fun setStackTrace (p0: @[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] java.lang.StackTraceElement?>?): kotlin.Unit declared in kotlin.Throwable' type=kotlin.Unit origin=EQ
|
||||
$this: GET_VAR 't: kotlin.Throwable declared in <root>.foo' type=kotlin.Throwable origin=null
|
||||
p0: CALL 'public open fun getStackTrace (): @[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] java.lang.StackTraceElement?>? declared in kotlin.Throwable' type=@[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] java.lang.StackTraceElement?>? origin=GET_PROPERTY
|
||||
$this: GET_VAR 't: kotlin.Throwable declared in <root>.foo' type=kotlin.Throwable origin=null
|
||||
@@ -0,0 +1,3 @@
|
||||
fun foo(t: Throwable) {
|
||||
t.setStackTrace(p0 = t.getStackTrace())
|
||||
}
|
||||
@@ -1,8 +1,7 @@
|
||||
// TARGET_BACKEND: JVM
|
||||
// FIR_IDENTICAL
|
||||
// WITH_STDLIB
|
||||
// FULL_JDK
|
||||
|
||||
fun foo(t: Throwable) {
|
||||
t.stackTrace = t.stackTrace
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
FILE fqName:<root> fileName:/jdkClassSyntheticProperty.kt
|
||||
PROPERTY name:test visibility:public modality:FINAL [val]
|
||||
FUN name:<get-test> visibility:public modality:FINAL <> ($receiver:java.lang.Class<*>) returnType:@[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] java.lang.reflect.Field?>?
|
||||
FUN name:<get-test> visibility:public modality:FINAL <> ($receiver:java.lang.Class<*>) returnType:@[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] java.lang.reflect.Field?>?
|
||||
correspondingProperty: PROPERTY name:test visibility:public modality:FINAL [val]
|
||||
$receiver: VALUE_PARAMETER name:<this> type:java.lang.Class<*>
|
||||
BLOCK_BODY
|
||||
RETURN type=kotlin.Nothing from='public final fun <get-test> (): @[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] java.lang.reflect.Field?>? declared in <root>'
|
||||
CALL 'public open fun getDeclaredFields (): @[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] java.lang.reflect.Field?>? declared in java.lang.Class' type=@[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] java.lang.reflect.Field?>? origin=GET_PROPERTY
|
||||
RETURN type=kotlin.Nothing from='public final fun <get-test> (): @[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] java.lang.reflect.Field?>? declared in <root>'
|
||||
CALL 'public open fun getDeclaredFields (): @[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] java.lang.reflect.Field?>? declared in java.lang.Class' type=@[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] java.lang.reflect.Field?>? origin=GET_PROPERTY
|
||||
$this: GET_VAR '<this>: java.lang.Class<*> declared in <root>.<get-test>' type=java.lang.Class<*> origin=null
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
val Class<*>.test: @FlexibleNullability Array<out @FlexibleNullability Field?>?
|
||||
get(): @FlexibleNullability Array<out @FlexibleNullability Field?>? {
|
||||
val Class<*>.test: @FlexibleNullability @FlexibleArrayElementVariance Array<out @FlexibleNullability Field?>?
|
||||
get(): @FlexibleNullability @FlexibleArrayElementVariance Array<out @FlexibleNullability Field?>? {
|
||||
return <this>.getDeclaredFields()
|
||||
}
|
||||
|
||||
+2
-2
@@ -57,7 +57,7 @@ FILE fqName:<root> fileName:/enhancedNullabilityInForLoop.kt
|
||||
BLOCK type=kotlin.Unit origin=FOR_LOOP
|
||||
VAR FOR_LOOP_ITERATOR name:tmp_3 type:kotlin.collections.Iterator<@[EnhancedNullability] <root>.P> [val]
|
||||
CALL 'public final fun iterator (): kotlin.collections.Iterator<T of kotlin.Array> declared in kotlin.Array' type=kotlin.collections.Iterator<@[EnhancedNullability] <root>.P> origin=FOR_LOOP_ITERATOR
|
||||
$this: CALL 'public open fun arrayOfNotNull (): @[EnhancedNullability] kotlin.Array<out @[EnhancedNullability] <root>.P> declared in <root>.J' type=@[EnhancedNullability] kotlin.Array<out @[EnhancedNullability] <root>.P> origin=null
|
||||
$this: CALL 'public open fun arrayOfNotNull (): @[EnhancedNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[EnhancedNullability] <root>.P> declared in <root>.J' type=@[EnhancedNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[EnhancedNullability] <root>.P> origin=null
|
||||
$this: GET_VAR 'j: <root>.J declared in <root>.testForInArrayUnused' type=<root>.J origin=null
|
||||
WHILE label=null origin=FOR_LOOP_INNER_WHILE
|
||||
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
||||
@@ -93,7 +93,7 @@ FILE fqName:<root> fileName:/enhancedNullabilityInForLoop.kt
|
||||
BLOCK type=kotlin.Unit origin=FOR_LOOP
|
||||
VAR FOR_LOOP_ITERATOR name:tmp_5 type:kotlin.collections.Iterator<@[EnhancedNullability] <root>.P> [val]
|
||||
CALL 'public final fun iterator (): kotlin.collections.Iterator<T of kotlin.Array> declared in kotlin.Array' type=kotlin.collections.Iterator<@[EnhancedNullability] <root>.P> origin=FOR_LOOP_ITERATOR
|
||||
$this: CALL 'public open fun arrayOfNotNull (): @[EnhancedNullability] kotlin.Array<out @[EnhancedNullability] <root>.P> declared in <root>.J' type=@[EnhancedNullability] kotlin.Array<out @[EnhancedNullability] <root>.P> origin=null
|
||||
$this: CALL 'public open fun arrayOfNotNull (): @[EnhancedNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[EnhancedNullability] <root>.P> declared in <root>.J' type=@[EnhancedNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[EnhancedNullability] <root>.P> origin=null
|
||||
$this: GET_VAR 'j: <root>.J declared in <root>.testForInArrayUse' type=<root>.J origin=null
|
||||
WHILE label=null origin=FOR_LOOP_INNER_WHILE
|
||||
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
||||
|
||||
+30
@@ -30675,6 +30675,36 @@ public class JvmAbiConsistencyTestBoxGenerated extends AbstractJvmAbiConsistency
|
||||
runTest("compiler/testData/codegen/box/javaInterop/notFoundClasses.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithArrayParameterType.kt")
|
||||
public void testOverrideWithArrayParameterType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithArrayParameterType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithArrayParameterType2.kt")
|
||||
public void testOverrideWithArrayParameterType2() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithArrayParameterType2.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithArrayParameterTypeNotNull.kt")
|
||||
public void testOverrideWithArrayParameterTypeNotNull() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithArrayParameterTypeNotNull.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithGenericArrayParameterType.kt")
|
||||
public void testOverrideWithGenericArrayParameterType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithGenericArrayParameterType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithVarargParameterType.kt")
|
||||
public void testOverrideWithVarargParameterType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithVarargParameterType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("protectedField.kt")
|
||||
public void testProtectedField() throws Exception {
|
||||
|
||||
+30
@@ -28965,6 +28965,36 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/notFoundClasses.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithArrayParameterType.kt")
|
||||
public void testOverrideWithArrayParameterType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithArrayParameterType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithArrayParameterType2.kt")
|
||||
public void testOverrideWithArrayParameterType2() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithArrayParameterType2.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithArrayParameterTypeNotNull.kt")
|
||||
public void testOverrideWithArrayParameterTypeNotNull() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithArrayParameterTypeNotNull.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithGenericArrayParameterType.kt")
|
||||
public void testOverrideWithGenericArrayParameterType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithGenericArrayParameterType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithVarargParameterType.kt")
|
||||
public void testOverrideWithVarargParameterType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithVarargParameterType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("protectedField.kt")
|
||||
public void testProtectedField() throws Exception {
|
||||
|
||||
+30
@@ -30675,6 +30675,36 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
||||
runTest("compiler/testData/codegen/box/javaInterop/notFoundClasses.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithArrayParameterType.kt")
|
||||
public void testOverrideWithArrayParameterType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithArrayParameterType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithArrayParameterType2.kt")
|
||||
public void testOverrideWithArrayParameterType2() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithArrayParameterType2.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithArrayParameterTypeNotNull.kt")
|
||||
public void testOverrideWithArrayParameterTypeNotNull() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithArrayParameterTypeNotNull.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithGenericArrayParameterType.kt")
|
||||
public void testOverrideWithGenericArrayParameterType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithGenericArrayParameterType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithVarargParameterType.kt")
|
||||
public void testOverrideWithVarargParameterType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithVarargParameterType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("protectedField.kt")
|
||||
public void testProtectedField() throws Exception {
|
||||
|
||||
+30
@@ -30675,6 +30675,36 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack
|
||||
runTest("compiler/testData/codegen/box/javaInterop/notFoundClasses.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithArrayParameterType.kt")
|
||||
public void testOverrideWithArrayParameterType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithArrayParameterType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithArrayParameterType2.kt")
|
||||
public void testOverrideWithArrayParameterType2() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithArrayParameterType2.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithArrayParameterTypeNotNull.kt")
|
||||
public void testOverrideWithArrayParameterTypeNotNull() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithArrayParameterTypeNotNull.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithGenericArrayParameterType.kt")
|
||||
public void testOverrideWithGenericArrayParameterType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithGenericArrayParameterType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("overrideWithVarargParameterType.kt")
|
||||
public void testOverrideWithVarargParameterType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithVarargParameterType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("protectedField.kt")
|
||||
public void testProtectedField() throws Exception {
|
||||
|
||||
+1
-1
@@ -6,7 +6,6 @@
|
||||
package org.jetbrains.kotlin.test.backend.handlers
|
||||
|
||||
import com.intellij.rt.execution.junit.FileComparisonFailure
|
||||
import org.jetbrains.kotlin.ir.util.parents
|
||||
import org.jetbrains.kotlin.backend.common.serialization.signature.PublicIdSignatureComputer
|
||||
import org.jetbrains.kotlin.backend.jvm.JvmSymbols
|
||||
import org.jetbrains.kotlin.backend.jvm.ir.hasPlatformDependent
|
||||
@@ -349,6 +348,7 @@ private val EXCLUDED_ANNOTATIONS = setOf(
|
||||
StandardNames.FqNames.parameterName,
|
||||
JvmSymbols.FLEXIBLE_MUTABILITY_ANNOTATION_FQ_NAME,
|
||||
JvmSymbols.FLEXIBLE_NULLABILITY_ANNOTATION_FQ_NAME,
|
||||
JvmSymbols.FLEXIBLE_VARIANCE_ANNOTATION_FQ_NAME,
|
||||
JvmSymbols.RAW_TYPE_ANNOTATION_FQ_NAME,
|
||||
StandardClassIds.Annotations.ContextFunctionTypeParams.asSingleFqName(),
|
||||
JvmAnnotationNames.JETBRAINS_NOT_NULL_ANNOTATION,
|
||||
|
||||
+25
@@ -25961,6 +25961,31 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
||||
runTest("compiler/testData/codegen/box/javaInterop/notFoundClasses.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("overrideWithArrayParameterType.kt")
|
||||
public void testOverrideWithArrayParameterType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithArrayParameterType.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("overrideWithArrayParameterType2.kt")
|
||||
public void testOverrideWithArrayParameterType2() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithArrayParameterType2.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("overrideWithArrayParameterTypeNotNull.kt")
|
||||
public void testOverrideWithArrayParameterTypeNotNull() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithArrayParameterTypeNotNull.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("overrideWithGenericArrayParameterType.kt")
|
||||
public void testOverrideWithGenericArrayParameterType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithGenericArrayParameterType.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("overrideWithVarargParameterType.kt")
|
||||
public void testOverrideWithVarargParameterType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/overrideWithVarargParameterType.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("protectedField.kt")
|
||||
public void testProtectedField() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/javaInterop/protectedField.kt");
|
||||
|
||||
@@ -175,6 +175,7 @@ object StandardClassIds {
|
||||
val RawTypeAnnotation = "RawType".internalIrId()
|
||||
val FlexibleNullability = "FlexibleNullability".internalIrId()
|
||||
val FlexibleMutability = "FlexibleMutability".internalIrId()
|
||||
val FlexibleArrayElementVariance = "FlexibleArrayElementVariance".internalIrId()
|
||||
val EnhancedNullability = "EnhancedNullability".jvmInternalId()
|
||||
|
||||
val FunctionN = "FunctionN".jvmFunctionsId()
|
||||
|
||||
+1
-1
@@ -227,7 +227,7 @@ FILE fqName:<root> fileName:/main.kt
|
||||
VAR name:derived type:@[FlexibleNullability] <root>.Derived? [val]
|
||||
CALL 'public open fun newInstance (vararg p0: @[FlexibleNullability] kotlin.Any?): @[FlexibleNullability] T of java.lang.reflect.Constructor? declared in java.lang.reflect.Constructor' type=@[FlexibleNullability] <root>.Derived? origin=null
|
||||
$this: GET_VAR 'val constructor: java.lang.reflect.Constructor<<root>.Derived> declared in <root>.box' type=java.lang.reflect.Constructor<<root>.Derived> origin=null
|
||||
p0: VARARG type=@[FlexibleNullability] kotlin.Array<out @[FlexibleNullability] kotlin.Any?>? varargElementType=@[FlexibleNullability] kotlin.Any?
|
||||
p0: VARARG type=@[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] kotlin.Any?>? varargElementType=@[FlexibleNullability] kotlin.Any?
|
||||
CONSTRUCTOR_CALL 'public constructor <init> (s: kotlin.String) declared in <root>.A' type=<root>.A origin=null
|
||||
s: CONST String type=kotlin.String value="a"
|
||||
CONSTRUCTOR_CALL 'public constructor <init> (s: kotlin.String) declared in <root>.B' type=<root>.B origin=null
|
||||
|
||||
Reference in New Issue
Block a user