open as native via empty interface INativeFileType

This commit is contained in:
andrey zaytsev
2011-02-07 14:45:31 +03:00
parent 44931b4488
commit 087b107286
8 changed files with 14 additions and 41 deletions
@@ -19,7 +19,7 @@ package com.intellij.psi.impl;
import com.intellij.navigation.ItemPresentation;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.NativeFileType;
import com.intellij.openapi.fileTypes.INativeFileType;
import com.intellij.openapi.fileTypes.UnknownFileType;
import com.intellij.openapi.progress.ProcessCanceledException;
import com.intellij.openapi.project.IndexNotReadyException;
@@ -136,7 +136,7 @@ public abstract class ElementBase extends UserDataHolderBase implements Iconable
}
public static boolean isNativeFileType(FileType fileType) {
return fileType instanceof NativeFileType || fileType instanceof UnknownFileType;
return fileType instanceof INativeFileType || fileType instanceof UnknownFileType;
}
protected Icon getAdjustedBaseIcon(Icon icon, int flags) {
@@ -23,7 +23,6 @@ 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;
@@ -33,6 +32,7 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.pom.Navigatable;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.impl.ElementBase;
import com.intellij.psi.search.PsiElementProcessor;
import com.intellij.ui.components.JBList;
import org.jetbrains.annotations.NotNull;
@@ -93,7 +93,9 @@ public final class NavigationUtil {
boolean openAsNative = false;
if (elt instanceof PsiFile) {
VirtualFile virtualFile = ((PsiFile)elt).getVirtualFile();
openAsNative = OpenFileHelper.openAsNative(virtualFile);
if (virtualFile != null) {
openAsNative = ElementBase.isNativeFileType(virtualFile.getFileType());
}
}
if (openAsNative || !activatePsiElementIfOpen(elt)) {
((NavigationItem)elt).navigate(true);
@@ -17,9 +17,6 @@
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;
import com.intellij.openapi.util.SystemInfo;
import com.intellij.openapi.vfs.VirtualFile;
@@ -93,7 +90,7 @@ public class NativeFileIconProvider implements FileIconProvider {
}
protected boolean isNativeFileType(VirtualFile file) {
return OpenFileHelper.openAsNative(file) || ElementBase.isNativeFileType(file.getFileType());
return ElementBase.isNativeFileType(file.getFileType());
}
private static class Ext extends ComparableObject.Impl {
@@ -22,6 +22,7 @@ import com.intellij.openapi.actionSystem.DataKey;
import com.intellij.openapi.editor.*;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.FileTypeManager;
import com.intellij.openapi.fileTypes.INativeFileType;
import com.intellij.openapi.fileTypes.NativeFileType;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
@@ -119,12 +120,7 @@ public class OpenFileDescriptor implements Navigatable {
FileType type = FileTypeManager.getInstance().getKnownFileTypeOrAssociate(myFile);
if (type == null || !myFile.isValid()) return false;
boolean openAsNative = OpenFileHelper.openAsNative(myFile);
if (!openAsNative) {
openAsNative = type instanceof NativeFileType;
}
if (openAsNative) {
if (type instanceof INativeFileType) {
return NativeFileType.openAssociatedApplication(myFile);
}
@@ -1,25 +0,0 @@
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);
}
@@ -0,0 +1,4 @@
package com.intellij.openapi.fileTypes;
public interface INativeFileType extends FileType {
}
@@ -29,7 +29,7 @@ import java.util.List;
/**
* @author yole
*/
public class NativeFileType implements FileType {
public class NativeFileType implements INativeFileType {
private static final Icon ICON = IconLoader.getIcon("/fileTypes/custom.png");
private NativeFileType() { }
@@ -113,5 +113,4 @@
<extensionPoint name="xmlRpcHandler" beanClass="com.intellij.ide.XmlRpcHandlerBean"/>
<extensionPoint name="openFileDescriptorHelper" interface="com.intellij.openapi.fileEditor.OpenFileHelper"/>
</extensionPoints>