xibs: open them as native files

This commit is contained in:
andrey zaytsev
2011-02-07 14:45:30 +03:00
parent 5e731d5a16
commit 44931b4488
5 changed files with 44 additions and 3 deletions
@@ -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();
@@ -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>