FIR: don't count implicit built-in type as a kind of implicit type

Before this commit, implicit Unit type for function with body and
without type, implicit Boolean type for conditions etc. were 'implicit'
types and resolved types together.
Sometimes this could lead to hard-to-find issues in FIR resolve, because
'implicit' types are usually handled there as 'necessary to resolve'
which is wrong for such effectively-resolved types.
This commit is contained in:
Mikhail Glukhikh
2019-06-19 14:40:36 +03:00
parent 2efbc6e914
commit ac730a693a
3 changed files with 12 additions and 13 deletions
@@ -710,7 +710,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
}
override fun visitImplicitTypeRef(implicitTypeRef: FirImplicitTypeRef) {
print(if (implicitTypeRef is FirImplicitBuiltinTypeRef) "${implicitTypeRef.id}" else "<implicit>")
print("<implicit>")
}
override fun visitTypeRefWithNullability(typeRefWithNullability: FirTypeRefWithNullability) {
@@ -740,10 +740,14 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
override fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef) {
resolvedTypeRef.annotations.renderAnnotations()
print("R|")
if (resolvedTypeRef !is FirImplicitBuiltinTypeRef) {
print("R|")
}
val coneType = resolvedTypeRef.type
print(coneType.render())
print("|")
if (resolvedTypeRef !is FirImplicitBuiltinTypeRef) {
print("|")
}
if (coneType !is ConeKotlinErrorType && coneType !is ConeClassErrorType) {
print(coneType.nullability.suffix)
}
@@ -11,23 +11,18 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTagImpl
import org.jetbrains.kotlin.fir.symbols.StandardClassIds
import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.name.ClassId
sealed class FirImplicitBuiltinTypeRef(
override val session: FirSession,
override val psi: PsiElement?,
val id: ClassId
) : FirImplicitTypeRef, FirResolvedTypeRef {
) : FirResolvedTypeRef {
override val annotations: List<FirAnnotationCall>
get() = emptyList()
override val type: ConeKotlinType = ConeClassTypeImpl(ConeClassLikeLookupTagImpl(id), emptyArray(), false)
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitImplicitTypeRef(this, data)
}
class FirImplicitUnitTypeRef(