JVM_IR: deal with facade classes when computing signature

This commit is contained in:
Georgy Bronnikov
2021-03-23 18:39:59 +03:00
committed by TeamCityServer
parent 97d3eda23c
commit 7b52a8c07d
3 changed files with 14 additions and 7 deletions
@@ -606,4 +606,10 @@ internal fun <T> IrConst<T>.shallowCopy() = IrConstImpl(
type,
kind,
value
)
)
val IrDeclarationParent.isFacadeClass: Boolean
get() = this is IrClass &&
(origin == IrDeclarationOrigin.JVM_MULTIFILE_CLASS ||
origin == IrDeclarationOrigin.FILE_CLASS ||
origin == IrDeclarationOrigin.SYNTHETIC_FILE_CLASS)
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
import org.jetbrains.kotlin.ir.types.*
import org.jetbrains.kotlin.ir.util.isFacadeClass
import org.jetbrains.kotlin.ir.util.isVararg
import org.jetbrains.kotlin.ir.util.parentAsClass
import org.jetbrains.kotlin.ir.util.render
@@ -293,7 +294,8 @@ abstract class IrMangleComputer(protected val builder: StringBuilder, private va
isRealExpect = isRealExpect or declaration.isExpect
val container = declaration.correspondingPropertySymbol?.owner ?: declaration
val isStatic = declaration.dispatchReceiverParameter == null && container.parent !is IrPackageFragment
val isStatic = declaration.dispatchReceiverParameter == null &&
(container.parent !is IrPackageFragment && !container.parent.isFacadeClass)
declaration.mangleFunction(false, isStatic, container)
}
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.ir.overrides.isOverridableProperty
import org.jetbrains.kotlin.ir.symbols.IrFileSymbol
import org.jetbrains.kotlin.ir.util.IdSignature
import org.jetbrains.kotlin.ir.util.KotlinMangler
import org.jetbrains.kotlin.ir.util.isFacadeClass
import org.jetbrains.kotlin.ir.util.render
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
import org.jetbrains.kotlin.ir.visitors.acceptVoid
@@ -79,7 +80,9 @@ class PublicIdSignatureComputer(val mangler: KotlinMangler.IrMangler) : IdSignat
private fun collectParents(declaration: IrDeclarationWithName) {
declaration.parent.acceptVoid(this)
classFqnSegments.add(declaration.name.asString())
if (declaration !is IrClass || !declaration.isFacadeClass) {
classFqnSegments.add(declaration.name.asString())
}
}
private fun setDescription(declaration: IrDeclaration) {
@@ -190,10 +193,6 @@ class PublicIdSignatureComputer(val mangler: KotlinMangler.IrMangler) : IdSignat
hashId = declaration.hashId()
}
}
override fun visitField(declaration: IrField) {
collectFqNames(declaration)
}
}
}