I don't read that text as requiring these methods. It is saying that element instanceof PackageElement is not a reliable way of telling whether element represents a package, because you could have one big implementation class that implements all the FooElement interfaces. But, if you know that an element represents a package (element.getKind() == PACKAGE) then element instanceof PackageElement is true. All the text is saying is that it might be true in other circumstances as well. So, I'm not convinced these methods are necessary. Certainly I've merrily cast to TypeElement all over AutoValue without encountering problems with either javac or ecj.