private static boolean isGetter(ExpressionTree expressionTree) { if (!(expressionTree instanceof JCFieldAccess)) { return false; } JCFieldAccess access = (JCFieldAccess) expressionTree; String methodName = access.sym.getQualifiedName().toString(); return methodName.startsWith("get"); }
private static String getMethodName(ExpressionTree tree) { MethodInvocationTree method = (MethodInvocationTree) tree; ExpressionTree expressionTree = method.getMethodSelect(); JCFieldAccess access = (JCFieldAccess) expressionTree; return access.sym.getQualifiedName().toString(); }
@Nullable public Choice<Unifier> unify(@Nullable Symbol symbol, Unifier unifier) { return symbol != null ? getName().unify(symbol.getQualifiedName(), unifier) : Choice.<Unifier>none(); } }
@Override public boolean matches(AnnotationTree annotationTree, VisitorState state) { Tree type = annotationTree.getAnnotationType(); if (type.getKind() == Tree.Kind.IDENTIFIER && type instanceof JCTree.JCIdent) { JCTree.JCIdent jcIdent = (JCTree.JCIdent) type; return jcIdent.sym.getQualifiedName().contentEquals(annotationClassName); } else if (type.getKind() == Tree.Kind.MEMBER_SELECT && type instanceof JCTree.JCFieldAccess) { JCTree.JCFieldAccess jcFieldAccess = (JCTree.JCFieldAccess) type; return jcFieldAccess.sym.getQualifiedName().contentEquals(annotationClassName); } else { return false; } } }
private String createReplacementMethodModifiers(VisitorState state, JCModifiers modifiers) { ImmutableList.Builder<String> modifierStringsBuilder = ImmutableList.<String>builder().add("@Multibinds"); for (JCAnnotation annotation : modifiers.annotations) { Name annotationQualifiedName = ASTHelpers.getSymbol(annotation).getQualifiedName(); if (!(annotationQualifiedName.contentEquals("dagger.Provides") || annotationQualifiedName.contentEquals("dagger.producers.Produces") || annotationQualifiedName.contentEquals("dagger.multibindings.ElementsIntoSet"))) { modifierStringsBuilder.add(state.getSourceForNode(annotation)); } } EnumSet<Flag> methodFlags = Flags.asFlagSet(modifiers.flags); methodFlags.remove(Flags.Flag.STATIC); methodFlags.remove(Flags.Flag.FINAL); methodFlags.add(Flags.Flag.ABSTRACT); for (Flag flag : methodFlags) { modifierStringsBuilder.add(flag.toString()); } return Joiner.on(' ').join(modifierStringsBuilder.build()); }
@Override public Void visitMethodInvocation(MethodInvocationTree tree, Void unused) { MethodSymbol methodSymbol = getSymbol(tree); if (methodSymbol == null || SIDE_EFFECT_FREE_CLASSES.contains(methodSymbol.owner.getQualifiedName().toString())) { return null; } hasSideEffect = true; return null; }
private ClassAndField(VarSymbol symbol) { this.symbol = symbol; this.clazz = symbol.owner.getQualifiedName().toString(); this.field = symbol.getSimpleName().toString(); }
@Override public Description matchMemberSelect(MemberSelectTree tree, VisitorState state) { if (INSIDE_MOCKITO.matches(tree, state)) { return Description.NO_MATCH; } Symbol symbol = ASTHelpers.getSymbol(tree); if (symbol != null && symbol.getQualifiedName().toString().startsWith("org.mockito.internal")) { return describeMatch(tree); } return Description.NO_MATCH; } }
@Override public boolean matches(MethodTree methodTree, VisitorState state) { return ASTHelpers.getSymbol(methodTree) .getEnclosingElement() .getQualifiedName() .contentEquals(className) && methodTree.getName().contentEquals(methodName); } };
@Nullable private static String matchNaN(ExpressionTree tree) { Symbol sym = ASTHelpers.getSymbol(tree); if (sym != null && sym.owner != null && sym.owner.asType() != null && sym.getSimpleName().contentEquals("NaN")) { if (sym.owner.getQualifiedName().contentEquals("java.lang.Double")) { return "Double"; } else if (sym.owner.getQualifiedName().contentEquals("java.lang.Float")) { return "Float"; } } return null; } }
@Override public boolean matches(MethodTree tree, VisitorState state) { MethodSymbol symbol = getSymbol(tree); if (symbol == null) { return false; } for (MethodSymbol superMethod : findSuperMethods(symbol, state.getTypes())) { if (superMethod.owner != null && superMethod.owner.getQualifiedName().contentEquals(clazz.getName())) { return true; } } return false; } };
@Override public boolean matches(ExpressionTree expressionTree, VisitorState state) { Symbol sym = ASTHelpers.getSymbol(expressionTree); if (sym != null && sym.getSimpleName().toString().startsWith("log")) { return true; } if (sym != null && sym.isStatic()) { if (sym.owner.getQualifiedName().toString().contains("Logger")) { return true; } } else if (expressionTree instanceof MemberSelectTree) { if (((MemberSelectTree) expressionTree).getExpression().toString().startsWith("log")) { return true; } } return false; } }
private boolean isSystemExit(ExpressionTree expression) { if (!(expression instanceof MethodInvocationTree)) { return false; } MethodSymbol sym = getSymbol((MethodInvocationTree) expression); if (sym == null) { return false; } return sym.owner.getQualifiedName().contentEquals("java.lang.System") && sym.getSimpleName().contentEquals("exit"); }
@Override public boolean matches(MethodTree methodTree, VisitorState state) { Symbol symbol = ASTHelpers.getSymbol(methodTree); return symbol.getEnclosingElement().getQualifiedName().contentEquals(className) && symbol.isConstructor(); } };
public static MethodRef fromSymbol(Symbol.MethodSymbol symbol) { String methodStr = symbol.toString(); return new MethodRef( symbol.owner.getQualifiedName().toString(), symbol.name.toString(), methodStr); }
@Override public Void visitNewClass(NewClassTree tree, Void unused) { String classFullName = ""; if (tree.getIdentifier().getKind() == Kind.MEMBER_SELECT) { classFullName = ((JCFieldAccess) tree.getIdentifier()).sym.getQualifiedName().toString(); } else if (tree.getIdentifier().getKind() == Kind.IDENTIFIER) { classFullName = ((JCIdent) tree.getIdentifier()).sym.getQualifiedName().toString(); } if (SIDE_EFFECT_FREE_CLASSES.contains(classFullName)) { return null; } hasSideEffect = true; return null; }
private void addFix(SuggestedFix.Builder fix) { String qualifiedName = owner().getQualifiedName() + "." + name(); if (isStatic()) { fix.addStaticImport(qualifiedName); } else { fix.addImport(qualifiedName); } } }
boolean shouldUseGuava(VisitorState state) { for (ImportTree importTree : state.getPath().getCompilationUnit().getImports()) { Symbol sym = ASTHelpers.getSymbol(importTree.getQualifiedIdentifier()); if (sym == null) { continue; } if (sym.getQualifiedName().contentEquals("com.google.common.io.Files")) { return true; } } return false; }
@Override public Description matchMethod(MethodTree method, VisitorState state) { if (!CAN_BE_A_MULTIBINDS_METHOD.matches(method, state)) { return NO_MATCH; } JCClassDecl enclosingClass = ASTHelpers.findEnclosingNode(state.getPath(), JCClassDecl.class); // Check to see if this is in a Dagger 1 module b/c it doesn't support @Multibinds for (JCAnnotation annotation : enclosingClass.getModifiers().getAnnotations()) { if (ASTHelpers.getSymbol(annotation.getAnnotationType()) .getQualifiedName() .contentEquals("dagger.Module") && HAS_DAGGER_ONE_MODULE_ARGUMENT.matches(annotation, state)) { return NO_MATCH; } } return fixByModifyingMethod(state, enclosingClass, method); }
@Override public Void visitClass(ClassTree node, Context context) { Symbol sym = ASTHelpers.getSymbol(node); if (sym == null || !sym.getQualifiedName().contentEquals(rule().qualifiedTemplateClass())) { ListBuffer<JCStatement> statements = new ListBuffer<>(); for (Tree tree : node.getMembers()) { if (tree instanceof JCStatement) { statements.append((JCStatement) tree); } else { tree.accept(this, context); } } scan(TreeMaker.instance(context).Block(0, statements.toList()), context); } return null; }