/*******************************************************************************
 * Copyright (c) 2005 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/

package org.eclipse.ui;

/**
 * An editor matching strategy allows editor extensions to provide their own
 * algorithm for matching the input of an open editor of that type to a 
 * given editor input.  This is used to find a matching editor during
 * {@link org.eclipse.ui.IWorkbenchPage#openEditor(IEditorInput, String, boolean)} and
 * {@link org.eclipse.ui.IWorkbenchPage#findEditor(IEditorInput)}.
 * 
 * @since 1.0
 */
public interface IEditorMatchingStrategy {
    
    /**
     * Returns whether the editor represented by the given editor reference 
     * matches the given editor input.
     * <p>
     * Implementations should inspect the given editor input first, 
     * and try to reject it early before calling <code>IEditorReference.getEditorInput()</code>,
     * since that method may be expensive. 
     * </p>
     * 
     * @param editorRef the editor reference to match against
     * @param input the editor input to match
     * @return <code>true</code> if the editor matches the given editor input,
     *   <code>false</code> if it does not match
     */
    boolean matches(IEditorReference editorRef, IEditorInput input);
    
}
