FIR: introduce callable member symbols & initial member scopes
Initial member scopes cover top-level, class-level, and supers Ad-hock version of call resolve was introduced to test them NB: after this commit, total Kotlin resolve test cannot finish because of scope problems in type resolve transformer Related to KT-24078 #KT-24083 Fixed
This commit is contained in:
@@ -20,9 +20,8 @@ import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
|
||||
import org.jetbrains.kotlin.fir.references.FirExplicitSuperReference
|
||||
import org.jetbrains.kotlin.fir.references.FirSimpleNamedReference
|
||||
import org.jetbrains.kotlin.fir.references.FirExplicitThisReference
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.CallableId
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||
import org.jetbrains.kotlin.fir.types.FirType
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeProjection
|
||||
import org.jetbrains.kotlin.fir.types.impl.*
|
||||
@@ -250,6 +249,7 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
|
||||
val firProperty = FirMemberPropertyImpl(
|
||||
session,
|
||||
this,
|
||||
FirPropertySymbol(callableIdForName(nameAsSafeName)),
|
||||
nameAsSafeName,
|
||||
visibility,
|
||||
modality,
|
||||
@@ -359,6 +359,7 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
|
||||
val firConstructor = FirPrimaryConstructorImpl(
|
||||
session,
|
||||
this ?: owner,
|
||||
FirFunctionSymbol(callableIdForClassConstructor()),
|
||||
this?.visibility ?: Visibilities.UNKNOWN,
|
||||
this?.hasExpectModifier() ?: false,
|
||||
this?.hasActualModifier() ?: false,
|
||||
@@ -432,6 +433,14 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
|
||||
|
||||
val currentClassId get() = ClassId(packageFqName, className, false)
|
||||
|
||||
fun callableIdForName(name: Name) =
|
||||
if (className == FqName.ROOT) CallableId(packageFqName, name)
|
||||
else CallableId(packageFqName, className, name)
|
||||
|
||||
fun callableIdForClassConstructor() =
|
||||
if (className == FqName.ROOT) CallableId(packageFqName, Name.special("<anonymous-init>"))
|
||||
else CallableId(packageFqName, className, className.shortName())
|
||||
|
||||
var className: FqName = FqName.ROOT
|
||||
|
||||
override fun visitClassOrObject(classOrObject: KtClassOrObject, data: Unit): FirElement {
|
||||
@@ -546,6 +555,7 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
|
||||
FirMemberFunctionImpl(
|
||||
session,
|
||||
function,
|
||||
FirFunctionSymbol(callableIdForName(function.nameAsSafeName)),
|
||||
function.nameAsSafeName,
|
||||
function.visibility,
|
||||
function.modality,
|
||||
@@ -621,6 +631,7 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
|
||||
val firConstructor = FirConstructorImpl(
|
||||
session,
|
||||
this,
|
||||
FirFunctionSymbol(callableIdForClassConstructor()),
|
||||
visibility,
|
||||
hasExpectModifier(),
|
||||
hasActualModifier(),
|
||||
@@ -686,6 +697,7 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
|
||||
FirMemberPropertyImpl(
|
||||
session,
|
||||
property,
|
||||
FirPropertySymbol(callableIdForName(name)),
|
||||
name,
|
||||
property.visibility,
|
||||
property.modality,
|
||||
|
||||
Reference in New Issue
Block a user