IntelliJ Platform Plugin SDK Help

Intentions

This topic describes the conditional_operator_intention, a sample plugin that adds a new intention action to the IDE Intentions list. In addition, the sample plugin contains a JUnit-based test.

About Intention Actions

The IntelliJ Platform analyzes your code and helps handle situations that may result in errors. When a possible problem is suspected, the IDE suggests an appropriate intention action, denoted with special icons.

See the Inspections topic in UI Guidelines on naming, writing description, and message texts for inspections/intentions.

You can view a list of all available intention actions as well as enable/disable them using the Intentions List in Settings | Editor | Intentions.

Techniques Used

The conditional_operator_intention sample plugin illustrates the use of the following techniques:

  • How to analyze a PSI tree.

  • How to find a Java token of interest in the PSI tree.

  • How to invoke a quick-fix action for a token element under the cursor using the PsiElementBaseIntentionAction class.

  • How to create a JUnit test for this plugin using the IdeaTestFixtureFactory class.

  • How to add an intention description and before/after examples

Sample Plugin

When launched, the sample plugin adds the SDK: Convert ternary operator to if statement item to the SDK intentions group in the Settings | Editor | Intentions.

Running the Plugin

See Code Samples on how to set up and run the plugin.

How does it work?

The plugin analyzes symbols under the cursor in your code opened in the editor. If the cursor is positioned on the ? conditional operator, IntelliJ IDEA proposes to replace this conditional (ternary) operator with the "if-then-else" statement:

Convert ternary operator intention popup

Invoking SDK: Convert ternary operator to if statement intention action will result in transforming expression to the form visible in the preview popup (code fragment on the right).

Intention Description

The intention description is available in the UI under Settings | Editor | Intentions | SDK Intentions | SDK: Convert ternary operator to if statement.

The plugin provides description files in the resources/intentionDescriptions/ConditionalOperatorConverter directory:

  • description.html - provides the general information about the intention

  • after.java.template - shows the code fragment that intention can change

  • before.java.template - shows the code fragment after applying the intention

By default, the intention description directory name is the same as the intention class name. It can be customized with the <descriptionDirectoryName> element in <intentionAction> in plugin.xml.

"Before" and "after" filenames pattern is before.$LANG_FILE_EXTENSION$.template and after.$LANG_FILE_EXTENSION$.template respectively. If before/after preview is not needed, specify <skipBeforeAfter>true</skipBeforeAfter> in the <intentionAction> in plugin.xml.

Testing the Plugin

The sample plugin contains the ConditionalOperatorConverterTest Java class and the test data in the test/testData/ directory. To perform the plugin test, run the ConditionalOperatorConverterTest.testIntention() method.

Last modified: 06 December 2024