diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/ManglerChecker.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/ManglerChecker.kt index d37b196f889..10b1f44ec73 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/ManglerChecker.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/mangle/ManglerChecker.kt @@ -5,14 +5,15 @@ package org.jetbrains.kotlin.backend.common.serialization.mangle +import org.jetbrains.kotlin.descriptors.DescriptorVisibilities import org.jetbrains.kotlin.ir.IrElement -import org.jetbrains.kotlin.ir.declarations.IrDeclaration -import org.jetbrains.kotlin.ir.declarations.IrErrorDeclaration -import org.jetbrains.kotlin.ir.declarations.IrDeclarationBase +import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.util.KotlinMangler import org.jetbrains.kotlin.ir.util.render +import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid +import org.jetbrains.kotlin.name.SpecialNames class ManglerChecker(vararg _manglers: KotlinMangler) : IrElementVisitorVoid { @@ -22,10 +23,43 @@ class ManglerChecker(vararg _manglers: KotlinMangler) : IrElement element.acceptChildrenVoid(this) } - private fun KotlinMangler.isExportCheck(declaration: IrDeclaration) = declaration.isExported() - private fun KotlinMangler.stringMangle(declaration: IrDeclaration) = declaration.mangleString - private fun KotlinMangler.signatureMangle(declaration: IrDeclaration) = declaration.signatureString - private fun KotlinMangler.fqnMangle(declaration: IrDeclaration) = declaration.fqnString + private val skipper = object : IrElementVisitor { + override fun visitElement(element: IrElement, data: Nothing?): Boolean { + error("unexpected element: ${element.render()}") + } + + override fun visitDeclaration(declaration: IrDeclarationBase, data: Nothing?): Boolean { + if (!declaration.symbol.hasDescriptor) return true + + if (declaration.parent is IrPackageFragment) { + val vis = declaration as IrDeclarationWithVisibility + if (vis.visibility == DescriptorVisibilities.PRIVATE) return true + else return false + } + + return declaration.parent.accept(this, data) + } + override fun visitAnonymousInitializer(declaration: IrAnonymousInitializer, data: Nothing?): Boolean = true + override fun visitValueParameter(declaration: IrValueParameter, data: Nothing?): Boolean = true + override fun visitVariable(declaration: IrVariable, data: Nothing?): Boolean = true + override fun visitErrorDeclaration(declaration: IrErrorDeclaration, data: Nothing?): Boolean = true + override fun visitLocalDelegatedProperty(declaration: IrLocalDelegatedProperty, data: Nothing?): Boolean = true + override fun visitProperty(declaration: IrProperty, data: Nothing?): Boolean = true + override fun visitClass(declaration: IrClass, data: Nothing?): Boolean = + declaration.name == SpecialNames.NO_NAME_PROVIDED || super.visitClass(declaration, data) + } + + private fun IrDeclaration.shouldBeSkipped(): Boolean = accept(skipper, null) + private fun KotlinMangler.isExportCheck(declaration: IrDeclaration) = + !declaration.shouldBeSkipped() && declaration.isExported(false) + private fun KotlinMangler.stringMangle(declaration: IrDeclaration) = + declaration.mangleString() + + private fun KotlinMangler.signatureMangle(declaration: IrDeclaration) = + declaration.signatureString() + + private fun KotlinMangler.fqnMangle(declaration: IrDeclaration) = + declaration.fqnString() private fun Iterable.checkAllEqual(init: R, op: T.() -> R, onError: (T, R, T, R) -> Unit): R { var prev: T? = null