Create internalName extension method that returns fqName as jvm internal

This commit is contained in:
Ivan Kylchik
2020-06-22 20:53:30 +03:00
parent ddd03373cc
commit 8044b47984
4 changed files with 19 additions and 16 deletions
@@ -216,4 +216,17 @@ internal fun IrType.isTypeParameter() = classifierOrNull is IrTypeParameterSymbo
internal fun IrType.isInterface() = classOrNull?.owner?.kind == ClassKind.INTERFACE
internal fun IrType.isThrowable() = this.getClass()?.fqNameWhenAvailable?.asString() == "kotlin.Throwable"
internal fun IrType.isThrowable() = this.getClass()?.fqNameWhenAvailable?.asString() == "kotlin.Throwable"
fun IrClass.internalName(): String {
val internalName = StringBuilder(this.name.asString())
generateSequence(this as? IrDeclarationParent) { (it as? IrDeclaration)?.parent }
.drop(1)
.forEach {
when (it) {
is IrClass -> internalName.insert(0, it.name.asString() + "$")
is IrPackageFragment -> it.fqName.asString().takeIf { it.isNotEmpty() }?.let { internalName.insert(0, "$it.") }
}
}
return internalName.toString()
}
@@ -16,6 +16,7 @@
package org.jetbrains.kotlin.ir.interpreter.builtins
import org.jetbrains.kotlin.ir.interpreter.internalName
import org.jetbrains.kotlin.ir.interpreter.state.*
/** This file is generated by org.jetbrains.kotlin.backend.common.interpreter.builtins.GenerateBuiltInsMap.generateMap(). DO NOT MODIFY MANUALLY */
@@ -471,7 +472,7 @@ val ternaryFunctions = mapOf<CompileTimeFunction, Function3<Any?, Any?, Any?, An
private fun Any.defaultToString(): String {
return when (this) {
is Lambda -> this.toString()
is State -> "${this.irClass.name}@" + System.identityHashCode(this).toString(16).padStart(8, '0')
is State -> "${this.irClass.internalName()}@" + System.identityHashCode(this).toString(16).padStart(8, '0')
else -> this.toString().replaceAfter("@", System.identityHashCode(this).toString(16).padStart(8, '0'))
}
}
@@ -138,22 +138,10 @@ internal class Wrapper(val value: Any, override val irClass: IrClass) : Complex(
owner.hasAnnotation(evaluateIntrinsicAnnotation) -> Class.forName(owner!!.getEvaluateIntrinsicValue())
fqName == null -> Any::class.java // null if this.isTypeParameter()
else -> Class.forName(fqName.replaceDotWithDollarForInnerClasses())
else -> Class.forName(owner.internalName())
}
}
private fun String.replaceDotWithDollarForInnerClasses(): String? {
// TODO come up with something better
val names = this.split(".")
val result = StringBuilder()
for (i in 0 until (names.size - 1)) {
result.append(names[i])
if (names[i][0].isUpperCase() && names[i + 1][0].isUpperCase()) result.append("$") else result.append(".")
}
result.append(names.last())
return result.toString()
}
private fun IrFunction.getOriginalOverriddenSymbols(): MutableList<IrFunctionSymbol> {
val overriddenSymbols = mutableListOf<IrFunctionSymbol>()
if (this is IrFunctionImpl) {
+2 -1
View File
@@ -26,6 +26,7 @@ fun generateMap(irBuiltIns: IrBuiltIns): String {
p.println(File("license/COPYRIGHT.txt").readText())
p.println("package org.jetbrains.kotlin.ir.interpreter.builtins")
p.println()
p.println("import org.jetbrains.kotlin.ir.interpreter.internalName")
p.println("import org.jetbrains.kotlin.ir.interpreter.state.*")
p.println()
p.println("/** This file is generated by org.jetbrains.kotlin.backend.common.interpreter.builtins.GenerateBuiltInsMap.generateMap(). DO NOT MODIFY MANUALLY */")
@@ -58,7 +59,7 @@ fun generateMap(irBuiltIns: IrBuiltIns): String {
private fun Any.defaultToString(): String {
return when (this) {
is Lambda -> this.toString()
is State -> "${'$'}{this.irClass.name}@" + System.identityHashCode(this).toString(16).padStart(8, '0')
is State -> "${'$'}{this.irClass.internalName()}@" + System.identityHashCode(this).toString(16).padStart(8, '0')
else -> this.toString().replaceAfter("@", System.identityHashCode(this).toString(16).padStart(8, '0'))
}
}