[FIR2IR] Don't compose signatures for private declarations
This commit is contained in:
+11
-2
@@ -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.expressions.impl.IrExpressionBodyImpl
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrEnumEntrySymbol
|
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.symbols.IrTypeParameterSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl
|
import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl
|
||||||
@@ -170,14 +171,22 @@ class Fir2IrClassifierStorage(
|
|||||||
return irClass
|
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(
|
fun registerTypeAlias(
|
||||||
typeAlias: FirTypeAlias,
|
typeAlias: FirTypeAlias,
|
||||||
parent: IrFile
|
parent: IrFile
|
||||||
): IrTypeAlias {
|
): IrTypeAlias {
|
||||||
val signature = signatureComposer.composeSignature(typeAlias)!!
|
val signature = signatureComposer.composeSignature(typeAlias)
|
||||||
preCacheTypeParameters(typeAlias)
|
preCacheTypeParameters(typeAlias)
|
||||||
return typeAlias.convertWithOffsets { startOffset, endOffset ->
|
return typeAlias.convertWithOffsets { startOffset, endOffset ->
|
||||||
symbolTable.declareTypeAlias(signature, { Fir2IrTypeAliasSymbol(signature) }) { symbol ->
|
declareIrTypeAlias(signature) { symbol ->
|
||||||
IrTypeAliasImpl(
|
IrTypeAliasImpl(
|
||||||
startOffset, endOffset, symbol,
|
startOffset, endOffset, symbol,
|
||||||
typeAlias.name, typeAlias.visibility,
|
typeAlias.name, typeAlias.visibility,
|
||||||
|
|||||||
+6
-1
@@ -63,7 +63,12 @@ class FirBasedSignatureComposer(private val mangler: FirMangler) : Fir2IrSignatu
|
|||||||
|
|
||||||
override fun composeSignature(declaration: FirDeclaration): IdSignature? {
|
override fun composeSignature(declaration: FirDeclaration): IdSignature? {
|
||||||
if (declaration is FirAnonymousObject || declaration is FirAnonymousFunction) return null
|
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()
|
val builder = SignatureBuilder()
|
||||||
declaration.accept(builder)
|
declaration.accept(builder)
|
||||||
return when {
|
return when {
|
||||||
|
|||||||
Reference in New Issue
Block a user