/* * Copyright 2000-2016 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.fileEditor; import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.Key; import com.intellij.openapi.vfs.VirtualFile; import org.jdom.Element; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; /** * Should be registered via {@link #EP_FILE_EDITOR_PROVIDER}. * * @author Anton Katilin * @author Vladimir Kondratyev * @see DumbAware */ public interface FileEditorProvider { ExtensionPointName<FileEditorProvider> EP_FILE_EDITOR_PROVIDER = new ExtensionPointName<>("com.intellij.fileEditorProvider"); Key<FileEditorProvider> KEY = Key.create("com.intellij.fileEditorProvider"); /** * @param file file to be tested for acceptance. This * parameter is never {@code null}. * * @return whether the provider can create valid editor for the specified * {@code file} or not */ boolean accept(@NotNull Project project, @NotNull VirtualFile file); /** * Creates editor for the specified file. This method * is called only if the provider has accepted this file (i.e. method {@link #accept(Project, VirtualFile)} returned * {@code true}). * The provider should return only valid editor. * * @return created editor for specified file. This method should never return {@code null}. */ @NotNull FileEditor createEditor(@NotNull Project project, @NotNull VirtualFile file); /** * Disposes the specified {@code editor}. It is guaranteed that this method is invoked only for editors * created with this provider. * * @param editor editor to be disposed. This parameter is always not {@code null}. */ default void disposeEditor(@NotNull FileEditor editor) { Disposer.dispose(editor); } /** * Deserialize state from the specified {@code sourceElement} * Use {@link FileEditorState#INSTANCE} as default implementation */ @NotNull default FileEditorState readState(@NotNull Element sourceElement, @NotNull Project project, @NotNull VirtualFile file) { return FileEditorState.INSTANCE; } /** * Serializes state into the specified {@code targetElement} */ default void writeState(@NotNull FileEditorState state, @NotNull Project project, @NotNull Element targetElement) { } /** * @return id of type of the editors that are created with this FileEditorProvider. Each FileEditorProvider should have * unique non null id. The id is used for saving/loading of EditorStates. */ @NotNull @NonNls String getEditorTypeId(); /** * @return policy that specifies how show editor created via this provider be opened * * @see FileEditorPolicy#NONE * @see FileEditorPolicy#HIDE_DEFAULT_EDITOR * @see FileEditorPolicy#PLACE_BEFORE_DEFAULT_EDITOR */ @NotNull FileEditorPolicy getPolicy(); }