DecompiledNavigationUtils: support navigation for Kotlin/Javascript
This commit is contained in:
+15
-6
@@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user