diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirSymbol.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirSymbol.kt index 4dace24b53e..43f932fc88e 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirSymbol.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirSymbol.kt @@ -42,6 +42,7 @@ internal tailrec fun FirDeclaration.ktSymbolOrigin(): KtSymbolOrigin = when (ori else -> KtSymbolOrigin.SOURCE } } + FirDeclarationOrigin.Precompiled -> KtSymbolOrigin.SOURCE FirDeclarationOrigin.Library, FirDeclarationOrigin.BuiltIns -> KtSymbolOrigin.LIBRARY FirDeclarationOrigin.Java -> KtSymbolOrigin.JAVA FirDeclarationOrigin.SamConstructor -> KtSymbolOrigin.SAM_CONSTRUCTOR diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt index 178f6e1da4a..9bd60f240ae 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt @@ -476,7 +476,8 @@ fun FirCallableSymbol<*>.getImplementationStatus( } return when { isFinal -> ImplementationStatus.CANNOT_BE_IMPLEMENTED - containingClassSymbol === parentClassSymbol && origin == FirDeclarationOrigin.Source -> ImplementationStatus.ALREADY_IMPLEMENTED + containingClassSymbol === parentClassSymbol && (origin == FirDeclarationOrigin.Source || origin == FirDeclarationOrigin.Precompiled) -> + ImplementationStatus.ALREADY_IMPLEMENTED containingClassSymbol is FirRegularClassSymbol && containingClassSymbol.isExpect -> ImplementationStatus.CANNOT_BE_IMPLEMENTED isAbstract -> ImplementationStatus.NOT_IMPLEMENTED else -> ImplementationStatus.INHERITED_OR_SYNTHESIZED diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt index feeeec40138..6e33e08b71f 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt @@ -16,6 +16,7 @@ import org.jetbrains.kotlin.fir.analysis.checkersComponent import org.jetbrains.kotlin.fir.analysis.extensions.additionalCheckers import org.jetbrains.kotlin.fir.checkers.registerCommonCheckers import org.jetbrains.kotlin.fir.checkers.registerJvmCheckers +import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider import org.jetbrains.kotlin.fir.deserialization.SingleModuleDataProvider import org.jetbrains.kotlin.fir.extensions.BunchOfRegisteredExtensions @@ -155,6 +156,7 @@ object FirSessionFactory { it.packagePartProvider, projectEnvironment.getKotlinClassFinder(it.scope), projectEnvironment.getFirJavaFacade(this, moduleData, it.scope), + defaultDeseializationOrigin = FirDeclarationOrigin.Precompiled ) } diff --git a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/AbstractFirDeserializedSymbolProvider.kt b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/AbstractFirDeserializedSymbolProvider.kt index 69496cdf904..7b657118777 100644 --- a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/AbstractFirDeserializedSymbolProvider.kt +++ b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/AbstractFirDeserializedSymbolProvider.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.caches.FirCache import org.jetbrains.kotlin.fir.caches.createCache import org.jetbrains.kotlin.fir.caches.firCachesFactory import org.jetbrains.kotlin.fir.caches.getValue +import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProviderInternals import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider @@ -65,6 +66,7 @@ abstract class AbstractFirDeserializedSymbolProvider( session: FirSession, val moduleDataProvider: ModuleDataProvider, val kotlinScopeProvider: FirKotlinScopeProvider, + val defaultDeserializationOrigin: FirDeclarationOrigin, ) : FirSymbolProvider(session) { // ------------------------ Caches ------------------------ @@ -146,6 +148,7 @@ abstract class AbstractFirDeserializedSymbolProvider( kotlinScopeProvider, parentContext, sourceElement, + origin = defaultDeserializationOrigin, deserializeNestedClass = this::getClass, ) symbol to postProcessor diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/JvmClassFileBasedSymbolProvider.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/JvmClassFileBasedSymbolProvider.kt index e73a3767201..7e7a37fe7ea 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/JvmClassFileBasedSymbolProvider.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/JvmClassFileBasedSymbolProvider.kt @@ -9,6 +9,7 @@ import com.intellij.openapi.progress.ProcessCanceledException import org.jetbrains.kotlin.descriptors.SourceElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.ThreadSafeMutableState +import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.declarations.getDeprecationInfos import org.jetbrains.kotlin.fir.deserialization.* import org.jetbrains.kotlin.fir.expressions.FirAnnotation @@ -44,7 +45,8 @@ class JvmClassFileBasedSymbolProvider( private val packagePartProvider: PackagePartProvider, private val kotlinClassFinder: KotlinClassFinder, private val javaFacade: FirJavaFacade, -) : AbstractFirDeserializedSymbolProvider(session, moduleDataProvider, kotlinScopeProvider) { + defaultDeseializationOrigin: FirDeclarationOrigin = FirDeclarationOrigin.Library +) : AbstractFirDeserializedSymbolProvider(session, moduleDataProvider, kotlinScopeProvider, defaultDeseializationOrigin) { private val annotationsLoader = AnnotationsLoader(session, kotlinClassFinder) override fun computePackagePartsInfos(packageFqName: FqName): List { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt index f926da84264..4fdad581e03 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt @@ -437,7 +437,7 @@ fun FirFunction.getAsForbiddenNamedArgumentsTarget(session: FirSession): Forbidd return ForbiddenNamedArgumentsTarget.EXPECTED_CLASS_MEMBER } return when (origin) { - FirDeclarationOrigin.Source, FirDeclarationOrigin.Library -> null + FirDeclarationOrigin.Source, FirDeclarationOrigin.Precompiled, FirDeclarationOrigin.Library -> null FirDeclarationOrigin.Delegated -> delegatedWrapperData?.wrapped?.getAsForbiddenNamedArgumentsTarget(session) FirDeclarationOrigin.ImportedFromObject -> importedFromObjectData?.original?.getAsForbiddenNamedArgumentsTarget(session) // For intersection overrides, the logic in diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt index db7dcfb34ea..14be577d08c 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt @@ -389,7 +389,7 @@ abstract class AbstractFirStatusResolveTransformer( @OptIn(ExperimentalStdlibApi::class) private fun forceResolveStatusesOfClass(regularClass: FirRegularClass) { - if (regularClass.origin == FirDeclarationOrigin.Java) { + if (regularClass.origin == FirDeclarationOrigin.Java || regularClass.origin == FirDeclarationOrigin.Precompiled) { /* * If regular class has no corresponding file then it is platform class, * so we need to resolve supertypes of this class because they could diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationOrigin.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationOrigin.kt index 5a251cda55e..d8530fa2b28 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationOrigin.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationOrigin.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.declarations sealed class FirDeclarationOrigin(private val displayName: String? = null, val fromSupertypes: Boolean = false, val generated: Boolean = false) { object Source : FirDeclarationOrigin() object Library : FirDeclarationOrigin() + object Precompiled : FirDeclarationOrigin() // currently used for incremental compilation object BuiltIns : FirDeclarationOrigin() object Java : FirDeclarationOrigin() object Synthetic : FirDeclarationOrigin()