diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/DecompiledNavigationUtils.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/DecompiledNavigationUtils.java index 187370aa887..c5b89c4b41c 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/DecompiledNavigationUtils.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/DecompiledNavigationUtils.java @@ -17,15 +17,16 @@ package org.jetbrains.kotlin.idea.decompiler.navigation; import com.intellij.openapi.project.Project; -import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.openapi.vfs.*; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; import com.intellij.psi.search.GlobalSearchScope; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.descriptors.*; +import org.jetbrains.kotlin.idea.caches.resolve.JsProjectDetector; import org.jetbrains.kotlin.idea.decompiler.DecompilerPackage; -import org.jetbrains.kotlin.idea.decompiler.JetClsFile; +import org.jetbrains.kotlin.idea.decompiler.KotlinClsFileBase; import org.jetbrains.kotlin.idea.stubindex.JetSourceFilterScope; import org.jetbrains.kotlin.load.kotlin.PackageClassUtils; import org.jetbrains.kotlin.load.kotlin.VirtualFileFinder; @@ -45,16 +46,24 @@ public final class DecompiledNavigationUtils { @NotNull Project project, @NotNull DeclarationDescriptor referencedDescriptor ) { - VirtualFile virtualFile = findVirtualFileContainingDescriptor(project, referencedDescriptor); + VirtualFile virtualFile; - if (virtualFile == null || !DecompilerPackage.isKotlinCompiledFile(virtualFile)) return null; + if (JsProjectDetector.isJsProject(project) && NavigationPackage.getKotlinJavascriptLibrary(referencedDescriptor, project) != null) { + JsMetaFileVirtualFileHolder system = JsMetaFileVirtualFileHolder.getInstance(project); + virtualFile = system.getFile(referencedDescriptor); + if (virtualFile == null) return null; + } + else { + virtualFile = findVirtualFileContainingDescriptor(project, referencedDescriptor); + if (virtualFile == null || !DecompilerPackage.isKotlinCompiledFile(virtualFile)) return null; + } PsiFile psiFile = PsiManager.getInstance(project).findFile(virtualFile); - if (!(psiFile instanceof JetClsFile)) { + if (!(psiFile instanceof KotlinClsFileBase)) { return null; } - return ((JetClsFile) psiFile).getDeclarationForDescriptor(referencedDescriptor); + return ((KotlinClsFileBase) psiFile).getDeclarationForDescriptor(referencedDescriptor); } /*