diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt index 19176a70ba5..3c5760cef10 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt @@ -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( diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignature.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignature.kt index 3fc319b2958..f22fd862cdb 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignature.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignature.kt @@ -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