IDELightClassGenerationSupport: fix a problem when marking source root as both source and library source led to SO
# KT-10413 Fixed
This commit is contained in:
+13
-6
@@ -18,7 +18,6 @@ package org.jetbrains.kotlin.idea.caches.resolve
|
||||
|
||||
import com.intellij.openapi.diagnostic.Logger
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.roots.libraries.LibraryUtil
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.psi.ClassFileViewProvider
|
||||
import com.intellij.psi.PsiClass
|
||||
@@ -140,13 +139,21 @@ public class IDELightClassGenerationSupport(private val project: Project) : Ligh
|
||||
|
||||
override fun getPsiClass(classOrObject: KtClassOrObject): PsiClass? {
|
||||
val virtualFile = classOrObject.containingFile.virtualFile
|
||||
if (virtualFile != null && LibraryUtil.findLibraryEntry(virtualFile, classOrObject.project) != null) {
|
||||
if (ProjectRootsUtil.isLibraryClassFile(project, virtualFile)) {
|
||||
return getLightClassForDecompiledClassOrObject(classOrObject)
|
||||
if (virtualFile != null) {
|
||||
when {
|
||||
ProjectRootsUtil.isProjectSourceFile(project, virtualFile) ->
|
||||
return KtLightClassForExplicitDeclaration.create(classOrObject)
|
||||
ProjectRootsUtil.isLibraryClassFile(project, virtualFile) ->
|
||||
return getLightClassForDecompiledClassOrObject(classOrObject)
|
||||
ProjectRootsUtil.isLibrarySourceFile(project, virtualFile) ->
|
||||
return SourceNavigationHelper.getOriginalClass(classOrObject)
|
||||
}
|
||||
return SourceNavigationHelper.getOriginalClass(classOrObject)
|
||||
}
|
||||
return KtLightClassForExplicitDeclaration.create(classOrObject)
|
||||
if (classOrObject.getContainingKtFile().analysisContext != null) {
|
||||
// explicit request to create light class from dummy.kt
|
||||
return KtLightClassForExplicitDeclaration.create(classOrObject)
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
private fun withFakeLightClasses(
|
||||
|
||||
+1
@@ -148,6 +148,7 @@ public class KotlinChangeSignature(project: Project,
|
||||
toString()
|
||||
}
|
||||
val dummyFile = LightVirtualFile("dummy.kt", KotlinFileType.INSTANCE, dummyFileText).toPsiFile(project) as KtFile
|
||||
dummyFile.analysisContext = originalMethod
|
||||
val dummyDeclaration = (dummyFile.declarations.first() as KtClass).getBody()!!.declarations.first()
|
||||
|
||||
// Convert to PsiMethod which can be used in Change Signature dialog
|
||||
|
||||
Reference in New Issue
Block a user