[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 {
|
init {
|
||||||
local final? class classInInit : R|kotlin/Any| {
|
local final? [ContainingClassKey=X] class classInInit : R|kotlin/Any| {
|
||||||
public? [ContainingClassKey=classInInit] constructor(): R|X.classInInit| {
|
public? [ContainingClassKey=classInInit] constructor(): R|X.classInInit| {
|
||||||
super<R|kotlin/Any|>()
|
super<R|kotlin/Any|>()
|
||||||
}
|
}
|
||||||
@@ -27,7 +27,7 @@ FILE: initBlockWithDeclarations.kt
|
|||||||
}
|
}
|
||||||
|
|
||||||
init {
|
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| {
|
public? [ContainingClassKey=classInInit] constructor(): R|<no name provided>.classInInit| {
|
||||||
super<R|kotlin/Any|>()
|
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() {
|
protected fun FirCallableDeclaration<*>.initContainingClassAttr() {
|
||||||
val currentDispatchReceiverType = currentDispatchReceiverType() ?: return
|
val currentDispatchReceiverType = currentDispatchReceiverType() ?: return
|
||||||
containingClassAttr = currentDispatchReceiverType.lookupTag
|
containingClassAttr = currentDispatchReceiverType.lookupTag
|
||||||
|
|||||||
@@ -32,9 +32,12 @@ fun FirCallableDeclaration<*>.containingClass(): ConeClassLikeLookupTag? {
|
|||||||
fun FirCallableMemberDeclaration<*>.containingClass(): ConeClassLikeLookupTag? {
|
fun FirCallableMemberDeclaration<*>.containingClass(): ConeClassLikeLookupTag? {
|
||||||
return (containingClassAttr ?: dispatchReceiverClassOrNull())
|
return (containingClassAttr ?: dispatchReceiverClassOrNull())
|
||||||
}
|
}
|
||||||
|
fun FirRegularClass.containingClassForLocal(): ConeClassLikeLookupTag? =
|
||||||
|
if (isLocal) containingClassForLocalAttr else null
|
||||||
|
|
||||||
private object ContainingClassKey : FirDeclarationDataKey()
|
private object ContainingClassKey : FirDeclarationDataKey()
|
||||||
var FirCallableDeclaration<*>.containingClassAttr: ConeClassLikeLookupTag? by FirDeclarationDataRegistry.data(ContainingClassKey)
|
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<*>.isIntersectionOverride get() = origin == FirDeclarationOrigin.IntersectionOverride
|
||||||
val FirCallableDeclaration<*>.isSubstitutionOverride get() = origin == FirDeclarationOrigin.SubstitutionOverride
|
val FirCallableDeclaration<*>.isSubstitutionOverride get() = origin == FirDeclarationOrigin.SubstitutionOverride
|
||||||
|
|||||||
Reference in New Issue
Block a user