Developer How-To Setup And Use IntelliJ
- 1 Initial Setup
- 2 How To Configure Your IDE
- 2.1 Setup Code Style And Format For OpenMRS
- 2.1.1 Java Code Format
- 2.1.2 Java Imports
- 2.1.3 XML Code Format
- 2.1.4 Maximum Line Length
- 2.1.5 Add OpenMRS Code Templates
- 2.1.5.1 See all templates available
- 2.1.5.2 Add a unit test to a test class
- 2.1.5.3 Add logging to class
- 2.1.5.4 Log an event
- 2.2 Import OpenMRS core into IntelliJ
- 2.1 Setup Code Style And Format For OpenMRS
- 3 Tips on How To Use Your IDE
- 3.1 Running a JUnit Test
- 3.2 Debugging
Initial Setup
Download & install IntelliJ from https://www.jetbrains.com/idea/
Make sure to use the Git/Subversion and Eclipse plugins provided with IDEA
Edit {idea_install_dir}/bin/idea.vmoptions
Suggested JVM startup parameters if you have 3 Gb RAM
-Xms64m
-Xmx1024m
-XX:MaxPermSize=400m
-ea
How To Configure Your IDE
Setup Code Style And Format For OpenMRS
All images and settings shown in the following sections were taken on IntelliJ version: IDEA 2016.3.4 (and 2019.3.2 on MacOS)
If you update the documentation please update the IntelliJ version as well!
Java Code Format
1. Install Eclipse Code Formatter plugin in intelliJ | Go to Files
-> Settings
-> Plugins
| Select Marketplace and search for Eclipse Code Formatter, then install it and restart your IntelliJ. For mac OS go to IntellijIDEA -> Preferences -> Plugins
2. Get OpenMRS Formatter XML file
3. Go to Files -> Settings -> Other Settings -> Eclipse Code Formatter
| The configuration must look like this
Turn on the Eclipse Code Formatter
Import the previously downloaded XML file
Turn off the option for Optimizing Imports
Keep everything else to default.
4. Apply the changes
From now on you can let IntelliJ format any java class for you. Read IntelliJ - Reformatting Source Code on ways to do that.
Java Imports
In order for IntelliJ to order the java imports according to the OpenMRS style and remove unused imports do the following:
Open the IntelliJ preferences like you did intellij-code-format
We are using the the eclipse-imports which are different from IntelliJ's!
So make sure that you change the "Import Layout" to match the configuration as shown above. You will need to move the "Import static all other imports" to the top followed by a blank line, then "import javax.*", "import java.*" another blank line and then "import all other imports".
Also check the two settings of "Class count to use import with '*'" and "Names count to use static import with '*'" and make sure to set them to a high enough number like for ex. 99. Otherwise IntelliJ will replace your imports with so called "star imports" using * which we do not want.
From now on you can let IntelliJ format and remove unused imports in any java class for you. Read IntelliJ - Optimize Imports.
! Please apply this command to clean up your imports before you create a pull request on Github since the imports are not cleaned up by the maven formatter plugin we use when you run the build command !
XML Code Format
The OpenMRSFormatter.xml only handles the Java formatting (limitation of Eclipse), you therefore need to configure the XML Editor.
Open the IntelliJ preferences and enter the search term "xml" which should show Editor -> Code Style -> XML under the results in the left pane like shown here
Make sure that
on the "Tabs and Indents" tab "Use tab character" is selected
on the "Other" tab the "Right margin (columns)" is set to 125
Maximum Line Length
The maximum line length we choose for XML is equal to the one we set for Java files. For Java this is ensured by the Checkstyle - LineLength so please update this number here if the openmrs-core/checkstyle.xml setting changes.
Add OpenMRS Code Templates
To save you some typing and focus on solving problems we put together a few code snippets/templates (called Live Templates in IntelliJ). Once you imported them you can type short keywords and IntelliJ will insert the appropriate template code with some variables for you to adjust the snippet to your use case.
To import the templates copy the tools/src/main/resources/intellij/templates.xml file to the destination given to you in these IntelliJ sharing live templates instructions.
Follow the next section on how to see and use the templates.
See all templates available
After importing the templates restart IntelliJ, open the preferences and enter the search term "templates" which should show Editor -> Live Templates under the results in the left pane like shown here
As you can see the templates are in what IntelliJ calls "template group" named "OpenMRS" so you can easily find and enable/disable the templates if you for example work on other projects.
You can of course also get the exact names of all snippets by executing
cat tools/src/main/resources/intellij/templates.xml | grep "template name"
From now on you can use the templates:
type in the name of the template (which you can find in the Templates settings as shown above)
(if the context menu does not show hit
Control+Space
)hit TAB to expand the code template (this can be changed in the template settings Options -> Expand with)
if there are variables in the template you can now override them and advance to the next variable or the end with ENTER
Read the next sections for some examples.
Add a unit test to a test class
To add a new unit test to a test class, open the test class in the editor. Place the cursor to where you want to add the test and write test which will open a context menu
(if the context menu does not show hit Control+Space
)
to expand the snippet hit TAB
(or the key you configured if you changed the default key to expand with)
the cursor is placed at the snippet variables which are there to adjust the template for your use case. In this template you first enter the name of the method you want to test and hit ENTER to advance to type in the should style sentence of what you are testing. Hit ENTER again to advance to the method body.
Add logging to class
If you want to log an event in a class that does not yet have an instance of a Logger open the class and place the cursor to the top and type logger which will show you a list of options like shown below
(if the context menu does not show hit Control+Space
)
hit TAB
(or the key you configured if you changed the default key to expand with). This will add the logger with the necessary imports like so
You see the access modifier defaults to private but is selected so you can overrule that if you'd like, by hitting ENTER you accept the default value and
you are ready to log!
Log an event
If your class already has a Logger instance just place the cursor to where you want to log and type logd (for debug), logi (for info), ... hit Control+Space
(for the context menu) select the template and hit enter. Depending on what template you are using you might need to only enter your log message or also add a parameter after the message like for example for logpe (for logging an error and passing it an exception) or logpi (to log an info message using the slf4j parametrized message style like log.info("the temperatur was {}", temperatureObject) ).
Import OpenMRS core into IntelliJ
1) Clone the desired module
2) Run "mvn clean install -DskipTests"
3) Import the Project in IntelliJ
4) Import from External Model -> Maven
5) Check "Search for projects recursively"
6) Keep all other options as default