LightClassGenerationSupport: refactor, minor
Use typealias where appropriate Less verbose method names
This commit is contained in:
+4
-3
@@ -25,6 +25,7 @@ import com.intellij.util.Function
|
|||||||
import com.intellij.util.SmartList
|
import com.intellij.util.SmartList
|
||||||
import com.intellij.util.containers.ContainerUtil
|
import com.intellij.util.containers.ContainerUtil
|
||||||
import org.jetbrains.annotations.TestOnly
|
import org.jetbrains.annotations.TestOnly
|
||||||
|
import org.jetbrains.kotlin.asJava.LightClassBuilder
|
||||||
import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
|
import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
|
||||||
import org.jetbrains.kotlin.asJava.builder.*
|
import org.jetbrains.kotlin.asJava.builder.*
|
||||||
import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
||||||
@@ -75,7 +76,7 @@ class CliLightClassGenerationSupport(project: Project) : LightClassGenerationSup
|
|||||||
trace.setKotlinCodeAnalyzer(codeAnalyzer)
|
trace.setKotlinCodeAnalyzer(codeAnalyzer)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createLightClassDataHolderForClassOrObject(classOrObject: KtClassOrObject, builder: (LightClassConstructionContext) -> LightClassBuilderResult): LightClassDataHolder {
|
override fun createDataHolderForClassOrObject(classOrObject: KtClassOrObject, builder: LightClassBuilder): LightClassDataHolder {
|
||||||
//force resolve companion for light class generation
|
//force resolve companion for light class generation
|
||||||
bindingContext.get(BindingContext.CLASS, classOrObject)?.companionObjectDescriptor
|
bindingContext.get(BindingContext.CLASS, classOrObject)?.companionObjectDescriptor
|
||||||
|
|
||||||
@@ -171,8 +172,8 @@ class CliLightClassGenerationSupport(project: Project) : LightClassGenerationSup
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createLightClassDataHolderForFacade(files: Collection<KtFile>, build: (LightClassConstructionContext) -> LightClassBuilderResult): LightClassDataHolder {
|
override fun createDataHolderForFacade(files: Collection<KtFile>, builder: LightClassBuilder): LightClassDataHolder {
|
||||||
val (stub, _, diagnostics) = build(getContext())
|
val (stub, _, diagnostics) = builder(getContext())
|
||||||
return LightClassDataHolderImpl(stub, diagnostics)
|
return LightClassDataHolderImpl(stub, diagnostics)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-6
@@ -32,15 +32,13 @@ import org.jetbrains.kotlin.psi.KtElement
|
|||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
|
|
||||||
|
typealias LightClassBuilder = (LightClassConstructionContext) -> LightClassBuilderResult
|
||||||
|
|
||||||
abstract class LightClassGenerationSupport {
|
abstract class LightClassGenerationSupport {
|
||||||
|
|
||||||
abstract fun createLightClassDataHolderForClassOrObject(
|
abstract fun createDataHolderForClassOrObject(classOrObject: KtClassOrObject, builder: LightClassBuilder): LightClassDataHolder
|
||||||
classOrObject: KtClassOrObject, builder: (LightClassConstructionContext) -> LightClassBuilderResult
|
|
||||||
): LightClassDataHolder
|
|
||||||
|
|
||||||
abstract fun createLightClassDataHolderForFacade(
|
abstract fun createDataHolderForFacade(files: Collection<KtFile>, builder: LightClassBuilder): LightClassDataHolder
|
||||||
files: Collection<KtFile>, build: (LightClassConstructionContext) -> LightClassBuilderResult
|
|
||||||
): LightClassDataHolder
|
|
||||||
|
|
||||||
abstract fun findClassOrObjectDeclarations(fqName: FqName, searchScope: GlobalSearchScope): Collection<KtClassOrObject>
|
abstract fun findClassOrObjectDeclarations(fqName: FqName, searchScope: GlobalSearchScope): Collection<KtClassOrObject>
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -41,7 +41,7 @@ class LightClassDataProviderForClassOrObject(private val classOrObject: KtClassO
|
|||||||
private fun computeLightClassData(): LightClassDataHolder {
|
private fun computeLightClassData(): LightClassDataHolder {
|
||||||
val file = classOrObject.containingKtFile
|
val file = classOrObject.containingKtFile
|
||||||
val packageFqName = file.packageFqName
|
val packageFqName = file.packageFqName
|
||||||
return LightClassGenerationSupport.getInstance(classOrObject.project).createLightClassDataHolderForClassOrObject(classOrObject) {
|
return LightClassGenerationSupport.getInstance(classOrObject.project).createDataHolderForClassOrObject(classOrObject) {
|
||||||
constructionContext ->
|
constructionContext ->
|
||||||
buildLightClass(packageFqName, listOf(file), ClassFilterForClassOrObject(classOrObject), constructionContext) {
|
buildLightClass(packageFqName, listOf(file), ClassFilterForClassOrObject(classOrObject), constructionContext) {
|
||||||
state, files ->
|
state, files ->
|
||||||
@@ -72,7 +72,7 @@ sealed class LightClassDataProviderForFileFacade constructor(
|
|||||||
abstract fun findFiles(): Collection<KtFile>
|
abstract fun findFiles(): Collection<KtFile>
|
||||||
|
|
||||||
private fun computeLightClassData(files: Collection<KtFile>): LightClassDataHolder {
|
private fun computeLightClassData(files: Collection<KtFile>): LightClassDataHolder {
|
||||||
return LightClassGenerationSupport.getInstance(project).createLightClassDataHolderForFacade(files) {
|
return LightClassGenerationSupport.getInstance(project).createDataHolderForFacade(files) {
|
||||||
constructionContext ->
|
constructionContext ->
|
||||||
buildLightClass(facadeFqName.parent(), files, ClassFilterForFacade, constructionContext) generate@ {
|
buildLightClass(facadeFqName.parent(), files, ClassFilterForFacade, constructionContext) generate@ {
|
||||||
state, files ->
|
state, files ->
|
||||||
|
|||||||
+7
-6
@@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.caches.resolve
|
package org.jetbrains.kotlin.idea.caches.resolve
|
||||||
|
|
||||||
import com.intellij.openapi.diagnostic.Logger
|
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
import com.intellij.psi.ClassFileViewProvider
|
import com.intellij.psi.ClassFileViewProvider
|
||||||
@@ -27,6 +26,7 @@ import com.intellij.psi.impl.compiled.ClsClassImpl
|
|||||||
import com.intellij.psi.impl.compiled.ClsFileImpl
|
import com.intellij.psi.impl.compiled.ClsFileImpl
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import com.intellij.psi.util.PsiTreeUtil
|
import com.intellij.psi.util.PsiTreeUtil
|
||||||
|
import org.jetbrains.kotlin.asJava.LightClassBuilder
|
||||||
import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
|
import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
|
||||||
import org.jetbrains.kotlin.asJava.builder.ClsWrapperStubPsiFactory
|
import org.jetbrains.kotlin.asJava.builder.ClsWrapperStubPsiFactory
|
||||||
import org.jetbrains.kotlin.asJava.builder.LightClassDataHolder
|
import org.jetbrains.kotlin.asJava.builder.LightClassDataHolder
|
||||||
@@ -38,7 +38,10 @@ import org.jetbrains.kotlin.asJava.finder.JavaElementFinder
|
|||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
||||||
import org.jetbrains.kotlin.fileClasses.javaFileFacadeFqName
|
import org.jetbrains.kotlin.fileClasses.javaFileFacadeFqName
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.lightClasses.*
|
import org.jetbrains.kotlin.idea.caches.resolve.lightClasses.ClsJavaStubByVirtualFileCache
|
||||||
|
import org.jetbrains.kotlin.idea.caches.resolve.lightClasses.IDELightClassContexts
|
||||||
|
import org.jetbrains.kotlin.idea.caches.resolve.lightClasses.KtLightClassForDecompiledDeclaration
|
||||||
|
import org.jetbrains.kotlin.idea.caches.resolve.lightClasses.LazyLightClassDataHolder
|
||||||
import org.jetbrains.kotlin.idea.decompiler.classFile.KtClsFile
|
import org.jetbrains.kotlin.idea.decompiler.classFile.KtClsFile
|
||||||
import org.jetbrains.kotlin.idea.decompiler.navigation.SourceNavigationHelper
|
import org.jetbrains.kotlin.idea.decompiler.navigation.SourceNavigationHelper
|
||||||
import org.jetbrains.kotlin.idea.stubindex.*
|
import org.jetbrains.kotlin.idea.stubindex.*
|
||||||
@@ -57,9 +60,7 @@ class IDELightClassGenerationSupport(private val project: Project) : LightClassG
|
|||||||
private val scopeFileComparator = JavaElementFinder.byClasspathComparator(GlobalSearchScope.allScope(project))
|
private val scopeFileComparator = JavaElementFinder.byClasspathComparator(GlobalSearchScope.allScope(project))
|
||||||
private val psiManager: PsiManager = PsiManager.getInstance(project)
|
private val psiManager: PsiManager = PsiManager.getInstance(project)
|
||||||
|
|
||||||
override fun createLightClassDataHolderForClassOrObject(
|
override fun createDataHolderForClassOrObject(classOrObject: KtClassOrObject, builder: LightClassBuilder): LightClassDataHolder {
|
||||||
classOrObject: KtClassOrObject, builder: LightClassBuilder
|
|
||||||
): LightClassDataHolder {
|
|
||||||
return if (classOrObject.isLocal) {
|
return if (classOrObject.isLocal) {
|
||||||
LazyLightClassDataHolder(
|
LazyLightClassDataHolder(
|
||||||
builder,
|
builder,
|
||||||
@@ -77,7 +78,7 @@ class IDELightClassGenerationSupport(private val project: Project) : LightClassG
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
override fun createLightClassDataHolderForFacade(files: Collection<KtFile>, builder: LightClassBuilder): LightClassDataHolder {
|
override fun createDataHolderForFacade(files: Collection<KtFile>, builder: LightClassBuilder): LightClassDataHolder {
|
||||||
assert(!files.isEmpty()) { "No files in facade" }
|
assert(!files.isEmpty()) { "No files in facade" }
|
||||||
|
|
||||||
val sortedFiles = files.sortedWith(scopeFileComparator)
|
val sortedFiles = files.sortedWith(scopeFileComparator)
|
||||||
|
|||||||
+1
-1
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.idea.caches.resolve.lightClasses
|
|||||||
import com.intellij.psi.PsiClass
|
import com.intellij.psi.PsiClass
|
||||||
import com.intellij.psi.PsiClassType
|
import com.intellij.psi.PsiClassType
|
||||||
import com.intellij.psi.impl.java.stubs.PsiJavaFileStub
|
import com.intellij.psi.impl.java.stubs.PsiJavaFileStub
|
||||||
|
import org.jetbrains.kotlin.asJava.LightClassBuilder
|
||||||
import org.jetbrains.kotlin.asJava.builder.*
|
import org.jetbrains.kotlin.asJava.builder.*
|
||||||
import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
||||||
import org.jetbrains.kotlin.asJava.elements.KtLightField
|
import org.jetbrains.kotlin.asJava.elements.KtLightField
|
||||||
@@ -28,7 +29,6 @@ import org.jetbrains.kotlin.asJava.elements.KtLightMethodImpl
|
|||||||
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
||||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||||
|
|
||||||
typealias LightClassBuilder = (LightClassConstructionContext) -> LightClassBuilderResult
|
|
||||||
typealias LightClassContextProvider = () -> LightClassConstructionContext
|
typealias LightClassContextProvider = () -> LightClassConstructionContext
|
||||||
|
|
||||||
class LazyLightClassDataHolder(
|
class LazyLightClassDataHolder(
|
||||||
|
|||||||
Reference in New Issue
Block a user