/* * Copyright 2000-2011 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.intellij.openapi.fileTypes; import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.openapi.util.Getter; import com.intellij.openapi.util.io.ByteSequence; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; /** * @author yole */ public abstract class FileTypeRegistry { public static Getter<FileTypeRegistry> ourInstanceGetter; public abstract boolean isFileIgnored(@NonNls @NotNull VirtualFile file); public static FileTypeRegistry getInstance() { return ourInstanceGetter.get(); } /** * Returns the list of all registered file types. * * @return The list of file types. */ public abstract FileType[] getRegisteredFileTypes(); /** * Returns the file type for the specified file. * * @param file The file for which the type is requested. * @return The file type instance. */ @NotNull public abstract FileType getFileTypeByFile(@NotNull VirtualFile file); /** * Returns the file type for the specified file name. * * @param fileName The file name for which the type is requested. * @return The file type instance, or {@link FileTypes#UNKNOWN} if not found. */ @NotNull public abstract FileType getFileTypeByFileName(@NotNull @NonNls String fileName); /** * Returns the file type for the specified extension. * Note that a more general way of obtaining file type is with {@link #getFileTypeByFile(VirtualFile)} * * @param extension The extension for which the file type is requested, not including the leading '.'. * @return The file type instance, or {@link UnknownFileType#INSTANCE} if corresponding file type not found */ @NotNull public abstract FileType getFileTypeByExtension(@NonNls @NotNull String extension); /** * Tries to detect whether the file is text or not by analyzing its content. * @param file to analyze * @return {@link com.intellij.openapi.fileTypes.PlainTextFileType} if file looks like text, * or another file type if some file type detector identified the file * or the {@link UnknownFileType} if file is binary or we are unable to detect. */ @NotNull public abstract FileType detectFileTypeFromContent(@NotNull VirtualFile file); /** * Finds a file type with the specified name. */ @Nullable public abstract FileType findFileTypeByName(String fileTypeName); /** * Pluggable file type detector by content */ public interface FileTypeDetector { ExtensionPointName<FileTypeDetector> EP_NAME = ExtensionPointName.create("com.intellij.fileTypeDetector"); /** * Detects file type by its content * @param file to analyze * @param firstBytes of the file for identifying its file type * @param firstCharsIfText - characters, converted from first bytes parameter if the file content was determined to be text, or null otherwise * @return detected file type, or null if was unable to detect */ @Nullable FileType detect(@NotNull VirtualFile file, @NotNull ByteSequence firstBytes, @Nullable CharSequence firstCharsIfText); } }