private static Optional<Symbol.VariableSymbol> findSerialVersionUid(Symbol.TypeSymbol symbol) { return symbol.lookupSymbols("serialVersionUID").stream() .filter(Symbol::isVariableSymbol) .map(Symbol.VariableSymbol.class::cast) .findFirst(); }
private static Optional<Symbol.VariableSymbol> findSerialVersionUid(Symbol.TypeSymbol symbol) { return symbol.lookupSymbols("serialVersionUID").stream() .filter(Symbol::isVariableSymbol) .map(Symbol.VariableSymbol.class::cast) .findFirst(); }
private static boolean implementsHashCode(Symbol.TypeSymbol symbol) { return symbol.lookupSymbols("hashCode").stream().anyMatch(HASHCODE_MATCHER::matches); } }
private static boolean doesOverrideFinalize(Symbol classSymbol) { if (classSymbol.isTypeSymbol()) { Type superClassType = ((Symbol.TypeSymbol) classSymbol).superClass(); while (superClassType != null && !superClassType.is("java.lang.Object")) { Symbol.TypeSymbol currentClass = superClassType.symbol(); if (currentClass.lookupSymbols(FINALIZE).stream().anyMatch(FINALIZE_MATCHER::matches)) { return true; } superClassType = currentClass.superClass(); } } return false; }
private static boolean hasNonPrivateNoArgConstructor(Type type) { Collection<Symbol> constructors = type.symbol().lookupSymbols("<init>"); for (Symbol member : constructors) { if (member.isMethodSymbol()) { Symbol.MethodSymbol method = (Symbol.MethodSymbol) member; if (method.parameterTypes().isEmpty() && !method.isPrivate()) { return true; } } } return constructors.isEmpty(); }
private static boolean hasNoPrivateFieldMatchingNameAndType(String fieldName, Type fieldType, Symbol.TypeSymbol accessorOwner) { return accessorOwner.lookupSymbols(fieldName).stream() .filter(Symbol::isVariableSymbol) .filter(Symbol::isPrivate) .filter(symbol -> symbol.type().equals(fieldType) || symbol.type().isSubtypeOf(fieldType)) .noneMatch(symbol -> fieldName.equals(symbol.name())); }
private static boolean isSubclassOfInputStreamOrOutputStreamWithoutClose(Type type) { TypeSymbol typeSymbol = type.symbol(); Type superClass = typeSymbol.superClass(); if (superClass != null && (superClass.is("java.io.OutputStream") || superClass.is("java.io.InputStream"))) { return typeSymbol.lookupSymbols(CLOSE_METHOD_NAME).isEmpty(); } return false; }
private boolean hasNonPrivateNoArgConstructor(Type type) { Collection<Symbol> constructors = type.symbol().lookupSymbols("<init>"); for (Symbol member : constructors) { if (member.isMethodSymbol()) { Symbol.MethodSymbol method = (Symbol.MethodSymbol) member; if (method.parameterTypes().isEmpty() && !method.isPrivate()) { return true; } } } return constructors.isEmpty(); }
private static boolean requiresSuperCall(Symbol.MethodSymbol methodSymbol) { Type superType = methodSymbol.owner().type().symbol().superClass(); Collection<Symbol> symbols = Lists.newArrayList(); while (superType != null && !superType.is(JUNIT_FRAMEWORK_TEST_CASE) && symbols.isEmpty()) { symbols = superType.symbol().lookupSymbols(methodSymbol.name()); superType = superType.symbol().superClass(); } return !symbols.isEmpty() && !symbols.iterator().next().owner().type().is(JUNIT_FRAMEWORK_TEST_CASE); }
private static Symbol.VariableSymbol findSerialVersionUid(Symbol.TypeSymbol symbol) { for (Symbol member : symbol.lookupSymbols("serialVersionUID")) { if (member.isVariableSymbol()) { return (Symbol.VariableSymbol) member; } } return null; }
private boolean hasNotFinalEqualsMethod(Symbol.TypeSymbol superClassSymbol) { for (Symbol symbol : superClassSymbol.lookupSymbols("equals")) { if (isEqualsMethod(symbol) && !symbol.isFinal()) { return true; } } return false; }
private boolean declaresCloneMethod(Symbol.TypeSymbol classSymbol) { for (Symbol memberSymbol : classSymbol.lookupSymbols("clone")) { if (memberSymbol.isMethodSymbol()) { Symbol.MethodSymbol methodSymbol = (Symbol.MethodSymbol) memberSymbol; if (methodSymbol.parameterTypes().isEmpty()) { return true; } } } return false; }
private Symbol.VariableSymbol findSerialVersionUid(Symbol.TypeSymbol symbol) { for (Symbol member : symbol.lookupSymbols("serialVersionUID")) { if (member.isVariableSymbol()) { return (Symbol.VariableSymbol) member; } } return null; }
private static boolean requiresSuperCall(Symbol.MethodSymbol methodSymbol) { Type superType = methodSymbol.owner().type().symbol().superClass(); Collection<Symbol> symbols = Lists.newArrayList(); while (superType != null && !superType.is(JUNIT_FRAMEWORK_TEST_CASE) && symbols.isEmpty()) { symbols = superType.symbol().lookupSymbols(methodSymbol.name()); superType = superType.symbol().superClass(); } return !symbols.isEmpty() && !symbols.iterator().next().owner().type().is(JUNIT_FRAMEWORK_TEST_CASE); }
private static Optional<Symbol> findIteratorMethod(Symbol parameter) { return parameter.type().symbol().lookupSymbols("iterator").stream() .filter(Symbol::isMethodSymbol) .filter(s -> ((Symbol.MethodSymbol) s).parameterTypes().isEmpty()) .findFirst(); }
private static boolean hasEqualsMethod(Symbol.TypeSymbol symbol) { return symbol.lookupSymbols("equals").stream().anyMatch(EQUALS_MATCHER::matches); } }
private static Symbol.VariableSymbol findSerialVersionUid(Symbol.TypeSymbol symbol) { for (Symbol member : symbol.lookupSymbols("serialVersionUID")) { if (member.isVariableSymbol()) { return (Symbol.VariableSymbol) member; } } return null; }
private static boolean hasNoPrivateFieldMatchingNameAndType(String fieldName, Type fieldType, Symbol.TypeSymbol accessorOwner) { return accessorOwner.lookupSymbols(fieldName).stream() .filter(Symbol::isVariableSymbol) .filter(Symbol::isPrivate) .filter(symbol -> symbol.type().equals(fieldType) || symbol.type().isSubtypeOf(fieldType)) .noneMatch(symbol -> fieldName.equals(symbol.name())); }
private boolean checkStaticMethod(Tree reportTree, Symbol.MethodSymbol methodSymbol, Type superClass) { for (Symbol methodWithSameName : superClass.symbol().lookupSymbols(methodSymbol.name())) { if (methodWithSameName.isMethodSymbol() && hideStaticMethod(methodSymbol, superClass, methodWithSameName)) { reportIssue(reportTree, "Rename this method or make it \"static\"."); return true; } } return false; }
private static boolean hasNonPrivateNoArgConstructor(Type type) { Collection<Symbol> constructors = type.symbol().lookupSymbols("<init>"); for (Symbol member : constructors) { if (member.isMethodSymbol()) { Symbol.MethodSymbol method = (Symbol.MethodSymbol) member; if (method.parameterTypes().isEmpty() && !method.isPrivate()) { return true; } } } return constructors.isEmpty(); }