Refactor: Provide API to create KtLightClassForFacade by synthetic file
This commit is contained in:
@@ -49,7 +49,7 @@ class KtLightClassForFacade private constructor(
|
|||||||
private inner class FacadeCacheData {
|
private inner class FacadeCacheData {
|
||||||
val cache = object : SLRUCache<StubCacheKey, CachedValue<KotlinFacadeLightClassData>>(20, 30) {
|
val cache = object : SLRUCache<StubCacheKey, CachedValue<KotlinFacadeLightClassData>>(20, 30) {
|
||||||
override fun createValue(key: StubCacheKey): CachedValue<KotlinFacadeLightClassData> {
|
override fun createValue(key: StubCacheKey): CachedValue<KotlinFacadeLightClassData> {
|
||||||
val stubProvider = LightClassDataProviderForFileFacade(project, key.fqName, key.searchScope)
|
val stubProvider = LightClassDataProviderForFileFacade.ByProjectSource(project, key.fqName, key.searchScope)
|
||||||
return CachedValuesManager.getManager(project).createCachedValue<KotlinFacadeLightClassData>(stubProvider, /*trackValue = */false)
|
return CachedValuesManager.getManager(project).createCachedValue<KotlinFacadeLightClassData>(stubProvider, /*trackValue = */false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -199,5 +199,18 @@ class KtLightClassForFacade private constructor(
|
|||||||
val lightClassDataCache = FacadeStubCache.getInstance(manager.project).get(facadeClassFqName, searchScope)
|
val lightClassDataCache = FacadeStubCache.getInstance(manager.project).get(facadeClassFqName, searchScope)
|
||||||
return KtLightClassForFacade(manager, facadeClassFqName, lightClassDataCache, files)
|
return KtLightClassForFacade(manager, facadeClassFqName, lightClassDataCache, files)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun createForSyntheticFile(
|
||||||
|
manager: PsiManager,
|
||||||
|
facadeClassFqName: FqName,
|
||||||
|
file: KtFile
|
||||||
|
): KtLightClassForFacade {
|
||||||
|
// TODO: refactor, using cached value doesn't make sense for this case
|
||||||
|
val cachedValue = CachedValuesManager.getManager(manager.project).
|
||||||
|
createCachedValue<KotlinFacadeLightClassData>(
|
||||||
|
LightClassDataProviderForFileFacade.ByFile(manager.project, facadeClassFqName, file), /*trackValue = */false
|
||||||
|
)
|
||||||
|
return KtLightClassForFacade(manager, facadeClassFqName, cachedValue, listOf(file))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2015 JetBrains s.r.o.
|
* Copyright 2010-2016 JetBrains s.r.o.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -281,12 +281,9 @@ class LightClassDataProviderForClassOrObject(private val classOrObject: KtClassO
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class LightClassDataProviderForFileFacade(
|
sealed class LightClassDataProviderForFileFacade private constructor(
|
||||||
private val project: Project, private val facadeFqName: FqName, private val searchScope: GlobalSearchScope
|
protected val project: Project, protected val facadeFqName: FqName
|
||||||
) : LightClassDataProvider<KotlinFacadeLightClassData>(project) {
|
) : LightClassDataProvider<KotlinFacadeLightClassData>(project) {
|
||||||
override val files: Collection<KtFile>
|
|
||||||
get() = LightClassGenerationSupport.getInstance(project).findFilesForFacade(facadeFqName, searchScope)
|
|
||||||
|
|
||||||
override val packageFqName: FqName
|
override val packageFqName: FqName
|
||||||
get() = facadeFqName.parent()
|
get() = facadeFqName.parent()
|
||||||
|
|
||||||
@@ -342,6 +339,26 @@ class LightClassDataProviderForFileFacade(
|
|||||||
override fun toString(): String {
|
override fun toString(): String {
|
||||||
return this.javaClass.name + " for $facadeFqName"
|
return this.javaClass.name + " for $facadeFqName"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// create delegate by relevant files in project source using LightClassGenerationSupport
|
||||||
|
class ByProjectSource(
|
||||||
|
project: Project,
|
||||||
|
facadeFqName: FqName,
|
||||||
|
private val searchScope: GlobalSearchScope
|
||||||
|
) : LightClassDataProviderForFileFacade(project, facadeFqName) {
|
||||||
|
override val files: Collection<KtFile>
|
||||||
|
get() = LightClassGenerationSupport.getInstance(project).findFilesForFacade(facadeFqName, searchScope)
|
||||||
|
}
|
||||||
|
|
||||||
|
// create delegate by single file
|
||||||
|
class ByFile(
|
||||||
|
project: Project,
|
||||||
|
facadeFqName: FqName,
|
||||||
|
private val file: KtFile
|
||||||
|
) : LightClassDataProviderForFileFacade(project, facadeFqName) {
|
||||||
|
override val files: Collection<KtFile>
|
||||||
|
get() = listOf(file)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user