Improve package caching in KotlinJavaPsiFacade
^KT-33394 Fixed
This commit is contained in:
+15
-4
@@ -23,6 +23,7 @@ import com.intellij.psi.search.GlobalSearchScope
|
||||
import org.jetbrains.kotlin.idea.KotlinFileType
|
||||
import org.jetbrains.kotlin.resolve.BindingTrace
|
||||
import org.jetbrains.kotlin.resolve.CodeAnalyzerInitializer
|
||||
import org.jetbrains.kotlin.resolve.jvm.TopPackageNamesProvider
|
||||
import org.jetbrains.kotlin.resolve.lazy.KotlinCodeAnalyzer
|
||||
import javax.annotation.PostConstruct
|
||||
import javax.inject.Inject
|
||||
@@ -32,10 +33,14 @@ abstract class AbstractJavaClassFinder : JavaClassFinder {
|
||||
protected lateinit var project: Project
|
||||
protected lateinit var javaSearchScope: GlobalSearchScope
|
||||
|
||||
|
||||
@Inject
|
||||
fun setScope(scope: GlobalSearchScope) {
|
||||
javaSearchScope = FilterOutKotlinSourceFilesScope(scope)
|
||||
javaSearchScope =
|
||||
if (scope == GlobalSearchScope.EMPTY_SCOPE) {
|
||||
GlobalSearchScope.EMPTY_SCOPE
|
||||
} else {
|
||||
FilterOutKotlinSourceFilesScope(scope)
|
||||
}
|
||||
}
|
||||
|
||||
@Inject
|
||||
@@ -48,9 +53,15 @@ abstract class AbstractJavaClassFinder : JavaClassFinder {
|
||||
CodeAnalyzerInitializer.getInstance(project).initialize(trace, codeAnalyzer.moduleDescriptor, codeAnalyzer)
|
||||
}
|
||||
|
||||
inner class FilterOutKotlinSourceFilesScope(baseScope: GlobalSearchScope) : DelegatingGlobalSearchScope(baseScope) {
|
||||
inner class FilterOutKotlinSourceFilesScope(baseScope: GlobalSearchScope) : DelegatingGlobalSearchScope(baseScope),
|
||||
TopPackageNamesProvider {
|
||||
|
||||
override fun contains(file: VirtualFile) = myBaseScope.contains(file) && (file.isDirectory || file.fileType !== KotlinFileType.INSTANCE)
|
||||
override val topPackageNames: Set<String>?
|
||||
get() = (myBaseScope as? TopPackageNamesProvider)?.topPackageNames
|
||||
|
||||
override fun contains(file: VirtualFile) =
|
||||
(file.isDirectory || file.fileType !== KotlinFileType.INSTANCE) &&
|
||||
myBaseScope.contains(file)
|
||||
|
||||
val base: GlobalSearchScope = myBaseScope
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.load.java
|
||||
|
||||
import com.intellij.openapi.project.Project
|
||||
import org.jetbrains.kotlin.load.java.structure.JavaClass
|
||||
import org.jetbrains.kotlin.load.java.structure.JavaPackage
|
||||
import org.jetbrains.kotlin.load.java.structure.impl.JavaPackageImpl
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.resolve.jvm.KotlinJavaPsiFacade
|
||||
@@ -33,11 +34,16 @@ class JavaClassFinderImpl : AbstractJavaClassFinder() {
|
||||
javaFacade = KotlinJavaPsiFacade.getInstance(project)
|
||||
}
|
||||
|
||||
override fun findClass(request: JavaClassFinder.Request): JavaClass? = javaFacade.findClass(request, javaSearchScope)
|
||||
override fun findClass(request: JavaClassFinder.Request): JavaClass? {
|
||||
return javaFacade.findClass(request, javaSearchScope)
|
||||
}
|
||||
|
||||
override fun findPackage(fqName: FqName) =
|
||||
javaFacade.findPackage(fqName.asString(), javaSearchScope)?.let { JavaPackageImpl(it, javaSearchScope) }
|
||||
override fun findPackage(fqName: FqName): JavaPackage? {
|
||||
return javaFacade.findPackage(fqName.asString(), javaSearchScope)?.let { JavaPackageImpl(it, javaSearchScope) }
|
||||
}
|
||||
|
||||
override fun knownClassNamesInPackage(packageFqName: FqName): Set<String>? = javaFacade.knownClassNamesInPackage(packageFqName)
|
||||
override fun knownClassNamesInPackage(packageFqName: FqName): Set<String>? {
|
||||
return javaFacade.knownClassNamesInPackage(packageFqName, javaSearchScope)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+3
-4
@@ -38,6 +38,7 @@ import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
||||
import org.jetbrains.kotlin.serialization.deserialization.DeserializationComponents
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPackageMemberScope
|
||||
import org.jetbrains.kotlin.storage.StorageManager
|
||||
import org.jetbrains.kotlin.utils.addIfNotNull
|
||||
import org.jetbrains.kotlin.utils.keysToMap
|
||||
|
||||
class IncrementalPackageFragmentProvider(
|
||||
@@ -56,10 +57,8 @@ class IncrementalPackageFragmentProvider(
|
||||
|
||||
override fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean): Collection<FqName> = emptySet()
|
||||
|
||||
override fun getPackageFragments(fqName: FqName): List<PackageFragmentDescriptor> {
|
||||
return listOfNotNull(fqNameToPackageFragment[fqName])
|
||||
}
|
||||
|
||||
override fun collectPackageFragments(fqName: FqName, packageFragments: MutableCollection<PackageFragmentDescriptor>) =
|
||||
packageFragments.addIfNotNull(fqNameToPackageFragment[fqName])
|
||||
|
||||
inner class IncrementalPackageFragment(fqName: FqName) : PackageFragmentDescriptorImpl(moduleDescriptor, fqName) {
|
||||
val target: TargetId
|
||||
|
||||
+3
-2
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.storage.NotNullLazyValue
|
||||
import org.jetbrains.kotlin.storage.StorageManager
|
||||
import org.jetbrains.kotlin.storage.getValue
|
||||
import org.jetbrains.kotlin.utils.Printer
|
||||
import org.jetbrains.kotlin.utils.addIfNotNull
|
||||
|
||||
class OptionalAnnotationPackageFragmentProvider(
|
||||
module: ModuleDescriptor,
|
||||
@@ -79,8 +80,8 @@ class OptionalAnnotationPackageFragmentProvider(
|
||||
}
|
||||
}
|
||||
|
||||
override fun getPackageFragments(fqName: FqName): List<PackageFragmentDescriptor> =
|
||||
packages[fqName]?.let(::listOf).orEmpty()
|
||||
override fun collectPackageFragments(fqName: FqName, packageFragments: MutableCollection<PackageFragmentDescriptor>) =
|
||||
packageFragments.addIfNotNull(packages[fqName])
|
||||
|
||||
override fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean): Collection<FqName> =
|
||||
emptyList()
|
||||
|
||||
Reference in New Issue
Block a user