private static long numberOfAbstractMethod(Symbol symbol) { if (!symbol.isTypeSymbol()) { // unknown interface return Integer.MAX_VALUE; } Symbol.TypeSymbol interfaceSymbol = (Symbol.TypeSymbol) symbol; return interfaceSymbol.memberSymbols().stream() .filter(Symbol::isMethodSymbol) .filter(member -> { Symbol.MethodSymbol methodSymbol = (Symbol.MethodSymbol) member; return isNotObjectMethod(methodSymbol) && methodSymbol.isAbstract(); }).count(); }
private static long numberOfAbstractMethod(Symbol symbol) { if (!symbol.isTypeSymbol()) { // unknown interface return Integer.MAX_VALUE; } Symbol.TypeSymbol interfaceSymbol = (Symbol.TypeSymbol) symbol; return interfaceSymbol.memberSymbols().stream() .filter(Symbol::isMethodSymbol) .filter(member -> { Symbol.MethodSymbol methodSymbol = (Symbol.MethodSymbol) member; return isNotObjectMethod(methodSymbol) && methodSymbol.isAbstract(); }).count(); }
@Override public void visitNode(Tree tree) { if (!hasSemantic() || isExcludedByVersion(context.getJavaVersion())) { return; } MethodTree methodTree = (MethodTree) tree; Symbol.MethodSymbol methodSymbol = methodTree.symbol(); Symbol.MethodSymbol overriddenSymbol = methodSymbol.overriddenSymbol(); if (overriddenSymbol == null || overriddenSymbol.isUnknown()) { return; } if (!overriddenSymbol.isAbstract() && !overriddenSymbol.owner().type().is("java.lang.Object") && !methodSymbol.metadata().isAnnotatedWith("java.lang.Override")) { reportIssue(methodTree.simpleName(), "Add the \"@Override\" annotation above this method signature"); } }
@Override public void visitNode(Tree tree) { if (!hasSemantic() || isExcludedByVersion(context.getJavaVersion())) { return; } MethodTree methodTree = (MethodTree) tree; Symbol.MethodSymbol methodSymbol = methodTree.symbol(); Symbol.MethodSymbol overriddenSymbol = methodSymbol.overriddenSymbol(); if (overriddenSymbol == null || overriddenSymbol.isUnknown()) { return; } if (!overriddenSymbol.isAbstract() && !overriddenSymbol.owner().type().is("java.lang.Object") && !methodSymbol.metadata().isAnnotatedWith("java.lang.Override")) { reportIssue(methodTree.simpleName(), "Add the \"@Override\" annotation above this method signature"); } }
private static boolean isOverridingDeprecatedConcreteMethod(Symbol.MethodSymbol symbol) { Symbol.MethodSymbol overriddenMethod = symbol.overriddenSymbol(); while(overriddenMethod != null && !overriddenMethod.isUnknown()) { if (overriddenMethod.isAbstract()) { return false; } if (overriddenMethod.isDeprecated()) { return true; } overriddenMethod = overriddenMethod.overriddenSymbol(); } return false; }
private static boolean isPrivateStaticOrAbstract(Symbol.MethodSymbol methodSymbol) { return methodSymbol.isPrivate() || methodSymbol.isStatic() || methodSymbol.isAbstract(); }
private static boolean isPrivateStaticOrAbstract(Symbol.MethodSymbol methodSymbol) { return methodSymbol.isPrivate() || methodSymbol.isStatic() || methodSymbol.isAbstract(); }
private static boolean isOverridingDeprecatedConcreteMethod(Symbol.MethodSymbol symbol) { Symbol.MethodSymbol overriddenMethod = symbol.overriddenSymbol(); while(overriddenMethod != null && !overriddenMethod.isUnknown()) { if (overriddenMethod.isAbstract()) { return false; } if (overriddenMethod.isDeprecated()) { return true; } overriddenMethod = overriddenMethod.overriddenSymbol(); } return false; }
public static boolean methodCanNotBeOverriden(Symbol.MethodSymbol methodSymbol) { if (Flags.isFlagged(((JavaSymbol.MethodJavaSymbol) methodSymbol).flags(), Flags.NATIVE)) { return false; } return !methodSymbol.isAbstract() && (methodSymbol.isPrivate() || methodSymbol.isFinal() || methodSymbol.isStatic() || methodSymbol.owner().isFinal()); } }
public static boolean methodCanNotBeOverriden(Symbol.MethodSymbol methodSymbol) { if (Flags.isFlagged(((JavaSymbol.MethodJavaSymbol) methodSymbol).flags(), Flags.NATIVE)) { return false; } return !methodSymbol.isAbstract() && (methodSymbol.isPrivate() || methodSymbol.isFinal() || methodSymbol.isStatic() || methodSymbol.owner().isFinal()); } }
@Override public void visitNode(Tree tree) { if (!hasSemantic()) { return; } Symbol.MethodSymbol method = ((MethodTree) tree).symbol(); if (method.isAbstract() && method.owner().isAbstract()) { checkMethod((JavaSymbol.MethodJavaSymbol) method); } }
@Override public void visitNode(Tree tree) { if (!hasSemantic()) { return; } Symbol.MethodSymbol method = ((MethodTree) tree).symbol(); if (method.isAbstract() && method.owner().isAbstract()) { checkMethod((JavaSymbol.MethodJavaSymbol) method); } }