// 
//     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.
//

= Static Code Analysis 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: Static Code Analysis in the NetBeans IDE Java Editor - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Static Code Analysis in the NetBeans IDE Java Editor
:experimental:

The NetBeans IDE Java Editor has a static code analysis feature, which is a tool for finding potential problems and detecting inconsistencies in your source code.

In this tutorial, you will learn how to perform static analysis of your Java code using FindBugs and NetBeans Java Hints without actually running your applications.

== Requirements

*To complete this tutorial, you need the following software and resources.*

|===
|Software or Resource |Version Required 

|link:https://netbeans.org/projects/samples/downloads/download/Samples/Java/library.zip[+library.zip+] |NetBeans project 

|link:http://repo1.maven.org/maven2/com/google/code/findbugs/jsr305/2.0.0/jsr305-2.0.0.jar[+jsr305-2.0.0.jar+] |Java Specification Request intended to improve the effectiveness of static analysis tools 
|===

NOTE: ``jsr305-2.0.0.jar``  is included into  ``library.zip``  for the purposes of this tutorial.

If using another NetBeans project, link:http://repo1.maven.org/maven2/com/google/code/findbugs/jsr305/2.0.0/jsr305-2.0.0.jar[+jsr305-2.0.0.jar+] should be downloaded and added to the Libraries folder of the your project in the IDE as follows:
[lowerroman, start=1]
. Right-click the Libraries folder and choose the Add JAR/Folder from the popup menu.
. In the Add JAR/Folder dialog box, specify the path to the downloaded  ``jsr305-2.0.0.jar``  file and click Open.

image::images/jar.png[]

== Setting Up the Tutorial Environment

In addition to the required software listed above you should have the following installed on your computer:

* The link:https://netbeans.org/projects/samples/downloads/download/Samples/Java/library.zip[+library.zip+] file should be unzipped into your NetBeans project folder and opened in the NetBeans IDE.

The FindBugs plugin should be downloaded and installed into the NetBeans IDE as follows:

[arabic, start=1]
. Choose Source > Inspect from the main IDE's menu.
. In the Inspect dialog box, click Install.

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

. In the Installer dialog box, click Next to proceed with the installation.

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

. Review the license agreement, select the license agreement option, and click Install.
. When the installation is complete, click Finish.

== Using Predefined Configurations

You can use the following predefined configurations when inspecting your code in the NetBeans IDE:

* <<all,All Analyzers>>
* <<hints,NetBeans Java Hints>>
* <<fb,FindBugs>>
* <<default,Default>>

[[all]]
=== Running All Analyzers

The  ``All Analyzers``  configuration deploys all static code analysis tools available in the IDE.

*To run the  ``All Analyzers``  configuration, complete the following steps:*

. Choose Source > Inspect from the main IDE's toolbar.
. In the Scope drop-down list of the Inspect dialog box, select  ``Current Project (library)`` .
. In the Configuration drop-down list, select the  ``All Analyzers``  configuration.

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

NOTE: You need to install the <<plugin,FindBugs>> plugin to run this configuration for the first time.


. Click Inspect.
The results of the analysis are displayed in the Inspector Window as a tree view on the left.

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

The description of the currently selected in the tree view finding is displayed on the right.

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

NOTE: If you want to leave some part of your code that is reported as problematic as is, the IDE allows you to suppress the warning for this code to leave it without any changes. You can double-click a warning in the tree view of the Inspector Window to go to the Source Editor. + 
Press kbd:[Alt+Enter], click the black arrow pointing to the right at the end of the displayed hint, and choose  ``SuppressWarning - _(warning name)_`` .

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

[[hints]]
=== Verifying Java Code against NetBeans Java Hints

The  ``NetBeans Java Hints``  configuration available in the IDE enables you to verify if the predefined coding standard rules are satisfied by the source code under consideration. In other words, it applies a set of NetBeans Java Hints (also known as code inspections) to your Java source files.

*To run the  ``NetBeans Java Hints``  configuration, complete the following steps:*

. Choose Source > Inspect from the main IDE's toolbar.
. In the Scope drop-down list of the Inspect dialog box, select  ``Open Projects``  (if you have only one  ``library``  project open in the IDE) or  ``Current Project (library)`` .

NOTE: You can define a scope (a file, package, or project(s)) for the  ``NetBeans Java Hints``  configuration.


. Select the Configuration radio button and choose  ``NetBeans Java Hints``  in the drop-down list.

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


. Click Inspect.
The IDE displays the tree view with the results of the analysis with the  ``NetBeans Java Hints``  configuration in the Inspector Window.

image::images/hintsconfig.png[]


. In the Inspector Window, click the <<categorize,Categorize>> button in the toolbar on the left to view the problems grouped into categories.

image::images/catview.png[]

The following table displays the commands available in the Inspector Window.
|===

|Icon |Name |Function 

a|image::images/refreshbutton.png[] |*Refresh* |Displays a refreshed list of the static analysis results. 

a|image::images/upbutton.png[] |*Previous Problem* |Displays the previous problem in the list of the static analysis results. 

a|image::images/downbutton.png[] |*Next Problem* |Displays the following problem in the list of the static analysis results. 

a|image::images/categorizebutton.png[] |
*Categorize* |Toggles the collapsed view of the problems detected in a file, project, or package or the categorized view of all the detected problems. 
|===

[[fb]]
=== Finding Potential Problems in Java Code with FindBugs

The  ``FindBugs``  configuration available in the IDE enables you to find a wide range of potential problems in your code. It invokes the popular open source FindBugs tool for code analysis in Java. The bug report gets generated and is displayed in the Inspector Window of the NetBeans IDE, which categorizes all the found problems and allows direct navigation from the bugs in the report to the suspicious code. You can also read a bug description in the adjacent window or review it at the link:http://findbugs.sourceforge.net/bugDescriptions.html[+FindBugs Bug Descriptions+] page by the pointer provided at the top of the left frame.

NOTE: You need to install the <<plugin,FindBugs>> plugin to run this configuration for the first time.

*To identify potential errors in your Java code with the  ``FindBugs``  configuration, complete the following steps:*

. Open the  ``library``  project in the NetBeans IDE and choose Source > Inspect from the main toolbar.
. In the Scope drop-down list of the Inspect dialog box, select  ``Current Project (library)`` .

NOTE: You can inspect a file, package, or project(s) with the  ``FindBugs``  configuration.


. In the Inspect dialog box, select the  ``FindBugs``  configuration.

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




. Click the Inspect button to initiate the static code analysis.
The result of the static code analysis is displayed in the Inspector Window below the Source Editor.
The description of the selected bug is displayed in the frame on the right.

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


. Alternatively, click the <<categorize,Categorize>> button in the toolbar on the left to view the bugs grouped into categories.

image::images/fbcat.png[]

NOTE: If you double-click an issue in the expanded list, the IDE displays the reported issue in the Source Editor. + 
Press kbd:[Alt+Enter] to view the bug description in the source code.

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

NOTE: Potential errors are highlighted in the code with exclamation mark icons (image::images/exclamation.png[]) in the left margin of the Source Editor.

*To enable FindBugs in the Java Editor, complete the following steps:*

. Choose Tools > Options in the main IDE's toolbar.
. Select the Editor tab and choose Hints.
. Choose  ``FindBugs``  in the Language drop-down list.

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


. Select the Run FindBugs in Editor option.
. Click OK.
If you now press kbd:[Alt+Enter] in the source code where a bug is reported and click the black arrow pointing to the right at the end of the displayed tip, the IDE shows some fixing options for a potential bug.

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

[[default]]
=== Customizing a Default Configuration

While working on your code you may need to customize a predefined configuration that includes your own NetBeans Java hints or FindBugs bugs.

*To tailor a predefined  ``Default``  configuration to your own needs, complete the following steps:*

. Choose Source > Inspect from the main IDE's toolbar.
. In the Inspect dialog box, select the Configuration radio button and select the  ``Default``  configuration.
. Click Manage.
The IDE displays the Configurations dialog box.

image::images/configurations-db.png[]


. Ensure  ``Default``  is selected in the Configurations drop-down list.
. In the Analyzer drop-down list, select the  ``JRE 8 Profiles Conformance`` ,  ``Netbeans Java Hints`` , or  ``FindBugs``  analyzer.
. Depending on the choice of the analyzer in the previous step, select the profile to validate, the inspections, or bugs you need to include into your  ``Default``  configuration.

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


. Click OK to save your  ``Default``  configuration.

== Creating and Deleting Configurations

You can create and delete your own configurations to be used in the static analysis of your Java code.

*To create a configuration, complete the following steps:*

. Choose Source > Inspect from the main IDE's toolbar.
. In the Inspect dialog box, select the Configuration radio button and select the  ``Default``  configuration.
. Click Manage.
. In the Configurations dialog box, click the black arrow at the end of the Configurations drop-down list and choose New.

image::images/newconfig.png[]

A  ``newConfig``  configuration is created and added to the Configurations drop-down list.

image::images/newconfig-created.png[]


. In the Analyzer drop-down list, choose  ``JRE 8 Profiles Conformance`` ,  ``Netbeans Java Hints`` , or  ``FindBugs`` .
. Specify the profile, inspections, or bugs to be included into your own configuration.
. Click OK to save your edits and close the Configurations dialog box.
The created  ``newConfig``  configuration is available in the Configuration drop-down list of the Inspect dialog box.

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

NOTE: To rename a configuration, select the  ``newConfig``  configuration in the Configurations drop-down list, click the black arrow at the end of the Configurations drop-down list and choose Rename. Type a new name (for example,  ``renamedConfig`` ) and press kbd:[Enter] to save your edits.

image::images/renamedconfig.png[]

*To delete a configuration, complete the following steps:*

. Choose Source > Inspect from the main IDE's toolbar.
. In the Inspect dialog box, select the Configuration radio button and select the configuration to be deleted ( ``renamedConfig``  in this example).
. Click Manage.
. In the Configurations dialog box, click the black arrow at the end of the Configurations drop-down list and choose Delete.

image::images/delete.png[]


. In the Delete Configuration dialog box, click Yes to confirm the deletion of the configuration.

image::images/delete-confirm.png[]

The  ``renamedConfig``  configuration is deleted from the Configurations list.

NOTE: Refer to the link:http://platform.netbeans.org/tutorials/nbm-java-hint.html[+NetBeans Java Hint Module Tutorial+] for information on how to create a NetBeans module that provides one or more NetBeans Java hints.

== Running Single Inspections

You can inspect your code for a particular deficiency in your source code using the static code analysis feature in the NetBeans IDE.

*To detect a specific inconsistency or problem in your Java source code with a single inspection, complete the following steps:*

. Choose Source > Inspect from the main IDE's menu.
. In the Scope drop-down list of the Inspect dialog box, select a file, package, or project(s) to be inspected.
. Select Single Inspection and do either of the following:
* In the Single Inspection drop-down list, scroll and select a _single_ NetBeans Java hint or FindBugs bug to be used in the source code analysis.

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

* Click Browse to open the Configurations dialog box and, in the Analyzer drop-down list, specify the analyzer and then choose a profile (for the JRE 8 Profile Compliance analyzer), a _single_ inspection (for the NetBeans Java Hints analyzer), or a _single_ bug (for the FindBugs analyzer) to be used in the source code analysis. Click OK to close the Configurations dialog box.

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


. In the Inspect dialog box, click Inspect to perform the source code analysis. 
After the Inspect operation is completed, the hints that can be applied to your code or bugs that have been found are displayed in the Inspector Window below the Source Editor.

== Summary

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

<<top,top>>
