// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= Refactoring with Inspect and Transform in the NetBeans IDE Java Editor
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:syntax: true
:icons: font
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Refactoring with Inspect and Transform in the NetBeans IDE Java Editor - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Refactoring with Inspect and Transform in the NetBeans IDE Java Editor
:experimental:

The NetBeans IDE Java Editor features an Inspect and Transform feature, which is a refactoring tool for running various inspections and transformations on the selected scope of files at once. It also enables a user to define a custom inspection.

In this tutorial, you will learn to perform a code review using inspections with refactoring and predefined set of inspections, manage configurations, and create custom inspections.

== Setting Up the Tutorial Environment

In addition to the required software listed above you should have the link:https://netbeans.org/projects/samples/downloads/download/Samples/Java/inspecttransform.zip[+InspectTransform.zip+] file unzipped into your NetBeans project folder and opened in the NetBeans IDE as follows:

image::images/proj.png[]


== Running Inspections

The *Single Inspection* option in the *Inspect and Transform* dialog box (*Refactor > Inspect and Transform*) offers a big variety of inspections related to particular refactoring transformations. The complete list of such operations is available in the *Manage Inspections* dialog box after clicking the *Browse* button to the right of the *Single Inspection* option.

[.feature]
--
image::images/manage-inspections-small.png[role="left", link="images/manage-inspections.png"]
--

The Search field enables you to check if a required inspection is available using a keyword lookup. For example, there are several inspections found when  ``operator``  is searched for.

[.feature]
--
image::images/search-small.png[role="left", link="images/search.png"]
--

Every inspection is provided with a description available either in the Description field or in the *Manage Inspection dialog* box.

=== To run an inspection and apply an existing Inspection:

. In the *Projects* window, select the  `InspectTransform.java`  file.
. Choose *Refactor > Inspect and Transform* from the IDE's menu.
. In the *Inspect and Transform* dialog box, select the *Single Inspection* option and click *Browse.*
. In the *Manage Inspections* dialog box, choose the  `Assignment replaceable with operator-assignment`  inspection in the Assignment Issues node.
. Click *OK* to close the *Manage Inspections* dialog box.
. Click *Inspect* in the *Inspect and Transform* dialog box.
The suggested refactoring changes display in the preview panel.
+
[.feature]
--
image::images/single-inspection-small.png[role="left", link="images/single-inspection.png"]
--
+
. Click *Do Refactoring* to apply the changes if required.

== Using Configurations

A set of refactorings grouped together constitute a configuration that can be run on your scope of interest, for example, a class or several classes, packages, or projects. The IDE offers the following predefined configurations:

* <<migrate5,Migrate to JDK 5>>
* <<convert,Migrate to JDK 7>>
* <<migrate8,Migrate to JDK 8>>
* <<organize,Organize Imports>>

NOTE: Not all releases of the JDK introduce new language features. 

=== Migrate to JDK 5

The  ``Migrate to JDK 5``  configuration available in the IDE by default incorporates such refactoring operations as static imports, JDK 5 for-loop usage, unnecessary boxing and unboxing, and switch over Strings application.

[.feature]
--
image::images/jdk5-conf-small.png[role="left", link="images/jdk5-conf.png"]
--

NOTE: The list of refactorings in the configuration can be modified in the Inspections list of the *Manage Inspections* dialog box by selecting and deselecting the items under the  `JDK Migration Support`  node.

=== Migrate to JDK 7

The  ``Migrate to JDK 7``  configuration available in the IDE by default incorporates such refactoring operations as diamond operator usage, try-with-resources conversion, multicatch usage, switch over Strings application, and others.

[.feature]
--
image::images/jdk7-conf-small.png[role="left", link="images/jdk7-conf.png"]
--

NOTE: The list of refactorings in the configuration can be modified in the Inspections list of the *Manage Inspections* dialog box by selecting and deselecting the items under the  `JDK Migration Support`  node.

==== To run and apply the default  ``Migrate to JDK 7``  configuration:

. In the *Projects* window, select the  `PredefinedSet.java` file.
. Choose *Refactor > Inspect* and *Transform* from the IDE's menu.
. In the *Inspect and Transform* dialog box, select the *Configuration* option and choose the  `Migrate to JDK 7`  set of inspections from the drop-down list.
. Click *Inspect*.
Changes that convert the code to JDK 7 syntax display in the preview panel.
+
[.feature]
--
image::images/jdk7-ref-small.png[role="left", link="images/jdk7-ref.png"]
--
+
. Click *Do Refactoring* to apply the changes if required.

=== Migrate to JDK 8

The  ``Migrate to JDK 8``  configuration available in the IDE by default incorporates such refactoring operations as Lambda or Member Reference conversion, static imports, multicatch usage, switch over Strings application, and others.

[.feature]
--
image::images/jdk8-conf-small.png[role="left", link="images/jdk8-conf.png"]
--

NOTE: The list of refactorings in the configuration can be modified in the Inspections list of the *Manage Inspections* dialog box by selecting and deselecting the items under the  `JDK Migration Support`  node.

=== Organize Imports

The  ``Organize Imports``  configuration enables you to inspect the way import statements are organized in the code and refactor your code if desired. By default it includes a single inspection that checks whether import statements correspond to the specified code style rules.

NOTE: To configure the code style rules for import statements:

. Choose *Tools > Options > Editor > Formatting* in the main IDE toolbar.
. Select *Java* in the Language drop-down list.
. Select *Imports* in the *Category* drop-down list.
. Specify the available options as required.
+
[.feature]
--
image::images/org-imports-small.png[role="left", link="images/org-imports.png"]
--
+
. Click *OK* to save your edits.

==== To run and apply the default  ``Organize Imports `` configuration:

. In the *Projects* window, select the  `Imports.java`  file.
. Choose *Refactor > Inspect and Transform* from the IDE's menu.
. In the *Inspect and Transform* dialog box, select the Configuration option and choose the  `Organize Imports`  item.
. Click *Inspect*.
The preview panel displays one occurrence proposed for the Import section of the  `Imports.java`  file to make it aligned with the specified code style rules.
+
[.feature]
--
image::images/imports-ref-small.png[role="left", link="images/imports-ref.png"]
--
+
. Click *Do Refactoring* to apply the changes if necessary.

== Managing Custom Inspections

A custom inspection can be created to instruct the IDE what code structures are to be found and how to transform them.

NOTE: To avoid adding a duplicate inspection to the IDE, choose *Refactor > Inspect and Transform* from the main menu, click either *Manage* or *Browse*, and, in the *Manage Inspections* dialog box, use the *Search* field to look for the required inspection prior to creating a new inspection.

*To create a custom inspection:*

. Choose *Refactor > Inspect* and *Transform* from the IDE's menu.
. In the *Inspect and Transform* dialog box, click either *Manage* or *Browse*.
. In the *Manage Inspections* dialog box, click *New*.
A  `Custom > Inspection`  node is created in the Inspections list.
+
[.feature]
--
image::images/custom-hint-small.png[role="left", link="images/custom-hint.png"]
--
+
. (Optional) Right-click  ``Inspection`` , choose Rename from the popup menu, specify the name required for your custom inspection (for example,  ``MyCustomInspection`` ), and press Enter.
. Click Edit Script. The Script text area displays.
+
[.feature]
--
image::images/script-small.png[role="left", link="images/script.png"]
--
+
. Type the inspection description and code in the Script text area or click Open in Editor and specify the same in the  ``MyCustomInspection.hint``  file.
+
[.feature]
--
image::images/hint-file-small.png[role="left", link="images/hint-file.png"]
--
+
. Click *Save* below the Script text area or press kbd:[Ctrl] + kbd:[S] in the Editor to save your edits.
. Click *OK* to close the *Manage Inspections* dialog box or close the  ``MyCustomInspection.hint``  file in the Editor.
Your custom inspection is done and ready to be applied.

*To run the custom inspection you created:*

1. Choose *Refactor > Inspect and Transform* from the IDE's menu.
2. In the Inspect list of the *Inspect and Transform* dialog box, specify a file, package, or project(s) to be inspected. Alternatively, click the button to the right to open the *Custom Scope* dialog box and specify the custom code to be inspected.
3. Select the *Single Inspection* option and choose the  `MyCustomInspection`  inspection.
+
[.feature]
--
image::images/mycustomhint-small.png[role="left", link="images/mycustomhint.png"]
--
+


. Click *Inspect*.
The suggested refactoring changes display in the preview panel.


. Click *Do Refactoring* to apply the changes if required.

== Summary

This tutorial covers most frequent usages of the Inspect and Transform feature. Please note that with the Inspect and Transform functionality you can also perform custom refactoring at project scope, or apply particular refactoring configurations to several projects open in the IDE, etc.
