[FIR] Do not process constructors in super-type scopes

This commit is contained in:
Mikhail Glukhikh
2020-01-29 13:24:14 +03:00
parent b4267558d7
commit e43a57bdee
6 changed files with 16 additions and 17 deletions
@@ -14,10 +14,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.scopes.FirOverrideChecker
import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.symbols.impl.FirClassifierSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.name.Name
abstract class AbstractFirUseSiteMemberScope(
@@ -48,9 +45,11 @@ abstract class AbstractFirUseSiteMemberScope(
}
superTypesScope.processFunctionsByName(name) {
val overriddenBy = it.getOverridden(overrideCandidates)
if (overriddenBy == null) {
add(it)
if (it !is FirConstructorSymbol) {
val overriddenBy = it.getOverridden(overrideCandidates)
if (overriddenBy == null) {
add(it)
}
}
}
}
@@ -32,15 +32,15 @@ import util.HashSet
class LinkedHashMap<K, V> : java.util.LinkedHashMap<K, V>()
fun test_1() {
val map = <!AMBIGUITY!>HashMap<!><Int, Int>() // <- should be util.HashMap
val map = HashMap<Int, Int>() // <- should be util.HashMap
}
fun test_2() {
val set = <!AMBIGUITY!>HashSet<!><Int>() // <- should be util.HashSet
val set = HashSet<Int>() // <- should be util.HashSet
}
fun test_3() {
val list = <!AMBIGUITY!>ArrayList<!><Int>() // <- should be foo.ArrayList
val list = ArrayList<Int>() // <- should be foo.ArrayList
}
fun test_4() {
@@ -20,13 +20,13 @@ FILE: main.kt
}
public final fun test_1(): R|kotlin/Unit| {
lval map: <ERROR TYPE REF: Ambiguity: HashMap, [util/HashMap.HashMap, java/util/HashMap.HashMap]> = <Ambiguity: HashMap, [util/HashMap.HashMap, java/util/HashMap.HashMap]>#<R|kotlin/Int|, R|kotlin/Int|>()
lval map: R|util/HashMap<kotlin/Int, kotlin/Int>| = R|util/HashMap.HashMap|<R|kotlin/Int|, R|kotlin/Int|>()
}
public final fun test_2(): R|kotlin/Unit| {
lval set: <ERROR TYPE REF: Ambiguity: HashSet, [util/HashSet.HashSet, java/util/HashSet.HashSet]> = <Ambiguity: HashSet, [util/HashSet.HashSet, java/util/HashSet.HashSet]>#<R|kotlin/Int|>()
lval set: R|util/HashSet<kotlin/Int>| = R|util/HashSet.HashSet|<R|kotlin/Int|>()
}
public final fun test_3(): R|kotlin/Unit| {
lval list: <ERROR TYPE REF: Ambiguity: ArrayList, [foo/ArrayList.ArrayList, java/util/ArrayList.ArrayList]> = <Ambiguity: ArrayList, [foo/ArrayList.ArrayList, java/util/ArrayList.ArrayList]>#<R|kotlin/Int|>()
lval list: R|foo/ArrayList<kotlin/Int>| = R|foo/ArrayList.ArrayList|<R|kotlin/Int|>()
}
public final fun test_4(): R|kotlin/Unit| {
lval list: R|foo/LinkedList<kotlin/Int>| = R|foo/LinkedList.LinkedList|<R|kotlin/Int|>()
@@ -1,5 +1,5 @@
// FILE: K1.kt
class K2: <!AMBIGUITY!>J1<!>() {
class K2: J1() {
class Q : Nested()
fun bar() {
<!UNRESOLVED_REFERENCE!>foo<!>()
@@ -6,6 +6,6 @@ class J extends K {
// FILE: K.kt
class K : <!AMBIGUITY!>J<!>() {
class K : J() {
fun bar() {}
}
@@ -1,6 +1,6 @@
// FILE: I.kt
open class I : <!AMBIGUITY!>K<!>() {
open class I : K() {
fun foo() {}
}
@@ -12,6 +12,6 @@ class J extends I {
// FILE: K.kt
open class K : <!AMBIGUITY!>J<!>() {
open class K : J() {
fun baz() {}
}