From 44931b44889dd9cad9749b05292263faf111fce2 Mon Sep 17 00:00:00 2001 From: andrey zaytsev Date: Mon, 7 Feb 2011 14:00:15 +0300 Subject: [PATCH] xibs: open them as native files --- .../navigation/NavigationUtil.java | 10 +++++++- .../impl/NativeFileIconProvider.java | 3 ++- .../fileEditor/OpenFileDescriptor.java | 7 +++++- .../openapi/fileEditor/OpenFileHelper.java | 25 +++++++++++++++++++ .../src/META-INF/PlatformExtensionPoints.xml | 2 ++ 5 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 platform/platform-api/src/com/intellij/openapi/fileEditor/OpenFileHelper.java diff --git a/platform/lang-impl/src/com/intellij/codeInsight/navigation/NavigationUtil.java b/platform/lang-impl/src/com/intellij/codeInsight/navigation/NavigationUtil.java index 244616a1f111..4cf18f7cfb13 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/navigation/NavigationUtil.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/navigation/NavigationUtil.java @@ -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(); diff --git a/platform/lang-impl/src/com/intellij/openapi/fileTypes/impl/NativeFileIconProvider.java b/platform/lang-impl/src/com/intellij/openapi/fileTypes/impl/NativeFileIconProvider.java index 1e2c24b65b1c..4772cf5cfccf 100644 --- a/platform/lang-impl/src/com/intellij/openapi/fileTypes/impl/NativeFileIconProvider.java +++ b/platform/lang-impl/src/com/intellij/openapi/fileTypes/impl/NativeFileIconProvider.java @@ -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 { diff --git a/platform/platform-api/src/com/intellij/openapi/fileEditor/OpenFileDescriptor.java b/platform/platform-api/src/com/intellij/openapi/fileEditor/OpenFileDescriptor.java index 23ac76ea5acf..cd183e8b078d 100644 --- a/platform/platform-api/src/com/intellij/openapi/fileEditor/OpenFileDescriptor.java +++ b/platform/platform-api/src/com/intellij/openapi/fileEditor/OpenFileDescriptor.java @@ -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); } diff --git a/platform/platform-api/src/com/intellij/openapi/fileEditor/OpenFileHelper.java b/platform/platform-api/src/com/intellij/openapi/fileEditor/OpenFileHelper.java new file mode 100644 index 000000000000..af673d55da24 --- /dev/null +++ b/platform/platform-api/src/com/intellij/openapi/fileEditor/OpenFileHelper.java @@ -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 EP_NAME = ExtensionPointName.create("com.intellij.openFileDescriptorHelper"); + + public abstract boolean canHelp(VirtualFile file); + + public abstract boolean doOpenAsNative(VirtualFile file); +} diff --git a/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml b/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml index dcbdc60e0cb7..df18eb604e2d 100644 --- a/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml +++ b/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml @@ -112,4 +112,6 @@ + +