@Override public int[] getDefaultTokens() { return getAcceptableTokens(); }
/** * Checks whether method or constructor parameter is ignored. * @param ast the parameter token. * @param name the parameter name. * @return true if parameter is ignored. */ private boolean isIgnoredParam(DetailAST ast, String name) { return isIgnoredSetterParam(ast, name) || isIgnoredConstructorParam(ast) || isIgnoredParamOfAbstractMethod(ast); }
/** * Process a variable token. * Check whether a local variable or parameter shadows a field. * Store a field for later comparison with local variables and parameters. * @param ast the variable token. */ private void processVariable(DetailAST ast) { if (!ScopeUtil.isInInterfaceOrAnnotationBlock(ast) && !CheckUtil.isReceiverParameter(ast) && (ScopeUtil.isLocalVariableDef(ast) || ast.getType() == TokenTypes.PARAMETER_DEF)) { // local variable or parameter. Does it shadow a field? final DetailAST nameAST = ast.findFirstToken(TokenTypes.IDENT); final String name = nameAST.getText(); if ((frame.containsStaticField(name) || isInstanceField(ast, name)) && !isMatchingRegexp(name) && !isIgnoredParam(ast, name)) { log(nameAST, MSG_KEY, name); } } }
/** * Process a lambda token. * Checks whether a lambda parameter shadows a field. * Note, that when parameter of lambda expression is untyped, * ANTLR parses the parameter as an identifier. * @param ast the lambda token. */ private void processLambda(DetailAST ast) { final DetailAST firstChild = ast.getFirstChild(); if (firstChild.getType() == TokenTypes.IDENT) { final String untypedLambdaParameterName = firstChild.getText(); if (frame.containsStaticField(untypedLambdaParameterName) || isInstanceField(firstChild, untypedLambdaParameterName)) { log(firstChild, MSG_KEY, untypedLambdaParameterName); } } else { // Type of lambda parameter is not omitted. processVariable(ast); } }
/** * Check for instance field. * @param ast token * @param name identifier of token * @return true if instance field */ private boolean isInstanceField(DetailAST ast, String name) { return !isInStatic(ast) && frame.containsInstanceField(name); }
boolean isSetterMethod = false; if (("set" + capitalize(aName)).equals(methodName)) {
/** * We cannot reproduce situation when visitToken is called and leaveToken is not. * So, we have to use reflection to be sure that even in such situation * state of the field will be cleared. * * @throws Exception when code tested throws exception */ @Test public void testClearState() throws Exception { final HiddenFieldCheck check = new HiddenFieldCheck(); final DetailAST root = JavaParser.parseFile(new File(getPath("InputHiddenField.java")), JavaParser.Options.WITHOUT_COMMENTS); final Optional<DetailAST> classDef = TestUtil.findTokenInAstByPredicate(root, ast -> ast.getType() == TokenTypes.CLASS_DEF); assertTrue("Ast should contain CLASS_DEF", classDef.isPresent()); assertTrue("State is not cleared on beginTree", TestUtil.isStatefulFieldClearedDuringBeginTree(check, classDef.get(), "frame", new CheckIfStatefulFieldCleared())); }
/** * Process a lambda token. * Checks whether a lambda parameter shadows a field. * Note, that when parameter of lambda expression is untyped, * ANTLR parses the parameter as an identifier. * @param ast the lambda token. */ private void processLambda(DetailAST ast) { final DetailAST firstChild = ast.getFirstChild(); if (firstChild.getType() == TokenTypes.IDENT) { final String untypedLambdaParameterName = firstChild.getText(); if (frame.containsStaticField(untypedLambdaParameterName) || isInstanceField(firstChild, untypedLambdaParameterName)) { log(firstChild, MSG_KEY, untypedLambdaParameterName); } } else { // Type of lambda parameter is not omitted. processVariable(ast); } }
/** * Check for instance field. * @param ast token * @param name identifier of token * @return true if instance field */ private boolean isInstanceField(DetailAST ast, String name) { return !isInStatic(ast) && frame.containsInstanceField(name); }
boolean isSetterMethod = false; if (("set" + capitalize(aName)).equals(methodName)) {
/** * Process a variable token. * Check whether a local variable or parameter shadows a field. * Store a field for later comparison with local variables and parameters. * @param ast the variable token. */ private void processVariable(DetailAST ast) { if (!ScopeUtil.isInInterfaceOrAnnotationBlock(ast) && !CheckUtil.isReceiverParameter(ast) && (ScopeUtil.isLocalVariableDef(ast) || ast.getType() == TokenTypes.PARAMETER_DEF)) { // local variable or parameter. Does it shadow a field? final DetailAST nameAST = ast.findFirstToken(TokenTypes.IDENT); final String name = nameAST.getText(); if ((frame.containsStaticField(name) || isInstanceField(ast, name)) && !isMatchingRegexp(name) && !isIgnoredParam(ast, name)) { log(nameAST, MSG_KEY, name); } } }
/** * Checks whether method or constructor parameter is ignored. * @param ast the parameter token. * @param name the parameter name. * @return true if parameter is ignored. */ private boolean isIgnoredParam(DetailAST ast, String name) { return isIgnoredSetterParam(ast, name) || isIgnoredConstructorParam(ast) || isIgnoredParamOfAbstractMethod(ast); }
@Override public int[] getDefaultTokens() { return getAcceptableTokens(); }