FIR: cache accessor symbols in JavaClassUseSiteMemberScope

This commit is contained in:
Mikhail Glukhikh
2021-02-25 13:06:38 +03:00
parent 750a39a053
commit 2bf3abcb29
8 changed files with 13 additions and 17 deletions
@@ -43,6 +43,7 @@ class JavaClassUseSiteMemberScope(
) { ) {
private val typeParameterStack = klass.javaTypeParameterStack private val typeParameterStack = klass.javaTypeParameterStack
private val specialFunctions = hashMapOf<Name, Collection<FirNamedFunctionSymbol>>() private val specialFunctions = hashMapOf<Name, Collection<FirNamedFunctionSymbol>>()
private val accessorByNameMap = hashMapOf<Name, FirAccessorSymbol>()
override fun getCallableNames(): Set<Name> { override fun getCallableNames(): Set<Name> {
return declaredMemberScope.getContainingCallableNamesIfPresent() + superTypesScope.getCallableNames() return declaredMemberScope.getContainingCallableNamesIfPresent() + superTypesScope.getCallableNames()
@@ -57,16 +58,18 @@ class JavaClassUseSiteMemberScope(
setterSymbol: FirNamedFunctionSymbol?, setterSymbol: FirNamedFunctionSymbol?,
syntheticPropertyName: Name, syntheticPropertyName: Name,
): FirAccessorSymbol { ): FirAccessorSymbol {
return buildSyntheticProperty { return accessorByNameMap.getOrPut(syntheticPropertyName) {
session = this@JavaClassUseSiteMemberScope.session buildSyntheticProperty {
name = syntheticPropertyName session = this@JavaClassUseSiteMemberScope.session
symbol = FirAccessorSymbol( name = syntheticPropertyName
accessorId = getterSymbol.callableId, symbol = FirAccessorSymbol(
callableId = CallableId(getterSymbol.callableId.packageName, getterSymbol.callableId.className, syntheticPropertyName) accessorId = getterSymbol.callableId,
) callableId = CallableId(getterSymbol.callableId.packageName, getterSymbol.callableId.className, syntheticPropertyName)
delegateGetter = getterSymbol.fir )
delegateSetter = setterSymbol?.fir delegateGetter = getterSymbol.fir
}.symbol delegateSetter = setterSymbol?.fir
}.symbol
}
} }
override fun processPropertiesByName(name: Name, processor: (FirVariableSymbol<*>) -> Unit) { override fun processPropertiesByName(name: Name, processor: (FirVariableSymbol<*>) -> Unit) {
-1
View File
@@ -1,6 +1,5 @@
// DONT_TARGET_EXACT_BACKEND: WASM // DONT_TARGET_EXACT_BACKEND: WASM
// WASM_MUTE_REASON: STDLIB_COLLECTIONS // WASM_MUTE_REASON: STDLIB_COLLECTIONS
// IGNORE_BACKEND_FIR: JVM_IR
// KJS_WITH_FULL_RUNTIME // KJS_WITH_FULL_RUNTIME
// IGNORE_BACKEND: NATIVE // IGNORE_BACKEND: NATIVE
@@ -1,4 +1,3 @@
// IGNORE_BACKEND_FIR: JVM_IR
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// WITH_RUNTIME // WITH_RUNTIME
// FULL_JDK // FULL_JDK
-1
View File
@@ -2,7 +2,6 @@
// WASM_MUTE_REASON: STDLIB_COLLECTIONS // WASM_MUTE_REASON: STDLIB_COLLECTIONS
// WITH_RUNTIME // WITH_RUNTIME
// KJS_WITH_FULL_RUNTIME // KJS_WITH_FULL_RUNTIME
// IGNORE_BACKEND_FIR: JVM_IR
open class A : HashMap<String, String>() open class A : HashMap<String, String>()
@@ -1,4 +1,3 @@
// IGNORE_BACKEND_FIR: JVM_IR
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// FILE: Test.java // FILE: Test.java
@@ -1,6 +1,5 @@
// DONT_TARGET_EXACT_BACKEND: WASM // DONT_TARGET_EXACT_BACKEND: WASM
// WASM_MUTE_REASON: STDLIB_COLLECTIONS // WASM_MUTE_REASON: STDLIB_COLLECTIONS
// IGNORE_BACKEND_FIR: JVM_IR
// KJS_WITH_FULL_RUNTIME // KJS_WITH_FULL_RUNTIME
// IGNORE_BACKEND: NATIVE // IGNORE_BACKEND: NATIVE
@@ -1,6 +1,5 @@
// DONT_TARGET_EXACT_BACKEND: WASM // DONT_TARGET_EXACT_BACKEND: WASM
// WASM_MUTE_REASON: STDLIB_COLLECTIONS // WASM_MUTE_REASON: STDLIB_COLLECTIONS
// IGNORE_BACKEND_FIR: JVM_IR
// KJS_WITH_FULL_RUNTIME // KJS_WITH_FULL_RUNTIME
// IGNORE_BACKEND: NATIVE // IGNORE_BACKEND: NATIVE
@@ -1,4 +1,3 @@
// IGNORE_BACKEND_FIR: JVM_IR
abstract class A1 : Collection<String> { abstract class A1 : Collection<String> {
override val size: Int get() = 1 override val size: Int get() = 1
} }