@Override public Description matchMethod(MethodTree method, VisitorState state) { if (!CAN_BE_A_BINDS_METHOD.matches(method, state)) { return NO_MATCH; } JCClassDecl enclosingClass = ASTHelpers.findEnclosingNode(state.getPath(), JCClassDecl.class); // Dagger 1 modules don't support @Binds. if (!IS_DAGGER_2_MODULE.matches(enclosingClass, state)) { return NO_MATCH; } if (enclosingClass.getExtendsClause() != null) { return fixByDelegating(); } for (Tree member : enclosingClass.getMembers()) { if (member.getKind().equals(Tree.Kind.METHOD) && !getSymbol(member).isConstructor()) { MethodTree siblingMethod = (MethodTree) member; Set<Modifier> siblingFlags = siblingMethod.getModifiers().getFlags(); if (!(siblingFlags.contains(Modifier.STATIC) || siblingFlags.contains(Modifier.ABSTRACT)) && !CAN_BE_A_BINDS_METHOD.matches(siblingMethod, state)) { return fixByDelegating(); } } } return fixByModifyingMethod(state, enclosingClass, method); }
if (getScope().isDeclareClassScope() && parent.getExtendsClause() != null && parent.getExtendsClause().type instanceof ClassType) { ClassType superClassType = (ClassType) parent.getExtendsClause().type; MethodSymbol superMethod = Util.findMethodDeclarationInType(context.types, superClassType.tsym, methodDecl.getName().toString(), (MethodType) methodDecl.type);
analyzeParsedTree(context, classDecl.getExtendsClause());
analyzeParsedTree(context, classDecl.getExtendsClause()); analyzeSimpleExpressions(context, classDecl.getImplementsClause());
@Override public Description matchMethod(MethodTree method, VisitorState state) { if (!CAN_BE_A_BINDS_METHOD.matches(method, state)) { return NO_MATCH; } JCClassDecl enclosingClass = ASTHelpers.findEnclosingNode(state.getPath(), JCClassDecl.class); // Dagger 1 modules don't support @Binds. if (!IS_DAGGER_2_MODULE.matches(enclosingClass, state)) { return NO_MATCH; } if (enclosingClass.getExtendsClause() != null) { return fixByDelegating(); } for (Tree member : enclosingClass.getMembers()) { if (member.getKind().equals(Tree.Kind.METHOD) && !getSymbol(member).isConstructor()) { MethodTree siblingMethod = (MethodTree) member; Set<Modifier> siblingFlags = siblingMethod.getModifiers().getFlags(); if (!(siblingFlags.contains(Modifier.STATIC) || siblingFlags.contains(Modifier.ABSTRACT)) && !CAN_BE_A_BINDS_METHOD.matches(siblingMethod, state)) { return fixByDelegating(); } } } return fixByModifyingMethod(state, enclosingClass, method); }
@Override public void visitClassDef(JCClassDecl tree) { List<JCTree> supertypes = List.nil(); if (tree.getExtendsClause() != null) { supertypes = supertypes.prepend(tree.getExtendsClause()); } if (tree.getImplementsClause() != null) { for (JCTree intf : tree.getImplementsClause()) { supertypes = supertypes.prepend(intf); } } checkClass(tree.pos(), tree.sym, supertypes); }
@Override public void visitClassDef(JCClassDecl tree) { List<JCTree> supertypes = List.nil(); if (tree.getExtendsClause() != null) { supertypes = supertypes.prepend(tree.getExtendsClause()); } if (tree.getImplementsClause() != null) { for (JCTree intf : tree.getImplementsClause()) { supertypes = supertypes.prepend(intf); } } checkClass(tree.pos(), tree.sym, supertypes); }