类 com.intellij.codeInsight.completion.CompletionInitializationContext 源码实例Demo

下面列出了怎么用 com.intellij.codeInsight.completion.CompletionInitializationContext 的API类实例代码及写法,或者点击链接到github查看源代码。


@NotNull
private Collection<String> suggestKeywordsBasedOnParserExpectedKeywords(@NotNull PsiElement position) {
    String text = getPrecedingText(position, CompletionInitializationContext.DUMMY_IDENTIFIER);
    Project project = position.getProject();
    PsiFile temporaryFileForCompletionCheck = createFileForText(project, text + "          ");
    int completionOffset = calculateCompletionOffset(position);
    GeneratedParserUtilBase.CompletionState completionStateInTemporaryFile = getCompletionStateForKeywords(completionOffset);
    temporaryFileForCompletionCheck.putUserData(COMPLETION_STATE_KEY, completionStateInTemporaryFile);
    triggerParsingInFile(temporaryFileForCompletionCheck);
    List<String> stripped = stringPrecedingText(StringUtils.normalizeWhitespaces(text), completionStateInTemporaryFile.items);
    return expandMultiWordOptions(stripped);
}
 

private static InsertionContext createInsertionContext(LookupElement item,
                                                       PsiFile psiFile,
                                                       List<? extends LookupElement> elements,
                                                       Editor editor, final char completionChar) {
  final OffsetMap offsetMap = new OffsetMap(editor.getDocument());
  final InsertionContext context = new InsertionContext(offsetMap, completionChar, elements.toArray(new LookupElement[elements.size()]), psiFile, editor, false);
  context.setTailOffset(editor.getCaretModel().getOffset());
  offsetMap.addOffset(CompletionInitializationContext.START_OFFSET, context.getTailOffset() - item.getLookupString().length());
  offsetMap.addOffset(CompletionInitializationContext.SELECTION_END_OFFSET, context.getTailOffset());
  offsetMap.addOffset(CompletionInitializationContext.IDENTIFIER_END_OFFSET, context.getTailOffset());
  return context;
}
 

@Override
public void handleInsert(@NotNull InsertionContext context) {
    apply(context.getDocument(), context.getCompletionChar(), 0, context.getOffset(CompletionInitializationContext.SELECTION_END_OFFSET));
}
 

@Override
public void beforeCompletion(@NotNull CompletionInitializationContext context) {
    context.setDummyIdentifier("ZZZ");
}
 

@Override
public void duringCompletion(@NotNull CompletionInitializationContext context) {
    fixComposedWordEndOffset(context);
}
 

/**
 * Fix the replace offset, for composed bash words use the full composed range
 *
 * @param context The current invocation context
 */
protected void fixComposedWordEndOffset(CompletionInitializationContext context) {
    PsiElement element = context.getFile().findElementAt(context.getStartOffset());
    if (element == null) {
        return;
    }

    OffsetMap offsetMap = context.getOffsetMap();

    //if the completion is like "$<caret>" then element is the string end marker
    // in that case set the end before the end marker
    if (endTokens.contains(element.getNode().getElementType())) {
        offsetMap.addOffset(START_OFFSET, element.getTextOffset());
        offsetMap.addOffset(IDENTIFIER_END_OFFSET, element.getTextOffset());
        return;
    }

    if (wordTokens.contains(element.getNode().getElementType())) {
        if (fixReplacementOffsetInString(element, offsetMap)) {
            return;
        }
    }

    //try the parent if it's not already a BashWord
    if (!(element instanceof BashWord)) {
        element = element.getParent();
    }

    if (element instanceof BashWord) {
        offsetMap.addOffset(START_OFFSET, element.getTextOffset());

        // https://code.google.com/p/bashsupport/issues/detail?id=51
        // a completion at the end of a line with an open string is parsed as string until the first quote in the next line(s)
        // in the case of a newline character in the string the end offset is set to the end of the string to avoid aggressive string replacements

        if (!fixReplacementOffsetInString(element, offsetMap)) {
            offsetMap.addOffset(IDENTIFIER_END_OFFSET, element.getTextRange().getEndOffset());
        }

    }
}
 

@Override
public void beforeCompletion(@Nonnull CompletionInitializationContext context)
{
	context.setDummyIdentifier(CompletionUtilCore.DUMMY_IDENTIFIER_TRIMMED);
}
 

private static String trimDummy(String text) {
  if (text.endsWith(CompletionInitializationContext.DUMMY_IDENTIFIER_TRIMMED)) {
    text = text.substring(0, text.length() - CompletionInitializationContext.DUMMY_IDENTIFIER_TRIMMED.length());
  }
  return text;
}
 

private static boolean isSemicolonNeeded(@NotNull PsiFile file, @NotNull Editor editor) {
  int startOffset = CompletionInitializationContext.calcStartOffset(editor.getCaretModel().getCurrentCaret());
  return JavaCompletionContributor.semicolonNeeded(editor, file, startOffset);
}
 

@Override
public void beforeCompletion(@NotNull CompletionInitializationContext context) {
    overwriteDummyIdentifierToTryToCreateFunctionReference(context);
}
 

private void overwriteDummyIdentifierToTryToCreateFunctionReference(CompletionInitializationContext context) {
    context.setDummyIdentifier(CompletionInitializationContext.DUMMY_IDENTIFIER + PARENTHESES);
}