From 1ac753602e4c047df23f370f70bb8f8e7e7f492c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steven=20Sch=C3=A4fer?= Date: Mon, 4 Nov 2019 13:01:28 +0100 Subject: [PATCH] JVM IR: Avoid getTopLevelClass in CollectionStubMethodLowering --- .../src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt | 6 ++++++ .../backend/jvm/lower/CollectionStubMethodLowering.kt | 4 +--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt index e8136f0fe99..7c2a0886028 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt @@ -67,6 +67,12 @@ class JvmSymbols( override val ThrowTypeCastException: IrFunctionSymbol = typeCastExceptionClass.constructors.single() + val unsupportedOperationExceptionClass: IrClassSymbol = createClass(FqName("java.lang.UnsupportedOperationException")) { klass -> + klass.addConstructor().apply { + addValueParameter("message", irBuiltIns.stringType.makeNullable()) + } + } + private fun createPackage(fqName: FqName): IrPackageFragment = IrExternalPackageFragmentImpl(IrExternalPackageFragmentSymbolImpl(EmptyPackageFragmentDescriptor(context.state.module, fqName))) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/CollectionStubMethodLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/CollectionStubMethodLowering.kt index 30757c4bba7..17fa6632f09 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/CollectionStubMethodLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/CollectionStubMethodLowering.kt @@ -27,7 +27,6 @@ import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.util.* -import org.jetbrains.kotlin.name.FqName internal val collectionStubMethodLowering = makeIrFilePhase( ::CollectionStubMethodLowering, @@ -86,12 +85,11 @@ private class CollectionStubMethodLowering(val context: JvmBackendContext) : Cla for (parameter in function.valueParameters) { valueParameters.add(parameter.copyWithSubstitution(this, substitutionMap)) } - val exception = context.getTopLevelClass(FqName("java.lang.UnsupportedOperationException")) // Function body consist only of throwing UnsupportedOperationException statement body = context.createIrBuilder(function.symbol).irBlockBody { +irThrow( irCall( - exception.owner.constructors.single { + this@CollectionStubMethodLowering.context.ir.symbols.unsupportedOperationExceptionClass.owner.constructors.single { it.valueParameters.size == 1 && it.valueParameters.single().type.isNullableString() } ).apply {