[FIR] Allow more than one function with some name in local scope
This commit is contained in:
@@ -14,13 +14,15 @@ import org.jetbrains.kotlin.name.Name
|
||||
class FirLocalScope : FirScope() {
|
||||
|
||||
val properties = mutableMapOf<Name, FirVariableSymbol<*>>()
|
||||
val functions = mutableMapOf<Name, FirFunctionSymbol<*>>()
|
||||
val functions = mutableMapOf<Name, MutableList<FirFunctionSymbol<*>>>()
|
||||
val classes = mutableMapOf<Name, FirRegularClassSymbol>()
|
||||
|
||||
fun storeDeclaration(declaration: FirNamedDeclaration) {
|
||||
when (declaration) {
|
||||
is FirVariable<*> -> properties[declaration.name] = declaration.symbol
|
||||
is FirSimpleFunction -> functions[declaration.name] = declaration.symbol as FirNamedFunctionSymbol
|
||||
is FirSimpleFunction -> functions.getOrPut(declaration.name) {
|
||||
mutableListOf()
|
||||
}.add(declaration.symbol as FirNamedFunctionSymbol)
|
||||
is FirRegularClass -> classes[declaration.name] = declaration.symbol
|
||||
}
|
||||
}
|
||||
@@ -30,11 +32,9 @@ class FirLocalScope : FirScope() {
|
||||
}
|
||||
|
||||
override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> Unit) {
|
||||
val function = functions[name]
|
||||
if (function != null) {
|
||||
for (function in functions[name].orEmpty()) {
|
||||
processor(function)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
override fun processPropertiesByName(name: Name, processor: (FirCallableSymbol<*>) -> Unit) {
|
||||
|
||||
@@ -5,11 +5,11 @@ interface A {
|
||||
fun test_1() {
|
||||
fun Int.transform(): Int = 1
|
||||
fun A.transform(): Int {
|
||||
return x.<!INAPPLICABLE_CANDIDATE!>transform<!>()
|
||||
return x.transform()
|
||||
}
|
||||
|
||||
val y = 1
|
||||
y.<!INAPPLICABLE_CANDIDATE!>transform<!>()
|
||||
y.transform()
|
||||
}
|
||||
|
||||
fun test_2() {
|
||||
|
||||
@@ -10,11 +10,11 @@ FILE: localFunctionsHiding.kt
|
||||
}
|
||||
|
||||
local final fun R|A|.transform(): R|kotlin/Int| {
|
||||
^transform this@R|<local>/transform|.R|/A.x|.<Inapplicable(WRONG_RECEIVER): [<local>/transform]>#()
|
||||
^transform this@R|<local>/transform|.R|/A.x|.R|<local>/transform|()
|
||||
}
|
||||
|
||||
lval y: R|kotlin/Int| = Int(1)
|
||||
R|<local>/y|.<Inapplicable(WRONG_RECEIVER): [<local>/transform]>#()
|
||||
R|<local>/y|.R|<local>/transform|()
|
||||
}
|
||||
public final fun test_2(): R|kotlin/Unit| {
|
||||
local final fun R|kotlin/Int|.transform(): R|kotlin/Int| {
|
||||
|
||||
Reference in New Issue
Block a user