FIR: Update fir hierarchy, decouple member declaration from callable
This commit is contained in:
@@ -33,7 +33,9 @@ interface ConeCallableSymbol : ConeSymbol {
|
|||||||
val callableId: CallableId
|
val callableId: CallableId
|
||||||
}
|
}
|
||||||
|
|
||||||
interface ConePropertySymbol : ConeCallableSymbol
|
interface ConePropertySymbol : ConeVariableSymbol
|
||||||
|
|
||||||
|
interface ConeVariableSymbol : ConeCallableSymbol
|
||||||
|
|
||||||
interface ConeFunctionSymbol : ConeCallableSymbol {
|
interface ConeFunctionSymbol : ConeCallableSymbol {
|
||||||
val parameters: List<ConeKotlinType>
|
val parameters: List<ConeKotlinType>
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.fir.java
|
|||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirCallableMember
|
import org.jetbrains.kotlin.fir.declarations.FirCallableMemberDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||||
import org.jetbrains.kotlin.fir.java.declarations.*
|
import org.jetbrains.kotlin.fir.java.declarations.*
|
||||||
@@ -49,13 +49,13 @@ class JavaSymbolProvider(
|
|||||||
is FirConstructor -> {
|
is FirConstructor -> {
|
||||||
CallableId(callableId.packageName, callableId.className, firClass.name)
|
CallableId(callableId.packageName, callableId.className, firClass.name)
|
||||||
}
|
}
|
||||||
is FirCallableMember -> {
|
is FirCallableMemberDeclaration -> {
|
||||||
CallableId(callableId.packageName, callableId.className, declaration.name)
|
CallableId(callableId.packageName, callableId.className, declaration.name)
|
||||||
}
|
}
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
if (declarationId == callableId) {
|
if (declarationId == callableId) {
|
||||||
val symbol = (declaration as FirCallableMember).symbol as ConeCallableSymbol
|
val symbol = (declaration as FirCallableMemberDeclaration).symbol as ConeCallableSymbol
|
||||||
callableSymbols += symbol
|
callableSymbols += symbol
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+16
-3
@@ -19,13 +19,26 @@ import org.jetbrains.kotlin.fir.types.FirTypeRef
|
|||||||
|
|
||||||
class FirJavaConstructor(
|
class FirJavaConstructor(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
symbol: FirFunctionSymbol,
|
override val symbol: FirFunctionSymbol,
|
||||||
visibility: Visibility,
|
visibility: Visibility,
|
||||||
delegatedSelfTypeRef: FirTypeRef
|
delegatedSelfTypeRef: FirTypeRef
|
||||||
) : FirAbstractCallableMember(
|
) : FirAbstractCallableMember(
|
||||||
session, psi = null, symbol = symbol, name = NAME, visibility = visibility, modality = Modality.FINAL,
|
session,
|
||||||
isExpect = false, isActual = false, isOverride = false, receiverTypeRef = null, returnTypeRef = delegatedSelfTypeRef
|
psi = null,
|
||||||
|
name = NAME,
|
||||||
|
visibility = visibility,
|
||||||
|
modality = Modality.FINAL,
|
||||||
|
isExpect = false,
|
||||||
|
isActual = false,
|
||||||
|
isOverride = false,
|
||||||
|
receiverTypeRef = null,
|
||||||
|
returnTypeRef = delegatedSelfTypeRef
|
||||||
), FirConstructor {
|
), FirConstructor {
|
||||||
|
|
||||||
|
init {
|
||||||
|
symbol.bind(this)
|
||||||
|
}
|
||||||
|
|
||||||
override val delegatedConstructor: FirDelegatedConstructorCall?
|
override val delegatedConstructor: FirDelegatedConstructorCall?
|
||||||
get() = null
|
get() = null
|
||||||
|
|
||||||
|
|||||||
@@ -12,12 +12,12 @@ 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.java.types.FirJavaTypeRef
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFieldSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
class FirJavaField(
|
class FirJavaField(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
symbol: FirFieldSymbol,
|
override val symbol: FirPropertySymbol,
|
||||||
name: Name,
|
name: Name,
|
||||||
visibility: Visibility,
|
visibility: Visibility,
|
||||||
modality: Modality?,
|
modality: Modality?,
|
||||||
@@ -25,11 +25,15 @@ class FirJavaField(
|
|||||||
override val isVar: Boolean,
|
override val isVar: Boolean,
|
||||||
isStatic: Boolean
|
isStatic: Boolean
|
||||||
) : FirAbstractCallableMember(
|
) : FirAbstractCallableMember(
|
||||||
session, psi = null, symbol = symbol, 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,
|
||||||
receiverTypeRef = null, returnTypeRef = returnTypeRef
|
receiverTypeRef = null, returnTypeRef = returnTypeRef
|
||||||
), FirField {
|
), FirField {
|
||||||
|
init {
|
||||||
|
symbol.bind(this)
|
||||||
|
}
|
||||||
|
|
||||||
override val delegate: FirExpression?
|
override val delegate: FirExpression?
|
||||||
get() = null
|
get() = null
|
||||||
|
|
||||||
|
|||||||
@@ -163,7 +163,7 @@ private fun JavaClassifierType.enhanceInflexibleType(
|
|||||||
globalArgIndex++
|
globalArgIndex++
|
||||||
arg.toConeProjection(
|
arg.toConeProjection(
|
||||||
session,
|
session,
|
||||||
((originalSymbol as? FirBasedSymbol<*>)?.fir as? FirCallableMember)?.typeParameters?.getOrNull(localArgIndex)
|
((originalSymbol as? FirBasedSymbol<*>)?.fir as? FirCallableMemberDeclaration)?.typeParameters?.getOrNull(localArgIndex)
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
val argEnhancedTypeRef = arg.enhancePossiblyFlexible(session, annotations, qualifiers, globalArgIndex)
|
val argEnhancedTypeRef = arg.enhancePossiblyFlexible(session, annotations, qualifiers, globalArgIndex)
|
||||||
|
|||||||
@@ -17,10 +17,13 @@ import org.jetbrains.kotlin.fir.expressions.impl.*
|
|||||||
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
|
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
|
||||||
import org.jetbrains.kotlin.fir.references.FirExplicitThisReference
|
import org.jetbrains.kotlin.fir.references.FirExplicitThisReference
|
||||||
import org.jetbrains.kotlin.fir.references.FirSimpleNamedReference
|
import org.jetbrains.kotlin.fir.references.FirSimpleNamedReference
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.CallableId
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
|
||||||
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.ir.expressions.IrConstKind
|
import org.jetbrains.kotlin.ir.expressions.IrConstKind
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.resolve.constants.evaluate.*
|
import org.jetbrains.kotlin.resolve.constants.evaluate.*
|
||||||
@@ -280,9 +283,11 @@ internal fun generateDestructuringBlock(
|
|||||||
entry.typeReference.toFirOrImplicitTypeRef(), isVar,
|
entry.typeReference.toFirOrImplicitTypeRef(), isVar,
|
||||||
FirComponentCallImpl(session, entry, index + 1).apply {
|
FirComponentCallImpl(session, entry, index + 1).apply {
|
||||||
arguments += generateAccessExpression(session, entry, container.name)
|
arguments += generateAccessExpression(session, entry, container.name)
|
||||||
}
|
},
|
||||||
|
FirVariableSymbol(entry.nameAsSafeName) // TODO?
|
||||||
).apply {
|
).apply {
|
||||||
entry.extractAnnotationsTo(this)
|
entry.extractAnnotationsTo(this)
|
||||||
|
symbol.bind(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -290,7 +295,10 @@ 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 = FirVariableImpl(session, psi, name, FirImplicitTypeRefImpl(session, psi), false, initializer)
|
): FirVariable =
|
||||||
|
FirVariableImpl(session, psi, name, FirImplicitTypeRefImpl(session, psi), false, initializer, FirVariableSymbol(name)).apply {
|
||||||
|
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
|
||||||
|
|||||||
@@ -700,7 +700,7 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
|
|||||||
propertyType,
|
propertyType,
|
||||||
isVar,
|
isVar,
|
||||||
initializer,
|
initializer,
|
||||||
property.delegate?.expression?.toFirExpression("Incorrect delegate expression")
|
delegate = property.delegate?.expression?.toFirExpression("Incorrect delegate expression")
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
FirMemberPropertyImpl(
|
FirMemberPropertyImpl(
|
||||||
|
|||||||
@@ -56,20 +56,20 @@ class FirProviderImpl(val session: FirSession) : FirProvider {
|
|||||||
classifierContainerFileMap[classId] = file
|
classifierContainerFileMap[classId] = file
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitCallableMember(callableMember: FirCallableMember) {
|
override fun visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration) {
|
||||||
val callableId = when (containerFqName) {
|
val callableId = when (containerFqName) {
|
||||||
FqName.ROOT -> CallableId(packageName, callableMember.name)
|
FqName.ROOT -> CallableId(packageName, callableMemberDeclaration.name)
|
||||||
else -> CallableId(packageName, containerFqName, callableMember.name)
|
else -> CallableId(packageName, containerFqName, callableMemberDeclaration.name)
|
||||||
}
|
}
|
||||||
callableMap.merge(callableId, listOf(callableMember)) { a, b -> a + b }
|
callableMap.merge(callableId, listOf(callableMemberDeclaration)) { a, b -> a + b }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitNamedFunction(namedFunction: FirNamedFunction) {
|
override fun visitNamedFunction(namedFunction: FirNamedFunction) {
|
||||||
visitCallableMember(namedFunction)
|
visitCallableMemberDeclaration(namedFunction)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitProperty(property: FirProperty) {
|
override fun visitProperty(property: FirProperty) {
|
||||||
visitCallableMember(property)
|
visitCallableMemberDeclaration(property)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -161,7 +161,7 @@ class FirBodyResolveTransformer(val session: FirSession) : FirTransformer<Any?>(
|
|||||||
?: return CandidateApplicability.HIDDEN
|
?: return CandidateApplicability.HIDDEN
|
||||||
declaration as FirDeclaration
|
declaration as FirDeclaration
|
||||||
|
|
||||||
if (declaration is FirCallableMember) {
|
if (declaration is FirCallableDeclaration) {
|
||||||
if ((declaration.receiverTypeRef == null) != (explicitReceiverType == null)) return CandidateApplicability.PARAMETER_MAPPING_ERROR
|
if ((declaration.receiverTypeRef == null) != (explicitReceiverType == null)) return CandidateApplicability.PARAMETER_MAPPING_ERROR
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -288,7 +288,7 @@ class FirBodyResolveTransformer(val session: FirSession) : FirTransformer<Any?>(
|
|||||||
val lastCandidate = variableChecker.candidates.lastOrNull()
|
val lastCandidate = variableChecker.candidates.lastOrNull()
|
||||||
if (variableChecker.currentApplicability == CandidateApplicability.RESOLVED && lastCandidate == symbol) {
|
if (variableChecker.currentApplicability == CandidateApplicability.RESOLVED && lastCandidate == symbol) {
|
||||||
val receiverScope =
|
val receiverScope =
|
||||||
(lastCandidate as FirBasedSymbol<FirCallableMember>).fir.returnTypeRef.coneTypeUnsafe().scope(session)
|
(lastCandidate as FirBasedSymbol<FirCallableDeclaration>).fir.returnTypeRef.coneTypeUnsafe().scope(session)
|
||||||
|
|
||||||
|
|
||||||
lookupInvoke = true
|
lookupInvoke = true
|
||||||
@@ -393,7 +393,7 @@ class FirBodyResolveTransformer(val session: FirSession) : FirTransformer<Any?>(
|
|||||||
is FirErrorNamedReference ->
|
is FirErrorNamedReference ->
|
||||||
FirErrorTypeRefImpl(session, access.psi, newCallee.errorReason)
|
FirErrorTypeRefImpl(session, access.psi, newCallee.errorReason)
|
||||||
is FirResolvedCallableReference ->
|
is FirResolvedCallableReference ->
|
||||||
(newCallee.callableSymbol as FirBasedSymbol<FirCallableMember>).fir.returnTypeRef
|
(newCallee.callableSymbol as FirBasedSymbol<FirCallableDeclaration>).fir.returnTypeRef
|
||||||
else -> return
|
else -> return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+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 FirCallableMember -> {
|
is FirCallableMemberDeclaration -> {
|
||||||
val containingClass = classes.lastOrNull()
|
val containingClass = classes.lastOrNull()
|
||||||
when {
|
when {
|
||||||
containingClass == null -> Modality.FINAL
|
containingClass == null -> Modality.FINAL
|
||||||
|
|||||||
+3
-1
@@ -14,6 +14,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.symbols.*
|
import org.jetbrains.kotlin.fir.symbols.*
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
|
||||||
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
|
||||||
@@ -129,7 +130,8 @@ class FirClassSubstitutionScope(
|
|||||||
FirValueParameterImpl(
|
FirValueParameterImpl(
|
||||||
this@FirClassSubstitutionScope.session, psi,
|
this@FirClassSubstitutionScope.session, psi,
|
||||||
name, this.returnTypeRef.withReplacedConeType(this@FirClassSubstitutionScope.session, newType),
|
name, this.returnTypeRef.withReplacedConeType(this@FirClassSubstitutionScope.session, newType),
|
||||||
defaultValue, isCrossinline, isNoinline, isVararg
|
defaultValue, isCrossinline, isNoinline, isVararg,
|
||||||
|
FirVariableSymbol(valueParameter.symbol.callableId)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+7
-10
@@ -7,10 +7,7 @@ package org.jetbrains.kotlin.fir.scopes.impl
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirCallableMember
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirNamedFunction
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
|
||||||
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.NEXT
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.NEXT
|
||||||
@@ -60,18 +57,18 @@ class FirClassUseSiteScope(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun similarFunctionsOrBothProperties(member: FirCallableMember, self: FirCallableMember): Boolean {
|
fun similarFunctionsOrBothProperties(declaration: FirCallableDeclaration, self: FirCallableDeclaration): Boolean {
|
||||||
return when (member) {
|
return when (declaration) {
|
||||||
is FirNamedFunction -> self is FirNamedFunction && isOverriddenFunCheck(member, self)
|
is FirNamedFunction -> self is FirNamedFunction && isOverriddenFunCheck(declaration, self)
|
||||||
is FirConstructor -> false
|
is FirConstructor -> false
|
||||||
is FirProperty -> self is FirProperty
|
is FirProperty -> self is FirProperty
|
||||||
else -> error("Unknown fir callable type: $member, $self")
|
else -> error("Unknown fir callable type: $declaration, $self")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val self = (this as AbstractFirBasedSymbol<*>).fir as FirCallableMember
|
val self = (this as AbstractFirBasedSymbol<*>).fir as FirCallableMemberDeclaration
|
||||||
val overriding = seen.firstOrNull {
|
val overriding = seen.firstOrNull {
|
||||||
val member = (it as AbstractFirBasedSymbol<*>).fir as FirCallableMember
|
val member = (it as AbstractFirBasedSymbol<*>).fir as FirCallableMemberDeclaration
|
||||||
self.modality != Modality.FINAL
|
self.modality != Modality.FINAL
|
||||||
&& sameReceivers(member.receiverTypeRef, self.receiverTypeRef)
|
&& sameReceivers(member.receiverTypeRef, self.receiverTypeRef)
|
||||||
&& similarFunctionsOrBothProperties(member, self)
|
&& similarFunctionsOrBothProperties(member, self)
|
||||||
|
|||||||
@@ -101,21 +101,25 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitCallableMember(callableMember: FirCallableMember) {
|
override fun visitCallableDeclaration(callableDeclaration: FirCallableDeclaration) {
|
||||||
visitMemberDeclaration(callableMember)
|
if (callableDeclaration is FirMemberDeclaration) {
|
||||||
val receiverType = callableMember.receiverTypeRef
|
visitMemberDeclaration(callableDeclaration)
|
||||||
|
} else {
|
||||||
|
visitTypedDeclaration(callableDeclaration)
|
||||||
|
}
|
||||||
|
val receiverType = callableDeclaration.receiverTypeRef
|
||||||
if (receiverType != null) {
|
if (receiverType != null) {
|
||||||
print(" ")
|
print(" ")
|
||||||
receiverType.accept(this)
|
receiverType.accept(this)
|
||||||
print(".")
|
print(".")
|
||||||
}
|
}
|
||||||
if (callableMember is FirFunction) {
|
if (callableDeclaration is FirFunction) {
|
||||||
callableMember.valueParameters.renderParameters()
|
callableDeclaration.valueParameters.renderParameters()
|
||||||
} else if (callableMember is FirProperty) {
|
} else if (callableDeclaration is FirProperty) {
|
||||||
print(if (callableMember.isVar) "(var)" else "(val)")
|
print(if (callableDeclaration.isVar) "(var)" else "(val)")
|
||||||
}
|
}
|
||||||
print(": ")
|
print(": ")
|
||||||
callableMember.returnTypeRef.accept(this)
|
callableDeclaration.returnTypeRef.accept(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun Visibility.asString() =
|
private fun Visibility.asString() =
|
||||||
@@ -126,7 +130,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 FirCallableMember && this.isOverride) {
|
if (this is FirCallableMemberDeclaration && this.isOverride) {
|
||||||
"open?"
|
"open?"
|
||||||
} else {
|
} else {
|
||||||
"final?"
|
"final?"
|
||||||
@@ -148,7 +152,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
|||||||
if (memberDeclaration.isActual) {
|
if (memberDeclaration.isActual) {
|
||||||
print("actual ")
|
print("actual ")
|
||||||
}
|
}
|
||||||
if (memberDeclaration is FirCallableMember) {
|
if (memberDeclaration is FirCallableMemberDeclaration) {
|
||||||
if (memberDeclaration.isOverride) {
|
if (memberDeclaration.isOverride) {
|
||||||
print("override ")
|
print("override ")
|
||||||
}
|
}
|
||||||
@@ -275,7 +279,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitProperty(property: FirProperty) {
|
override fun visitProperty(property: FirProperty) {
|
||||||
visitCallableMember(property)
|
visitCallableDeclaration(property)
|
||||||
property.initializer?.let {
|
property.initializer?.let {
|
||||||
print(" = ")
|
print(" = ")
|
||||||
it.accept(this)
|
it.accept(this)
|
||||||
@@ -300,7 +304,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitNamedFunction(namedFunction: FirNamedFunction) {
|
override fun visitNamedFunction(namedFunction: FirNamedFunction) {
|
||||||
visitCallableMember(namedFunction)
|
visitCallableDeclaration(namedFunction)
|
||||||
namedFunction.body?.accept(this)
|
namedFunction.body?.accept(this)
|
||||||
if (namedFunction.body == null) {
|
if (namedFunction.body == null) {
|
||||||
println()
|
println()
|
||||||
|
|||||||
+5
-9
@@ -11,21 +11,17 @@ 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 FirCallableMember :
|
interface FirCallableDeclaration :
|
||||||
@VisitedSupertype FirDeclaration, FirMemberDeclaration,
|
@VisitedSupertype FirDeclaration,
|
||||||
FirTypedDeclaration, FirSymbolOwner<FirCallableMember> {
|
FirTypedDeclaration, FirSymbolOwner<FirCallableDeclaration> {
|
||||||
val isOverride: Boolean get() = status.isOverride
|
|
||||||
|
|
||||||
val isStatic: Boolean get() = status.isStatic
|
|
||||||
|
|
||||||
val receiverTypeRef: FirTypeRef?
|
val receiverTypeRef: FirTypeRef?
|
||||||
|
|
||||||
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.visitCallableMember(this, data)
|
visitor.visitCallableDeclaration(this, data)
|
||||||
|
|
||||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||||
receiverTypeRef?.accept(visitor, data)
|
receiverTypeRef?.accept(visitor, data)
|
||||||
super<FirMemberDeclaration>.acceptChildren(visitor, data)
|
super<FirTypedDeclaration>.acceptChildren(visitor, data)
|
||||||
returnTypeRef.accept(visitor, data)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+26
@@ -0,0 +1,26 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. 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.visitors.FirVisitor
|
||||||
|
|
||||||
|
interface FirCallableMemberDeclaration : @VisitedSupertype FirDeclaration, FirMemberDeclaration, FirCallableDeclaration {
|
||||||
|
|
||||||
|
val isOverride: Boolean get() = status.isOverride
|
||||||
|
|
||||||
|
val isStatic: Boolean get() = status.isStatic
|
||||||
|
|
||||||
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitCallableMemberDeclaration(this, data)
|
||||||
|
|
||||||
|
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||||
|
receiverTypeRef?.accept(visitor, data)
|
||||||
|
super<FirMemberDeclaration>.acceptChildren(visitor, data)
|
||||||
|
returnTypeRef.accept(visitor, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -11,14 +11,17 @@ 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, FirCallableMember {
|
interface FirConstructor : @VisitedSupertype FirFunction, FirCallableMemberDeclaration {
|
||||||
|
|
||||||
|
override val isOverride: Boolean get() = status.isOverride
|
||||||
|
|
||||||
val delegatedConstructor: FirDelegatedConstructorCall?
|
val delegatedConstructor: FirDelegatedConstructorCall?
|
||||||
|
|
||||||
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.visitConstructor(this, data)
|
visitor.visitConstructor(this, data)
|
||||||
|
|
||||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||||
super<FirCallableMember>.acceptChildren(visitor, data)
|
super<FirCallableMemberDeclaration>.acceptChildren(visitor, data)
|
||||||
delegatedConstructor?.accept(visitor, data)
|
delegatedConstructor?.accept(visitor, data)
|
||||||
for (parameter in valueParameters) {
|
for (parameter in valueParameters) {
|
||||||
parameter.accept(visitor, data)
|
parameter.accept(visitor, data)
|
||||||
|
|||||||
@@ -11,12 +11,12 @@ 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, FirCallableMember, FirVariable {
|
interface FirField : @VisitedSupertype FirDeclaration, FirCallableMemberDeclaration, FirVariable {
|
||||||
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)
|
||||||
|
|
||||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||||
super<FirCallableMember>.acceptChildren(visitor, data)
|
super<FirCallableMemberDeclaration>.acceptChildren(visitor, data)
|
||||||
initializer?.accept(visitor, data)
|
initializer?.accept(visitor, data)
|
||||||
delegate?.accept(visitor, data)
|
delegate?.accept(visitor, data)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.fir.VisitedSupertype
|
|||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
|
|
||||||
@BaseTransformedType
|
@BaseTransformedType
|
||||||
interface FirNamedFunction : @VisitedSupertype FirFunction, FirCallableMember {
|
interface FirNamedFunction : @VisitedSupertype FirFunction, FirCallableMemberDeclaration, 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
|
||||||
@@ -23,11 +23,13 @@ interface FirNamedFunction : @VisitedSupertype FirFunction, FirCallableMember {
|
|||||||
|
|
||||||
val isSuspend: Boolean get() = status.isSuspend
|
val isSuspend: Boolean get() = status.isSuspend
|
||||||
|
|
||||||
|
override val isOverride: Boolean get() = status.isOverride
|
||||||
|
|
||||||
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) {
|
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||||
super<FirCallableMember>.acceptChildren(visitor, data)
|
super<FirCallableMemberDeclaration>.acceptChildren(visitor, data)
|
||||||
for (parameter in valueParameters) {
|
for (parameter in valueParameters) {
|
||||||
parameter.accept(visitor, data)
|
parameter.accept(visitor, data)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,17 +7,18 @@ 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.expressions.FirExpression
|
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirVariable
|
import org.jetbrains.kotlin.fir.expressions.FirVariable
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
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, FirCallableMember, FirVariable {
|
interface FirProperty : @VisitedSupertype FirDeclaration, FirCallableMemberDeclaration, FirVariable, 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
|
||||||
|
|
||||||
|
override val isOverride: Boolean get() = status.isOverride
|
||||||
|
|
||||||
// Should it be nullable or have some default?
|
// Should it be nullable or have some default?
|
||||||
val getter: FirPropertyAccessor
|
val getter: FirPropertyAccessor
|
||||||
|
|
||||||
@@ -27,7 +28,7 @@ interface FirProperty : @VisitedSupertype FirDeclaration, FirCallableMember, Fir
|
|||||||
visitor.visitProperty(this, data)
|
visitor.visitProperty(this, data)
|
||||||
|
|
||||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||||
super<FirCallableMember>.acceptChildren(visitor, data)
|
super<FirCallableMemberDeclaration>.acceptChildren(visitor, data)
|
||||||
initializer?.accept(visitor, data)
|
initializer?.accept(visitor, data)
|
||||||
delegate?.accept(visitor, data)
|
delegate?.accept(visitor, data)
|
||||||
getter.accept(visitor, data)
|
getter.accept(visitor, data)
|
||||||
|
|||||||
@@ -8,10 +8,13 @@ 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.expressions.FirExpression
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
|
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.visitors.FirVisitor
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
|
|
||||||
@BaseTransformedType
|
@BaseTransformedType
|
||||||
interface FirValueParameter : @VisitedSupertype FirDeclaration, FirTypedDeclaration, FirNamedDeclaration {
|
interface FirValueParameter : @VisitedSupertype FirDeclaration, FirTypedDeclaration, FirNamedDeclaration, FirVariable {
|
||||||
val isCrossinline: Boolean
|
val isCrossinline: Boolean
|
||||||
|
|
||||||
val isNoinline: Boolean
|
val isNoinline: Boolean
|
||||||
@@ -20,11 +23,13 @@ interface FirValueParameter : @VisitedSupertype FirDeclaration, FirTypedDeclarat
|
|||||||
|
|
||||||
val defaultValue: FirExpression?
|
val defaultValue: 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.visitValueParameter(this, data)
|
visitor.visitValueParameter(this, data)
|
||||||
|
|
||||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||||
super<FirTypedDeclaration>.acceptChildren(visitor, data)
|
super<FirVariable>.acceptChildren(visitor, data)
|
||||||
defaultValue?.accept(visitor, data)
|
defaultValue?.accept(visitor, data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+6
-5
@@ -10,16 +10,17 @@ 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.FirCallableMember
|
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirCallableMemberDeclaration
|
||||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||||
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
|
||||||
|
|
||||||
abstract class FirAbstractCallableMember : FirAbstractMemberDeclaration, FirCallableMember {
|
abstract class FirAbstractCallableMember : FirAbstractMemberDeclaration, FirCallableMemberDeclaration {
|
||||||
|
|
||||||
final override val symbol: FirBasedSymbol<FirCallableMember>
|
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
|
||||||
|
|
||||||
@@ -30,7 +31,7 @@ abstract class FirAbstractCallableMember : FirAbstractMemberDeclaration, FirCall
|
|||||||
constructor(
|
constructor(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
psi: PsiElement?,
|
psi: PsiElement?,
|
||||||
symbol: FirBasedSymbol<FirCallableMember>,
|
symbol: FirBasedSymbol<FirCallableDeclaration>,
|
||||||
name: Name,
|
name: Name,
|
||||||
receiverTypeRef: FirTypeRef?,
|
receiverTypeRef: FirTypeRef?,
|
||||||
returnTypeRef: FirTypeRef
|
returnTypeRef: FirTypeRef
|
||||||
@@ -44,7 +45,7 @@ abstract class FirAbstractCallableMember : FirAbstractMemberDeclaration, FirCall
|
|||||||
constructor(
|
constructor(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
psi: PsiElement?,
|
psi: PsiElement?,
|
||||||
symbol: FirBasedSymbol<FirCallableMember>,
|
symbol: FirBasedSymbol<FirCallableDeclaration>,
|
||||||
name: Name,
|
name: Name,
|
||||||
visibility: Visibility,
|
visibility: Visibility,
|
||||||
modality: Modality?,
|
modality: Modality?,
|
||||||
|
|||||||
+16
-1
@@ -13,9 +13,16 @@ import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.CallableId
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.transformInplace
|
||||||
|
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.types.impl.FirImplicitUnitTypeRef
|
import org.jetbrains.kotlin.fir.types.impl.FirImplicitUnitTypeRef
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
abstract class FirDefaultPropertyAccessor(
|
abstract class FirDefaultPropertyAccessor(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
@@ -64,7 +71,15 @@ class FirDefaultPropertySetter(
|
|||||||
propertyTypeRef: FirTypeRef,
|
propertyTypeRef: FirTypeRef,
|
||||||
visibility: Visibility
|
visibility: Visibility
|
||||||
) : FirDefaultPropertyAccessor(session, psi, isGetter = false, visibility = visibility) {
|
) : FirDefaultPropertyAccessor(session, psi, isGetter = false, visibility = visibility) {
|
||||||
override val valueParameters = mutableListOf(FirDefaultSetterValueParameter(session, psi, propertyTypeRef))
|
override val valueParameters = mutableListOf(
|
||||||
|
FirDefaultSetterValueParameter(
|
||||||
|
session, psi, propertyTypeRef, FirVariableSymbol(
|
||||||
|
CallableId(
|
||||||
|
FqName.ROOT, Name.special("<default-setter-parameter>")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
override var returnTypeRef: FirTypeRef = FirImplicitUnitTypeRef(session, psi)
|
override var returnTypeRef: FirTypeRef = FirImplicitUnitTypeRef(session, psi)
|
||||||
|
|
||||||
|
|||||||
+18
-1
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.FirElement
|
|||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
|
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
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
@@ -18,14 +19,30 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
class FirDefaultSetterValueParameter(
|
class FirDefaultSetterValueParameter(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
psi: PsiElement?,
|
psi: PsiElement?,
|
||||||
override var returnTypeRef: FirTypeRef
|
override var returnTypeRef: FirTypeRef,
|
||||||
|
override val symbol: FirVariableSymbol = FirVariableSymbol(name)
|
||||||
) : FirAbstractNamedAnnotatedDeclaration(session, psi, name), FirValueParameter {
|
) : FirAbstractNamedAnnotatedDeclaration(session, psi, name), FirValueParameter {
|
||||||
|
|
||||||
|
init {
|
||||||
|
symbol.bind(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
override val initializer: FirExpression?
|
||||||
|
get() = null
|
||||||
|
override val delegate: FirExpression?
|
||||||
|
get() = null
|
||||||
|
override val receiverTypeRef: FirTypeRef?
|
||||||
|
get() = null
|
||||||
|
|
||||||
override val isCrossinline = false
|
override val isCrossinline = false
|
||||||
|
|
||||||
override val isNoinline = false
|
override val isNoinline = false
|
||||||
|
|
||||||
override val isVararg = false
|
override val isVararg = false
|
||||||
|
|
||||||
|
override val isVar: Boolean = false
|
||||||
|
override val isVal: Boolean = false
|
||||||
|
|
||||||
override val defaultValue: FirExpression? = null
|
override val defaultValue: FirExpression? = null
|
||||||
|
|
||||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||||
|
|||||||
+17
-1
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.FirElement
|
|||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
|
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
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
@@ -23,8 +24,23 @@ open class FirValueParameterImpl(
|
|||||||
override var defaultValue: FirExpression?,
|
override var defaultValue: FirExpression?,
|
||||||
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)
|
||||||
) : FirAbstractNamedAnnotatedDeclaration(session, psi, name), FirValueParameter {
|
) : FirAbstractNamedAnnotatedDeclaration(session, psi, name), FirValueParameter {
|
||||||
|
|
||||||
|
init {
|
||||||
|
symbol.bind(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
override val isVar: Boolean
|
||||||
|
get() = false
|
||||||
|
override val initializer: FirExpression?
|
||||||
|
get() = null
|
||||||
|
override val delegate: FirExpression?
|
||||||
|
get() = null
|
||||||
|
override val receiverTypeRef: FirTypeRef?
|
||||||
|
get() = null
|
||||||
|
|
||||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||||
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
|
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
|
||||||
defaultValue = defaultValue?.transformSingle(transformer, data)
|
defaultValue = defaultValue?.transformSingle(transformer, data)
|
||||||
|
|||||||
@@ -8,8 +8,11 @@ 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.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
|
||||||
@@ -22,8 +25,17 @@ 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 var delegate: FirExpression? = null
|
override var delegate: FirExpression? = null
|
||||||
) : FirAbstractNamedAnnotatedDeclaration(session, psiElement, name), FirVariable {
|
) : FirAbstractNamedAnnotatedDeclaration(session, psiElement, name), FirVariable {
|
||||||
|
|
||||||
|
init {
|
||||||
|
symbol.bind(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
override val receiverTypeRef: FirTypeRef?
|
||||||
|
get() = null
|
||||||
|
|
||||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||||
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
|
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
|
||||||
initializer = initializer?.transformSingle(transformer, data)
|
initializer = initializer?.transformSingle(transformer, data)
|
||||||
|
|||||||
@@ -6,12 +6,10 @@
|
|||||||
package org.jetbrains.kotlin.fir.expressions
|
package org.jetbrains.kotlin.fir.expressions
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.VisitedSupertype
|
import org.jetbrains.kotlin.fir.VisitedSupertype
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirTypedDeclaration
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirNamedDeclaration
|
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
|
|
||||||
interface FirVariable : @VisitedSupertype FirDeclaration, FirTypedDeclaration, FirNamedDeclaration, FirStatement {
|
interface FirVariable : @VisitedSupertype FirDeclaration, FirTypedDeclaration, FirCallableDeclaration, FirNamedDeclaration, FirStatement {
|
||||||
val isVar: Boolean
|
val isVar: Boolean
|
||||||
|
|
||||||
val isVal: Boolean
|
val isVal: Boolean
|
||||||
@@ -27,6 +25,6 @@ interface FirVariable : @VisitedSupertype FirDeclaration, FirTypedDeclaration, F
|
|||||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||||
initializer?.accept(visitor, data)
|
initializer?.accept(visitor, data)
|
||||||
delegate?.accept(visitor, data)
|
delegate?.accept(visitor, data)
|
||||||
super<FirTypedDeclaration>.acceptChildren(visitor, data)
|
super<FirCallableDeclaration>.acceptChildren(visitor, data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.symbols.impl
|
package org.jetbrains.kotlin.fir.symbols.impl
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirCallableMember
|
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.CallableId
|
import org.jetbrains.kotlin.fir.symbols.CallableId
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.ConeFunctionSymbol
|
||||||
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
|||||||
class FirFunctionSymbol(
|
class FirFunctionSymbol(
|
||||||
override val callableId: CallableId,
|
override val callableId: CallableId,
|
||||||
val isFakeOverride: Boolean = false
|
val isFakeOverride: Boolean = false
|
||||||
) : ConeFunctionSymbol, AbstractFirBasedSymbol<FirCallableMember>() {
|
) : ConeFunctionSymbol, AbstractFirBasedSymbol<FirCallableDeclaration>() {
|
||||||
override val parameters: List<ConeKotlinType>
|
override val parameters: List<ConeKotlinType>
|
||||||
get() = emptyList()
|
get() = emptyList()
|
||||||
}
|
}
|
||||||
@@ -5,9 +5,16 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.symbols.impl
|
package org.jetbrains.kotlin.fir.symbols.impl
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirCallableMember
|
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.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.name.FqName
|
||||||
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
class FirPropertySymbol(override val callableId: CallableId) : ConePropertySymbol, AbstractFirBasedSymbol<FirCallableMember>()
|
class FirPropertySymbol(override val callableId: CallableId) : ConePropertySymbol, AbstractFirBasedSymbol<FirCallableDeclaration>()
|
||||||
|
|
||||||
|
class FirVariableSymbol(override val callableId: CallableId) : ConeVariableSymbol, AbstractFirBasedSymbol<FirCallableDeclaration>() {
|
||||||
|
constructor(name: Name) : this(CallableId(FqName("var"), name)) // TODO?
|
||||||
|
}
|
||||||
+12
-4
@@ -24,8 +24,8 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
|||||||
return transformElement(declaration, data)
|
return transformElement(declaration, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun transformCallableMember(callableMember: FirCallableMember, data: D): CompositeTransformResult<FirDeclaration> {
|
open fun transformCallableDeclaration(callableDeclaration: FirCallableDeclaration, data: D): CompositeTransformResult<FirDeclaration> {
|
||||||
return transformDeclaration(callableMember, data)
|
return transformDeclaration(callableDeclaration, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun transformDeclarationWithBody(declarationWithBody: FirDeclarationWithBody, data: D): CompositeTransformResult<FirDeclaration> {
|
open fun transformDeclarationWithBody(declarationWithBody: FirDeclarationWithBody, data: D): CompositeTransformResult<FirDeclaration> {
|
||||||
@@ -76,6 +76,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
|||||||
return transformNamedDeclaration(memberDeclaration, data)
|
return transformNamedDeclaration(memberDeclaration, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open fun transformCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration, data: D): CompositeTransformResult<FirDeclaration> {
|
||||||
|
return transformMemberDeclaration(callableMemberDeclaration, data)
|
||||||
|
}
|
||||||
|
|
||||||
open fun transformClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration, data: D): CompositeTransformResult<FirDeclaration> {
|
open fun transformClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration, data: D): CompositeTransformResult<FirDeclaration> {
|
||||||
return transformMemberDeclaration(classLikeDeclaration, data)
|
return transformMemberDeclaration(classLikeDeclaration, data)
|
||||||
}
|
}
|
||||||
@@ -416,8 +420,12 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
|||||||
return transformCall(call, data)
|
return transformCall(call, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
final override fun visitCallableMember(callableMember: FirCallableMember, data: D): CompositeTransformResult<FirElement> {
|
final override fun visitCallableDeclaration(callableDeclaration: FirCallableDeclaration, data: D): CompositeTransformResult<FirElement> {
|
||||||
return transformCallableMember(callableMember, data)
|
return transformCallableDeclaration(callableDeclaration, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
final override fun visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration, data: D): CompositeTransformResult<FirElement> {
|
||||||
|
return transformCallableMemberDeclaration(callableMemberDeclaration, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
final override fun visitCallableReferenceAccess(callableReferenceAccess: FirCallableReferenceAccess, data: D): CompositeTransformResult<FirElement> {
|
final override fun visitCallableReferenceAccess(callableReferenceAccess: FirCallableReferenceAccess, data: D): CompositeTransformResult<FirElement> {
|
||||||
|
|||||||
@@ -24,8 +24,8 @@ abstract class FirVisitor<out R, in D> {
|
|||||||
return visitElement(declaration, data)
|
return visitElement(declaration, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun visitCallableMember(callableMember: FirCallableMember, data: D): R {
|
open fun visitCallableDeclaration(callableDeclaration: FirCallableDeclaration, data: D): R {
|
||||||
return visitDeclaration(callableMember, data)
|
return visitDeclaration(callableDeclaration, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun visitDeclarationWithBody(declarationWithBody: FirDeclarationWithBody, data: D): R {
|
open fun visitDeclarationWithBody(declarationWithBody: FirDeclarationWithBody, data: D): R {
|
||||||
@@ -76,6 +76,10 @@ abstract class FirVisitor<out R, in D> {
|
|||||||
return visitNamedDeclaration(memberDeclaration, data)
|
return visitNamedDeclaration(memberDeclaration, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open fun visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration, data: D): R {
|
||||||
|
return visitMemberDeclaration(callableMemberDeclaration, data)
|
||||||
|
}
|
||||||
|
|
||||||
open fun visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration, data: D): R {
|
open fun visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration, data: D): R {
|
||||||
return visitMemberDeclaration(classLikeDeclaration, data)
|
return visitMemberDeclaration(classLikeDeclaration, data)
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-4
@@ -24,8 +24,8 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitElement(declaration, null)
|
visitElement(declaration, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun visitCallableMember(callableMember: FirCallableMember) {
|
open fun visitCallableDeclaration(callableDeclaration: FirCallableDeclaration) {
|
||||||
visitDeclaration(callableMember, null)
|
visitDeclaration(callableDeclaration, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun visitDeclarationWithBody(declarationWithBody: FirDeclarationWithBody) {
|
open fun visitDeclarationWithBody(declarationWithBody: FirDeclarationWithBody) {
|
||||||
@@ -76,6 +76,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitNamedDeclaration(memberDeclaration, null)
|
visitNamedDeclaration(memberDeclaration, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open fun visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration) {
|
||||||
|
visitMemberDeclaration(callableMemberDeclaration, null)
|
||||||
|
}
|
||||||
|
|
||||||
open fun visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration) {
|
open fun visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration) {
|
||||||
visitMemberDeclaration(classLikeDeclaration, null)
|
visitMemberDeclaration(classLikeDeclaration, null)
|
||||||
}
|
}
|
||||||
@@ -416,8 +420,12 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitCall(call)
|
visitCall(call)
|
||||||
}
|
}
|
||||||
|
|
||||||
final override fun visitCallableMember(callableMember: FirCallableMember, data: Nothing?) {
|
final override fun visitCallableDeclaration(callableDeclaration: FirCallableDeclaration, data: Nothing?) {
|
||||||
visitCallableMember(callableMember)
|
visitCallableDeclaration(callableDeclaration)
|
||||||
|
}
|
||||||
|
|
||||||
|
final override fun visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration, data: Nothing?) {
|
||||||
|
visitCallableMemberDeclaration(callableMemberDeclaration)
|
||||||
}
|
}
|
||||||
|
|
||||||
final override fun visitCallableReferenceAccess(callableReferenceAccess: FirCallableReferenceAccess, data: Nothing?) {
|
final override fun visitCallableReferenceAccess(callableReferenceAccess: FirCallableReferenceAccess, data: Nothing?) {
|
||||||
|
|||||||
Reference in New Issue
Block a user