[FIR IDE] Initial FIR LightClass implementation
This commit is contained in:
committed by
Ilya Kirillov
parent
c881cf7af6
commit
b742a475ff
+18
-6
@@ -36,9 +36,21 @@ import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
||||
import org.jetbrains.kotlin.utils.sure
|
||||
|
||||
class IDEKotlinAsJavaSupport(private val project: Project) : KotlinAsJavaSupport() {
|
||||
open class IDEKotlinAsJavaSupport(private val project: Project) : KotlinAsJavaSupport() {
|
||||
private val psiManager: PsiManager = PsiManager.getInstance(project)
|
||||
|
||||
protected open fun createLightClassForSourceDeclaration(classOrObject: KtClassOrObject): KtLightClass? =
|
||||
KtLightClassForSourceDeclaration.create(classOrObject)
|
||||
|
||||
protected open fun createLightClassForScript(script: KtScript): KtLightClass? =
|
||||
KtLightClassForScript.create(script)
|
||||
|
||||
protected open fun createLightClassForFacade(
|
||||
manager: PsiManager,
|
||||
facadeClassFqName: FqName,
|
||||
searchScope: GlobalSearchScope
|
||||
): KtLightClass? = KtLightClassForFacade.createForFacade(psiManager, facadeClassFqName, searchScope)
|
||||
|
||||
override fun getFacadeNames(packageFqName: FqName, scope: GlobalSearchScope): Collection<String> {
|
||||
val facadeFilesInPackage = project.runReadActionInSmartMode {
|
||||
KotlinFileFacadeClassByPackageIndex.getInstance().get(packageFqName.asString(), project, scope)
|
||||
@@ -139,7 +151,7 @@ class IDEKotlinAsJavaSupport(private val project: Project) : KotlinAsJavaSupport
|
||||
if (virtualFile != null) {
|
||||
when {
|
||||
ProjectRootsUtil.isProjectSourceFile(project, virtualFile) ->
|
||||
return KtLightClassForSourceDeclaration.create(classOrObject)
|
||||
return createLightClassForSourceDeclaration(classOrObject)
|
||||
ProjectRootsUtil.isLibraryClassFile(project, virtualFile) ->
|
||||
return getLightClassForDecompiledClassOrObject(classOrObject)
|
||||
ProjectRootsUtil.isLibrarySourceFile(project, virtualFile) ->
|
||||
@@ -152,17 +164,17 @@ class IDEKotlinAsJavaSupport(private val project: Project) : KotlinAsJavaSupport
|
||||
classOrObject.containingFile.originalFile.virtualFile != null
|
||||
) {
|
||||
// explicit request to create light class from dummy.kt
|
||||
return KtLightClassForSourceDeclaration.create(classOrObject)
|
||||
return createLightClassForSourceDeclaration(classOrObject)
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
override fun getLightClassForScript(script: KtScript): KtLightClassForScript? {
|
||||
override fun getLightClassForScript(script: KtScript): KtLightClass? {
|
||||
if (!script.isValid) {
|
||||
return null
|
||||
}
|
||||
|
||||
return KtLightClassForScript.create(script)
|
||||
return createLightClassForScript(script)
|
||||
}
|
||||
|
||||
override fun getFacadeClasses(facadeFqName: FqName, scope: GlobalSearchScope): Collection<PsiClass> {
|
||||
@@ -229,7 +241,7 @@ class IDEKotlinAsJavaSupport(private val project: Project) : KotlinAsJavaSupport
|
||||
|
||||
private fun tryCreateFacadesForSourceFiles(moduleInfo: IdeaModuleInfo, facadeFqName: FqName): PsiClass? {
|
||||
if (moduleInfo !is ModuleSourceInfo && moduleInfo !is PlatformModuleInfo) return null
|
||||
return KtLightClassForFacade.createForFacade(psiManager, facadeFqName, moduleInfo.contentScope())
|
||||
return createLightClassForFacade(psiManager, facadeFqName, moduleInfo.contentScope())
|
||||
}
|
||||
|
||||
override fun findFilesForFacade(facadeFqName: FqName, scope: GlobalSearchScope): Collection<KtFile> {
|
||||
|
||||
Reference in New Issue
Block a user