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:
Pavel V. Talanov
2015-12-18 16:43:37 +03:00
parent a8c5e0cc95
commit 70dc5a5c4c
2 changed files with 14 additions and 6 deletions
@@ -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(
@@ -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