FIR: implement qualifier resolver
This commit is contained in:
committed by
Mikhail Glukhikh
parent
d3cc0e6ce9
commit
cef108a5ae
@@ -930,4 +930,15 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
||||
uncheckedNotNullCast.expression.accept(this)
|
||||
print("!")
|
||||
}
|
||||
|
||||
override fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier) {
|
||||
print("Q|")
|
||||
val classId = resolvedQualifier.classId
|
||||
if (classId != null) {
|
||||
print(classId.asString())
|
||||
} else {
|
||||
print(resolvedQualifier.packageFqName.asString().replace(".", "/"))
|
||||
}
|
||||
print("|")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
/*
|
||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.fir.expressions
|
||||
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
|
||||
interface FirResolvedQualifier : FirExpression {
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitResolvedQualifier(this, data)
|
||||
|
||||
val packageFqName: FqName
|
||||
val relativeClassFqName: FqName?
|
||||
val classId
|
||||
get() = relativeClassFqName?.let {
|
||||
ClassId(packageFqName, it, false)
|
||||
}
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.fir.expressions.impl
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
|
||||
class FirResolvedQualifierImpl(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
override val packageFqName: FqName,
|
||||
override val relativeClassFqName: FqName?
|
||||
) : FirResolvedQualifier, FirAbstractExpression(session, psi) {
|
||||
constructor(session: FirSession, psi: PsiElement?, classId: ClassId) : this(
|
||||
session,
|
||||
psi,
|
||||
classId.packageFqName,
|
||||
classId.relativeClassName
|
||||
)
|
||||
}
|
||||
+8
@@ -268,6 +268,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformJump(returnExpression, data)
|
||||
}
|
||||
|
||||
open fun transformResolvedQualifier(resolvedQualifier: FirResolvedQualifier, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformExpression(resolvedQualifier, data)
|
||||
}
|
||||
|
||||
open fun transformThrowExpression(throwExpression: FirThrowExpression, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformExpression(throwExpression, data)
|
||||
}
|
||||
@@ -664,6 +668,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformResolvedImport(resolvedImport, data)
|
||||
}
|
||||
|
||||
final override fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier, data: D): CompositeTransformResult<FirElement> {
|
||||
return transformResolvedQualifier(resolvedQualifier, data)
|
||||
}
|
||||
|
||||
final override fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: D): CompositeTransformResult<FirElement> {
|
||||
return transformResolvedTypeRef(resolvedTypeRef, data)
|
||||
}
|
||||
|
||||
@@ -268,6 +268,10 @@ abstract class FirVisitor<out R, in D> {
|
||||
return visitJump(returnExpression, data)
|
||||
}
|
||||
|
||||
open fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier, data: D): R {
|
||||
return visitExpression(resolvedQualifier, data)
|
||||
}
|
||||
|
||||
open fun visitThrowExpression(throwExpression: FirThrowExpression, data: D): R {
|
||||
return visitExpression(throwExpression, data)
|
||||
}
|
||||
|
||||
+8
@@ -268,6 +268,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitJump(returnExpression, null)
|
||||
}
|
||||
|
||||
open fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier) {
|
||||
visitExpression(resolvedQualifier, null)
|
||||
}
|
||||
|
||||
open fun visitThrowExpression(throwExpression: FirThrowExpression) {
|
||||
visitExpression(throwExpression, null)
|
||||
}
|
||||
@@ -664,6 +668,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitResolvedImport(resolvedImport)
|
||||
}
|
||||
|
||||
final override fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier, data: Nothing?) {
|
||||
visitResolvedQualifier(resolvedQualifier)
|
||||
}
|
||||
|
||||
final override fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: Nothing?) {
|
||||
visitResolvedTypeRef(resolvedTypeRef)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user