Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(490)

Unified Diff: styleguide/java/java.md

Issue 2681923003: Organize Java style guide and add a more sections (Closed)
Patch Set: Rebase for good measure Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: styleguide/java/java.md
diff --git a/styleguide/java/java.md b/styleguide/java/java.md
index ad1a1ba25b6b81c27f6c3b18f33504b246495400..0567689a48e2e17ed172a2c3e2f9263c9a4fceea 100644
--- a/styleguide/java/java.md
+++ b/styleguide/java/java.md
@@ -7,44 +7,98 @@ Chromium follows the [Android Open Source style
guide](http://source.android.com/source/code-style.html) unless an exception
is listed below.
-## Style
+A checkout should give you clang-format to automatically format Java code.
+It is suggested that Clang's formatting of code should be accepted in code
+reviews.
+
+You can propose changes to this style guide by sending an email to
+`java@chromium.org`. Ideally, the list will arrive at some consensus and you can
+request review for a change to this file. If there's no consensus,
+[`//styleguide/java/OWNERS`](https://chromium.googlesource.com/chromium/src/+/master/styleguide/java/OWNERS)
+get to decide.
+
+## Tools
+
+### Automatically formatting edited files
+
+You can run `git cl format` to apply the automatic formatting.
+
+### IDE setup
+
+For automatically using the correct style, follow the guide to set up your
+favorite IDE:
+
+* [Android Studio](https://chromium.googlesource.com/chromium/src/+/master/docs/android_studio.md)
+* [Eclipse](https://chromium.googlesource.com/chromium/src/+/master/docs/eclipse.md)
+
+### Checkstyle
+
+Checkstyle is automatically run by the build bots, and to ensure you do not have
+any surprises, you can also set up checkstyle locally using [this
+guide](https://sites.google.com/a/chromium.org/dev/developers/checkstyle).
+
+### Lint
+
+Lint is run as part of the build. For more information, see
+[here](https://chromium.googlesource.com/chromium/src/+/master/build/android/docs/lint.md).
+
+## File Headers
+
+Use the same format as in the [C++ style guide](https://chromium.googlesource.com/chromium/src/+/master/styleguide/c++/c++.md#File-headers).
+
+## TODOs
+
+TODO should follow chromium convention i.e. `TODO(username)`.
+
+## Code formatting
-* 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
+### Curly braces
-"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.
+Conditional braces should be used, but are optional if the conditional and the
+statement can be on a single line.
-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).
+Do:
-`org.chromium.chrome.browser.foo.Class` would live in
-`chrome/android/java/org/chromium/chrome/browser/foo/Class.java`.
+```java
+if (someConditional) return false;
+for (int i = 0; i < 10; ++i) callThing(i);
+```
-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).
+or
+
+```java
+if (someConditional) {
+ return false;
+}
+```
+
+Do NOT do:
+
+```java
+if (someConditional)
+ return false;
+```
+
+### Exceptions
+
+Similarly to the Android style guide, we discourage the use of
+`catch Exception`. It is also allowed to catch multiple exceptions in one line.
+
+It is OK to do:
+
+```java
+try {
+ somethingThatThrowsIOException();
+ somethingThatThrowsParseException();
+} catch (IOException | ParseException e) {
+ Log.e(TAG, "Failed to do something with exception: ", e)
+}
+```
-## Asserts
+### 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
@@ -69,3 +123,32 @@ if (org.chromium.base.BuildConfig.DCHECK_IS_ON) {
}
}
```
+
+## 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).
+
+## Miscellany
+
+* Use UTF-8 file encodings and LF line endings.
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698