= Gerrit Code Review - IntelliJ Setup

== Prerequisites
You need an installation of IntelliJ version 2016.2 or later. The latest version
might not yet be in-sync with the Bazel plugin for IntelliJ. It usually becomes
so quite quickly after new IDEA versions get released, though. It should then be
possible to use the fairly latest IntelliJ release with an updated Bazel plugin.

In addition, Java 8 must be specified on your path or via `JAVA_HOME` so that
building with Bazel via the Bazel plugin is possible.

TIP: If the synchronization of the project with the BUILD files using the Bazel
plugin fails and IntelliJ reports the error **Could not get Bazel roots**, this
indicates that the Bazel plugin couldn't find Java 8.

Bazel must be installed as described by
<<dev-bazel#installation,Building with Bazel - Installation>>.

== Installation of the Bazel plugin

. Go to *File -> Settings -> Plugins*.
. Click on *Browse Repositories*.
. Search for the plugin `IntelliJ with Bazel`.
. Install it.
. Restart IntelliJ.

TIP: If your project's Bazel build fails with **Cannot run program "bazel": No
such file or directory**, then you may have to set the binary location in the
Bazel plugin settings:

. Go to Preferences -> Other Settings -> Bazel Settings.
. Set the Bazel binary location.

== Creation of IntelliJ project

. Go to *File -> Import Bazel Project*.
. For *Use existing bazel workspace -> Workspace*, select the directory
containing the Gerrit source code.
. Choose *Import from workspace* and select the `.bazelproject` file which is
located in the top directory of the Gerrit source code.
. Adjust the path of the project data directory and the name of the project if
desired.

TIP: The project data directory can be separate from the source code. One
advantage of this is that project files don't need to be excluded from version
control.

Unfortunately, the created project seems to have a broken output path. To fix
it, please complete the following steps:

. Go to *File -> Project Structure -> Project Settings -> Modules*.
. Switch to the tab *Paths*.
. Click on *Inherit project compile output path*.
. Click on *Use module compile output path*.

== Recommended settings

=== Code style

==== google-java-format plugin
Install the `google-java-format` plugin by following these steps:

. Go to *File -> Settings -> Plugins*.
. Click on *Browse Repositories*.
. Search for the plugin `google-java-format`.
. Install it.
. Restart IntelliJ.

Every time you start IntelliJ, make sure to use *Code -> Reformat with
google-java-format* on an arbitrary line of code. This replaces the default
CodeStyleManager with a custom one. Thus, uses of *Reformat Code* either via
*Code -> Reformat Code*, keyboard shortcuts, or the commit dialog will use the
custom style defined by the `google-java-format` plugin.

==== Code style settings
The `google-java-format` plugin is the preferred way to format the code. As it
only kicks in on demand, it's also recommended to have code style settings
which help to create properly formatted code as-you-go. Those settings can't
completely mimic the format enforced by the `google-java-format` plugin but try
to be as close as possible. So before submitting code, please make sure to run
*Reformat Code*.

. Download
https://raw.githubusercontent.com/google/styleguide/gh-pages/intellij-java-google-style.xml[
intellij-java-google-style.xml].
. Go to *File -> Settings -> Editor -> Code Style*.
. Click on *Manage*.
. Click on *Import*.
. Choose `IntelliJ IDEA Code Style XML`.
. Select the previously downloaded file `intellij-java-google-style.xml`.
. Make sure that `Google Style` is chosen as *Scheme*.

In addition, the EditorConfig settings (which ensure a consistent style between
Eclipse, IntelliJ, and other editors) should be applied on top of that. Those
settings are in the file `.editorconfig` of the Gerrit source code. IntelliJ
will automatically pick up those settings if the EditorConfig plugin is enabled
and configured correctly as can be verified by:

. Go to *File -> Settings -> Plugins*.
. Ensure that the EditorConfig plugin is enabled.
. Go to *File -> Settings -> Editor -> Code Style*.
. Ensure that *Enable EditorConfig support* is checked.

NOTE: If IntelliJ notifies you later on that the EditorConfig settings override
the code style settings, simply confirm that.

=== Copyright
Copy the folder `$(gerrit_source_code)/tools/intellij/copyright` (not just the
contents) to `$(project_data_directory)/.idea`. If it already exists, replace
it. Then go to *File -> Settings -> Editor -> Copyright -> Copyright Profiles*,
and import `Gerrit_Copyright.xml` to IntelliJ in case it doesn't pick the
copyright up automatically.

=== File header
By default, IntelliJ adds a file header containing the name of the author and
the current date to new files. To disable that, follow these steps:

. Go to *File -> Settings -> Editor -> File and Code Templates*.
. Select the tab *Includes*.
. Select *File Header*.
. Remove the template code in the right editor.

=== Commit message
To simplify the creation of commit messages which are compliant with the
<<dev-contributing#commit-message,Commit Message>> format, do the following:

. Go to *File -> Settings -> Version Control*.
. Check *Commit message right margin (columns)*.
. Make sure that 72 is specified as value.
. Check *Wrap when typing reaches right margin*.

In addition, you should follow the instructions of
<<dev-contributing#git_commit_settings,this section>> (if you haven't
done so already):

* Install the Git hook for the `Change-Id` line.
* Set up the HTTP access.

Setting up the HTTP access will allow you to commit changes via IntelliJ without
specifying your credentials. The Git hook won't be noticeable during a commit
as it's executed after the commit dialog of IntelliJ was closed.

== Run configurations
Run configurations can be accessed on the toolbar. To edit them or add new ones,
choose *Edit Configurations* on the drop-down list of the run configurations
or go to *Run -> Edit Configurations*.

=== Pre-configured run configurations

In order to be able to use the pre-configured run configurations, the following
steps are necessary:

. Make sure that the folder `runConfigurations` exists within
`$(project_data_directory)/.idea`. If it doesn't exist, create it.
. Specify the IntelliJ path variable `GERRIT_TESTSITE`. (This configuration is
shared among all IntelliJ projects.)
.. Go to *Settings -> Appearance & Behavior -> Path Variables*.
.. Click on the *+* to add a new path variable.
.. Specify `GERRIT_TESTSITE` as name and the path to your local test site as
value.

The copied run configurations will be added automatically to the available run
configurations of the IntelliJ project.

==== Gerrit Daemon
WARNING: At the moment running this configuration results in a
`java.io.FileNotFoundException`. To debug a local Gerrit server with IntelliJ,
use the instructions of <<dev-readme#run_daemon,Running the Daemon>> in
combination with <<remote-debug,Debugging a remote Gerrit server>>.

Copy `$(gerrit_source_code)/tools/intellij/gerrit_daemon.xml` to
`$(project_data_directory)/.idea/runConfigurations/`.

This run configuration starts the Gerrit daemon similarly as
<<dev-readme#run_daemon,Running the Daemon>>.

NOTE: The <<dev-readme#init,Site Initialization>> has to be completed
before this run configuration works properly.

=== Unit tests
To create run configurations for unit tests, run or debug them via a right-click
on a method, class, file, or package. The created run configuration is a
temporary one and can be saved to make it permanent.

Normally, this approach generates JUnit run configurations. When the Bazel
plugin manages a project, it intercepts the creation and creates a Bazel test
run configuration instead, which can be used just like the standard ones.

[[remote-debug]]
=== Debugging a remote Gerrit server
If a remote Gerrit server is running and has opened a debug port, you can attach
IntelliJ via a `Remote debug configuration`.

. Go to *Run -> Edit Configurations*.
. Click on the *+* to add a new configuration.
. Choose *Remote*.
. Adjust *Configuration -> Settings -> Host* and *Port*.
. Start this configuration in `Debug` mode.

GERRIT
------
Part of link:index.html[Gerrit Code Review]

SEARCHBOX
---------
