title |
---|
18. Quick Fix |
A quick fix for a custom language supports the IntelliJ Platform-based IDE feature Intention Actions. For the Simple Language, this tutorial adds a quick fix that helps to define an unresolved property from its usage.
Reference: Code Inspections and Intentions
- bullet list {:toc}
The SimpleElementFactory
is updated to include two new methods to support the user choice of creating a new property for the Simple Language quick fix.
The new createCRLF()
method supports adding a newline to the end of the test.simple
file before adding a new property.
A new overload of createProperty()
creates a new key
-value
pair for Simple Language.
{% include /code_samples/simple_language_plugin/src/main/java/org/intellij/sdk/language/psi/SimpleElementFactory.java %}
The SimpleCreatePropertyQuickFix
creates a property in the file chosen by the user - in this case, a Java file containing a prefix:key
- and navigate to this property after creation.
Under the hood, SimpleCreatePropertyQuickFix
is an Intention Action.
For a more in-depth example of an Intention Action, see conditional_operator_intention
.
{% include /code_samples/simple_language_plugin/src/main/java/org/intellij/sdk/language/SimpleCreatePropertyQuickFix.java %}
When a badProperty
annotation is created, the badProperty.registerFix()
method is called.
This method call registers the SimpleCreatePropertyQuickFix
as the Intention Action for the Intellij Platform to use to correct the problem.
{% include /code_samples/simple_language_plugin/src/main/java/org/intellij/sdk/language/SimpleAnnotator.java %}
Open the test Java file in an IDE Development Instance running the simple_language_plugin
.
To test SimpleCreatePropertyQuickFix
, change simple:website
to simple:website.url
.
The key website.url
is highlighted by SimpleAnnotator
as an invalid key, as shown below.
Choose "Create Property".
The IDE opens the test.simple
file and adds website.url
as a new key.
Add the new value jetbrains.com
for the new website.url
key.
Now switch back to the Java file; the new key is highlighted as valid.