[FIR] JvmMappedScope: add mutable methods or not depending on a class

This commit is contained in:
Mikhail Glukhikh
2020-10-26 19:17:13 +03:00
parent 5c3269f489
commit 09043fb98d
7 changed files with 12 additions and 13 deletions
@@ -28,12 +28,13 @@ fun wrapScopeWithJvmMapped(
scopeSession: ScopeSession
): FirScope {
val classId = klass.classId
val javaClassId = JavaToKotlinClassMap.mapKotlinToJava(classId.asSingleFqName().toUnsafe())
val kotlinUnsafeFqName = classId.asSingleFqName().toUnsafe()
val javaClassId = JavaToKotlinClassMap.mapKotlinToJava(kotlinUnsafeFqName)
?: return declaredMemberScope
val symbolProvider = useSiteSession.firSymbolProvider
val javaClass = symbolProvider.getClassLikeSymbolByFqName(javaClassId)?.fir as? FirRegularClass
?: return declaredMemberScope
val preparedSignatures = JvmMappedScope.prepareSignatures(javaClass)
val preparedSignatures = JvmMappedScope.prepareSignatures(javaClass, JavaToKotlinClassMap.isMutable(kotlinUnsafeFqName))
return if (preparedSignatures.isNotEmpty()) {
javaClass.unsubstitutedScope(useSiteSession, scopeSession, withForcedTypeCalculator = false).let { javaClassUseSiteScope ->
val jvmMappedScope = JvmMappedScope(declaredMemberScope, javaClassUseSiteScope, preparedSignatures)
@@ -114,12 +114,13 @@ class JvmMappedScope(
).mapTo(this) { arguments -> "java/lang/Throwable.<init>($arguments)V" }
}
fun prepareSignatures(klass: FirRegularClass): Signatures {
fun prepareSignatures(klass: FirRegularClass, isMutable: Boolean): Signatures {
val signaturePrefix = klass.symbol.classId.toString()
val visibleMethodsByName = mutableMapOf<Name, MutableSet<String>>()
JvmBuiltInsSignatures.VISIBLE_METHOD_SIGNATURES.filter { signature ->
signature.startsWith(signaturePrefix)
signature in JvmBuiltInsSignatures.MUTABLE_METHOD_SIGNATURES == isMutable &&
signature.startsWith(signaturePrefix)
}.map { signature ->
// +1 to delete dot before function name
signature.substring(signaturePrefix.length + 1)