Gerrit Code Review - Eclipse Setup
==================================

This document is about configuring Gerrit Code Review into an
Eclipse workspace for development and debugging with GWT.

Java 6 or later SDK is also required to run GWT's compiler and
runtime debugging environment.


Maven Plugin
------------

Install the Maven Integration plugins.

In Eclipse version 3.7 (Indigo) and later, these are available in the
default update site and can be found under the 'Collaboration' category.

For older versions the update site must be manually added; the link can
be found on the http://www.eclipse.org/m2e/download/[m2eclipse download page].


[[Formatting]]
Code Formatter Settings
-----------------------

Import `tools/GoogleFormat.xml` using Window -> Preferences ->
Java -> Code Style -> Formatter -> Import...

This will define the 'Google Format' profile, which the project
settings prefer when formatting source code.


Import Projects
---------------

Import the projects into Eclipse by going to File -> Import... -> Maven ->
Existing Maven Projects and selecting the directory containing pom.xml.

Some of the source code is generated with ANTLR sources.  To build
these files, right click on the imported projects, Maven -> Update
Project Configuration.  This will resolve compile errors identified
after import.


Site Initialization
-------------------

link:dev-readme.html#build[Build] once on the command line and
then follow link:dev-readme.html#init[Site Initialization] in the
Developer Setup guide to configure a local site for testing.


Testing
-------

Running the Daemon
~~~~~~~~~~~~~~~~~~

Duplicate the existing `pgm_daemon` launch configuration:

* Run -> Debug Configurations ...
* Java Application -> `pgm_daemon`
* Right click, Duplicate

* Modify the name to be unique.

* Switch to Arguments tab.
* Edit the `-d` program argument flag to match the path used during
  'init'.  The template launch configuration resolves to ../test_site
  since that is what the documentation recommends.

* Switch to Common tab.
* Change Save as to be Local file.


[[hosted-mode]]
Running Hosted Mode
~~~~~~~~~~~~~~~~~~~

To debug the GWT code executing in the web browser, three additional Git
repositories need to be cloned.

* https://gerrit.googlesource.com/gwtexpui
* https://gerrit.googlesource.com/gwtjsonrpc
* https://gerrit.googlesource.com/gwtorm

In Eclipse, import the pom.xml file in the root directory of each of
these cloned gits via General -> Maven Projects.

Duplicate the existing `gwtui_dbg` launch configuration:

* Run -> Debug Configurations ...
* Java Application -> `gwtui_dbg`
* Right click, Duplicate

* Modify the name to be unique.

* Switch to Arguments tab.
* Edit the `-Dgerrit.site_path=` VM argument to match the path
  used during 'init'.  The template launch configuration resolves
  to ../test_site since that is what the documentation recommends.

* Switch to Common tab.
* Change Save as to be Local file.


[[known-problems]]
Known problems
--------------

* When running Gerrit under the Eclipse debugger, code that attempts
to load Prolog code may erroneously raise ClassNotFoundException,
claiming that classes in the `Gerrit` package can't be found. The
error can often be resolved by rebuilding Gerrit with `mvn package`
and restarting the debug session.

* OpenID authentication won't work in hosted mode, so you need to change
the link:config-gerrit.html#auth.type[auth.type] configuration parameter
to `DEVELOPMENT_BECOME_ANY_ACCOUNT` to disable OpenID and allow you to
impersonate whatever account you otherwise would've used.


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