Refactor FIR symbols to make them and their FIR element types more clear
This commit also fixes work with Java synthetic properties
This commit is contained in:
@@ -328,7 +328,7 @@ class MultiModuleHtmlFirDump(private val outputRoot: File) {
|
|||||||
symbolIds[symbolOwner.symbol] = symbolCounter++
|
symbolIds[symbolOwner.symbol] = symbolCounter++
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitVariable(variable: FirVariable) {
|
override fun <F : FirVariable<F>> visitVariable(variable: FirVariable<F>) {
|
||||||
indexDeclaration(variable)
|
indexDeclaration(variable)
|
||||||
super.visitVariable(variable)
|
super.visitVariable(variable)
|
||||||
}
|
}
|
||||||
@@ -696,7 +696,7 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver
|
|||||||
generate(type.directExpansionType(session) ?: ConeKotlinErrorType("No expansion for type-alias"))
|
generate(type.directExpansionType(session) ?: ConeKotlinErrorType("No expansion for type-alias"))
|
||||||
}
|
}
|
||||||
is ConeTypeParameterType -> resolved {
|
is ConeTypeParameterType -> resolved {
|
||||||
symbolRef(type.lookupTag.toSymbol(session)) {
|
symbolRef(type.lookupTag.toSymbol()) {
|
||||||
simpleName(type.lookupTag.name)
|
simpleName(type.lookupTag.name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -794,7 +794,7 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver
|
|||||||
+"> "
|
+"> "
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FlowContent.generateReceiver(declaration: FirCallableDeclaration) {
|
private fun FlowContent.generateReceiver(declaration: FirCallableDeclaration<*>) {
|
||||||
generateReceiver(declaration.receiverTypeRef)
|
generateReceiver(declaration.receiverTypeRef)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -873,13 +873,13 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver
|
|||||||
is FirWhenExpression -> generate(statement, isStatement = true)
|
is FirWhenExpression -> generate(statement, isStatement = true)
|
||||||
is FirTryExpression -> generate(statement, isStatement = true)
|
is FirTryExpression -> generate(statement, isStatement = true)
|
||||||
is FirExpression -> iline { generate(statement) }
|
is FirExpression -> iline { generate(statement) }
|
||||||
is FirVariable -> iline { generate(statement) }
|
is FirVariable<*> -> iline { generate(statement) }
|
||||||
is FirVariableAssignment -> iline { generate(statement) }
|
is FirVariableAssignment -> iline { generate(statement) }
|
||||||
else -> unsupported(statement)
|
else -> unsupported(statement)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FlowContent.generate(variable: FirVariable) {
|
private fun FlowContent.generate(variable: FirVariable<*>) {
|
||||||
if (variable.isVal) {
|
if (variable.isVal) {
|
||||||
keyword("val ")
|
keyword("val ")
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -104,10 +104,11 @@ fun FirReference.toSymbol(declarationStorage: Fir2IrDeclarationStorage): IrSymbo
|
|||||||
fun FirNamedReference.toSymbol(declarationStorage: Fir2IrDeclarationStorage): IrSymbol? {
|
fun FirNamedReference.toSymbol(declarationStorage: Fir2IrDeclarationStorage): IrSymbol? {
|
||||||
if (this is FirResolvedCallableReference) {
|
if (this is FirResolvedCallableReference) {
|
||||||
when (val callableSymbol = this.coneSymbol) {
|
when (val callableSymbol = this.coneSymbol) {
|
||||||
is FirFunctionSymbol -> return callableSymbol.toFunctionSymbol(declarationStorage)
|
is FirFunctionSymbol<*> -> return callableSymbol.toFunctionSymbol(declarationStorage)
|
||||||
is FirPropertySymbol -> return callableSymbol.toPropertyOrFieldSymbol(declarationStorage)
|
is FirPropertySymbol -> return callableSymbol.toPropertyOrFieldSymbol(declarationStorage)
|
||||||
|
is FirFieldSymbol -> return callableSymbol.toPropertyOrFieldSymbol(declarationStorage)
|
||||||
is FirBackingFieldSymbol -> return callableSymbol.toPropertyOrFieldSymbol(declarationStorage)
|
is FirBackingFieldSymbol -> return callableSymbol.toPropertyOrFieldSymbol(declarationStorage)
|
||||||
is FirVariableSymbol -> return callableSymbol.toValueSymbol(declarationStorage)
|
is FirVariableSymbol<*> -> return callableSymbol.toValueSymbol(declarationStorage)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null
|
return null
|
||||||
@@ -121,14 +122,14 @@ fun FirTypeParameterSymbol.toTypeParameterSymbol(declarationStorage: Fir2IrDecla
|
|||||||
return declarationStorage.getIrTypeParameterSymbol(this)
|
return declarationStorage.getIrTypeParameterSymbol(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FirFunctionSymbol.toFunctionSymbol(declarationStorage: Fir2IrDeclarationStorage): IrFunctionSymbol {
|
fun FirFunctionSymbol<*>.toFunctionSymbol(declarationStorage: Fir2IrDeclarationStorage): IrFunctionSymbol {
|
||||||
return declarationStorage.getIrFunctionSymbol(this)
|
return declarationStorage.getIrFunctionSymbol(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FirVariableSymbol.toPropertyOrFieldSymbol(declarationStorage: Fir2IrDeclarationStorage): IrSymbol {
|
fun FirVariableSymbol<*>.toPropertyOrFieldSymbol(declarationStorage: Fir2IrDeclarationStorage): IrSymbol {
|
||||||
return declarationStorage.getIrPropertyOrFieldSymbol(this)
|
return declarationStorage.getIrPropertyOrFieldSymbol(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FirVariableSymbol.toValueSymbol(declarationStorage: Fir2IrDeclarationStorage): IrValueSymbol {
|
fun FirVariableSymbol<*>.toValueSymbol(declarationStorage: Fir2IrDeclarationStorage): IrValueSymbol {
|
||||||
return declarationStorage.getIrValueSymbol(this)
|
return declarationStorage.getIrValueSymbol(this)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.ir.declarations.*
|
|||||||
class Fir2IrCallableCache {
|
class Fir2IrCallableCache {
|
||||||
private val parameterCache = mutableMapOf<FirValueParameter, IrValueParameter>()
|
private val parameterCache = mutableMapOf<FirValueParameter, IrValueParameter>()
|
||||||
|
|
||||||
private val variableCache = mutableMapOf<FirVariable, IrVariable>()
|
private val variableCache = mutableMapOf<FirVariable<*>, IrVariable>()
|
||||||
|
|
||||||
private val localClassCache = mutableMapOf<FirClass, IrClass>()
|
private val localClassCache = mutableMapOf<FirClass, IrClass>()
|
||||||
|
|
||||||
@@ -25,9 +25,9 @@ class Fir2IrCallableCache {
|
|||||||
parameterCache[firParameter] = irParameter
|
parameterCache[firParameter] = irParameter
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getVariable(variable: FirVariable): IrVariable? = variableCache[variable]
|
fun getVariable(variable: FirVariable<*>): IrVariable? = variableCache[variable]
|
||||||
|
|
||||||
fun putVariable(firVariable: FirVariable, irVariable: IrVariable) {
|
fun putVariable(firVariable: FirVariable<*>, irVariable: IrVariable) {
|
||||||
variableCache[firVariable] = irVariable
|
variableCache[firVariable] = irVariable
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+8
-9
@@ -197,7 +197,7 @@ class Fir2IrDeclarationStorage(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun findIrParent(callableMemberDeclaration: FirCallableMemberDeclaration): IrDeclarationParent? {
|
internal fun findIrParent(callableMemberDeclaration: FirCallableMemberDeclaration<*>): IrDeclarationParent? {
|
||||||
val firBasedSymbol = callableMemberDeclaration.symbol
|
val firBasedSymbol = callableMemberDeclaration.symbol
|
||||||
val callableId = firBasedSymbol.callableId
|
val callableId = firBasedSymbol.callableId
|
||||||
val parentClassId = callableId.classId
|
val parentClassId = callableId.classId
|
||||||
@@ -449,7 +449,7 @@ class Fir2IrDeclarationStorage(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun createAndSaveIrVariable(variable: FirVariable): IrVariable {
|
fun createAndSaveIrVariable(variable: FirVariable<*>): IrVariable {
|
||||||
val type = variable.returnTypeRef.toIrType(session, this)
|
val type = variable.returnTypeRef.toIrType(session, this)
|
||||||
val irVariable = variable.convertWithOffsets { startOffset, endOffset ->
|
val irVariable = variable.convertWithOffsets { startOffset, endOffset ->
|
||||||
declareIrVariable(
|
declareIrVariable(
|
||||||
@@ -479,9 +479,9 @@ class Fir2IrDeclarationStorage(
|
|||||||
return irSymbolTable.referenceTypeParameter(irTypeParameter.descriptor)
|
return irSymbolTable.referenceTypeParameter(irTypeParameter.descriptor)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getIrFunctionSymbol(firFunctionSymbol: FirFunctionSymbol): IrFunctionSymbol {
|
fun getIrFunctionSymbol(firFunctionSymbol: FirFunctionSymbol<*>): IrFunctionSymbol {
|
||||||
val firDeclaration = firFunctionSymbol.fir
|
val firDeclaration = firFunctionSymbol.fir
|
||||||
val irParent = (firDeclaration as? FirCallableMemberDeclaration)?.let { findIrParent(it) }
|
val irParent = (firDeclaration as? FirCallableMemberDeclaration<*>)?.let { findIrParent(it) }
|
||||||
return when (firDeclaration) {
|
return when (firDeclaration) {
|
||||||
is FirNamedFunction -> {
|
is FirNamedFunction -> {
|
||||||
val irDeclaration = getIrFunction(firDeclaration, irParent, shouldLeaveScope = true).apply {
|
val irDeclaration = getIrFunction(firDeclaration, irParent, shouldLeaveScope = true).apply {
|
||||||
@@ -499,7 +499,7 @@ class Fir2IrDeclarationStorage(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getIrPropertyOrFieldSymbol(firVariableSymbol: FirVariableSymbol): IrSymbol {
|
fun getIrPropertyOrFieldSymbol(firVariableSymbol: FirVariableSymbol<*>): IrSymbol {
|
||||||
return when (val fir = firVariableSymbol.fir) {
|
return when (val fir = firVariableSymbol.fir) {
|
||||||
is FirProperty -> {
|
is FirProperty -> {
|
||||||
val irProperty = getIrProperty(fir).apply {
|
val irProperty = getIrProperty(fir).apply {
|
||||||
@@ -517,13 +517,13 @@ class Fir2IrDeclarationStorage(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getIrVariableSymbol(firVariable: FirVariable): IrVariableSymbol {
|
private fun getIrVariableSymbol(firVariable: FirVariable<*>): IrVariableSymbol {
|
||||||
val irDeclaration = localStorage.getVariable(firVariable)
|
val irDeclaration = localStorage.getVariable(firVariable)
|
||||||
?: throw IllegalArgumentException("Cannot find variable ${firVariable.render()} in local storage")
|
?: throw IllegalArgumentException("Cannot find variable ${firVariable.render()} in local storage")
|
||||||
return irSymbolTable.referenceVariable(irDeclaration.descriptor)
|
return irSymbolTable.referenceVariable(irDeclaration.descriptor)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getIrValueSymbol(firVariableSymbol: FirVariableSymbol): IrValueSymbol {
|
fun getIrValueSymbol(firVariableSymbol: FirVariableSymbol<*>): IrValueSymbol {
|
||||||
return when (val firDeclaration = firVariableSymbol.fir) {
|
return when (val firDeclaration = firVariableSymbol.fir) {
|
||||||
is FirValueParameter -> {
|
is FirValueParameter -> {
|
||||||
val irDeclaration = localStorage.getParameter(firDeclaration)
|
val irDeclaration = localStorage.getParameter(firDeclaration)
|
||||||
@@ -531,10 +531,9 @@ class Fir2IrDeclarationStorage(
|
|||||||
?: return getIrVariableSymbol(firDeclaration)
|
?: return getIrVariableSymbol(firDeclaration)
|
||||||
irSymbolTable.referenceValueParameter(irDeclaration.descriptor)
|
irSymbolTable.referenceValueParameter(irDeclaration.descriptor)
|
||||||
}
|
}
|
||||||
is FirVariable -> {
|
else -> {
|
||||||
getIrVariableSymbol(firDeclaration)
|
getIrVariableSymbol(firDeclaration)
|
||||||
}
|
}
|
||||||
else -> throw AssertionError("Should not be here")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -32,7 +32,7 @@ class Fir2IrLocalStorage {
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getVariable(variable: FirVariable): IrVariable? {
|
fun getVariable(variable: FirVariable<*>): IrVariable? {
|
||||||
for (cache in cacheStack.asReversed()) {
|
for (cache in cacheStack.asReversed()) {
|
||||||
val local = cache.getVariable(variable)
|
val local = cache.getVariable(variable)
|
||||||
if (local != null) return local
|
if (local != null) return local
|
||||||
@@ -60,7 +60,7 @@ class Fir2IrLocalStorage {
|
|||||||
cacheStack.last().putParameter(firParameter, irParameter)
|
cacheStack.last().putParameter(firParameter, irParameter)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun putVariable(firVariable: FirVariable, irVariable: IrVariable) {
|
fun putVariable(firVariable: FirVariable<*>, irVariable: IrVariable) {
|
||||||
cacheStack.last().putVariable(firVariable, irVariable)
|
cacheStack.last().putVariable(firVariable, irVariable)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,13 +21,8 @@ import org.jetbrains.kotlin.fir.resolve.buildUseSiteScope
|
|||||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirClassSubstitutionScope
|
import org.jetbrains.kotlin.fir.scopes.impl.FirClassSubstitutionScope
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTagImpl
|
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTagImpl
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassifierLookupTag
|
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
||||||
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
@@ -207,8 +202,8 @@ internal class Fir2IrVisitor(
|
|||||||
processedFunctionNames += name
|
processedFunctionNames += name
|
||||||
useSiteScope.processFunctionsByName(name) { functionSymbol ->
|
useSiteScope.processFunctionsByName(name) { functionSymbol ->
|
||||||
// TODO: think about overloaded functions. May be we should process all names.
|
// TODO: think about overloaded functions. May be we should process all names.
|
||||||
if (functionSymbol is FirFunctionSymbol) {
|
if (functionSymbol is FirNamedFunctionSymbol) {
|
||||||
val originalFunction = functionSymbol.fir as FirNamedFunction
|
val originalFunction = functionSymbol.fir
|
||||||
val origin = IrDeclarationOrigin.FAKE_OVERRIDE
|
val origin = IrDeclarationOrigin.FAKE_OVERRIDE
|
||||||
if (functionSymbol.isFakeOverride) {
|
if (functionSymbol.isFakeOverride) {
|
||||||
// Substitution case
|
// Substitution case
|
||||||
@@ -222,7 +217,7 @@ internal class Fir2IrVisitor(
|
|||||||
} else if (fakeOverrideMode != FakeOverrideMode.SUBSTITUTION) {
|
} else if (fakeOverrideMode != FakeOverrideMode.SUBSTITUTION) {
|
||||||
// Trivial fake override case
|
// Trivial fake override case
|
||||||
val fakeOverrideSymbol = FirClassSubstitutionScope.createFakeOverride(session, originalFunction, functionSymbol)
|
val fakeOverrideSymbol = FirClassSubstitutionScope.createFakeOverride(session, originalFunction, functionSymbol)
|
||||||
val fakeOverrideFunction = fakeOverrideSymbol.fir as FirNamedFunction
|
val fakeOverrideFunction = fakeOverrideSymbol.fir
|
||||||
|
|
||||||
val irFunction = declarationStorage.getIrFunction(
|
val irFunction = declarationStorage.getIrFunction(
|
||||||
fakeOverrideFunction, declarationStorage.findIrParent(originalFunction), origin = origin
|
fakeOverrideFunction, declarationStorage.findIrParent(originalFunction), origin = origin
|
||||||
@@ -278,7 +273,7 @@ internal class Fir2IrVisitor(
|
|||||||
private fun <T : IrFunction> T.setFunctionContent(
|
private fun <T : IrFunction> T.setFunctionContent(
|
||||||
descriptor: FunctionDescriptor,
|
descriptor: FunctionDescriptor,
|
||||||
firFunction: FirFunction,
|
firFunction: FirFunction,
|
||||||
firOverriddenSymbol: FirFunctionSymbol? = null
|
firOverriddenSymbol: FirNamedFunctionSymbol? = null
|
||||||
): T {
|
): T {
|
||||||
setParentByParentStack()
|
setParentByParentStack()
|
||||||
withParent {
|
withParent {
|
||||||
@@ -395,23 +390,25 @@ internal class Fir2IrVisitor(
|
|||||||
// TODO: find delegated constructor correctly
|
// TODO: find delegated constructor correctly
|
||||||
val classId = constructedClassSymbol.classId
|
val classId = constructedClassSymbol.classId
|
||||||
val provider = this@Fir2IrVisitor.session.service<FirSymbolProvider>()
|
val provider = this@Fir2IrVisitor.session.service<FirSymbolProvider>()
|
||||||
var constructorSymbol: FirCallableSymbol? = null
|
var constructorSymbol: FirConstructorSymbol? = null
|
||||||
provider.getClassUseSiteMemberScope(classId, this@Fir2IrVisitor.session, ScopeSession())!!.processFunctionsByName(
|
provider.getClassUseSiteMemberScope(classId, this@Fir2IrVisitor.session, ScopeSession())!!.processFunctionsByName(
|
||||||
classId.shortClassName
|
classId.shortClassName
|
||||||
) {
|
) {
|
||||||
if (arguments.size <= ((it as FirFunctionSymbol).fir as FirFunction).valueParameters.size) {
|
when {
|
||||||
constructorSymbol = it
|
it !is FirConstructorSymbol -> ProcessorAction.NEXT
|
||||||
ProcessorAction.STOP
|
arguments.size <= it.fir.valueParameters.size -> {
|
||||||
} else {
|
constructorSymbol = it
|
||||||
ProcessorAction.NEXT
|
ProcessorAction.STOP
|
||||||
|
}
|
||||||
|
else -> ProcessorAction.NEXT
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (constructorSymbol == null) return null
|
val foundConstructorSymbol = constructorSymbol ?: return null
|
||||||
return convertWithOffsets { startOffset, endOffset ->
|
return convertWithOffsets { startOffset, endOffset ->
|
||||||
IrDelegatingConstructorCallImpl(
|
IrDelegatingConstructorCallImpl(
|
||||||
startOffset, endOffset,
|
startOffset, endOffset,
|
||||||
constructedIrType,
|
constructedIrType,
|
||||||
declarationStorage.getIrFunctionSymbol(constructorSymbol as FirFunctionSymbol) as IrConstructorSymbol
|
declarationStorage.getIrFunctionSymbol(foundConstructorSymbol) as IrConstructorSymbol
|
||||||
).apply {
|
).apply {
|
||||||
for ((index, argument) in arguments.withIndex()) {
|
for ((index, argument) in arguments.withIndex()) {
|
||||||
val argumentExpression = argument.toIrExpression()
|
val argumentExpression = argument.toIrExpression()
|
||||||
@@ -459,7 +456,7 @@ internal class Fir2IrVisitor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitVariable(variable: FirVariable, data: Any?): IrElement {
|
override fun <F : FirVariable<F>> visitVariable(variable: FirVariable<F>, data: Any?): IrElement {
|
||||||
val irVariable = declarationStorage.createAndSaveIrVariable(variable)
|
val irVariable = declarationStorage.createAndSaveIrVariable(variable)
|
||||||
return irVariable.setParentByParentStack().apply {
|
return irVariable.setParentByParentStack().apply {
|
||||||
val initializer = variable.initializer
|
val initializer = variable.initializer
|
||||||
|
|||||||
@@ -21,17 +21,11 @@ import org.jetbrains.kotlin.fir.java.declarations.FirJavaMethod
|
|||||||
import org.jetbrains.kotlin.fir.java.scopes.JavaClassEnhancementScope
|
import org.jetbrains.kotlin.fir.java.scopes.JavaClassEnhancementScope
|
||||||
import org.jetbrains.kotlin.fir.java.scopes.JavaClassUseSiteScope
|
import org.jetbrains.kotlin.fir.java.scopes.JavaClassUseSiteScope
|
||||||
import org.jetbrains.kotlin.fir.resolve.*
|
import org.jetbrains.kotlin.fir.resolve.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.firUnsafe
|
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirSuperTypeScope
|
import org.jetbrains.kotlin.fir.scopes.impl.FirSuperTypeScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope
|
import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope
|
||||||
import org.jetbrains.kotlin.fir.symbols.CallableId
|
import org.jetbrains.kotlin.fir.symbols.CallableId
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFieldSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.types.ConeClassErrorType
|
import org.jetbrains.kotlin.fir.types.ConeClassErrorType
|
||||||
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
|
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
|
||||||
import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl
|
import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl
|
||||||
@@ -59,7 +53,7 @@ class JavaSymbolProvider(
|
|||||||
content: KotlinClassFinder.Result.ClassFileContent?
|
content: KotlinClassFinder.Result.ClassFileContent?
|
||||||
): JavaClass? = facade.findClass(JavaClassFinder.Request(classId, previouslyFoundClassFileContent = content?.content), searchScope)
|
): JavaClass? = facade.findClass(JavaClassFinder.Request(classId, previouslyFoundClassFileContent = content?.content), searchScope)
|
||||||
|
|
||||||
override fun getTopLevelCallableSymbols(packageFqName: FqName, name: Name): List<ConeCallableSymbol> =
|
override fun getTopLevelCallableSymbols(packageFqName: FqName, name: Name): List<FirCallableSymbol<*>> =
|
||||||
emptyList()
|
emptyList()
|
||||||
|
|
||||||
override fun getClassDeclaredMemberScope(classId: ClassId): FirScope? {
|
override fun getClassDeclaredMemberScope(classId: ClassId): FirScope? {
|
||||||
@@ -72,9 +66,8 @@ class JavaSymbolProvider(
|
|||||||
useSiteSession: FirSession,
|
useSiteSession: FirSession,
|
||||||
scopeSession: ScopeSession
|
scopeSession: ScopeSession
|
||||||
): FirScope? {
|
): FirScope? {
|
||||||
val symbol = this.getClassLikeSymbolByFqName(classId) ?: return null
|
val symbol = this.getClassLikeSymbolByFqName(classId) as? FirClassSymbol ?: return null
|
||||||
val javaClass = symbol.firUnsafe<FirJavaClass>()
|
return buildJavaEnhancementScope(useSiteSession, symbol, scopeSession)
|
||||||
return buildJavaEnhancementScope(useSiteSession, javaClass.symbol, scopeSession)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun buildJavaEnhancementScope(
|
private fun buildJavaEnhancementScope(
|
||||||
@@ -140,9 +133,9 @@ class JavaSymbolProvider(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getClassLikeSymbolByFqName(classId: ClassId): ConeClassLikeSymbol? = getFirJavaClass(classId)
|
override fun getClassLikeSymbolByFqName(classId: ClassId): FirClassLikeSymbol<*>? = getFirJavaClass(classId)
|
||||||
|
|
||||||
fun getFirJavaClass(classId: ClassId, content: KotlinClassFinder.Result.ClassFileContent? = null): ConeClassLikeSymbol? {
|
fun getFirJavaClass(classId: ClassId, content: KotlinClassFinder.Result.ClassFileContent? = null): FirClassLikeSymbol<*>? {
|
||||||
if (!hasTopLevelClassOf(classId)) return null
|
if (!hasTopLevelClassOf(classId)) return null
|
||||||
return classCache.lookupCacheOrCalculateWithPostCompute(classId, {
|
return classCache.lookupCacheOrCalculateWithPostCompute(classId, {
|
||||||
val foundClass = findClass(classId, content)
|
val foundClass = findClass(classId, content)
|
||||||
@@ -197,7 +190,7 @@ class JavaSymbolProvider(
|
|||||||
for (javaMethod in javaClass.methods) {
|
for (javaMethod in javaClass.methods) {
|
||||||
val methodName = javaMethod.name
|
val methodName = javaMethod.name
|
||||||
val methodId = CallableId(classId.packageFqName, classId.relativeClassName, methodName)
|
val methodId = CallableId(classId.packageFqName, classId.relativeClassName, methodName)
|
||||||
val methodSymbol = FirFunctionSymbol(methodId)
|
val methodSymbol = FirNamedFunctionSymbol(methodId)
|
||||||
val returnType = javaMethod.returnType
|
val returnType = javaMethod.returnType
|
||||||
val firJavaMethod = FirJavaMethod(
|
val firJavaMethod = FirJavaMethod(
|
||||||
this@JavaSymbolProvider.session, methodSymbol, methodName,
|
this@JavaSymbolProvider.session, methodSymbol, methodName,
|
||||||
@@ -219,7 +212,7 @@ class JavaSymbolProvider(
|
|||||||
val constructorId = CallableId(classId.packageFqName, classId.relativeClassName, classId.shortClassName)
|
val constructorId = CallableId(classId.packageFqName, classId.relativeClassName, classId.shortClassName)
|
||||||
|
|
||||||
fun addJavaConstructor(visibility: Visibility = Visibilities.PUBLIC): FirJavaConstructor {
|
fun addJavaConstructor(visibility: Visibility = Visibilities.PUBLIC): FirJavaConstructor {
|
||||||
val constructorSymbol = FirFunctionSymbol(constructorId)
|
val constructorSymbol = FirConstructorSymbol(constructorId)
|
||||||
val classTypeParameters = javaClass.typeParameters.convertTypeParameters(javaTypeParameterStack)
|
val classTypeParameters = javaClass.typeParameters.convertTypeParameters(javaTypeParameterStack)
|
||||||
val firJavaConstructor = FirJavaConstructor(
|
val firJavaConstructor = FirJavaConstructor(
|
||||||
this@JavaSymbolProvider.session, constructorSymbol, visibility,
|
this@JavaSymbolProvider.session, constructorSymbol, visibility,
|
||||||
|
|||||||
+3
-3
@@ -14,15 +14,15 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirAbstractCallableMember
|
|||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirConstructorImpl.Companion.NAME
|
import org.jetbrains.kotlin.fir.declarations.impl.FirConstructorImpl.Companion.NAME
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
|
|
||||||
class FirJavaConstructor(
|
class FirJavaConstructor(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
override val symbol: FirFunctionSymbol,
|
override val symbol: FirConstructorSymbol,
|
||||||
visibility: Visibility,
|
visibility: Visibility,
|
||||||
delegatedSelfTypeRef: FirTypeRef
|
delegatedSelfTypeRef: FirTypeRef
|
||||||
) : FirAbstractCallableMember(
|
) : FirAbstractCallableMember<FirConstructor>(
|
||||||
session,
|
session,
|
||||||
psi = null,
|
psi = null,
|
||||||
name = NAME,
|
name = NAME,
|
||||||
|
|||||||
@@ -11,21 +11,20 @@ import org.jetbrains.kotlin.fir.FirSession
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirField
|
import org.jetbrains.kotlin.fir.declarations.FirField
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirAbstractCallableMember
|
import org.jetbrains.kotlin.fir.declarations.impl.FirAbstractCallableMember
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
import org.jetbrains.kotlin.fir.java.types.FirJavaTypeRef
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFieldSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
class FirJavaField(
|
class FirJavaField(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
override val symbol: FirPropertySymbol,
|
override val symbol: FirFieldSymbol,
|
||||||
name: Name,
|
name: Name,
|
||||||
visibility: Visibility,
|
visibility: Visibility,
|
||||||
modality: Modality?,
|
modality: Modality?,
|
||||||
returnTypeRef: FirTypeRef,
|
returnTypeRef: FirTypeRef,
|
||||||
override val isVar: Boolean,
|
override val isVar: Boolean,
|
||||||
isStatic: Boolean
|
isStatic: Boolean
|
||||||
) : FirAbstractCallableMember(
|
) : FirAbstractCallableMember<FirField>(
|
||||||
session, psi = null, name = name,
|
session, psi = null, name = name,
|
||||||
visibility = visibility, modality = modality,
|
visibility = visibility, modality = modality,
|
||||||
isExpect = false, isActual = false, isOverride = false,
|
isExpect = false, isActual = false, isOverride = false,
|
||||||
|
|||||||
@@ -10,13 +10,12 @@ import org.jetbrains.kotlin.descriptors.Visibility
|
|||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirMemberFunctionImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirMemberFunctionImpl
|
||||||
import org.jetbrains.kotlin.fir.java.types.FirJavaTypeRef
|
import org.jetbrains.kotlin.fir.java.types.FirJavaTypeRef
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
class FirJavaMethod(
|
class FirJavaMethod(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
symbol: FirFunctionSymbol,
|
symbol: FirNamedFunctionSymbol,
|
||||||
name: Name,
|
name: Name,
|
||||||
visibility: Visibility,
|
visibility: Visibility,
|
||||||
modality: Modality?,
|
modality: Modality?,
|
||||||
|
|||||||
+8
-10
@@ -24,16 +24,15 @@ import org.jetbrains.kotlin.fir.java.topLevelName
|
|||||||
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
|
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
|
||||||
import org.jetbrains.kotlin.fir.references.FirResolvedCallableReferenceImpl
|
import org.jetbrains.kotlin.fir.references.FirResolvedCallableReferenceImpl
|
||||||
import org.jetbrains.kotlin.fir.resolve.*
|
import org.jetbrains.kotlin.fir.resolve.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.firSafeNullable
|
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope
|
import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope
|
||||||
import org.jetbrains.kotlin.fir.service
|
import org.jetbrains.kotlin.fir.service
|
||||||
import org.jetbrains.kotlin.fir.symbols.*
|
import org.jetbrains.kotlin.fir.symbols.*
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.impl.ConeClassTypeImpl
|
|
||||||
import org.jetbrains.kotlin.fir.types.impl.FirErrorTypeRefImpl
|
import org.jetbrains.kotlin.fir.types.impl.FirErrorTypeRefImpl
|
||||||
import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl
|
import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl
|
||||||
import org.jetbrains.kotlin.load.java.JavaClassFinder
|
import org.jetbrains.kotlin.load.java.JavaClassFinder
|
||||||
@@ -145,12 +144,12 @@ class KotlinDeserializedJvmSymbolsProvider(
|
|||||||
useSiteSession: FirSession,
|
useSiteSession: FirSession,
|
||||||
scopeSession: ScopeSession
|
scopeSession: ScopeSession
|
||||||
): FirScope? {
|
): FirScope? {
|
||||||
val symbol = this.getClassLikeSymbolByFqName(classId) ?: return null
|
val symbol = this.getClassLikeSymbolByFqName(classId) as? FirClassSymbol ?: return null
|
||||||
|
|
||||||
return symbol.firSafeNullable<FirRegularClass>()?.buildDefaultUseSiteScope(session, scopeSession)
|
return symbol.fir.buildDefaultUseSiteScope(session, scopeSession)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getClassLikeSymbolByFqName(classId: ClassId): ConeClassLikeSymbol? {
|
override fun getClassLikeSymbolByFqName(classId: ClassId): FirClassLikeSymbol<*>? {
|
||||||
return findAndDeserializeClass(classId) ?: findAndDeserializeTypeAlias(classId)
|
return findAndDeserializeClass(classId) ?: findAndDeserializeTypeAlias(classId)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -316,8 +315,7 @@ class KotlinDeserializedJvmSymbolsProvider(
|
|||||||
|
|
||||||
if (classId in handledByJava) return null
|
if (classId in handledByJava) return null
|
||||||
|
|
||||||
val result = kotlinClassFinder.findKotlinClassOrContent(classId)
|
val kotlinJvmBinaryClass = when (val result = kotlinClassFinder.findKotlinClassOrContent(classId)) {
|
||||||
val kotlinJvmBinaryClass = when (result) {
|
|
||||||
is KotlinClassFinder.Result.KotlinClass -> result.kotlinJvmBinaryClass
|
is KotlinClassFinder.Result.KotlinClass -> result.kotlinJvmBinaryClass
|
||||||
is KotlinClassFinder.Result.ClassFileContent -> {
|
is KotlinClassFinder.Result.ClassFileContent -> {
|
||||||
handledByJava.add(classId)
|
handledByJava.add(classId)
|
||||||
@@ -360,7 +358,7 @@ class KotlinDeserializedJvmSymbolsProvider(
|
|||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun loadFunctionsByName(part: PackagePartsCacheData, name: Name): List<FirCallableSymbol> {
|
private fun loadFunctionsByName(part: PackagePartsCacheData, name: Name): List<FirCallableSymbol<*>> {
|
||||||
val functionIds = part.topLevelFunctionNameIndex[name] ?: return emptyList()
|
val functionIds = part.topLevelFunctionNameIndex[name] ?: return emptyList()
|
||||||
return functionIds.map { part.proto.getFunction(it) }
|
return functionIds.map { part.proto.getFunction(it) }
|
||||||
.map {
|
.map {
|
||||||
@@ -370,7 +368,7 @@ class KotlinDeserializedJvmSymbolsProvider(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun loadPropertiesByName(part: PackagePartsCacheData, name: Name): List<FirCallableSymbol> {
|
private fun loadPropertiesByName(part: PackagePartsCacheData, name: Name): List<FirCallableSymbol<*>> {
|
||||||
val propertyIds = part.topLevelPropertyNameIndex[name] ?: return emptyList()
|
val propertyIds = part.topLevelPropertyNameIndex[name] ?: return emptyList()
|
||||||
return propertyIds.map { part.proto.getProperty(it) }
|
return propertyIds.map { part.proto.getProperty(it) }
|
||||||
.map {
|
.map {
|
||||||
@@ -380,7 +378,7 @@ class KotlinDeserializedJvmSymbolsProvider(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getTopLevelCallableSymbols(packageFqName: FqName, name: Name): List<ConeCallableSymbol> {
|
override fun getTopLevelCallableSymbols(packageFqName: FqName, name: Name): List<FirCallableSymbol<*>> {
|
||||||
return getPackageParts(packageFqName).flatMap { part ->
|
return getPackageParts(packageFqName).flatMap { part ->
|
||||||
loadFunctionsByName(part, name) + loadPropertiesByName(part, name)
|
loadFunctionsByName(part, name) + loadPropertiesByName(part, name)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -163,7 +163,7 @@ private fun JavaClassifierType.enhanceInflexibleType(
|
|||||||
arg.toConeProjection(
|
arg.toConeProjection(
|
||||||
session,
|
session,
|
||||||
javaTypeParameterStack,
|
javaTypeParameterStack,
|
||||||
((originalTag as? FirBasedSymbol<*>)?.fir as? FirCallableMemberDeclaration)?.typeParameters?.getOrNull(localArgIndex)
|
((originalTag as? FirBasedSymbol<*>)?.fir as? FirCallableMemberDeclaration<*>)?.typeParameters?.getOrNull(localArgIndex)
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
val argEnhancedTypeRef = arg.enhancePossiblyFlexible(session, javaTypeParameterStack, annotations, qualifiers, globalArgIndex)
|
val argEnhancedTypeRef = arg.enhancePossiblyFlexible(session, javaTypeParameterStack, annotations, qualifiers, globalArgIndex)
|
||||||
|
|||||||
+45
-46
@@ -18,13 +18,10 @@ import org.jetbrains.kotlin.fir.java.enhancement.EnhancementSignatureParts
|
|||||||
import org.jetbrains.kotlin.fir.java.toNotNullConeKotlinType
|
import org.jetbrains.kotlin.fir.java.toNotNullConeKotlinType
|
||||||
import org.jetbrains.kotlin.fir.java.types.FirJavaTypeRef
|
import org.jetbrains.kotlin.fir.java.types.FirJavaTypeRef
|
||||||
import org.jetbrains.kotlin.fir.render
|
import org.jetbrains.kotlin.fir.render
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.firUnsafe
|
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||||
import org.jetbrains.kotlin.fir.symbols.*
|
import org.jetbrains.kotlin.fir.symbols.*
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirAccessorSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrConstKind
|
import org.jetbrains.kotlin.ir.expressions.IrConstKind
|
||||||
import org.jetbrains.kotlin.load.java.AnnotationTypeQualifierResolver
|
import org.jetbrains.kotlin.load.java.AnnotationTypeQualifierResolver
|
||||||
@@ -53,42 +50,42 @@ class JavaClassEnhancementScope(
|
|||||||
private val context: FirJavaEnhancementContext =
|
private val context: FirJavaEnhancementContext =
|
||||||
FirJavaEnhancementContext(session) { null }.copyWithNewDefaultTypeQualifiers(typeQualifierResolver, jsr305State, owner.annotations)
|
FirJavaEnhancementContext(session) { null }.copyWithNewDefaultTypeQualifiers(typeQualifierResolver, jsr305State, owner.annotations)
|
||||||
|
|
||||||
private val enhancements = mutableMapOf<ConeCallableSymbol, ConeCallableSymbol>()
|
private val enhancements = mutableMapOf<FirCallableSymbol<*>, FirCallableSymbol<*>>()
|
||||||
|
|
||||||
override fun processPropertiesByName(name: Name, processor: (ConeVariableSymbol) -> ProcessorAction): ProcessorAction {
|
override fun processPropertiesByName(name: Name, processor: (FirCallableSymbol<*>) -> ProcessorAction): ProcessorAction {
|
||||||
useSiteScope.processPropertiesByName(name) process@{ original ->
|
useSiteScope.processPropertiesByName(name) process@{ original ->
|
||||||
|
|
||||||
val field = enhancements.getOrPut(original) { enhance(original, name) }
|
val field = enhancements.getOrPut(original) { enhance(original, name) }
|
||||||
processor(field as ConeVariableSymbol)
|
processor(field)
|
||||||
}
|
}
|
||||||
|
|
||||||
return super.processPropertiesByName(name, processor)
|
return super.processPropertiesByName(name, processor)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun processFunctionsByName(name: Name, processor: (ConeFunctionSymbol) -> ProcessorAction): ProcessorAction {
|
override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> ProcessorAction): ProcessorAction {
|
||||||
useSiteScope.processFunctionsByName(name) process@{ original ->
|
useSiteScope.processFunctionsByName(name) process@{ original ->
|
||||||
|
|
||||||
val function = enhancements.getOrPut(original) { enhance(original, name) }
|
val function = enhancements.getOrPut(original) { enhance(original, name) }
|
||||||
processor(function as ConeFunctionSymbol)
|
processor(function as FirFunctionSymbol<*>)
|
||||||
}
|
}
|
||||||
|
|
||||||
return super.processFunctionsByName(name, processor)
|
return super.processFunctionsByName(name, processor)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun enhance(
|
private fun enhance(
|
||||||
original: ConeVariableSymbol,
|
original: FirCallableSymbol<*>,
|
||||||
name: Name
|
name: Name
|
||||||
): ConeVariableSymbol {
|
): FirCallableSymbol<*> {
|
||||||
when (val firElement = (original as FirBasedSymbol<*>).fir) {
|
when (val firElement = original.fir) {
|
||||||
is FirJavaField -> {
|
is FirJavaField -> {
|
||||||
if (firElement.returnTypeRef !is FirJavaTypeRef) return original
|
if (firElement.returnTypeRef !is FirJavaTypeRef) return original
|
||||||
val memberContext = context.copyWithNewDefaultTypeQualifiers(typeQualifierResolver, jsr305State, firElement.annotations)
|
val memberContext = context.copyWithNewDefaultTypeQualifiers(typeQualifierResolver, jsr305State, firElement.annotations)
|
||||||
val newReturnTypeRef = enhanceReturnType(firElement, emptyList(), memberContext, null)
|
val newReturnTypeRef = enhanceReturnType(firElement, emptyList(), memberContext, null)
|
||||||
|
|
||||||
val symbol = FirPropertySymbol(original.callableId)
|
val symbol = FirFieldSymbol(original.callableId)
|
||||||
with(firElement) {
|
with(firElement) {
|
||||||
FirJavaField(
|
FirJavaField(
|
||||||
session,
|
this@JavaClassEnhancementScope.session,
|
||||||
symbol,
|
symbol,
|
||||||
name,
|
name,
|
||||||
visibility,
|
visibility,
|
||||||
@@ -116,23 +113,24 @@ class JavaClassEnhancementScope(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun enhance(
|
private fun enhance(
|
||||||
original: ConeFunctionSymbol,
|
original: FirFunctionSymbol<*>,
|
||||||
name: Name
|
name: Name
|
||||||
): FirFunctionSymbol {
|
): FirFunctionSymbol<*> {
|
||||||
val firMethod = (original as FirFunctionSymbol).fir as? FirFunction
|
val firMethod = original.fir
|
||||||
|
|
||||||
if (firMethod !is FirJavaMethod && firMethod !is FirJavaConstructor || firMethod !is FirCallableMemberDeclaration) return original
|
if (firMethod !is FirJavaMethod && firMethod !is FirJavaConstructor) {
|
||||||
return enhanceMethod(firMethod, original.callableId, name) as FirFunctionSymbol
|
return original
|
||||||
|
}
|
||||||
|
return enhanceMethod(firMethod, original.callableId, name)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun enhanceMethod(
|
private fun enhanceMethod(
|
||||||
firMethod: FirFunction,
|
firMethod: FirMemberFunction<*>,
|
||||||
methodId: CallableId,
|
methodId: CallableId,
|
||||||
name: Name,
|
name: Name,
|
||||||
isAccessor: Boolean = false,
|
isAccessor: Boolean = false,
|
||||||
propertyId: CallableId? = null
|
propertyId: CallableId? = null
|
||||||
): ConeCallableSymbol {
|
): FirFunctionSymbol<*> {
|
||||||
require(firMethod is FirCallableMemberDeclaration)
|
|
||||||
val memberContext = context.copyWithNewDefaultTypeQualifiers(typeQualifierResolver, jsr305State, firMethod.annotations)
|
val memberContext = context.copyWithNewDefaultTypeQualifiers(typeQualifierResolver, jsr305State, firMethod.annotations)
|
||||||
|
|
||||||
val predefinedEnhancementInfo =
|
val predefinedEnhancementInfo =
|
||||||
@@ -169,7 +167,6 @@ class JavaClassEnhancementScope(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
val symbol = if (!isAccessor) FirFunctionSymbol(methodId) else FirAccessorSymbol(callableId = propertyId!!, accessorId = methodId)
|
|
||||||
val newValueParameters = firMethod.valueParameters.zip(newValueParameterInfo) { valueParameter, newInfo ->
|
val newValueParameters = firMethod.valueParameters.zip(newValueParameterInfo) { valueParameter, newInfo ->
|
||||||
val (newTypeRef, newDefaultValue) = newInfo
|
val (newTypeRef, newDefaultValue) = newInfo
|
||||||
with(valueParameter) {
|
with(valueParameter) {
|
||||||
@@ -182,27 +179,29 @@ class JavaClassEnhancementScope(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val function = when (firMethod) {
|
val function: FirMemberFunction<*> = when (firMethod) {
|
||||||
is FirJavaConstructor -> FirConstructorImpl(
|
is FirJavaConstructor -> FirConstructorImpl(
|
||||||
this@JavaClassEnhancementScope.session, null, symbol as FirFunctionSymbol,
|
this@JavaClassEnhancementScope.session, null, FirConstructorSymbol(methodId),
|
||||||
newReceiverTypeRef, newReturnTypeRef
|
newReceiverTypeRef, newReturnTypeRef
|
||||||
).apply {
|
).apply {
|
||||||
this.valueParameters += newValueParameters
|
this.valueParameters += newValueParameters
|
||||||
this.typeParameters += firMethod.typeParameters
|
this.typeParameters += firMethod.typeParameters
|
||||||
}
|
}
|
||||||
else -> FirMemberFunctionImpl(
|
else -> FirMemberFunctionImpl(
|
||||||
this@JavaClassEnhancementScope.session, null, symbol, name,
|
this@JavaClassEnhancementScope.session, null,
|
||||||
newReceiverTypeRef, newReturnTypeRef
|
if (!isAccessor) FirNamedFunctionSymbol(methodId)
|
||||||
|
else FirAccessorSymbol(callableId = propertyId!!, accessorId = methodId),
|
||||||
|
name, newReceiverTypeRef, newReturnTypeRef
|
||||||
).apply {
|
).apply {
|
||||||
this.valueParameters += newValueParameters
|
this.valueParameters += newValueParameters
|
||||||
this.typeParameters += firMethod.typeParameters
|
this.typeParameters += firMethod.typeParameters
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function.apply {
|
(function as FirAbstractCallableMember<*>).apply {
|
||||||
status = firMethod.status as FirDeclarationStatusImpl
|
status = firMethod.status as FirDeclarationStatusImpl
|
||||||
annotations += firMethod.annotations
|
annotations += firMethod.annotations
|
||||||
}
|
}
|
||||||
return symbol
|
return function.symbol
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FirFunction.computeJvmDescriptor(): String = buildString {
|
private fun FirFunction.computeJvmDescriptor(): String = buildString {
|
||||||
@@ -255,7 +254,7 @@ class JavaClassEnhancementScope(
|
|||||||
|
|
||||||
private fun enhanceReceiverType(
|
private fun enhanceReceiverType(
|
||||||
ownerFunction: FirJavaMethod,
|
ownerFunction: FirJavaMethod,
|
||||||
overriddenMembers: List<FirCallableMemberDeclaration>,
|
overriddenMembers: List<FirCallableMemberDeclaration<*>>,
|
||||||
memberContext: FirJavaEnhancementContext
|
memberContext: FirJavaEnhancementContext
|
||||||
): FirResolvedTypeRef {
|
): FirResolvedTypeRef {
|
||||||
val signatureParts = ownerFunction.partsForValueParameter(
|
val signatureParts = ownerFunction.partsForValueParameter(
|
||||||
@@ -272,8 +271,8 @@ class JavaClassEnhancementScope(
|
|||||||
private data class EnhanceValueParameterResult(val typeRef: FirResolvedTypeRef, val defaultValue: FirExpression?)
|
private data class EnhanceValueParameterResult(val typeRef: FirResolvedTypeRef, val defaultValue: FirExpression?)
|
||||||
|
|
||||||
private fun enhanceValueParameter(
|
private fun enhanceValueParameter(
|
||||||
ownerFunction: FirCallableMemberDeclaration,
|
ownerFunction: FirCallableMemberDeclaration<*>,
|
||||||
overriddenMembers: List<FirCallableMemberDeclaration>,
|
overriddenMembers: List<FirCallableMemberDeclaration<*>>,
|
||||||
hasReceiver: Boolean,
|
hasReceiver: Boolean,
|
||||||
memberContext: FirJavaEnhancementContext,
|
memberContext: FirJavaEnhancementContext,
|
||||||
predefinedEnhancementInfo: PredefinedFunctionEnhancementInfo?,
|
predefinedEnhancementInfo: PredefinedFunctionEnhancementInfo?,
|
||||||
@@ -297,8 +296,8 @@ class JavaClassEnhancementScope(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun enhanceReturnType(
|
private fun enhanceReturnType(
|
||||||
owner: FirCallableMemberDeclaration,
|
owner: FirCallableMemberDeclaration<*>,
|
||||||
overriddenMembers: List<FirCallableMemberDeclaration>,
|
overriddenMembers: List<FirCallableMemberDeclaration<*>>,
|
||||||
memberContext: FirJavaEnhancementContext,
|
memberContext: FirJavaEnhancementContext,
|
||||||
predefinedEnhancementInfo: PredefinedFunctionEnhancementInfo?
|
predefinedEnhancementInfo: PredefinedFunctionEnhancementInfo?
|
||||||
): FirResolvedTypeRef {
|
): FirResolvedTypeRef {
|
||||||
@@ -315,9 +314,9 @@ class JavaClassEnhancementScope(
|
|||||||
return signatureParts.type
|
return signatureParts.type
|
||||||
}
|
}
|
||||||
|
|
||||||
private val overrideBindCache = mutableMapOf<Name, Map<ConeCallableSymbol?, List<ConeCallableSymbol>>>()
|
private val overrideBindCache = mutableMapOf<Name, Map<FirCallableSymbol<*>?, List<FirCallableSymbol<*>>>>()
|
||||||
|
|
||||||
private fun FirCallableMemberDeclaration.overriddenMembers(): List<FirCallableMemberDeclaration> {
|
private fun FirCallableMemberDeclaration<*>.overriddenMembers(): List<FirCallableMemberDeclaration<*>> {
|
||||||
val backMap = overrideBindCache.getOrPut(this.name) {
|
val backMap = overrideBindCache.getOrPut(this.name) {
|
||||||
useSiteScope.bindOverrides(this.name)
|
useSiteScope.bindOverrides(this.name)
|
||||||
useSiteScope
|
useSiteScope
|
||||||
@@ -325,36 +324,36 @@ class JavaClassEnhancementScope(
|
|||||||
.toList()
|
.toList()
|
||||||
.groupBy({ (_, key) -> key }, { (value) -> value })
|
.groupBy({ (_, key) -> key }, { (value) -> value })
|
||||||
}
|
}
|
||||||
return backMap[this.symbol]?.map { it.firUnsafe() } ?: emptyList()
|
return backMap[this.symbol]?.map { it.fir as FirCallableMemberDeclaration<*> } ?: emptyList()
|
||||||
}
|
}
|
||||||
|
|
||||||
private sealed class TypeInSignature {
|
private sealed class TypeInSignature {
|
||||||
abstract fun getTypeRef(member: FirCallableMemberDeclaration): FirTypeRef
|
abstract fun getTypeRef(member: FirCallableMemberDeclaration<*>): FirTypeRef
|
||||||
|
|
||||||
object Return : TypeInSignature() {
|
object Return : TypeInSignature() {
|
||||||
override fun getTypeRef(member: FirCallableMemberDeclaration): FirTypeRef = member.returnTypeRef
|
override fun getTypeRef(member: FirCallableMemberDeclaration<*>): FirTypeRef = member.returnTypeRef
|
||||||
}
|
}
|
||||||
|
|
||||||
object Receiver : TypeInSignature() {
|
object Receiver : TypeInSignature() {
|
||||||
override fun getTypeRef(member: FirCallableMemberDeclaration): FirTypeRef {
|
override fun getTypeRef(member: FirCallableMemberDeclaration<*>): FirTypeRef {
|
||||||
if (member is FirJavaMethod) return member.valueParameters[0].returnTypeRef
|
if (member is FirJavaMethod) return member.valueParameters[0].returnTypeRef
|
||||||
return member.receiverTypeRef!!
|
return member.receiverTypeRef!!
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class ValueParameter(val hasReceiver: Boolean, val index: Int) : TypeInSignature() {
|
class ValueParameter(val hasReceiver: Boolean, val index: Int) : TypeInSignature() {
|
||||||
override fun getTypeRef(member: FirCallableMemberDeclaration): FirTypeRef {
|
override fun getTypeRef(member: FirCallableMemberDeclaration<*>): FirTypeRef {
|
||||||
if (hasReceiver && member is FirJavaMethod) {
|
if (hasReceiver && member is FirJavaMethod) {
|
||||||
return (member as FirFunction).valueParameters[index + 1].returnTypeRef
|
return member.valueParameters[index + 1].returnTypeRef
|
||||||
}
|
}
|
||||||
return (member as FirFunction).valueParameters[index].returnTypeRef
|
return (member as FirFunction).valueParameters[index].returnTypeRef
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FirCallableMemberDeclaration.partsForValueParameter(
|
private fun FirCallableMemberDeclaration<*>.partsForValueParameter(
|
||||||
typeQualifierResolver: FirAnnotationTypeQualifierResolver,
|
typeQualifierResolver: FirAnnotationTypeQualifierResolver,
|
||||||
overriddenMembers: List<FirCallableMemberDeclaration>,
|
overriddenMembers: List<FirCallableMemberDeclaration<*>>,
|
||||||
// TODO: investigate if it's really can be a null (check properties' with extension overrides in Java)
|
// TODO: investigate if it's really can be a null (check properties' with extension overrides in Java)
|
||||||
parameterContainer: FirAnnotationContainer?,
|
parameterContainer: FirAnnotationContainer?,
|
||||||
methodContext: FirJavaEnhancementContext,
|
methodContext: FirJavaEnhancementContext,
|
||||||
@@ -370,9 +369,9 @@ class JavaClassEnhancementScope(
|
|||||||
typeInSignature
|
typeInSignature
|
||||||
)
|
)
|
||||||
|
|
||||||
private fun FirCallableMemberDeclaration.parts(
|
private fun FirCallableMemberDeclaration<*>.parts(
|
||||||
typeQualifierResolver: FirAnnotationTypeQualifierResolver,
|
typeQualifierResolver: FirAnnotationTypeQualifierResolver,
|
||||||
overriddenMembers: List<FirCallableMemberDeclaration>,
|
overriddenMembers: List<FirCallableMemberDeclaration<*>>,
|
||||||
typeContainer: FirAnnotationContainer?,
|
typeContainer: FirAnnotationContainer?,
|
||||||
isCovariant: Boolean,
|
isCovariant: Boolean,
|
||||||
containerContext: FirJavaEnhancementContext,
|
containerContext: FirJavaEnhancementContext,
|
||||||
|
|||||||
+35
-42
@@ -13,18 +13,12 @@ import org.jetbrains.kotlin.fir.java.declarations.FirJavaClass
|
|||||||
import org.jetbrains.kotlin.fir.java.toNotNullConeKotlinType
|
import org.jetbrains.kotlin.fir.java.toNotNullConeKotlinType
|
||||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
||||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutorByMap
|
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutorByMap
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.firUnsafe
|
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.*
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.*
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirAbstractProviderBasedScope
|
import org.jetbrains.kotlin.fir.scopes.impl.FirAbstractProviderBasedScope
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeFunctionSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeVariableSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.*
|
import org.jetbrains.kotlin.fir.symbols.*
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirAccessorSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
|
||||||
import org.jetbrains.kotlin.fir.typeContext
|
import org.jetbrains.kotlin.fir.typeContext
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
|
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
|
||||||
@@ -42,7 +36,7 @@ class JavaClassUseSiteScope(
|
|||||||
if (klass is FirJavaClass) klass.javaTypeParameterStack else JavaTypeParameterStack.EMPTY
|
if (klass is FirJavaClass) klass.javaTypeParameterStack else JavaTypeParameterStack.EMPTY
|
||||||
|
|
||||||
//base symbol as key, overridden as value
|
//base symbol as key, overridden as value
|
||||||
internal val overriddenByBase = mutableMapOf<ConeCallableSymbol, ConeCallableSymbol?>()
|
internal val overriddenByBase = mutableMapOf<FirCallableSymbol<*>, FirCallableSymbol<*>?>()
|
||||||
|
|
||||||
private val context: ConeTypeContext = session.typeContext
|
private val context: ConeTypeContext = session.typeContext
|
||||||
|
|
||||||
@@ -64,9 +58,8 @@ class JavaClassUseSiteScope(
|
|||||||
substitutor
|
substitutor
|
||||||
)
|
)
|
||||||
|
|
||||||
private fun isOverriddenFunCheck(overriddenInJava: FirFunction, base: FirFunction): Boolean {
|
private fun isOverriddenFunCheck(overriddenInJava: FirNamedFunction, base: FirNamedFunction): Boolean {
|
||||||
overriddenInJava as FirCallableMemberDeclaration
|
val receiverTypeRef = base.receiverTypeRef
|
||||||
val receiverTypeRef = (base as FirCallableMemberDeclaration).receiverTypeRef
|
|
||||||
val baseParameterTypes = listOfNotNull(receiverTypeRef) + base.valueParameters.map { it.returnTypeRef }
|
val baseParameterTypes = listOfNotNull(receiverTypeRef) + base.valueParameters.map { it.returnTypeRef }
|
||||||
|
|
||||||
if (overriddenInJava.valueParameters.size != baseParameterTypes.size) return false
|
if (overriddenInJava.valueParameters.size != baseParameterTypes.size) return false
|
||||||
@@ -111,7 +104,7 @@ class JavaClassUseSiteScope(
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal fun bindOverrides(name: Name) {
|
internal fun bindOverrides(name: Name) {
|
||||||
val overrideCandidates = mutableSetOf<ConeFunctionSymbol>()
|
val overrideCandidates = mutableSetOf<FirFunctionSymbol<*>>()
|
||||||
declaredMemberScope.processFunctionsByName(name) {
|
declaredMemberScope.processFunctionsByName(name) {
|
||||||
overrideCandidates += it
|
overrideCandidates += it
|
||||||
NEXT
|
NEXT
|
||||||
@@ -124,29 +117,31 @@ class JavaClassUseSiteScope(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun ConeCallableSymbol.getOverridden(candidates: Set<ConeCallableSymbol>): ConeCallableSymbol? {
|
private fun FirCallableSymbol<*>.getOverridden(candidates: Set<FirCallableSymbol<*>>): FirCallableSymbol<*>? {
|
||||||
if (overriddenByBase.containsKey(this)) return overriddenByBase[this]
|
if (overriddenByBase.containsKey(this)) return overriddenByBase[this]
|
||||||
|
|
||||||
val overriding = when (this) {
|
val overriding = when (this) {
|
||||||
is FirFunctionSymbol -> {
|
is FirNamedFunctionSymbol -> {
|
||||||
val self = firUnsafe<FirFunction>()
|
val self = this.fir
|
||||||
self as FirCallableMemberDeclaration
|
|
||||||
candidates.firstOrNull {
|
candidates.firstOrNull {
|
||||||
val overridden = (it as? FirFunctionSymbol)?.fir as? FirFunction
|
val overridden = (it as? FirNamedFunctionSymbol)?.fir
|
||||||
overridden != null && self.modality != Modality.FINAL && isOverriddenFunCheck(overridden, self)
|
overridden != null && self.modality != Modality.FINAL && isOverriddenFunCheck(overridden, self)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
is FirConstructorSymbol, is FirFieldSymbol -> {
|
||||||
|
null
|
||||||
|
}
|
||||||
is FirPropertySymbol -> {
|
is FirPropertySymbol -> {
|
||||||
val self = fir as? FirProperty ?: return null
|
val self = fir
|
||||||
candidates.firstOrNull {
|
candidates.firstOrNull {
|
||||||
when (it) {
|
when (it) {
|
||||||
is FirFunctionSymbol -> {
|
is FirNamedFunctionSymbol -> {
|
||||||
val overridden = it.fir as FirNamedFunction
|
val overridden = it.fir
|
||||||
self.modality != Modality.FINAL && isOverriddenPropertyCheck(overridden, self)
|
self.modality != Modality.FINAL && isOverriddenPropertyCheck(overridden, self)
|
||||||
}
|
}
|
||||||
is FirPropertySymbol -> {
|
is FirPropertySymbol -> {
|
||||||
val overridden = it.fir
|
val overridden = it.fir
|
||||||
overridden is FirProperty && self.modality != Modality.FINAL && isOverriddenPropertyCheck(overridden, self)
|
self.modality != Modality.FINAL && isOverriddenPropertyCheck(overridden, self)
|
||||||
}
|
}
|
||||||
else -> false
|
else -> false
|
||||||
}
|
}
|
||||||
@@ -154,9 +149,9 @@ class JavaClassUseSiteScope(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
is FirAccessorSymbol -> {
|
is FirAccessorSymbol -> {
|
||||||
val self = fir as FirNamedFunction
|
val self = fir
|
||||||
candidates.firstOrNull {
|
candidates.firstOrNull {
|
||||||
val overridden = (it as? FirFunctionSymbol)?.fir as? FirNamedFunction
|
val overridden = (it as? FirNamedFunctionSymbol)?.fir
|
||||||
overridden != null && self.modality != Modality.FINAL && isOverriddenFunCheck(overridden, self)
|
overridden != null && self.modality != Modality.FINAL && isOverriddenFunCheck(overridden, self)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -167,8 +162,8 @@ class JavaClassUseSiteScope(
|
|||||||
return overriding
|
return overriding
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun processFunctionsByName(name: Name, processor: (ConeFunctionSymbol) -> ProcessorAction): ProcessorAction {
|
override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> ProcessorAction): ProcessorAction {
|
||||||
val overrideCandidates = mutableSetOf<ConeFunctionSymbol>()
|
val overrideCandidates = mutableSetOf<FirFunctionSymbol<*>>()
|
||||||
if (!declaredMemberScope.processFunctionsByName(name) {
|
if (!declaredMemberScope.processFunctionsByName(name) {
|
||||||
overrideCandidates += it
|
overrideCandidates += it
|
||||||
processor(it)
|
processor(it)
|
||||||
@@ -190,9 +185,9 @@ class JavaClassUseSiteScope(
|
|||||||
propertyName: Name,
|
propertyName: Name,
|
||||||
accessorName: Name,
|
accessorName: Name,
|
||||||
isGetter: Boolean,
|
isGetter: Boolean,
|
||||||
processor: (ConeVariableSymbol) -> ProcessorAction
|
processor: (FirCallableSymbol<*>) -> ProcessorAction
|
||||||
): ProcessorAction {
|
): ProcessorAction {
|
||||||
val overrideCandidates = mutableSetOf<ConeCallableSymbol>()
|
val overrideCandidates = mutableSetOf<FirCallableSymbol<*>>()
|
||||||
val klass = symbol.fir
|
val klass = symbol.fir
|
||||||
if (!declaredMemberScope.processPropertiesByName(propertyName) { variableSymbol ->
|
if (!declaredMemberScope.processPropertiesByName(propertyName) { variableSymbol ->
|
||||||
overrideCandidates += variableSymbol
|
overrideCandidates += variableSymbol
|
||||||
@@ -201,19 +196,17 @@ class JavaClassUseSiteScope(
|
|||||||
) return STOP
|
) return STOP
|
||||||
if (klass is FirJavaClass) {
|
if (klass is FirJavaClass) {
|
||||||
if (!declaredMemberScope.processFunctionsByName(accessorName) { functionSymbol ->
|
if (!declaredMemberScope.processFunctionsByName(accessorName) { functionSymbol ->
|
||||||
if (functionSymbol is FirFunctionSymbol) {
|
if (functionSymbol is FirNamedFunctionSymbol) {
|
||||||
val fir = functionSymbol.fir
|
val fir = functionSymbol.fir
|
||||||
if (fir is FirNamedFunction) {
|
if (fir.isStatic) {
|
||||||
if (fir.isStatic) {
|
return@processFunctionsByName NEXT
|
||||||
|
}
|
||||||
|
when (isGetter) {
|
||||||
|
true -> if (fir.valueParameters.isNotEmpty()) {
|
||||||
return@processFunctionsByName NEXT
|
return@processFunctionsByName NEXT
|
||||||
}
|
}
|
||||||
when (isGetter) {
|
false -> if (fir.valueParameters.size != 1) {
|
||||||
true -> if (fir.valueParameters.isNotEmpty()) {
|
return@processFunctionsByName NEXT
|
||||||
return@processFunctionsByName NEXT
|
|
||||||
}
|
|
||||||
false -> if (fir.valueParameters.size != 1) {
|
|
||||||
return@processFunctionsByName NEXT
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -222,8 +215,8 @@ class JavaClassUseSiteScope(
|
|||||||
accessorId = functionSymbol.callableId,
|
accessorId = functionSymbol.callableId,
|
||||||
callableId = CallableId(functionSymbol.callableId.packageName, functionSymbol.callableId.className, propertyName)
|
callableId = CallableId(functionSymbol.callableId.packageName, functionSymbol.callableId.className, propertyName)
|
||||||
)
|
)
|
||||||
if (functionSymbol is FirBasedSymbol<*>) {
|
if (functionSymbol is FirNamedFunctionSymbol) {
|
||||||
(functionSymbol.fir as? FirCallableMemberDeclaration)?.let { callableMember -> accessorSymbol.bind(callableMember) }
|
functionSymbol.fir.let { callableMember -> accessorSymbol.bind(callableMember) }
|
||||||
}
|
}
|
||||||
processor(accessorSymbol)
|
processor(accessorSymbol)
|
||||||
}
|
}
|
||||||
@@ -231,12 +224,12 @@ class JavaClassUseSiteScope(
|
|||||||
}
|
}
|
||||||
|
|
||||||
return superTypesScope.processPropertiesByName(propertyName) {
|
return superTypesScope.processPropertiesByName(propertyName) {
|
||||||
val firCallableMember = (it as FirBasedSymbol<*>).fir as? FirCallableMemberDeclaration
|
val firCallableMember = it.fir as? FirCallableMemberDeclaration<*>
|
||||||
if (firCallableMember?.isStatic == true) {
|
if (firCallableMember?.isStatic == true) {
|
||||||
NEXT
|
NEXT
|
||||||
} else {
|
} else {
|
||||||
val overriddenBy = it.getOverridden(overrideCandidates)
|
val overriddenBy = it.getOverridden(overrideCandidates)
|
||||||
if (overriddenBy == null && it is ConePropertySymbol) {
|
if (overriddenBy == null && it is FirVariableSymbol<*>) {
|
||||||
processor(it)
|
processor(it)
|
||||||
} else {
|
} else {
|
||||||
NEXT
|
NEXT
|
||||||
@@ -245,7 +238,7 @@ class JavaClassUseSiteScope(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun processPropertiesByName(name: Name, processor: (ConeVariableSymbol) -> ProcessorAction): ProcessorAction {
|
override fun processPropertiesByName(name: Name, processor: (FirCallableSymbol<*>) -> ProcessorAction): ProcessorAction {
|
||||||
val getterName = Name.identifier(getterPrefix + name.asString().capitalize())
|
val getterName = Name.identifier(getterPrefix + name.asString().capitalize())
|
||||||
return processAccessorFunctionsAndPropertiesByName(name, getterName, isGetter = true, processor = processor)
|
return processAccessorFunctionsAndPropertiesByName(name, getterName, isGetter = true, processor = processor)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -431,7 +431,7 @@ internal fun generateAccessExpression(session: FirSession, psi: PsiElement?, nam
|
|||||||
calleeReference = FirSimpleNamedReference(session, psi, name)
|
calleeReference = FirSimpleNamedReference(session, psi, name)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun generateResolvedAccessExpression(session: FirSession, psi: PsiElement?, variable: FirVariable): FirQualifiedAccessExpression =
|
internal fun generateResolvedAccessExpression(session: FirSession, psi: PsiElement?, variable: FirVariable<*>): FirQualifiedAccessExpression =
|
||||||
FirQualifiedAccessExpressionImpl(session, psi).apply {
|
FirQualifiedAccessExpressionImpl(session, psi).apply {
|
||||||
calleeReference = FirResolvedCallableReferenceImpl(session, psi, variable.name, variable.symbol)
|
calleeReference = FirResolvedCallableReferenceImpl(session, psi, variable.name, variable.symbol)
|
||||||
}
|
}
|
||||||
@@ -439,7 +439,7 @@ internal fun generateResolvedAccessExpression(session: FirSession, psi: PsiEleme
|
|||||||
internal fun generateDestructuringBlock(
|
internal fun generateDestructuringBlock(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
multiDeclaration: KtDestructuringDeclaration,
|
multiDeclaration: KtDestructuringDeclaration,
|
||||||
container: FirVariable,
|
container: FirVariable<*>,
|
||||||
tmpVariable: Boolean,
|
tmpVariable: Boolean,
|
||||||
extractAnnotationsTo: KtAnnotated.(FirAbstractAnnotatedElement) -> Unit,
|
extractAnnotationsTo: KtAnnotated.(FirAbstractAnnotatedElement) -> Unit,
|
||||||
toFirOrImplicitTypeRef: KtTypeReference?.() -> FirTypeRef
|
toFirOrImplicitTypeRef: KtTypeReference?.() -> FirTypeRef
|
||||||
@@ -465,14 +465,14 @@ internal fun generateDestructuringBlock(
|
|||||||
|
|
||||||
internal fun generateTemporaryVariable(
|
internal fun generateTemporaryVariable(
|
||||||
session: FirSession, psi: PsiElement?, name: Name, initializer: FirExpression
|
session: FirSession, psi: PsiElement?, name: Name, initializer: FirExpression
|
||||||
): FirVariable =
|
): FirVariable<*> =
|
||||||
FirVariableImpl(session, psi, name, FirImplicitTypeRefImpl(session, psi), false, initializer, FirVariableSymbol(name)).apply {
|
FirVariableImpl(session, psi, name, FirImplicitTypeRefImpl(session, psi), false, initializer, FirVariableSymbol(name)).apply {
|
||||||
symbol.bind(this)
|
symbol.bind(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun generateTemporaryVariable(
|
internal fun generateTemporaryVariable(
|
||||||
session: FirSession, psi: PsiElement?, specialName: String, initializer: FirExpression
|
session: FirSession, psi: PsiElement?, specialName: String, initializer: FirExpression
|
||||||
): FirVariable = generateTemporaryVariable(session, psi, Name.special("<$specialName>"), initializer)
|
): FirVariable<*> = generateTemporaryVariable(session, psi, Name.special("<$specialName>"), initializer)
|
||||||
|
|
||||||
private fun FirModifiableQualifiedAccess<*>.initializeLValue(
|
private fun FirModifiableQualifiedAccess<*>.initializeLValue(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl
|
|||||||
import org.jetbrains.kotlin.fir.expressions.impl.*
|
import org.jetbrains.kotlin.fir.expressions.impl.*
|
||||||
import org.jetbrains.kotlin.fir.references.FirResolvedCallableReferenceImpl
|
import org.jetbrains.kotlin.fir.references.FirResolvedCallableReferenceImpl
|
||||||
import org.jetbrains.kotlin.fir.symbols.CallableId
|
import org.jetbrains.kotlin.fir.symbols.CallableId
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl
|
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
@@ -35,7 +35,7 @@ internal fun KtClassOrObject.generateComponentFunctions(
|
|||||||
if (!ktParameter.hasValOrVar()) continue
|
if (!ktParameter.hasValOrVar()) continue
|
||||||
val name = Name.identifier("component$componentIndex")
|
val name = Name.identifier("component$componentIndex")
|
||||||
componentIndex++
|
componentIndex++
|
||||||
val symbol = FirFunctionSymbol(CallableId(packageFqName, classFqName, name))
|
val symbol = FirNamedFunctionSymbol(CallableId(packageFqName, classFqName, name))
|
||||||
firClass.addDeclaration(
|
firClass.addDeclaration(
|
||||||
FirMemberFunctionImpl(
|
FirMemberFunctionImpl(
|
||||||
session, ktParameter, symbol, name,
|
session, ktParameter, symbol, name,
|
||||||
@@ -76,7 +76,7 @@ internal fun KtClassOrObject.generateCopyFunction(
|
|||||||
firPrimaryConstructor: FirConstructor,
|
firPrimaryConstructor: FirConstructor,
|
||||||
toFirOrErrorTypeRef: KtTypeReference?.() -> FirTypeRef
|
toFirOrErrorTypeRef: KtTypeReference?.() -> FirTypeRef
|
||||||
) {
|
) {
|
||||||
val symbol = FirFunctionSymbol(CallableId(packageFqName, classFqName, copyName))
|
val symbol = FirNamedFunctionSymbol(CallableId(packageFqName, classFqName, copyName))
|
||||||
firClass.addDeclaration(
|
firClass.addDeclaration(
|
||||||
FirMemberFunctionImpl(
|
FirMemberFunctionImpl(
|
||||||
session, this, symbol, copyName,
|
session, this, symbol, copyName,
|
||||||
|
|||||||
@@ -403,7 +403,7 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
|
|||||||
val firConstructor = FirPrimaryConstructorImpl(
|
val firConstructor = FirPrimaryConstructorImpl(
|
||||||
session,
|
session,
|
||||||
this ?: owner,
|
this ?: owner,
|
||||||
FirFunctionSymbol(callableIdForClassConstructor()),
|
FirConstructorSymbol(callableIdForClassConstructor()),
|
||||||
this?.visibility ?: defaultVisibility(),
|
this?.visibility ?: defaultVisibility(),
|
||||||
this?.hasExpectModifier() ?: false,
|
this?.hasExpectModifier() ?: false,
|
||||||
this?.hasActualModifier() ?: false,
|
this?.hasActualModifier() ?: false,
|
||||||
@@ -625,7 +625,7 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
|
|||||||
FirMemberFunctionImpl(
|
FirMemberFunctionImpl(
|
||||||
session,
|
session,
|
||||||
function,
|
function,
|
||||||
FirFunctionSymbol(callableIdForName(function.nameAsSafeName, function.isLocal)),
|
FirNamedFunctionSymbol(callableIdForName(function.nameAsSafeName, function.isLocal)),
|
||||||
function.nameAsSafeName,
|
function.nameAsSafeName,
|
||||||
if (function.isLocal) Visibilities.LOCAL else function.visibility,
|
if (function.isLocal) Visibilities.LOCAL else function.visibility,
|
||||||
function.modality,
|
function.modality,
|
||||||
@@ -713,7 +713,7 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
|
|||||||
val firConstructor = FirConstructorImpl(
|
val firConstructor = FirConstructorImpl(
|
||||||
session,
|
session,
|
||||||
this,
|
this,
|
||||||
FirFunctionSymbol(callableIdForClassConstructor()),
|
FirConstructorSymbol(callableIdForClassConstructor()),
|
||||||
visibility,
|
visibility,
|
||||||
hasExpectModifier(),
|
hasExpectModifier(),
|
||||||
hasActualModifier(),
|
hasActualModifier(),
|
||||||
|
|||||||
+1
-2
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.fir.deserialization
|
|||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirClassImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirClassImpl
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirEnumEntryImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirEnumEntryImpl
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.firUnsafe
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTagImpl
|
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTagImpl
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.impl.ConeClassTypeImpl
|
import org.jetbrains.kotlin.fir.types.impl.ConeClassTypeImpl
|
||||||
@@ -57,7 +56,7 @@ fun deserializeClassToSymbol(
|
|||||||
classId, classProto, nameResolver, session,
|
classId, classProto, nameResolver, session,
|
||||||
defaultAnnotationDeserializer ?: FirBuiltinAnnotationDeserializer(session)
|
defaultAnnotationDeserializer ?: FirBuiltinAnnotationDeserializer(session)
|
||||||
)
|
)
|
||||||
typeParameters += context.typeDeserializer.ownTypeParameters.map { it.firUnsafe() }
|
typeParameters += context.typeDeserializer.ownTypeParameters.map { it.fir }
|
||||||
annotations += context.annotationDeserializer.loadClassAnnotations(classProto, context.nameResolver)
|
annotations += context.annotationDeserializer.loadClassAnnotations(classProto, context.nameResolver)
|
||||||
|
|
||||||
val typeDeserializer = context.typeDeserializer
|
val typeDeserializer = context.typeDeserializer
|
||||||
|
|||||||
+6
-10
@@ -11,12 +11,8 @@ import org.jetbrains.kotlin.fir.declarations.*
|
|||||||
import org.jetbrains.kotlin.fir.declarations.impl.*
|
import org.jetbrains.kotlin.fir.declarations.impl.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
import org.jetbrains.kotlin.fir.expressions.impl.FirExpressionStub
|
import org.jetbrains.kotlin.fir.expressions.impl.FirExpressionStub
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.firUnsafe
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.CallableId
|
import org.jetbrains.kotlin.fir.symbols.CallableId
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.impl.ConeClassTypeImpl
|
import org.jetbrains.kotlin.fir.types.impl.ConeClassTypeImpl
|
||||||
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
|
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
|
||||||
@@ -146,7 +142,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
|
|||||||
emptyList() /* TODO */
|
emptyList() /* TODO */
|
||||||
)
|
)
|
||||||
).apply {
|
).apply {
|
||||||
typeParameters += local.typeDeserializer.ownTypeParameters.map { it.firUnsafe() }
|
typeParameters += local.typeDeserializer.ownTypeParameters.map { it.fir }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -183,7 +179,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
|
|||||||
} else null,
|
} else null,
|
||||||
delegate = null
|
delegate = null
|
||||||
).apply {
|
).apply {
|
||||||
typeParameters += local.typeDeserializer.ownTypeParameters.map { it.firUnsafe() }
|
typeParameters += local.typeDeserializer.ownTypeParameters.map { it.fir }
|
||||||
annotations += c.annotationDeserializer.loadPropertyAnnotations(proto, local.nameResolver)
|
annotations += c.annotationDeserializer.loadPropertyAnnotations(proto, local.nameResolver)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -200,7 +196,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
|
|||||||
c.versionRequirementTable
|
c.versionRequirementTable
|
||||||
|
|
||||||
val callableName = c.nameResolver.getName(proto.name)
|
val callableName = c.nameResolver.getName(proto.name)
|
||||||
val symbol = FirFunctionSymbol(CallableId(c.packageFqName, c.relativeClassName, callableName))
|
val symbol = FirNamedFunctionSymbol(CallableId(c.packageFqName, c.relativeClassName, callableName))
|
||||||
val local = c.childContext(proto.typeParameterList)
|
val local = c.childContext(proto.typeParameterList)
|
||||||
|
|
||||||
// TODO: support contracts
|
// TODO: support contracts
|
||||||
@@ -223,7 +219,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
|
|||||||
receiverTypeRef = proto.receiverType(local.typeTable)?.toTypeRef(local),
|
receiverTypeRef = proto.receiverType(local.typeTable)?.toTypeRef(local),
|
||||||
returnTypeRef = proto.returnType(local.typeTable).toTypeRef(local)
|
returnTypeRef = proto.returnType(local.typeTable).toTypeRef(local)
|
||||||
).apply {
|
).apply {
|
||||||
typeParameters += local.typeDeserializer.ownTypeParameters.map { it.firUnsafe() }
|
typeParameters += local.typeDeserializer.ownTypeParameters.map { it.fir }
|
||||||
valueParameters += local.memberDeserializer.valueParameters(proto.valueParameterList)
|
valueParameters += local.memberDeserializer.valueParameters(proto.valueParameterList)
|
||||||
annotations += local.annotationDeserializer.loadFunctionAnnotations(proto, local.nameResolver)
|
annotations += local.annotationDeserializer.loadFunctionAnnotations(proto, local.nameResolver)
|
||||||
}
|
}
|
||||||
@@ -232,7 +228,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
|
|||||||
fun loadConstructor(proto: ProtoBuf.Constructor, klass: FirRegularClass): FirConstructor {
|
fun loadConstructor(proto: ProtoBuf.Constructor, klass: FirRegularClass): FirConstructor {
|
||||||
val flags = proto.flags
|
val flags = proto.flags
|
||||||
val relativeClassName = c.relativeClassName!!
|
val relativeClassName = c.relativeClassName!!
|
||||||
val symbol = FirFunctionSymbol(CallableId(c.packageFqName, relativeClassName, relativeClassName.shortName()))
|
val symbol = FirConstructorSymbol(CallableId(c.packageFqName, relativeClassName, relativeClassName.shortName()))
|
||||||
val local = c.childContext(emptyList())
|
val local = c.childContext(emptyList())
|
||||||
val isPrimary = !Flags.IS_SECONDARY.get(flags)
|
val isPrimary = !Flags.IS_SECONDARY.get(flags)
|
||||||
|
|
||||||
|
|||||||
+8
-16
@@ -8,10 +8,8 @@ package org.jetbrains.kotlin.fir.deserialization
|
|||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirTypeParameterImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirTypeParameterImpl
|
||||||
import org.jetbrains.kotlin.fir.resolve.toTypeProjection
|
import org.jetbrains.kotlin.fir.resolve.toTypeProjection
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.firUnsafe
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.*
|
import org.jetbrains.kotlin.fir.symbols.*
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.fir.types.impl.ConeAbbreviatedTypeImpl
|
import org.jetbrains.kotlin.fir.types.impl.ConeAbbreviatedTypeImpl
|
||||||
@@ -68,11 +66,11 @@ class FirTypeDeserializer(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val typeParameterDescriptors =
|
private val typeParameterDescriptors: Map<Int, FirTypeParameterSymbol> =
|
||||||
if (typeParameterProtos.isEmpty()) {
|
if (typeParameterProtos.isEmpty()) {
|
||||||
mapOf<Int, ConeTypeParameterSymbol>()
|
mapOf()
|
||||||
} else {
|
} else {
|
||||||
val result = LinkedHashMap<Int, ConeTypeParameterSymbol>()
|
val result = LinkedHashMap<Int, FirTypeParameterSymbol>()
|
||||||
for ((index, proto) in typeParameterProtos.withIndex()) {
|
for ((index, proto) in typeParameterProtos.withIndex()) {
|
||||||
if (!proto.hasId()) continue
|
if (!proto.hasId()) continue
|
||||||
val name = nameResolver.getName(proto.name)
|
val name = nameResolver.getName(proto.name)
|
||||||
@@ -94,8 +92,8 @@ class FirTypeDeserializer(
|
|||||||
init {
|
init {
|
||||||
for ((index, proto) in typeParameterProtos.withIndex()) {
|
for ((index, proto) in typeParameterProtos.withIndex()) {
|
||||||
if (!proto.hasId()) continue
|
if (!proto.hasId()) continue
|
||||||
val symbol = typeParameterDescriptors[proto.id] as FirTypeParameterSymbol
|
val symbol = typeParameterDescriptors[proto.id]!!
|
||||||
val declaration = symbol.firUnsafe<FirTypeParameterImpl>()
|
val declaration = symbol.fir as FirTypeParameterImpl
|
||||||
declaration.apply {
|
declaration.apply {
|
||||||
proto.upperBoundList.mapTo(bounds) {
|
proto.upperBoundList.mapTo(bounds) {
|
||||||
FirResolvedTypeRefImpl(session, null, type(it), emptyList())
|
FirResolvedTypeRefImpl(session, null, type(it), emptyList())
|
||||||
@@ -104,17 +102,11 @@ class FirTypeDeserializer(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val ownTypeParameters: List<ConeTypeParameterSymbol>
|
val ownTypeParameters: List<FirTypeParameterSymbol>
|
||||||
get() = typeParameterDescriptors.values.toList()
|
get() = typeParameterDescriptors.values.toList()
|
||||||
|
|
||||||
|
|
||||||
fun ConeClassLikeSymbol.typeParameters(): List<ConeTypeParameterSymbol> = when (this) {
|
fun FirClassLikeSymbol<*>.typeParameters(): List<ConeTypeParameterSymbol> = fir.typeParameters.map { it.symbol }
|
||||||
is FirTypeAliasSymbol -> fir.typeParameters
|
|
||||||
is FirClassSymbol -> fir.typeParameters
|
|
||||||
else -> error("?!id:2")
|
|
||||||
}.map {
|
|
||||||
it.symbol
|
|
||||||
}
|
|
||||||
|
|
||||||
fun simpleType(proto: ProtoBuf.Type): ConeLookupTagBasedType? {
|
fun simpleType(proto: ProtoBuf.Type): ConeLookupTagBasedType? {
|
||||||
|
|
||||||
|
|||||||
+4
-4
@@ -7,16 +7,16 @@ package org.jetbrains.kotlin.fir.resolve
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.symbols.CallableId
|
import org.jetbrains.kotlin.fir.symbols.CallableId
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
|
||||||
abstract class AbstractFirSymbolProvider : FirSymbolProvider() {
|
abstract class AbstractFirSymbolProvider : FirSymbolProvider() {
|
||||||
protected val classCache = HashMap<ClassId, ConeClassLikeSymbol?>()
|
protected val classCache = HashMap<ClassId, FirClassLikeSymbol<*>?>()
|
||||||
protected val topLevelCallableCache = HashMap<CallableId, List<ConeCallableSymbol>>()
|
protected val topLevelCallableCache = HashMap<CallableId, List<FirCallableSymbol<*>>>()
|
||||||
protected val packageCache = HashMap<FqName, FqName?>()
|
protected val packageCache = HashMap<FqName, FqName?>()
|
||||||
|
|
||||||
protected inline fun <K, V : Any?> MutableMap<K, V>.lookupCacheOrCalculate(key: K, crossinline l: (K) -> V): V? {
|
protected inline fun <K, V : Any?> MutableMap<K, V>.lookupCacheOrCalculate(key: K, crossinline l: (K) -> V): V? {
|
||||||
|
|||||||
@@ -10,7 +10,8 @@ import org.jetbrains.kotlin.fir.declarations.FirFile
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
|
||||||
import org.jetbrains.kotlin.fir.service
|
import org.jetbrains.kotlin.fir.service
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol
|
import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
@@ -18,9 +19,9 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
abstract class FirProvider : FirSymbolProvider() {
|
abstract class FirProvider : FirSymbolProvider() {
|
||||||
abstract fun getFirClassifierByFqName(fqName: ClassId): FirMemberDeclaration?
|
abstract fun getFirClassifierByFqName(fqName: ClassId): FirMemberDeclaration?
|
||||||
|
|
||||||
abstract override fun getClassLikeSymbolByFqName(classId: ClassId): ConeClassLikeSymbol?
|
abstract override fun getClassLikeSymbolByFqName(classId: ClassId): FirClassLikeSymbol<*>?
|
||||||
|
|
||||||
abstract override fun getTopLevelCallableSymbols(packageFqName: FqName, name: Name): List<ConeCallableSymbol>
|
abstract override fun getTopLevelCallableSymbols(packageFqName: FqName, name: Name): List<FirCallableSymbol<*>>
|
||||||
|
|
||||||
override fun getPackage(fqName: FqName): FqName? {
|
override fun getPackage(fqName: FqName): FqName? {
|
||||||
if (getFirFilesByPackage(fqName).isNotEmpty()) return fqName
|
if (getFirFilesByPackage(fqName).isNotEmpty()) return fqName
|
||||||
|
|||||||
@@ -11,13 +11,15 @@ import org.jetbrains.kotlin.fir.scopes.FirScope
|
|||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||||
import org.jetbrains.kotlin.fir.service
|
import org.jetbrains.kotlin.fir.service
|
||||||
import org.jetbrains.kotlin.fir.symbols.*
|
import org.jetbrains.kotlin.fir.symbols.*
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
abstract class FirSymbolProvider {
|
abstract class FirSymbolProvider {
|
||||||
|
|
||||||
abstract fun getClassLikeSymbolByFqName(classId: ClassId): ConeClassLikeSymbol?
|
abstract fun getClassLikeSymbolByFqName(classId: ClassId): FirClassLikeSymbol<*>?
|
||||||
|
|
||||||
fun getSymbolByLookupTag(lookupTag: ConeClassifierLookupTag): ConeClassifierSymbol? {
|
fun getSymbolByLookupTag(lookupTag: ConeClassifierLookupTag): ConeClassifierSymbol? {
|
||||||
return when (lookupTag) {
|
return when (lookupTag) {
|
||||||
@@ -35,7 +37,7 @@ abstract class FirSymbolProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract fun getTopLevelCallableSymbols(packageFqName: FqName, name: Name): List<ConeCallableSymbol>
|
abstract fun getTopLevelCallableSymbols(packageFqName: FqName, name: Name): List<FirCallableSymbol<*>>
|
||||||
|
|
||||||
abstract fun getClassDeclaredMemberScope(classId: ClassId): FirScope?
|
abstract fun getClassDeclaredMemberScope(classId: ClassId): FirScope?
|
||||||
abstract fun getClassUseSiteMemberScope(
|
abstract fun getClassUseSiteMemberScope(
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.render
|
|||||||
import org.jetbrains.kotlin.fir.service
|
import org.jetbrains.kotlin.fir.service
|
||||||
import org.jetbrains.kotlin.fir.symbols.*
|
import org.jetbrains.kotlin.fir.symbols.*
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.fir.types.impl.ConeAbbreviatedTypeImpl
|
import org.jetbrains.kotlin.fir.types.impl.ConeAbbreviatedTypeImpl
|
||||||
import org.jetbrains.kotlin.fir.types.impl.ConeClassTypeImpl
|
import org.jetbrains.kotlin.fir.types.impl.ConeClassTypeImpl
|
||||||
@@ -52,6 +53,8 @@ fun ConeClassifierLookupTag.toSymbol(useSiteSession: FirSession): ConeClassifier
|
|||||||
else -> error("sealed ${this::class}")
|
else -> error("sealed ${this::class}")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun ConeTypeParameterLookupTag.toSymbol(): FirTypeParameterSymbol = this.symbol as FirTypeParameterSymbol
|
||||||
|
|
||||||
fun ConeClassLikeLookupTag.constructClassType(typeArguments: Array<ConeKotlinTypeProjection>, isNullable: Boolean): ConeLookupTagBasedType {
|
fun ConeClassLikeLookupTag.constructClassType(typeArguments: Array<ConeKotlinTypeProjection>, isNullable: Boolean): ConeLookupTagBasedType {
|
||||||
return ConeClassTypeImpl(this, typeArguments, isNullable)
|
return ConeClassTypeImpl(this, typeArguments, isNullable)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,14 +7,11 @@ package org.jetbrains.kotlin.fir.resolve
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.firSafeNullable
|
import org.jetbrains.kotlin.fir.resolve.transformers.firSafeNullable
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.firUnsafe
|
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirClassSubstitutionScope
|
import org.jetbrains.kotlin.fir.scopes.impl.FirClassSubstitutionScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirCompositeScope
|
import org.jetbrains.kotlin.fir.scopes.impl.FirCompositeScope
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterSymbol
|
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.fir.types.impl.ConeClassTypeImpl
|
import org.jetbrains.kotlin.fir.types.impl.ConeClassTypeImpl
|
||||||
@@ -33,8 +30,7 @@ fun ConeKotlinType.scope(useSiteSession: FirSession, scopeSession: ScopeSession)
|
|||||||
}
|
}
|
||||||
is ConeTypeParameterType -> {
|
is ConeTypeParameterType -> {
|
||||||
// TODO: support LibraryTypeParameterSymbol or get rid of it
|
// TODO: support LibraryTypeParameterSymbol or get rid of it
|
||||||
val toSymbol = this.lookupTag.toSymbol(useSiteSession)?.takeIf { it is FirBasedSymbol<*> } ?: return null
|
val fir = lookupTag.toSymbol().fir
|
||||||
val fir = toSymbol.firUnsafe<FirTypeParameter>()
|
|
||||||
FirCompositeScope(
|
FirCompositeScope(
|
||||||
fir.bounds.mapNotNullTo(mutableListOf()) {
|
fir.bounds.mapNotNullTo(mutableListOf()) {
|
||||||
it.coneTypeUnsafe<ConeKotlinType>().scope(useSiteSession, scopeSession)
|
it.coneTypeUnsafe<ConeKotlinType>().scope(useSiteSession, scopeSession)
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ fun FirRegularClass.buildDefaultUseSiteScope(useSiteSession: FirSession, builder
|
|||||||
private fun ConeClassLikeType.wrapSubstitutionScopeIfNeed(
|
private fun ConeClassLikeType.wrapSubstitutionScopeIfNeed(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
useSiteScope: FirScope,
|
useSiteScope: FirScope,
|
||||||
declaration: FirClassLikeDeclaration,
|
declaration: FirClassLikeDeclaration<*>,
|
||||||
builder: ScopeSession
|
builder: ScopeSession
|
||||||
): FirScope {
|
): FirScope {
|
||||||
if (this.typeArguments.isEmpty()) return useSiteScope
|
if (this.typeArguments.isEmpty()) return useSiteScope
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedImportImpl
|
|||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier
|
import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier
|
||||||
import org.jetbrains.kotlin.fir.expressions.impl.FirQualifiedAccessExpressionImpl
|
import org.jetbrains.kotlin.fir.expressions.impl.FirQualifiedAccessExpressionImpl
|
||||||
import org.jetbrains.kotlin.fir.references.FirResolvedCallableReferenceImpl
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
|
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
import org.jetbrains.kotlin.fir.resolve.constructClassType
|
import org.jetbrains.kotlin.fir.resolve.constructClassType
|
||||||
@@ -29,9 +28,7 @@ import org.jetbrains.kotlin.fir.scopes.impl.FirExplicitSimpleImportingScope
|
|||||||
import org.jetbrains.kotlin.fir.scopes.processClassifiersByNameWithAction
|
import org.jetbrains.kotlin.fir.scopes.processClassifiersByNameWithAction
|
||||||
import org.jetbrains.kotlin.fir.service
|
import org.jetbrains.kotlin.fir.service
|
||||||
import org.jetbrains.kotlin.fir.symbols.*
|
import org.jetbrains.kotlin.fir.symbols.*
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
@@ -93,7 +90,7 @@ class CheckerSinkImpl(override val components: InferenceComponents, var continua
|
|||||||
|
|
||||||
|
|
||||||
class Candidate(
|
class Candidate(
|
||||||
val symbol: ConeSymbol,
|
val symbol: FirBasedSymbol<*>,
|
||||||
val dispatchReceiverValue: ClassDispatchReceiverValue?,
|
val dispatchReceiverValue: ClassDispatchReceiverValue?,
|
||||||
val implicitExtensionReceiverValue: ImplicitReceiverValue?,
|
val implicitExtensionReceiverValue: ImplicitReceiverValue?,
|
||||||
val explicitReceiverKind: ExplicitReceiverKind,
|
val explicitReceiverKind: ExplicitReceiverKind,
|
||||||
@@ -136,14 +133,14 @@ enum class TowerDataKind {
|
|||||||
|
|
||||||
interface TowerScopeLevel {
|
interface TowerScopeLevel {
|
||||||
|
|
||||||
sealed class Token<out T : ConeSymbol> {
|
sealed class Token<out T : FirBasedSymbol<*>> {
|
||||||
object Properties : Token<ConePropertySymbol>()
|
object Properties : Token<FirPropertySymbol>()
|
||||||
|
|
||||||
object Functions : Token<ConeFunctionSymbol>()
|
object Functions : Token<FirFunctionSymbol<*>>()
|
||||||
object Objects : Token<ConeClassifierSymbol>()
|
object Objects : Token<FirBasedSymbol<*>>()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun <T : ConeSymbol> processElementsByName(
|
fun <T : FirBasedSymbol<*>> processElementsByName(
|
||||||
token: Token<T>,
|
token: Token<T>,
|
||||||
name: Name,
|
name: Name,
|
||||||
explicitReceiver: ExpressionReceiverValue?,
|
explicitReceiver: ExpressionReceiverValue?,
|
||||||
@@ -159,7 +156,7 @@ interface TowerScopeLevel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
object Empty : TowerScopeLevel {
|
object Empty : TowerScopeLevel {
|
||||||
override fun <T : ConeSymbol> processElementsByName(
|
override fun <T : FirBasedSymbol<*>> processElementsByName(
|
||||||
token: Token<T>,
|
token: Token<T>,
|
||||||
name: Name,
|
name: Name,
|
||||||
explicitReceiver: ExpressionReceiverValue?,
|
explicitReceiver: ExpressionReceiverValue?,
|
||||||
@@ -169,15 +166,15 @@ interface TowerScopeLevel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
abstract class SessionBasedTowerLevel(val session: FirSession) : TowerScopeLevel {
|
abstract class SessionBasedTowerLevel(val session: FirSession) : TowerScopeLevel {
|
||||||
protected fun ConeSymbol.dispatchReceiverValue(): ClassDispatchReceiverValue? {
|
protected fun FirBasedSymbol<*>.dispatchReceiverValue(): ClassDispatchReceiverValue? {
|
||||||
return when (this) {
|
return when (this) {
|
||||||
is FirFunctionSymbol -> fir.dispatchReceiverValue(session)
|
is FirNamedFunctionSymbol -> fir.dispatchReceiverValue(session)
|
||||||
is FirClassSymbol -> ClassDispatchReceiverValue(fir.symbol)
|
is FirClassSymbol -> ClassDispatchReceiverValue(fir.symbol)
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected fun ConeCallableSymbol.hasConsistentExtensionReceiver(extensionReceiver: ReceiverValue?): Boolean {
|
protected fun FirCallableSymbol<*>.hasConsistentExtensionReceiver(extensionReceiver: ReceiverValue?): Boolean {
|
||||||
val hasExtensionReceiver = hasExtensionReceiver()
|
val hasExtensionReceiver = hasExtensionReceiver()
|
||||||
return hasExtensionReceiver == (extensionReceiver != null)
|
return hasExtensionReceiver == (extensionReceiver != null)
|
||||||
}
|
}
|
||||||
@@ -196,7 +193,7 @@ class MemberScopeTowerLevel(
|
|||||||
val scopeSession: ScopeSession
|
val scopeSession: ScopeSession
|
||||||
) : SessionBasedTowerLevel(session) {
|
) : SessionBasedTowerLevel(session) {
|
||||||
|
|
||||||
private fun <T : ConeSymbol> processMembers(
|
private fun <T : FirBasedSymbol<*>> processMembers(
|
||||||
output: TowerScopeLevel.TowerScopeLevelProcessor<T>,
|
output: TowerScopeLevel.TowerScopeLevelProcessor<T>,
|
||||||
explicitExtensionReceiver: ExpressionReceiverValue?,
|
explicitExtensionReceiver: ExpressionReceiverValue?,
|
||||||
processScopeMembers: FirScope.(processor: (T) -> ProcessorAction) -> ProcessorAction
|
processScopeMembers: FirScope.(processor: (T) -> ProcessorAction) -> ProcessorAction
|
||||||
@@ -205,11 +202,11 @@ class MemberScopeTowerLevel(
|
|||||||
val extensionReceiver = implicitExtensionReceiver ?: explicitExtensionReceiver
|
val extensionReceiver = implicitExtensionReceiver ?: explicitExtensionReceiver
|
||||||
val scope = dispatchReceiver.type.scope(session, scopeSession) ?: return ProcessorAction.NEXT
|
val scope = dispatchReceiver.type.scope(session, scopeSession) ?: return ProcessorAction.NEXT
|
||||||
if (scope.processScopeMembers { candidate ->
|
if (scope.processScopeMembers { candidate ->
|
||||||
if (candidate is ConeCallableSymbol && candidate.hasConsistentExtensionReceiver(extensionReceiver)) {
|
if (candidate is FirCallableSymbol<*> && candidate.hasConsistentExtensionReceiver(extensionReceiver)) {
|
||||||
// NB: we do not check dispatchReceiverValue != null here,
|
// NB: we do not check dispatchReceiverValue != null here,
|
||||||
// because of objects & constructors (see comments in dispatchReceiverValue() implementation)
|
// because of objects & constructors (see comments in dispatchReceiverValue() implementation)
|
||||||
output.consumeCandidate(candidate, candidate.dispatchReceiverValue(), implicitExtensionReceiver)
|
output.consumeCandidate(candidate, candidate.dispatchReceiverValue(), implicitExtensionReceiver)
|
||||||
} else if (candidate is ConeClassLikeSymbol) {
|
} else if (candidate is FirClassLikeSymbol<*>) {
|
||||||
output.consumeCandidate(candidate, null, implicitExtensionReceiver)
|
output.consumeCandidate(candidate, null, implicitExtensionReceiver)
|
||||||
} else {
|
} else {
|
||||||
ProcessorAction.NEXT
|
ProcessorAction.NEXT
|
||||||
@@ -222,7 +219,7 @@ class MemberScopeTowerLevel(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun <T : ConeSymbol> processElementsByName(
|
override fun <T : FirBasedSymbol<*>> processElementsByName(
|
||||||
token: TowerScopeLevel.Token<T>,
|
token: TowerScopeLevel.Token<T>,
|
||||||
name: Name,
|
name: Name,
|
||||||
explicitReceiver: ExpressionReceiverValue?,
|
explicitReceiver: ExpressionReceiverValue?,
|
||||||
@@ -244,7 +241,7 @@ class MemberScopeTowerLevel(
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun ConeCallableSymbol.hasExtensionReceiver(): Boolean = (this as? FirCallableSymbol)?.fir?.receiverTypeRef != null
|
private fun FirCallableSymbol<*>.hasExtensionReceiver(): Boolean = this.fir.receiverTypeRef != null
|
||||||
|
|
||||||
// This is more like "scope-based tower level"
|
// This is more like "scope-based tower level"
|
||||||
// We can access here members of currently accessible scope which is not influenced by explicit receiver
|
// We can access here members of currently accessible scope which is not influenced by explicit receiver
|
||||||
@@ -258,7 +255,7 @@ class ScopeTowerLevel(
|
|||||||
val scope: FirScope,
|
val scope: FirScope,
|
||||||
val implicitExtensionReceiver: ImplicitReceiverValue? = null
|
val implicitExtensionReceiver: ImplicitReceiverValue? = null
|
||||||
) : SessionBasedTowerLevel(session) {
|
) : SessionBasedTowerLevel(session) {
|
||||||
override fun <T : ConeSymbol> processElementsByName(
|
override fun <T : FirBasedSymbol<*>> processElementsByName(
|
||||||
token: TowerScopeLevel.Token<T>,
|
token: TowerScopeLevel.Token<T>,
|
||||||
name: Name,
|
name: Name,
|
||||||
explicitReceiver: ExpressionReceiverValue?,
|
explicitReceiver: ExpressionReceiverValue?,
|
||||||
@@ -305,7 +302,7 @@ class ScopeTowerLevel(
|
|||||||
* Handles only statics and top-levels, DOES NOT handle objects/companions members
|
* Handles only statics and top-levels, DOES NOT handle objects/companions members
|
||||||
*/
|
*/
|
||||||
class QualifiedReceiverTowerLevel(session: FirSession) : SessionBasedTowerLevel(session) {
|
class QualifiedReceiverTowerLevel(session: FirSession) : SessionBasedTowerLevel(session) {
|
||||||
override fun <T : ConeSymbol> processElementsByName(
|
override fun <T : FirBasedSymbol<*>> processElementsByName(
|
||||||
token: TowerScopeLevel.Token<T>,
|
token: TowerScopeLevel.Token<T>,
|
||||||
name: Name,
|
name: Name,
|
||||||
explicitReceiver: ExpressionReceiverValue?,
|
explicitReceiver: ExpressionReceiverValue?,
|
||||||
@@ -329,8 +326,8 @@ class QualifiedReceiverTowerLevel(session: FirSession) : SessionBasedTowerLevel(
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
scope.processCallables(name, token.cast()) {
|
scope.processCallables(name, token.cast()) {
|
||||||
val fir = it.firUnsafe<FirCallableMemberDeclaration>()
|
val fir = it.fir
|
||||||
if (fir.isStatic || it.callableId.classId == null) {
|
if (fir is FirCallableMemberDeclaration<*> && fir.isStatic || it.callableId.classId == null) {
|
||||||
processor.consumeCandidate(it as T, null, null)
|
processor.consumeCandidate(it as T, null, null)
|
||||||
} else {
|
} else {
|
||||||
ProcessorAction.NEXT
|
ProcessorAction.NEXT
|
||||||
@@ -341,7 +338,7 @@ class QualifiedReceiverTowerLevel(session: FirSession) : SessionBasedTowerLevel(
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class QualifiedReceiverTowerDataConsumer<T : ConeSymbol>(
|
class QualifiedReceiverTowerDataConsumer<T : FirBasedSymbol<*>>(
|
||||||
val session: FirSession,
|
val session: FirSession,
|
||||||
val name: Name,
|
val name: Name,
|
||||||
val token: TowerScopeLevel.Token<T>,
|
val token: TowerScopeLevel.Token<T>,
|
||||||
@@ -599,7 +596,7 @@ class MultiplexerTowerDataConsumer(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class ExplicitReceiverTowerDataConsumer<T : ConeSymbol>(
|
class ExplicitReceiverTowerDataConsumer<T : FirBasedSymbol<*>>(
|
||||||
val session: FirSession,
|
val session: FirSession,
|
||||||
val name: Name,
|
val name: Name,
|
||||||
val token: TowerScopeLevel.Token<T>,
|
val token: TowerScopeLevel.Token<T>,
|
||||||
@@ -657,11 +654,11 @@ class ExplicitReceiverTowerDataConsumer<T : ConeSymbol>(
|
|||||||
dispatchReceiverValue: ClassDispatchReceiverValue?,
|
dispatchReceiverValue: ClassDispatchReceiverValue?,
|
||||||
implicitExtensionReceiverValue: ImplicitReceiverValue?
|
implicitExtensionReceiverValue: ImplicitReceiverValue?
|
||||||
): ProcessorAction {
|
): ProcessorAction {
|
||||||
if (symbol is FirFunctionSymbol && symbol.callableId.packageName.startsWith(defaultPackage)) {
|
if (symbol is FirNamedFunctionSymbol && symbol.callableId.packageName.startsWith(defaultPackage)) {
|
||||||
val explicitReceiverType = explicitReceiver.type
|
val explicitReceiverType = explicitReceiver.type
|
||||||
if (dispatchReceiverValue == null && explicitReceiverType is ConeClassType) {
|
if (dispatchReceiverValue == null && explicitReceiverType is ConeClassType) {
|
||||||
val declarationReceiverTypeRef =
|
val declarationReceiverTypeRef =
|
||||||
(symbol as? FirCallableSymbol)?.fir?.receiverTypeRef as? FirResolvedTypeRef
|
(symbol as? FirCallableSymbol<*>)?.fir?.receiverTypeRef as? FirResolvedTypeRef
|
||||||
val declarationReceiverType = declarationReceiverTypeRef?.type
|
val declarationReceiverType = declarationReceiverTypeRef?.type
|
||||||
if (declarationReceiverType is ConeClassType) {
|
if (declarationReceiverType is ConeClassType) {
|
||||||
if (!AbstractTypeChecker.isSubtypeOf(
|
if (!AbstractTypeChecker.isSubtypeOf(
|
||||||
@@ -699,7 +696,7 @@ class ExplicitReceiverTowerDataConsumer<T : ConeSymbol>(
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class NoExplicitReceiverTowerDataConsumer<T : ConeSymbol>(
|
class NoExplicitReceiverTowerDataConsumer<T : FirBasedSymbol<*>>(
|
||||||
val session: FirSession,
|
val session: FirSession,
|
||||||
val name: Name,
|
val name: Name,
|
||||||
val token: TowerScopeLevel.Token<T>,
|
val token: TowerScopeLevel.Token<T>,
|
||||||
@@ -962,7 +959,7 @@ class InvokeCandidateCollector(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FirCallableDeclaration.dispatchReceiverValue(session: FirSession): ClassDispatchReceiverValue? {
|
fun FirCallableDeclaration<*>.dispatchReceiverValue(session: FirSession): ClassDispatchReceiverValue? {
|
||||||
// TODO: this is not true at least for inner class constructors
|
// TODO: this is not true at least for inner class constructors
|
||||||
if (this is FirConstructor) return null
|
if (this is FirConstructor) return null
|
||||||
val id = (this.symbol as ConeCallableSymbol).callableId.classId ?: return null
|
val id = (this.symbol as ConeCallableSymbol).callableId.classId ?: return null
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.fir.resolve.calls
|
package org.jetbrains.kotlin.fir.resolve.calls
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeSymbol
|
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||||
import org.jetbrains.kotlin.resolve.calls.components.PostponedArgumentsAnalyzer
|
import org.jetbrains.kotlin.resolve.calls.components.PostponedArgumentsAnalyzer
|
||||||
import org.jetbrains.kotlin.resolve.calls.inference.model.ConstraintStorage
|
import org.jetbrains.kotlin.resolve.calls.inference.model.ConstraintStorage
|
||||||
import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind
|
import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind
|
||||||
@@ -28,7 +28,7 @@ class CandidateFactory(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun createCandidate(
|
fun createCandidate(
|
||||||
symbol: ConeSymbol,
|
symbol: FirBasedSymbol<*>,
|
||||||
dispatchReceiverValue: ClassDispatchReceiverValue?,
|
dispatchReceiverValue: ClassDispatchReceiverValue?,
|
||||||
implicitExtensionReceiverValue: ImplicitReceiverValue?,
|
implicitExtensionReceiverValue: ImplicitReceiverValue?,
|
||||||
explicitReceiverKind: ExplicitReceiverKind
|
explicitReceiverKind: ExplicitReceiverKind
|
||||||
|
|||||||
+3
-5
@@ -6,12 +6,10 @@
|
|||||||
package org.jetbrains.kotlin.fir.resolve.calls
|
package org.jetbrains.kotlin.fir.resolve.calls
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirCallableMemberDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirCallableMemberDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
|
||||||
import org.jetbrains.kotlin.fir.renderWithType
|
import org.jetbrains.kotlin.fir.renderWithType
|
||||||
import org.jetbrains.kotlin.fir.resolve.constructType
|
import org.jetbrains.kotlin.fir.resolve.constructType
|
||||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
||||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutorByMap
|
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutorByMap
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.firUnsafe
|
|
||||||
import org.jetbrains.kotlin.fir.service
|
import org.jetbrains.kotlin.fir.service
|
||||||
import org.jetbrains.kotlin.fir.symbols.StandardClassIds
|
import org.jetbrains.kotlin.fir.symbols.StandardClassIds
|
||||||
import org.jetbrains.kotlin.fir.symbols.invoke
|
import org.jetbrains.kotlin.fir.symbols.invoke
|
||||||
@@ -23,8 +21,8 @@ import org.jetbrains.kotlin.resolve.calls.inference.model.SimpleConstraintSystem
|
|||||||
|
|
||||||
internal object CreateFreshTypeVariableSubstitutorStage : ResolutionStage() {
|
internal object CreateFreshTypeVariableSubstitutorStage : ResolutionStage() {
|
||||||
override suspend fun check(candidate: Candidate, sink: CheckerSink, callInfo: CallInfo) {
|
override suspend fun check(candidate: Candidate, sink: CheckerSink, callInfo: CallInfo) {
|
||||||
val declaration = candidate.symbol.firUnsafe<FirDeclaration>()
|
val declaration = candidate.symbol.fir
|
||||||
if (declaration !is FirCallableMemberDeclaration || declaration.typeParameters.isEmpty()) {
|
if (declaration !is FirCallableMemberDeclaration<*> || declaration.typeParameters.isEmpty()) {
|
||||||
candidate.substitutor = ConeSubstitutor.Empty
|
candidate.substitutor = ConeSubstitutor.Empty
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -85,7 +83,7 @@ internal object CreateFreshTypeVariableSubstitutorStage : ResolutionStage() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun createToFreshVariableSubstitutorAndAddInitialConstraints(
|
fun createToFreshVariableSubstitutorAndAddInitialConstraints(
|
||||||
declaration: FirCallableMemberDeclaration,
|
declaration: FirCallableMemberDeclaration<*>,
|
||||||
candidate: Candidate,
|
candidate: Candidate,
|
||||||
csBuilder: ConstraintSystemOperation
|
csBuilder: ConstraintSystemOperation
|
||||||
): Pair<ConeSubstitutor, List<ConeTypeVariable>> {
|
): Pair<ConeSubstitutor, List<ConeTypeVariable>> {
|
||||||
|
|||||||
+1
-4
@@ -5,11 +5,9 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.resolve.calls
|
package org.jetbrains.kotlin.fir.resolve.calls
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirNamedFunction
|
import org.jetbrains.kotlin.fir.declarations.FirNamedFunction
|
||||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutorByMap
|
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutorByMap
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.firUnsafe
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||||
import org.jetbrains.kotlin.fir.types.coneTypeUnsafe
|
import org.jetbrains.kotlin.fir.types.coneTypeUnsafe
|
||||||
@@ -51,8 +49,7 @@ class ConeOverloadConflictResolver(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun createFlatSignature(call: Candidate): FlatSignature<Candidate> {
|
private fun createFlatSignature(call: Candidate): FlatSignature<Candidate> {
|
||||||
val declaration = call.symbol.firUnsafe<FirCallableDeclaration>()
|
return when (val declaration = call.symbol.fir) {
|
||||||
return when (declaration) {
|
|
||||||
is FirNamedFunction -> createFlatSignature(call, declaration)
|
is FirNamedFunction -> createFlatSignature(call, declaration)
|
||||||
is FirConstructor -> createFlatSignature(call, declaration)
|
is FirConstructor -> createFlatSignature(call, declaration)
|
||||||
else -> error("Not supported: $declaration")
|
else -> error("Not supported: $declaration")
|
||||||
|
|||||||
@@ -6,12 +6,9 @@
|
|||||||
package org.jetbrains.kotlin.fir.resolve.calls
|
package org.jetbrains.kotlin.fir.resolve.calls
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier
|
import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier
|
||||||
import org.jetbrains.kotlin.fir.resolve.FirProvider
|
import org.jetbrains.kotlin.fir.resolve.FirProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.firSafeNullable
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.firUnsafe
|
|
||||||
import org.jetbrains.kotlin.fir.service
|
import org.jetbrains.kotlin.fir.service
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol
|
import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeSymbol
|
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeSymbol
|
||||||
@@ -24,7 +21,6 @@ import org.jetbrains.kotlin.load.java.JavaVisibilities
|
|||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind
|
import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind
|
||||||
import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind.*
|
import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind.*
|
||||||
import java.lang.IllegalStateException
|
|
||||||
|
|
||||||
|
|
||||||
abstract class ResolutionStage {
|
abstract class ResolutionStage {
|
||||||
@@ -80,7 +76,7 @@ internal sealed class CheckReceivers : ResolutionStage() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun Candidate.getReceiverValue(): ReceiverValue? {
|
override fun Candidate.getReceiverValue(): ReceiverValue? {
|
||||||
val callableSymbol = symbol as? FirCallableSymbol ?: return null
|
val callableSymbol = symbol as? FirCallableSymbol<*> ?: return null
|
||||||
val callable = callableSymbol.fir
|
val callable = callableSymbol.fir
|
||||||
val type = (callable.receiverTypeRef as FirResolvedTypeRef?)?.type ?: return null
|
val type = (callable.receiverTypeRef as FirResolvedTypeRef?)?.type ?: return null
|
||||||
return object : ReceiverValue {
|
return object : ReceiverValue {
|
||||||
@@ -136,8 +132,8 @@ internal sealed class CheckReceivers : ResolutionStage() {
|
|||||||
|
|
||||||
internal object MapArguments : ResolutionStage() {
|
internal object MapArguments : ResolutionStage() {
|
||||||
override suspend fun check(candidate: Candidate, sink: CheckerSink, callInfo: CallInfo) {
|
override suspend fun check(candidate: Candidate, sink: CheckerSink, callInfo: CallInfo) {
|
||||||
val symbol = candidate.symbol as? FirFunctionSymbol ?: return sink.reportApplicability(CandidateApplicability.HIDDEN)
|
val symbol = candidate.symbol as? FirFunctionSymbol<*> ?: return sink.reportApplicability(CandidateApplicability.HIDDEN)
|
||||||
val function = symbol.firUnsafe<FirFunction>()
|
val function = symbol.fir
|
||||||
val processor = FirCallArgumentsProcessor(function, callInfo.arguments)
|
val processor = FirCallArgumentsProcessor(function, callInfo.arguments)
|
||||||
val mappingResult = processor.process()
|
val mappingResult = processor.process()
|
||||||
candidate.argumentMapping = mappingResult.argumentMapping
|
candidate.argumentMapping = mappingResult.argumentMapping
|
||||||
@@ -190,8 +186,8 @@ internal object CheckVisibility : CheckerStage() {
|
|||||||
|
|
||||||
override suspend fun check(candidate: Candidate, sink: CheckerSink, callInfo: CallInfo) {
|
override suspend fun check(candidate: Candidate, sink: CheckerSink, callInfo: CallInfo) {
|
||||||
val symbol = candidate.symbol
|
val symbol = candidate.symbol
|
||||||
val declaration = symbol.firSafeNullable<FirMemberDeclaration>()
|
val declaration = symbol.fir
|
||||||
if (declaration != null && !declaration.visibility.isPublicAPI) {
|
if (declaration is FirMemberDeclaration && !declaration.visibility.isPublicAPI) {
|
||||||
val visible = when (declaration.visibility) {
|
val visible = when (declaration.visibility) {
|
||||||
JavaVisibilities.PACKAGE_VISIBILITY ->
|
JavaVisibilities.PACKAGE_VISIBILITY ->
|
||||||
symbol.packageFqName() == callInfo.containingFile.packageFqName
|
symbol.packageFqName() == callInfo.containingFile.packageFqName
|
||||||
|
|||||||
@@ -11,10 +11,11 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyGetter
|
|||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertySetter
|
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertySetter
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirMemberPropertyImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirMemberPropertyImpl
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator
|
import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.firSafeNullable
|
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||||
import org.jetbrains.kotlin.fir.symbols.*
|
import org.jetbrains.kotlin.fir.symbols.*
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
@@ -33,10 +34,10 @@ class FirSyntheticPropertiesScope(
|
|||||||
|
|
||||||
private fun checkGetAndCreateSynthetic(
|
private fun checkGetAndCreateSynthetic(
|
||||||
name: Name,
|
name: Name,
|
||||||
symbol: ConeFunctionSymbol,
|
symbol: FirFunctionSymbol<*>,
|
||||||
processor: (ConeVariableSymbol) -> ProcessorAction
|
processor: (FirCallableSymbol<*>) -> ProcessorAction
|
||||||
): ProcessorAction {
|
): ProcessorAction {
|
||||||
val fir = symbol.firSafeNullable<FirNamedFunction>() ?: return ProcessorAction.NEXT
|
val fir = symbol.fir as? FirNamedFunction ?: return ProcessorAction.NEXT
|
||||||
|
|
||||||
if (fir.typeParameters.isNotEmpty()) return ProcessorAction.NEXT
|
if (fir.typeParameters.isNotEmpty()) return ProcessorAction.NEXT
|
||||||
if (fir.valueParameters.isNotEmpty()) return ProcessorAction.NEXT
|
if (fir.valueParameters.isNotEmpty()) return ProcessorAction.NEXT
|
||||||
@@ -67,7 +68,7 @@ class FirSyntheticPropertiesScope(
|
|||||||
return processor(synthetic)
|
return processor(synthetic)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun processPropertiesByName(name: Name, processor: (ConeVariableSymbol) -> ProcessorAction): ProcessorAction {
|
override fun processPropertiesByName(name: Name, processor: (FirCallableSymbol<*>) -> ProcessorAction): ProcessorAction {
|
||||||
if (name.isSpecial) return ProcessorAction.NEXT
|
if (name.isSpecial) return ProcessorAction.NEXT
|
||||||
if (baseScope.processFunctionsByName(Name.guessByFirstCharacter("get${name.identifier.capitalize()}")) {
|
if (baseScope.processFunctionsByName(Name.guessByFirstCharacter("get${name.identifier.capitalize()}")) {
|
||||||
checkGetAndCreateSynthetic(name, it, processor)
|
checkGetAndCreateSynthetic(name, it, processor)
|
||||||
|
|||||||
+4
-4
@@ -9,8 +9,8 @@ import org.jetbrains.kotlin.fir.FirSession
|
|||||||
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
|
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
@@ -25,7 +25,7 @@ class FirCompositeSymbolProvider(val providers: List<FirSymbolProvider>) : FirSy
|
|||||||
return providers.firstNotNullResult { it.getClassUseSiteMemberScope(classId, useSiteSession, scopeSession) }
|
return providers.firstNotNullResult { it.getClassUseSiteMemberScope(classId, useSiteSession, scopeSession) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getTopLevelCallableSymbols(packageFqName: FqName, name: Name): List<ConeCallableSymbol> {
|
override fun getTopLevelCallableSymbols(packageFqName: FqName, name: Name): List<FirCallableSymbol<*>> {
|
||||||
return providers.flatMap { it.getTopLevelCallableSymbols(packageFqName, name) }
|
return providers.flatMap { it.getTopLevelCallableSymbols(packageFqName, name) }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -35,7 +35,7 @@ class FirCompositeSymbolProvider(val providers: List<FirSymbolProvider>) : FirSy
|
|||||||
return providers.firstNotNullResult { it.getPackage(fqName) }
|
return providers.firstNotNullResult { it.getPackage(fqName) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getClassLikeSymbolByFqName(classId: ClassId): ConeClassLikeSymbol? {
|
override fun getClassLikeSymbolByFqName(classId: ClassId): FirClassLikeSymbol<*>? {
|
||||||
return providers.firstNotNullResult { it.getClassLikeSymbolByFqName(classId) }
|
return providers.firstNotNullResult { it.getClassLikeSymbolByFqName(classId) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-4
@@ -13,8 +13,8 @@ import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
|||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.service
|
import org.jetbrains.kotlin.fir.service
|
||||||
import org.jetbrains.kotlin.fir.symbols.CallableId
|
import org.jetbrains.kotlin.fir.symbols.CallableId
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
@@ -28,7 +28,7 @@ class FirDependenciesSymbolProviderImpl(val session: FirSession) : AbstractFirSy
|
|||||||
}.toList()
|
}.toList()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getTopLevelCallableSymbols(packageFqName: FqName, name: Name): List<ConeCallableSymbol> {
|
override fun getTopLevelCallableSymbols(packageFqName: FqName, name: Name): List<FirCallableSymbol<*>> {
|
||||||
return topLevelCallableCache.lookupCacheOrCalculate(CallableId(packageFqName, null, name)) {
|
return topLevelCallableCache.lookupCacheOrCalculate(CallableId(packageFqName, null, name)) {
|
||||||
dependencyProviders.flatMap { provider -> provider.getTopLevelCallableSymbols(packageFqName, name) }
|
dependencyProviders.flatMap { provider -> provider.getTopLevelCallableSymbols(packageFqName, name) }
|
||||||
} ?: emptyList()
|
} ?: emptyList()
|
||||||
@@ -37,7 +37,7 @@ class FirDependenciesSymbolProviderImpl(val session: FirSession) : AbstractFirSy
|
|||||||
override fun getClassDeclaredMemberScope(classId: ClassId) =
|
override fun getClassDeclaredMemberScope(classId: ClassId) =
|
||||||
dependencyProviders.firstNotNullResult { it.getClassDeclaredMemberScope(classId) }
|
dependencyProviders.firstNotNullResult { it.getClassDeclaredMemberScope(classId) }
|
||||||
|
|
||||||
override fun getClassLikeSymbolByFqName(classId: ClassId): ConeClassLikeSymbol? {
|
override fun getClassLikeSymbolByFqName(classId: ClassId): FirClassLikeSymbol<*>? {
|
||||||
return classCache.lookupCacheOrCalculate(classId) {
|
return classCache.lookupCacheOrCalculate(classId) {
|
||||||
for (provider in dependencyProviders) {
|
for (provider in dependencyProviders) {
|
||||||
provider.getClassLikeSymbolByFqName(classId)?.let {
|
provider.getClassLikeSymbolByFqName(classId)?.let {
|
||||||
|
|||||||
+10
-10
@@ -20,12 +20,12 @@ import org.jetbrains.kotlin.fir.deserialization.FirBuiltinAnnotationDeserializer
|
|||||||
import org.jetbrains.kotlin.fir.deserialization.FirDeserializationContext
|
import org.jetbrains.kotlin.fir.deserialization.FirDeserializationContext
|
||||||
import org.jetbrains.kotlin.fir.deserialization.deserializeClassToSymbol
|
import org.jetbrains.kotlin.fir.deserialization.deserializeClassToSymbol
|
||||||
import org.jetbrains.kotlin.fir.resolve.*
|
import org.jetbrains.kotlin.fir.resolve.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.firUnsafe
|
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirClassDeclaredMemberScope
|
import org.jetbrains.kotlin.fir.scopes.impl.FirClassDeclaredMemberScope
|
||||||
import org.jetbrains.kotlin.fir.symbols.*
|
import org.jetbrains.kotlin.fir.symbols.*
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
|
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
|
||||||
import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl
|
import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl
|
||||||
@@ -76,7 +76,7 @@ class FirLibrarySymbolProviderImpl(val session: FirSession) : FirSymbolProvider(
|
|||||||
|
|
||||||
val lookup = mutableMapOf<ClassId, FirClassSymbol>()
|
val lookup = mutableMapOf<ClassId, FirClassSymbol>()
|
||||||
|
|
||||||
fun getClassLikeSymbolByFqName(classId: ClassId): ConeClassLikeSymbol? =
|
fun getClassLikeSymbolByFqName(classId: ClassId): FirClassSymbol? =
|
||||||
findAndDeserializeClass(classId)
|
findAndDeserializeClass(classId)
|
||||||
|
|
||||||
private fun findAndDeserializeClass(
|
private fun findAndDeserializeClass(
|
||||||
@@ -109,7 +109,7 @@ class FirLibrarySymbolProviderImpl(val session: FirSession) : FirSymbolProvider(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getTopLevelCallableSymbols(name: Name): List<ConeCallableSymbol> {
|
fun getTopLevelCallableSymbols(name: Name): List<FirCallableSymbol<*>> {
|
||||||
return packageProto.`package`.functionList.filter { nameResolver.getName(it.name) == name }.map {
|
return packageProto.`package`.functionList.filter { nameResolver.getName(it.name) == name }.map {
|
||||||
memberDeserializer.loadFunction(it).symbol
|
memberDeserializer.loadFunction(it).symbol
|
||||||
}
|
}
|
||||||
@@ -130,7 +130,7 @@ class FirLibrarySymbolProviderImpl(val session: FirSession) : FirSymbolProvider(
|
|||||||
scopeSession: ScopeSession
|
scopeSession: ScopeSession
|
||||||
): FirScope? {
|
): FirScope? {
|
||||||
val symbol = this.getClassLikeSymbolByFqName(classId) ?: return null
|
val symbol = this.getClassLikeSymbolByFqName(classId) ?: return null
|
||||||
return symbol.firUnsafe<FirRegularClass>().buildDefaultUseSiteScope(useSiteSession, scopeSession)
|
return symbol.fir.buildDefaultUseSiteScope(useSiteSession, scopeSession)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getPackage(fqName: FqName): FqName? {
|
override fun getPackage(fqName: FqName): FqName? {
|
||||||
@@ -152,9 +152,9 @@ class FirLibrarySymbolProviderImpl(val session: FirSession) : FirSymbolProvider(
|
|||||||
|
|
||||||
private val allPackageFragments = loadBuiltIns().groupBy { it.fqName }
|
private val allPackageFragments = loadBuiltIns().groupBy { it.fqName }
|
||||||
|
|
||||||
private val fictitiousFunctionSymbols = mutableMapOf<Int, ConeClassSymbol>()
|
private val fictitiousFunctionSymbols = mutableMapOf<Int, FirClassSymbol>()
|
||||||
|
|
||||||
override fun getClassLikeSymbolByFqName(classId: ClassId): ConeClassLikeSymbol? {
|
override fun getClassLikeSymbolByFqName(classId: ClassId): FirClassSymbol? {
|
||||||
return allPackageFragments[classId.packageFqName]?.firstNotNullResult {
|
return allPackageFragments[classId.packageFqName]?.firstNotNullResult {
|
||||||
it.getClassLikeSymbolByFqName(classId)
|
it.getClassLikeSymbolByFqName(classId)
|
||||||
} ?: with(classId) {
|
} ?: with(classId) {
|
||||||
@@ -204,7 +204,7 @@ class FirLibrarySymbolProviderImpl(val session: FirSession) : FirSymbolProvider(
|
|||||||
FirMemberFunctionImpl(
|
FirMemberFunctionImpl(
|
||||||
session,
|
session,
|
||||||
null,
|
null,
|
||||||
FirFunctionSymbol(CallableId(packageFqName, relativeClassName, name)),
|
FirNamedFunctionSymbol(CallableId(packageFqName, relativeClassName, name)),
|
||||||
name,
|
name,
|
||||||
Visibilities.PUBLIC,
|
Visibilities.PUBLIC,
|
||||||
Modality.ABSTRACT,
|
Modality.ABSTRACT,
|
||||||
@@ -251,7 +251,7 @@ class FirLibrarySymbolProviderImpl(val session: FirSession) : FirSymbolProvider(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getTopLevelCallableSymbols(packageFqName: FqName, name: Name): List<ConeCallableSymbol> {
|
override fun getTopLevelCallableSymbols(packageFqName: FqName, name: Name): List<FirCallableSymbol<*>> {
|
||||||
return allPackageFragments[packageFqName]?.flatMap {
|
return allPackageFragments[packageFqName]?.flatMap {
|
||||||
it.getTopLevelCallableSymbols(name)
|
it.getTopLevelCallableSymbols(name)
|
||||||
} ?: emptyList()
|
} ?: emptyList()
|
||||||
@@ -273,7 +273,7 @@ class FirLibrarySymbolProviderImpl(val session: FirSession) : FirSymbolProvider(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getAllCallableNamesInClass(classId: ClassId): Set<Name> {
|
override fun getAllCallableNamesInClass(classId: ClassId): Set<Name> {
|
||||||
return getClassDeclarations(classId).filterIsInstance<FirCallableMemberDeclaration>().mapTo(mutableSetOf()) { it.name }
|
return getClassDeclarations(classId).filterIsInstance<FirCallableMemberDeclaration<*>>().mapTo(mutableSetOf()) { it.name }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getClassDeclarations(classId: ClassId): List<FirDeclaration> {
|
private fun getClassDeclarations(classId: ClassId): List<FirDeclaration> {
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ import org.jetbrains.kotlin.fir.resolve.buildDefaultUseSiteScope
|
|||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirClassDeclaredMemberScope
|
import org.jetbrains.kotlin.fir.scopes.impl.FirClassDeclaredMemberScope
|
||||||
import org.jetbrains.kotlin.fir.symbols.*
|
import org.jetbrains.kotlin.fir.symbols.*
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.ConeLookupTagBasedType
|
import org.jetbrains.kotlin.fir.types.ConeLookupTagBasedType
|
||||||
@@ -29,11 +31,11 @@ class FirProviderImpl(val session: FirSession) : FirProvider() {
|
|||||||
return state.callableContainerMap[symbol]
|
return state.callableContainerMap[symbol]
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getClassLikeSymbolByFqName(classId: ClassId): ConeClassLikeSymbol? {
|
override fun getClassLikeSymbolByFqName(classId: ClassId): FirClassLikeSymbol<*>? {
|
||||||
return (getFirClassifierByFqName(classId) as? FirSymbolOwner<*>)?.symbol as? ConeClassLikeSymbol
|
return getFirClassifierByFqName(classId)?.symbol
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getTopLevelCallableSymbols(packageFqName: FqName, name: Name): List<ConeCallableSymbol> {
|
override fun getTopLevelCallableSymbols(packageFqName: FqName, name: Name): List<FirCallableSymbol<*>> {
|
||||||
return (state.callableMap[CallableId(packageFqName, null, name)] ?: emptyList())
|
return (state.callableMap[CallableId(packageFqName, null, name)] ?: emptyList())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,8 +73,10 @@ class FirProviderImpl(val session: FirSession) : FirProvider() {
|
|||||||
state.classifierContainerFileMap[classId] = file
|
state.classifierContainerFileMap[classId] = file
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration) {
|
override fun <F : FirCallableMemberDeclaration<F>> visitCallableMemberDeclaration(
|
||||||
val symbol = callableMemberDeclaration.symbol as ConeCallableSymbol
|
callableMemberDeclaration: FirCallableMemberDeclaration<F>
|
||||||
|
) {
|
||||||
|
val symbol = callableMemberDeclaration.symbol
|
||||||
val callableId = symbol.callableId
|
val callableId = symbol.callableId
|
||||||
state.callableMap.merge(callableId, listOf(symbol)) { a, b -> a + b }
|
state.callableMap.merge(callableId, listOf(symbol)) { a, b -> a + b }
|
||||||
state.callableContainerMap[symbol] = file
|
state.callableContainerMap[symbol] = file
|
||||||
@@ -96,9 +100,9 @@ class FirProviderImpl(val session: FirSession) : FirProvider() {
|
|||||||
|
|
||||||
private class State {
|
private class State {
|
||||||
val fileMap = mutableMapOf<FqName, List<FirFile>>()
|
val fileMap = mutableMapOf<FqName, List<FirFile>>()
|
||||||
val classifierMap = mutableMapOf<ClassId, FirClassLikeDeclaration>()
|
val classifierMap = mutableMapOf<ClassId, FirClassLikeDeclaration<*>>()
|
||||||
val classifierContainerFileMap = mutableMapOf<ClassId, FirFile>()
|
val classifierContainerFileMap = mutableMapOf<ClassId, FirFile>()
|
||||||
val callableMap = mutableMapOf<CallableId, List<ConeCallableSymbol>>()
|
val callableMap = mutableMapOf<CallableId, List<FirCallableSymbol<*>>>()
|
||||||
val callableContainerMap = mutableMapOf<ConeCallableSymbol, FirFile>()
|
val callableContainerMap = mutableMapOf<ConeCallableSymbol, FirFile>()
|
||||||
|
|
||||||
fun setFrom(other: State) {
|
fun setFrom(other: State) {
|
||||||
@@ -120,7 +124,7 @@ class FirProviderImpl(val session: FirSession) : FirProvider() {
|
|||||||
return state.fileMap[fqName].orEmpty()
|
return state.fileMap[fqName].orEmpty()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getFirClassifierByFqName(fqName: ClassId): FirClassLikeDeclaration? {
|
override fun getFirClassifierByFqName(fqName: ClassId): FirClassLikeDeclaration<*>? {
|
||||||
return state.classifierMap[fqName]
|
return state.classifierMap[fqName]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-3
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.scopes.FirScope
|
|||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeSymbol
|
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassifierSymbol
|
import org.jetbrains.kotlin.fir.symbols.ConeClassifierSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterSymbol
|
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.fir.types.impl.*
|
import org.jetbrains.kotlin.fir.types.impl.*
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
@@ -29,13 +30,13 @@ class FirTypeResolverImpl(private val session: FirSession) : FirTypeResolver {
|
|||||||
|
|
||||||
private data class ClassIdInSession(val session: FirSession, val id: ClassId)
|
private data class ClassIdInSession(val session: FirSession, val id: ClassId)
|
||||||
|
|
||||||
private val implicitBuiltinTypeSymbols = mutableMapOf<ClassIdInSession, ConeClassLikeSymbol>()
|
private val implicitBuiltinTypeSymbols = mutableMapOf<ClassIdInSession, FirClassLikeSymbol<*>>()
|
||||||
|
|
||||||
// TODO: get rid of session used here, and may be also of the cache above (see KT-30275)
|
// TODO: get rid of session used here, and may be also of the cache above (see KT-30275)
|
||||||
private fun resolveBuiltInQualified(id: ClassId, session: FirSession): ConeClassLikeSymbol {
|
private fun resolveBuiltInQualified(id: ClassId, session: FirSession): FirClassLikeSymbol<*> {
|
||||||
val nameInSession = ClassIdInSession(session, id)
|
val nameInSession = ClassIdInSession(session, id)
|
||||||
return implicitBuiltinTypeSymbols.getOrPut(nameInSession) {
|
return implicitBuiltinTypeSymbols.getOrPut(nameInSession) {
|
||||||
symbolProvider.getClassLikeSymbolByFqName(id) as ConeClassLikeSymbol
|
symbolProvider.getClassLikeSymbolByFqName(id)!!
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+14
-13
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.fir.scopes.impl.FirTopLevelDeclaredMemberScope
|
|||||||
import org.jetbrains.kotlin.fir.scopes.impl.withReplacedConeType
|
import org.jetbrains.kotlin.fir.scopes.impl.withReplacedConeType
|
||||||
import org.jetbrains.kotlin.fir.symbols.*
|
import org.jetbrains.kotlin.fir.symbols.*
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirBackingFieldSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirBackingFieldSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.fir.types.impl.*
|
import org.jetbrains.kotlin.fir.types.impl.*
|
||||||
import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult
|
import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult
|
||||||
@@ -205,8 +206,8 @@ open class FirBodyResolveTransformer(
|
|||||||
FirErrorTypeRefImpl(session, access.psi, newCallee.errorReason)
|
FirErrorTypeRefImpl(session, access.psi, newCallee.errorReason)
|
||||||
is FirResolvedCallableReference -> {
|
is FirResolvedCallableReference -> {
|
||||||
val symbol = newCallee.coneSymbol
|
val symbol = newCallee.coneSymbol
|
||||||
if (symbol is ConeCallableSymbol) {
|
if (symbol is FirCallableSymbol<*>) {
|
||||||
val returnType = jump.tryCalculateReturnType(symbol.firUnsafe())
|
val returnType = jump.tryCalculateReturnType(symbol.fir)
|
||||||
if (access.safe && access.explicitReceiver!!.resultType.coneTypeUnsafe<ConeKotlinType>().isNullable) {
|
if (access.safe && access.explicitReceiver!!.resultType.coneTypeUnsafe<ConeKotlinType>().isNullable) {
|
||||||
returnType.withReplacedConeType(
|
returnType.withReplacedConeType(
|
||||||
session,
|
session,
|
||||||
@@ -215,11 +216,11 @@ open class FirBodyResolveTransformer(
|
|||||||
} else {
|
} else {
|
||||||
returnType
|
returnType
|
||||||
}
|
}
|
||||||
} else if (symbol is ConeClassifierSymbol) {
|
} else if (symbol is ConeClassifierSymbol && symbol is FirBasedSymbol<*>) {
|
||||||
val firUnsafe = symbol.firUnsafe<FirElement>()
|
val fir = symbol.fir
|
||||||
// TODO: unhack
|
// TODO: unhack
|
||||||
if (firUnsafe is FirEnumEntry) {
|
if (fir is FirEnumEntry) {
|
||||||
(firUnsafe.superTypeRefs.firstOrNull() as? FirResolvedTypeRef) ?: FirErrorTypeRefImpl(
|
(fir.superTypeRefs.firstOrNull() as? FirResolvedTypeRef) ?: FirErrorTypeRefImpl(
|
||||||
session,
|
session,
|
||||||
null,
|
null,
|
||||||
"no enum item supertype"
|
"no enum item supertype"
|
||||||
@@ -275,7 +276,7 @@ open class FirBodyResolveTransformer(
|
|||||||
val resultType = resolvedQualifier.resultType
|
val resultType = resolvedQualifier.resultType
|
||||||
if (classId != null) {
|
if (classId != null) {
|
||||||
val classSymbol = symbolProvider.getClassLikeSymbolByFqName(classId)!!
|
val classSymbol = symbolProvider.getClassLikeSymbolByFqName(classId)!!
|
||||||
val declaration = classSymbol.firUnsafe<FirClassLikeDeclaration>()
|
val declaration = classSymbol.fir
|
||||||
if (declaration is FirClass) {
|
if (declaration is FirClass) {
|
||||||
if (declaration.classKind == ClassKind.OBJECT) {
|
if (declaration.classKind == ClassKind.OBJECT) {
|
||||||
return resultType.resolvedTypeFromPrototype(
|
return resultType.resolvedTypeFromPrototype(
|
||||||
@@ -851,7 +852,7 @@ open class FirBodyResolveTransformer(
|
|||||||
val expectedType = data as FirTypeRef?
|
val expectedType = data as FirTypeRef?
|
||||||
|
|
||||||
val kind = constExpression.kind
|
val kind = constExpression.kind
|
||||||
if (expectedType == null || expectedType is FirImplicitTypeRef || expectedType == null ||
|
if (expectedType == null || expectedType is FirImplicitTypeRef ||
|
||||||
kind == IrConstKind.Null || kind == IrConstKind.Boolean || kind == IrConstKind.Char
|
kind == IrConstKind.Null || kind == IrConstKind.Boolean || kind == IrConstKind.Char
|
||||||
) {
|
) {
|
||||||
val symbol = when (kind) {
|
val symbol = when (kind) {
|
||||||
@@ -968,7 +969,7 @@ open class FirBodyResolveTransformer(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun storeVariableReturnType(variable: FirVariable) {
|
private fun storeVariableReturnType(variable: FirVariable<*>) {
|
||||||
val initializer = variable.initializer
|
val initializer = variable.initializer
|
||||||
if (variable.returnTypeRef is FirImplicitTypeRef) {
|
if (variable.returnTypeRef is FirImplicitTypeRef) {
|
||||||
when {
|
when {
|
||||||
@@ -1021,8 +1022,8 @@ open class FirBodyResolveTransformer(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun transformVariable(variable: FirVariable, data: Any?): CompositeTransformResult<FirDeclaration> {
|
override fun <F : FirVariable<F>> transformVariable(variable: FirVariable<F>, data: Any?): CompositeTransformResult<FirDeclaration> {
|
||||||
val variable = super.transformVariable(variable, variable.returnTypeRef).single as FirVariable
|
val variable = super.transformVariable(variable, variable.returnTypeRef).single as FirVariable<*>
|
||||||
storeVariableReturnType(variable)
|
storeVariableReturnType(variable)
|
||||||
if (variable !is FirProperty) {
|
if (variable !is FirProperty) {
|
||||||
localScopes.lastOrNull()?.storeDeclaration(variable)
|
localScopes.lastOrNull()?.storeDeclaration(variable)
|
||||||
@@ -1085,7 +1086,7 @@ open class FirBodyResolveTransformer(
|
|||||||
val symbol = symbolProvider.getClassLikeSymbolByFqName(classId)!!
|
val symbol = symbolProvider.getClassLikeSymbolByFqName(classId)!!
|
||||||
// TODO: Unify logic?
|
// TODO: Unify logic?
|
||||||
symbol.constructType(
|
symbol.constructType(
|
||||||
Array(symbol.firUnsafe<FirClassLikeDeclaration>().typeParameters.size) {
|
Array(symbol.fir.typeParameters.size) {
|
||||||
ConeStarProjection
|
ConeStarProjection
|
||||||
},
|
},
|
||||||
isNullable = false
|
isNullable = false
|
||||||
@@ -1161,7 +1162,7 @@ class ReturnTypeCalculatorWithJump(val session: FirSession, val scopeSession: Sc
|
|||||||
val returnTypeRef = declaration.returnTypeRef
|
val returnTypeRef = declaration.returnTypeRef
|
||||||
if (returnTypeRef is FirResolvedTypeRef) return returnTypeRef
|
if (returnTypeRef is FirResolvedTypeRef) return returnTypeRef
|
||||||
cycleErrorType(declaration)?.let { return it }
|
cycleErrorType(declaration)?.let { return it }
|
||||||
require(declaration is FirCallableMemberDeclaration) { "${declaration::class}: ${declaration.render()}" }
|
require(declaration is FirCallableMemberDeclaration<*>) { "${declaration::class}: ${declaration.render()}" }
|
||||||
|
|
||||||
|
|
||||||
val symbol = declaration.symbol as ConeCallableSymbol
|
val symbol = declaration.symbol as ConeCallableSymbol
|
||||||
|
|||||||
+1
-1
@@ -68,7 +68,7 @@ class FirCallCompleterTransformer(
|
|||||||
val functionCall = functionCall.transformArguments(this, data) as FirFunctionCall
|
val functionCall = functionCall.transformArguments(this, data) as FirFunctionCall
|
||||||
|
|
||||||
val subCandidate = calleeReference.candidate
|
val subCandidate = calleeReference.candidate
|
||||||
val declaration = subCandidate.symbol.firUnsafe<FirCallableMemberDeclaration>()
|
val declaration = subCandidate.symbol.firUnsafe<FirCallableMemberDeclaration<*>>()
|
||||||
val newTypeParameters = declaration.typeParameters.map { ConeTypeParameterTypeImpl(it.symbol.toLookupTag(), false) }
|
val newTypeParameters = declaration.typeParameters.map { ConeTypeParameterTypeImpl(it.symbol.toLookupTag(), false) }
|
||||||
.map { subCandidate.substitutor.substituteOrSelf(it) }
|
.map { subCandidate.substitutor.substituteOrSelf(it) }
|
||||||
.map { finalSubstitutor.substituteOrSelf(it) }
|
.map { finalSubstitutor.substituteOrSelf(it) }
|
||||||
|
|||||||
+1
-1
@@ -33,7 +33,7 @@ class FirStatusResolveTransformer : FirAbstractTreeTransformer() {
|
|||||||
return when (this) {
|
return when (this) {
|
||||||
is FirEnumEntry -> Modality.FINAL
|
is FirEnumEntry -> Modality.FINAL
|
||||||
is FirRegularClass -> if (classKind == ClassKind.INTERFACE) Modality.ABSTRACT else Modality.FINAL
|
is FirRegularClass -> if (classKind == ClassKind.INTERFACE) Modality.ABSTRACT else Modality.FINAL
|
||||||
is FirCallableMemberDeclaration -> {
|
is FirCallableMemberDeclaration<*> -> {
|
||||||
val containingClass = classes.lastOrNull()
|
val containingClass = classes.lastOrNull()
|
||||||
when {
|
when {
|
||||||
containingClass == null -> Modality.FINAL
|
containingClass == null -> Modality.FINAL
|
||||||
|
|||||||
+3
-3
@@ -59,7 +59,7 @@ class FirSupertypeResolverTransformer : FirAbstractTreeTransformer() {
|
|||||||
return property.compose()
|
return property.compose()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun resolveSupertypesOrExpansions(classLikeDeclaration: FirClassLikeDeclaration): FirDeclaration {
|
private fun resolveSupertypesOrExpansions(classLikeDeclaration: FirClassLikeDeclaration<*>): FirDeclaration {
|
||||||
val classId = classLikeDeclaration.symbol.classId
|
val classId = classLikeDeclaration.symbol.classId
|
||||||
|
|
||||||
if (classId in fullyComputed) return classLikeDeclaration
|
if (classId in fullyComputed) return classLikeDeclaration
|
||||||
@@ -76,7 +76,7 @@ class FirSupertypeResolverTransformer : FirAbstractTreeTransformer() {
|
|||||||
file: FirFile,
|
file: FirFile,
|
||||||
private val currentlyComputing: MutableSet<ClassId>,
|
private val currentlyComputing: MutableSet<ClassId>,
|
||||||
private val fullyComputed: MutableSet<ClassId>,
|
private val fullyComputed: MutableSet<ClassId>,
|
||||||
private val knownFirClassLikeDeclaration: FirClassLikeDeclaration? = null
|
private val knownFirClassLikeDeclaration: FirClassLikeDeclaration<*>? = null
|
||||||
) : FirAbstractTreeTransformerWithSuperTypes(reversedScopePriority = true) {
|
) : FirAbstractTreeTransformerWithSuperTypes(reversedScopePriority = true) {
|
||||||
|
|
||||||
lateinit var resultingClass: FirDeclaration
|
lateinit var resultingClass: FirDeclaration
|
||||||
@@ -108,7 +108,7 @@ class FirSupertypeResolverTransformer : FirAbstractTreeTransformer() {
|
|||||||
return resolveNestedClassesSupertypes(transformedClass, data)
|
return resolveNestedClassesSupertypes(transformedClass, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FirClassLikeDeclaration.matchesRequestedDeclaration(): Boolean {
|
private fun FirClassLikeDeclaration<*>.matchesRequestedDeclaration(): Boolean {
|
||||||
if (knownFirClassLikeDeclaration != null) return knownFirClassLikeDeclaration == this
|
if (knownFirClassLikeDeclaration != null) return knownFirClassLikeDeclaration == this
|
||||||
return symbol.classId == requestedClassId
|
return symbol.classId == requestedClassId
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,9 +11,9 @@ import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
|||||||
import org.jetbrains.kotlin.fir.resolve.buildUseSiteScope
|
import org.jetbrains.kotlin.fir.resolve.buildUseSiteScope
|
||||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.*
|
import org.jetbrains.kotlin.fir.scopes.impl.*
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeFunctionSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.ConeAbbreviatedType
|
import org.jetbrains.kotlin.fir.types.ConeAbbreviatedType
|
||||||
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
||||||
@@ -38,8 +38,7 @@ fun FirCompositeScope.addImportingScopes(file: FirFile, session: FirSession) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun finalExpansionName(symbol: FirTypeAliasSymbol, session: FirSession): Name? {
|
private fun finalExpansionName(symbol: FirTypeAliasSymbol, session: FirSession): Name? {
|
||||||
val expandedType = symbol.fir.expandedTypeRef.coneTypeUnsafe<ConeClassLikeType>()
|
return when (val expandedType = symbol.fir.expandedTypeRef.coneTypeUnsafe<ConeClassLikeType>()) {
|
||||||
return when (expandedType) {
|
|
||||||
is ConeAbbreviatedType ->
|
is ConeAbbreviatedType ->
|
||||||
expandedType.abbreviationLookupTag.toSymbol(session)?.safeAs<FirTypeAliasSymbol>()?.let {
|
expandedType.abbreviationLookupTag.toSymbol(session)?.safeAs<FirTypeAliasSymbol>()?.let {
|
||||||
finalExpansionName(it, session)
|
finalExpansionName(it, session)
|
||||||
@@ -50,8 +49,8 @@ private fun finalExpansionName(symbol: FirTypeAliasSymbol, session: FirSession):
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun processConstructors(
|
fun processConstructors(
|
||||||
matchedSymbol: ConeClassLikeSymbol?,
|
matchedSymbol: FirClassLikeSymbol<*>?,
|
||||||
processor: (ConeFunctionSymbol) -> ProcessorAction,
|
processor: (FirFunctionSymbol<*>) -> ProcessorAction,
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
scopeSession: ScopeSession,
|
scopeSession: ScopeSession,
|
||||||
name: Name
|
name: Name
|
||||||
@@ -61,13 +60,12 @@ fun processConstructors(
|
|||||||
val scope = when (matchedSymbol) {
|
val scope = when (matchedSymbol) {
|
||||||
is FirTypeAliasSymbol -> matchedSymbol.fir.buildUseSiteScope(session, scopeSession)
|
is FirTypeAliasSymbol -> matchedSymbol.fir.buildUseSiteScope(session, scopeSession)
|
||||||
is FirClassSymbol -> matchedSymbol.fir.buildUseSiteScope(session, scopeSession)
|
is FirClassSymbol -> matchedSymbol.fir.buildUseSiteScope(session, scopeSession)
|
||||||
else -> null
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
val constructorName = when (matchedSymbol) {
|
val constructorName = when (matchedSymbol) {
|
||||||
is FirTypeAliasSymbol -> finalExpansionName(matchedSymbol, session) ?: return ProcessorAction.NEXT
|
is FirTypeAliasSymbol -> finalExpansionName(matchedSymbol, session) ?: return ProcessorAction.NEXT
|
||||||
else -> name
|
is FirClassSymbol -> name
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: why don't we use declared member scope at this point?
|
//TODO: why don't we use declared member scope at this point?
|
||||||
|
|||||||
+3
-3
@@ -61,7 +61,7 @@ abstract class AbstractFirOverrideScope(val session: FirSession) : FirScope() {
|
|||||||
protected fun ConeCallableSymbol.isOverridden(seen: Set<ConeCallableSymbol>): ConeCallableSymbol? {
|
protected fun ConeCallableSymbol.isOverridden(seen: Set<ConeCallableSymbol>): ConeCallableSymbol? {
|
||||||
if (overrides.containsKey(this)) return overrides[this]
|
if (overrides.containsKey(this)) return overrides[this]
|
||||||
|
|
||||||
fun similarFunctionsOrBothProperties(declaration: FirCallableDeclaration, self: FirCallableDeclaration): Boolean {
|
fun similarFunctionsOrBothProperties(declaration: FirCallableDeclaration<*>, self: FirCallableDeclaration<*>): Boolean {
|
||||||
return when (declaration) {
|
return when (declaration) {
|
||||||
is FirNamedFunction -> self is FirNamedFunction && isOverriddenFunCheck(declaration, self)
|
is FirNamedFunction -> self is FirNamedFunction && isOverriddenFunCheck(declaration, self)
|
||||||
is FirConstructor -> false
|
is FirConstructor -> false
|
||||||
@@ -75,9 +75,9 @@ abstract class AbstractFirOverrideScope(val session: FirSession) : FirScope() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val self = (this as AbstractFirBasedSymbol<*>).fir as FirCallableMemberDeclaration
|
val self = (this as AbstractFirBasedSymbol<*>).fir as FirCallableMemberDeclaration<*>
|
||||||
val overriding = seen.firstOrNull {
|
val overriding = seen.firstOrNull {
|
||||||
val member = (it as AbstractFirBasedSymbol<*>).fir as FirCallableMemberDeclaration
|
val member = (it as AbstractFirBasedSymbol<*>).fir as FirCallableMemberDeclaration<*>
|
||||||
self.modality != Modality.FINAL
|
self.modality != Modality.FINAL
|
||||||
&& similarFunctionsOrBothProperties(member, self)
|
&& similarFunctionsOrBothProperties(member, self)
|
||||||
} // TODO: two or more overrides for one fun?
|
} // TODO: two or more overrides for one fun?
|
||||||
|
|||||||
+13
-12
@@ -7,16 +7,17 @@ package org.jetbrains.kotlin.fir.scopes.impl
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvedImport
|
import org.jetbrains.kotlin.fir.declarations.FirResolvedImport
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirTypeAlias
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.expandedConeType
|
import org.jetbrains.kotlin.fir.declarations.expandedConeType
|
||||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.TowerScopeLevel
|
import org.jetbrains.kotlin.fir.resolve.calls.TowerScopeLevel
|
||||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.firUnsafe
|
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||||
import org.jetbrains.kotlin.fir.scopes.processConstructors
|
import org.jetbrains.kotlin.fir.scopes.processConstructors
|
||||||
import org.jetbrains.kotlin.fir.symbols.*
|
import org.jetbrains.kotlin.fir.symbols.*
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.cast
|
import org.jetbrains.kotlin.utils.addToStdlib.cast
|
||||||
@@ -32,9 +33,9 @@ abstract class FirAbstractImportingScope(session: FirSession, lookupInFir: Boole
|
|||||||
|
|
||||||
|
|
||||||
val symbol = provider.getClassLikeSymbolByFqName(classId) ?: error("No scope/symbol for $classId")
|
val symbol = provider.getClassLikeSymbolByFqName(classId) ?: error("No scope/symbol for $classId")
|
||||||
if (symbol is ConeTypeAliasSymbol) {
|
if (symbol is FirTypeAliasSymbol) {
|
||||||
val expansionSymbol = symbol.firUnsafe<FirTypeAlias>().expandedConeType?.lookupTag?.toSymbol(session)
|
val expansionSymbol = symbol.fir.expandedConeType?.lookupTag?.toSymbol(session)
|
||||||
if (expansionSymbol as? ConeClassLikeSymbol != null) {
|
if (expansionSymbol is ConeClassLikeSymbol) {
|
||||||
return getStaticsScope(expansionSymbol.classId)
|
return getStaticsScope(expansionSymbol.classId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -42,11 +43,11 @@ abstract class FirAbstractImportingScope(session: FirSession, lookupInFir: Boole
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
protected fun <T : ConeCallableSymbol> processCallables(
|
protected fun <T : FirCallableSymbol<*>> processCallables(
|
||||||
import: FirResolvedImport,
|
import: FirResolvedImport,
|
||||||
name: Name,
|
name: Name,
|
||||||
token: TowerScopeLevel.Token<T>,
|
token: TowerScopeLevel.Token<T>,
|
||||||
processor: (ConeCallableSymbol) -> ProcessorAction
|
processor: (FirCallableSymbol<*>) -> ProcessorAction
|
||||||
): ProcessorAction {
|
): ProcessorAction {
|
||||||
val callableId = CallableId(import.packageFqName, import.relativeClassName, name)
|
val callableId = CallableId(import.packageFqName, import.relativeClassName, name)
|
||||||
|
|
||||||
@@ -95,20 +96,20 @@ abstract class FirAbstractImportingScope(session: FirSession, lookupInFir: Boole
|
|||||||
return ProcessorAction.NEXT
|
return ProcessorAction.NEXT
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract fun <T : ConeCallableSymbol> processCallables(
|
abstract fun <T : FirCallableSymbol<*>> processCallables(
|
||||||
name: Name,
|
name: Name,
|
||||||
token: TowerScopeLevel.Token<T>,
|
token: TowerScopeLevel.Token<T>,
|
||||||
processor: (ConeCallableSymbol) -> ProcessorAction
|
processor: (FirCallableSymbol<*>) -> ProcessorAction
|
||||||
): ProcessorAction
|
): ProcessorAction
|
||||||
|
|
||||||
final override fun processFunctionsByName(name: Name, processor: (ConeFunctionSymbol) -> ProcessorAction): ProcessorAction {
|
final override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> ProcessorAction): ProcessorAction {
|
||||||
return processCallables(
|
return processCallables(
|
||||||
name,
|
name,
|
||||||
TowerScopeLevel.Token.Functions
|
TowerScopeLevel.Token.Functions
|
||||||
) { if (it is ConeFunctionSymbol) processor(it) else ProcessorAction.NEXT }
|
) { if (it is FirFunctionSymbol<*>) processor(it) else ProcessorAction.NEXT }
|
||||||
}
|
}
|
||||||
|
|
||||||
final override fun processPropertiesByName(name: Name, processor: (ConeVariableSymbol) -> ProcessorAction): ProcessorAction {
|
final override fun processPropertiesByName(name: Name, processor: (FirCallableSymbol<*>) -> ProcessorAction): ProcessorAction {
|
||||||
return processCallables(
|
return processCallables(
|
||||||
name,
|
name,
|
||||||
TowerScopeLevel.Token.Properties
|
TowerScopeLevel.Token.Properties
|
||||||
|
|||||||
+3
-3
@@ -10,9 +10,9 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedImportImpl
|
|||||||
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
|
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.TowerScopeLevel
|
import org.jetbrains.kotlin.fir.resolve.calls.TowerScopeLevel
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirPosition
|
import org.jetbrains.kotlin.fir.scopes.FirPosition
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
|
||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||||
import org.jetbrains.kotlin.fir.symbols.*
|
import org.jetbrains.kotlin.fir.symbols.*
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
@@ -41,10 +41,10 @@ abstract class FirAbstractSimpleImportingScope(session: FirSession) : FirAbstrac
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun <T : ConeCallableSymbol> processCallables(
|
override fun <T : FirCallableSymbol<*>> processCallables(
|
||||||
name: Name,
|
name: Name,
|
||||||
token: TowerScopeLevel.Token<T>,
|
token: TowerScopeLevel.Token<T>,
|
||||||
processor: (ConeCallableSymbol) -> ProcessorAction
|
processor: (FirCallableSymbol<*>) -> ProcessorAction
|
||||||
): ProcessorAction {
|
): ProcessorAction {
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+3
-2
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.resolve.calls.TowerScopeLevel
|
|||||||
import org.jetbrains.kotlin.fir.scopes.FirPosition
|
import org.jetbrains.kotlin.fir.scopes.FirPosition
|
||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||||
import org.jetbrains.kotlin.fir.symbols.*
|
import org.jetbrains.kotlin.fir.symbols.*
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
@@ -41,10 +42,10 @@ abstract class FirAbstractStarImportingScope(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
override fun <T : ConeCallableSymbol> processCallables(
|
override fun <T : FirCallableSymbol<*>> processCallables(
|
||||||
name: Name,
|
name: Name,
|
||||||
token: TowerScopeLevel.Token<T>,
|
token: TowerScopeLevel.Token<T>,
|
||||||
processor: (ConeCallableSymbol) -> ProcessorAction
|
processor: (FirCallableSymbol<*>) -> ProcessorAction
|
||||||
): ProcessorAction {
|
): ProcessorAction {
|
||||||
for (import in starImports) {
|
for (import in starImports) {
|
||||||
if (processCallables(import, name, token, processor).stop()) {
|
if (processCallables(import, name, token, processor).stop()) {
|
||||||
|
|||||||
+8
-7
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.service
|
|||||||
import org.jetbrains.kotlin.fir.symbols.*
|
import org.jetbrains.kotlin.fir.symbols.*
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
class FirClassDeclaredMemberScopeProvider {
|
class FirClassDeclaredMemberScopeProvider {
|
||||||
@@ -37,11 +38,11 @@ fun declaredMemberScope(klass: FirRegularClass): FirClassDeclaredMemberScope {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class FirClassDeclaredMemberScope(klass: FirRegularClass) : FirScope() {
|
class FirClassDeclaredMemberScope(klass: FirRegularClass) : FirScope() {
|
||||||
private val callablesIndex: Map<Name, List<FirCallableSymbol>> = run {
|
private val callablesIndex: Map<Name, List<FirCallableSymbol<*>>> = run {
|
||||||
val result = mutableMapOf<Name, MutableList<FirCallableSymbol>>()
|
val result = mutableMapOf<Name, MutableList<FirCallableSymbol<*>>>()
|
||||||
for (declaration in klass.declarations) {
|
for (declaration in klass.declarations) {
|
||||||
when (declaration) {
|
when (declaration) {
|
||||||
is FirCallableMemberDeclaration -> {
|
is FirCallableMemberDeclaration<*> -> {
|
||||||
val name = if (declaration is FirConstructor) klass.name else declaration.name
|
val name = if (declaration is FirConstructor) klass.name else declaration.name
|
||||||
result.getOrPut(name) { mutableListOf() } += declaration.symbol
|
result.getOrPut(name) { mutableListOf() } += declaration.symbol
|
||||||
}
|
}
|
||||||
@@ -66,20 +67,20 @@ class FirClassDeclaredMemberScope(klass: FirRegularClass) : FirScope() {
|
|||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun processFunctionsByName(name: Name, processor: (ConeFunctionSymbol) -> ProcessorAction): ProcessorAction {
|
override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> ProcessorAction): ProcessorAction {
|
||||||
val symbols = callablesIndex[name] ?: emptyList()
|
val symbols = callablesIndex[name] ?: emptyList()
|
||||||
for (symbol in symbols) {
|
for (symbol in symbols) {
|
||||||
if (symbol is ConeFunctionSymbol && !processor(symbol)) {
|
if (symbol is FirFunctionSymbol<*> && !processor(symbol)) {
|
||||||
return STOP
|
return STOP
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return NEXT
|
return NEXT
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun processPropertiesByName(name: Name, processor: (ConeVariableSymbol) -> ProcessorAction): ProcessorAction {
|
override fun processPropertiesByName(name: Name, processor: (FirCallableSymbol<*>) -> ProcessorAction): ProcessorAction {
|
||||||
val symbols = callablesIndex[name] ?: emptyList()
|
val symbols = callablesIndex[name] ?: emptyList()
|
||||||
for (symbol in symbols) {
|
for (symbol in symbols) {
|
||||||
if (symbol is ConePropertySymbol && !processor(symbol)) {
|
if (symbol is ConeVariableSymbol && !processor(symbol)) {
|
||||||
return STOP
|
return STOP
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+20
-20
@@ -6,8 +6,6 @@
|
|||||||
package org.jetbrains.kotlin.fir.scopes.impl
|
package org.jetbrains.kotlin.fir.scopes.impl
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirNamedFunction
|
import org.jetbrains.kotlin.fir.declarations.FirNamedFunction
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirMemberFunctionImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirMemberFunctionImpl
|
||||||
@@ -15,13 +13,14 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl
|
|||||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutorByMap
|
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutorByMap
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculatorWithJump
|
import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculatorWithJump
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.firUnsafe
|
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||||
import org.jetbrains.kotlin.fir.symbols.*
|
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
|
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
||||||
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
|
import org.jetbrains.kotlin.fir.types.coneTypeUnsafe
|
||||||
import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl
|
import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
@@ -32,22 +31,22 @@ class FirClassSubstitutionScope(
|
|||||||
substitution: Map<ConeTypeParameterSymbol, ConeKotlinType>
|
substitution: Map<ConeTypeParameterSymbol, ConeKotlinType>
|
||||||
) : FirScope() {
|
) : FirScope() {
|
||||||
|
|
||||||
private val fakeOverrides = mutableMapOf<ConeCallableSymbol, ConeCallableSymbol>()
|
private val fakeOverrides = mutableMapOf<FirFunctionSymbol<*>, FirFunctionSymbol<*>>()
|
||||||
|
|
||||||
private val substitutor = ConeSubstitutorByMap(substitution)
|
private val substitutor = ConeSubstitutorByMap(substitution)
|
||||||
|
|
||||||
override fun processFunctionsByName(name: Name, processor: (ConeFunctionSymbol) -> ProcessorAction): ProcessorAction {
|
override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> ProcessorAction): ProcessorAction {
|
||||||
useSiteScope.processFunctionsByName(name) process@{ original ->
|
useSiteScope.processFunctionsByName(name) process@{ original ->
|
||||||
|
|
||||||
val function = fakeOverrides.getOrPut(original) { createFakeOverride(original) }
|
val function = fakeOverrides.getOrPut(original) { createFakeOverride(original) }
|
||||||
processor(function as ConeFunctionSymbol)
|
processor(function)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return super.processFunctionsByName(name, processor)
|
return super.processFunctionsByName(name, processor)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun processPropertiesByName(name: Name, processor: (ConeVariableSymbol) -> ProcessorAction): ProcessorAction {
|
override fun processPropertiesByName(name: Name, processor: (FirCallableSymbol<*>) -> ProcessorAction): ProcessorAction {
|
||||||
return useSiteScope.processPropertiesByName(name, processor)
|
return useSiteScope.processPropertiesByName(name, processor)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,11 +56,12 @@ class FirClassSubstitutionScope(
|
|||||||
return substitutor.substituteOrNull(this)
|
return substitutor.substituteOrNull(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createFakeOverride(original: ConeFunctionSymbol): FirFunctionSymbol {
|
private fun createFakeOverride(original: FirFunctionSymbol<*>): FirFunctionSymbol<*> {
|
||||||
|
val member = when (original) {
|
||||||
val member = original.firUnsafe<FirFunction>()
|
is FirNamedFunctionSymbol -> original.fir
|
||||||
if (member is FirConstructor) return original as FirFunctionSymbol // TODO: substitution for constructors
|
is FirConstructorSymbol -> return original
|
||||||
member as FirNamedFunction
|
is FirAccessorSymbol -> throw AssertionError("Should not be here")
|
||||||
|
}
|
||||||
|
|
||||||
val receiverType = member.receiverTypeRef?.coneTypeUnsafe<ConeKotlinType>()
|
val receiverType = member.receiverTypeRef?.coneTypeUnsafe<ConeKotlinType>()
|
||||||
val newReceiverType = receiverType?.substitute()
|
val newReceiverType = receiverType?.substitute()
|
||||||
@@ -73,19 +73,19 @@ class FirClassSubstitutionScope(
|
|||||||
it.returnTypeRef.coneTypeUnsafe<ConeKotlinType>().substitute()
|
it.returnTypeRef.coneTypeUnsafe<ConeKotlinType>().substitute()
|
||||||
}
|
}
|
||||||
|
|
||||||
return createFakeOverride(session, member, original as FirFunctionSymbol, newReceiverType, newReturnType, newParameterTypes)
|
return createFakeOverride(session, member, original, newReceiverType, newReturnType, newParameterTypes)
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun createFakeOverride(
|
fun createFakeOverride(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
baseFunction: FirNamedFunction,
|
baseFunction: FirNamedFunction,
|
||||||
baseSymbol: FirFunctionSymbol,
|
baseSymbol: FirNamedFunctionSymbol,
|
||||||
newReceiverType: ConeKotlinType? = null,
|
newReceiverType: ConeKotlinType? = null,
|
||||||
newReturnType: ConeKotlinType? = null,
|
newReturnType: ConeKotlinType? = null,
|
||||||
newParameterTypes: List<ConeKotlinType?>? = null
|
newParameterTypes: List<ConeKotlinType?>? = null
|
||||||
): FirFunctionSymbol {
|
): FirNamedFunctionSymbol {
|
||||||
val symbol = FirFunctionSymbol(baseSymbol.callableId, true, baseSymbol)
|
val symbol = FirNamedFunctionSymbol(baseSymbol.callableId, true, baseSymbol)
|
||||||
with(baseFunction) {
|
with(baseFunction) {
|
||||||
// TODO: consider using here some light-weight functions instead of pseudo-real FirMemberFunctionImpl
|
// TODO: consider using here some light-weight functions instead of pseudo-real FirMemberFunctionImpl
|
||||||
// As second alternative, we can invent some light-weight kind of FirRegularClass
|
// As second alternative, we can invent some light-weight kind of FirRegularClass
|
||||||
|
|||||||
+4
-2
@@ -12,6 +12,8 @@ import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
|||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.NEXT
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.NEXT
|
||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.STOP
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.STOP
|
||||||
import org.jetbrains.kotlin.fir.symbols.*
|
import org.jetbrains.kotlin.fir.symbols.*
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
class FirClassUseSiteScope(
|
class FirClassUseSiteScope(
|
||||||
@@ -20,7 +22,7 @@ class FirClassUseSiteScope(
|
|||||||
private val declaredMemberScope: FirScope
|
private val declaredMemberScope: FirScope
|
||||||
) : AbstractFirOverrideScope(session) {
|
) : AbstractFirOverrideScope(session) {
|
||||||
|
|
||||||
override fun processFunctionsByName(name: Name, processor: (ConeFunctionSymbol) -> ProcessorAction): ProcessorAction {
|
override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> ProcessorAction): ProcessorAction {
|
||||||
val seen = mutableSetOf<ConeCallableSymbol>()
|
val seen = mutableSetOf<ConeCallableSymbol>()
|
||||||
if (!declaredMemberScope.processFunctionsByName(name) {
|
if (!declaredMemberScope.processFunctionsByName(name) {
|
||||||
seen += it
|
seen += it
|
||||||
@@ -39,7 +41,7 @@ class FirClassUseSiteScope(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun processPropertiesByName(name: Name, processor: (ConeVariableSymbol) -> ProcessorAction): ProcessorAction {
|
override fun processPropertiesByName(name: Name, processor: (FirCallableSymbol<*>) -> ProcessorAction): ProcessorAction {
|
||||||
val seen = mutableSetOf<ConeCallableSymbol>()
|
val seen = mutableSetOf<ConeCallableSymbol>()
|
||||||
if (!declaredMemberScope.processPropertiesByName(name) {
|
if (!declaredMemberScope.processPropertiesByName(name) {
|
||||||
seen += it
|
seen += it
|
||||||
|
|||||||
@@ -11,9 +11,9 @@ import org.jetbrains.kotlin.fir.scopes.FirTypeParameterScope
|
|||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.NEXT
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.NEXT
|
||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.STOP
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.STOP
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeFunctionSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassifierSymbol
|
import org.jetbrains.kotlin.fir.symbols.ConeClassifierSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeVariableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
class FirCompositeScope(
|
class FirCompositeScope(
|
||||||
@@ -57,11 +57,11 @@ class FirCompositeScope(
|
|||||||
return NEXT
|
return NEXT
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun processFunctionsByName(name: Name, processor: (ConeFunctionSymbol) -> ProcessorAction): ProcessorAction {
|
override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> ProcessorAction): ProcessorAction {
|
||||||
return processComposite(FirScope::processFunctionsByName, name, processor)
|
return processComposite(FirScope::processFunctionsByName, name, processor)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun processPropertiesByName(name: Name, processor: (ConeVariableSymbol) -> ProcessorAction): ProcessorAction {
|
override fun processPropertiesByName(name: Name, processor: (FirCallableSymbol<*>) -> ProcessorAction): ProcessorAction {
|
||||||
return processComposite(FirScope::processPropertiesByName, name, processor)
|
return processComposite(FirScope::processPropertiesByName, name, processor)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,20 +12,21 @@ import org.jetbrains.kotlin.fir.declarations.FirProperty
|
|||||||
import org.jetbrains.kotlin.fir.expressions.FirVariable
|
import org.jetbrains.kotlin.fir.expressions.FirVariable
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeVariableSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
class FirLocalScope : FirScope() {
|
class FirLocalScope : FirScope() {
|
||||||
|
|
||||||
val properties = mutableMapOf<Name, ConeVariableSymbol>()
|
val properties = mutableMapOf<Name, FirVariableSymbol<*>>()
|
||||||
val functions = mutableMapOf<Name, ConeFunctionSymbol>()
|
val functions = mutableMapOf<Name, FirFunctionSymbol<*>>()
|
||||||
|
|
||||||
fun storeDeclaration(declaration: FirNamedDeclaration) {
|
fun storeDeclaration(declaration: FirNamedDeclaration) {
|
||||||
when (declaration) {
|
when (declaration) {
|
||||||
is FirVariable -> properties[declaration.name] = declaration.symbol
|
is FirVariable<*> -> properties[declaration.name] = declaration.symbol
|
||||||
is FirNamedFunction -> functions[declaration.name] = declaration.symbol as FirFunctionSymbol
|
is FirNamedFunction -> functions[declaration.name] = declaration.symbol as FirNamedFunctionSymbol
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -33,7 +34,7 @@ class FirLocalScope : FirScope() {
|
|||||||
properties[FirBackingFieldReference.NAME] = property.backingFieldSymbol
|
properties[FirBackingFieldReference.NAME] = property.backingFieldSymbol
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun processFunctionsByName(name: Name, processor: (ConeFunctionSymbol) -> ProcessorAction): ProcessorAction {
|
override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> ProcessorAction): ProcessorAction {
|
||||||
val prop = functions[name]
|
val prop = functions[name]
|
||||||
if (prop != null) {
|
if (prop != null) {
|
||||||
return processor(prop)
|
return processor(prop)
|
||||||
@@ -41,7 +42,7 @@ class FirLocalScope : FirScope() {
|
|||||||
return ProcessorAction.NEXT
|
return ProcessorAction.NEXT
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun processPropertiesByName(name: Name, processor: (ConeVariableSymbol) -> ProcessorAction): ProcessorAction {
|
override fun processPropertiesByName(name: Name, processor: (FirCallableSymbol<*>) -> ProcessorAction): ProcessorAction {
|
||||||
val prop = properties[name]
|
val prop = properties[name]
|
||||||
if (prop != null) {
|
if (prop != null) {
|
||||||
return processor(prop)
|
return processor(prop)
|
||||||
|
|||||||
@@ -8,9 +8,9 @@ package org.jetbrains.kotlin.fir.scopes.impl
|
|||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.ConeFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeVariableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
class FirSuperTypeScope(
|
class FirSuperTypeScope(
|
||||||
@@ -18,7 +18,7 @@ class FirSuperTypeScope(
|
|||||||
val scopes: List<FirScope>
|
val scopes: List<FirScope>
|
||||||
) : AbstractFirOverrideScope(session) {
|
) : AbstractFirOverrideScope(session) {
|
||||||
|
|
||||||
override fun processFunctionsByName(name: Name, processor: (ConeFunctionSymbol) -> ProcessorAction): ProcessorAction {
|
override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> ProcessorAction): ProcessorAction {
|
||||||
val accepted = HashSet<ConeFunctionSymbol>()
|
val accepted = HashSet<ConeFunctionSymbol>()
|
||||||
val pending = mutableListOf<ConeFunctionSymbol>()
|
val pending = mutableListOf<ConeFunctionSymbol>()
|
||||||
for (scope in scopes) {
|
for (scope in scopes) {
|
||||||
@@ -40,9 +40,9 @@ class FirSuperTypeScope(
|
|||||||
return super.processFunctionsByName(name, processor)
|
return super.processFunctionsByName(name, processor)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun processPropertiesByName(name: Name, processor: (ConeVariableSymbol) -> ProcessorAction): ProcessorAction {
|
override fun processPropertiesByName(name: Name, processor: (FirCallableSymbol<*>) -> ProcessorAction): ProcessorAction {
|
||||||
val accepted = HashSet<ConeCallableSymbol>()
|
val accepted = HashSet<FirCallableSymbol<*>>()
|
||||||
val pending = mutableListOf<ConeVariableSymbol>()
|
val pending = mutableListOf<FirCallableSymbol<*>>()
|
||||||
for (scope in scopes) {
|
for (scope in scopes) {
|
||||||
if (scope.processPropertiesByName(name) {
|
if (scope.processPropertiesByName(name) {
|
||||||
if (it !in accepted && it.isOverridden(accepted) == null) {
|
if (it !in accepted && it.isOverridden(accepted) == null) {
|
||||||
|
|||||||
+5
-5
@@ -12,9 +12,9 @@ import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
|||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.NEXT
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.NEXT
|
||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.STOP
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.STOP
|
||||||
import org.jetbrains.kotlin.fir.scopes.processConstructors
|
import org.jetbrains.kotlin.fir.scopes.processConstructors
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeFunctionSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConePropertySymbol
|
import org.jetbrains.kotlin.fir.symbols.ConePropertySymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeVariableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
@@ -25,7 +25,7 @@ class FirTopLevelDeclaredMemberScope(
|
|||||||
) : FirAbstractProviderBasedScope(session, lookupInFir) {
|
) : FirAbstractProviderBasedScope(session, lookupInFir) {
|
||||||
private val packageFqName = file.packageFqName
|
private val packageFqName = file.packageFqName
|
||||||
|
|
||||||
override fun processFunctionsByName(name: Name, processor: (ConeFunctionSymbol) -> ProcessorAction): ProcessorAction {
|
override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> ProcessorAction): ProcessorAction {
|
||||||
val matchedClass = provider.getClassLikeSymbolByFqName(ClassId(packageFqName, name))
|
val matchedClass = provider.getClassLikeSymbolByFqName(ClassId(packageFqName, name))
|
||||||
|
|
||||||
if (processConstructors(
|
if (processConstructors(
|
||||||
@@ -40,14 +40,14 @@ class FirTopLevelDeclaredMemberScope(
|
|||||||
}
|
}
|
||||||
val symbols = provider.getTopLevelCallableSymbols(packageFqName, name)
|
val symbols = provider.getTopLevelCallableSymbols(packageFqName, name)
|
||||||
for (symbol in symbols) {
|
for (symbol in symbols) {
|
||||||
if (symbol is ConeFunctionSymbol && !processor(symbol)) {
|
if (symbol is FirFunctionSymbol<*> && !processor(symbol)) {
|
||||||
return STOP
|
return STOP
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return NEXT
|
return NEXT
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun processPropertiesByName(name: Name, processor: (ConeVariableSymbol) -> ProcessorAction): ProcessorAction {
|
override fun processPropertiesByName(name: Name, processor: (FirCallableSymbol<*>) -> ProcessorAction): ProcessorAction {
|
||||||
val symbols = provider.getTopLevelCallableSymbols(packageFqName, name)
|
val symbols = provider.getTopLevelCallableSymbols(packageFqName, name)
|
||||||
for (symbol in symbols) {
|
for (symbol in symbols) {
|
||||||
if (symbol is ConePropertySymbol && !processor(symbol)) {
|
if (symbol is ConePropertySymbol && !processor(symbol)) {
|
||||||
|
|||||||
@@ -6,13 +6,14 @@
|
|||||||
package org.jetbrains.kotlin.fir.symbols
|
package org.jetbrains.kotlin.fir.symbols
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
|
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
|
|
||||||
|
|
||||||
val FirSymbolProvider.Any: ConeClassLikeSymbol get() = this.getClassLikeSymbolByFqName(StandardClassIds.Any)!!
|
val FirSymbolProvider.Any: FirClassLikeSymbol<*> get() = this.getClassLikeSymbolByFqName(StandardClassIds.Any)!!
|
||||||
val FirSymbolProvider.Nothing: ConeClassLikeSymbol get() = this.getClassLikeSymbolByFqName(StandardClassIds.Nothing)!!
|
val FirSymbolProvider.Nothing: FirClassLikeSymbol<*> get() = this.getClassLikeSymbolByFqName(StandardClassIds.Nothing)!!
|
||||||
|
|
||||||
|
|
||||||
operator fun ClassId.invoke(symbolProvider: FirSymbolProvider): ConeClassLikeSymbol {
|
operator fun ClassId.invoke(symbolProvider: FirSymbolProvider): FirClassLikeSymbol<*> {
|
||||||
return symbolProvider.getClassLikeSymbolByFqName(this)!!
|
return symbolProvider.getClassLikeSymbolByFqName(this)!!
|
||||||
}
|
}
|
||||||
@@ -277,8 +277,8 @@ interface ConeTypeContext : TypeSystemContext, TypeSystemOptimizationContext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun TypeConstructorMarker.isCommonFinalClassConstructor(): Boolean {
|
override fun TypeConstructorMarker.isCommonFinalClassConstructor(): Boolean {
|
||||||
val classSymbol = this as? ConeClassSymbol ?: return false
|
val classSymbol = this as? FirClassSymbol ?: return false
|
||||||
val fir = (classSymbol as FirClassSymbol).fir
|
val fir = classSymbol.fir
|
||||||
return fir.modality == Modality.FINAL &&
|
return fir.modality == Modality.FINAL &&
|
||||||
fir.classKind != ClassKind.ENUM_ENTRY &&
|
fir.classKind != ClassKind.ENUM_ENTRY &&
|
||||||
fir.classKind != ClassKind.ANNOTATION_CLASS
|
fir.classKind != ClassKind.ANNOTATION_CLASS
|
||||||
|
|||||||
+1
-2
@@ -9,7 +9,6 @@ import com.intellij.psi.search.GlobalSearchScope
|
|||||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||||
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
|
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||||
import org.jetbrains.kotlin.jvm.compiler.LoadDescriptorUtil.compileKotlinToDirAndGetModule
|
import org.jetbrains.kotlin.jvm.compiler.LoadDescriptorUtil.compileKotlinToDirAndGetModule
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
@@ -66,7 +65,7 @@ abstract class AbstractFirLoadCompiledKotlin : AbstractFirResolveWithSessionTest
|
|||||||
|
|
||||||
for (name in provider.getAllCallableNamesInPackage(packageFqName)) {
|
for (name in provider.getAllCallableNamesInPackage(packageFqName)) {
|
||||||
for (symbol in provider.getTopLevelCallableSymbols(packageFqName, name)) {
|
for (symbol in provider.getTopLevelCallableSymbols(packageFqName, name)) {
|
||||||
(symbol as FirCallableSymbol).fir.accept(firRenderer)
|
symbol.fir.accept(firRenderer)
|
||||||
builder.appendln()
|
builder.appendln()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-2
@@ -9,7 +9,6 @@ import com.intellij.psi.search.GlobalSearchScope
|
|||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||||
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
|
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
@@ -42,7 +41,7 @@ class BuiltInsDeserializationForFirTestCase : AbstractFirResolveWithSessionTestC
|
|||||||
|
|
||||||
for (name in provider.getAllCallableNamesInPackage(packageFqName)) {
|
for (name in provider.getAllCallableNamesInPackage(packageFqName)) {
|
||||||
for (symbol in provider.getTopLevelCallableSymbols(packageFqName, name)) {
|
for (symbol in provider.getTopLevelCallableSymbols(packageFqName, name)) {
|
||||||
(symbol as FirCallableSymbol).fir.accept(firRenderer)
|
symbol.fir.accept(firRenderer)
|
||||||
builder.appendln()
|
builder.appendln()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+8
-7
@@ -34,7 +34,8 @@ import org.jetbrains.kotlin.fir.resolve.impl.FirCompositeSymbolProvider
|
|||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirCompositeScope
|
import org.jetbrains.kotlin.fir.scopes.impl.FirCompositeScope
|
||||||
import org.jetbrains.kotlin.fir.service
|
import org.jetbrains.kotlin.fir.service
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
@@ -190,8 +191,8 @@ abstract class AbstractFirTypeEnhancementTest : KtUsefulTestCase() {
|
|||||||
if (declaration in renderedDeclarations) continue
|
if (declaration in renderedDeclarations) continue
|
||||||
when (declaration) {
|
when (declaration) {
|
||||||
is FirJavaConstructor -> enhancementScope.processFunctionsByName(javaClass.name) { symbol ->
|
is FirJavaConstructor -> enhancementScope.processFunctionsByName(javaClass.name) { symbol ->
|
||||||
val enhanced = (symbol as? FirFunctionSymbol)?.fir
|
val enhanced = symbol.fir
|
||||||
if (enhanced != null && enhanced !in renderedDeclarations) {
|
if (enhanced !in renderedDeclarations) {
|
||||||
enhanced.accept(renderer, null)
|
enhanced.accept(renderer, null)
|
||||||
renderer.newLine()
|
renderer.newLine()
|
||||||
renderedDeclarations += enhanced
|
renderedDeclarations += enhanced
|
||||||
@@ -199,8 +200,8 @@ abstract class AbstractFirTypeEnhancementTest : KtUsefulTestCase() {
|
|||||||
ProcessorAction.NEXT
|
ProcessorAction.NEXT
|
||||||
}
|
}
|
||||||
is FirJavaMethod -> enhancementScope.processFunctionsByName(declaration.name) { symbol ->
|
is FirJavaMethod -> enhancementScope.processFunctionsByName(declaration.name) { symbol ->
|
||||||
val enhanced = (symbol as? FirFunctionSymbol)?.fir
|
val enhanced = symbol.fir
|
||||||
if (enhanced != null && enhanced !in renderedDeclarations) {
|
if (enhanced !in renderedDeclarations) {
|
||||||
enhanced.accept(renderer, null)
|
enhanced.accept(renderer, null)
|
||||||
renderer.newLine()
|
renderer.newLine()
|
||||||
renderedDeclarations += enhanced
|
renderedDeclarations += enhanced
|
||||||
@@ -208,8 +209,8 @@ abstract class AbstractFirTypeEnhancementTest : KtUsefulTestCase() {
|
|||||||
ProcessorAction.NEXT
|
ProcessorAction.NEXT
|
||||||
}
|
}
|
||||||
is FirJavaField -> enhancementScope.processPropertiesByName(declaration.name) { symbol ->
|
is FirJavaField -> enhancementScope.processPropertiesByName(declaration.name) { symbol ->
|
||||||
val enhanced = (symbol as? FirPropertySymbol)?.fir
|
val enhanced = symbol.fir
|
||||||
if (enhanced != null && enhanced !in renderedDeclarations) {
|
if (enhanced !in renderedDeclarations) {
|
||||||
enhanced.accept(renderer, null)
|
enhanced.accept(renderer, null)
|
||||||
renderer.newLine()
|
renderer.newLine()
|
||||||
renderedDeclarations += enhanced
|
renderedDeclarations += enhanced
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.fir.expressions.impl.FirUnitExpression
|
|||||||
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
|
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol
|
import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeSymbol
|
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.fir.types.impl.FirImplicitBuiltinTypeRef
|
import org.jetbrains.kotlin.fir.types.impl.FirImplicitBuiltinTypeRef
|
||||||
@@ -146,7 +146,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitCallableDeclaration(callableDeclaration: FirCallableDeclaration) {
|
override fun <F : FirCallableDeclaration<F>> visitCallableDeclaration(callableDeclaration: FirCallableDeclaration<F>) {
|
||||||
if (callableDeclaration is FirMemberDeclaration) {
|
if (callableDeclaration is FirMemberDeclaration) {
|
||||||
visitMemberDeclaration(callableDeclaration)
|
visitMemberDeclaration(callableDeclaration)
|
||||||
} else {
|
} else {
|
||||||
@@ -178,7 +178,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
|||||||
|
|
||||||
private fun FirMemberDeclaration.modalityAsString(): String {
|
private fun FirMemberDeclaration.modalityAsString(): String {
|
||||||
return modality?.name?.toLowerCase() ?: run {
|
return modality?.name?.toLowerCase() ?: run {
|
||||||
if (this is FirCallableMemberDeclaration && this.isOverride) {
|
if (this is FirCallableMemberDeclaration<*> && this.isOverride) {
|
||||||
"open?"
|
"open?"
|
||||||
} else {
|
} else {
|
||||||
"final?"
|
"final?"
|
||||||
@@ -203,7 +203,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
|||||||
if (memberDeclaration.isActual) {
|
if (memberDeclaration.isActual) {
|
||||||
print("actual ")
|
print("actual ")
|
||||||
}
|
}
|
||||||
if (memberDeclaration is FirCallableMemberDeclaration) {
|
if (memberDeclaration is FirCallableMemberDeclaration<*>) {
|
||||||
if (memberDeclaration.isOverride) {
|
if (memberDeclaration.isOverride) {
|
||||||
print("override ")
|
print("override ")
|
||||||
}
|
}
|
||||||
@@ -257,9 +257,9 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
|||||||
|
|
||||||
override fun visitNamedDeclaration(namedDeclaration: FirNamedDeclaration) {
|
override fun visitNamedDeclaration(namedDeclaration: FirNamedDeclaration) {
|
||||||
visitDeclaration(namedDeclaration)
|
visitDeclaration(namedDeclaration)
|
||||||
if (namedDeclaration !is FirCallableDeclaration) { // Handled by visitCallableDeclaration
|
if (namedDeclaration !is FirCallableDeclaration<*>) { // Handled by visitCallableDeclaration
|
||||||
print(" " + namedDeclaration.name)
|
print(" " + namedDeclaration.name)
|
||||||
if (namedDeclaration is FirClassLikeDeclaration) {
|
if (namedDeclaration is FirClassLikeDeclaration<*>) {
|
||||||
namedDeclaration.typeParameters.renderTypeParameters()
|
namedDeclaration.typeParameters.renderTypeParameters()
|
||||||
}
|
}
|
||||||
} else if (namedDeclaration is FirMemberDeclaration) {
|
} else if (namedDeclaration is FirMemberDeclaration) {
|
||||||
@@ -278,7 +278,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
|||||||
is FirNamedFunction -> "fun"
|
is FirNamedFunction -> "fun"
|
||||||
is FirProperty -> if (declaration.isVal) "val" else "var"
|
is FirProperty -> if (declaration.isVal) "val" else "var"
|
||||||
is FirField -> "field"
|
is FirField -> "field"
|
||||||
is FirVariable -> if (declaration.isVal) "lval" else "lvar"
|
is FirVariable<*> -> if (declaration.isVal) "lval" else "lvar"
|
||||||
else -> "unknown"
|
else -> "unknown"
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@@ -325,7 +325,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
|||||||
anonymousObject.renderDeclarations()
|
anonymousObject.renderDeclarations()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitVariable(variable: FirVariable) {
|
override fun <F : FirVariable<F>> visitVariable(variable: FirVariable<F>) {
|
||||||
visitCallableDeclaration(variable)
|
visitCallableDeclaration(variable)
|
||||||
variable.initializer?.let {
|
variable.initializer?.let {
|
||||||
print(" = ")
|
print(" = ")
|
||||||
@@ -798,7 +798,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
|||||||
|
|
||||||
override fun visitResolvedCallableReference(resolvedCallableReference: FirResolvedCallableReference) {
|
override fun visitResolvedCallableReference(resolvedCallableReference: FirResolvedCallableReference) {
|
||||||
print("R|")
|
print("R|")
|
||||||
val isFakeOverride = (resolvedCallableReference.coneSymbol as? FirFunctionSymbol)?.isFakeOverride == true
|
val isFakeOverride = (resolvedCallableReference.coneSymbol as? FirNamedFunctionSymbol)?.isFakeOverride == true
|
||||||
|
|
||||||
if (isFakeOverride) {
|
if (isFakeOverride) {
|
||||||
print("FakeOverride<")
|
print("FakeOverride<")
|
||||||
@@ -810,7 +810,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
|||||||
print(symbol.classId)
|
print(symbol.classId)
|
||||||
if (isFakeOverride) {
|
if (isFakeOverride) {
|
||||||
when (symbol) {
|
when (symbol) {
|
||||||
is FirFunctionSymbol -> {
|
is FirNamedFunctionSymbol -> {
|
||||||
print(": ")
|
print(": ")
|
||||||
symbol.fir.returnTypeRef.accept(this)
|
symbol.fir.returnTypeRef.accept(this)
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -12,11 +12,11 @@ import org.jetbrains.kotlin.fir.types.FirTypeRef
|
|||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
|
|
||||||
// Good name needed (something with receiver, type parameters, return type, and name)
|
// Good name needed (something with receiver, type parameters, return type, and name)
|
||||||
interface FirCallableDeclaration :
|
interface FirCallableDeclaration<F : FirCallableDeclaration<F>> :
|
||||||
@VisitedSupertype FirDeclaration,
|
@VisitedSupertype FirDeclaration,
|
||||||
FirTypedDeclaration, FirSymbolOwner<FirCallableDeclaration> {
|
FirTypedDeclaration, FirSymbolOwner<F> {
|
||||||
|
|
||||||
override val symbol: FirCallableSymbol
|
override val symbol: FirCallableSymbol<F>
|
||||||
|
|
||||||
val receiverTypeRef: FirTypeRef?
|
val receiverTypeRef: FirTypeRef?
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -9,7 +9,8 @@ import org.jetbrains.kotlin.fir.VisitedSupertype
|
|||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
||||||
|
|
||||||
interface FirCallableMemberDeclaration : @VisitedSupertype FirDeclaration, FirMemberDeclaration, FirCallableDeclaration {
|
interface FirCallableMemberDeclaration<F : FirCallableMemberDeclaration<F>> :
|
||||||
|
@VisitedSupertype FirDeclaration, FirMemberDeclaration, FirCallableDeclaration<F> {
|
||||||
|
|
||||||
val isOverride: Boolean get() = status.isOverride
|
val isOverride: Boolean get() = status.isOverride
|
||||||
|
|
||||||
|
|||||||
+6
-4
@@ -7,14 +7,16 @@ package org.jetbrains.kotlin.fir.declarations
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.fir.VisitedSupertype
|
import org.jetbrains.kotlin.fir.VisitedSupertype
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirStatement
|
import org.jetbrains.kotlin.fir.expressions.FirStatement
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassifierSymbol
|
import org.jetbrains.kotlin.fir.symbols.ConeClassifierSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.FirSymbolOwner
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
|
|
||||||
interface FirClassLikeDeclaration : @VisitedSupertype FirMemberDeclaration, FirStatement {
|
interface FirClassLikeDeclaration<F : FirClassLikeDeclaration<F>> :
|
||||||
val symbol: ConeClassLikeSymbol
|
@VisitedSupertype FirMemberDeclaration, FirStatement, FirSymbolOwner<F> {
|
||||||
|
override val symbol: FirClassLikeSymbol<F>
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R {
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R {
|
||||||
return super<FirMemberDeclaration>.accept(visitor, data)
|
return super<FirMemberDeclaration>.accept(visitor, data)
|
||||||
@@ -25,7 +27,7 @@ interface FirClassLikeDeclaration : @VisitedSupertype FirMemberDeclaration, FirS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun ConeClassifierSymbol.toFirClassLike(): FirClassLikeDeclaration? =
|
fun ConeClassifierSymbol.toFirClassLike(): FirClassLikeDeclaration<*>? =
|
||||||
when (this) {
|
when (this) {
|
||||||
is FirClassSymbol -> this.fir
|
is FirClassSymbol -> this.fir
|
||||||
is FirTypeAliasSymbol -> this.fir
|
is FirTypeAliasSymbol -> this.fir
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
|||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
|
|
||||||
@BaseTransformedType
|
@BaseTransformedType
|
||||||
interface FirConstructor : @VisitedSupertype FirFunction, FirCallableMemberDeclaration {
|
interface FirConstructor : @VisitedSupertype FirMemberFunction<FirConstructor> {
|
||||||
|
|
||||||
val isPrimary: Boolean get() = false
|
val isPrimary: Boolean get() = false
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.fir.expressions.FirVariable
|
|||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
|
|
||||||
@BaseTransformedType
|
@BaseTransformedType
|
||||||
interface FirField : @VisitedSupertype FirDeclaration, FirCallableMemberDeclaration, FirVariable {
|
interface FirField : @VisitedSupertype FirDeclaration, FirCallableMemberDeclaration<FirField>, FirVariable<FirField> {
|
||||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||||
visitor.visitField(this, data)
|
visitor.visitField(this, data)
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.fir.declarations
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.fir.VisitedSupertype
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
|
|
||||||
|
interface FirMemberFunction<F : FirMemberFunction<F>> :
|
||||||
|
@VisitedSupertype FirFunction, FirCallableMemberDeclaration<F> {
|
||||||
|
|
||||||
|
override val symbol: FirFunctionSymbol<F>
|
||||||
|
|
||||||
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R {
|
||||||
|
return visitor.visitMemberFunction(this, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||||
|
super<FirCallableMemberDeclaration>.acceptChildren(visitor, data)
|
||||||
|
for (parameter in valueParameters) {
|
||||||
|
parameter.accept(visitor, data)
|
||||||
|
}
|
||||||
|
body?.accept(visitor, data)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,12 +7,10 @@ package org.jetbrains.kotlin.fir.declarations
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.fir.BaseTransformedType
|
import org.jetbrains.kotlin.fir.BaseTransformedType
|
||||||
import org.jetbrains.kotlin.fir.VisitedSupertype
|
import org.jetbrains.kotlin.fir.VisitedSupertype
|
||||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
|
|
||||||
@BaseTransformedType
|
@BaseTransformedType
|
||||||
interface FirNamedFunction : @VisitedSupertype FirFunction, FirCallableMemberDeclaration, FirMemberDeclaration {
|
interface FirNamedFunction : @VisitedSupertype FirMemberFunction<FirNamedFunction>, FirMemberDeclaration {
|
||||||
val isOperator: Boolean get() = status.isOperator
|
val isOperator: Boolean get() = status.isOperator
|
||||||
|
|
||||||
val isInfix: Boolean get() = status.isInfix
|
val isInfix: Boolean get() = status.isInfix
|
||||||
@@ -29,12 +27,4 @@ interface FirNamedFunction : @VisitedSupertype FirFunction, FirCallableMemberDec
|
|||||||
|
|
||||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||||
visitor.visitNamedFunction(this, data)
|
visitor.visitNamedFunction(this, data)
|
||||||
|
|
||||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
|
||||||
super<FirCallableMemberDeclaration>.acceptChildren(visitor, data)
|
|
||||||
for (parameter in valueParameters) {
|
|
||||||
parameter.accept(visitor, data)
|
|
||||||
}
|
|
||||||
body?.accept(visitor, data)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -14,7 +14,8 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
|||||||
|
|
||||||
// May be should not inherit FirVariable
|
// May be should not inherit FirVariable
|
||||||
@BaseTransformedType
|
@BaseTransformedType
|
||||||
interface FirProperty : @VisitedSupertype FirDeclaration, FirCallableMemberDeclaration, FirVariable, FirMemberDeclaration {
|
interface FirProperty :
|
||||||
|
@VisitedSupertype FirDeclaration, FirCallableMemberDeclaration<FirProperty>, FirVariable<FirProperty>, FirMemberDeclaration {
|
||||||
val isConst: Boolean get() = status.isConst
|
val isConst: Boolean get() = status.isConst
|
||||||
|
|
||||||
val isLateInit: Boolean get() = status.isLateInit
|
val isLateInit: Boolean get() = status.isLateInit
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir.declarations
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.fir.BaseTransformedType
|
import org.jetbrains.kotlin.fir.BaseTransformedType
|
||||||
import org.jetbrains.kotlin.fir.VisitedSupertype
|
import org.jetbrains.kotlin.fir.VisitedSupertype
|
||||||
import org.jetbrains.kotlin.fir.symbols.FirSymbolOwner
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
@@ -15,7 +14,7 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
|||||||
// May be all containers should be properties and not base classes
|
// May be all containers should be properties and not base classes
|
||||||
// About descriptors: introduce something like FirDescriptor which is FirUnresolved at the beginning and FirSymbol(descriptor) at the end
|
// About descriptors: introduce something like FirDescriptor which is FirUnresolved at the beginning and FirSymbol(descriptor) at the end
|
||||||
@BaseTransformedType
|
@BaseTransformedType
|
||||||
interface FirRegularClass : FirClass, @VisitedSupertype FirClassLikeDeclaration, FirSymbolOwner<FirRegularClass> {
|
interface FirRegularClass : FirClass, @VisitedSupertype FirClassLikeDeclaration<FirRegularClass> {
|
||||||
val isInner: Boolean get() = status.isInner
|
val isInner: Boolean get() = status.isInner
|
||||||
|
|
||||||
val isCompanion: Boolean get() = status.isCompanion
|
val isCompanion: Boolean get() = status.isCompanion
|
||||||
|
|||||||
@@ -5,14 +5,13 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.declarations
|
package org.jetbrains.kotlin.fir.declarations
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.FirSymbolOwner
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.coneTypeSafe
|
import org.jetbrains.kotlin.fir.types.coneTypeSafe
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
|
|
||||||
interface FirTypeAlias : FirClassLikeDeclaration, FirSymbolOwner<FirTypeAlias> {
|
interface FirTypeAlias : FirClassLikeDeclaration<FirTypeAlias> {
|
||||||
fun replaceExpandTypeRef(typeRef: FirTypeRef): FirTypeAlias
|
fun replaceExpandTypeRef(typeRef: FirTypeRef): FirTypeAlias
|
||||||
|
|
||||||
val expandedTypeRef: FirTypeRef
|
val expandedTypeRef: FirTypeRef
|
||||||
|
|||||||
@@ -9,12 +9,11 @@ import org.jetbrains.kotlin.fir.BaseTransformedType
|
|||||||
import org.jetbrains.kotlin.fir.VisitedSupertype
|
import org.jetbrains.kotlin.fir.VisitedSupertype
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirVariable
|
import org.jetbrains.kotlin.fir.expressions.FirVariable
|
||||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
|
|
||||||
@BaseTransformedType
|
@BaseTransformedType
|
||||||
interface FirValueParameter : @VisitedSupertype FirDeclaration, FirTypedDeclaration, FirNamedDeclaration, FirVariable {
|
interface FirValueParameter : @VisitedSupertype FirDeclaration, FirTypedDeclaration, FirNamedDeclaration, FirVariable<FirValueParameter> {
|
||||||
val isCrossinline: Boolean
|
val isCrossinline: Boolean
|
||||||
|
|
||||||
val isNoinline: Boolean
|
val isNoinline: Boolean
|
||||||
@@ -23,7 +22,7 @@ interface FirValueParameter : @VisitedSupertype FirDeclaration, FirTypedDeclarat
|
|||||||
|
|
||||||
val defaultValue: FirExpression?
|
val defaultValue: FirExpression?
|
||||||
|
|
||||||
override val symbol: FirVariableSymbol
|
override val symbol: FirVariableSymbol<FirValueParameter>
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||||
visitor.visitValueParameter(this, data)
|
visitor.visitValueParameter(this, data)
|
||||||
|
|||||||
+2
-2
@@ -17,9 +17,9 @@ import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
|||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
||||||
|
|
||||||
abstract class FirAbstractCallableMember : FirAbstractMemberDeclaration, FirCallableMemberDeclaration {
|
abstract class FirAbstractCallableMember<F : FirCallableMemberDeclaration<F>> :
|
||||||
|
FirAbstractMemberDeclaration, FirCallableMemberDeclaration<F> {
|
||||||
|
|
||||||
// final override val symbol: FirBasedSymbol<FirCallableDeclaration>
|
|
||||||
final override var receiverTypeRef: FirTypeRef?
|
final override var receiverTypeRef: FirTypeRef?
|
||||||
final override var returnTypeRef: FirTypeRef
|
final override var returnTypeRef: FirTypeRef
|
||||||
|
|
||||||
|
|||||||
+5
-5
@@ -14,23 +14,23 @@ import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol
|
||||||
import org.jetbrains.kotlin.fir.transformInplace
|
import org.jetbrains.kotlin.fir.transformInplace
|
||||||
import org.jetbrains.kotlin.fir.transformSingle
|
import org.jetbrains.kotlin.fir.transformSingle
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
open class FirConstructorImpl : FirAbstractCallableMember, FirConstructor {
|
open class FirConstructorImpl : FirAbstractCallableMember<FirConstructor>, FirConstructor {
|
||||||
|
|
||||||
override val symbol: FirFunctionSymbol
|
override val symbol: FirConstructorSymbol
|
||||||
|
|
||||||
final override var delegatedConstructor: FirDelegatedConstructorCall? = null
|
final override var delegatedConstructor: FirDelegatedConstructorCall? = null
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
psi: PsiElement?,
|
psi: PsiElement?,
|
||||||
symbol: FirFunctionSymbol,
|
symbol: FirConstructorSymbol,
|
||||||
visibility: Visibility,
|
visibility: Visibility,
|
||||||
isExpect: Boolean,
|
isExpect: Boolean,
|
||||||
isActual: Boolean,
|
isActual: Boolean,
|
||||||
@@ -48,7 +48,7 @@ open class FirConstructorImpl : FirAbstractCallableMember, FirConstructor {
|
|||||||
constructor(
|
constructor(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
psi: PsiElement?,
|
psi: PsiElement?,
|
||||||
symbol: FirFunctionSymbol,
|
symbol: FirConstructorSymbol,
|
||||||
receiverTypeRef: FirTypeRef?,
|
receiverTypeRef: FirTypeRef?,
|
||||||
returnTypeRef: FirTypeRef
|
returnTypeRef: FirTypeRef
|
||||||
) : super(session, psi, NAME, receiverTypeRef, returnTypeRef) {
|
) : super(session, psi, NAME, receiverTypeRef, returnTypeRef) {
|
||||||
|
|||||||
+1
-1
@@ -20,7 +20,7 @@ class FirDefaultSetterValueParameter(
|
|||||||
session: FirSession,
|
session: FirSession,
|
||||||
psi: PsiElement?,
|
psi: PsiElement?,
|
||||||
override var returnTypeRef: FirTypeRef,
|
override var returnTypeRef: FirTypeRef,
|
||||||
override val symbol: FirVariableSymbol = FirVariableSymbol(name)
|
override val symbol: FirVariableSymbol<FirValueParameter> = FirVariableSymbol(name)
|
||||||
) : FirAbstractNamedAnnotatedDeclaration(session, psi, name), FirValueParameter {
|
) : FirAbstractNamedAnnotatedDeclaration(session, psi, name), FirValueParameter {
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
|||||||
+6
-5
@@ -12,22 +12,23 @@ import org.jetbrains.kotlin.fir.FirElement
|
|||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.transformInplace
|
import org.jetbrains.kotlin.fir.transformInplace
|
||||||
import org.jetbrains.kotlin.fir.transformSingle
|
import org.jetbrains.kotlin.fir.transformSingle
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
open class FirMemberFunctionImpl : FirAbstractCallableMember, FirNamedFunction, FirModifiableFunction {
|
open class FirMemberFunctionImpl : FirAbstractCallableMember<FirNamedFunction>, FirNamedFunction, FirModifiableFunction {
|
||||||
|
|
||||||
override val symbol: FirCallableSymbol
|
// NB: FirAccessorSymbol can be here
|
||||||
|
override val symbol: FirFunctionSymbol<FirNamedFunction>
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
psi: PsiElement?,
|
psi: PsiElement?,
|
||||||
symbol: FirCallableSymbol,
|
symbol: FirFunctionSymbol<FirNamedFunction>,
|
||||||
name: Name,
|
name: Name,
|
||||||
receiverTypeRef: FirTypeRef?,
|
receiverTypeRef: FirTypeRef?,
|
||||||
returnTypeRef: FirTypeRef
|
returnTypeRef: FirTypeRef
|
||||||
@@ -39,7 +40,7 @@ open class FirMemberFunctionImpl : FirAbstractCallableMember, FirNamedFunction,
|
|||||||
constructor(
|
constructor(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
psi: PsiElement?,
|
psi: PsiElement?,
|
||||||
symbol: FirFunctionSymbol,
|
symbol: FirNamedFunctionSymbol,
|
||||||
name: Name,
|
name: Name,
|
||||||
visibility: Visibility,
|
visibility: Visibility,
|
||||||
modality: Modality?,
|
modality: Modality?,
|
||||||
|
|||||||
+1
-1
@@ -40,7 +40,7 @@ class FirMemberPropertyImpl(
|
|||||||
override var getter: FirPropertyAccessor,
|
override var getter: FirPropertyAccessor,
|
||||||
override var setter: FirPropertyAccessor?,
|
override var setter: FirPropertyAccessor?,
|
||||||
override var delegate: FirExpression?
|
override var delegate: FirExpression?
|
||||||
) : FirAbstractCallableMember(
|
) : FirAbstractCallableMember<FirProperty>(
|
||||||
session, psi, name, visibility, modality, isExpect, isActual, isOverride, receiverTypeRef, returnTypeRef
|
session, psi, name, visibility, modality, isExpect, isActual, isOverride, receiverTypeRef, returnTypeRef
|
||||||
), FirProperty {
|
), FirProperty {
|
||||||
override val backingFieldSymbol = FirBackingFieldSymbol(symbol.callableId)
|
override val backingFieldSymbol = FirBackingFieldSymbol(symbol.callableId)
|
||||||
|
|||||||
+2
-2
@@ -9,13 +9,13 @@ import com.intellij.psi.PsiElement
|
|||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
|
|
||||||
class FirPrimaryConstructorImpl(
|
class FirPrimaryConstructorImpl(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
psi: PsiElement?,
|
psi: PsiElement?,
|
||||||
symbol: FirFunctionSymbol,
|
symbol: FirConstructorSymbol,
|
||||||
visibility: Visibility,
|
visibility: Visibility,
|
||||||
isExpect: Boolean,
|
isExpect: Boolean,
|
||||||
isActual: Boolean,
|
isActual: Boolean,
|
||||||
|
|||||||
+1
-1
@@ -25,7 +25,7 @@ open class FirValueParameterImpl(
|
|||||||
override val isCrossinline: Boolean,
|
override val isCrossinline: Boolean,
|
||||||
override val isNoinline: Boolean,
|
override val isNoinline: Boolean,
|
||||||
override val isVararg: Boolean,
|
override val isVararg: Boolean,
|
||||||
override val symbol: FirVariableSymbol = FirVariableSymbol(name)
|
override val symbol: FirVariableSymbol<FirValueParameter> = FirVariableSymbol(name)
|
||||||
) : FirAbstractNamedAnnotatedDeclaration(session, psi, name), FirValueParameter {
|
) : FirAbstractNamedAnnotatedDeclaration(session, psi, name), FirValueParameter {
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
|||||||
@@ -8,10 +8,8 @@ package org.jetbrains.kotlin.fir.declarations.impl
|
|||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
|
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirVariable
|
import org.jetbrains.kotlin.fir.expressions.FirVariable
|
||||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
|
||||||
import org.jetbrains.kotlin.fir.transformSingle
|
import org.jetbrains.kotlin.fir.transformSingle
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
@@ -25,9 +23,9 @@ class FirVariableImpl(
|
|||||||
override var returnTypeRef: FirTypeRef,
|
override var returnTypeRef: FirTypeRef,
|
||||||
override val isVar: Boolean,
|
override val isVar: Boolean,
|
||||||
override var initializer: FirExpression?,
|
override var initializer: FirExpression?,
|
||||||
override val symbol: FirVariableSymbol = FirVariableSymbol(name),
|
override val symbol: FirVariableSymbol<FirVariableImpl> = FirVariableSymbol(name),
|
||||||
override var delegate: FirExpression? = null
|
override var delegate: FirExpression? = null
|
||||||
) : FirAbstractNamedAnnotatedDeclaration(session, psiElement, name), FirVariable {
|
) : FirAbstractNamedAnnotatedDeclaration(session, psiElement, name), FirVariable<FirVariableImpl> {
|
||||||
|
|
||||||
init {
|
init {
|
||||||
symbol.bind(this)
|
symbol.bind(this)
|
||||||
|
|||||||
@@ -10,7 +10,8 @@ import org.jetbrains.kotlin.fir.declarations.*
|
|||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
|
|
||||||
interface FirVariable : @VisitedSupertype FirDeclaration, FirTypedDeclaration, FirCallableDeclaration, FirNamedDeclaration, FirStatement {
|
interface FirVariable<F : FirVariable<F>> :
|
||||||
|
@VisitedSupertype FirDeclaration, FirTypedDeclaration, FirCallableDeclaration<F>, FirNamedDeclaration, FirStatement {
|
||||||
val isVar: Boolean
|
val isVar: Boolean
|
||||||
|
|
||||||
val isVal: Boolean
|
val isVal: Boolean
|
||||||
@@ -20,7 +21,7 @@ interface FirVariable : @VisitedSupertype FirDeclaration, FirTypedDeclaration, F
|
|||||||
|
|
||||||
val delegate: FirExpression?
|
val delegate: FirExpression?
|
||||||
|
|
||||||
override val symbol: FirVariableSymbol
|
override val symbol: FirVariableSymbol<F>
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||||
visitor.visitVariable(this, data)
|
visitor.visitVariable(this, data)
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ abstract class FirWhenExpression(
|
|||||||
abstract val subject: FirExpression?
|
abstract val subject: FirExpression?
|
||||||
|
|
||||||
// when (val subjectVariable = subject()) { ... }
|
// when (val subjectVariable = subject()) { ... }
|
||||||
abstract val subjectVariable: FirVariable?
|
abstract val subjectVariable: FirVariable<*>?
|
||||||
|
|
||||||
abstract val branches: List<FirWhenBranch>
|
abstract val branches: List<FirWhenBranch>
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -17,7 +17,7 @@ class FirWhenExpressionImpl(
|
|||||||
session: FirSession,
|
session: FirSession,
|
||||||
psiElement: PsiElement?,
|
psiElement: PsiElement?,
|
||||||
override var subject: FirExpression? = null,
|
override var subject: FirExpression? = null,
|
||||||
override var subjectVariable: FirVariable? = null
|
override var subjectVariable: FirVariable<*>? = null
|
||||||
) : FirWhenExpression(session, psiElement) {
|
) : FirWhenExpression(session, psiElement) {
|
||||||
override val branches = mutableListOf<FirWhenBranch>()
|
override val branches = mutableListOf<FirWhenBranch>()
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -16,5 +16,5 @@ class FirPropertyFromParameterCallableReference(
|
|||||||
session: FirSession,
|
session: FirSession,
|
||||||
psi: PsiElement?,
|
psi: PsiElement?,
|
||||||
override val name: Name,
|
override val name: Name,
|
||||||
override val coneSymbol: FirVariableSymbol
|
override val coneSymbol: FirVariableSymbol<*>
|
||||||
) : FirAbstractElement(session, psi), FirResolvedCallableReference
|
) : FirAbstractElement(session, psi), FirResolvedCallableReference
|
||||||
@@ -8,8 +8,8 @@ package org.jetbrains.kotlin.fir.scopes
|
|||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.NEXT
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.NEXT
|
||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.STOP
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.STOP
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassifierSymbol
|
import org.jetbrains.kotlin.fir.symbols.ConeClassifierSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeVariableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
abstract class FirScope {
|
abstract class FirScope {
|
||||||
@@ -25,12 +25,13 @@ abstract class FirScope {
|
|||||||
|
|
||||||
open fun processFunctionsByName(
|
open fun processFunctionsByName(
|
||||||
name: Name,
|
name: Name,
|
||||||
processor: (ConeFunctionSymbol) -> ProcessorAction
|
processor: (FirFunctionSymbol<*>) -> ProcessorAction
|
||||||
): ProcessorAction = NEXT
|
): ProcessorAction = NEXT
|
||||||
|
|
||||||
open fun processPropertiesByName(
|
open fun processPropertiesByName(
|
||||||
name: Name,
|
name: Name,
|
||||||
processor: (ConeVariableSymbol) -> ProcessorAction
|
// NB: it'd be great to write FirVariableSymbol<*> here, but there is FirAccessorSymbol :(
|
||||||
|
processor: (FirCallableSymbol<*>) -> ProcessorAction
|
||||||
): ProcessorAction = NEXT
|
): ProcessorAction = NEXT
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,9 +5,9 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.symbols
|
package org.jetbrains.kotlin.fir.symbols
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
|
|
||||||
abstract class AbstractFirBasedSymbol<E> : FirBasedSymbol<E> where E : FirElement, E : FirSymbolOwner<E> {
|
abstract class AbstractFirBasedSymbol<E> : FirBasedSymbol<E> where E : FirDeclaration, E : FirSymbolOwner<E> {
|
||||||
|
|
||||||
override lateinit var fir: E
|
override lateinit var fir: E
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.fir.symbols.impl
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.CallableId
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConePropertySymbol
|
|
||||||
|
|
||||||
class FirAccessorSymbol(
|
|
||||||
override val callableId: CallableId,
|
|
||||||
val accessorId: CallableId
|
|
||||||
) : ConePropertySymbol, FirCallableSymbol()
|
|
||||||
@@ -9,4 +9,4 @@ import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
|
|||||||
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol
|
import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol
|
||||||
|
|
||||||
abstract class FirCallableSymbol : ConeCallableSymbol, AbstractFirBasedSymbol<FirCallableDeclaration>()
|
abstract class FirCallableSymbol<D : FirCallableDeclaration<D>> : ConeCallableSymbol, AbstractFirBasedSymbol<D>()
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.fir.symbols.impl
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirTypeAlias
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.*
|
||||||
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
|
|
||||||
|
sealed class FirClassLikeSymbol<D : FirClassLikeDeclaration<D>>(
|
||||||
|
override val classId: ClassId
|
||||||
|
) : ConeClassLikeSymbol, AbstractFirBasedSymbol<D>() {
|
||||||
|
override fun equals(other: Any?): Boolean =
|
||||||
|
other is FirClassLikeSymbol<*> && fir == other.fir
|
||||||
|
|
||||||
|
override fun hashCode(): Int = fir.hashCode()
|
||||||
|
}
|
||||||
|
|
||||||
|
class FirClassSymbol(classId: ClassId) : FirClassLikeSymbol<FirRegularClass>(classId), ConeClassSymbol {
|
||||||
|
override fun toLookupTag(): ConeClassLikeLookupTag = ConeClassLikeLookupTagImpl(classId)
|
||||||
|
}
|
||||||
|
|
||||||
|
class FirTypeAliasSymbol(override val classId: ClassId) : FirClassLikeSymbol<FirTypeAlias>(classId), ConeTypeAliasSymbol {
|
||||||
|
override fun toLookupTag(): TypeAliasLookupTagImpl = TypeAliasLookupTagImpl(classId)
|
||||||
|
}
|
||||||
|
|
||||||
|
class TypeAliasLookupTagImpl(
|
||||||
|
override val classId: ClassId
|
||||||
|
) : ConeTypeAliasLookupTag()
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.fir.symbols.impl
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTagImpl
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassSymbol
|
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
|
||||||
|
|
||||||
class FirClassSymbol(override val classId: ClassId) : ConeClassSymbol, AbstractFirBasedSymbol<FirRegularClass>() {
|
|
||||||
override fun toLookupTag(): ConeClassLikeLookupTag = ConeClassLikeLookupTagImpl(classId)
|
|
||||||
|
|
||||||
override fun equals(other: Any?): Boolean =
|
|
||||||
other is FirClassSymbol && fir == other.fir
|
|
||||||
|
|
||||||
override fun hashCode(): Int = fir.hashCode()
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.fir.symbols.impl
|
|
||||||
|
|
||||||
typealias FirFieldSymbol = FirPropertySymbol
|
|
||||||
@@ -5,16 +5,31 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.symbols.impl
|
package org.jetbrains.kotlin.fir.symbols.impl
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.symbols.CallableId
|
import org.jetbrains.kotlin.fir.symbols.CallableId
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.ConeFunctionSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.ConePropertySymbol
|
||||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||||
|
|
||||||
class FirFunctionSymbol(
|
sealed class FirFunctionSymbol<D : FirMemberFunction<D>>(
|
||||||
override val callableId: CallableId,
|
override val callableId: CallableId
|
||||||
val isFakeOverride: Boolean = false,
|
) : ConeFunctionSymbol, FirCallableSymbol<D>() {
|
||||||
// Actual for fake override only
|
|
||||||
val overriddenSymbol: FirFunctionSymbol? = null
|
|
||||||
) : ConeFunctionSymbol, FirCallableSymbol() {
|
|
||||||
override val parameters: List<ConeKotlinType>
|
override val parameters: List<ConeKotlinType>
|
||||||
get() = emptyList()
|
get() = emptyList()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class FirNamedFunctionSymbol(
|
||||||
|
callableId: CallableId,
|
||||||
|
val isFakeOverride: Boolean = false,
|
||||||
|
// Actual for fake override only
|
||||||
|
val overriddenSymbol: FirNamedFunctionSymbol? = null
|
||||||
|
) : FirFunctionSymbol<FirNamedFunction>(callableId)
|
||||||
|
|
||||||
|
class FirConstructorSymbol(
|
||||||
|
callableId: CallableId
|
||||||
|
) : FirFunctionSymbol<FirConstructor>(callableId)
|
||||||
|
|
||||||
|
class FirAccessorSymbol(
|
||||||
|
callableId: CallableId,
|
||||||
|
val accessorId: CallableId
|
||||||
|
) : ConePropertySymbol, FirFunctionSymbol<FirNamedFunction>(callableId)
|
||||||
@@ -12,22 +12,3 @@ import org.jetbrains.kotlin.fir.symbols.ConeTypeAliasLookupTag
|
|||||||
import org.jetbrains.kotlin.fir.symbols.ConeTypeAliasSymbol
|
import org.jetbrains.kotlin.fir.symbols.ConeTypeAliasSymbol
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
|
|
||||||
class FirTypeAliasSymbol(
|
|
||||||
override val classId: ClassId
|
|
||||||
) : ConeTypeAliasSymbol, AbstractFirBasedSymbol<FirTypeAlias>() {
|
|
||||||
override fun toLookupTag(): ConeClassLikeLookupTag = TypeAliasLookupTagImpl(classId)
|
|
||||||
|
|
||||||
override fun equals(other: Any?): Boolean =
|
|
||||||
other is FirTypeAliasSymbol && classId == other.classId && fir == other.fir
|
|
||||||
|
|
||||||
override fun hashCode(): Int {
|
|
||||||
var result = 31
|
|
||||||
result = result * 19 + classId.hashCode()
|
|
||||||
result = result * 19 + fir.hashCode()
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class TypeAliasLookupTagImpl(
|
|
||||||
override val classId: ClassId
|
|
||||||
) : ConeTypeAliasLookupTag()
|
|
||||||
|
|||||||
+10
-5
@@ -5,17 +5,22 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.symbols.impl
|
package org.jetbrains.kotlin.fir.symbols.impl
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirField
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirVariable
|
||||||
import org.jetbrains.kotlin.fir.symbols.CallableId
|
import org.jetbrains.kotlin.fir.symbols.CallableId
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConePropertySymbol
|
import org.jetbrains.kotlin.fir.symbols.ConePropertySymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeVariableSymbol
|
import org.jetbrains.kotlin.fir.symbols.ConeVariableSymbol
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
open class FirPropertySymbol(callableId: CallableId) : FirVariableSymbol(callableId), ConePropertySymbol
|
open class FirVariableSymbol<D : FirVariable<D>>(override val callableId: CallableId) : ConeVariableSymbol, FirCallableSymbol<D>() {
|
||||||
|
|
||||||
class FirBackingFieldSymbol(callableId: CallableId) : FirVariableSymbol(callableId)
|
|
||||||
|
|
||||||
open class FirVariableSymbol(override val callableId: CallableId) : ConeVariableSymbol, FirCallableSymbol() {
|
|
||||||
|
|
||||||
@Deprecated("TODO: Better solution for local vars?")
|
@Deprecated("TODO: Better solution for local vars?")
|
||||||
constructor(name: Name) : this(CallableId(name)) // TODO?
|
constructor(name: Name) : this(CallableId(name)) // TODO?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open class FirPropertySymbol(callableId: CallableId) : ConePropertySymbol, FirVariableSymbol<FirProperty>(callableId)
|
||||||
|
|
||||||
|
class FirBackingFieldSymbol(callableId: CallableId) : FirVariableSymbol<FirProperty>(callableId)
|
||||||
|
|
||||||
|
class FirFieldSymbol(callableId: CallableId) : FirVariableSymbol<FirField>(callableId)
|
||||||
+21
-13
@@ -24,11 +24,11 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
|||||||
return transformElement(declaration, data)
|
return transformElement(declaration, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun transformCallableDeclaration(callableDeclaration: FirCallableDeclaration, data: D): CompositeTransformResult<FirDeclaration> {
|
open fun <F : FirCallableDeclaration<F>> transformCallableDeclaration(callableDeclaration: FirCallableDeclaration<F>, data: D): CompositeTransformResult<FirDeclaration> {
|
||||||
return transformDeclaration(callableDeclaration, data)
|
return transformDeclaration(callableDeclaration, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun transformCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration, data: D): CompositeTransformResult<FirDeclaration> {
|
open fun <F : FirCallableMemberDeclaration<F>> transformCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration<F>, data: D): CompositeTransformResult<FirDeclaration> {
|
||||||
return transformDeclaration(callableMemberDeclaration, data)
|
return transformDeclaration(callableMemberDeclaration, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -48,18 +48,22 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
|||||||
return transformFunction(anonymousFunction, data)
|
return transformFunction(anonymousFunction, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open fun <F : FirMemberFunction<F>> transformMemberFunction(memberFunction: FirMemberFunction<F>, data: D): CompositeTransformResult<FirDeclaration> {
|
||||||
|
return transformFunction(memberFunction, data)
|
||||||
|
}
|
||||||
|
|
||||||
open fun transformConstructor(constructor: FirConstructor, data: D): CompositeTransformResult<FirDeclaration> {
|
open fun transformConstructor(constructor: FirConstructor, data: D): CompositeTransformResult<FirDeclaration> {
|
||||||
return transformFunction(constructor, data)
|
return transformMemberFunction(constructor, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
open fun transformNamedFunction(namedFunction: FirNamedFunction, data: D): CompositeTransformResult<FirDeclaration> {
|
||||||
|
return transformMemberFunction(namedFunction, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun transformModifiableFunction(modifiableFunction: FirModifiableFunction, data: D): CompositeTransformResult<FirDeclaration> {
|
open fun transformModifiableFunction(modifiableFunction: FirModifiableFunction, data: D): CompositeTransformResult<FirDeclaration> {
|
||||||
return transformFunction(modifiableFunction, data)
|
return transformFunction(modifiableFunction, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun transformNamedFunction(namedFunction: FirNamedFunction, data: D): CompositeTransformResult<FirDeclaration> {
|
|
||||||
return transformFunction(namedFunction, data)
|
|
||||||
}
|
|
||||||
|
|
||||||
open fun transformPropertyAccessor(propertyAccessor: FirPropertyAccessor, data: D): CompositeTransformResult<FirDeclaration> {
|
open fun transformPropertyAccessor(propertyAccessor: FirPropertyAccessor, data: D): CompositeTransformResult<FirDeclaration> {
|
||||||
return transformFunction(propertyAccessor, data)
|
return transformFunction(propertyAccessor, data)
|
||||||
}
|
}
|
||||||
@@ -84,7 +88,7 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
|||||||
return transformNamedDeclaration(memberDeclaration, data)
|
return transformNamedDeclaration(memberDeclaration, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun transformClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration, data: D): CompositeTransformResult<FirDeclaration> {
|
open fun <F : FirClassLikeDeclaration<F>> transformClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration<F>, data: D): CompositeTransformResult<FirDeclaration> {
|
||||||
return transformMemberDeclaration(classLikeDeclaration, data)
|
return transformMemberDeclaration(classLikeDeclaration, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -116,7 +120,7 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
|||||||
return transformDeclaration(valueParameter, data)
|
return transformDeclaration(valueParameter, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun transformVariable(variable: FirVariable, data: D): CompositeTransformResult<FirDeclaration> {
|
open fun <F : FirVariable<F>> transformVariable(variable: FirVariable<F>, data: D): CompositeTransformResult<FirDeclaration> {
|
||||||
return transformDeclaration(variable, data)
|
return transformDeclaration(variable, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -488,11 +492,11 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
|||||||
return transformCallWithArgumentList(callWithArgumentList, data)
|
return transformCallWithArgumentList(callWithArgumentList, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
final override fun visitCallableDeclaration(callableDeclaration: FirCallableDeclaration, data: D): CompositeTransformResult<FirElement> {
|
final override fun <F : FirCallableDeclaration<F>> visitCallableDeclaration(callableDeclaration: FirCallableDeclaration<F>, data: D): CompositeTransformResult<FirElement> {
|
||||||
return transformCallableDeclaration(callableDeclaration, data)
|
return transformCallableDeclaration(callableDeclaration, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
final override fun visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration, data: D): CompositeTransformResult<FirElement> {
|
final override fun <F : FirCallableMemberDeclaration<F>> visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration<F>, data: D): CompositeTransformResult<FirElement> {
|
||||||
return transformCallableMemberDeclaration(callableMemberDeclaration, data)
|
return transformCallableMemberDeclaration(callableMemberDeclaration, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -508,7 +512,7 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
|||||||
return transformClass(klass, data)
|
return transformClass(klass, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
final override fun visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration, data: D): CompositeTransformResult<FirElement> {
|
final override fun <F : FirClassLikeDeclaration<F>> visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration<F>, data: D): CompositeTransformResult<FirElement> {
|
||||||
return transformClassLikeDeclaration(classLikeDeclaration, data)
|
return transformClassLikeDeclaration(classLikeDeclaration, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -648,6 +652,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
|||||||
return transformMemberDeclaration(memberDeclaration, data)
|
return transformMemberDeclaration(memberDeclaration, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final override fun <F : FirMemberFunction<F>> visitMemberFunction(memberFunction: FirMemberFunction<F>, data: D): CompositeTransformResult<FirElement> {
|
||||||
|
return transformMemberFunction(memberFunction, data)
|
||||||
|
}
|
||||||
|
|
||||||
final override fun visitModifiableClass(modifiableClass: FirModifiableClass, data: D): CompositeTransformResult<FirElement> {
|
final override fun visitModifiableClass(modifiableClass: FirModifiableClass, data: D): CompositeTransformResult<FirElement> {
|
||||||
return transformModifiableClass(modifiableClass, data)
|
return transformModifiableClass(modifiableClass, data)
|
||||||
}
|
}
|
||||||
@@ -828,7 +836,7 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
|||||||
return transformValueParameter(valueParameter, data)
|
return transformValueParameter(valueParameter, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
final override fun visitVariable(variable: FirVariable, data: D): CompositeTransformResult<FirElement> {
|
final override fun <F : FirVariable<F>> visitVariable(variable: FirVariable<F>, data: D): CompositeTransformResult<FirElement> {
|
||||||
return transformVariable(variable, data)
|
return transformVariable(variable, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+13
-9
@@ -24,11 +24,11 @@ abstract class FirVisitor<out R, in D> {
|
|||||||
return visitElement(declaration, data)
|
return visitElement(declaration, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun visitCallableDeclaration(callableDeclaration: FirCallableDeclaration, data: D): R {
|
open fun <F : FirCallableDeclaration<F>> visitCallableDeclaration(callableDeclaration: FirCallableDeclaration<F>, data: D): R {
|
||||||
return visitDeclaration(callableDeclaration, data)
|
return visitDeclaration(callableDeclaration, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration, data: D): R {
|
open fun <F : FirCallableMemberDeclaration<F>> visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration<F>, data: D): R {
|
||||||
return visitDeclaration(callableMemberDeclaration, data)
|
return visitDeclaration(callableMemberDeclaration, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -48,18 +48,22 @@ abstract class FirVisitor<out R, in D> {
|
|||||||
return visitFunction(anonymousFunction, data)
|
return visitFunction(anonymousFunction, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open fun <F : FirMemberFunction<F>> visitMemberFunction(memberFunction: FirMemberFunction<F>, data: D): R {
|
||||||
|
return visitFunction(memberFunction, data)
|
||||||
|
}
|
||||||
|
|
||||||
open fun visitConstructor(constructor: FirConstructor, data: D): R {
|
open fun visitConstructor(constructor: FirConstructor, data: D): R {
|
||||||
return visitFunction(constructor, data)
|
return visitMemberFunction(constructor, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
open fun visitNamedFunction(namedFunction: FirNamedFunction, data: D): R {
|
||||||
|
return visitMemberFunction(namedFunction, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun visitModifiableFunction(modifiableFunction: FirModifiableFunction, data: D): R {
|
open fun visitModifiableFunction(modifiableFunction: FirModifiableFunction, data: D): R {
|
||||||
return visitFunction(modifiableFunction, data)
|
return visitFunction(modifiableFunction, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun visitNamedFunction(namedFunction: FirNamedFunction, data: D): R {
|
|
||||||
return visitFunction(namedFunction, data)
|
|
||||||
}
|
|
||||||
|
|
||||||
open fun visitPropertyAccessor(propertyAccessor: FirPropertyAccessor, data: D): R {
|
open fun visitPropertyAccessor(propertyAccessor: FirPropertyAccessor, data: D): R {
|
||||||
return visitFunction(propertyAccessor, data)
|
return visitFunction(propertyAccessor, data)
|
||||||
}
|
}
|
||||||
@@ -84,7 +88,7 @@ abstract class FirVisitor<out R, in D> {
|
|||||||
return visitNamedDeclaration(memberDeclaration, data)
|
return visitNamedDeclaration(memberDeclaration, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration, data: D): R {
|
open fun <F : FirClassLikeDeclaration<F>> visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration<F>, data: D): R {
|
||||||
return visitMemberDeclaration(classLikeDeclaration, data)
|
return visitMemberDeclaration(classLikeDeclaration, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -116,7 +120,7 @@ abstract class FirVisitor<out R, in D> {
|
|||||||
return visitDeclaration(valueParameter, data)
|
return visitDeclaration(valueParameter, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun visitVariable(variable: FirVariable, data: D): R {
|
open fun <F : FirVariable<F>> visitVariable(variable: FirVariable<F>, data: D): R {
|
||||||
return visitDeclaration(variable, data)
|
return visitDeclaration(variable, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+21
-13
@@ -24,11 +24,11 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitElement(declaration, null)
|
visitElement(declaration, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun visitCallableDeclaration(callableDeclaration: FirCallableDeclaration) {
|
open fun <F : FirCallableDeclaration<F>> visitCallableDeclaration(callableDeclaration: FirCallableDeclaration<F>) {
|
||||||
visitDeclaration(callableDeclaration, null)
|
visitDeclaration(callableDeclaration, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration) {
|
open fun <F : FirCallableMemberDeclaration<F>> visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration<F>) {
|
||||||
visitDeclaration(callableMemberDeclaration, null)
|
visitDeclaration(callableMemberDeclaration, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -48,18 +48,22 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitFunction(anonymousFunction, null)
|
visitFunction(anonymousFunction, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open fun <F : FirMemberFunction<F>> visitMemberFunction(memberFunction: FirMemberFunction<F>) {
|
||||||
|
visitFunction(memberFunction, null)
|
||||||
|
}
|
||||||
|
|
||||||
open fun visitConstructor(constructor: FirConstructor) {
|
open fun visitConstructor(constructor: FirConstructor) {
|
||||||
visitFunction(constructor, null)
|
visitMemberFunction(constructor, null)
|
||||||
|
}
|
||||||
|
|
||||||
|
open fun visitNamedFunction(namedFunction: FirNamedFunction) {
|
||||||
|
visitMemberFunction(namedFunction, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun visitModifiableFunction(modifiableFunction: FirModifiableFunction) {
|
open fun visitModifiableFunction(modifiableFunction: FirModifiableFunction) {
|
||||||
visitFunction(modifiableFunction, null)
|
visitFunction(modifiableFunction, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun visitNamedFunction(namedFunction: FirNamedFunction) {
|
|
||||||
visitFunction(namedFunction, null)
|
|
||||||
}
|
|
||||||
|
|
||||||
open fun visitPropertyAccessor(propertyAccessor: FirPropertyAccessor) {
|
open fun visitPropertyAccessor(propertyAccessor: FirPropertyAccessor) {
|
||||||
visitFunction(propertyAccessor, null)
|
visitFunction(propertyAccessor, null)
|
||||||
}
|
}
|
||||||
@@ -84,7 +88,7 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitNamedDeclaration(memberDeclaration, null)
|
visitNamedDeclaration(memberDeclaration, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration) {
|
open fun <F : FirClassLikeDeclaration<F>> visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration<F>) {
|
||||||
visitMemberDeclaration(classLikeDeclaration, null)
|
visitMemberDeclaration(classLikeDeclaration, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -116,7 +120,7 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitDeclaration(valueParameter, null)
|
visitDeclaration(valueParameter, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun visitVariable(variable: FirVariable) {
|
open fun <F : FirVariable<F>> visitVariable(variable: FirVariable<F>) {
|
||||||
visitDeclaration(variable, null)
|
visitDeclaration(variable, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -488,11 +492,11 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitCallWithArgumentList(callWithArgumentList)
|
visitCallWithArgumentList(callWithArgumentList)
|
||||||
}
|
}
|
||||||
|
|
||||||
final override fun visitCallableDeclaration(callableDeclaration: FirCallableDeclaration, data: Nothing?) {
|
final override fun <F : FirCallableDeclaration<F>> visitCallableDeclaration(callableDeclaration: FirCallableDeclaration<F>, data: Nothing?) {
|
||||||
visitCallableDeclaration(callableDeclaration)
|
visitCallableDeclaration(callableDeclaration)
|
||||||
}
|
}
|
||||||
|
|
||||||
final override fun visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration, data: Nothing?) {
|
final override fun <F : FirCallableMemberDeclaration<F>> visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration<F>, data: Nothing?) {
|
||||||
visitCallableMemberDeclaration(callableMemberDeclaration)
|
visitCallableMemberDeclaration(callableMemberDeclaration)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -508,7 +512,7 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitClass(klass)
|
visitClass(klass)
|
||||||
}
|
}
|
||||||
|
|
||||||
final override fun visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration, data: Nothing?) {
|
final override fun <F : FirClassLikeDeclaration<F>> visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration<F>, data: Nothing?) {
|
||||||
visitClassLikeDeclaration(classLikeDeclaration)
|
visitClassLikeDeclaration(classLikeDeclaration)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -648,6 +652,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitMemberDeclaration(memberDeclaration)
|
visitMemberDeclaration(memberDeclaration)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final override fun <F : FirMemberFunction<F>> visitMemberFunction(memberFunction: FirMemberFunction<F>, data: Nothing?) {
|
||||||
|
visitMemberFunction(memberFunction)
|
||||||
|
}
|
||||||
|
|
||||||
final override fun visitModifiableClass(modifiableClass: FirModifiableClass, data: Nothing?) {
|
final override fun visitModifiableClass(modifiableClass: FirModifiableClass, data: Nothing?) {
|
||||||
visitModifiableClass(modifiableClass)
|
visitModifiableClass(modifiableClass)
|
||||||
}
|
}
|
||||||
@@ -828,7 +836,7 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitValueParameter(valueParameter)
|
visitValueParameter(valueParameter)
|
||||||
}
|
}
|
||||||
|
|
||||||
final override fun visitVariable(variable: FirVariable, data: Nothing?) {
|
final override fun <F : FirVariable<F>> visitVariable(variable: FirVariable<F>, data: Nothing?) {
|
||||||
visitVariable(variable)
|
visitVariable(variable)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-2
@@ -2,10 +2,12 @@ FILE fqName:<root> fileName:/javaSyntheticPropertyAccess.kt
|
|||||||
FUN name:test visibility:public modality:FINAL <> (j:<root>.J) returnType:kotlin.Unit
|
FUN name:test visibility:public modality:FINAL <> (j:<root>.J) returnType:kotlin.Unit
|
||||||
VALUE_PARAMETER name:j index:0 type:<root>.J
|
VALUE_PARAMETER name:j index:0 type:<root>.J
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
ERROR_CALL 'Unresolved reference: R|/J.foo|' type=kotlin.Int
|
CALL 'public open fun getFoo (): kotlin.Int declared in <root>.J' type=kotlin.Int origin=null
|
||||||
|
$this: GET_VAR 'j: <root>.J declared in <root>.test' type=<root>.J origin=null
|
||||||
ERROR_CALL 'Unresolved reference: R|/J.foo|' type=IrErrorType
|
ERROR_CALL 'Unresolved reference: R|/J.foo|' type=IrErrorType
|
||||||
VAR name:<unary> type:kotlin.Int [val]
|
VAR name:<unary> type:kotlin.Int [val]
|
||||||
ERROR_CALL 'Unresolved reference: R|/J.foo|' type=kotlin.Int
|
CALL 'public open fun getFoo (): kotlin.Int declared in <root>.J' type=kotlin.Int origin=null
|
||||||
|
$this: GET_VAR 'j: <root>.J declared in <root>.test' type=<root>.J origin=null
|
||||||
ERROR_CALL 'Unresolved reference: R|/J.foo|' type=IrErrorType
|
ERROR_CALL 'Unresolved reference: R|/J.foo|' type=IrErrorType
|
||||||
GET_VAR 'val <unary>: kotlin.Int [val] declared in <root>.test' type=kotlin.Int origin=null
|
GET_VAR 'val <unary>: kotlin.Int [val] declared in <root>.test' type=kotlin.Int origin=null
|
||||||
ERROR_CALL 'Unresolved reference: R|/J.foo|' type=IrErrorType
|
ERROR_CALL 'Unresolved reference: R|/J.foo|' type=IrErrorType
|
||||||
|
|||||||
@@ -2,7 +2,8 @@ FILE fqName:<root> fileName:/javaSyntheticProperty.kt
|
|||||||
PROPERTY name:test visibility:public modality:FINAL [val]
|
PROPERTY name:test visibility:public modality:FINAL [val]
|
||||||
FIELD PROPERTY_BACKING_FIELD name:test type:kotlin.String? visibility:public [final,static]
|
FIELD PROPERTY_BACKING_FIELD name:test type:kotlin.String? visibility:public [final,static]
|
||||||
EXPRESSION_BODY
|
EXPRESSION_BODY
|
||||||
ERROR_CALL 'Unresolved reference: R|/J.foo|' type=kotlin.String?
|
CALL 'public open fun getFoo (): kotlin.String? declared in <root>.J' type=kotlin.String? origin=null
|
||||||
|
$this: CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.J' type=<root>.J origin=null
|
||||||
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-test> visibility:public modality:FINAL <> () returnType:kotlin.String?
|
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-test> visibility:public modality:FINAL <> () returnType:kotlin.String?
|
||||||
correspondingProperty: PROPERTY name:test visibility:public modality:FINAL [val]
|
correspondingProperty: PROPERTY name:test visibility:public modality:FINAL [val]
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
|||||||
import org.jetbrains.kotlin.fir.resolve.impl.FirProviderImpl
|
import org.jetbrains.kotlin.fir.resolve.impl.FirProviderImpl
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.service
|
import org.jetbrains.kotlin.fir.service
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
|
||||||
import org.jetbrains.kotlin.idea.caches.project.ModuleSourceInfo
|
import org.jetbrains.kotlin.idea.caches.project.ModuleSourceInfo
|
||||||
import org.jetbrains.kotlin.idea.caches.project.getModuleInfo
|
import org.jetbrains.kotlin.idea.caches.project.getModuleInfo
|
||||||
import org.jetbrains.kotlin.idea.stubindex.KotlinFullClassNameIndex
|
import org.jetbrains.kotlin.idea.stubindex.KotlinFullClassNameIndex
|
||||||
@@ -43,7 +43,7 @@ class IdeFirDependenciesSymbolProvider(
|
|||||||
private val javaSymbolProvider by lazy { JavaSymbolProvider(sessionProvider.getSession(moduleInfo)!!, project, depScope) }
|
private val javaSymbolProvider by lazy { JavaSymbolProvider(sessionProvider.getSession(moduleInfo)!!, project, depScope) }
|
||||||
|
|
||||||
|
|
||||||
private fun buildKotlinClassOnRequest(file: KtFile, classId: ClassId, session: FirSession): ConeClassLikeSymbol? {
|
private fun buildKotlinClassOnRequest(file: KtFile, classId: ClassId, session: FirSession): FirClassLikeSymbol<*>? {
|
||||||
val impl = FirProvider.getInstance(session) as FirProviderImpl
|
val impl = FirProvider.getInstance(session) as FirProviderImpl
|
||||||
val classifier = impl.getClassLikeSymbolByFqName(classId)
|
val classifier = impl.getClassLikeSymbolByFqName(classId)
|
||||||
if (classifier != null) {
|
if (classifier != null) {
|
||||||
@@ -69,7 +69,7 @@ class IdeFirDependenciesSymbolProvider(
|
|||||||
TODO("not implemented")
|
TODO("not implemented")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun tryKotlin(classId: ClassId): ConeClassLikeSymbol? {
|
private fun tryKotlin(classId: ClassId): FirClassLikeSymbol<*>? {
|
||||||
return classCache.lookupCacheOrCalculate(classId) {
|
return classCache.lookupCacheOrCalculate(classId) {
|
||||||
val index = KotlinFullClassNameIndex.getInstance()
|
val index = KotlinFullClassNameIndex.getInstance()
|
||||||
|
|
||||||
@@ -91,15 +91,15 @@ class IdeFirDependenciesSymbolProvider(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun tryJava(classId: ClassId): ConeClassLikeSymbol? {
|
private fun tryJava(classId: ClassId): FirClassLikeSymbol<*>? {
|
||||||
return javaSymbolProvider.getClassLikeSymbolByFqName(classId)
|
return javaSymbolProvider.getClassLikeSymbolByFqName(classId)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getClassLikeSymbolByFqName(classId: ClassId): ConeClassLikeSymbol? {
|
override fun getClassLikeSymbolByFqName(classId: ClassId): FirClassLikeSymbol<*>? {
|
||||||
return tryKotlin(classId) ?: tryJava(classId)
|
return tryKotlin(classId) ?: tryJava(classId)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getTopLevelCallableSymbols(packageFqName: FqName, name: Name): List<ConeCallableSymbol> {
|
override fun getTopLevelCallableSymbols(packageFqName: FqName, name: Name): List<FirCallableSymbol<*>> {
|
||||||
// TODO
|
// TODO
|
||||||
return emptyList()
|
return emptyList()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ import org.jetbrains.kotlin.fir.resolve.transformers.FirTotalResolveTransformer
|
|||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirCompositeScope
|
import org.jetbrains.kotlin.fir.scopes.impl.FirCompositeScope
|
||||||
import org.jetbrains.kotlin.fir.service
|
import org.jetbrains.kotlin.fir.service
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
|
||||||
import org.jetbrains.kotlin.idea.KotlinFileType
|
import org.jetbrains.kotlin.idea.KotlinFileType
|
||||||
import org.jetbrains.kotlin.idea.caches.project.IdeaModuleInfo
|
import org.jetbrains.kotlin.idea.caches.project.IdeaModuleInfo
|
||||||
import org.jetbrains.kotlin.idea.caches.project.isLibraryClasses
|
import org.jetbrains.kotlin.idea.caches.project.isLibraryClasses
|
||||||
@@ -159,7 +158,7 @@ abstract class AbstractFirMultiModuleResolveTest : AbstractMultiModuleTest() {
|
|||||||
renderedDeclarations += declaration
|
renderedDeclarations += declaration
|
||||||
} else {
|
} else {
|
||||||
enhancementScope.processFunctionsByName(declaration.name) { symbol ->
|
enhancementScope.processFunctionsByName(declaration.name) { symbol ->
|
||||||
val enhanced = (symbol as? FirFunctionSymbol)?.fir
|
val enhanced = symbol.fir
|
||||||
if (enhanced != null && enhanced !in renderedDeclarations) {
|
if (enhanced != null && enhanced !in renderedDeclarations) {
|
||||||
enhanced.accept(renderer, null)
|
enhanced.accept(renderer, null)
|
||||||
renderer.newLine()
|
renderer.newLine()
|
||||||
|
|||||||
Reference in New Issue
Block a user