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.diagnostic.Logger
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.roots.libraries.LibraryUtil
|
|
||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
import com.intellij.psi.ClassFileViewProvider
|
import com.intellij.psi.ClassFileViewProvider
|
||||||
import com.intellij.psi.PsiClass
|
import com.intellij.psi.PsiClass
|
||||||
@@ -140,13 +139,21 @@ public class IDELightClassGenerationSupport(private val project: Project) : Ligh
|
|||||||
|
|
||||||
override fun getPsiClass(classOrObject: KtClassOrObject): PsiClass? {
|
override fun getPsiClass(classOrObject: KtClassOrObject): PsiClass? {
|
||||||
val virtualFile = classOrObject.containingFile.virtualFile
|
val virtualFile = classOrObject.containingFile.virtualFile
|
||||||
if (virtualFile != null && LibraryUtil.findLibraryEntry(virtualFile, classOrObject.project) != null) {
|
if (virtualFile != null) {
|
||||||
if (ProjectRootsUtil.isLibraryClassFile(project, virtualFile)) {
|
when {
|
||||||
return getLightClassForDecompiledClassOrObject(classOrObject)
|
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(
|
private fun withFakeLightClasses(
|
||||||
|
|||||||
+1
@@ -148,6 +148,7 @@ public class KotlinChangeSignature(project: Project,
|
|||||||
toString()
|
toString()
|
||||||
}
|
}
|
||||||
val dummyFile = LightVirtualFile("dummy.kt", KotlinFileType.INSTANCE, dummyFileText).toPsiFile(project) as KtFile
|
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()
|
val dummyDeclaration = (dummyFile.declarations.first() as KtClass).getBody()!!.declarations.first()
|
||||||
|
|
||||||
// Convert to PsiMethod which can be used in Change Signature dialog
|
// Convert to PsiMethod which can be used in Change Signature dialog
|
||||||
|
|||||||
Reference in New Issue
Block a user