Add ability to use ctrl+click in decompiled kotlin files
This commit is contained in:
@@ -61,8 +61,7 @@ public final class DecompiledDataFactory {
|
||||
private DecompiledDataFactory(@NotNull VirtualFile classFile, @NotNull Project project) {
|
||||
this.classFile = classFile;
|
||||
this.project = project;
|
||||
InjectorForJavaDescriptorResolver injector =
|
||||
new InjectorForJavaDescriptorResolver(project, new BindingTraceContext());
|
||||
InjectorForJavaDescriptorResolver injector = new InjectorForJavaDescriptorResolver(project, new BindingTraceContext());
|
||||
this.javaDescriptorResolver = injector.getJavaDescriptorResolver();
|
||||
|
||||
VirtualFileKotlinClass kotlinClass = new VirtualFileKotlinClass(classFile);
|
||||
|
||||
@@ -16,18 +16,55 @@
|
||||
|
||||
package org.jetbrains.jet.plugin.libraries;
|
||||
|
||||
import com.google.common.collect.Maps;
|
||||
import com.intellij.AppTopics;
|
||||
import com.intellij.lang.Language;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager;
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManagerAdapter;
|
||||
import com.intellij.openapi.fileTypes.ContentBasedClassFileProcessor;
|
||||
import com.intellij.openapi.fileTypes.SyntaxHighlighter;
|
||||
import com.intellij.openapi.project.DumbService;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.impl.PsiDocumentManagerBase;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.psi.JetFile;
|
||||
import org.jetbrains.jet.plugin.highlighter.JetHighlighter;
|
||||
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
|
||||
public final class JetContentBasedFileSubstitutor implements ContentBasedClassFileProcessor {
|
||||
private static final JetContentBasedFileSubstitutor instance = new JetContentBasedFileSubstitutor();
|
||||
|
||||
private static final ConcurrentMap<VirtualFile, JetFile> deferredDocumentBinding = Maps.newConcurrentMap();
|
||||
|
||||
public static JetContentBasedFileSubstitutor getInstance() {
|
||||
return instance;
|
||||
}
|
||||
|
||||
private JetContentBasedFileSubstitutor() {
|
||||
ApplicationManager.getApplication().getMessageBus().connect().subscribe(AppTopics.FILE_DOCUMENT_SYNC, new FileDocumentManagerAdapter() {
|
||||
@Override
|
||||
public void fileContentLoaded(@NotNull VirtualFile loadedFile, @NotNull Document document) {
|
||||
processDeferredBindings(loadedFile, document);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fileContentReloaded(VirtualFile loadedFile, @NotNull Document document) {
|
||||
processDeferredBindings(loadedFile, document);
|
||||
}
|
||||
|
||||
private void processDeferredBindings(VirtualFile loadedFile, @NotNull Document document) {
|
||||
JetFile file = deferredDocumentBinding.remove(loadedFile);
|
||||
if (file != null) {
|
||||
PsiDocumentManagerBase.cachePsi(document, file);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isApplicable(@Nullable Project project, @NotNull final VirtualFile file) {
|
||||
@@ -53,8 +90,11 @@ public final class JetContentBasedFileSubstitutor implements ContentBasedClassFi
|
||||
@NotNull
|
||||
@Override
|
||||
public String obtainFileText(Project project, VirtualFile file) {
|
||||
if (DecompiledUtils.isKotlinCompiledFile(file)) {
|
||||
return JetDecompiledData.getDecompiledData(file, project).getFileText();
|
||||
if (file != null && DecompiledUtils.isKotlinCompiledFile(file)) {
|
||||
JetDecompiledData data = JetDecompiledData.getDecompiledData(file, project);
|
||||
deferredDocumentBinding.put(file, data.getFile());
|
||||
|
||||
return data.getFileText();
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user