7
7
8
8
package org.jetbrains.kotlin.fir.java.scopes
9
9
10
- import org.jetbrains.kotlin.config.JvmAnalysisFlags
10
+ import org.jetbrains.kotlin.builtins.StandardNames
11
+ import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap
11
12
import org.jetbrains.kotlin.fir.FirSession
12
- import org.jetbrains.kotlin.fir.declarations.hasAnnotation
13
13
import org.jetbrains.kotlin.fir.dispatchReceiverClassLookupTagOrNull
14
14
import org.jetbrains.kotlin.fir.java.scopes.ClassicBuiltinSpecialProperties.getBuiltinSpecialPropertyGetterName
15
- import org.jetbrains.kotlin.fir.languageVersionSettings
16
- import org.jetbrains.kotlin.fir.resolve.providers.firProvider
17
- import org.jetbrains.kotlin.fir.resolve.providers.getContainingFile
18
15
import org.jetbrains.kotlin.fir.resolve.toSymbol
19
16
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
20
17
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
@@ -32,7 +29,6 @@ import org.jetbrains.kotlin.load.java.SpecialGenericSignatures.Companion.ERASED_
32
29
import org.jetbrains.kotlin.load.java.SpecialGenericSignatures.Companion.REMOVE_AT_NAME_AND_SIGNATURE
33
30
import org.jetbrains.kotlin.load.java.SpecialGenericSignatures.Companion.SIGNATURE_TO_JVM_REPRESENTATION_NAME
34
31
import org.jetbrains.kotlin.name.Name
35
- import org.jetbrains.kotlin.name.StandardClassIds
36
32
37
33
fun FirCallableSymbol <* >.doesOverrideBuiltinWithDifferentJvmName (containingScope : FirTypeScope , session : FirSession ): Boolean {
38
34
return getOverriddenBuiltinWithDifferentJvmName(containingScope, session) != null
@@ -146,14 +142,16 @@ object ClassicBuiltinSpecialProperties {
146
142
}
147
143
148
144
private fun FirCallableSymbol <* >.isFromBuiltinClass (session : FirSession ): Boolean {
149
- return dispatchReceiverClassLookupTagOrNull()?.toSymbol(session)?.isBuiltinClass(session ) == true
145
+ return dispatchReceiverClassLookupTagOrNull()?.toSymbol(session)?.isBuiltinClass() == true
150
146
}
151
147
152
- fun FirClassLikeSymbol <* >.isBuiltinClass (session : FirSession ): Boolean {
148
+ fun FirClassLikeSymbol <* >.isBuiltinClass (): Boolean {
153
149
if (fir.origin.isBuiltIns) return true
154
- if (! session.languageVersionSettings.getFlag(JvmAnalysisFlags .expectBuiltinsAsPartOfStdlib)) return false
155
- val containingFile = session.firProvider.getContainingFile(this ) ? : return false
156
- return containingFile.symbol.hasAnnotation(StandardClassIds .Annotations .JvmBuiltin , session)
150
+ // Generally the condition above should be enough, but in some environments built-in classes
151
+ // might be loaded without the correct expected origin, e.g., when building stdlib artifact itself or for K2CL.
152
+ // See KT-68154 and KT-80524 for details.
153
+ // Having this branch, we may actually remove the line above, but leaving it as a fast-path.
154
+ return classId.packageFqName.startsWith(StandardNames .BUILT_INS_PACKAGE_NAME ) && JavaToKotlinClassMap .isMappedKotlinClass(classId)
157
155
}
158
156
159
157
private fun FirNamedFunctionSymbol.firstOverriddenFunction (
0 commit comments