| Index: styleguide/java/java.md
|
| diff --git a/styleguide/java/java.md b/styleguide/java/java.md
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ad1a1ba25b6b81c27f6c3b18f33504b246495400
|
| --- /dev/null
|
| +++ b/styleguide/java/java.md
|
| @@ -0,0 +1,71 @@
|
| +# Chromium Java style guide
|
| +
|
| +_For other languages, please see the [Chromium style
|
| +guides](https://chromium.googlesource.com/chromium/src/+/master/styleguide/styleguide.md)._
|
| +
|
| +Chromium follows the [Android Open Source style
|
| +guide](http://source.android.com/source/code-style.html) unless an exception
|
| +is listed below.
|
| +
|
| +## Style
|
| +
|
| +* Copyright header should use
|
| + [Chromium](https://chromium.googlesource.com/chromium/src/+/master/styleguide/styleguide.md)
|
| + style.
|
| +* TODO should follow chromium convention i.e. `TODO(username)`.
|
| +* Use of ```assert``` statements are encouraged.
|
| +* Fields should not be explicitly initialized to default values (see
|
| + [here](https://groups.google.com/a/chromium.org/d/topic/chromium-dev/ylbLOvLs0bs/discussion)).
|
| +* For automated style checking install
|
| + [checkstyle](https://sites.google.com/a/chromium.org/dev/developers/checkstyle).
|
| +
|
| +## Location
|
| +
|
| +"Top level directories" are defined as directories with a GN file, such as
|
| +[//base](https://chromium.googlesource.com/chromium/src/+/master/base/)
|
| +and
|
| +[//content](https://chromium.googlesource.com/chromium/src/+/master/content/),
|
| +Chromium Java should live in a directory named
|
| +`<top level directory>/android/java`, with a package name
|
| +`org.chromium.<top level directory>`. Each top level directory's Java should
|
| +build into a distinct JAR that honors the abstraction specified in a native
|
| +[checkdeps](https://chromium.googlesource.com/chromium/buildtools/+/master/checkdeps/checkdeps.py)
|
| +(e.g. `org.chromium.base` does not import `org.chromium.content`). The full
|
| +path of any java file should contain the complete package name.
|
| +
|
| +For example, top level directory `//base` might contain a file named
|
| +`base/android/java/org/chromium/base/Class.java`. This would get compiled into a
|
| +`chromium_base.jar` (final JAR name TBD).
|
| +
|
| +`org.chromium.chrome.browser.foo.Class` would live in
|
| +`chrome/android/java/org/chromium/chrome/browser/foo/Class.java`.
|
| +
|
| +New `<top level directory>/android` directories should have an `OWNERS` file
|
| +much like
|
| +[//base/android/OWNERS](https://chromium.googlesource.com/chromium/src/+/master/base/android/OWNERS).
|
| +
|
| +## Asserts
|
| +
|
| +The Chromium build system strips asserts in release builds (via ProGuard) and
|
| +enables them in debug builds (or when `dcheck_always_on=true`) (via a [build
|
| +step](https://codereview.chromium.org/2517203002)). You should use asserts in
|
| +the [same
|
| +scenarios](https://chromium.googlesource.com/chromium/src/+/master/styleguide/c++/c++.md#CHECK_DCHECK_and-NOTREACHED)
|
| +where C++ DCHECK()s make sense. For multi-statement asserts, use
|
| +`org.chromium.base.BuildConfig.DCHECK_IS_ON` to guard your code.
|
| +
|
| +Example assert:
|
| +
|
| +```java
|
| +assert someCallWithSideEffects() : "assert description";
|
| +```
|
| +
|
| +Example use of `DCHECK_IS_ON`:
|
| +
|
| +```java
|
| +if (org.chromium.base.BuildConfig.DCHECK_IS_ON) {
|
| + if (!someCallWithSideEffects()) {
|
| + throw new AssertionError("assert description");
|
| + }
|
| +}
|
| +```
|
|
|