下面列出了怎么用org.eclipse.xtext.ui.editor.contentassist.PrefixMatcher的API类实例代码及写法,或者点击链接到github查看源代码。
@Override
protected FQNPrefixMatcher createMatcher() {
IgnoreCase ignoreCase = new PrefixMatcher.IgnoreCase();
FQNPrefixMatcher result = new FQNPrefixMatcher();
result.setDelegate(ignoreCase);
result.setLastSegmentFinder(new FQNPrefixMatcher.LastSegmentFinder() {
@Override
public String getLastSegment(String fqn, char delimiter) {
int i = fqn.lastIndexOf(delimiter);
if (i >= 0) {
if (i != fqn.length() - 1)
return fqn.substring(i + 1);
return "";
}
return fqn;
}
});
return result;
}
/***/
// NOTE: Xtext's FQNPrefixMatcher injects PrefixMatcher.IgnoreCase, not PrefixMatcher, so we have to follow suit:
@Inject
public PrefixMatcherHelper(PrefixMatcher.IgnoreCase prefixMatcher) {
if (!(prefixMatcher instanceof N4JSPrefixMatcher)) {
throw new IllegalStateException("wrong injection setup: "
+ "PrefixMatcher.IgnoreCase is expected to be bound to "
+ N4JSPrefixMatcher.class.getSimpleName() + " but is bound to "
+ prefixMatcher.getClass().getName());
}
this.prefixMatcher = prefixMatcher;
this.canDoCamelCaseMatch = ((N4JSPrefixMatcher) prefixMatcher).isJdtAvailable();
}
@Override
protected StringMatcher createStringMatcher(String pattern) {
FQNPrefixMatcher fqnPrefixMatcher = new FQNPrefixMatcher();
fqnPrefixMatcher.setLastSegmentFinder(new FQNPrefixMatcher.DefaultLastSegmentFinder());
fqnPrefixMatcher.setDelegate(new PrefixMatcher.CamelCase());
return new PrefixMatcherOutlineAdapter(pattern, fqnPrefixMatcher);
}
@Override
protected FQNPrefixMatcher createMatcher() {
IgnoreCase ignoreCase = new PrefixMatcher.IgnoreCase();
FQNPrefixMatcher result = new FQNPrefixMatcher();
result.setDelegate(ignoreCase);
result.setLastSegmentFinder(new FQNPrefixMatcher.DefaultLastSegmentFinder());
return result;
}
@Override
public void completeReferencedMetamodel_EPackage(EObject model, Assignment assignment,
final ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
super.completeReferencedMetamodel_EPackage(model, assignment, context.copy().setMatcher(new PrefixMatcher() {
@Override
public boolean isCandidateMatchingPrefix(String name, String prefix) {
if (prefix.startsWith("\"")) {
if (prefix.length() == 1)
prefix = "";
else {
prefix = prefix.substring(1);
if (prefix.endsWith("\"")) {
prefix = prefix.substring(0, prefix.length() - 1);
}
}
}
name = getValueConverter().toValue(name, "STRING", null).toString();
if (context.getMatcher().isCandidateMatchingPrefix(name, prefix))
return true;
try {
URI uri = URI.createURI(name);
if (context.getMatcher().isCandidateMatchingPrefix(uri.lastSegment(), prefix))
return true;
} catch (Exception e) {
// ignore
}
return false;
}
}).toContext(), acceptor);
}
public PrefixMatcherOutlineAdapter(String prefix, PrefixMatcher strategy) {
super("", true);
this.prefix = prefix;
this.prefixParts = splitIntoParts(prefix);
this.strategy = strategy;
this.prefixStringMatcher = new StringMatcher(prefix, true);
stringMatchers = Lists.newArrayList();
for(String part: prefixParts) {
stringMatchers.add(new StringMatcher(part, true));
}
}
public void complete_ID(EObject model, RuleCall ruleCall, final ContentAssistContext context,
ICompletionProposalAcceptor acceptor) {
if (doCreateIdProposals()) {
PrefixMatcher newMatcher = new PrefixMatcher() {
@Override
public boolean isCandidateMatchingPrefix(String name, String prefix) {
String strippedName = name;
if (name.startsWith("^") && !prefix.startsWith("^")) {
strippedName = name.substring(1);
}
return context.getMatcher().isCandidateMatchingPrefix(strippedName, prefix);
}
};
ContentAssistContext myContext = context.copy().setMatcher(newMatcher).toContext();
String feature = getAssignedFeature(ruleCall);
String proposalText = feature != null ? feature : Strings.toFirstUpper(ruleCall.getRule().getName().toLowerCase());
String displayText = proposalText;
if (feature != null)
displayText = proposalText + " - " + ruleCall.getRule().getName();
proposalText = getValueConverter().toString(proposalText, ruleCall.getRule().getName());
ICompletionProposal proposal = createCompletionProposal(proposalText, displayText, null, myContext);
if (proposal instanceof ConfigurableCompletionProposal) {
ConfigurableCompletionProposal configurable = (ConfigurableCompletionProposal) proposal;
configurable.setSelectionStart(configurable.getReplacementOffset());
configurable.setSelectionLength(proposalText.length());
configurable.setAutoInsertable(false);
configurable.setSimpleLinkedMode(myContext.getViewer(), '\t', ' ');
}
acceptor.accept(proposal);
}
}
/**
* Filter fully qualified proposals also by their last segment and not only by their fully qualified name.
*/
public Class<? extends PrefixMatcher> bindPrefixMatcher() {
return FQNPrefixMatcher.class;
}
/**
* Custom prefix matcher.
*/
public Class<? extends PrefixMatcher.IgnoreCase> bindPrefixMatcherIgnoreCase() {
return N4JSPrefixMatcher.class;
}
public Class<? extends PrefixMatcher> bindPrefixMatcher() {
return FQNPrefixMatcher.class;
}
public Class<? extends PrefixMatcher> bindPrefixMatcher() {
return FQNPrefixMatcher.class;
}
public Class<? extends PrefixMatcher> bindPrefixMatcher() {
return FQNPrefixMatcher.class;
}
public Class<? extends PrefixMatcher> bindPrefixMatcher() {
return FQNPrefixMatcher.class;
}
public Class<? extends PrefixMatcher> bindPrefixMatcher() {
return FQNPrefixMatcher.class;
}
public Class<? extends PrefixMatcher> bindPrefixMatcher() {
return FQNPrefixMatcher.class;
}
public Class<? extends PrefixMatcher> bindPrefixMatcher() {
return FQNPrefixMatcher.class;
}
public Class<? extends PrefixMatcher> bindPrefixMatcher() {
return FQNPrefixMatcher.class;
}
public Class<? extends PrefixMatcher> bindPrefixMatcher() {
return FQNPrefixMatcher.class;
}
public Class<? extends PrefixMatcher> bindPrefixMatcher() {
return FQNPrefixMatcher.class;
}
public Class<? extends PrefixMatcher> bindPrefixMatcher() {
return FQNPrefixMatcher.class;
}
public Class<? extends PrefixMatcher> bindPrefixMatcher() {
return FQNPrefixMatcher.class;
}
public Class<? extends PrefixMatcher> bindPrefixMatcher() {
return FQNPrefixMatcher.class;
}
public Class<? extends PrefixMatcher> bindPrefixMatcher() {
return FQNPrefixMatcher.class;
}
public Class<? extends PrefixMatcher> bindPrefixMatcher() {
return FQNPrefixMatcher.class;
}
@Override
protected IgnoreCase createMatcher() {
return new PrefixMatcher.IgnoreCase();
}
@Override
protected CamelCase createMatcher() {
return new PrefixMatcher.CamelCase();
}
public Class<? extends PrefixMatcher> bindPrefixMatcher() {
return FQNPrefixMatcher.class;
}
public Class<? extends PrefixMatcher> bindPrefixMatcher() {
return FQNPrefixMatcher.class;
}
public ClassifierPrefixMatcher(PrefixMatcher delegate, IQualifiedNameConverter qualifiedNameConverter) {
this.delegate = delegate;
this.qualifiedNameConverter = qualifiedNameConverter;
}
public Class<? extends PrefixMatcher> bindPrefixMatcher() {
return FQNPrefixMatcher.class;
}