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
@@ -112,6 +112,7 @@ internal object FileDiagnosticRetriever : FileStructureElementDiagnosticRetrieve
|
||||
withSuppressedDiagnostics(file) {
|
||||
visitWithDeclaration(file) {
|
||||
file.annotations.forEach { it.accept(this, data) }
|
||||
file.packageDirective.accept(this, data)
|
||||
file.imports.forEach { it.accept(this, data) }
|
||||
// do not visit declarations here
|
||||
}
|
||||
|
||||
+11
-11
@@ -6,9 +6,7 @@
|
||||
package org.jetbrains.kotlin.idea.references
|
||||
|
||||
import com.intellij.psi.tree.TokenSet
|
||||
import org.jetbrains.kotlin.fir.FirFakeSourceElementKind
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.ROOT_PREFIX_FOR_IDE_RESOLUTION_MODE
|
||||
import org.jetbrains.kotlin.fir.*
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.builder.buildImport
|
||||
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.isStatic
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.fir.psi
|
||||
import org.jetbrains.kotlin.fir.references.*
|
||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||
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.psi.*
|
||||
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.unwrapNullability
|
||||
import org.jetbrains.kotlin.utils.addIfNotNull
|
||||
@@ -184,7 +180,8 @@ internal object FirReferenceResolveHelper {
|
||||
getSymbolsForResolvedQualifier(fir, expression, session, symbolBuilder)
|
||||
is FirAnnotationCall -> getSymbolsForAnnotationCall(fir, session, symbolBuilder)
|
||||
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 -> {
|
||||
// We can't yet find PsiElement for arrayOf, intArrayOf, etc.
|
||||
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(
|
||||
fir: FirResolvedNamedReference,
|
||||
session: FirSession,
|
||||
@@ -319,14 +324,9 @@ internal object FirReferenceResolveHelper {
|
||||
}
|
||||
|
||||
private fun getSymbolsByFirFile(
|
||||
expression: KtSimpleNameExpression,
|
||||
symbolBuilder: KtSymbolByFirBuilder,
|
||||
fir: FirFile
|
||||
): 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))
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user