/*
* Copyright (c) 2012 Sam Harwell, Tunnel Vision Laboratories LLC
* All rights reserved.
*
* The source code of this document is proprietary work, and is not licensed for
* distribution. For information about licensing, contact Sam Harwell at:
* sam@tunnelvisionlabs.com
*/
package org.antlr.works.editor.antlr4.completion;
import com.tvl.spi.editor.completion.CompletionItem;
import com.tvl.spi.editor.completion.CompletionItemComparator;
import java.text.Collator;
import java.util.Comparator;
import java.util.Locale;
import org.netbeans.api.annotations.common.NonNull;
/**
*
* @author Sam Harwell
*/
public class BaseCompletionItemComparator extends CompletionItemComparator {
@NonNull
public static final Comparator<CompletionItem> PRIORITY_COMPARATOR =
new BaseCompletionItemComparator(new PriorityComparator(), new ItemTextComparator());
@NonNull
public static final Comparator<CompletionItem> TEXT_COMPARATOR =
new BaseCompletionItemComparator(new ItemTextComparator(), new PriorityComparator());
public BaseCompletionItemComparator(@NonNull Comparator<CompletionItem> primaryComparator,
@NonNull Comparator<CompletionItem> secondaryComparator) {
super(primaryComparator, secondaryComparator);
}
protected static class ItemTextComparator extends TextComparator {
private final Collator secondaryCollator;
private final Collator identicalCollator;
public ItemTextComparator() {
secondaryCollator = Collator.getInstance(Locale.getDefault());
secondaryCollator.setDecomposition(Collator.FULL_DECOMPOSITION);
secondaryCollator.setStrength(Collator.SECONDARY);
identicalCollator = Collator.getInstance(Locale.getDefault());
identicalCollator.setDecomposition(Collator.FULL_DECOMPOSITION);
identicalCollator.setStrength(Collator.IDENTICAL);
}
@Override
protected int compareText(CharSequence text1, CharSequence text2) {
if (text1 == null) {
text1 = ""; //NOI18N
}
if (text2 == null) {
text2 = ""; //NOI18N
}
int caseInsensitive = secondaryCollator.compare(text1.toString(), text2.toString());
if (caseInsensitive != 0) {
return caseInsensitive;
}
return identicalCollator.compare(text1.toString(), text2.toString());
}
}
}