aspect ZSdevirt { // A virtual method call is *ZSdevirt* if it is // devirtualizable according to the Zero Subclasses condition syn boolean VirtualMethodAccess.ZSdevirt() { TypeDecl F = isQualified() ? qualifier().type(): hostType(); // Formal type of receiver if (F instanceof ClassDecl) { return ((ClassDecl) F).subclasses().size()==0; } else return false; } }