Skip to content

Latest commit

 

History

History
73 lines (53 loc) · 3.18 KB

File metadata and controls

73 lines (53 loc) · 3.18 KB
title
7. Annotator

An Annotator helps highlight and annotate any code based on specific rules. This section adds annotation functionality to support the Simple Language in the context of Java code.

Reference: Annotator

  • bullet list {:toc}

Required Project Configuration Changes

Classes defined in this step of the tutorial depend on com.intellij.psi.PsiLiteralExpression at runtime. Using PsiLiteralExpression introduces a dependency on com.intellij.modules.java. Beginning in version 2019.2 of the IntelliJ Platform these dependencies are declared in plugin.xml:

  <depends>com.intellij.modules.java</depends>

The dependency is also declared in the build.gradle file:

intellij {
  plugins = ['java']
}

7.1. Define an Annotator

The SimpleAnnotator subclasses Annotator. Consider a literal string that starts with "simple:" as a prefix of a Simple Language key. It isn't part of the Simple Language, but it is a useful convention for detecting Simple Language keys embedded as string literals in other languages, like Java. Annotate the simple:key literal expression, and differentiate between a well-formed vs. an unresolved property.

NOTE The use of new AnnotationHolder syntax starting 2020.2, which uses the builder format.

{% include /code_samples/simple_language_plugin/src/main/java/org/intellij/sdk/language/SimpleAnnotator.java %}

TIP If the above code is copied at this stage of the tutorial, then remove the line below the comment "** Tutorial step 18.3 …" The quick fix class in that line is not defined until later in the tutorial.

7.2. Register the Annotator

Using the com.intellij.annotator extension point in the plugin configuration file, register the Simple Language annotator class with the IntelliJ Platform:

  <extensions defaultExtensionNs="com.intellij">
    <annotator language="JAVA" implementationClass="org.intellij.sdk.language.SimpleAnnotator"/>
  </extensions>

7.3. Run the Project

As a test, define the following Java file containing a Simple Language prefix:value pair:

public class Test {
    public static void main(String[] args) {
        System.out.println("simple:website");
    }
}

Open this Java file in an IDE Development Instance running the simple_language_plugin to check if the IDE resolves a property:

Annotator{:width="800px"}

If the property is an undefined name, the annotator flags the code with an error.

Unresolved property{:width="800px"}

Try changing the Simple Language color settings to differentiate the annotation from the default language color settings.