Rename KotlinJavaFileStubProvider and remove StubGenerationStrategy class
This commit is contained in:
+1
-1
@@ -429,7 +429,7 @@ public open class KtLightClassForExplicitDeclaration(
|
|||||||
var value = outermostClassOrObject.getUserData(JAVA_API_STUB)
|
var value = outermostClassOrObject.getUserData(JAVA_API_STUB)
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
value = CachedValuesManager.getManager(classOrObject.project).createCachedValue(
|
value = CachedValuesManager.getManager(classOrObject.project).createCachedValue(
|
||||||
KotlinJavaFileStubProvider.createForDeclaredClass(outermostClassOrObject), false)
|
LightClassDataProviderForClassOrObject(outermostClassOrObject), false)
|
||||||
value = outermostClassOrObject.putUserDataIfAbsent(JAVA_API_STUB, value)!!
|
value = outermostClassOrObject.putUserDataIfAbsent(JAVA_API_STUB, value)!!
|
||||||
}
|
}
|
||||||
return value
|
return value
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ public 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 = KotlinJavaFileStubProvider.createForFacadeClass(project, key.fqName, key.searchScope)
|
val stubProvider = LightClassDataProviderForFileFacade(project, key.fqName, key.searchScope)
|
||||||
return CachedValuesManager.getManager(project).createCachedValue<KotlinFacadeLightClassData>(stubProvider, /*trackValue = */false)
|
return CachedValuesManager.getManager(project).createCachedValue<KotlinFacadeLightClassData>(stubProvider, /*trackValue = */false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+30
-42
@@ -56,19 +56,27 @@ import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics
|
|||||||
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
|
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
|
||||||
import org.jetbrains.kotlin.utils.sure
|
import org.jetbrains.kotlin.utils.sure
|
||||||
|
|
||||||
class KotlinJavaFileStubProvider<T : WithFileStubAndExtraDiagnostics> private constructor(
|
abstract class LightClassDataProvider<T : WithFileStubAndExtraDiagnostics>(
|
||||||
private val project: Project,
|
private val project: Project
|
||||||
private val local: Boolean,
|
|
||||||
private val stubGenerationStrategy: StubGenerationStrategy<T>
|
|
||||||
) : CachedValueProvider<T> {
|
) : CachedValueProvider<T> {
|
||||||
|
|
||||||
|
abstract val files: Collection<KtFile>
|
||||||
|
abstract val packageFqName: FqName
|
||||||
|
|
||||||
|
abstract fun getContext(files: Collection<KtFile>): LightClassConstructionContext
|
||||||
|
abstract fun createLightClassData(javaFileStub: PsiJavaFileStub, bindingContext: BindingContext, extraDiagnostics: Diagnostics): T
|
||||||
|
|
||||||
|
abstract val generateClassFilter: GenerationState.GenerateClassFilter
|
||||||
|
abstract fun generate(state: GenerationState, files: Collection<KtFile>)
|
||||||
|
abstract val isLocal: Boolean
|
||||||
|
|
||||||
override fun compute(): CachedValueProvider.Result<T>? {
|
override fun compute(): CachedValueProvider.Result<T>? {
|
||||||
val packageFqName = stubGenerationStrategy.packageFqName
|
val packageFqName = packageFqName
|
||||||
val files = stubGenerationStrategy.files
|
val files = files
|
||||||
|
|
||||||
checkForBuiltIns(packageFqName, files)
|
checkForBuiltIns(packageFqName, files)
|
||||||
|
|
||||||
val context = stubGenerationStrategy.getContext(files)
|
val context = getContext(files)
|
||||||
|
|
||||||
val javaFileStub = createJavaFileStub(packageFqName, files)
|
val javaFileStub = createJavaFileStub(packageFqName, files)
|
||||||
val bindingContext: BindingContext
|
val bindingContext: BindingContext
|
||||||
@@ -84,7 +92,7 @@ class KotlinJavaFileStubProvider<T : WithFileStubAndExtraDiagnostics> private co
|
|||||||
context.bindingContext,
|
context.bindingContext,
|
||||||
Lists.newArrayList(files),
|
Lists.newArrayList(files),
|
||||||
/*disable not-null assertions*/false, false,
|
/*disable not-null assertions*/false, false,
|
||||||
/*generateClassFilter=*/stubGenerationStrategy.generateClassFilter,
|
/*generateClassFilter=*/generateClassFilter,
|
||||||
/*disableInline=*/false,
|
/*disableInline=*/false,
|
||||||
/*disableOptimization=*/false,
|
/*disableOptimization=*/false,
|
||||||
/*useTypeTableInSerializer=*/false,
|
/*useTypeTableInSerializer=*/false,
|
||||||
@@ -93,7 +101,7 @@ class KotlinJavaFileStubProvider<T : WithFileStubAndExtraDiagnostics> private co
|
|||||||
|
|
||||||
bindingContext = state.bindingContext
|
bindingContext = state.bindingContext
|
||||||
|
|
||||||
stubGenerationStrategy.generate(state, files)
|
generate(state, files)
|
||||||
|
|
||||||
val pop = stubStack.pop()
|
val pop = stubStack.pop()
|
||||||
if (pop !== javaFileStub) {
|
if (pop !== javaFileStub) {
|
||||||
@@ -110,8 +118,8 @@ class KotlinJavaFileStubProvider<T : WithFileStubAndExtraDiagnostics> private co
|
|||||||
|
|
||||||
val extraDiagnostics = forExtraDiagnostics.bindingContext.diagnostics
|
val extraDiagnostics = forExtraDiagnostics.bindingContext.diagnostics
|
||||||
return CachedValueProvider.Result.create(
|
return CachedValueProvider.Result.create(
|
||||||
stubGenerationStrategy.createLightClassData(javaFileStub, bindingContext, extraDiagnostics),
|
createLightClassData(javaFileStub, bindingContext, extraDiagnostics),
|
||||||
if (local) PsiModificationTracker.MODIFICATION_COUNT else PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT
|
if (isLocal) PsiModificationTracker.MODIFICATION_COUNT else PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -162,40 +170,18 @@ class KotlinJavaFileStubProvider<T : WithFileStubAndExtraDiagnostics> private co
|
|||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun createForDeclaredClass(classOrObject: KtClassOrObject): KotlinJavaFileStubProvider<OutermostKotlinClassLightClassData> {
|
private val LOG = Logger.getInstance(LightClassDataProvider::class.java)
|
||||||
return KotlinJavaFileStubProvider(
|
|
||||||
classOrObject.project,
|
|
||||||
classOrObject.isLocal(),
|
|
||||||
StubGenerationStrategyForDeclaredClass(classOrObject)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun createForFacadeClass(
|
|
||||||
project: Project,
|
|
||||||
facadeFqName: FqName,
|
|
||||||
searchScope: GlobalSearchScope): CachedValueProvider<KotlinFacadeLightClassData> {
|
|
||||||
return KotlinJavaFileStubProvider(project, false, StubGenerationStrategyForFacadeClass(project, facadeFqName, searchScope))
|
|
||||||
}
|
|
||||||
|
|
||||||
private val LOG = Logger.getInstance(KotlinJavaFileStubProvider::class.java)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private interface StubGenerationStrategy<T : WithFileStubAndExtraDiagnostics> {
|
class LightClassDataProviderForClassOrObject(private val classOrObject: KtClassOrObject) :
|
||||||
val files: Collection<KtFile>
|
LightClassDataProvider<OutermostKotlinClassLightClassData>(classOrObject.project) {
|
||||||
val packageFqName: FqName
|
|
||||||
|
|
||||||
fun getContext(files: Collection<KtFile>): LightClassConstructionContext
|
|
||||||
fun createLightClassData(javaFileStub: PsiJavaFileStub, bindingContext: BindingContext, extraDiagnostics: Diagnostics): T
|
|
||||||
|
|
||||||
val generateClassFilter: GenerationState.GenerateClassFilter
|
|
||||||
fun generate(state: GenerationState, files: Collection<KtFile>)
|
|
||||||
}
|
|
||||||
|
|
||||||
private class StubGenerationStrategyForDeclaredClass(private val classOrObject: KtClassOrObject) : StubGenerationStrategy<OutermostKotlinClassLightClassData> {
|
|
||||||
private val file: KtFile
|
private val file: KtFile
|
||||||
get() = classOrObject.getContainingKtFile()
|
get() = classOrObject.getContainingKtFile()
|
||||||
|
|
||||||
|
override val isLocal: Boolean get() = classOrObject.isLocal()
|
||||||
|
|
||||||
override fun getContext(files: Collection<KtFile>): LightClassConstructionContext {
|
override fun getContext(files: Collection<KtFile>): LightClassConstructionContext {
|
||||||
return LightClassGenerationSupport.getInstance(classOrObject.project).getContextForClassOrObject(classOrObject)
|
return LightClassGenerationSupport.getInstance(classOrObject.project).getContextForClassOrObject(classOrObject)
|
||||||
}
|
}
|
||||||
@@ -302,19 +288,21 @@ private class StubGenerationStrategyForDeclaredClass(private val classOrObject:
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun toString(): String {
|
override fun toString(): String {
|
||||||
return StubGenerationStrategy::class.java.name + " for explicit class " + classOrObject.name
|
return this.javaClass.name + " for " + classOrObject.name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class StubGenerationStrategyForFacadeClass(
|
class LightClassDataProviderForFileFacade(
|
||||||
private val project: Project, private val facadeFqName: FqName, private val searchScope: GlobalSearchScope
|
private val project: Project, private val facadeFqName: FqName, private val searchScope: GlobalSearchScope
|
||||||
) : StubGenerationStrategy<KotlinFacadeLightClassData> {
|
) : LightClassDataProvider<KotlinFacadeLightClassData>(project) {
|
||||||
override val files: Collection<KtFile>
|
override val files: Collection<KtFile>
|
||||||
get() = LightClassGenerationSupport.getInstance(project).findFilesForFacade(facadeFqName, searchScope)
|
get() = LightClassGenerationSupport.getInstance(project).findFilesForFacade(facadeFqName, searchScope)
|
||||||
|
|
||||||
override val packageFqName: FqName
|
override val packageFqName: FqName
|
||||||
get() = facadeFqName.parent()
|
get() = facadeFqName.parent()
|
||||||
|
|
||||||
|
override val isLocal: Boolean get() = false
|
||||||
|
|
||||||
override fun getContext(files: Collection<KtFile>): LightClassConstructionContext {
|
override fun getContext(files: Collection<KtFile>): LightClassConstructionContext {
|
||||||
return LightClassGenerationSupport.getInstance(project).getContextForFacade(files)
|
return LightClassGenerationSupport.getInstance(project).getContextForFacade(files)
|
||||||
}
|
}
|
||||||
@@ -363,6 +351,6 @@ private class StubGenerationStrategyForFacadeClass(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun toString(): String {
|
override fun toString(): String {
|
||||||
return StubGenerationStrategy::class.java.name + " for facade class"
|
return this.javaClass.name + " for $facadeFqName"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user