mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Sorted and removed duplicate proposals.
This commit is contained in:
parent
fbc97ffbf6
commit
4a8943986a
1 changed files with 34 additions and 4 deletions
|
@ -11,6 +11,7 @@
|
||||||
package org.eclipse.cdt.internal.ui.text.contentassist;
|
package org.eclipse.cdt.internal.ui.text.contentassist;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.dom.CDOM;
|
import org.eclipse.cdt.core.dom.CDOM;
|
||||||
|
@ -86,6 +87,38 @@ public class CCompletionProcessor2 implements IContentAssistProcessor {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ICompletionProposal[] propsArray = null;
|
||||||
|
|
||||||
|
if (!proposals.isEmpty()) {
|
||||||
|
errorMessage = null;
|
||||||
|
propsArray = (ICompletionProposal[])proposals.toArray(new ICompletionProposal[proposals.size()]);
|
||||||
|
CCompletionProposalComparator propsComp = new CCompletionProposalComparator();
|
||||||
|
propsComp.setOrderAlphabetically(true);
|
||||||
|
Arrays.sort(propsArray, propsComp);
|
||||||
|
|
||||||
|
// remove duplicates
|
||||||
|
ICompletionProposal last = propsArray[0];
|
||||||
|
int removed = 0;
|
||||||
|
for (int i = 1; i < propsArray.length; ++i) {
|
||||||
|
if (propsComp.compare(last, propsArray[i]) == 0) {
|
||||||
|
// Remove the duplicate
|
||||||
|
++removed;
|
||||||
|
propsArray[i] = null;
|
||||||
|
} else
|
||||||
|
// update last
|
||||||
|
last = propsArray[i];
|
||||||
|
}
|
||||||
|
if (removed > 0) {
|
||||||
|
// Strip out the null entries
|
||||||
|
ICompletionProposal[] newArray = new ICompletionProposal[propsArray.length - removed];
|
||||||
|
int j = 0;
|
||||||
|
for (int i = 0; i < propsArray.length; ++i)
|
||||||
|
if (propsArray[i] != null)
|
||||||
|
newArray[j++] = propsArray[i];
|
||||||
|
propsArray = newArray;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (CUIPlugin.getDefault().getPreferenceStore().getBoolean(ContentAssistPreference.TIME_DOM)) {
|
if (CUIPlugin.getDefault().getPreferenceStore().getBoolean(ContentAssistPreference.TIME_DOM)) {
|
||||||
long propTime = System.currentTimeMillis();
|
long propTime = System.currentTimeMillis();
|
||||||
System.out.println("Completion Parse: " + (stopTime - startTime) + " + Proposals: " //$NON-NLS-1$ //$NON-NLS-2$
|
System.out.println("Completion Parse: " + (stopTime - startTime) + " + Proposals: " //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
@ -93,10 +126,7 @@ public class CCompletionProcessor2 implements IContentAssistProcessor {
|
||||||
System.out.flush();
|
System.out.flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!proposals.isEmpty()) {
|
return propsArray;
|
||||||
errorMessage = null;
|
|
||||||
return (ICompletionProposal[])proposals.toArray(new ICompletionProposal[proposals.size()]);
|
|
||||||
}
|
|
||||||
|
|
||||||
} catch (UnsupportedDialectException e) {
|
} catch (UnsupportedDialectException e) {
|
||||||
errorMessage = "Unsupported Dialect Exception";
|
errorMessage = "Unsupported Dialect Exception";
|
||||||
|
|
Loading…
Add table
Reference in a new issue