Add Java symbol resolve in default star importing scope
Related to KT-24098
This commit is contained in:
@@ -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
|
||||
|
||||
+4
@@ -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) }
|
||||
}
|
||||
|
||||
+3
@@ -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
|
||||
|
||||
+1
-4
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user