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.

Reference: Code Completion

Define a Completion Contributor

For this tutorial, the simple_language_plugin provides custom completion for values in Simple Language property files. Create a completion contributor 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.

<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: 01 July 2022