[FIR IDE] Add base support for FIR incomplete types resolve
This commit is contained in:
+11
-1
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.fir.realPsi
|
||||
import org.jetbrains.kotlin.fir.references.*
|
||||
import org.jetbrains.kotlin.fir.types.FirErrorTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.FirUserTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl
|
||||
@@ -68,9 +69,18 @@ internal open class FirElementsRecorder : FirVisitor<Unit, MutableMap<KtElement,
|
||||
override fun visitBackingFieldReference(backingFieldReference: FirBackingFieldReference, data: MutableMap<KtElement, FirElement>) {}
|
||||
override fun visitSuperReference(superReference: FirSuperReference, data: MutableMap<KtElement, FirElement>) {}
|
||||
override fun visitThisReference(thisReference: FirThisReference, data: MutableMap<KtElement, FirElement>) {}
|
||||
override fun visitErrorTypeRef(errorTypeRef: FirErrorTypeRef, data: MutableMap<KtElement, FirElement>) {}
|
||||
//@formatter:on
|
||||
|
||||
override fun visitErrorTypeRef(errorTypeRef: FirErrorTypeRef, data: MutableMap<KtElement, FirElement>) {
|
||||
super.visitResolvedTypeRef(errorTypeRef, data)
|
||||
errorTypeRef.delegatedTypeRef?.accept(this, data)
|
||||
}
|
||||
|
||||
override fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: MutableMap<KtElement, FirElement>) {
|
||||
super.visitResolvedTypeRef(resolvedTypeRef, data)
|
||||
resolvedTypeRef.delegatedTypeRef?.accept(this, data)
|
||||
}
|
||||
|
||||
override fun visitUserTypeRef(userTypeRef: FirUserTypeRef, data: MutableMap<KtElement, FirElement>) {
|
||||
userTypeRef.acceptChildren(this, data)
|
||||
}
|
||||
|
||||
+5
-2
@@ -388,8 +388,11 @@ internal object FirReferenceResolveHelper {
|
||||
): ClassId? {
|
||||
val qualifierToResolve = qualifier.parent as KtUserType
|
||||
// FIXME make it work with generics in functional types (like () -> AA.BB<CC, AA.DD>)
|
||||
val wholeType =
|
||||
(wholeTypeFir.psi as KtTypeReference).typeElement?.unwrapNullable() as? KtUserType ?: return null
|
||||
val wholeType = when (val psi = wholeTypeFir.psi) {
|
||||
is KtUserType -> psi
|
||||
is KtTypeReference -> psi.typeElement?.unwrapNullable() as? KtUserType
|
||||
else -> null
|
||||
} ?: return null
|
||||
|
||||
val qualifiersToDrop = countQualifiersToDrop(wholeType, qualifierToResolve)
|
||||
return wholeTypeFir.type.classId?.dropLastNestedClasses(qualifiersToDrop)
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
// IGNORE_FIR
|
||||
val v: UnknownClass<<caret>String>
|
||||
|
||||
// REF: (kotlin).String
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
// IGNORE_FIR
|
||||
val v: UnknownClass<<caret>String>()
|
||||
|
||||
// REF: (kotlin).String
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
// IGNORE_FIR
|
||||
class Foo<T, V>
|
||||
|
||||
class Bar: Foo<<caret>String
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
// IGNORE_FIR
|
||||
|
||||
package foo
|
||||
|
||||
class A
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
// IGNORE_FIR
|
||||
|
||||
package foo
|
||||
|
||||
class A
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
// IGNORE_FIR
|
||||
package foo
|
||||
|
||||
class A
|
||||
|
||||
Reference in New Issue
Block a user