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,7 +58,8 @@ class JavaClassUseSiteMemberScope(
setterSymbol: FirNamedFunctionSymbol?, setterSymbol: FirNamedFunctionSymbol?,
syntheticPropertyName: Name, syntheticPropertyName: Name,
): FirAccessorSymbol { ): FirAccessorSymbol {
return buildSyntheticProperty { return accessorByNameMap.getOrPut(syntheticPropertyName) {
buildSyntheticProperty {
session = this@JavaClassUseSiteMemberScope.session session = this@JavaClassUseSiteMemberScope.session
name = syntheticPropertyName name = syntheticPropertyName
symbol = FirAccessorSymbol( symbol = FirAccessorSymbol(
@@ -68,6 +70,7 @@ class JavaClassUseSiteMemberScope(
delegateSetter = setterSymbol?.fir delegateSetter = setterSymbol?.fir
}.symbol }.symbol
} }
}
override fun processPropertiesByName(name: Name, processor: (FirVariableSymbol<*>) -> Unit) { override fun processPropertiesByName(name: Name, processor: (FirVariableSymbol<*>) -> Unit) {
val fields = mutableSetOf<FirCallableSymbol<*>>() val fields = mutableSetOf<FirCallableSymbol<*>>()
-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
} }