@Override protected Iterable<? extends Tree> getChildNodes(ClassTree classTree, VisitorState state) { return classTree.getImplementsClause(); } }
private static boolean matchAnySuperType(ClassTree tree, VisitorState state) { List<Tree> superTypes = Lists.<Tree>newArrayList(tree.getImplementsClause()); Tree superClass = tree.getExtendsClause(); if (superClass != null) { superTypes.add(superClass); } return superTypes.stream() .anyMatch(superType -> COMPARABLE_AND_COMPARATOR_MATCHER.matches(superType, state)); }
private boolean matchAnySuperType(ClassTree tree, VisitorState state) { List<Tree> superTypes = Lists.<Tree>newArrayList(tree.getImplementsClause()); Tree superClass = tree.getExtendsClause(); if (superClass != null) { superTypes.add(superClass); } /* NOTE: at "Eight day", use Java 8 feature below return superTypes.stream() .anyMatch(superType -> ITERABLE_AND_ITERATOR_MATCHER.matches(superType, state)); */ for (Tree superType : superTypes) { if (ITERABLE_AND_ITERATOR_MATCHER.matches(superType, state)) { return true; } } return false; }
@Override public Void visitClass(ClassTree classTree, Void unused) { if (classTree.getExtendsClause() == null && classTree.getImplementsClause().isEmpty()) { state.reportMatch( buildDescription(diagnosticPosition(getCurrentPath(), state)) .setMessage( "This class does not extend or implement anything to inherit " + "documentation from.") .build()); } return null; } }.visit(getCurrentPath().getTreePath().getLeaf(), null);
@Override public Description matchMethod(MethodTree tree, VisitorState state) { ClassTree enclosingClazz = ASTHelpers.findEnclosingNode(state.getPath(), ClassTree.class); if (tree.getModifiers().getFlags().contains(Modifier.DEFAULT) && IS_FUNCTIONAL_INTERFACE.matches(enclosingClazz, state)) { Types types = Types.instance(state.context); Set<Symbol> functionalSuperInterfaceSams = enclosingClazz.getImplementsClause().stream() .filter(t -> IS_FUNCTIONAL_INTERFACE.matches(t, state)) .map(ASTHelpers::getSymbol) .map(TypeSymbol.class::cast) .map(types::findDescriptorSymbol) // TypeSymbol to single abstract method of the type .collect(toImmutableSet()); // We designate an override of a superinterface SAM "behavior preserving" if it just // calls the SAM of this interface. Symbol thisInterfaceSam = types.findDescriptorSymbol(ASTHelpers.getSymbol(enclosingClazz)); // relatively crude: doesn't verify that the same args are passed in the same order // so it can get false positives for behavior-preservingness (false negatives for the check) TreeVisitor<Boolean, VisitorState> behaviorPreserving = new BehaviorPreservingChecker(thisInterfaceSam); if (!Collections.disjoint( ASTHelpers.findSuperMethods(ASTHelpers.getSymbol(tree), types), functionalSuperInterfaceSams) && !tree.accept(behaviorPreserving, state)) { return describeMatch(tree); } } return Description.NO_MATCH; }
List<? extends Tree> interfaces = node.getImplementsClause(); if (interfaces != null && interfaces.size() > 0) { reportError("no.interface.implementation", interfaces.get(0));
if (!classTree.getKind().equals(CLASS) || classTree.getExtendsClause() != null || !classTree.getImplementsClause().isEmpty() || isInPrivateScope(state) || hasAnnotation(getSymbol(classTree), "org.junit.runner.RunWith", state)) {
@Override public Description matchClass(ClassTree tree, VisitorState state) { if (!tree.getImplementsClause().isEmpty()) { return Description.NO_MATCH;
@Override protected Iterable<? extends Tree> getChildNodes(ClassTree classTree, VisitorState state) { return classTree.getImplementsClause(); } }
private static boolean matchAnySuperType(ClassTree tree, VisitorState state) { List<Tree> superTypes = Lists.<Tree>newArrayList(tree.getImplementsClause()); Tree superClass = tree.getExtendsClause(); if (superClass != null) { superTypes.add(superClass); } return superTypes.stream() .anyMatch(superType -> COMPARABLE_AND_COMPARATOR_MATCHER.matches(superType, state)); }
private static ExpressionTree findImplementIdentifier (Trees trees, TreePath classTreePath, String fullyQualifiedName) { ClassTree clazz = (ClassTree) classTreePath.getLeaf (); for (Tree tree : clazz.getImplementsClause ()) { Element element = trees.getElement (new TreePath (classTreePath, tree)); if (equalsElementWithFQN (element, fullyQualifiedName)) return (ExpressionTree) tree; } return null; }
@Override public Void visitClass(ClassTree node, Void p) { Tree extendsClause = node.getExtendsClause(); if (extendsClause != null) { checkPackageAccess(extendsClause, getQualifiedPackageName(extendsClause)); } node.getImplementsClause().forEach( implementsClause -> checkPackageAccess(implementsClause, getQualifiedPackageName(implementsClause)) ); return super.visitClass(node, p); }
private ClassTree modifyClassTypeParameter(ClassTree clazz, int index, TypeParameterTree typeParameter, Operation op) { ClassTree copy = Class( clazz.getModifiers(), clazz.getSimpleName(), c(clazz.getTypeParameters(), index, typeParameter, op), clazz.getExtendsClause(), (List<ExpressionTree>) clazz.getImplementsClause(), clazz.getMembers() ); return copy; }
private ClassTree modifyClassMember(ClassTree clazz, int index, Tree member, Operation op) { ClassTree copy = Class( clazz.getModifiers(), clazz.getSimpleName(), clazz.getTypeParameters(), clazz.getExtendsClause(), (List<ExpressionTree>) clazz.getImplementsClause(), c(clazz.getMembers(), index, member, op) ); return copy; }
private ClassTree modifyClassImplementsClause(ClassTree clazz, int index, Tree implementsClause, Operation op) { ClassTree copy = Class( clazz.getModifiers(), clazz.getSimpleName(), clazz.getTypeParameters(), clazz.getExtendsClause(), c((List<ExpressionTree>) clazz.getImplementsClause(), index, implementsClause, op), // todo: cast! clazz.getMembers() ); return copy; }
public R visitClass(ClassTree node, P p) { R r = scan(node.getModifiers(), p); r = scanAndReduce(node.getTypeParameters(), p, r); r = scanAndReduce(node.getExtendsClause(), p, r); r = scanAndReduce(node.getImplementsClause(), p, r); r = scanAndReduce(node.getMembers(), p, r); return r; }
public R visitClass(ClassTree node, P p) { R r = scan(node.getModifiers(), p); r = scanAndReduce(node.getTypeParameters(), p, r); r = scanAndReduce(node.getExtendsClause(), p, r); r = scanAndReduce(node.getImplementsClause(), p, r); r = scanAndReduce(node.getMembers(), p, r); return r; }
public R visitClass(ClassTree node, P p) { R r = scan(node.getModifiers(), p); r = scanAndReduce(node.getTypeParameters(), p, r); r = scanAndReduce(node.getExtendsClause(), p, r); r = scanAndReduce(node.getImplementsClause(), p, r); r = scanAndReduce(node.getMembers(), p, r); return r; }
public R visitClass(ClassTree node, P p) { R r = scan(node.getModifiers(), p); r = scanAndReduce(node.getTypeParameters(), p, r); r = scanAndReduce(node.getExtendsClause(), p, r); r = scanAndReduce(node.getImplementsClause(), p, r); r = scanAndReduce(node.getMembers(), p, r); return r; }
@Override public Tree visitClass(ClassTree tree, Void p) { ClassTree n = make.Class(tree.getModifiers(), tree.getSimpleName(), tree.getTypeParameters(), tree.getExtendsClause(), tree.getImplementsClause(), tree.getMembers()); model.setElement(n, model.getElement(tree)); model.setType(n, model.getType(tree)); comments.copyComments(tree, n); model.setPos(n, model.getPos(tree)); return n; }