mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
xibs: open them as native files
This commit is contained in:
@@ -23,6 +23,7 @@ import com.intellij.navigation.NavigationItem;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.fileEditor.FileEditor;
|
||||
import com.intellij.openapi.fileEditor.FileEditorManager;
|
||||
import com.intellij.openapi.fileEditor.OpenFileHelper;
|
||||
import com.intellij.openapi.fileEditor.TextEditor;
|
||||
import com.intellij.openapi.fileEditor.impl.EditorHistoryManager;
|
||||
import com.intellij.openapi.ui.popup.JBPopup;
|
||||
@@ -89,11 +90,18 @@ public final class NavigationUtil {
|
||||
}
|
||||
|
||||
public static void activateFileWithPsiElement(@NotNull PsiElement elt) {
|
||||
if (!activatePsiElementIfOpen(elt)) {
|
||||
boolean openAsNative = false;
|
||||
if (elt instanceof PsiFile) {
|
||||
VirtualFile virtualFile = ((PsiFile)elt).getVirtualFile();
|
||||
openAsNative = OpenFileHelper.openAsNative(virtualFile);
|
||||
}
|
||||
if (openAsNative || !activatePsiElementIfOpen(elt)) {
|
||||
((NavigationItem)elt).navigate(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private static boolean activatePsiElementIfOpen(@NotNull PsiElement elt) {
|
||||
if (!elt.isValid()) return false;
|
||||
elt = elt.getNavigationElement();
|
||||
|
||||
+2
-1
@@ -17,6 +17,7 @@
|
||||
package com.intellij.openapi.fileTypes.impl;
|
||||
|
||||
import com.intellij.ide.FileIconProvider;
|
||||
import com.intellij.openapi.fileEditor.OpenFileHelper;
|
||||
import com.intellij.openapi.fileTypes.NativeFileType;
|
||||
import com.intellij.openapi.fileTypes.UnknownFileType;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -92,7 +93,7 @@ public class NativeFileIconProvider implements FileIconProvider {
|
||||
}
|
||||
|
||||
protected boolean isNativeFileType(VirtualFile file) {
|
||||
return ElementBase.isNativeFileType(file.getFileType());
|
||||
return OpenFileHelper.openAsNative(file) || ElementBase.isNativeFileType(file.getFileType());
|
||||
}
|
||||
|
||||
private static class Ext extends ComparableObject.Impl {
|
||||
|
||||
@@ -119,7 +119,12 @@ public class OpenFileDescriptor implements Navigatable {
|
||||
FileType type = FileTypeManager.getInstance().getKnownFileTypeOrAssociate(myFile);
|
||||
if (type == null || !myFile.isValid()) return false;
|
||||
|
||||
if (type instanceof NativeFileType) {
|
||||
boolean openAsNative = OpenFileHelper.openAsNative(myFile);
|
||||
|
||||
if (!openAsNative) {
|
||||
openAsNative = type instanceof NativeFileType;
|
||||
}
|
||||
if (openAsNative) {
|
||||
return NativeFileType.openAssociatedApplication(myFile);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.intellij.openapi.fileEditor;
|
||||
|
||||
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
|
||||
public abstract class OpenFileHelper {
|
||||
|
||||
public static boolean openAsNative(VirtualFile virtualFile) {
|
||||
boolean openAsNative = false;
|
||||
for (OpenFileHelper h : Extensions.getExtensions(EP_NAME)) {
|
||||
if (h.canHelp(virtualFile)) {
|
||||
openAsNative = h.doOpenAsNative(virtualFile);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return openAsNative;
|
||||
}
|
||||
|
||||
public static ExtensionPointName<OpenFileHelper> EP_NAME = ExtensionPointName.create("com.intellij.openFileDescriptorHelper");
|
||||
|
||||
public abstract boolean canHelp(VirtualFile file);
|
||||
|
||||
public abstract boolean doOpenAsNative(VirtualFile file);
|
||||
}
|
||||
@@ -112,4 +112,6 @@
|
||||
<extensionPoint name="statistics.usagesCollector" interface="com.intellij.internal.statistic.UsagesCollector"/>
|
||||
|
||||
<extensionPoint name="xmlRpcHandler" beanClass="com.intellij.ide.XmlRpcHandlerBean"/>
|
||||
|
||||
<extensionPoint name="openFileDescriptorHelper" interface="com.intellij.openapi.fileEditor.OpenFileHelper"/>
|
||||
</extensionPoints>
|
||||
|
||||
Reference in New Issue
Block a user