package it.ding.sonar.check.wait; import static it.ding.sonar.data.CommonData.HARD_CODED_SLEEP_CHECK_KEY; import it.ding.sonar.check.Base; import org.sonar.check.Rule; import org.sonar.plugins.java.api.JavaFileScannerContext; import org.sonar.plugins.java.api.tree.MemberSelectExpressionTree; import org.sonar.plugins.java.api.tree.MethodInvocationTree; import org.sonar.plugins.java.api.tree.Tree; @Rule(key = HARD_CODED_SLEEP_CHECK_KEY) public class HardCodedSleepCheck extends Base { private static final String SLEEP_METHOD_NAME = "sleep"; private static final String THREAD = "java.lang.Thread"; @Override public void visitMethodInvocation(MethodInvocationTree tree) { JavaFileScannerContext context = getContext(); if (!tree.methodSelect().is(Tree.Kind.IDENTIFIER)) { MemberSelectExpressionTree memberSelectExpressionTree = ((MemberSelectExpressionTree) tree.methodSelect()); String methodName = memberSelectExpressionTree.identifier().name(); String fullyQualifiedNameOfExpression = memberSelectExpressionTree.expression().symbolType() .fullyQualifiedName(); if (SLEEP_METHOD_NAME.equals(methodName) && fullyQualifiedNameOfExpression.equals(THREAD)) { context.reportIssue(this, tree, "Avoid using hard coded sleeps, use explicit wait instead"); } } } }