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:
Mikhail Glukhikh
2019-01-25 15:29:21 +03:00
parent 95678a4d64
commit bec62acf5b
58 changed files with 540 additions and 72 deletions
@@ -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,