/******************************************************************************* * Copyright (c) 2006, 2007 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 * *******************************************************************************/ package org.eclipse.dltk.ui.text.completion; import java.util.Comparator; import java.util.List; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.jface.text.contentassist.ICompletionProposal; /** * Abstract base class for sorters contributed to the * <code>org.eclipse.dltk.ui.javaCompletionProposalSorters</code> extension * point. * <p> * Subclasses need to implement * {@link #compare(ICompletionProposal, ICompletionProposal)} and may override * {@link #beginSorting(ContentAssistInvocationContext) beginSorting} and * {@link #endSorting() endSorting}. * </p> * <p> * The orderings imposed by a subclass need not be consistent with equals. * </p> */ public abstract class AbstractProposalSorter implements Comparator<ICompletionProposal> { /** * Creates a new sorter. Note that subclasses must provide a zero-argument * constructor to be instantiatable via * {@link IConfigurationElement#createExecutableExtension(String)}. */ protected AbstractProposalSorter() { } /** * Called once before sorting. * <p> * Clients may override, the default implementation does nothing. * </p> * * @param context * the context of the content assist invocation */ public void beginSorting(ContentAssistInvocationContext context) { } /** * Called once before sorting. * <p> * Clients may override, the default implementation does nothing. * </p> * * @param context * the context of the content assist invocation * @param proposals * the list of proposals to be sorted */ public void beginSorting(ContentAssistInvocationContext context, List<ICompletionProposal> proposals) { beginSorting(context); } /** * Implements the same contract as * {@link Comparator#compare(Object, Object)} but with completion proposals * as parameters. This method will implement the {@link Comparator} * interface if this class is ever converted to extend * <code>Comparator<ICompletionProposal></code>. * <p> * The orderings imposed by an implementation need not be consistent with * equals. * </p> * * @param p1 * the first proposal to be compared * @param p2 * the second proposal to be compared * @return a negative integer, zero, or a positive integer as the first * argument is less than, equal to, or greater than the second. * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) */ public abstract int compare(ICompletionProposal p1, ICompletionProposal p2); /** * Called once after sorting. * <p> * Clients may override, the default implementation does nothing. * </p> */ public void endSorting() { } }