FIR: partial function type resolve + some rendering fixes

This commit is contained in:
Mikhail Glukhikh
2018-03-23 16:30:20 +03:00
parent 29ee4371d0
commit cce741eef8
9 changed files with 40 additions and 8 deletions
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.name.FqName
open class FirTypeResolveTransformer : FirTransformer<Nothing?>() {
override fun <E : FirElement> transformElement(element: E, data: Nothing?): CompositeTransformResult<E> {
@Suppress("UNCHECKED_CAST")
return (element.transformChildren(this, data) as E).compose()
}
@@ -112,6 +113,10 @@ open class FirTypeResolveTransformer : FirTransformer<Nothing?>() {
return transformType(type, typeResolver.resolveType(type, scope, position = FirPosition.OTHER))
}
override fun transformFunctionType(functionType: FirFunctionType, data: Nothing?): CompositeTransformResult<FirType> {
return (functionType.transformChildren(this, data) as FirType).compose()
}
private fun transformType(type: FirType, resolvedType: ConeKotlinType): CompositeTransformResult<FirType> {
return FirResolvedTypeImpl(
type.session,
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.fir.symbols.ConeSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
import org.jetbrains.kotlin.name.SpecialNames
import org.jetbrains.kotlin.types.Variance
import org.jetbrains.kotlin.utils.Printer
@@ -92,6 +93,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
visitMemberDeclaration(callableMember)
val receiverType = callableMember.receiverType
if (receiverType != null) {
print(" ")
receiverType.accept(this)
print(".")
}
@@ -324,7 +326,9 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
if (valueParameter.isVararg) {
print("vararg ")
}
print(valueParameter.name.toString() + ": ")
if (valueParameter.name != SpecialNames.NO_NAME_PROVIDED) {
print(valueParameter.name.toString() + ": ")
}
valueParameter.returnType.accept(this)
valueParameter.defaultValue?.let {
print(" = ")
@@ -399,7 +403,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
print(".")
}
functionType.valueParameters.renderParameters()
print(": ")
print(" -> ")
functionType.returnType.accept(this)
print(" )")
visitTypeWithNullability(functionType)