Move Java style guide to source code repository.
Up until now, the Java style guide has been living on the Chromium wiki page at: https://sites.google.com/a/chromium.org/dev/developers/coding-style/java Recently, documentation regarding our code base has moved over to the code repository instead of being in the wiki, so this CL moves the Java style guide over, next to the C++ style guide. BUG=None Review-Url: https://codereview.chromium.org/2685583004 Cr-Commit-Position: refs/heads/master@{#449487}
This commit is contained in:
styleguide
71
styleguide/java/java.md
Normal file
71
styleguide/java/java.md
Normal file
@ -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");
|
||||
}
|
||||
}
|
||||
```
|
Reference in New Issue
Block a user