FIR: Make possible to return variable symbols from scope
This commit is contained in:
+21
-24
@@ -21,10 +21,7 @@ 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.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.*
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeFunctionSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConePropertySymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
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.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
@@ -54,7 +51,7 @@ class JavaClassEnhancementScope(
|
|||||||
|
|
||||||
private val enhancements = mutableMapOf<ConeCallableSymbol, ConeCallableSymbol>()
|
private val enhancements = mutableMapOf<ConeCallableSymbol, ConeCallableSymbol>()
|
||||||
|
|
||||||
override fun processPropertiesByName(name: Name, processor: (ConePropertySymbol) -> ProcessorAction): ProcessorAction {
|
override fun processPropertiesByName(name: Name, processor: (ConeVariableSymbol) -> 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) }
|
||||||
@@ -75,7 +72,7 @@ class JavaClassEnhancementScope(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun enhance(
|
private fun enhance(
|
||||||
original: ConePropertySymbol,
|
original: ConeVariableSymbol,
|
||||||
name: Name
|
name: Name
|
||||||
): FirPropertySymbol {
|
): FirPropertySymbol {
|
||||||
val firField = (original as FirBasedSymbol<*>).fir as? FirJavaField ?: error("Can't make enhancement for $original")
|
val firField = (original as FirBasedSymbol<*>).fir as? FirJavaField ?: error("Can't make enhancement for $original")
|
||||||
@@ -109,7 +106,7 @@ class JavaClassEnhancementScope(
|
|||||||
): FirFunctionSymbol {
|
): FirFunctionSymbol {
|
||||||
val firMethod = (original as FirFunctionSymbol).fir as? FirFunction
|
val firMethod = (original as FirFunctionSymbol).fir as? FirFunction
|
||||||
|
|
||||||
if (firMethod !is FirJavaMethod && firMethod !is FirJavaConstructor || firMethod !is FirCallableMember) return original
|
if (firMethod !is FirJavaMethod && firMethod !is FirJavaConstructor || firMethod !is FirCallableMemberDeclaration) return original
|
||||||
|
|
||||||
val memberContext = context.copyWithNewDefaultTypeQualifiers(typeQualifierResolver, jsr305State, firMethod.annotations)
|
val memberContext = context.copyWithNewDefaultTypeQualifiers(typeQualifierResolver, jsr305State, firMethod.annotations)
|
||||||
|
|
||||||
@@ -220,7 +217,7 @@ class JavaClassEnhancementScope(
|
|||||||
|
|
||||||
private fun enhanceReceiverType(
|
private fun enhanceReceiverType(
|
||||||
ownerFunction: FirJavaMethod,
|
ownerFunction: FirJavaMethod,
|
||||||
overriddenMembers: List<FirCallableMember>,
|
overriddenMembers: List<FirCallableMemberDeclaration>,
|
||||||
memberContext: FirJavaEnhancementContext
|
memberContext: FirJavaEnhancementContext
|
||||||
): FirResolvedTypeRef {
|
): FirResolvedTypeRef {
|
||||||
val signatureParts = ownerFunction.partsForValueParameter(
|
val signatureParts = ownerFunction.partsForValueParameter(
|
||||||
@@ -237,8 +234,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: FirCallableMember,
|
ownerFunction: FirCallableMemberDeclaration,
|
||||||
overriddenMembers: List<FirCallableMember>,
|
overriddenMembers: List<FirCallableMemberDeclaration>,
|
||||||
hasReceiver: Boolean,
|
hasReceiver: Boolean,
|
||||||
memberContext: FirJavaEnhancementContext,
|
memberContext: FirJavaEnhancementContext,
|
||||||
predefinedEnhancementInfo: PredefinedFunctionEnhancementInfo?,
|
predefinedEnhancementInfo: PredefinedFunctionEnhancementInfo?,
|
||||||
@@ -263,8 +260,8 @@ class JavaClassEnhancementScope(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun enhanceReturnType(
|
private fun enhanceReturnType(
|
||||||
owner: FirCallableMember,
|
owner: FirCallableMemberDeclaration,
|
||||||
overriddenMembers: List<FirCallableMember>,
|
overriddenMembers: List<FirCallableMemberDeclaration>,
|
||||||
memberContext: FirJavaEnhancementContext,
|
memberContext: FirJavaEnhancementContext,
|
||||||
predefinedEnhancementInfo: PredefinedFunctionEnhancementInfo?
|
predefinedEnhancementInfo: PredefinedFunctionEnhancementInfo?
|
||||||
): FirResolvedTypeRef {
|
): FirResolvedTypeRef {
|
||||||
@@ -281,11 +278,11 @@ class JavaClassEnhancementScope(
|
|||||||
return signatureParts.type
|
return signatureParts.type
|
||||||
}
|
}
|
||||||
|
|
||||||
private val overriddenMemberCache = mutableMapOf<FirCallableMember, List<FirCallableMember>>()
|
private val overriddenMemberCache = mutableMapOf<FirCallableMemberDeclaration, List<FirCallableMemberDeclaration>>()
|
||||||
|
|
||||||
private fun FirCallableMember.overriddenMembers(): List<FirCallableMember> {
|
private fun FirCallableMemberDeclaration.overriddenMembers(): List<FirCallableMemberDeclaration> {
|
||||||
return overriddenMemberCache.getOrPut(this) {
|
return overriddenMemberCache.getOrPut(this) {
|
||||||
val result = mutableListOf<FirCallableMember>()
|
val result = mutableListOf<FirCallableMemberDeclaration>()
|
||||||
if (this is FirNamedFunction) {
|
if (this is FirNamedFunction) {
|
||||||
val superTypesScope = useSiteScope.superTypesScope
|
val superTypesScope = useSiteScope.superTypesScope
|
||||||
superTypesScope.processFunctionsByName(this.name) { basicFunctionSymbol ->
|
superTypesScope.processFunctionsByName(this.name) { basicFunctionSymbol ->
|
||||||
@@ -294,7 +291,7 @@ class JavaClassEnhancementScope(
|
|||||||
}
|
}
|
||||||
val overriddenByFir = (overriddenBy as? FirFunctionSymbol)?.fir
|
val overriddenByFir = (overriddenBy as? FirFunctionSymbol)?.fir
|
||||||
if (overriddenByFir === this@overriddenMembers) {
|
if (overriddenByFir === this@overriddenMembers) {
|
||||||
result += (basicFunctionSymbol as FirFunctionSymbol).fir
|
result += (basicFunctionSymbol as FirFunctionSymbol).fir as FirCallableMemberDeclaration
|
||||||
}
|
}
|
||||||
ProcessorAction.NEXT
|
ProcessorAction.NEXT
|
||||||
}
|
}
|
||||||
@@ -304,21 +301,21 @@ class JavaClassEnhancementScope(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private sealed class TypeInSignature {
|
private sealed class TypeInSignature {
|
||||||
abstract fun getTypeRef(member: FirCallableMember): FirTypeRef
|
abstract fun getTypeRef(member: FirCallableMemberDeclaration): FirTypeRef
|
||||||
|
|
||||||
object Return : TypeInSignature() {
|
object Return : TypeInSignature() {
|
||||||
override fun getTypeRef(member: FirCallableMember): FirTypeRef = member.returnTypeRef
|
override fun getTypeRef(member: FirCallableMemberDeclaration): FirTypeRef = member.returnTypeRef
|
||||||
}
|
}
|
||||||
|
|
||||||
object Receiver : TypeInSignature() {
|
object Receiver : TypeInSignature() {
|
||||||
override fun getTypeRef(member: FirCallableMember): 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: FirCallableMember): 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 as FirFunction).valueParameters[index + 1].returnTypeRef
|
||||||
}
|
}
|
||||||
@@ -327,9 +324,9 @@ class JavaClassEnhancementScope(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FirCallableMember.partsForValueParameter(
|
private fun FirCallableMemberDeclaration.partsForValueParameter(
|
||||||
typeQualifierResolver: FirAnnotationTypeQualifierResolver,
|
typeQualifierResolver: FirAnnotationTypeQualifierResolver,
|
||||||
overriddenMembers: List<FirCallableMember>,
|
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,
|
||||||
@@ -345,9 +342,9 @@ class JavaClassEnhancementScope(
|
|||||||
typeInSignature
|
typeInSignature
|
||||||
)
|
)
|
||||||
|
|
||||||
private fun FirCallableMember.parts(
|
private fun FirCallableMemberDeclaration.parts(
|
||||||
typeQualifierResolver: FirAnnotationTypeQualifierResolver,
|
typeQualifierResolver: FirAnnotationTypeQualifierResolver,
|
||||||
overriddenMembers: List<FirCallableMember>,
|
overriddenMembers: List<FirCallableMemberDeclaration>,
|
||||||
typeContainer: FirAnnotationContainer?,
|
typeContainer: FirAnnotationContainer?,
|
||||||
isCovariant: Boolean,
|
isCovariant: Boolean,
|
||||||
containerContext: FirJavaEnhancementContext,
|
containerContext: FirJavaEnhancementContext,
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.fir.scopes.impl.FirAbstractProviderBasedScope
|
|||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirClassDeclaredMemberScope
|
import org.jetbrains.kotlin.fir.scopes.impl.FirClassDeclaredMemberScope
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol
|
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.ConePropertySymbol
|
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.typeContext
|
import org.jetbrains.kotlin.fir.typeContext
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
@@ -103,8 +103,8 @@ class JavaClassUseSiteScope(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun processPropertiesByName(name: Name, processor: (ConePropertySymbol) -> ProcessorAction): ProcessorAction {
|
override fun processPropertiesByName(name: Name, processor: (ConeVariableSymbol) -> ProcessorAction): ProcessorAction {
|
||||||
val seen = mutableSetOf<ConePropertySymbol>()
|
val seen = mutableSetOf<ConeVariableSymbol>()
|
||||||
if (!declaredMemberScope.processPropertiesByName(name) {
|
if (!declaredMemberScope.processPropertiesByName(name) {
|
||||||
seen += it
|
seen += it
|
||||||
processor(it)
|
processor(it)
|
||||||
|
|||||||
+2
-1
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.scopes.ProcessorAction.STOP
|
|||||||
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.symbols.ConePropertySymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.ConeVariableSymbol
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
class FirClassDeclaredMemberScope(
|
class FirClassDeclaredMemberScope(
|
||||||
@@ -32,7 +33,7 @@ class FirClassDeclaredMemberScope(
|
|||||||
return NEXT
|
return NEXT
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun processPropertiesByName(name: Name, processor: (ConePropertySymbol) -> ProcessorAction): ProcessorAction {
|
override fun processPropertiesByName(name: Name, processor: (ConeVariableSymbol) -> ProcessorAction): ProcessorAction {
|
||||||
val symbols = provider.getCallableSymbols(CallableId(classId.packageFqName, classId.relativeClassName, name))
|
val symbols = provider.getCallableSymbols(CallableId(classId.packageFqName, classId.relativeClassName, name))
|
||||||
for (symbol in symbols) {
|
for (symbol in symbols) {
|
||||||
if (symbol is ConePropertySymbol && !processor(symbol)) {
|
if (symbol is ConePropertySymbol && !processor(symbol)) {
|
||||||
|
|||||||
+1
-1
@@ -93,7 +93,7 @@ class FirClassSubstitutionScope(
|
|||||||
return super.processFunctionsByName(name, processor)
|
return super.processFunctionsByName(name, processor)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun processPropertiesByName(name: Name, processor: (ConePropertySymbol) -> ProcessorAction): ProcessorAction {
|
override fun processPropertiesByName(name: Name, processor: (ConeVariableSymbol) -> ProcessorAction): ProcessorAction {
|
||||||
return useSiteScope.processPropertiesByName(name, processor)
|
return useSiteScope.processPropertiesByName(name, processor)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-5
@@ -12,10 +12,7 @@ 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.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.AbstractFirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.*
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeFunctionSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConePropertySymbol
|
|
||||||
import org.jetbrains.kotlin.fir.typeContext
|
import org.jetbrains.kotlin.fir.typeContext
|
||||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||||
import org.jetbrains.kotlin.fir.types.ConeTypeContext
|
import org.jetbrains.kotlin.fir.types.ConeTypeContext
|
||||||
@@ -96,7 +93,7 @@ class FirClassUseSiteScope(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun processPropertiesByName(name: Name, processor: (ConePropertySymbol) -> ProcessorAction): ProcessorAction {
|
override fun processPropertiesByName(name: Name, processor: (ConeVariableSymbol) -> ProcessorAction): ProcessorAction {
|
||||||
val seen = mutableSetOf<ConeCallableSymbol>()
|
val seen = mutableSetOf<ConeCallableSymbol>()
|
||||||
if (!declaredMemberScope.processPropertiesByName(name) {
|
if (!declaredMemberScope.processPropertiesByName(name) {
|
||||||
seen += it
|
seen += it
|
||||||
|
|||||||
@@ -12,8 +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.ConeFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.ConeFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConePropertySymbol
|
|
||||||
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.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
class FirCompositeScope(
|
class FirCompositeScope(
|
||||||
@@ -53,7 +53,7 @@ class FirCompositeScope(
|
|||||||
return processComposite(FirScope::processFunctionsByName, name, processor)
|
return processComposite(FirScope::processFunctionsByName, name, processor)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun processPropertiesByName(name: Name, processor: (ConePropertySymbol) -> ProcessorAction): ProcessorAction {
|
override fun processPropertiesByName(name: Name, processor: (ConeVariableSymbol) -> ProcessorAction): ProcessorAction {
|
||||||
return processComposite(FirScope::processPropertiesByName, name, processor)
|
return processComposite(FirScope::processPropertiesByName, name, processor)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.scopes.ProcessorAction.STOP
|
|||||||
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.symbols.ConePropertySymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.ConeVariableSymbol
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
class FirTopLevelDeclaredMemberScope(
|
class FirTopLevelDeclaredMemberScope(
|
||||||
@@ -32,7 +33,7 @@ class FirTopLevelDeclaredMemberScope(
|
|||||||
return NEXT
|
return NEXT
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun processPropertiesByName(name: Name, processor: (ConePropertySymbol) -> ProcessorAction): ProcessorAction {
|
override fun processPropertiesByName(name: Name, processor: (ConeVariableSymbol) -> ProcessorAction): ProcessorAction {
|
||||||
val symbols = provider.getCallableSymbols(CallableId(packageFqName, name))
|
val symbols = provider.getCallableSymbols(CallableId(packageFqName, name))
|
||||||
for (symbol in symbols) {
|
for (symbol in symbols) {
|
||||||
if (symbol is ConePropertySymbol && !processor(symbol)) {
|
if (symbol is ConePropertySymbol && !processor(symbol)) {
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ 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
|
||||||
@@ -25,6 +27,8 @@ interface FirNamedFunction : @VisitedSupertype FirFunction, FirCallableMemberDec
|
|||||||
|
|
||||||
override val isOverride: Boolean get() = status.isOverride
|
override val isOverride: Boolean get() = status.isOverride
|
||||||
|
|
||||||
|
override val symbol: FirFunctionSymbol
|
||||||
|
|
||||||
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)
|
||||||
|
|
||||||
|
|||||||
+1
-7
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
abstract class FirAbstractCallableMember : FirAbstractMemberDeclaration, FirCallableMemberDeclaration {
|
abstract class FirAbstractCallableMember : FirAbstractMemberDeclaration, FirCallableMemberDeclaration {
|
||||||
|
|
||||||
final override val symbol: FirBasedSymbol<FirCallableDeclaration>
|
// 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
|
||||||
|
|
||||||
@@ -31,13 +31,10 @@ abstract class FirAbstractCallableMember : FirAbstractMemberDeclaration, FirCall
|
|||||||
constructor(
|
constructor(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
psi: PsiElement?,
|
psi: PsiElement?,
|
||||||
symbol: FirBasedSymbol<FirCallableDeclaration>,
|
|
||||||
name: Name,
|
name: Name,
|
||||||
receiverTypeRef: FirTypeRef?,
|
receiverTypeRef: FirTypeRef?,
|
||||||
returnTypeRef: FirTypeRef
|
returnTypeRef: FirTypeRef
|
||||||
) : super(session, psi, name) {
|
) : super(session, psi, name) {
|
||||||
this.symbol = symbol
|
|
||||||
symbol.bind(this)
|
|
||||||
this.receiverTypeRef = receiverTypeRef
|
this.receiverTypeRef = receiverTypeRef
|
||||||
this.returnTypeRef = returnTypeRef
|
this.returnTypeRef = returnTypeRef
|
||||||
}
|
}
|
||||||
@@ -45,7 +42,6 @@ abstract class FirAbstractCallableMember : FirAbstractMemberDeclaration, FirCall
|
|||||||
constructor(
|
constructor(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
psi: PsiElement?,
|
psi: PsiElement?,
|
||||||
symbol: FirBasedSymbol<FirCallableDeclaration>,
|
|
||||||
name: Name,
|
name: Name,
|
||||||
visibility: Visibility,
|
visibility: Visibility,
|
||||||
modality: Modality?,
|
modality: Modality?,
|
||||||
@@ -55,8 +51,6 @@ abstract class FirAbstractCallableMember : FirAbstractMemberDeclaration, FirCall
|
|||||||
receiverTypeRef: FirTypeRef?,
|
receiverTypeRef: FirTypeRef?,
|
||||||
returnTypeRef: FirTypeRef
|
returnTypeRef: FirTypeRef
|
||||||
) : super(session, psi, name, visibility, modality, isExpect, isActual) {
|
) : super(session, psi, name, visibility, modality, isExpect, isActual) {
|
||||||
this.symbol = symbol
|
|
||||||
symbol.bind(this)
|
|
||||||
this.receiverTypeRef = receiverTypeRef
|
this.receiverTypeRef = receiverTypeRef
|
||||||
this.returnTypeRef = returnTypeRef
|
this.returnTypeRef = returnTypeRef
|
||||||
status.isOverride = isOverride
|
status.isOverride = isOverride
|
||||||
|
|||||||
+9
-2
@@ -10,10 +10,12 @@ import org.jetbrains.kotlin.descriptors.Modality
|
|||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
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.declarations.FirConstructor
|
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.FirBasedSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.transformInplace
|
import org.jetbrains.kotlin.fir.transformInplace
|
||||||
import org.jetbrains.kotlin.fir.transformSingle
|
import org.jetbrains.kotlin.fir.transformSingle
|
||||||
@@ -24,16 +26,21 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
open class FirConstructorImpl(
|
open class FirConstructorImpl(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
psi: PsiElement?,
|
psi: PsiElement?,
|
||||||
symbol: FirFunctionSymbol,
|
override val symbol: FirFunctionSymbol,
|
||||||
visibility: Visibility,
|
visibility: Visibility,
|
||||||
isExpect: Boolean,
|
isExpect: Boolean,
|
||||||
isActual: Boolean,
|
isActual: Boolean,
|
||||||
delegatedSelfTypeRef: FirTypeRef,
|
delegatedSelfTypeRef: FirTypeRef,
|
||||||
final override var delegatedConstructor: FirDelegatedConstructorCall?
|
final override var delegatedConstructor: FirDelegatedConstructorCall?
|
||||||
) : FirAbstractCallableMember(
|
) : FirAbstractCallableMember(
|
||||||
session, psi, symbol, NAME, visibility, Modality.FINAL,
|
session, psi, NAME, visibility, Modality.FINAL,
|
||||||
isExpect, isActual, isOverride = false, receiverTypeRef = null, returnTypeRef = delegatedSelfTypeRef
|
isExpect, isActual, isOverride = false, receiverTypeRef = null, returnTypeRef = delegatedSelfTypeRef
|
||||||
), FirConstructor {
|
), FirConstructor {
|
||||||
|
|
||||||
|
init {
|
||||||
|
symbol.bind(this)
|
||||||
|
}
|
||||||
|
|
||||||
override val valueParameters = mutableListOf<FirValueParameter>()
|
override val valueParameters = mutableListOf<FirValueParameter>()
|
||||||
|
|
||||||
override var body: FirBlock? = null
|
override var body: FirBlock? = null
|
||||||
|
|||||||
+11
-2
@@ -10,9 +10,11 @@ import org.jetbrains.kotlin.descriptors.Modality
|
|||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
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.declarations.FirNamedFunction
|
import org.jetbrains.kotlin.fir.declarations.FirNamedFunction
|
||||||
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.symbols.FirBasedSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.transformInplace
|
import org.jetbrains.kotlin.fir.transformInplace
|
||||||
import org.jetbrains.kotlin.fir.transformSingle
|
import org.jetbrains.kotlin.fir.transformSingle
|
||||||
@@ -22,6 +24,8 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
open class FirMemberFunctionImpl : FirAbstractCallableMember, FirNamedFunction, FirModifiableFunction {
|
open class FirMemberFunctionImpl : FirAbstractCallableMember, FirNamedFunction, FirModifiableFunction {
|
||||||
|
|
||||||
|
override val symbol: FirFunctionSymbol
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
psi: PsiElement?,
|
psi: PsiElement?,
|
||||||
@@ -29,7 +33,10 @@ open class FirMemberFunctionImpl : FirAbstractCallableMember, FirNamedFunction,
|
|||||||
name: Name,
|
name: Name,
|
||||||
receiverTypeRef: FirTypeRef?,
|
receiverTypeRef: FirTypeRef?,
|
||||||
returnTypeRef: FirTypeRef
|
returnTypeRef: FirTypeRef
|
||||||
) : super(session, psi, symbol, name, receiverTypeRef, returnTypeRef)
|
) : super(session, psi, name, receiverTypeRef, returnTypeRef) {
|
||||||
|
this.symbol = symbol
|
||||||
|
symbol.bind(this)
|
||||||
|
}
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
@@ -50,7 +57,7 @@ open class FirMemberFunctionImpl : FirAbstractCallableMember, FirNamedFunction,
|
|||||||
receiverTypeRef: FirTypeRef?,
|
receiverTypeRef: FirTypeRef?,
|
||||||
returnTypeRef: FirTypeRef
|
returnTypeRef: FirTypeRef
|
||||||
) : super(
|
) : super(
|
||||||
session, psi, symbol, name, visibility, modality,
|
session, psi, name, visibility, modality,
|
||||||
isExpect, isActual, isOverride, receiverTypeRef, returnTypeRef
|
isExpect, isActual, isOverride, receiverTypeRef, returnTypeRef
|
||||||
) {
|
) {
|
||||||
status.isOperator = isOperator
|
status.isOperator = isOperator
|
||||||
@@ -59,6 +66,8 @@ open class FirMemberFunctionImpl : FirAbstractCallableMember, FirNamedFunction,
|
|||||||
status.isTailRec = isTailRec
|
status.isTailRec = isTailRec
|
||||||
status.isExternal = isExternal
|
status.isExternal = isExternal
|
||||||
status.isSuspend = isSuspend
|
status.isSuspend = isSuspend
|
||||||
|
this.symbol = symbol
|
||||||
|
symbol.bind(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override val valueParameters = mutableListOf<FirValueParameter>()
|
override val valueParameters = mutableListOf<FirValueParameter>()
|
||||||
|
|||||||
+3
-2
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
class FirMemberPropertyImpl(
|
class FirMemberPropertyImpl(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
psi: PsiElement?,
|
psi: PsiElement?,
|
||||||
symbol: FirPropertySymbol,
|
override val symbol: FirPropertySymbol,
|
||||||
name: Name,
|
name: Name,
|
||||||
visibility: Visibility,
|
visibility: Visibility,
|
||||||
modality: Modality?,
|
modality: Modality?,
|
||||||
@@ -39,9 +39,10 @@ class FirMemberPropertyImpl(
|
|||||||
override var setter: FirPropertyAccessor,
|
override var setter: FirPropertyAccessor,
|
||||||
override var delegate: FirExpression?
|
override var delegate: FirExpression?
|
||||||
) : FirAbstractCallableMember(
|
) : FirAbstractCallableMember(
|
||||||
session, psi, symbol, name, visibility, modality, isExpect, isActual, isOverride, receiverTypeRef, returnTypeRef
|
session, psi, name, visibility, modality, isExpect, isActual, isOverride, receiverTypeRef, returnTypeRef
|
||||||
), FirProperty {
|
), FirProperty {
|
||||||
init {
|
init {
|
||||||
|
symbol.bind(this)
|
||||||
status.isConst = isConst
|
status.isConst = isConst
|
||||||
status.isLateInit = isLateInit
|
status.isLateInit = isLateInit
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ 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: FirBasedSymbol<FirCallableDeclaration> = FirVariableSymbol(name),
|
override val symbol: FirVariableSymbol = FirVariableSymbol(name),
|
||||||
override var delegate: FirExpression? = null
|
override var delegate: FirExpression? = null
|
||||||
) : FirAbstractNamedAnnotatedDeclaration(session, psiElement, name), FirVariable {
|
) : FirAbstractNamedAnnotatedDeclaration(session, psiElement, name), FirVariable {
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ package org.jetbrains.kotlin.fir.expressions
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.fir.VisitedSupertype
|
import org.jetbrains.kotlin.fir.VisitedSupertype
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||||
|
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 : @VisitedSupertype FirDeclaration, FirTypedDeclaration, FirCallableDeclaration, FirNamedDeclaration, FirStatement {
|
||||||
@@ -19,6 +21,8 @@ interface FirVariable : @VisitedSupertype FirDeclaration, FirTypedDeclaration, F
|
|||||||
|
|
||||||
val delegate: FirExpression?
|
val delegate: FirExpression?
|
||||||
|
|
||||||
|
override val symbol: FirVariableSymbol
|
||||||
|
|
||||||
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)
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ 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.symbols.ConeClassifierSymbol
|
import org.jetbrains.kotlin.fir.symbols.ConeClassifierSymbol
|
||||||
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.symbols.ConeVariableSymbol
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
interface FirScope {
|
interface FirScope {
|
||||||
@@ -25,7 +25,7 @@ interface FirScope {
|
|||||||
|
|
||||||
fun processPropertiesByName(
|
fun processPropertiesByName(
|
||||||
name: Name,
|
name: Name,
|
||||||
processor: (ConePropertySymbol) -> ProcessorAction
|
processor: (ConeVariableSymbol) -> ProcessorAction
|
||||||
): ProcessorAction = NEXT
|
): ProcessorAction = NEXT
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ import org.jetbrains.kotlin.fir.symbols.ConeVariableSymbol
|
|||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
class FirPropertySymbol(override val callableId: CallableId) : ConePropertySymbol, AbstractFirBasedSymbol<FirCallableDeclaration>()
|
class FirPropertySymbol(callableId: CallableId) : FirVariableSymbol(callableId), ConePropertySymbol
|
||||||
|
|
||||||
class FirVariableSymbol(override val callableId: CallableId) : ConeVariableSymbol, AbstractFirBasedSymbol<FirCallableDeclaration>() {
|
open class FirVariableSymbol(override val callableId: CallableId) : ConeVariableSymbol, AbstractFirBasedSymbol<FirCallableDeclaration>() {
|
||||||
constructor(name: Name) : this(CallableId(FqName("var"), name)) // TODO?
|
constructor(name: Name) : this(CallableId(FqName("var"), name)) // TODO?
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user