@Override public boolean visitMethodInvocation(MethodInvocation node) { Expression operand = node.astOperand(); if (node.astName().toString().equals("sleep") && operand.toString().equals("Thread") && !context.isSuppressedWithComment(node, ISSUE)) { context.report(ISSUE, node, context.getLocation(node), "Don't call sleep. Use MockTimer instead."); } return super.visitMethodInvocation(node); } };
@Override public boolean visitNode(Node node) { return mCallsSuper || super.visitNode(node); } }
@Override public boolean visitReturn(Return node) { return super.visitReturn(node); } }
@Override public boolean visitVariableDefinitionEntry(VariableDefinitionEntry node) { if (mCurrentMethod != null) { if (mLocalVars == null) { mLocalVars = Sets.newHashSet(); } mLocalVars.add(node.astName().astValue()); } else { if (mFields == null) { mFields = Sets.newHashSet(); } mFields.add(node.astName().astValue()); } return super.visitVariableDefinitionEntry(node); }
@Override public boolean visitBinaryExpression(BinaryExpression node) { BinaryOperator operator = node.astOperator(); if (operator == BinaryOperator.ASSIGN || operator == BinaryOperator.OR_ASSIGN) { Expression left = node.astLeft(); String variable; if (left instanceof Select && ((Select) left).astOperand() instanceof This) { variable = ((Select) left).astIdentifier().astValue(); } else { variable = left.toString(); } mVariables.add(variable); } return super.visitBinaryExpression(node); } }
@Override public void endVisit(lombok.ast.Node node) { if (node == mCurrentMethod) { mCurrentMethod = null; } super.endVisit(node); }
@Override public boolean visitNode(Node node) { return mFoundCall || super.visitNode(node); }
@Override public boolean visitReturn(Return node) { if (node.astValue() == mTarget) { // If you just do "return editor.commit() don't warn mFound = true; } return super.visitReturn(node); }
@Override public boolean visitVariableDefinitionEntry(VariableDefinitionEntry node) { Expression initializer = node.astInitializer(); if (initializer instanceof VariableReference) { ResolvedNode resolved = mContext.resolve(initializer); //noinspection SuspiciousMethodCalls if (resolved != null && mVariables.contains(resolved)) { ResolvedNode resolvedVariable = mContext.resolve(node); if (resolvedVariable instanceof ResolvedVariable) { ResolvedVariable variable = (ResolvedVariable) resolvedVariable; mVariables.add(variable); } else if (resolvedVariable instanceof ResolvedField) { mEscapes = true; } } } return super.visitVariableDefinitionEntry(node); }
@Override public boolean visitBinaryExpression(BinaryExpression node) { if (node.astOperator() == BinaryOperator.ASSIGN) { Expression rhs = node.astRight(); if (rhs instanceof VariableReference) { ResolvedNode resolved = mContext.resolve(rhs); //noinspection SuspiciousMethodCalls if (resolved != null && mVariables.contains(resolved)) { ResolvedNode resolvedLhs = mContext.resolve(node.astLeft()); if (resolvedLhs instanceof ResolvedVariable) { ResolvedVariable variable = (ResolvedVariable) resolvedLhs; mVariables.add(variable); } else if (resolvedLhs instanceof ResolvedField) { mEscapes = true; } } } } return super.visitBinaryExpression(node); }
@Override public boolean visitNode(Node node) { return mContainsCleanup || super.visitNode(node); }
@Override public boolean visitMethodInvocation(MethodInvocation node) { Expression operand = node.astOperand(); String methodName = node.astName().toString(); if (BAD_METHODS.contains(methodName) && operand.toString().equals("System") && !context.isSuppressedWithComment(node, ISSUE)) { context.report(ISSUE, context.getLocation(node), "Don't call " + methodName + " on system. Use" + " Timer instead."); } return super.visitMethodInvocation(node); } };
@Override public boolean visitReturn(Return node) { if (node.astValue() == mTarget) { // If you just do "return Toast.makeText(...) don't warn mFound = true; } return super.visitReturn(node); }
@Override public boolean visitVariableDefinitionEntry(VariableDefinitionEntry node) { Expression initializer = node.astInitializer(); if (initializer instanceof VariableReference) { JavaParser.ResolvedNode resolved = mContext.resolve(initializer); //noinspection SuspiciousMethodCalls if (resolved != null && mVariables.contains(resolved)) { JavaParser.ResolvedNode resolvedVariable = mContext.resolve(node); if (resolvedVariable instanceof JavaParser.ResolvedVariable) { JavaParser.ResolvedVariable variable = (JavaParser.ResolvedVariable) resolvedVariable; mVariables.add(variable); } } } return super.visitVariableDefinitionEntry(node); }
@Override public boolean visitBinaryExpression(BinaryExpression node) { if (node.astOperator() == BinaryOperator.ASSIGN) { Expression rhs = node.astRight(); if (rhs instanceof VariableReference) { JavaParser.ResolvedNode resolved = mContext.resolve(rhs); //noinspection SuspiciousMethodCalls if (resolved != null && mVariables.contains(resolved)) { JavaParser.ResolvedNode resolvedLhs = mContext.resolve(node.astLeft()); if (resolvedLhs instanceof JavaParser.ResolvedVariable) { JavaParser.ResolvedVariable variable = (JavaParser.ResolvedVariable) resolvedLhs; mVariables.add(variable); } } } } return super.visitBinaryExpression(node); }
@Override public boolean visitNode(lombok.ast.Node node) { return mDone || super.visitNode(node); }
@Override public boolean visitMethodInvocation(MethodInvocation node) { Expression operand = node.astOperand(); String methodName = node.astName().toString(); if (BAD_METHODS.contains(methodName) && !context.isSuppressedWithComment(node, ISSUE)) { context.report(ISSUE, context.getLocation(node), "Don't call " + methodName + " directly. Use" + " Timer instead."); } return super.visitMethodInvocation(node); } };
@Override public boolean visitReturn(Return node) { Expression value = node.astValue(); if (value instanceof VariableReference) { ResolvedNode resolved = mContext.resolve(value); //noinspection SuspiciousMethodCalls if (resolved != null && mVariables.contains(resolved)) { mEscapes = true; } } return super.visitReturn(node); } }
@Override public boolean visitVariableDefinitionEntry(VariableDefinitionEntry node) { String name = node.astName().astValue(); Expression rhs = node.astInitializer(); Class<?> type = getType(rhs); if (type != null) { mTypes.put(name, type); } else { // Make sure we're not visiting the String.format node itself. If you have // msg = String.format("%1$s", msg) // then we'd be wiping out the type of "msg" before visiting the // String.format call! if (rhs != mTargetNode) { mTypes.remove(name); } } return super.visitVariableDefinitionEntry(node); }
@Override public boolean visitNode(Node node) { return mContainsCleanup || super.visitNode(node); }