Skip to content
This repository has been archived by the owner on May 28, 2022. It is now read-only.

Java: add guidelines for using assertions #37 #38

Merged
merged 1 commit into from
Mar 18, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions codingStandards/AdditionalGuidelines-Java.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Additional Guidelines - Java

## Using assertions
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Section headings should use Title Case like in the other coding standards (linked here for convenience):

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Based on this which we are going to adopt soon, headings should be sentence case. Keep this in sentence case and revise coding standards docs later to match the guideline?


Refer to the article
_[Programming With Assertions](http://docs.oracle.com/javase/8/docs/technotes/guides/language/assert.html)_
(from Oracle) for more details on the three general guidelines below.

1. **Do not use assertions to do any work that your application requires for correct operation.**<br>
If you do, the code will not work as expected when assertions are turned off.


1. **Do not use assertions for checking _preconditions_/parameters in public methods.**<br>
Those should be enforced by explicit checks that throw particular,
specified exceptions. e.g. `IllegalArgumentException`, `IndexOutOfBoundsException`, or `NullPointerException`.


1. **Assertions may be used to check _postconditions_ and class/method _invariants_ in both public
and nonpublic methods.**

In addition,

* **Do not handle 'impossible' exceptions using assertions**.<br>
Instead of handling 'impossible' exceptions using an `assert false` as given below,
throw a runtime error such as an `AssertionError`.

![](Bad.png)
```java
...
} catch (Exception e) {
assert false : "This exception should not happen";
}
```

![](Good.png)
```java
...
} catch (Exception e) {
throw new AssertionError("This exception should not happen");
}
```

> Rationale: As the program flow has already triggered an exception, switching to assertions is not necessary when
> another exception can handle it just as well.
1 change: 1 addition & 0 deletions docs/CodingStandards.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ Note that some projects might have additional guidelines for the languages they
* **GFMD** (GitHub Flavored Markdown): [Coding Standard](https://oss-generic.github.io/process/codingStandards/CodingStandard-Gfmd.html)
* **HTML**: [Coding Standard](https://oss-generic.github.io/process/codingStandards/CodingStandard-Html.html)
* **Java**: [Coding Standard](https://oss-generic.github.io/process/codingStandards/CodingStandard-Java.html)
| [Additional Guidelines](../codingStandards/AdditionalGuidelines-Java.md)
* **JavaScript**: [Coding Standard](https://docs.google.com/document/d/1gZ6WG6HBTJYHAtVkz9kzi_SUuzfXqzO-SvFnLuag2xM/pub?embedded=true)
* **JSP**: [Coding Standard](https://docs.google.com/document/d/14bXfdveXvoIaPBYpL19m4PK6oPabSnnoawj6OGjOzD4/pub?embedded=true)
* JSTL