DecompiledNavigationUtils: support navigation for Kotlin/Javascript
This commit is contained in:
+15
-6
@@ -17,15 +17,16 @@
|
|||||||
package org.jetbrains.kotlin.idea.decompiler.navigation;
|
package org.jetbrains.kotlin.idea.decompiler.navigation;
|
||||||
|
|
||||||
import com.intellij.openapi.project.Project;
|
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.PsiFile;
|
||||||
import com.intellij.psi.PsiManager;
|
import com.intellij.psi.PsiManager;
|
||||||
import com.intellij.psi.search.GlobalSearchScope;
|
import com.intellij.psi.search.GlobalSearchScope;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.kotlin.descriptors.*;
|
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.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.idea.stubindex.JetSourceFilterScope;
|
||||||
import org.jetbrains.kotlin.load.kotlin.PackageClassUtils;
|
import org.jetbrains.kotlin.load.kotlin.PackageClassUtils;
|
||||||
import org.jetbrains.kotlin.load.kotlin.VirtualFileFinder;
|
import org.jetbrains.kotlin.load.kotlin.VirtualFileFinder;
|
||||||
@@ -45,16 +46,24 @@ public final class DecompiledNavigationUtils {
|
|||||||
@NotNull Project project,
|
@NotNull Project project,
|
||||||
@NotNull DeclarationDescriptor referencedDescriptor
|
@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);
|
PsiFile psiFile = PsiManager.getInstance(project).findFile(virtualFile);
|
||||||
if (!(psiFile instanceof JetClsFile)) {
|
if (!(psiFile instanceof KotlinClsFileBase)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ((JetClsFile) psiFile).getDeclarationForDescriptor(referencedDescriptor);
|
return ((KotlinClsFileBase) psiFile).getDeclarationForDescriptor(referencedDescriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
Reference in New Issue
Block a user