@Override public void visitReturnStatement(ReturnStatementTree tree) { ExpressionTree returnedExpression = tree.expression(); if (ExpressionUtils.isThis(returnedExpression)) { issueLocations.add(returnedExpression); } super.visitReturnStatement(tree); } }
@Override public void visitReturnStatement(ReturnStatementTree tree) { ExpressionTree returnedExpression = tree.expression(); if (ExpressionUtils.isThis(returnedExpression)) { issueLocations.add(returnedExpression); } super.visitReturnStatement(tree); } }
private static boolean hasSingleSyncStatement(MethodTree methodTree) { BlockTree blockTree = methodTree.block(); if (blockTree != null && blockTree.body().size() == 1 && blockTree.body().get(0).is(Tree.Kind.SYNCHRONIZED_STATEMENT)) { SynchronizedStatementTree sync = (SynchronizedStatementTree) blockTree.body().get(0); return ExpressionUtils.isThis(sync.expression()); } return false; }
private static boolean hasSingleSyncStatement(MethodTree methodTree) { BlockTree blockTree = methodTree.block(); if (blockTree != null && blockTree.body().size() == 1 && blockTree.body().get(0).is(Tree.Kind.SYNCHRONIZED_STATEMENT)) { SynchronizedStatementTree sync = (SynchronizedStatementTree) blockTree.body().get(0); return ExpressionUtils.isThis(sync.expression()); } return false; }
private static boolean callsThisConstructor(MethodTree constructor) { List<StatementTree> body = constructor.block().body(); if (body.isEmpty()) { return false; } StatementTree firstStatement = body.get(0); if (!firstStatement.is(Tree.Kind.EXPRESSION_STATEMENT)) { return false; } ExpressionTree expression = ((ExpressionStatementTree) firstStatement).expression(); if (!expression.is(Tree.Kind.METHOD_INVOCATION)) { return false; } ExpressionTree methodSelect = ((MethodInvocationTree) expression).methodSelect(); return ExpressionUtils.isThis(methodSelect); }
private static boolean callsThisConstructor(MethodTree constructor) { List<StatementTree> body = constructor.block().body(); if (body.isEmpty()) { return false; } StatementTree firstStatement = body.get(0); if (!firstStatement.is(Tree.Kind.EXPRESSION_STATEMENT)) { return false; } ExpressionTree expression = ((ExpressionStatementTree) firstStatement).expression(); if (!expression.is(Tree.Kind.METHOD_INVOCATION)) { return false; } ExpressionTree methodSelect = ((MethodInvocationTree) expression).methodSelect(); return ExpressionUtils.isThis(methodSelect); }
@Override public void visitMemberSelectExpression(MemberSelectExpressionTree tree) { Symbol symbol = tree.identifier().symbol(); if (isField(symbol) && !symbol.isStatic()) { if (tree.expression().is(Kind.IDENTIFIER)) { if (!ExpressionUtils.isThis(tree.expression())) { fieldsReadOnAnotherInstance.add(symbol); } } else { fieldsReadOnAnotherInstance.add(symbol); } } super.visitMemberSelectExpression(tree); } }
@Override public void visitMemberSelectExpression(MemberSelectExpressionTree tree) { Symbol symbol = tree.identifier().symbol(); if (isField(symbol) && !symbol.isStatic()) { if (tree.expression().is(Kind.IDENTIFIER)) { if (!ExpressionUtils.isThis(tree.expression())) { fieldsReadOnAnotherInstance.add(symbol); } } else { fieldsReadOnAnotherInstance.add(symbol); } } super.visitMemberSelectExpression(tree); } }
private boolean isFieldAssignment(AssignmentExpressionTree tree) { ExpressionTree variable = tree.variable(); if (variable.is(Kind.MEMBER_SELECT)) { MemberSelectExpressionTree memberSelectExpressionTree = (MemberSelectExpressionTree) variable; if (!ExpressionUtils.isThis(memberSelectExpressionTree.expression())) { return false; } variable = memberSelectExpressionTree.identifier(); } if (variable.is(Kind.IDENTIFIER)) { Symbol variableSymbol = ((IdentifierTree) variable).symbol(); return variableSymbol.owner().isTypeSymbol(); } return false; }
private boolean isFieldAssignment(AssignmentExpressionTree tree) { ExpressionTree variable = tree.variable(); if (variable.is(Kind.MEMBER_SELECT)) { MemberSelectExpressionTree memberSelectExpressionTree = (MemberSelectExpressionTree) variable; if (!ExpressionUtils.isThis(memberSelectExpressionTree.expression())) { return false; } variable = memberSelectExpressionTree.identifier(); } if (variable.is(Kind.IDENTIFIER)) { Symbol variableSymbol = ((IdentifierTree) variable).symbol(); return variableSymbol.owner().isTypeSymbol(); } return false; }
@Override public void visitAssignmentExpression(AssignmentExpressionTree tree) { if (!ExpressionUtils.isThis(tree.expression())) { return; } ExpressionTree variable = tree.variable(); if (variable.is(Tree.Kind.MEMBER_SELECT)) { MemberSelectExpressionTree memberSelect = (MemberSelectExpressionTree) variable; // not an issue because "this" is assigned to an object of the same type which is also defined as static if (memberSelect.expression().symbolType().symbol().equals(this.owner) && memberSelect.identifier().symbol().isStatic()) { return; } } else if (variable.is(Tree.Kind.IDENTIFIER) && (((IdentifierTree) variable).symbol().isStatic())) { return; } report(tree); }
private static boolean isField(ExpressionTree tree) { if (tree.is(Kind.IDENTIFIER)) { Symbol reference = ((IdentifierTree) tree).symbol(); return !reference.isUnknown() && reference.owner().isTypeSymbol(); } else if (tree.is(Kind.MEMBER_SELECT)) { MemberSelectExpressionTree mse = (MemberSelectExpressionTree) tree; ExpressionTree mseExpression = mse.expression(); if (ExpressionUtils.isThis(mseExpression)) { return isField(mse.identifier()); } else { return isField(mseExpression); } } return false; }
@Override public void visitAssignmentExpression(AssignmentExpressionTree tree) { if (!ExpressionUtils.isThis(tree.expression())) { return; } ExpressionTree variable = tree.variable(); if (variable.is(Tree.Kind.MEMBER_SELECT)) { MemberSelectExpressionTree memberSelect = (MemberSelectExpressionTree) variable; // not an issue because "this" is assigned to an object of the same type which is also defined as static if (memberSelect.expression().symbolType().symbol().equals(this.owner) && memberSelect.identifier().symbol().isStatic()) { return; } } else if (variable.is(Tree.Kind.IDENTIFIER) && (((IdentifierTree) variable).symbol().isStatic())) { return; } report(tree); }
private static boolean isField(ExpressionTree tree) { if (tree.is(Kind.IDENTIFIER)) { Symbol reference = ((IdentifierTree) tree).symbol(); return !reference.isUnknown() && reference.owner().isTypeSymbol(); } else if (tree.is(Kind.MEMBER_SELECT)) { MemberSelectExpressionTree mse = (MemberSelectExpressionTree) tree; ExpressionTree mseExpression = mse.expression(); if (ExpressionUtils.isThis(mseExpression)) { return isField(mse.identifier()); } else { return isField(mseExpression); } } return false; }