Rename LightClassGenerationSupport.getPsiClass -> getLightClass and make it return KtLightClass

This commit is contained in:
Pavel V. Talanov
2016-01-21 16:49:31 +03:00
parent 06215ca932
commit 2972dbca00
6 changed files with 17 additions and 18 deletions
@@ -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)
} }
@@ -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)
@@ -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))
} }