/** {@inheritDoc} */
 @Override
 public boolean isValidOn(final DetailAST ast) {
   final int type = ast.getType();
   return type == TokenTypes.PACKAGE_DEF
       || type == TokenTypes.CLASS_DEF
       || type == TokenTypes.INTERFACE_DEF
       || type == TokenTypes.ENUM_DEF
       || type == TokenTypes.ANNOTATION_DEF
       || type == TokenTypes.METHOD_DEF
       || type == TokenTypes.CTOR_DEF
       || type == TokenTypes.VARIABLE_DEF && !ScopeUtils.isLocalVariableDef(ast);
 }
  @Override
  public void visitToken(DetailAST ast) {
    // do not check local variables and
    // fields declared in interface/annotations
    if (ScopeUtils.isLocalVariableDef(ast) || ScopeUtils.inInterfaceOrAnnotationBlock(ast)) {
      return;
    }

    final DetailAST assign = ast.findFirstToken(TokenTypes.ASSIGN);
    if (assign == null) {
      // no assign - no check
      return;
    }

    final DetailAST modifiers = ast.findFirstToken(TokenTypes.MODIFIERS);
    if (modifiers != null && modifiers.branchContains(TokenTypes.FINAL)) {
      // do not check final variables
      return;
    }

    final DetailAST type = ast.findFirstToken(TokenTypes.TYPE);
    final DetailAST ident = ast.findFirstToken(TokenTypes.IDENT);
    final DetailAST exprStart = assign.getFirstChild().getFirstChild();
    if (isObjectType(type) && exprStart.getType() == TokenTypes.LITERAL_NULL) {
      log(ident, MSG_KEY, ident.getText(), "null");
    }

    final int primitiveType = type.getFirstChild().getType();
    if (primitiveType == TokenTypes.LITERAL_BOOLEAN
        && exprStart.getType() == TokenTypes.LITERAL_FALSE) {
      log(ident, MSG_KEY, ident.getText(), "false");
    }
    if (isNumericType(primitiveType) && isZero(exprStart)) {
      log(ident, MSG_KEY, ident.getText(), "0");
    }
    if (primitiveType == TokenTypes.LITERAL_CHAR
        && (isZero(exprStart)
            || exprStart.getType() == TokenTypes.CHAR_LITERAL
                && "'\\0'".equals(exprStart.getText()))) {
      log(ident, MSG_KEY, ident.getText(), "\\0");
    }
  }
    /** {@inheritDoc} */
    @Override
    public boolean isValidOn(final DetailAST ast) {
      final int type = ast.getType();

      return type == TokenTypes.VARIABLE_DEF && !ScopeUtils.isLocalVariableDef(ast);
    }