[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
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.fir.serialization
import org.jetbrains.kotlin.contracts.description.*
import org.jetbrains.kotlin.contracts.description.EventOccurrencesRange
import org.jetbrains.kotlin.fir.contracts.FirContractDescription
import org.jetbrains.kotlin.fir.contracts.description.*
import org.jetbrains.kotlin.fir.contracts.effects
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.metadata.deserialization.Flags
class FirContractSerializer {
fun serializeContractOfFunctionIfAny(
function: FirFunction<*>,
function: FirFunction,
proto: ProtoBuf.Function.Builder,
parentSerializer: FirElementSerializer
) {
@@ -15,13 +15,13 @@ interface FirElementAwareStringTable : StringTable {
fun getQualifiedClassNameIndex(classId: ClassId): Int =
getQualifiedClassNameIndex(classId.asString(), classId.isLocal)
fun getFqNameIndex(classLikeDeclaration: FirClassLikeDeclaration<*>): Int {
fun getFqNameIndex(classLikeDeclaration: FirClassLikeDeclaration): Int {
val classId = classLikeDeclaration.symbol.classId.takeIf { !it.isLocal }
?: getLocalClassIdReplacement(classLikeDeclaration as FirClass<*>)
?: getLocalClassIdReplacement(classLikeDeclaration as FirClass)
?: throw IllegalStateException("Cannot get FQ name of local class: ${classLikeDeclaration.render()}")
return getQualifiedClassNameIndex(classId)
}
fun getLocalClassIdReplacement(firClass: FirClass<*>): ClassId? = null
fun getLocalClassIdReplacement(firClass: FirClass): ClassId? = null
}
@@ -60,7 +60,7 @@ import org.jetbrains.kotlin.types.TypeApproximatorConfiguration
class FirElementSerializer private constructor(
private val session: FirSession,
private val scopeSession: ScopeSession,
private val containingDeclaration: FirDeclaration<*>?,
private val containingDeclaration: FirDeclaration?,
private val typeParameters: Interner<FirTypeParameter>,
private val extension: FirSerializerExtension,
private val typeTable: MutableTypeTable,
@@ -96,7 +96,7 @@ class FirElementSerializer private constructor(
return builder
}
fun classProto(klass: FirClass<*>): ProtoBuf.Class.Builder {
fun classProto(klass: FirClass): ProtoBuf.Class.Builder {
val builder = ProtoBuf.Class.newBuilder()
val regularClass = klass as? FirRegularClass
@@ -156,7 +156,7 @@ class FirElementSerializer private constructor(
}
}
val nestedClassifiers = klass.declarations.filterIsInstance<FirClassLikeDeclaration<*>>()
val nestedClassifiers = klass.declarations.filterIsInstance<FirClassLikeDeclaration>()
for (nestedClassifier in nestedClassifiers) {
if (nestedClassifier is FirTypeAlias) {
typeAliasProto(nestedClassifier)?.let { builder.addTypeAlias(it) }
@@ -218,13 +218,13 @@ class FirElementSerializer private constructor(
}
@OptIn(ExperimentalStdlibApi::class)
private fun FirClass<*>.declarations(): List<FirCallableMemberDeclaration<*>> = buildList {
private fun FirClass.declarations(): List<FirCallableMemberDeclaration> = buildList {
val memberScope =
defaultType().scope(session, scopeSession, FakeOverrideTypeCalculator.DoNothing)
?: error("Null scope for $this")
fun addDeclarationIfNeeded(symbol: FirCallableSymbol<*>) {
val declaration = symbol.fir as? FirCallableMemberDeclaration<*> ?: return
val declaration = symbol.fir as? FirCallableMemberDeclaration ?: return
if (declaration.isIntersectionOverride) {
// This part is a kind of hack for case like
//
@@ -259,7 +259,7 @@ class FirElementSerializer private constructor(
memberScope.processAllProperties(::addDeclarationIfNeeded)
for (declaration in declarations) {
if (declaration is FirCallableMemberDeclaration<*> && declaration.isStatic) {
if (declaration is FirCallableMemberDeclaration && declaration.isStatic) {
add(declaration)
}
}
@@ -375,7 +375,7 @@ class FirElementSerializer private constructor(
return builder
}
fun functionProto(function: FirFunction<*>): ProtoBuf.Function.Builder? {
fun functionProto(function: FirFunction): ProtoBuf.Function.Builder? {
if (!extension.shouldSerializeFunction(function)) return null
val builder = ProtoBuf.Function.newBuilder()
@@ -822,7 +822,7 @@ class FirElementSerializer private constructor(
)
}
private fun createChildSerializer(declaration: FirDeclaration<*>): FirElementSerializer =
private fun createChildSerializer(declaration: FirDeclaration): FirElementSerializer =
FirElementSerializer(
session, scopeSession, declaration, Interner(typeParameters), extension,
typeTable, versionRequirementTable, serializeTypeTableToFunction = false,
@@ -834,18 +834,18 @@ class FirElementSerializer private constructor(
private fun useTypeTable(): Boolean = extension.shouldUseTypeTable()
private fun FirDeclaration<*>.hasInlineClassTypesInSignature(): Boolean {
private fun FirDeclaration.hasInlineClassTypesInSignature(): Boolean {
// TODO
return false
}
private fun FirCallableDeclaration<*>.isSuspendOrHasSuspendTypesInSignature(): Boolean {
private fun FirCallableDeclaration.isSuspendOrHasSuspendTypesInSignature(): Boolean {
// TODO (types in signature)
return this is FirCallableMemberDeclaration<*> && this.isSuspend
return this is FirCallableMemberDeclaration && this.isSuspend
}
private fun writeVersionRequirementForInlineClasses(
klass: FirClass<*>,
klass: FirClass,
builder: ProtoBuf.Class.Builder,
versionRequirementTable: MutableVersionRequirementTable
) {
@@ -937,7 +937,7 @@ class FirElementSerializer private constructor(
return declaration.visibility.normalize()
}
private fun getClassifierId(declaration: FirClassLikeDeclaration<*>): Int =
private fun getClassifierId(declaration: FirClassLikeDeclaration): Int =
stringTable.getFqNameIndex(declaration)
private fun getClassifierId(classId: ClassId): Int =
@@ -982,7 +982,7 @@ class FirElementSerializer private constructor(
fun create(
session: FirSession,
scopeSession: ScopeSession,
klass: FirClass<*>,
klass: FirClass,
extension: FirSerializerExtension,
parentSerializer: FirElementSerializer?,
typeApproximator: AbstractTypeApproximator,
@@ -28,14 +28,14 @@ abstract class FirSerializerExtension {
open fun shouldSerializeTypeAlias(typeAlias: FirTypeAlias): Boolean = true
open fun shouldUseTypeTable(): Boolean = false
open fun shouldUseNormalizedVisibility(): Boolean = false
open fun shouldSerializeFunction(function: FirFunction<*>): Boolean = false
open fun shouldSerializeFunction(function: FirFunction): Boolean = false
open fun shouldSerializeProperty(property: FirProperty): Boolean = false
open fun serializePackage(packageFqName: FqName, proto: ProtoBuf.Package.Builder) {
}
open fun serializeClass(
klass: FirClass<*>,
klass: FirClass,
proto: ProtoBuf.Class.Builder,
versionRequirementTable: MutableVersionRequirementTable,
childSerializer: FirElementSerializer
@@ -50,7 +50,7 @@ abstract class FirSerializerExtension {
}
open fun serializeFunction(
function: FirFunction<*>,
function: FirFunction,
proto: ProtoBuf.Function.Builder,
versionRequirementTable: MutableVersionRequirementTable?,
childSerializer: FirElementSerializer
@@ -91,7 +91,7 @@ abstract class FirSerializerExtension {
get() = null
interface ClassMembersProducer {
fun getCallableMembers(klass: FirClass<*>): Collection<FirCallableMemberDeclaration<*>>
fun getCallableMembers(klass: FirClass): Collection<FirCallableMemberDeclaration>
}
}
}