FIR: support callable symbols in dependencies provider

This breaks mppFakeOverrides test because of bug in FIR fake overrides
This commit is contained in:
Mikhail Glukhikh
2019-03-04 13:08:27 +03:00
parent 33fb3d154b
commit 6c8aba8039
6 changed files with 25 additions and 17 deletions
@@ -17,11 +17,6 @@ import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
class FirDependenciesSymbolProviderImpl(val session: FirSession) : AbstractFirSymbolProvider() {
override fun getCallableSymbols(callableId: CallableId): List<ConeCallableSymbol> {
// TODO
return emptyList()
}
private val dependencyProviders by lazy {
val moduleInfo = session.moduleInfo ?: return@lazy emptyList()
moduleInfo.dependenciesWithoutSelf().mapNotNull {
@@ -29,6 +24,17 @@ class FirDependenciesSymbolProviderImpl(val session: FirSession) : AbstractFirSy
}.toList()
}
override fun getCallableSymbols(callableId: CallableId): List<ConeCallableSymbol> {
return callableCache.lookupCacheOrCalculate(callableId) {
for (provider in dependencyProviders) {
provider.getCallableSymbols(callableId).let {
if (it.isNotEmpty()) return@lookupCacheOrCalculate it
}
}
emptyList()
}.orEmpty()
}
override fun getClassLikeSymbolByFqName(classId: ClassId): ConeClassLikeSymbol? {
return classCache.lookupCacheOrCalculate(classId) {
for (provider in dependencyProviders) {
@@ -1,10 +1,10 @@
@R|java/lang/annotation/Documented|() @R|javax/annotation/meta/TypeQualifierNickname|() @R|javax/annotation/Nonnull|(<Strange Java enum value: javax/annotation/meta/When.NEVER>#()) @R|java/lang/annotation/Retention|(<Strange Java enum value: java/lang/annotation/RetentionPolicy.RUNTIME>#()) public abstract annotation class MyNullable : R|java/lang/annotation/Annotation| {
@R|java/lang/annotation/Documented|() @R|javax/annotation/meta/TypeQualifierNickname|() @R|javax/annotation/Nonnull|(R|javax/annotation/meta/When.NEVER|()) @R|java/lang/annotation/Retention|(R|java/lang/annotation/RetentionPolicy.RUNTIME|()) public abstract annotation class MyNullable : R|java/lang/annotation/Annotation| {
}
public open class NonNullNever : R|java/lang/Object| {
@R|javax/annotation/Nonnull|(<Strange Java enum value: javax/annotation/meta/When.NEVER>#()) public open property field(var): R|ft<kotlin/String, kotlin/String>|
public get(): R|ft<kotlin/String, kotlin/String>|
public set(value: R|ft<kotlin/String, kotlin/String>|): kotlin/Unit
@R|javax/annotation/Nonnull|(R|javax/annotation/meta/When.NEVER|()) public open property field(var): R|ft<kotlin/String?, kotlin/String?>|?
public get(): R|ft<kotlin/String?, kotlin/String?>|?
public set(value: R|ft<kotlin/String?, kotlin/String?>|?): kotlin/Unit
@R|MyNullable|() public open operator function foo(@R|javax/annotation/Nonnull|(<Strange Java enum value: javax/annotation/meta/When.NEVER>#()) x: R|ft<kotlin/String, kotlin/String>|, @R|MyNullable|() y: R|ft<kotlin/CharSequence, kotlin/CharSequence>|): R|ft<kotlin/String, kotlin/String>|
@R|MyNullable|() public open operator function foo(@R|javax/annotation/Nonnull|(R|javax/annotation/meta/When.NEVER|()) x: R|ft<kotlin/String?, kotlin/String?>|?, @R|MyNullable|() y: R|ft<kotlin/CharSequence?, kotlin/CharSequence?>|?): R|ft<kotlin/String?, kotlin/String?>|?
}
@@ -1,9 +1,9 @@
public open class Strange : R|java/lang/Object| {
@R|javax/annotation/Nonnull|(<Strange Java enum value: javax/annotation/meta/When.UNKNOWN>#()) public open property field(var): R|ft<kotlin/String, kotlin/String>|
public get(): R|ft<kotlin/String, kotlin/String>|
public set(value: R|ft<kotlin/String, kotlin/String>|): kotlin/Unit
@R|javax/annotation/Nonnull|(R|javax/annotation/meta/When.UNKNOWN|()) public open property field(var): R|ft<kotlin/String, kotlin/String?>|!
public get(): R|ft<kotlin/String, kotlin/String?>|!
public set(value: R|ft<kotlin/String, kotlin/String?>|!): kotlin/Unit
@R|javax/annotation/Nonnull|(<Strange Java enum value: javax/annotation/meta/When.MAYBE>#()) public open operator function foo(@R|javax/annotation/Nonnull|(<Strange Java enum value: javax/annotation/meta/When.ALWAYS>#()) x: R|ft<kotlin/String, kotlin/String>|, @R|javax/annotation/Nonnull|(<Strange Java enum value: javax/annotation/meta/When.NEVER>#()) y: R|ft<kotlin/CharSequence, kotlin/CharSequence>|): R|ft<kotlin/String, kotlin/String>|
@R|javax/annotation/Nonnull|(R|javax/annotation/meta/When.MAYBE|()) public open operator function foo(@R|javax/annotation/Nonnull|(R|javax/annotation/meta/When.ALWAYS|()) x: R|ft<kotlin/String, kotlin/String>|, @R|javax/annotation/Nonnull|(R|javax/annotation/meta/When.NEVER|()) y: R|ft<kotlin/CharSequence?, kotlin/CharSequence?>|?): R|ft<kotlin/String?, kotlin/String?>|?
@R|javax/annotation/Nonnull|() public open operator function bar(): R|ft<kotlin/String, kotlin/String>|
@@ -15,4 +15,6 @@ public final enum class StaticMembersInEnum : R|java/lang/Enum<test/StaticMember
public open static operator function valueOf(x: R|kotlin/Int|): R|kotlin/Unit|
public open static operator function valueOf(<anonymous Java parameter>: R|ft<java/lang/Class<ft<T, T?>>, java/lang/Class<ft<T, T?>>?>|!, <anonymous Java parameter>: R|ft<kotlin/String, kotlin/String?>|!): R|ft<T, T?>|!
}
+1 -1
View File
@@ -15,7 +15,7 @@ FILE: jvm.kt
public final function test(): R|kotlin/Unit| {
R|FakeOverride</A.foo: R|kotlin/Unit|>|(String())
R|FakeOverride</A.bar: R|T|>|(String())
<Ambiguity: bar, [/C.bar, /A.bar]>#(String())
}
}
+2 -2
View File
@@ -27,8 +27,8 @@ FILE: jvm.kt
public constructor(): super<R|Wrapper|>()
public final function use(): R|kotlin/Unit| {
<Unresolved name: list>#.<Unresolved name: get>#(Int(1))
<Unresolved name: list>#.<Unresolved name: set>#(Int(2), Int(3))
R|/Wrapper.list|.<Unresolved name: get>#(Int(1))
R|/Wrapper.list|.<Unresolved name: set>#(Int(2), Int(3))
}
}