diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructure.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructure.kt index a0595684c3f..fe01b3a6557 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructure.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructure.kt @@ -89,7 +89,7 @@ internal class FileStructure( val firFile = firFileBuilder.getFirFileResolvedToPhaseWithCaching( container, moduleFileCache, - FirResolvePhase.IMPORTS, + FirResolvePhase.TYPES, checkPCE = true ) RootStructureElement( diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/FirSimpleNameReference.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/FirSimpleNameReference.kt index 4d60ef2b400..48c020c1936 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/FirSimpleNameReference.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/FirSimpleNameReference.kt @@ -8,17 +8,36 @@ package org.jetbrains.kotlin.idea.references import com.intellij.psi.PsiElement import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession import org.jetbrains.kotlin.idea.frontend.api.fir.KtFirAnalysisSession +import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirClassOrObjectSymbol +import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassKind import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.psi.KtImportAlias -import org.jetbrains.kotlin.psi.KtSimpleNameExpression +import org.jetbrains.kotlin.psi.* internal class KtFirSimpleNameReference( expression: KtSimpleNameExpression ) : KtSimpleNameReference(expression), KtFirReference { + + private fun KtAnalysisSession.fixUpAnnotationCallResolveToCtor(resultsToFix: Collection): Collection { + if (resultsToFix.isEmpty()) return resultsToFix + + val isAnnotationCall = (((expression.parent as? KtUserType) + ?.parent as? KtTypeReference) + ?.parent as? KtConstructorCalleeExpression) + ?.parent is KtAnnotationEntry + if (!isAnnotationCall) return resultsToFix + + return resultsToFix.map { targetSymbol -> + if (targetSymbol is KtFirClassOrObjectSymbol && targetSymbol.classKind == KtClassKind.ANNOTATION_CLASS) { + targetSymbol.getMemberScope().getConstructors().firstOrNull() ?: targetSymbol + } else targetSymbol + } + } + override fun KtAnalysisSession.resolveToSymbols(): Collection { check(this is KtFirAnalysisSession) - return FirReferenceResolveHelper.resolveSimpleNameReference(this@KtFirSimpleNameReference, this) + val results = FirReferenceResolveHelper.resolveSimpleNameReference(this@KtFirSimpleNameReference, this) + return fixUpAnnotationCallResolveToCtor(results) } override fun doCanBeReferenceTo(candidateTarget: PsiElement): Boolean { diff --git a/idea/testData/fir/lazyResolve/import/foo/main.txt b/idea/testData/fir/lazyResolve/import/foo/main.txt index 74b0e15ee36..386af2d81b2 100644 --- a/idea/testData/fir/lazyResolve/import/foo/main.txt +++ b/idea/testData/fir/lazyResolve/import/foo/main.txt @@ -1,4 +1,4 @@ FILE: main.kt - public? final? [RAW_FIR] fun foofoo(): Int { + public? final? [TYPES] fun foofoo(): R|kotlin/Int| { ^foofoo barbar#() } diff --git a/idea/testData/resolve/references/AnnotationOnFile.kt b/idea/testData/resolve/references/AnnotationOnFile.kt index 85f6ce26681..491f48d1035 100644 --- a/idea/testData/resolve/references/AnnotationOnFile.kt +++ b/idea/testData/resolve/references/AnnotationOnFile.kt @@ -1,5 +1,3 @@ -// IGNORE_FIR - @file:[kotlin.Deprecated("message")] package foo diff --git a/idea/testData/resolve/references/AnnotationOnFileWithImport.kt b/idea/testData/resolve/references/AnnotationOnFileWithImport.kt index 21e0ccdd293..8497c5dc2e5 100644 --- a/idea/testData/resolve/references/AnnotationOnFileWithImport.kt +++ b/idea/testData/resolve/references/AnnotationOnFileWithImport.kt @@ -1,5 +1,3 @@ -// IGNORE_FIR - @file:[D("message")] package foo