[FIR2IR] Don't compose signatures for private declarations

This commit is contained in:
Mikhail Glukhikh
2020-06-26 17:37:03 +03:00
parent 19d115778b
commit a6234eb261
2 changed files with 17 additions and 3 deletions
@@ -28,6 +28,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrEnumConstructorCallImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrExpressionBodyImpl
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.symbols.IrEnumEntrySymbol
import org.jetbrains.kotlin.ir.symbols.IrTypeAliasSymbol
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl
@@ -170,14 +171,22 @@ class Fir2IrClassifierStorage(
return irClass
}
private fun declareIrTypeAlias(signature: IdSignature?, factory: (IrTypeAliasSymbol) -> IrTypeAlias): IrTypeAlias {
if (signature == null) {
val descriptor = WrappedTypeAliasDescriptor()
return symbolTable.declareTypeAlias(descriptor, factory).apply { descriptor.bind(this) }
}
return symbolTable.declareTypeAlias(signature, { Fir2IrTypeAliasSymbol(signature) }, factory)
}
fun registerTypeAlias(
typeAlias: FirTypeAlias,
parent: IrFile
): IrTypeAlias {
val signature = signatureComposer.composeSignature(typeAlias)!!
val signature = signatureComposer.composeSignature(typeAlias)
preCacheTypeParameters(typeAlias)
return typeAlias.convertWithOffsets { startOffset, endOffset ->
symbolTable.declareTypeAlias(signature, { Fir2IrTypeAliasSymbol(signature) }) { symbol ->
declareIrTypeAlias(signature) { symbol ->
IrTypeAliasImpl(
startOffset, endOffset, symbol,
typeAlias.name, typeAlias.visibility,
@@ -63,7 +63,12 @@ class FirBasedSignatureComposer(private val mangler: FirMangler) : Fir2IrSignatu
override fun composeSignature(declaration: FirDeclaration): IdSignature? {
if (declaration is FirAnonymousObject || declaration is FirAnonymousFunction) return null
if (declaration is FirMemberDeclaration && declaration.effectiveVisibility == FirEffectiveVisibilityImpl.Local) return null
if (declaration is FirMemberDeclaration) {
val effectiveVisibility = declaration.effectiveVisibility
if (effectiveVisibility == FirEffectiveVisibilityImpl.Local ||
effectiveVisibility == FirEffectiveVisibilityImpl.Private
) return null
}
val builder = SignatureBuilder()
declaration.accept(builder)
return when {