[FIR] Remove generic parameter from FirDeclaration

This commit is contained in:
Dmitriy Novozhilov
2021-06-26 12:30:37 +03:00
parent 511e564b20
commit f400477c70
360 changed files with 1774 additions and 1743 deletions
@@ -22,7 +22,7 @@ object FirJavaVisibilityChecker : FirVisibilityChecker() {
declarationVisibility: Visibility,
symbol: FirBasedSymbol<*>,
useSiteFile: FirFile,
containingDeclarations: List<FirDeclaration<*>>,
containingDeclarations: List<FirDeclaration>,
dispatchReceiver: ReceiverValue?,
session: FirSession
): Boolean {
@@ -7,24 +7,28 @@ package org.jetbrains.kotlin.fir.java
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.FirClass
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
import org.jetbrains.kotlin.fir.declarations.utils.classId
import org.jetbrains.kotlin.fir.declarations.utils.isJava
import org.jetbrains.kotlin.fir.declarations.utils.superConeTypes
import org.jetbrains.kotlin.fir.java.declarations.FirJavaClass
import org.jetbrains.kotlin.fir.java.scopes.*
import org.jetbrains.kotlin.fir.resolve.*
import org.jetbrains.kotlin.fir.scopes.*
import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
import org.jetbrains.kotlin.fir.scopes.impl.*
import org.jetbrains.kotlin.name.StandardClassIds
import org.jetbrains.kotlin.fir.scopes.scopeForSupertype
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
import org.jetbrains.kotlin.name.StandardClassIds
import org.jetbrains.kotlin.utils.DFS
class JavaScopeProvider(
val symbolProvider: JavaSymbolProvider
) : FirScopeProvider() {
override fun getUseSiteMemberScope(
klass: FirClass<*>,
klass: FirClass,
useSiteSession: FirSession,
scopeSession: ScopeSession
): FirTypeScope {
@@ -106,7 +110,7 @@ class JavaScopeProvider(
}
override fun getStaticMemberScopeForCallables(
klass: FirClass<*>,
klass: FirClass,
useSiteSession: FirSession,
scopeSession: ScopeSession
): FirScope? {
@@ -115,7 +119,7 @@ class JavaScopeProvider(
}
private fun getStaticMemberScopeForCallables(
klass: FirClass<*>,
klass: FirClass,
useSiteSession: FirSession,
scopeSession: ScopeSession,
visitedClasses: MutableSet<FirRegularClass>
@@ -190,7 +194,7 @@ class JavaScopeProvider(
return result
}
override fun getNestedClassifierScope(klass: FirClass<*>, useSiteSession: FirSession, scopeSession: ScopeSession): FirScope? {
override fun getNestedClassifierScope(klass: FirClass, useSiteSession: FirSession, scopeSession: ScopeSession): FirScope? {
return lazyNestedClassifierScope(
klass.classId,
(klass as FirJavaClass).existingNestedClassifierNames,
@@ -374,7 +374,7 @@ class JavaSymbolProvider(
classId: ClassId,
javaTypeParameterStack: JavaTypeParameterStack,
dispatchReceiver: ConeClassLikeType
): FirDeclaration<*> {
): FirDeclaration {
val fieldName = javaField.name
val fieldId = CallableId(classId.packageFqName, classId.relativeClassName, fieldName)
val returnType = javaField.type
@@ -37,7 +37,7 @@ class FirJavaClass @FirImplementationDetail internal constructor(
override val annotations: MutableList<FirAnnotationCall>,
override var status: FirDeclarationStatus,
override val classKind: ClassKind,
override val declarations: MutableList<FirDeclaration<*>>,
override val declarations: MutableList<FirDeclaration>,
override val scopeProvider: FirScopeProvider,
override val symbol: FirRegularClassSymbol,
override val superTypeRefs: MutableList<FirTypeRef>,
@@ -132,7 +132,7 @@ internal class FirJavaClassBuilder : FirRegularClassBuilder(), FirAnnotationCont
override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
override val typeParameters: MutableList<FirTypeParameterRef> = mutableListOf()
override val declarations: MutableList<FirDeclaration<*>> = mutableListOf()
override val declarations: MutableList<FirDeclaration> = mutableListOf()
override val superTypeRefs: MutableList<FirTypeRef> = mutableListOf()
@@ -153,7 +153,7 @@ internal class FirJavaFieldBuilder : FirFieldBuilder() {
return FirJavaField(
source,
moduleData,
symbol as FirFieldSymbol,
symbol,
name,
resolvePhase,
returnTypeRef,
@@ -40,7 +40,7 @@ import org.jetbrains.kotlin.utils.addToStdlib.safeAs
class FirSignatureEnhancement(
private val owner: FirRegularClass,
private val session: FirSession,
private val overridden: FirSimpleFunction.() -> List<FirCallableMemberDeclaration<*>>
private val overridden: FirSimpleFunction.() -> List<FirCallableMemberDeclaration>
) {
/*
* FirSignatureEnhancement may be created with library session which doesn't have single module data,
@@ -171,7 +171,7 @@ class FirSignatureEnhancement(
}
private fun enhanceMethod(
firMethod: FirFunction<*>,
firMethod: FirFunction,
methodId: CallableId,
name: Name?
): FirFunctionSymbol<*> {
@@ -304,7 +304,7 @@ class FirSignatureEnhancement(
private fun enhanceReceiverType(
ownerFunction: FirJavaMethod,
overriddenMembers: List<FirCallableMemberDeclaration<*>>,
overriddenMembers: List<FirCallableMemberDeclaration>,
memberContext: FirJavaEnhancementContext
): FirResolvedTypeRef {
val signatureParts = ownerFunction.partsForValueParameter(
@@ -319,8 +319,8 @@ class FirSignatureEnhancement(
}
private fun enhanceValueParameterType(
ownerFunction: FirFunction<*>,
overriddenMembers: List<FirCallableMemberDeclaration<*>>,
ownerFunction: FirFunction,
overriddenMembers: List<FirCallableMemberDeclaration>,
hasReceiver: Boolean,
memberContext: FirJavaEnhancementContext,
predefinedEnhancementInfo: PredefinedFunctionEnhancementInfo?,
@@ -346,8 +346,8 @@ class FirSignatureEnhancement(
}
private fun enhanceReturnType(
owner: FirCallableMemberDeclaration<*>,
overriddenMembers: List<FirCallableMemberDeclaration<*>>,
owner: FirCallableMemberDeclaration,
overriddenMembers: List<FirCallableMemberDeclaration>,
memberContext: FirJavaEnhancementContext,
predefinedEnhancementInfo: PredefinedFunctionEnhancementInfo?
): FirResolvedTypeRef {
@@ -368,37 +368,37 @@ class FirSignatureEnhancement(
}
private sealed class TypeInSignature {
abstract fun getTypeRef(member: FirCallableMemberDeclaration<*>): FirTypeRef
abstract fun getTypeRef(member: FirCallableMemberDeclaration): FirTypeRef
object Return : TypeInSignature() {
override fun getTypeRef(member: FirCallableMemberDeclaration<*>): FirTypeRef = member.returnTypeRef
override fun getTypeRef(member: FirCallableMemberDeclaration): FirTypeRef = member.returnTypeRef
}
object Receiver : TypeInSignature() {
override fun getTypeRef(member: FirCallableMemberDeclaration<*>): FirTypeRef {
override fun getTypeRef(member: FirCallableMemberDeclaration): FirTypeRef {
if (member is FirJavaMethod) return member.valueParameters[0].returnTypeRef
return member.receiverTypeRef!!
}
}
class ValueParameter(val hasReceiver: Boolean, val index: Int) : TypeInSignature() {
override fun getTypeRef(member: FirCallableMemberDeclaration<*>): FirTypeRef {
override fun getTypeRef(member: FirCallableMemberDeclaration): FirTypeRef {
if (hasReceiver && member is FirJavaMethod) {
return member.valueParameters[index + 1].returnTypeRef
}
return (member as FirFunction<*>).valueParameters[index].returnTypeRef
return (member as FirFunction).valueParameters[index].returnTypeRef
}
}
}
private fun FirFunction<*>.partsForValueParameter(
private fun FirFunction.partsForValueParameter(
typeQualifierResolver: FirAnnotationTypeQualifierResolver,
overriddenMembers: List<FirCallableMemberDeclaration<*>>,
overriddenMembers: List<FirCallableMemberDeclaration>,
// TODO: investigate if it's really can be a null (check properties' with extension overrides in Java)
parameterContainer: FirAnnotationContainer?,
methodContext: FirJavaEnhancementContext,
typeInSignature: TypeInSignature
): EnhancementSignatureParts = (this as FirCallableMemberDeclaration<*>).parts(
): EnhancementSignatureParts = (this as FirCallableMemberDeclaration).parts(
typeQualifierResolver,
overriddenMembers,
parameterContainer, false,
@@ -409,9 +409,9 @@ class FirSignatureEnhancement(
typeInSignature
)
private fun FirCallableMemberDeclaration<*>.parts(
private fun FirCallableMemberDeclaration.parts(
typeQualifierResolver: FirAnnotationTypeQualifierResolver,
overriddenMembers: List<FirCallableMemberDeclaration<*>>,
overriddenMembers: List<FirCallableMemberDeclaration>,
typeContainer: FirAnnotationContainer?,
isCovariant: Boolean,
containerContext: FirJavaEnhancementContext,
@@ -14,7 +14,6 @@ import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.name.Name
class JavaClassMembersEnhancementScope(
@@ -65,14 +64,14 @@ class JavaClassMembersEnhancementScope(
return super.processFunctionsByName(name, processor)
}
private fun FirCallableMemberDeclaration<*>.overriddenMembers(name: Name): List<FirCallableMemberDeclaration<*>> {
private fun FirCallableMemberDeclaration.overriddenMembers(name: Name): List<FirCallableMemberDeclaration> {
val backMap = overrideBindCache.getOrPut(name) {
useSiteMemberScope
.overrideByBase
.toList()
.groupBy({ (_, key) -> key }, { (value) -> value })
}
return backMap[this.symbol]?.map { it.fir as FirCallableMemberDeclaration<*> } ?: emptyList()
return backMap[this.symbol]?.map { it.fir as FirCallableMemberDeclaration } ?: emptyList()
}
override fun processClassifiersByNameWithSubstitution(name: Name, processor: (FirClassifierSymbol<*>, ConeSubstitutor) -> Unit) {
@@ -13,7 +13,9 @@ import org.jetbrains.kotlin.fir.declarations.synthetic.buildSyntheticProperty
import org.jetbrains.kotlin.fir.declarations.utils.isInterface
import org.jetbrains.kotlin.fir.declarations.utils.modality
import org.jetbrains.kotlin.fir.declarations.utils.superConeTypes
import org.jetbrains.kotlin.fir.java.declarations.*
import org.jetbrains.kotlin.fir.java.declarations.FirJavaClass
import org.jetbrains.kotlin.fir.java.declarations.buildJavaMethodCopy
import org.jetbrains.kotlin.fir.java.declarations.buildJavaValueParameterCopy
import org.jetbrains.kotlin.fir.java.toConeKotlinTypeProbablyFlexible
import org.jetbrains.kotlin.fir.resolve.toSymbol
import org.jetbrains.kotlin.fir.scopes.*
@@ -385,11 +387,11 @@ class JavaClassUseSiteMemberScope(
}
}
private fun FirFunction<*>.computeJvmSignature(): String? {
private fun FirFunction.computeJvmSignature(): String? {
return computeJvmSignature { it.toConeKotlinTypeProbablyFlexible(session, typeParameterStack) }
}
private fun FirFunction<*>.computeJvmDescriptor(customName: String? = null, includeReturnType: Boolean = false): String {
private fun FirFunction.computeJvmDescriptor(customName: String? = null, includeReturnType: Boolean = false): String {
return computeJvmDescriptor(customName, includeReturnType) {
it.toConeKotlinTypeProbablyFlexible(
session,
@@ -7,7 +7,10 @@ package org.jetbrains.kotlin.fir.java.scopes
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.FirCallableMemberDeclaration
import org.jetbrains.kotlin.fir.declarations.FirProperty
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRef
import org.jetbrains.kotlin.fir.declarations.utils.isStatic
import org.jetbrains.kotlin.fir.declarations.utils.modality
import org.jetbrains.kotlin.fir.java.JavaTypeParameterStack
@@ -17,9 +20,9 @@ import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
import org.jetbrains.kotlin.fir.resolve.substitution.substitutorByMap
import org.jetbrains.kotlin.fir.scopes.impl.FirAbstractOverrideChecker
import org.jetbrains.kotlin.name.StandardClassIds
import org.jetbrains.kotlin.fir.typeContext
import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.name.StandardClassIds
class JavaOverrideChecker internal constructor(
private val session: FirSession,
@@ -98,7 +101,7 @@ class JavaOverrideChecker internal constructor(
argument is ConeKotlinTypeProjection && argument.type.isTypeParameterDependent()
}
private fun FirCallableMemberDeclaration<*>.isTypeParameterDependent(): Boolean =
private fun FirCallableMemberDeclaration.isTypeParameterDependent(): Boolean =
typeParameters.isNotEmpty() || returnTypeRef.isTypeParameterDependent() ||
receiverTypeRef.isTypeParameterDependent() ||
this is FirSimpleFunction && valueParameters.any { it.returnTypeRef.isTypeParameterDependent() }
@@ -124,7 +127,7 @@ class JavaOverrideChecker internal constructor(
}
}
private fun FirCallableMemberDeclaration<*>.extractTypeParametersTo(result: MutableCollection<FirTypeParameterRef>) {
private fun FirCallableMemberDeclaration.extractTypeParametersTo(result: MutableCollection<FirTypeParameterRef>) {
result += typeParameters
returnTypeRef.extractTypeParametersTo(result)
receiverTypeRef?.extractTypeParametersTo(result)
@@ -134,8 +137,8 @@ class JavaOverrideChecker internal constructor(
}
override fun buildTypeParametersSubstitutorIfCompatible(
overrideCandidate: FirCallableMemberDeclaration<*>,
baseDeclaration: FirCallableMemberDeclaration<*>
overrideCandidate: FirCallableMemberDeclaration,
baseDeclaration: FirCallableMemberDeclaration
): ConeSubstitutor {
if (!overrideCandidate.isTypeParameterDependent() && !baseDeclaration.isTypeParameterDependent()) {
return ConeSubstitutor.Empty
@@ -159,7 +162,7 @@ class JavaOverrideChecker internal constructor(
}
}
override fun isOverriddenProperty(overrideCandidate: FirCallableMemberDeclaration<*>, baseDeclaration: FirProperty): Boolean {
override fun isOverriddenProperty(overrideCandidate: FirCallableMemberDeclaration, baseDeclaration: FirProperty): Boolean {
if (baseDeclaration.modality == Modality.FINAL) return false
val receiverTypeRef = baseDeclaration.receiverTypeRef
return when (overrideCandidate) {