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
@@ -607,3 +607,9 @@ internal fun <T> IrConst<T>.shallowCopy() = IrConstImpl(
kind, kind,
value 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.IrClassSymbol
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
import org.jetbrains.kotlin.ir.types.* 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.isVararg
import org.jetbrains.kotlin.ir.util.parentAsClass import org.jetbrains.kotlin.ir.util.parentAsClass
import org.jetbrains.kotlin.ir.util.render 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 isRealExpect = isRealExpect or declaration.isExpect
val container = declaration.correspondingPropertySymbol?.owner ?: declaration 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) 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.symbols.IrFileSymbol
import org.jetbrains.kotlin.ir.util.IdSignature import org.jetbrains.kotlin.ir.util.IdSignature
import org.jetbrains.kotlin.ir.util.KotlinMangler 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.util.render
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
import org.jetbrains.kotlin.ir.visitors.acceptVoid import org.jetbrains.kotlin.ir.visitors.acceptVoid
@@ -79,7 +80,9 @@ class PublicIdSignatureComputer(val mangler: KotlinMangler.IrMangler) : IdSignat
private fun collectParents(declaration: IrDeclarationWithName) { private fun collectParents(declaration: IrDeclarationWithName) {
declaration.parent.acceptVoid(this) 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) { private fun setDescription(declaration: IrDeclaration) {
@@ -190,10 +193,6 @@ class PublicIdSignatureComputer(val mangler: KotlinMangler.IrMangler) : IdSignat
hashId = declaration.hashId() hashId = declaration.hashId()
} }
} }
override fun visitField(declaration: IrField) {
collectFqNames(declaration)
}
} }
} }