Contributing a quick fix and a quick assist for Java code

The org.eclipse.jdt.ui.quickFixProcessors and org.eclipse.jdt.ui.quickAssistProcessors extension points enables you to contribute your own Java code quick fixes and quick assists.

Using the extension points

To create a new extension for the extension points you need to first provide the required extensions in the plugin.xml. For example, JDT defines the following processors

   <extension
         point="org.eclipse.jdt.ui.quickFixProcessors">
      <quickFixProcessor
            name="%defaultQuickFixProcessor"
            class="org.eclipse.jdt.internal.ui.text.correction.QuickFixProcessor"
            id="org.eclipse.jdt.ui.text.correction.QuickFixProcessor">
      </quickFixProcessor>
   </extension>
   
   <extension
         point="org.eclipse.jdt.ui.quickAssistProcessors">
      <quickAssistProcessor
            name="%defaultQuickAssistProcessor"
            class="org.eclipse.jdt.internal.ui.text.correction.QuickAssistProcessor"
            id="org.eclipse.jdt.ui.text.correction.QuickAssistProcessor">
      </quickAssistProcessor>
   </extension>

For a description of the individual attributes, please refer to the extension point documentation.

Contributing a quick fix and a quick assist

To contribute a quick fix, you need to create the class that implements the IQuickFixProcessor interface. This is the same class that you specified in the extension declaration. Each Java problem has a unique id which is defined in IProblem interface. For a particular Java problem you may offer one or more correction proposals.

To contribute a quick assist, you need to create the class that implements the IQuickAssistProcessor interface. Again, this is the same class that you specified in the extension declaration.

Supplying the right IJavaCompletionProposal

JDT provides the following default implementations for correction proposals that can be used to contribute quick fixes and quick assists.

Typically you will use an ASTRewrite, in that case you should create an ASTRewriteCorrectionProposal. However, if as a result of a quick assist you want to start an action e.g. open a wizard, you should create a ChangeCorrectionProposal and override its apply(IDocument) method.