/******************************************************************************* * Copyright (c) 2005, 2006 QNX Software Systems * 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: * QNX Software Systems - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.internal.ui.text.contentassist; import java.util.Arrays; import org.eclipse.cdt.ui.text.ICCompletionProposal; import org.eclipse.cdt.ui.text.contentassist.IProposalFilter; /** * The default code completion filter: Remove duplicate entries on the basis of * their id string. Use CCompletionProposalComparator for sorting. */ public class DefaultProposalFilter implements IProposalFilter { public ICCompletionProposal[] filterProposals( ICCompletionProposal[] proposals) { CCompletionProposalComparator propsComp = new CCompletionProposalComparator(); propsComp.setOrderAlphabetically(true); Arrays.sort(proposals, propsComp); // remove duplicates but leave the ones with return types int last = 0; int removed = 0; for (int i = 1; i < proposals.length; ++i) { if (propsComp.compare(proposals[last], proposals[i]) == 0) { // We want to leave the one that has the return string if any boolean lastReturn = proposals[last].getIdString() != proposals[last] .getDisplayString(); boolean iReturn = proposals[i].getIdString() != proposals[i] .getDisplayString(); if (!lastReturn && iReturn) // flip i down to last proposals[last] = proposals[i]; // Remove the duplicate proposals[i] = null; ++removed; } else // update last last = i; } if (removed > 0) { // Strip out the null entries ICCompletionProposal[] newArray = new ICCompletionProposal[proposals.length - removed]; int j = 0; for (int i = 0; i < proposals.length; ++i) if (proposals[i] != null) newArray[j++] = proposals[i]; proposals = newArray; } return proposals; } }