DecompiledNavigationUtils: support navigation for Kotlin/Javascript

This commit is contained in:
Michael Nedzelsky
2015-03-05 16:02:04 +03:00
parent 803e95364c
commit 19950fcc60
@@ -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);
}
/*