[FIR] Add aliasSource to FirImport, FirImportImpl
This commit is contained in:
+11
-3
@@ -169,10 +169,10 @@ class DeclarationsConverter(
|
||||
}
|
||||
}
|
||||
|
||||
private fun convertImportAlias(importAlias: LighterASTNode): String? {
|
||||
private fun convertImportAlias(importAlias: LighterASTNode): Pair<String, FirSourceElement>? {
|
||||
importAlias.forEachChildren {
|
||||
when (it.tokenType) {
|
||||
IDENTIFIER -> return it.asText
|
||||
IDENTIFIER -> return Pair(it.asText, it.toFirSourceElement())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -186,11 +186,18 @@ class DeclarationsConverter(
|
||||
var importedFqName: FqName? = null
|
||||
var isAllUnder = false
|
||||
var aliasName: String? = null
|
||||
var aliasSource: FirSourceElement? = null
|
||||
importDirective.forEachChildren {
|
||||
when (it.tokenType) {
|
||||
DOT_QUALIFIED_EXPRESSION, REFERENCE_EXPRESSION -> importedFqName = FqName(it.asText)
|
||||
MUL -> isAllUnder = true
|
||||
IMPORT_ALIAS -> aliasName = convertImportAlias(it)
|
||||
IMPORT_ALIAS -> {
|
||||
val importAlias = convertImportAlias(it)
|
||||
if (importAlias != null) {
|
||||
aliasName = importAlias.first
|
||||
aliasSource = importAlias.second
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -199,6 +206,7 @@ class DeclarationsConverter(
|
||||
this.importedFqName = importedFqName
|
||||
this.isAllUnder = isAllUnder
|
||||
this.aliasName = aliasName?.let { Name.identifier(it) }
|
||||
this.aliasSource = aliasSource
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -810,6 +810,7 @@ open class RawFirBuilder(
|
||||
importedFqName = importDirective.importedFqName
|
||||
isAllUnder = importDirective.isAllUnder
|
||||
aliasName = importDirective.aliasName?.let { Name.identifier(it) }
|
||||
aliasSource = importDirective.alias?.nameIdentifier?.toFirSourceElement()
|
||||
}
|
||||
}
|
||||
for (declaration in file.declarations) {
|
||||
|
||||
@@ -24,6 +24,7 @@ abstract class FirErrorImport : FirPureAbstractElement(), FirImport, FirDiagnost
|
||||
abstract override val importedFqName: FqName?
|
||||
abstract override val isAllUnder: Boolean
|
||||
abstract override val aliasName: Name?
|
||||
abstract override val aliasSource: FirSourceElement?
|
||||
abstract override val diagnostic: ConeDiagnostic
|
||||
abstract val delegate: FirImport
|
||||
|
||||
|
||||
@@ -21,6 +21,7 @@ interface FirImport : FirElement {
|
||||
val importedFqName: FqName?
|
||||
val isAllUnder: Boolean
|
||||
val aliasName: Name?
|
||||
val aliasSource: FirSourceElement?
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitImport(this, data)
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ abstract class FirResolvedImport : FirPureAbstractElement(), FirImport {
|
||||
abstract override val importedFqName: FqName?
|
||||
abstract override val isAllUnder: Boolean
|
||||
abstract override val aliasName: Name?
|
||||
abstract override val aliasSource: FirSourceElement?
|
||||
abstract val delegate: FirImport
|
||||
abstract val packageFqName: FqName
|
||||
abstract val relativeClassName: FqName?
|
||||
|
||||
+3
@@ -23,15 +23,18 @@ import org.jetbrains.kotlin.name.Name
|
||||
|
||||
@FirBuilderDsl
|
||||
class FirErrorImportBuilder {
|
||||
var aliasSource: FirSourceElement? = null
|
||||
lateinit var diagnostic: ConeDiagnostic
|
||||
lateinit var delegate: FirImport
|
||||
|
||||
fun build(): FirErrorImport {
|
||||
return FirErrorImportImpl(
|
||||
aliasSource,
|
||||
diagnostic,
|
||||
delegate,
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalContracts::class)
|
||||
|
||||
+2
@@ -26,6 +26,7 @@ class FirImportBuilder {
|
||||
var importedFqName: FqName? = null
|
||||
var isAllUnder: Boolean by kotlin.properties.Delegates.notNull<Boolean>()
|
||||
var aliasName: Name? = null
|
||||
var aliasSource: FirSourceElement? = null
|
||||
|
||||
fun build(): FirImport {
|
||||
return FirImportImpl(
|
||||
@@ -33,6 +34,7 @@ class FirImportBuilder {
|
||||
importedFqName,
|
||||
isAllUnder,
|
||||
aliasName,
|
||||
aliasSource,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.fir.visitors.*
|
||||
*/
|
||||
|
||||
internal class FirErrorImportImpl(
|
||||
override val aliasSource: FirSourceElement?,
|
||||
override val diagnostic: ConeDiagnostic,
|
||||
override var delegate: FirImport,
|
||||
) : FirErrorImport() {
|
||||
|
||||
@@ -22,6 +22,7 @@ internal class FirImportImpl(
|
||||
override val importedFqName: FqName?,
|
||||
override val isAllUnder: Boolean,
|
||||
override val aliasName: Name?,
|
||||
override val aliasSource: FirSourceElement?,
|
||||
) : FirPureAbstractElement(), FirImport {
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
|
||||
|
||||
|
||||
+1
@@ -27,6 +27,7 @@ internal class FirResolvedImportImpl(
|
||||
override val importedFqName: FqName? get() = delegate.importedFqName
|
||||
override val isAllUnder: Boolean get() = delegate.isAllUnder
|
||||
override val aliasName: Name? get() = delegate.aliasName
|
||||
override val aliasSource: FirSourceElement? get() = delegate.aliasSource
|
||||
override val resolvedClassId: ClassId? get() = relativeClassName?.let { ClassId(packageFqName, it, false) }
|
||||
override val importedName: Name? get() = importedFqName?.shortName()
|
||||
|
||||
|
||||
+1
-1
@@ -45,7 +45,7 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
|
||||
impl(import)
|
||||
|
||||
impl(resolvedImport) {
|
||||
delegateFields(listOf("aliasName", "importedFqName", "isAllUnder"), "delegate")
|
||||
delegateFields(listOf("aliasName", "aliasSource", "importedFqName", "isAllUnder"), "delegate")
|
||||
|
||||
default("source") {
|
||||
delegate = "delegate"
|
||||
|
||||
+1
@@ -407,6 +407,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
+field("importedFqName", fqNameType, nullable = true)
|
||||
+booleanField("isAllUnder")
|
||||
+field("aliasName", nameType, nullable = true)
|
||||
+field("aliasSource", sourceElementType, nullable = true)
|
||||
}
|
||||
|
||||
resolvedImport.configure {
|
||||
|
||||
Reference in New Issue
Block a user