@Override public final int[] getDefaultTokens() { return getRequiredTokens(); }
@Override public void visitToken(DetailAST ast) { if (!isSkipCase(ast)) { final DetailAST assign = ast.findFirstToken(TokenTypes.ASSIGN); final DetailAST exprStart = assign.getFirstChild().getFirstChild(); if (exprStart.getType() == TokenTypes.LITERAL_NULL) { final DetailAST ident = ast.findFirstToken(TokenTypes.IDENT); log(ident, MSG_KEY, ident.getText(), "null"); } if (!onlyObjectReferences) { validateNonObjects(ast); } } }
/** * Examine char literal for initializing to default value. * @param exprStart expression * @return true is literal is initialized by zero symbol */ private static boolean isZeroChar(DetailAST exprStart) { return isZero(exprStart) || exprStart.getType() == TokenTypes.CHAR_LITERAL && "'\\0'".equals(exprStart.getText()); }
@Test public void testTokensNotNull() { final ExplicitInitializationCheck check = new ExplicitInitializationCheck(); Assert.assertNotNull("Acceptable tokens should not be null", check.getAcceptableTokens()); Assert.assertNotNull("Default tokens should not be null", check.getDefaultTokens()); Assert.assertNotNull("Required tokens should not be null", check.getRequiredTokens()); }
/** * Checks for explicit initializations made to 'false', '0' and '\0'. * @param ast token being checked for explicit initializations */ private void validateNonObjects(DetailAST ast) { final DetailAST ident = ast.findFirstToken(TokenTypes.IDENT); final DetailAST assign = ast.findFirstToken(TokenTypes.ASSIGN); final DetailAST exprStart = assign.getFirstChild().getFirstChild(); final DetailAST type = ast.findFirstToken(TokenTypes.TYPE); 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 && isZeroChar(exprStart)) { log(ident, MSG_KEY, ident.getText(), "\\0"); } }
/** * Checks for explicit initializations made to 'false', '0' and '\0'. * @param ast token being checked for explicit initializations */ private void validateNonObjects(DetailAST ast) { final DetailAST ident = ast.findFirstToken(TokenTypes.IDENT); final DetailAST assign = ast.findFirstToken(TokenTypes.ASSIGN); final DetailAST exprStart = assign.getFirstChild().getFirstChild(); final DetailAST type = ast.findFirstToken(TokenTypes.TYPE); 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 && isZeroChar(exprStart)) { log(ident, MSG_KEY, ident.getText(), "\\0"); } }
@Override public void visitToken(DetailAST ast) { if (!isSkipCase(ast)) { final DetailAST assign = ast.findFirstToken(TokenTypes.ASSIGN); final DetailAST exprStart = assign.getFirstChild().getFirstChild(); if (exprStart.getType() == TokenTypes.LITERAL_NULL) { final DetailAST ident = ast.findFirstToken(TokenTypes.IDENT); log(ident, MSG_KEY, ident.getText(), "null"); } if (!onlyObjectReferences) { validateNonObjects(ast); } } }
@Override public final int[] getAcceptableTokens() { return getRequiredTokens(); }
/** * Examine char literal for initializing to default value. * @param exprStart expression * @return true is literal is initialized by zero symbol */ private static boolean isZeroChar(DetailAST exprStart) { return isZero(exprStart) || exprStart.getType() == TokenTypes.CHAR_LITERAL && "'\\0'".equals(exprStart.getText()); }
@Override public final int[] getDefaultTokens() { return getRequiredTokens(); }
@Override public final int[] getAcceptableTokens() { return getRequiredTokens(); }