| :linkattrs: |
| = Gerrit Code Review - IntelliJ IDEA Setup |
| |
| == Prerequisites |
| |
| === Bazel |
| |
| Bazel must be installed as described by |
| <<dev-bazel#installation,Building with Bazel - Installation>>. |
| |
| It's strongly recommended to verify you can build your Gerrit tree with Bazel |
| for Java 11 from the command line first. Ensure that at least |
| `bazel build gerrit` runs successfully before you proceed. |
| |
| === IntelliJ version and Bazel plugin |
| |
| Before downloading IntelliJ, look at the |
| link:https://plugins.jetbrains.com/plugin/8609-bazel/versions[JetBrains plugin repository page of the Bazel plugin,role=external,window=_blank] |
| to see what version of the IntelliJ IDEA it is actually compatible with. |
| |
| Also note that the version of the Bazel plugin used in turn may or may not be |
| compatible with the Bazel version used. |
| |
| In addition, Java 11 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 11. |
| |
| === Installation of IntelliJ IDEA |
| |
| Please refer to the |
| link:https://www.jetbrains.com/help/idea/installation-guide.html[installation guide provided by JetBrains,role=external,window=_blank] |
| to install it on your platform. Make sure to install a version compatible with |
| the Bazel plugin as mentioned above. |
| |
| == Installation of the Bazel plugin |
| |
| The plugin is usually installed using the JetBrains plugin repository as shown |
| in the steps below, but it's also possible to |
| link:https://github.com/bazelbuild/intellij[build it from source]. |
| |
| . Go to *File -> Settings -> Plugins*. |
| + |
| (Or, from the welcome screen, *Configure -> Plugins*) |
| . Activate the *Marketplace* tab. |
| . Search for the plugin `Bazel` (by Google). |
| + |
| TIP: In case the Bazel plugin is not listed, or if it shows an outdated version, |
| verify the compatibility between the Bazel plugin and IntelliJ IDEA on link:https://plugins.jetbrains.com/plugin/8609-bazel/versions[the JetBrains plugin page,role=external,window=_blank]. |
| . Install it. |
| . Restart IntelliJ IDEA. |
| |
| [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 the project |
| |
| . Go to *File -> Import Bazel Project*. |
| + |
| (Or, from the welcome screen, *Import Bazel Project* should already be shown in |
| there.) |
| . 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. |
| . Finish the creation of the project. |
| . Verify that you can now build the project. Hit the button with the Bazel icon |
| (located on the top-right by default) to synchronize the project. Note that |
| warnings may be present in the build. |
| |
| At this point all the basic functionality should be working such as Java class |
| inspection and running <<unit-tests,unit tests>>. |
| |
| 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. |
| |
| == Recommended settings |
| |
| === Code style |
| |
| ==== google-java-format plugin |
| Install the `google-java-format` plugin by following these steps: |
| |
| . Go to *File -> Settings -> Plugins*. |
| . Activate the *Marketplace* tab. |
| . Search for the plugin `google-java-format` by Google. |
| . Install it. |
| . Restart IntelliJ IDEA. |
| |
| Every time you start IntelliJ IDEA, 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. |
| |
| Please refer to the documentation on the <<dev-crafting-changes#style,code style>> |
| for which version of `google-java-format` is used with Gerrit. |
| |
| ==== 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,role=external,window=_blank]. |
| . Go to *File -> Settings -> Editor -> Code Style*. |
| . Click on the wrench icon with the tooltip _Show Scheme Actions_. |
| . Click on *Import Scheme*. |
| . Select the previously downloaded file `intellij-java-google-style.xml`. |
| . Make sure that `GoogleStyle` is chosen as the current *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 (by JetBrains) 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. If you didn't select a custom data directory the command could look like |
| this, as run from the Gerrit source tree checkout as working directory: |
| + |
| ---- |
| cp -r tools/intellij/copyright .ijwb/.idea/ |
| ---- |
| . Go to *File -> Settings -> Editor -> Copyright -> Copyright Profiles*. |
| . Verify that the *Gerrit Copyright* is now present there. |
| + |
| Only in case it hasn't picked up the copyright profile automatically, import |
| the `Gerrit_Copyright.xml` from that folder manually. |
| |
| === Git integration |
| This section is only relevant in case you want to use the Git integration |
| plugin in IntelliJ IDEA. |
| |
| To simplify the creation of commit messages which are compliant with the |
| <<dev-crafting-changes#commit-message,Commit Message>> format, do the following: |
| |
| . Go to *File -> Settings -> Version Control -> Commit Dialog*. |
| . In the *Commit message inspections*, activate the three inspections: |
| * *Blank line between subject and body*, |
| * *Limit body line* and |
| * *Limit subject line*. |
| . For the limit line inspections, make sure that 72 is specified as value. |
| . For *Limit body line*, tick *Show right margin* and *Wrap when typing reaches |
| right margin*. |
| |
| In addition, you should follow the instructions of |
| <<dev-crafting-changes#git-commit-settings,this section>> (if you haven't |
| done so already): |
| |
| * Install the Git commit message 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*. |
| |
| [[runconfigurations-daemon]] |
| === Gerrit Daemon |
| |
| [WARNING] |
| ==== |
| At the moment running this (local) 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>>. |
| |
| (link:https://issues.gerritcodereview.com/issues/40011100[Issue 40011100,role=external,window=_blank]) |
| ==== |
| |
| 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]] |
| === 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 by selecting *Create |
| 'Bazel test [...]'...* from the context menu. |
| |
| 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* from the *Templates*. |
| . Adjust *Configuration -> Settings -> Host* and *Port*. |
| . Start this configuration in `Debug` mode. |
| |
| TIP: This run configuration dialog also shows the line for the JVM as startup |
| flag that you can copy to include in your |
| `$(gerrit_test_site)/etc/gerrit.config` in the `[container]` section in order |
| to work-around the <<runconfigurations-daemon,local run configuration issue>>. |
| |
| GERRIT |
| ------ |
| Part of link:index.html[Gerrit Code Review] |
| |
| SEARCHBOX |
| --------- |