package org.osmorc.manifest.completion; import com.intellij.codeInsight.completion.*; import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.codeInsight.lookup.LookupElementBuilder; import com.intellij.openapi.editor.EditorModificationUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.ProcessingContext; import org.jetbrains.annotations.NotNull; /** * @author Vladislav.Soroka */ class HeaderParametersProvider extends CompletionProvider<CompletionParameters> { private static final InsertHandler<LookupElement> ATTRIBUTE_HANDLER = new InsertHandler<LookupElement>() { @Override public void handleInsert(InsertionContext context, LookupElement item) { context.setAddCompletionChar(false); EditorModificationUtil.insertStringAtCaret(context.getEditor(), "="); context.commitDocument(); } }; private static final InsertHandler<LookupElement> DIRECTIVE_HANDLER = new InsertHandler<LookupElement>() { @Override public void handleInsert(InsertionContext context, LookupElement item) { context.setAddCompletionChar(false); EditorModificationUtil.insertStringAtCaret(context.getEditor(), ":="); context.commitDocument(); } }; private final String[] myNames; public HeaderParametersProvider(String... names) { myNames = names; } @Override public void addCompletions(@NotNull CompletionParameters parameters, ProcessingContext context, @NotNull CompletionResultSet result) { for (String name : myNames) { boolean directive = StringUtil.endsWithChar(name, ':'); if (directive) name = name.substring(0, name.length() - 1); result.addElement(LookupElementBuilder.create(name) .withCaseSensitivity(false) .withInsertHandler(directive ? DIRECTIVE_HANDLER : ATTRIBUTE_HANDLER)); } } }