Android Studio Code Inspections

Too Smart?

Posted by Grego on October 22, 2015

I’ve come to learn that sometimes IntelliJ code inspections can be pretty smart. Even smarter than me, at times. However, often its communication skills are a bit out of whack.

Recently I was working with a code snippet that looked like the following:

addVariable(USER_COUNTRY_KEY, user.countryCode);
// ... some other lines of code ...
String isLoggedIn = (user == null) ? "no" : "yes";

Now granted this was swimming in a forest of other lines of code and so it was much less obvious at the time, but the Android Studio code linter was highlighting user == null, telling me that this expression will always evaluate to false.

I kept thinking to myself, how would they know that? I kept running through scenarios in my head over and over, focusing only on that one single line until it finally dawned on me. Android Studio isn’t telling me that it’s impossible for my user object to be null, it’s just inferring that since I’m checking for null on line 2 when I’m already using user.countryCode on line 1. Obviously if I NPE on line 1, I won’t make it to line 2.

Fancy that.

So the moral of the story is: never simply ignore the code inspections, but on the other hand it’s always important to understand how to fix them and what the implications are, so don’t go blindly fixing things to remove that ugly linter highlighting right away; do your research and make sure you know what’s going on.