FIR: Proper self-type for constructor return type
This commit is contained in:
@@ -411,10 +411,27 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
|
|||||||
return firFile
|
return firFile
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun KtClassOrObject.toDelegatedSelfType(): FirTypeRef =
|
private fun KtClassOrObject.toDelegatedSelfType(firClass: FirRegularClass): FirTypeRef {
|
||||||
FirUserTypeRefImpl(session, this, isMarkedNullable = false).apply {
|
return FirResolvedTypeRefImpl(
|
||||||
|
session,
|
||||||
|
this,
|
||||||
|
ConeClassTypeImpl(
|
||||||
|
firClass.symbol.toLookupTag(),
|
||||||
|
firClass.typeParameters.map { ConeTypeParameterTypeImpl(it.symbol, false) }.toTypedArray(),
|
||||||
|
false
|
||||||
|
),
|
||||||
|
isMarkedNullable = false,
|
||||||
|
annotations = emptyList()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated("TODO, proper type")
|
||||||
|
private fun KtObjectDeclaration.toDelegatedSelfType(): FirTypeRef {
|
||||||
|
return FirUserTypeRefImpl(session, this, isMarkedNullable = false).apply {
|
||||||
qualifier.add(FirQualifierPartImpl(nameAsSafeName))
|
qualifier.add(FirQualifierPartImpl(nameAsSafeName))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
override fun visitEnumEntry(enumEntry: KtEnumEntry, data: Unit): FirElement {
|
override fun visitEnumEntry(enumEntry: KtEnumEntry, data: Unit): FirElement {
|
||||||
return withChildClassName(enumEntry.nameAsSafeName) {
|
return withChildClassName(enumEntry.nameAsSafeName) {
|
||||||
@@ -425,7 +442,7 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
|
|||||||
enumEntry.nameAsSafeName
|
enumEntry.nameAsSafeName
|
||||||
)
|
)
|
||||||
enumEntry.extractAnnotationsTo(firEnumEntry)
|
enumEntry.extractAnnotationsTo(firEnumEntry)
|
||||||
val delegatedSelfType = enumEntry.toDelegatedSelfType()
|
val delegatedSelfType = enumEntry.toDelegatedSelfType(firEnumEntry)
|
||||||
val delegatedSuperType = enumEntry.extractSuperTypeListEntriesTo(firEnumEntry, delegatedSelfType)
|
val delegatedSuperType = enumEntry.extractSuperTypeListEntriesTo(firEnumEntry, delegatedSelfType)
|
||||||
for (declaration in enumEntry.declarations) {
|
for (declaration in enumEntry.declarations) {
|
||||||
firEnumEntry.declarations += declaration.toFirDeclaration(
|
firEnumEntry.declarations += declaration.toFirDeclaration(
|
||||||
@@ -488,7 +505,7 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
|
|||||||
)
|
)
|
||||||
classOrObject.extractAnnotationsTo(firClass)
|
classOrObject.extractAnnotationsTo(firClass)
|
||||||
classOrObject.extractTypeParametersTo(firClass)
|
classOrObject.extractTypeParametersTo(firClass)
|
||||||
val delegatedSelfType = classOrObject.toDelegatedSelfType()
|
val delegatedSelfType = classOrObject.toDelegatedSelfType(firClass)
|
||||||
val delegatedSuperType = classOrObject.extractSuperTypeListEntriesTo(firClass, delegatedSelfType)
|
val delegatedSuperType = classOrObject.extractSuperTypeListEntriesTo(firClass, delegatedSelfType)
|
||||||
classOrObject.primaryConstructor?.valueParameters?.forEach {
|
classOrObject.primaryConstructor?.valueParameters?.forEach {
|
||||||
if (it.hasValOrVar()) {
|
if (it.hasValOrVar()) {
|
||||||
|
|||||||
Reference in New Issue
Block a user