@Override public void visitNode(Tree tree) { if (hasSemantic()) { if (tree.is(Tree.Kind.CLASS)) { inMethodOrStaticInitializerOrFinalClass.push(((ClassTree) tree).symbol().isFinal()); } else if (tree.is(Tree.Kind.METHOD, Tree.Kind.STATIC_INITIALIZER)) { inMethodOrStaticInitializerOrFinalClass.push(Boolean.TRUE); } else if (BooleanUtils.isFalse(inMethodOrStaticInitializerOrFinalClass.peek()) && THREAD_START.matches((MethodInvocationTree) tree)) { reportIssue(ExpressionUtils.methodName((MethodInvocationTree) tree), "Move this \"start\" call to another method."); } } }
@Override public void visitNode(Tree tree) { if (hasSemantic()) { if (tree.is(Tree.Kind.CLASS)) { inMethodOrStaticInitializerOrFinalClass.push(((ClassTree) tree).symbol().isFinal()); } else if (tree.is(Tree.Kind.METHOD, Tree.Kind.STATIC_INITIALIZER)) { inMethodOrStaticInitializerOrFinalClass.push(Boolean.TRUE); } else if (BooleanUtils.isFalse(inMethodOrStaticInitializerOrFinalClass.peek()) && THREAD_START.matches((MethodInvocationTree) tree)) { reportIssue(ExpressionUtils.methodName((MethodInvocationTree) tree), "Move this \"start\" call to another method."); } } }
private static boolean isDesignedForExtension(MethodTree tree) { if (tree.symbol().enclosingClass().isFinal()) { // methods of final class can not be overridden, because the class can not be extended return false; } ModifiersTree modifiers = tree.modifiers(); return ModifiersUtils.hasModifier(modifiers, Modifier.DEFAULT) || (!ModifiersUtils.hasModifier(modifiers, Modifier.PRIVATE) && isEmptyOrThrowStatement(tree.block())); }
private static boolean isEnclosingClassFinal(ExpressionTree expressionTree) { if (expressionTree.is(IDENTIFIER)) { Tree parent = expressionTree.parent(); while (!parent.is(METHOD, CONSTRUCTOR)) { parent = parent.parent(); } return ((MethodTree) parent).symbol().owner().isFinal(); } return ((MemberSelectExpressionTree) expressionTree).expression().symbolType().symbol().isFinal(); } }
private static boolean isDesignedForExtension(MethodTree tree) { if (tree.symbol().enclosingClass().isFinal()) { // methods of final class can not be overridden, because the class can not be extended return false; } ModifiersTree modifiers = tree.modifiers(); return ModifiersUtils.hasModifier(modifiers, Modifier.DEFAULT) || (!ModifiersUtils.hasModifier(modifiers, Modifier.PRIVATE) && isEmptyOrThrowStatement(tree.block())); }
private static boolean isEnclosingClassFinal(ExpressionTree expressionTree) { if (expressionTree.is(IDENTIFIER)) { Tree parent = expressionTree.parent(); while (!parent.is(METHOD, CONSTRUCTOR)) { parent = parent.parent(); } return ((MethodTree) parent).symbol().owner().isFinal(); } return ((MemberSelectExpressionTree) expressionTree).expression().symbolType().symbol().isFinal(); } }