Rename LightClassGenerationSupport.getPsiClass -> getLightClass and make it return KtLightClass
This commit is contained in:
+2
-5
@@ -25,10 +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.KtLightClassForExplicitDeclaration
|
import org.jetbrains.kotlin.asJava.*
|
||||||
import org.jetbrains.kotlin.asJava.KtLightClassForFacade
|
|
||||||
import org.jetbrains.kotlin.asJava.LightClassConstructionContext
|
|
||||||
import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
|
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
@@ -140,7 +137,7 @@ class CliLightClassGenerationSupport(project: Project) : LightClassGenerationSup
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getPsiClass(classOrObject: KtClassOrObject): PsiClass? {
|
override fun getLightClass(classOrObject: KtClassOrObject): KtLightClass? {
|
||||||
return KtLightClassForExplicitDeclaration.create(classOrObject)
|
return KtLightClassForExplicitDeclaration.create(classOrObject)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -68,7 +68,7 @@ public abstract class LightClassGenerationSupport {
|
|||||||
public abstract Collection<FqName> getSubPackages(@NotNull FqName fqn, @NotNull GlobalSearchScope scope);
|
public abstract Collection<FqName> getSubPackages(@NotNull FqName fqn, @NotNull GlobalSearchScope scope);
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public abstract PsiClass getPsiClass(@NotNull KtClassOrObject classOrObject);
|
public abstract KtLightClass getLightClass(@NotNull KtClassOrObject classOrObject);
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public abstract ClassDescriptor resolveClassToDescriptor(@NotNull KtClassOrObject classOrObject);
|
public abstract ClassDescriptor resolveClassToDescriptor(@NotNull KtClassOrObject classOrObject);
|
||||||
|
|||||||
@@ -48,9 +48,10 @@ object LightClassUtil {
|
|||||||
return null
|
return null
|
||||||
}/*package*/
|
}/*package*/
|
||||||
|
|
||||||
fun getPsiClass(classOrObject: KtClassOrObject?): PsiClass? {
|
fun getPsiClass(classOrObject: KtClassOrObject?): KtLightClass? {
|
||||||
if (classOrObject == null) return null
|
return classOrObject?.let {
|
||||||
return LightClassGenerationSupport.getInstance(classOrObject.project).getPsiClass(classOrObject)
|
return LightClassGenerationSupport.getInstance(it.project).getLightClass(it)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getLightClassAccessorMethod(accessor: KtPropertyAccessor): PsiMethod? =
|
fun getLightClassAccessorMethod(accessor: KtPropertyAccessor): PsiMethod? =
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ import org.jetbrains.kotlin.utils.addToStdlib.singletonList
|
|||||||
import org.jetbrains.kotlin.utils.addToStdlib.singletonOrEmptyList
|
import org.jetbrains.kotlin.utils.addToStdlib.singletonOrEmptyList
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
fun KtClassOrObject.toLightClass(): KtLightClass? = LightClassUtil.getPsiClass(this) as KtLightClass?
|
fun KtClassOrObject.toLightClass(): KtLightClass? = LightClassUtil.getPsiClass(this)
|
||||||
|
|
||||||
fun KtFile.findFacadeClass(): KtLightClass? {
|
fun KtFile.findFacadeClass(): KtLightClass? {
|
||||||
return LightClassGenerationSupport.getInstance(project)
|
return LightClassGenerationSupport.getInstance(project)
|
||||||
|
|||||||
+8
-7
@@ -138,7 +138,7 @@ class IDELightClassGenerationSupport(private val project: Project) : LightClassG
|
|||||||
return PackageIndexUtil.getSubPackageFqNames(fqn, sourceAndClassFiles(scope, project), project, MemberScope.ALL_NAME_FILTER)
|
return PackageIndexUtil.getSubPackageFqNames(fqn, sourceAndClassFiles(scope, project), project, MemberScope.ALL_NAME_FILTER)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getPsiClass(classOrObject: KtClassOrObject): PsiClass? {
|
override fun getLightClass(classOrObject: KtClassOrObject): KtLightClass? {
|
||||||
val virtualFile = classOrObject.containingFile.virtualFile
|
val virtualFile = classOrObject.containingFile.virtualFile
|
||||||
if (virtualFile != null) {
|
if (virtualFile != null) {
|
||||||
when {
|
when {
|
||||||
@@ -147,7 +147,7 @@ class IDELightClassGenerationSupport(private val project: Project) : LightClassG
|
|||||||
ProjectRootsUtil.isLibraryClassFile(project, virtualFile) ->
|
ProjectRootsUtil.isLibraryClassFile(project, virtualFile) ->
|
||||||
return getLightClassForDecompiledClassOrObject(classOrObject)
|
return getLightClassForDecompiledClassOrObject(classOrObject)
|
||||||
ProjectRootsUtil.isLibrarySourceFile(project, virtualFile) ->
|
ProjectRootsUtil.isLibrarySourceFile(project, virtualFile) ->
|
||||||
return SourceNavigationHelper.getOriginalClass(classOrObject)
|
return SourceNavigationHelper.getOriginalClass(classOrObject) as? KtLightClass
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (classOrObject.getContainingKtFile().analysisContext != null) {
|
if (classOrObject.getContainingKtFile().analysisContext != null) {
|
||||||
@@ -270,7 +270,7 @@ class IDELightClassGenerationSupport(private val project: Project) : LightClassG
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getLightClassForDecompiledClassOrObject(decompiledClassOrObject: KtClassOrObject): PsiClass? {
|
private fun getLightClassForDecompiledClassOrObject(decompiledClassOrObject: KtClassOrObject): KtLightClassForDecompiledDeclaration? {
|
||||||
if (decompiledClassOrObject is KtEnumEntry) {
|
if (decompiledClassOrObject is KtEnumEntry) {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
@@ -285,18 +285,19 @@ class IDELightClassGenerationSupport(private val project: Project) : LightClassG
|
|||||||
|
|
||||||
private fun findCorrespondingLightClass(
|
private fun findCorrespondingLightClass(
|
||||||
decompiledClassOrObject: KtClassOrObject,
|
decompiledClassOrObject: KtClassOrObject,
|
||||||
rootLightClassForDecompiledFile: PsiClass): PsiClass {
|
rootLightClassForDecompiledFile: KtLightClassForDecompiledDeclaration
|
||||||
|
): KtLightClassForDecompiledDeclaration {
|
||||||
val relativeFqName = getClassRelativeName(decompiledClassOrObject)
|
val relativeFqName = getClassRelativeName(decompiledClassOrObject)
|
||||||
val iterator = relativeFqName.pathSegments().iterator()
|
val iterator = relativeFqName.pathSegments().iterator()
|
||||||
val base = iterator.next()
|
val base = iterator.next()
|
||||||
assert(rootLightClassForDecompiledFile.name == base.asString()) { "Light class for file:\n" + decompiledClassOrObject.getContainingKtFile().virtualFile.canonicalPath + "\nwas expected to have name: " + base.asString() + "\n Actual: " + rootLightClassForDecompiledFile.name }
|
assert(rootLightClassForDecompiledFile.name == base.asString()) { "Light class for file:\n" + decompiledClassOrObject.getContainingKtFile().virtualFile.canonicalPath + "\nwas expected to have name: " + base.asString() + "\n Actual: " + rootLightClassForDecompiledFile.name }
|
||||||
var current = rootLightClassForDecompiledFile
|
var current: KtLightClassForDecompiledDeclaration = rootLightClassForDecompiledFile
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
val name = iterator.next()
|
val name = iterator.next()
|
||||||
val innerClass = current.findInnerClassByName(name.asString(), false).sure {
|
val innerClass = current.findInnerClassByName(name.asString(), false).sure {
|
||||||
"Could not find corresponding inner/nested class " + relativeFqName + " in class " + decompiledClassOrObject.fqName + "\n" + "File: " + decompiledClassOrObject.getContainingKtFile().virtualFile.name
|
"Could not find corresponding inner/nested class " + relativeFqName + " in class " + decompiledClassOrObject.fqName + "\n" + "File: " + decompiledClassOrObject.getContainingKtFile().virtualFile.name
|
||||||
}
|
}
|
||||||
current = innerClass
|
current = innerClass as KtLightClassForDecompiledDeclaration
|
||||||
}
|
}
|
||||||
return current
|
return current
|
||||||
}
|
}
|
||||||
@@ -361,7 +362,7 @@ class KtFileClassProviderImpl(val lightClassGenerationSupport: LightClassGenerat
|
|||||||
}
|
}
|
||||||
|
|
||||||
val result = arrayListOf<PsiClass>()
|
val result = arrayListOf<PsiClass>()
|
||||||
file.declarations.filterIsInstance<KtClassOrObject>().map { lightClassGenerationSupport.getPsiClass(it) }.filterNotNullTo(result)
|
file.declarations.filterIsInstance<KtClassOrObject>().map { lightClassGenerationSupport.getLightClass(it) }.filterNotNullTo(result)
|
||||||
|
|
||||||
val moduleInfo = file.getModuleInfo()
|
val moduleInfo = file.getModuleInfo()
|
||||||
val jvmClassInfo = JvmFileClassUtil.getFileClassInfoNoResolve(file)
|
val jvmClassInfo = JvmFileClassUtil.getFileClassInfoNoResolve(file)
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ class KotlinLightClassInheritorTest : KotlinLightCodeInsightFixtureTestCase() {
|
|||||||
private fun doTestInheritorByText(text: String, superQName: String, checkDeep: Boolean) {
|
private fun doTestInheritorByText(text: String, superQName: String, checkDeep: Boolean) {
|
||||||
val file = myFixture.configureByText("A.kt", text) as KtFile
|
val file = myFixture.configureByText("A.kt", text) as KtFile
|
||||||
val jetClass = file.declarations.filterIsInstance<KtClass>().single()
|
val jetClass = file.declarations.filterIsInstance<KtClass>().single()
|
||||||
val psiClass = LightClassGenerationSupport.getInstance(project).getPsiClass(jetClass)!!
|
val psiClass = LightClassGenerationSupport.getInstance(project).getLightClass(jetClass)!!
|
||||||
val baseClass = JavaPsiFacade.getInstance(project).findClass(superQName, GlobalSearchScope.allScope(project))!!
|
val baseClass = JavaPsiFacade.getInstance(project).findClass(superQName, GlobalSearchScope.allScope(project))!!
|
||||||
Assert.assertTrue(psiClass.isInheritor(baseClass, checkDeep))
|
Assert.assertTrue(psiClass.isInheritor(baseClass, checkDeep))
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user