IntelliJ Platform Plugin SDK Help

9. Completion Contributor

Custom languages provide code completion using one of two approaches: Contributor and Reference-based (see 10. Reference Contributor) completion.

Define a Completion Contributor

For this tutorial, the simple_language_plugin provides custom completion for values in Simple Language property files. Create SimpleCompletionContributor by subclassing CompletionContributor. This rudimentary completion contributor always adds "Hello" to the completion variants result set, regardless of context:

// Copyright 2000-2022 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package org.intellij.sdk.language; import com.intellij.codeInsight.completion.*; import com.intellij.codeInsight.lookup.LookupElementBuilder; import com.intellij.patterns.PlatformPatterns; import com.intellij.util.ProcessingContext; import org.intellij.sdk.language.psi.SimpleTypes; import org.jetbrains.annotations.NotNull; public class SimpleCompletionContributor extends CompletionContributor { public SimpleCompletionContributor() { extend(CompletionType.BASIC, PlatformPatterns.psiElement(SimpleTypes.VALUE), new CompletionProvider<>() { public void addCompletions(@NotNull CompletionParameters parameters, @NotNull ProcessingContext context, @NotNull CompletionResultSet resultSet) { resultSet.addElement(LookupElementBuilder.create("Hello")); } } ); } }

Register the Completion Contributor

The SimpleCompletionContributor implementation is registered in the plugin configuration file using the com.intellij.completion.contributor extension point and specifying language="Simple".

<extensions defaultExtensionNs="com.intellij"> <completion.contributor language="Simple" implementationClass="org.intellij.sdk.language.SimpleCompletionContributor"/> </extensions>

Run the Project

Run the plugin by using the Gradle runIde task.

Open the test.simple file. Erase the property "English" and invoke Basic Code Completion. The choice "Hello" is shown:

Last modified: 27 September 2022