Handle nulls gracefully in the JavaTestRule when reporting errors. Summary: It's possible for the rule to be null when trying to figure out whether the source under test is a java library rule. Handle this without causing buck to blow up. Test Plan: Visual inspection of the code.
diff --git a/src/com/facebook/buck/java/JavaTestRule.java b/src/com/facebook/buck/java/JavaTestRule.java index 23b468d..4c4c049 100644 --- a/src/com/facebook/buck/java/JavaTestRule.java +++ b/src/com/facebook/buck/java/JavaTestRule.java
@@ -465,17 +465,22 @@ for (BuildTarget sourceUnderTestName : sourceUnderTestNames) { // Generates the set by matching its path with the full path names that are passed in. BuildRule rule = ruleResolver.get(sourceUnderTestName); + if (rule instanceof JavaLibraryRule) { sourceUnderTest.add((JavaLibraryRule) rule); } else { // In this case, the source under test specified in the build file was not a Java library // rule. Since EMMA requires the sources to be in Java, we will throw this exception and // not continue with the tests. + + String ruleName = rule == null ? "unknown rule" : rule.getFullyQualifiedName(); + String type = rule == null ? "unknown_type" : rule.getType().getName(); + throw new HumanReadableException( "Specified source under test for %s is not a Java library: %s (%s).", getBuildTarget().getFullyQualifiedName(), - rule.getFullyQualifiedName(), - rule.getType()); + ruleName, + type); } }