FIR: introduce package directive
The package directive is needed for KtElement -> FirElement mapping in IDE. There should be some FirElement which will be result of mapping of elements inside KtPackageDirective.
This commit is contained in:
committed by
TeamCityServer
parent
bf40c07cc3
commit
51576c70b6
+1
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.fir.declarations.utils.isInner
|
|||||||
import org.jetbrains.kotlin.fir.declarations.utils.isLocal
|
import org.jetbrains.kotlin.fir.declarations.utils.isLocal
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||||
import org.jetbrains.kotlin.fir.expressions.argumentMapping
|
import org.jetbrains.kotlin.fir.expressions.argumentMapping
|
||||||
|
import org.jetbrains.kotlin.fir.packageFqName
|
||||||
import org.jetbrains.kotlin.fir.resolve.fqName
|
import org.jetbrains.kotlin.fir.resolve.fqName
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.StandardClassIds
|
import org.jetbrains.kotlin.name.StandardClassIds
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.declarations.utils.isLocal
|
|||||||
import org.jetbrains.kotlin.fir.declarations.utils.isSynthetic
|
import org.jetbrains.kotlin.fir.declarations.utils.isSynthetic
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.primaryConstructor
|
import org.jetbrains.kotlin.fir.declarations.utils.primaryConstructor
|
||||||
import org.jetbrains.kotlin.fir.descriptors.FirModuleDescriptor
|
import org.jetbrains.kotlin.fir.descriptors.FirModuleDescriptor
|
||||||
|
import org.jetbrains.kotlin.fir.packageFqName
|
||||||
import org.jetbrains.kotlin.fir.psi
|
import org.jetbrains.kotlin.fir.psi
|
||||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
import org.jetbrains.kotlin.fir.signaturer.FirMangler
|
import org.jetbrains.kotlin.fir.signaturer.FirMangler
|
||||||
|
|||||||
@@ -7,12 +7,9 @@ package org.jetbrains.kotlin.fir.java
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.descriptors.java.JavaVisibilities
|
import org.jetbrains.kotlin.descriptors.java.JavaVisibilities
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.*
|
||||||
import org.jetbrains.kotlin.fir.FirVisibilityChecker
|
|
||||||
import org.jetbrains.kotlin.fir.NoMutableState
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
import org.jetbrains.kotlin.fir.getOwnerId
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.ReceiverValue
|
import org.jetbrains.kotlin.fir.resolve.calls.ReceiverValue
|
||||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||||
|
|
||||||
|
|||||||
+10
-4
@@ -90,10 +90,13 @@ class DeclarationsConverter(
|
|||||||
val importList = mutableListOf<FirImport>()
|
val importList = mutableListOf<FirImport>()
|
||||||
val firDeclarationList = mutableListOf<FirDeclaration>()
|
val firDeclarationList = mutableListOf<FirDeclaration>()
|
||||||
context.packageFqName = FqName.ROOT
|
context.packageFqName = FqName.ROOT
|
||||||
|
var packageDirective: FirPackageDirective? = null
|
||||||
file.forEachChildren {
|
file.forEachChildren {
|
||||||
when (it.tokenType) {
|
when (it.tokenType) {
|
||||||
FILE_ANNOTATION_LIST -> fileAnnotationList += convertFileAnnotationList(it)
|
FILE_ANNOTATION_LIST -> fileAnnotationList += convertFileAnnotationList(it)
|
||||||
PACKAGE_DIRECTIVE -> context.packageFqName = convertPackageName(it)
|
PACKAGE_DIRECTIVE -> {
|
||||||
|
packageDirective = convertPackageDirective(it).also { context.packageFqName = it.packageFqName }
|
||||||
|
}
|
||||||
IMPORT_LIST -> importList += convertImportDirectives(it)
|
IMPORT_LIST -> importList += convertImportDirectives(it)
|
||||||
CLASS -> firDeclarationList += convertClass(it)
|
CLASS -> firDeclarationList += convertClass(it)
|
||||||
FUN -> firDeclarationList += convertFunctionDeclaration(it) as FirDeclaration
|
FUN -> firDeclarationList += convertFunctionDeclaration(it) as FirDeclaration
|
||||||
@@ -108,7 +111,7 @@ class DeclarationsConverter(
|
|||||||
origin = FirDeclarationOrigin.Source
|
origin = FirDeclarationOrigin.Source
|
||||||
moduleData = baseModuleData
|
moduleData = baseModuleData
|
||||||
name = fileName
|
name = fileName
|
||||||
packageFqName = context.packageFqName
|
this.packageDirective = packageDirective ?: buildPackageDirective { packageFqName = context.packageFqName }
|
||||||
annotations += fileAnnotationList
|
annotations += fileAnnotationList
|
||||||
imports += importList
|
imports += importList
|
||||||
declarations += firDeclarationList
|
declarations += firDeclarationList
|
||||||
@@ -151,7 +154,7 @@ class DeclarationsConverter(
|
|||||||
/**
|
/**
|
||||||
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parsePackageName
|
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parsePackageName
|
||||||
*/
|
*/
|
||||||
private fun convertPackageName(packageNode: LighterASTNode): FqName {
|
private fun convertPackageDirective(packageNode: LighterASTNode): FirPackageDirective {
|
||||||
var packageName: FqName = FqName.ROOT
|
var packageName: FqName = FqName.ROOT
|
||||||
packageNode.forEachChildren {
|
packageNode.forEachChildren {
|
||||||
when (it.tokenType) {
|
when (it.tokenType) {
|
||||||
@@ -159,7 +162,10 @@ class DeclarationsConverter(
|
|||||||
DOT_QUALIFIED_EXPRESSION, REFERENCE_EXPRESSION -> packageName = FqName(it.getAsStringWithoutBacktick())
|
DOT_QUALIFIED_EXPRESSION, REFERENCE_EXPRESSION -> packageName = FqName(it.getAsStringWithoutBacktick())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return packageName
|
return buildPackageDirective {
|
||||||
|
packageFqName = packageName
|
||||||
|
source = packageNode.toFirSourceElement()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun convertImportAlias(importAlias: LighterASTNode): String? {
|
private fun convertImportAlias(importAlias: LighterASTNode): String? {
|
||||||
|
|||||||
@@ -740,7 +740,10 @@ open class RawFirBuilder(
|
|||||||
moduleData = baseModuleData
|
moduleData = baseModuleData
|
||||||
origin = FirDeclarationOrigin.Source
|
origin = FirDeclarationOrigin.Source
|
||||||
name = file.name
|
name = file.name
|
||||||
packageFqName = context.packageFqName
|
packageDirective = buildPackageDirective {
|
||||||
|
packageFqName = context.packageFqName
|
||||||
|
source = file.packageDirective?.toFirPsiSourceElement()
|
||||||
|
}
|
||||||
for (annotationEntry in file.annotationEntries) {
|
for (annotationEntry in file.annotationEntries) {
|
||||||
annotations += annotationEntry.convert<FirAnnotationCall>()
|
annotations += annotationEntry.convert<FirAnnotationCall>()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.scopes
|
|||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||||
|
import org.jetbrains.kotlin.fir.packageFqName
|
||||||
import org.jetbrains.kotlin.fir.resolve.*
|
import org.jetbrains.kotlin.fir.resolve.*
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.*
|
import org.jetbrains.kotlin.fir.scopes.impl.*
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2021 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
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.*
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file was generated automatically
|
||||||
|
* DO NOT MODIFY IT MANUALLY
|
||||||
|
*/
|
||||||
|
|
||||||
|
abstract class FirPackageDirective : FirPureAbstractElement(), FirElement {
|
||||||
|
abstract override val source: FirSourceElement?
|
||||||
|
abstract val packageFqName: FqName
|
||||||
|
|
||||||
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitPackageDirective(this, data)
|
||||||
|
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
override fun <E: FirElement, D> transform(transformer: FirTransformer<D>, data: D): E =
|
||||||
|
transformer.transformPackageDirective(this, data) as E
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2021 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.builder
|
||||||
|
|
||||||
|
import kotlin.contracts.*
|
||||||
|
import org.jetbrains.kotlin.fir.FirPackageDirective
|
||||||
|
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||||
|
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
|
||||||
|
import org.jetbrains.kotlin.fir.impl.FirPackageDirectiveImpl
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.*
|
||||||
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file was generated automatically
|
||||||
|
* DO NOT MODIFY IT MANUALLY
|
||||||
|
*/
|
||||||
|
|
||||||
|
@FirBuilderDsl
|
||||||
|
class FirPackageDirectiveBuilder {
|
||||||
|
var source: FirSourceElement? = null
|
||||||
|
lateinit var packageFqName: FqName
|
||||||
|
|
||||||
|
fun build(): FirPackageDirective {
|
||||||
|
return FirPackageDirectiveImpl(
|
||||||
|
source,
|
||||||
|
packageFqName,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@OptIn(ExperimentalContracts::class)
|
||||||
|
inline fun buildPackageDirective(init: FirPackageDirectiveBuilder.() -> Unit): FirPackageDirective {
|
||||||
|
contract {
|
||||||
|
callsInPlace(init, kotlin.contracts.InvocationKind.EXACTLY_ONCE)
|
||||||
|
}
|
||||||
|
return FirPackageDirectiveBuilder().apply(init).build()
|
||||||
|
}
|
||||||
@@ -7,10 +7,10 @@ package org.jetbrains.kotlin.fir.declarations
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.FirModuleData
|
import org.jetbrains.kotlin.fir.FirModuleData
|
||||||
|
import org.jetbrains.kotlin.fir.FirPackageDirective
|
||||||
import org.jetbrains.kotlin.fir.FirSourceElement
|
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFileSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFileSymbol
|
||||||
import org.jetbrains.kotlin.name.FqName
|
|
||||||
import org.jetbrains.kotlin.fir.visitors.*
|
import org.jetbrains.kotlin.fir.visitors.*
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -25,10 +25,10 @@ abstract class FirFile : FirAnnotatedDeclaration() {
|
|||||||
abstract override val origin: FirDeclarationOrigin
|
abstract override val origin: FirDeclarationOrigin
|
||||||
abstract override val attributes: FirDeclarationAttributes
|
abstract override val attributes: FirDeclarationAttributes
|
||||||
abstract override val annotations: List<FirAnnotationCall>
|
abstract override val annotations: List<FirAnnotationCall>
|
||||||
|
abstract val packageDirective: FirPackageDirective
|
||||||
abstract val imports: List<FirImport>
|
abstract val imports: List<FirImport>
|
||||||
abstract val declarations: List<FirDeclaration>
|
abstract val declarations: List<FirDeclaration>
|
||||||
abstract val name: String
|
abstract val name: String
|
||||||
abstract val packageFqName: FqName
|
|
||||||
abstract override val symbol: FirFileSymbol
|
abstract override val symbol: FirFileSymbol
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitFile(this, data)
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitFile(this, data)
|
||||||
|
|||||||
+3
-3
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.declarations.builder
|
|||||||
|
|
||||||
import kotlin.contracts.*
|
import kotlin.contracts.*
|
||||||
import org.jetbrains.kotlin.fir.FirModuleData
|
import org.jetbrains.kotlin.fir.FirModuleData
|
||||||
|
import org.jetbrains.kotlin.fir.FirPackageDirective
|
||||||
import org.jetbrains.kotlin.fir.FirSourceElement
|
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||||
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
|
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
|
||||||
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
|
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
|
||||||
@@ -20,7 +21,6 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirFileImpl
|
|||||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFileSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFileSymbol
|
||||||
import org.jetbrains.kotlin.fir.visitors.*
|
import org.jetbrains.kotlin.fir.visitors.*
|
||||||
import org.jetbrains.kotlin.name.FqName
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file was generated automatically
|
* This file was generated automatically
|
||||||
@@ -35,10 +35,10 @@ class FirFileBuilder : FirAnnotationContainerBuilder {
|
|||||||
lateinit var origin: FirDeclarationOrigin
|
lateinit var origin: FirDeclarationOrigin
|
||||||
var attributes: FirDeclarationAttributes = FirDeclarationAttributes()
|
var attributes: FirDeclarationAttributes = FirDeclarationAttributes()
|
||||||
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
|
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
|
||||||
|
lateinit var packageDirective: FirPackageDirective
|
||||||
val imports: MutableList<FirImport> = mutableListOf()
|
val imports: MutableList<FirImport> = mutableListOf()
|
||||||
val declarations: MutableList<FirDeclaration> = mutableListOf()
|
val declarations: MutableList<FirDeclaration> = mutableListOf()
|
||||||
lateinit var name: String
|
lateinit var name: String
|
||||||
lateinit var packageFqName: FqName
|
|
||||||
|
|
||||||
override fun build(): FirFile {
|
override fun build(): FirFile {
|
||||||
return FirFileImpl(
|
return FirFileImpl(
|
||||||
@@ -48,10 +48,10 @@ class FirFileBuilder : FirAnnotationContainerBuilder {
|
|||||||
origin,
|
origin,
|
||||||
attributes,
|
attributes,
|
||||||
annotations,
|
annotations,
|
||||||
|
packageDirective,
|
||||||
imports,
|
imports,
|
||||||
declarations,
|
declarations,
|
||||||
name,
|
name,
|
||||||
packageFqName,
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.fir.declarations.impl
|
package org.jetbrains.kotlin.fir.declarations.impl
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirModuleData
|
import org.jetbrains.kotlin.fir.FirModuleData
|
||||||
|
import org.jetbrains.kotlin.fir.FirPackageDirective
|
||||||
import org.jetbrains.kotlin.fir.FirSourceElement
|
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes
|
import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes
|
||||||
@@ -15,7 +16,6 @@ import org.jetbrains.kotlin.fir.declarations.FirImport
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFileSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFileSymbol
|
||||||
import org.jetbrains.kotlin.name.FqName
|
|
||||||
import org.jetbrains.kotlin.fir.visitors.*
|
import org.jetbrains.kotlin.fir.visitors.*
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -30,10 +30,10 @@ internal class FirFileImpl(
|
|||||||
override val origin: FirDeclarationOrigin,
|
override val origin: FirDeclarationOrigin,
|
||||||
override val attributes: FirDeclarationAttributes,
|
override val attributes: FirDeclarationAttributes,
|
||||||
override val annotations: MutableList<FirAnnotationCall>,
|
override val annotations: MutableList<FirAnnotationCall>,
|
||||||
|
override var packageDirective: FirPackageDirective,
|
||||||
override val imports: MutableList<FirImport>,
|
override val imports: MutableList<FirImport>,
|
||||||
override val declarations: MutableList<FirDeclaration>,
|
override val declarations: MutableList<FirDeclaration>,
|
||||||
override val name: String,
|
override val name: String,
|
||||||
override val packageFqName: FqName,
|
|
||||||
) : FirFile() {
|
) : FirFile() {
|
||||||
override val symbol: FirFileSymbol = FirFileSymbol()
|
override val symbol: FirFileSymbol = FirFileSymbol()
|
||||||
|
|
||||||
@@ -43,12 +43,14 @@ internal class FirFileImpl(
|
|||||||
|
|
||||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||||
annotations.forEach { it.accept(visitor, data) }
|
annotations.forEach { it.accept(visitor, data) }
|
||||||
|
packageDirective.accept(visitor, data)
|
||||||
imports.forEach { it.accept(visitor, data) }
|
imports.forEach { it.accept(visitor, data) }
|
||||||
declarations.forEach { it.accept(visitor, data) }
|
declarations.forEach { it.accept(visitor, data) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirFileImpl {
|
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirFileImpl {
|
||||||
transformAnnotations(transformer, data)
|
transformAnnotations(transformer, data)
|
||||||
|
packageDirective = packageDirective.transform(transformer, data)
|
||||||
transformImports(transformer, data)
|
transformImports(transformer, data)
|
||||||
transformDeclarations(transformer, data)
|
transformDeclarations(transformer, data)
|
||||||
return this
|
return this
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2021 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.impl
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.fir.FirPackageDirective
|
||||||
|
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||||
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.*
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file was generated automatically
|
||||||
|
* DO NOT MODIFY IT MANUALLY
|
||||||
|
*/
|
||||||
|
|
||||||
|
internal class FirPackageDirectiveImpl(
|
||||||
|
override val source: FirSourceElement?,
|
||||||
|
override val packageFqName: FqName,
|
||||||
|
) : FirPackageDirective() {
|
||||||
|
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
|
||||||
|
|
||||||
|
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirPackageDirectiveImpl {
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -43,6 +43,7 @@ import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
|
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
|
import org.jetbrains.kotlin.fir.FirPackageDirective
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
|
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirAnonymousFunctionExpression
|
import org.jetbrains.kotlin.fir.expressions.FirAnonymousFunctionExpression
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirAnonymousObject
|
import org.jetbrains.kotlin.fir.declarations.FirAnonymousObject
|
||||||
@@ -291,6 +292,10 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
|
|||||||
return transformElement(file, data)
|
return transformElement(file, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open fun transformPackageDirective(packageDirective: FirPackageDirective, data: D): FirPackageDirective {
|
||||||
|
return transformElement(packageDirective, data)
|
||||||
|
}
|
||||||
|
|
||||||
open fun transformAnonymousFunction(anonymousFunction: FirAnonymousFunction, data: D): FirStatement {
|
open fun transformAnonymousFunction(anonymousFunction: FirAnonymousFunction, data: D): FirStatement {
|
||||||
return transformElement(anonymousFunction, data)
|
return transformElement(anonymousFunction, data)
|
||||||
}
|
}
|
||||||
@@ -803,6 +808,10 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
|
|||||||
return transformFile(file, data)
|
return transformFile(file, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final override fun visitPackageDirective(packageDirective: FirPackageDirective, data: D): FirPackageDirective {
|
||||||
|
return transformPackageDirective(packageDirective, data)
|
||||||
|
}
|
||||||
|
|
||||||
final override fun visitAnonymousFunction(anonymousFunction: FirAnonymousFunction, data: D): FirStatement {
|
final override fun visitAnonymousFunction(anonymousFunction: FirAnonymousFunction, data: D): FirStatement {
|
||||||
return transformAnonymousFunction(anonymousFunction, data)
|
return transformAnonymousFunction(anonymousFunction, data)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
|
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
|
import org.jetbrains.kotlin.fir.FirPackageDirective
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
|
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirAnonymousFunctionExpression
|
import org.jetbrains.kotlin.fir.expressions.FirAnonymousFunctionExpression
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirAnonymousObject
|
import org.jetbrains.kotlin.fir.declarations.FirAnonymousObject
|
||||||
@@ -216,6 +217,8 @@ abstract class FirVisitor<out R, in D> {
|
|||||||
|
|
||||||
open fun visitFile(file: FirFile, data: D): R = visitElement(file, data)
|
open fun visitFile(file: FirFile, data: D): R = visitElement(file, data)
|
||||||
|
|
||||||
|
open fun visitPackageDirective(packageDirective: FirPackageDirective, data: D): R = visitElement(packageDirective, data)
|
||||||
|
|
||||||
open fun visitAnonymousFunction(anonymousFunction: FirAnonymousFunction, data: D): R = visitElement(anonymousFunction, data)
|
open fun visitAnonymousFunction(anonymousFunction: FirAnonymousFunction, data: D): R = visitElement(anonymousFunction, data)
|
||||||
|
|
||||||
open fun visitAnonymousFunctionExpression(anonymousFunctionExpression: FirAnonymousFunctionExpression, data: D): R = visitElement(anonymousFunctionExpression, data)
|
open fun visitAnonymousFunctionExpression(anonymousFunctionExpression: FirAnonymousFunctionExpression, data: D): R = visitElement(anonymousFunctionExpression, data)
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
|
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
|
import org.jetbrains.kotlin.fir.FirPackageDirective
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
|
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirAnonymousFunctionExpression
|
import org.jetbrains.kotlin.fir.expressions.FirAnonymousFunctionExpression
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirAnonymousObject
|
import org.jetbrains.kotlin.fir.declarations.FirAnonymousObject
|
||||||
@@ -290,6 +291,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitElement(file)
|
visitElement(file)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open fun visitPackageDirective(packageDirective: FirPackageDirective) {
|
||||||
|
visitElement(packageDirective)
|
||||||
|
}
|
||||||
|
|
||||||
open fun visitAnonymousFunction(anonymousFunction: FirAnonymousFunction) {
|
open fun visitAnonymousFunction(anonymousFunction: FirAnonymousFunction) {
|
||||||
visitElement(anonymousFunction)
|
visitElement(anonymousFunction)
|
||||||
}
|
}
|
||||||
@@ -802,6 +807,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitFile(file)
|
visitFile(file)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final override fun visitPackageDirective(packageDirective: FirPackageDirective, data: Nothing?) {
|
||||||
|
visitPackageDirective(packageDirective)
|
||||||
|
}
|
||||||
|
|
||||||
final override fun visitAnonymousFunction(anonymousFunction: FirAnonymousFunction, data: Nothing?) {
|
final override fun visitAnonymousFunction(anonymousFunction: FirAnonymousFunction, data: Nothing?) {
|
||||||
visitAnonymousFunction(anonymousFunction)
|
visitAnonymousFunction(anonymousFunction)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.fir
|
package org.jetbrains.kotlin.fir
|
||||||
|
|
||||||
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
import org.jetbrains.kotlin.fir.types.FirDynamicTypeRef
|
import org.jetbrains.kotlin.fir.types.FirDynamicTypeRef
|
||||||
@@ -14,6 +15,7 @@ import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef
|
|||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.builder.*
|
import org.jetbrains.kotlin.fir.types.builder.*
|
||||||
import org.jetbrains.kotlin.fir.types.impl.*
|
import org.jetbrains.kotlin.fir.types.impl.*
|
||||||
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
|
||||||
fun ModuleInfo.dependenciesWithoutSelf(): Sequence<ModuleInfo> = dependencies().asSequence().filter { it != this }
|
fun ModuleInfo.dependenciesWithoutSelf(): Sequence<ModuleInfo> = dependencies().asSequence().filter { it != this }
|
||||||
|
|
||||||
@@ -87,3 +89,6 @@ fun FirSourceElement.getWholeQualifierSourceIfPossible(stepsToWholeQualifier: In
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val FirFile.packageFqName: FqName
|
||||||
|
get() = packageDirective.packageFqName
|
||||||
|
|||||||
+1
@@ -56,6 +56,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
|
|||||||
val propertyAccessor = element("PropertyAccessor", Declaration, function, contractDescriptionOwner, typeParametersOwner)
|
val propertyAccessor = element("PropertyAccessor", Declaration, function, contractDescriptionOwner, typeParametersOwner)
|
||||||
val constructor = element("Constructor", Declaration, function, typeParameterRefsOwner)
|
val constructor = element("Constructor", Declaration, function, typeParameterRefsOwner)
|
||||||
val file = element("File", Declaration, annotatedDeclaration)
|
val file = element("File", Declaration, annotatedDeclaration)
|
||||||
|
val packageDirective = element("PackageDirective", Other)
|
||||||
|
|
||||||
val anonymousFunction = element("AnonymousFunction", Declaration, function, typeParametersOwner)
|
val anonymousFunction = element("AnonymousFunction", Declaration, function, typeParametersOwner)
|
||||||
val anonymousFunctionExpression = element("AnonymousFunctionExpression", Expression, expression)
|
val anonymousFunctionExpression = element("AnonymousFunctionExpression", Expression, expression)
|
||||||
|
|||||||
+5
-1
@@ -389,13 +389,17 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
|||||||
}
|
}
|
||||||
|
|
||||||
file.configure {
|
file.configure {
|
||||||
|
+field("packageDirective", packageDirective)
|
||||||
+fieldList(import).withTransform()
|
+fieldList(import).withTransform()
|
||||||
+declarations.withTransform()
|
+declarations.withTransform()
|
||||||
+stringField("name")
|
+stringField("name")
|
||||||
+field("packageFqName", fqNameType)
|
|
||||||
+symbol("FirFileSymbol")
|
+symbol("FirFileSymbol")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
packageDirective.configure {
|
||||||
|
+field("packageFqName", fqNameType)
|
||||||
|
}
|
||||||
|
|
||||||
import.configure {
|
import.configure {
|
||||||
+field("importedFqName", fqNameType, nullable = true)
|
+field("importedFqName", fqNameType, nullable = true)
|
||||||
+booleanField("isAllUnder")
|
+booleanField("isAllUnder")
|
||||||
|
|||||||
+1
@@ -112,6 +112,7 @@ internal object FileDiagnosticRetriever : FileStructureElementDiagnosticRetrieve
|
|||||||
withSuppressedDiagnostics(file) {
|
withSuppressedDiagnostics(file) {
|
||||||
visitWithDeclaration(file) {
|
visitWithDeclaration(file) {
|
||||||
file.annotations.forEach { it.accept(this, data) }
|
file.annotations.forEach { it.accept(this, data) }
|
||||||
|
file.packageDirective.accept(this, data)
|
||||||
file.imports.forEach { it.accept(this, data) }
|
file.imports.forEach { it.accept(this, data) }
|
||||||
// do not visit declarations here
|
// do not visit declarations here
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-11
@@ -6,9 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.idea.references
|
package org.jetbrains.kotlin.idea.references
|
||||||
|
|
||||||
import com.intellij.psi.tree.TokenSet
|
import com.intellij.psi.tree.TokenSet
|
||||||
import org.jetbrains.kotlin.fir.FirFakeSourceElementKind
|
import org.jetbrains.kotlin.fir.*
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
|
||||||
import org.jetbrains.kotlin.fir.ROOT_PREFIX_FOR_IDE_RESOLUTION_MODE
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.builder.buildImport
|
import org.jetbrains.kotlin.fir.declarations.builder.buildImport
|
||||||
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
|
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
|
||||||
@@ -17,7 +15,6 @@ import org.jetbrains.kotlin.fir.declarations.utils.isCompanion
|
|||||||
import org.jetbrains.kotlin.fir.declarations.utils.isLocal
|
import org.jetbrains.kotlin.fir.declarations.utils.isLocal
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.isStatic
|
import org.jetbrains.kotlin.fir.declarations.utils.isStatic
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
import org.jetbrains.kotlin.fir.psi
|
|
||||||
import org.jetbrains.kotlin.fir.references.*
|
import org.jetbrains.kotlin.fir.references.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.FirSyntheticPropertySymbol
|
import org.jetbrains.kotlin.fir.resolve.calls.FirSyntheticPropertySymbol
|
||||||
@@ -46,7 +43,6 @@ import org.jetbrains.kotlin.name.ClassId
|
|||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.collectDescendantsOfType
|
import org.jetbrains.kotlin.psi.psiUtil.collectDescendantsOfType
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
|
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForSelector
|
import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForSelector
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.unwrapNullability
|
import org.jetbrains.kotlin.psi.psiUtil.unwrapNullability
|
||||||
import org.jetbrains.kotlin.utils.addIfNotNull
|
import org.jetbrains.kotlin.utils.addIfNotNull
|
||||||
@@ -184,7 +180,8 @@ internal object FirReferenceResolveHelper {
|
|||||||
getSymbolsForResolvedQualifier(fir, expression, session, symbolBuilder)
|
getSymbolsForResolvedQualifier(fir, expression, session, symbolBuilder)
|
||||||
is FirAnnotationCall -> getSymbolsForAnnotationCall(fir, session, symbolBuilder)
|
is FirAnnotationCall -> getSymbolsForAnnotationCall(fir, session, symbolBuilder)
|
||||||
is FirResolvedImport -> getSymbolsByResolvedImport(expression, symbolBuilder, fir, session)
|
is FirResolvedImport -> getSymbolsByResolvedImport(expression, symbolBuilder, fir, session)
|
||||||
is FirFile -> getSymbolsByFirFile(expression, symbolBuilder, fir)
|
is FirPackageDirective -> getSymbolsForPackageDirective(expression, symbolBuilder)
|
||||||
|
is FirFile -> getSymbolsByFirFile(symbolBuilder, fir)
|
||||||
is FirArrayOfCall -> {
|
is FirArrayOfCall -> {
|
||||||
// We can't yet find PsiElement for arrayOf, intArrayOf, etc.
|
// We can't yet find PsiElement for arrayOf, intArrayOf, etc.
|
||||||
emptyList()
|
emptyList()
|
||||||
@@ -199,6 +196,14 @@ internal object FirReferenceResolveHelper {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun getSymbolsForPackageDirective(
|
||||||
|
expression: KtSimpleNameExpression,
|
||||||
|
symbolBuilder: KtSymbolByFirBuilder
|
||||||
|
): List<KtFirPackageSymbol> {
|
||||||
|
return listOfNotNull(getPackageSymbolFor(expression, symbolBuilder, forQualifiedType = false))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private fun getSymbolByResolvedNameReference(
|
private fun getSymbolByResolvedNameReference(
|
||||||
fir: FirResolvedNamedReference,
|
fir: FirResolvedNamedReference,
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
@@ -319,14 +324,9 @@ internal object FirReferenceResolveHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun getSymbolsByFirFile(
|
private fun getSymbolsByFirFile(
|
||||||
expression: KtSimpleNameExpression,
|
|
||||||
symbolBuilder: KtSymbolByFirBuilder,
|
symbolBuilder: KtSymbolByFirBuilder,
|
||||||
fir: FirFile
|
fir: FirFile
|
||||||
): List<KtSymbol> {
|
): List<KtSymbol> {
|
||||||
if (expression.getNonStrictParentOfType<KtPackageDirective>() != null) {
|
|
||||||
// Special: package reference in the middle of package directive
|
|
||||||
return listOfNotNull(getPackageSymbolFor(expression, symbolBuilder, forQualifiedType = false))
|
|
||||||
}
|
|
||||||
return listOf(symbolBuilder.buildSymbol(fir))
|
return listOf(symbolBuilder.buildSymbol(fir))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.fir.extensions.FirDeclarationGenerationExtension
|
|||||||
import org.jetbrains.kotlin.fir.extensions.predicate.DeclarationPredicate
|
import org.jetbrains.kotlin.fir.extensions.predicate.DeclarationPredicate
|
||||||
import org.jetbrains.kotlin.fir.extensions.predicate.has
|
import org.jetbrains.kotlin.fir.extensions.predicate.has
|
||||||
import org.jetbrains.kotlin.fir.moduleData
|
import org.jetbrains.kotlin.fir.moduleData
|
||||||
|
import org.jetbrains.kotlin.fir.packageFqName
|
||||||
import org.jetbrains.kotlin.fir.plugin.fqn
|
import org.jetbrains.kotlin.fir.plugin.fqn
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.plugin.GeneratedClass
|
import org.jetbrains.kotlin.fir.resolve.transformers.plugin.GeneratedClass
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||||
|
|||||||
Reference in New Issue
Block a user