Add Java symbol resolve in default star importing scope

Related to KT-24098
This commit is contained in:
Mikhail Glukhikh
2018-04-05 13:14:13 +03:00
parent 5c572aa56e
commit 98abe08056
14 changed files with 104 additions and 10 deletions
@@ -16,6 +16,9 @@ import org.jetbrains.kotlin.resolve.jvm.KotlinJavaPsiFacade
class JavaSymbolProvider(val project: Project) : FirSymbolProvider {
override val doesLookupInFir: Boolean
get() = false
// TODO: Concrete scope here
private val allScope = GlobalSearchScope.allScope(project)
@@ -13,6 +13,8 @@ import org.jetbrains.kotlin.name.FqName
interface FirSymbolProvider {
val doesLookupInFir: Boolean
fun getSymbolByFqName(classId: ClassId): ConeSymbol?
fun getPackage(fqName: FqName): FqName? // TODO: Replace to symbol sometime
@@ -12,6 +12,10 @@ import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult
class FirCompositeSymbolProvider(val providers: List<FirSymbolProvider>) : FirSymbolProvider {
override val doesLookupInFir: Boolean
get() = providers.any(FirSymbolProvider::doesLookupInFir)
override fun getPackage(fqName: FqName): FqName? {
return providers.firstNotNullResult { it.getPackage(fqName) }
}
@@ -25,6 +25,9 @@ import java.io.InputStream
class FirLibrarySymbolProviderImpl(val session: FirSession) : FirSymbolProvider {
override val doesLookupInFir: Boolean
get() = false
private class BuiltInsPackageFragment(stream: InputStream, val fqName: FqName) {
lateinit var version: BuiltInsBinaryVersion
@@ -18,6 +18,10 @@ import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
class FirProviderImpl(val session: FirSession) : FirProvider {
override val doesLookupInFir: Boolean
get() = true
override fun getFirClassifierBySymbol(symbol: ConeSymbol): FirNamedDeclaration? {
return when (symbol) {
is FirBasedSymbol<*> -> symbol.fir as? FirNamedDeclaration
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirResolvedImport
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
import org.jetbrains.kotlin.fir.resolve.impl.FirCompositeSymbolProvider
import org.jetbrains.kotlin.fir.resolve.impl.FirLibrarySymbolProviderImpl
import org.jetbrains.kotlin.fir.scopes.FirPosition
import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.symbols.ConeSymbol
@@ -20,11 +19,9 @@ abstract class FirAbstractStarImportingScope(val session: FirSession, lookupInFi
protected abstract val starImports: List<FirResolvedImport>
// TODO: Abstractify this optimization
val provider = FirSymbolProvider.getInstance(session).let {
when {
it is FirCompositeSymbolProvider && !lookupInFir -> it.providers.first { it is FirLibrarySymbolProviderImpl }
it is FirCompositeSymbolProvider && !lookupInFir -> FirCompositeSymbolProvider(it.providers.filter { !it.doesLookupInFir })
else -> it
}
}