/codestyle

Code style for Airlift projects

Code style for Airlift projects

IntelliJ IDEA 2019 or newer

To install, download the IntelliJIdea2019/Airlift.xml file. In IntelliJ, open "Preferences > Code Style", click the cog icon and choose "Import Scheme" option.

Examples

Generated from Intellij IDEA's code formatting preview.

Tabs and Indents

public class Foo
{
    public int[] X = new int[] {1, 3, 5 7, 9, 11};

    public void foo(boolean a, int x, int y, int z)
    {
        label1:
        do {
            try {
                if (x > 0) {
                    int someVariable = a ? x : y;
                    int anotherVariable = a ? x : y;
                }
                else if (x < 0) {
                    int someVariable = (y + z);
                    someVariable = x = x + y;
                }
                else {
                    label2:
                    for (int i = 0; i < 5; i++) {
                        doSomething(i);
                    }
                }
                switch (a) {
                    case 0:
                        doCase0();
                        break;
                    default:
                        doDefault();
                }
            }
            catch (Exception e) {
                processException(e.getMessage(), x + y, z, a);
            }
            finally {
                processFinally();
            }
        }
        while (true);

        if (2 < 3) {
            return;
        }
        if (3 < 4) {
            return;
        }
        do {
            x++
        }
        while (x < 10000);
        while (x < 50000) {
            x++;
        }
        for (int i = 0; i < 5; i++) {
            System.out.println(i);
        }
    }

    private class InnerClass
            implements I1, I2
    {
        public void bar()
                throws E1, E2
        {
        }
    }
}

Spaces

@Annotation(param1 = "value1", param2 = "value2")
@SuppressWarnings({"ALL"})
public class Foo<T, U>
{
    int[] X = new int[] {1, 3, 5, 6, 7, 87, 1213, 2};

    public void foo(int x, int y)
    {
        Runnable r = () -> {
        };
        Runnable r1 = this::bar;
        for (int i = 0; i < x; i++) {
            y += (y ^ 0x123) << 2;
        }
        do {
            try (MyResource r1 = getResource(); MyResource r2 = null) {
                if (0 < x && x < 10) {
                    while (x != y) {
                        x = f(x * 3 + 5);
                    }
                }
                else {
                    synchronized (this) {
                        switch (e.getCode()) {
                            //...
                        }
                    }
                }
            }
            catch (MyException e) {
            }
            finally {
                int[] arr = (int[]) g(y);
                x = y >= 0 ? arr[y] : -1;
            }
        }
        while (true);
    }

    void bar()
    {
        {
            return;
        }
    }
}

class Bar {}

Wrapping and Braces

/*
 * This is a sample file.
 */

public class ThisIsASampleClass
        extends C1
        implements I1, I2, I3, I4, I5
{
    private int f1 = 1;
    private String field2 = "";

    public void foo1(int i1, int i2, int i3, int i4, int i5, int i6, int i7) {}

    public static void longerMethod()
            throws Exception1,
            Exception2, Exception3
    {
// todo something
        int
                i = 0;
        int[] a = new int[] {1, 2,
                             0x0052,
                             0x0053,
                             0x0054};
        int var1 = 1;
        int var2 = 2;
        foo1(0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057);
        int x = (3 + 4 + 5 + 6) * (7 + 8 + 9 + 10) * (11 + 12 + 13 + 14 + 0xFFFFFFFF);
        String s1, s2, s3;
        s1 = s2 = s3 = "012345678901456";
        assert i + j + k + l + n + m <= 2 :
                "assert description";
        int y = 2 > 3 ? 7 + 8 + 9 : 11 + 12 + 13;
        super.getFoo().foo().getBar().bar();

        label:
        if (2 < 3) {
            return;
        }
        else if (2 > 3) {
            return;
        }
        else {
            return;
        }
        for (int i = 0; i < 0xFFFFFF; i += 2) {
            System.out.println(i);
        }
        while (x < 50000) {
            x++;
        }
        do {
            x++
        }
        while (x < 10000);
        switch (a) {
            case 0:
                doCase0();
                break;
            default:
                doDefault();
        }
        try (MyResource r1 = getResource(); MyResource r2 = null) {
            doSomething();
        }
        catch (Exception e) {
            processException(e);
        }
        finally {
            processFinally();
        }
        do {
            x--;
        }
        while (x > 10)
    }

    public static void test()
            throws Exception
    {
        foo.foo().bar("arg1",
                "arg2");
        new Object() {};
    }

    class TestInnerClass {}

    interface TestInnerInterface {}
}

enum Breed
{
    Dalmatian(), Labrador(), Dachshund()
}

@Annotation1
@Annotation2
@Annotation3(param1 = "value1", param2 = "value2")
@Annotation4
class Foo
{
    @Annotation1
    @Annotation3(param1 = "value1", param2 = "value2")
    public static void foo()
    {
    }

    @Annotation1 @Annotation3(param1 = "value1", param2 = "value2") public static int myFoo;

    public void method(@Annotation1 @Annotation3(param1 = "value1", param2 = "value2") final int param)
    {
        @Annotation1 @Annotation3(param1 = "value1", param2 = "value2") final int localVariable;
    }
}

Blank Lines

/*
 * This is a sample file.
 */
package com.intellij.samples;

import com.intellij.idea.Main;

import javax.swing.*;

import java.util.Vector;

public class Foo
{
    private int field1;
    private int field2;

    public void foo1()
    {
        new Runnable()
        {
            public void run()
            {
            }
        }
    }

    public class InnerClass
    {
    }
}

class AnotherClass
{
}

interface TestInterface
{
    int MAX = 10;
    int MIN = 1;

    void method1();

    void method2();
}

JavaDoc

General guidelines

  • Do not include @author tags. The commit history is enough for this purpose.

Example

package sample;

public class Sample
{
    /**
     * This is a method description that is long enough to exceed right margin.
     * <p/>
     * Another paragraph of the description placed after blank line.
     * <p/>
     * Line with manual
     * line feed.
     *
     * @param i short named parameter description
     * @param longParameterName long named parameter description
     * @param missingDescription
     * @return return description.
     * @throws XXXException description.
     * @throws YException description.
     * @throws ZException
     * @invalidTag
     */
    public abstract String sampleMethod(int i, int longParameterName, int missingDescription)
            throws XXXException, YException, ZException;

    /**
     * One-line comment
     */
    public abstract String sampleMethod2();

    /**
     * Simple method description
     *
     * @return
     */
    public abstract String sampleMethod3();
}