[FIR] Add contaning class lookup element for local FirRegular classes
This commit is contained in:
+2
@@ -524,6 +524,8 @@ class DeclarationsConverter(
|
||||
}
|
||||
}
|
||||
}
|
||||
}.also {
|
||||
it.initContainingClassForLocalAttr()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -896,6 +896,8 @@ open class RawFirBuilder(
|
||||
}
|
||||
}
|
||||
}
|
||||
}.also {
|
||||
it.initContainingClassForLocalAttr()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Vendored
+2
-2
@@ -5,7 +5,7 @@ FILE: initBlockWithDeclarations.kt
|
||||
}
|
||||
|
||||
init {
|
||||
local final? class classInInit : R|kotlin/Any| {
|
||||
local final? [ContainingClassKey=X] class classInInit : R|kotlin/Any| {
|
||||
public? [ContainingClassKey=classInInit] constructor(): R|X.classInInit| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
@@ -27,7 +27,7 @@ FILE: initBlockWithDeclarations.kt
|
||||
}
|
||||
|
||||
init {
|
||||
local final? class classInInit : R|kotlin/Any| {
|
||||
local final? [ContainingClassKey=<no name provided>] class classInInit : R|kotlin/Any| {
|
||||
public? [ContainingClassKey=classInInit] constructor(): R|<no name provided>.classInInit| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
+9
@@ -1152,6 +1152,15 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
|
||||
}
|
||||
}
|
||||
|
||||
protected fun FirRegularClass.initContainingClassForLocalAttr() {
|
||||
if (isLocal) {
|
||||
val currentDispatchReceiverType = currentDispatchReceiverType()
|
||||
if (currentDispatchReceiverType != null) {
|
||||
containingClassForLocalAttr = currentDispatchReceiverType.lookupTag
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected fun FirCallableDeclaration<*>.initContainingClassAttr() {
|
||||
val currentDispatchReceiverType = currentDispatchReceiverType() ?: return
|
||||
containingClassAttr = currentDispatchReceiverType.lookupTag
|
||||
|
||||
@@ -32,9 +32,12 @@ fun FirCallableDeclaration<*>.containingClass(): ConeClassLikeLookupTag? {
|
||||
fun FirCallableMemberDeclaration<*>.containingClass(): ConeClassLikeLookupTag? {
|
||||
return (containingClassAttr ?: dispatchReceiverClassOrNull())
|
||||
}
|
||||
fun FirRegularClass.containingClassForLocal(): ConeClassLikeLookupTag? =
|
||||
if (isLocal) containingClassForLocalAttr else null
|
||||
|
||||
private object ContainingClassKey : FirDeclarationDataKey()
|
||||
var FirCallableDeclaration<*>.containingClassAttr: ConeClassLikeLookupTag? by FirDeclarationDataRegistry.data(ContainingClassKey)
|
||||
var FirRegularClass.containingClassForLocalAttr: ConeClassLikeLookupTag? by FirDeclarationDataRegistry.data(ContainingClassKey)
|
||||
|
||||
val FirCallableDeclaration<*>.isIntersectionOverride get() = origin == FirDeclarationOrigin.IntersectionOverride
|
||||
val FirCallableDeclaration<*>.isSubstitutionOverride get() = origin == FirDeclarationOrigin.SubstitutionOverride
|
||||
|
||||
Reference in New Issue
Block a user