下面列出了怎么用 com.intellij.codeInsight.completion.CompletionContributor 的API类实例代码及写法,或者点击链接到github查看源代码。
static void extend(CompletionContributor contributor)
{
contributor.extend(CompletionType.BASIC, CSharpPatterns.expressionStart(), new CompletionProvider()
{
@RequiredReadAction
@Override
public void addCompletions(@Nonnull CompletionParameters parameters, ProcessingContext context, @Nonnull CompletionResultSet result)
{
PsiElement position = parameters.getPosition();
if(!CSharpModuleUtil.findLanguageVersion(position).isAtLeast(CSharpLanguageVersion._3_0))
{
return;
}
CSharpReferenceExpressionEx parent = (CSharpReferenceExpressionEx) position.getParent();
if(parent.getQualifier() != null || parent.kind() != CSharpReferenceExpression.ResolveToKind.ANY_MEMBER)
{
return;
}
CSharpCompletionUtil.elementToLookup(result, CSharpSoftTokens.FROM_KEYWORD, null, null);
}
});
}
@Override
void addTo(CompletionContributor contributor) {
BashPsiPattern internal = new BashPsiPattern().withParent(BashInternalCommand.class);
BashPsiPattern generic = new BashPsiPattern().withParent(BashGenericCommand.class);
ElementPattern<PsiElement> internalOrGeneric = StandardPatterns.or(internal, generic);
BashPsiPattern pattern = new BashPsiPattern().withParent(internalOrGeneric);
contributor.extend(CompletionType.BASIC, pattern, this);
}
private static boolean isAutoPopup(@Nonnull Editor editor, @Nonnull PsiFile file, char charTyped) {
final int offset = editor.getCaretModel().getOffset() - 1;
if (offset >= 0) {
final PsiElement element = file.findElementAt(offset);
if (element != null) {
for (CompletionContributor contributor : CompletionContributor.forLanguageHonorDumbness(element.getLanguage(), file.getProject())) {
if (contributor.invokeAutoPopup(element, charTyped)) {
LOG.debug(contributor + " requested completion autopopup when typing '" + charTyped + "'");
return true;
}
}
}
}
return false;
}
TestCompletionResultSet() {
super(
Mockito.mock(PrefixMatcher.class),
Mockito.mock(Consumer.class),
Mockito.mock(CompletionContributor.class));
}
void addTo(CompletionContributor contributor) {
contributor.extend(CompletionType.BASIC, KEYWORD_PATTERN, this);
}
@Override
void addTo(CompletionContributor contributor) {
contributor.extend(CompletionType.BASIC, new BashPsiPattern().inside(BashShebang.class), this);
}
@Override
void addTo(CompletionContributor contributor) {
BashPsiPattern insideVar = new BashPsiPattern().withParent(BashVar.class);
contributor.extend(CompletionType.BASIC, insideVar, this);
}
@Override
void addTo(CompletionContributor contributor) {
contributor.extend(CompletionType.BASIC, new BashPsiPattern().withParent(BashWord.class), this);
}
static void extend(CompletionContributor contributor)
{
contributor.extend(CompletionType.BASIC, CSharpPatterns.fieldStart(), new CompletionProvider()
{
@RequiredReadAction
@Override
public void addCompletions(@Nonnull CompletionParameters parameters, ProcessingContext context, @Nonnull CompletionResultSet result)
{
CSharpFieldDeclaration currentElement = PsiTreeUtil.getParentOfType(parameters.getPosition(), CSharpFieldDeclaration.class);
assert currentElement != null;
DotNetModifierList modifierList = currentElement.getModifierList();
if(modifierList != null)
{
int textLength = modifierList.getTextLength();
if(textLength > 0)
{
return;
}
}
PsiElement nextSibling = UsefulPsiTreeUtil.getNextSiblingSkippingWhiteSpacesAndComments(currentElement);
TextRange textRange = nextSibling == null ? null : new TextRange(currentElement.getTextRange().getStartOffset(), nextSibling.getTextRange().getStartOffset());
if(textRange != null && !StringUtil.containsLineBreak(textRange.subSequence(currentElement.getContainingFile().getText())))
{
return;
}
CSharpTypeDeclaration typeDeclaration = PsiTreeUtil.getParentOfType(parameters.getPosition(), CSharpTypeDeclaration.class);
if(typeDeclaration == null)
{
return;
}
Consumer<LookupElement> delegate = lookupElement ->
{
if(lookupElement != null)
{
CSharpCompletionSorting.force(lookupElement, CSharpCompletionSorting.KindSorter.Type.overrideMember);
result.consume(lookupElement);
}
};
for(CSharpMemberAddByCompletionContributor completionContributor : EP_NAME.getExtensions())
{
completionContributor.processCompletion(parameters, context, delegate, typeDeclaration);
}
}
});
}