[IR] Supported top level local classes in names inventor
Such classes might appear after local objects extraction from inline bodies
This commit is contained in:
+11
@@ -14,10 +14,12 @@ import org.jetbrains.kotlin.ir.IrElement
|
|||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.*
|
import org.jetbrains.kotlin.ir.expressions.*
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
|
||||||
|
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||||
import org.jetbrains.kotlin.ir.util.isAnonymousObject
|
import org.jetbrains.kotlin.ir.util.isAnonymousObject
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.name.NameUtils
|
import org.jetbrains.kotlin.name.NameUtils
|
||||||
|
import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly
|
||||||
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toUpperCaseAsciiOnly
|
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toUpperCaseAsciiOnly
|
||||||
import kotlin.collections.set
|
import kotlin.collections.set
|
||||||
|
|
||||||
@@ -67,6 +69,15 @@ abstract class InventNamesForLocalClasses(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitClass(declaration: IrClass, data: Data) {
|
override fun visitClass(declaration: IrClass, data: Data) {
|
||||||
|
val parent = declaration.parent
|
||||||
|
val isLocal = parent is IrFile && declaration.isAnonymousObject
|
||||||
|
if (!isLocal) return processClass(declaration, data)
|
||||||
|
|
||||||
|
val enclosingName = (parent as IrFile).name.removeSuffix(".kt").plus("Kt").capitalizeAsciiOnly()
|
||||||
|
processClass(declaration, data.copy(enclosingName = enclosingName, isLocal = true))
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun processClass(declaration: IrClass, data: Data) {
|
||||||
if (!data.isLocal) {
|
if (!data.isLocal) {
|
||||||
// This is not a local class, so we need not invent a name for it, the type mapper will correctly compute it
|
// This is not a local class, so we need not invent a name for it, the type mapper will correctly compute it
|
||||||
// by navigating through its containers.
|
// by navigating through its containers.
|
||||||
|
|||||||
Reference in New Issue
Block a user