@Override public boolean matches(Tree tree, VisitorState state) { Symbol sym = ASTHelpers.getSymbol(tree); return sym != null && sym.isStatic(); } };
@Override public boolean accepts(Symbol symbol) { return symbol.getKind() == ElementKind.FIELD && !symbol.isStatic(); } };
private static boolean isStaticFinalField(Symbol sym) { return sym.isStatic() && sym.getModifiers().contains(Modifier.FINAL); }
private void setReceiverNonnull( AccessPathNullnessPropagation.ReadableUpdates updates, Node receiver, Symbol symbol) { if (symbol != null && !symbol.isStatic()) { setNonnullIfAnalyzeable(updates, receiver); } }
private void handleSymbol(Symbol symbol) { if (symbol.getKind() == ElementKind.FIELD && !symbol.isStatic() && symbol.owner.equals(classSymbol)) { String name = symbol.name.toString(); if (name.equals("this") || name.equals("super")) { return; } accessedFields.add(symbol); } }
private static List<TypeVariableSymbol> typeVariablesEnclosing(Symbol sym) { List<TypeVariableSymbol> typeVarScopes = new ArrayList<>(); outer: while (!sym.isStatic()) { sym = sym.owner; switch (sym.getKind()) { case PACKAGE: break outer; case METHOD: case CLASS: typeVarScopes.addAll(0, sym.getTypeParameters()); break; default: // fall out } } return typeVarScopes; }
@Override public boolean matches(ExpressionTree expressionTree, VisitorState state) { Symbol symbol = ASTHelpers.getSymbol(expressionTree); return symbol != null && symbol.getKind() == ElementKind.FIELD && !symbol.isStatic(); } };
@Override boolean fieldSymbolIsAppropriate(Symbol symbol) { return !symbol.isStatic() && symbol.getSimpleName().contentEquals(fieldName); } };
private static List<TypeVariableSymbol> typeVariablesEnclosing(Symbol sym) { List<TypeVariableSymbol> typeVarScopes = new ArrayList<>(); outer: while (!sym.isStatic()) { sym = sym.owner; switch (sym.getKind()) { case PACKAGE: break outer; case METHOD: case CLASS: typeVarScopes.addAll(sym.getTypeParameters()); break; default: // fall out } } return typeVarScopes; } }
@Override boolean fieldSymbolIsAppropriate(Symbol symbol) { return symbol.isStatic() && symbol.getSimpleName().contentEquals(fieldName); } };
private static Optional<ComparisonSite> getDubiousComparison( ClassSymbol encl, Tree tree, ExpressionTree lhs, ExpressionTree rhs) { Symbol lhsSymbol = getSymbol(lhs); Symbol rhsSymbol = getSymbol(rhs); if (lhsSymbol == null || rhsSymbol == null || lhsSymbol.equals(rhsSymbol)) { return Optional.empty(); } if (lhsSymbol.isStatic() || rhsSymbol.isStatic()) { return Optional.empty(); } if (!encl.equals(lhsSymbol.enclClass()) || !encl.equals(rhsSymbol.enclClass())) { return Optional.empty(); } if (!FIELD_TYPES.contains(lhsSymbol.getKind()) || !FIELD_TYPES.contains(rhsSymbol.getKind())) { return Optional.empty(); } if (getKind(lhs) != getKind(rhs)) { return Optional.empty(); } return Optional.of(ComparisonSite.of(tree, lhsSymbol, rhsSymbol)); }
/** Returns true if the given symbol has static modifier and is all upper case. */ private static boolean isUpperCaseAndStatic(Symbol symbol) { return symbol.isStatic() && symbol.name.contentEquals(Ascii.toUpperCase(symbol.name.toString())); }
@Override public Void visitAssignment(AssignmentTree tree, Void unused) { Symbol symbol = ASTHelpers.getSymbol(tree.getVariable()); // check if it is instance field. if (symbol != null && symbol.getKind() == ElementKind.FIELD && !symbol.isStatic()) { variablesAssigned.add(symbol); } return super.visitAssignment(tree, null); } }.scan((JCTree) getOnlyElement(ctorsWithInject), null);
@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 GuardedByExpression bindSelect(GuardedByExpression base, Symbol sym) { if (base.kind().equals(Kind.TYPE_LITERAL) && !sym.isStatic()) { throw new IllegalGuardedBy("Instance access on static: " + base + ", " + sym); } // TODO(cushon) - forbid static access on instance? return F.select(base, sym); }
@Override public Description matchSynchronized(SynchronizedTree tree, VisitorState state) { Symbol lock = ASTHelpers.getSymbol(stripParentheses(tree.getExpression())); if (!(lock instanceof VarSymbol)) { return Description.NO_MATCH; } if (lock.isStatic()) { return Description.NO_MATCH; } Multimap<VarSymbol, Tree> writes = WriteVisitor.scan(tree.getBlock()); for (Entry<VarSymbol, Tree> write : writes.entries()) { if (!write.getKey().isStatic()) { continue; } state.reportMatch( buildDescription(write.getValue()).setMessage(String.format(MESSAGE, lock)).build()); } return Description.NO_MATCH; }
@Override protected boolean matchArgument(ExpressionTree tree, VisitorState state) { if (!ASTHelpers.isSubtype( ASTHelpers.getType(tree), state.getTypeFromString("java.lang.Number"), state)) { return false; } Symbol sym = ASTHelpers.getSymbol(tree); if (sym instanceof Symbol.VarSymbol && isFinal(sym) && sym.isStatic()) { // Using a static final field as a sentinel is OK return false; } return true; }
@SuppressWarnings("TypeEquals") @Nullable public static MethodSymbol findSuperMethodInType( MethodSymbol methodSymbol, Type superType, Types types) { if (methodSymbol.isStatic() || superType.equals(methodSymbol.owner.type)) { return null; } Scope scope = superType.tsym.members(); for (Symbol sym : scope.getSymbolsByName(methodSymbol.name)) { if (sym != null && !sym.isStatic() && ((sym.flags() & Flags.SYNTHETIC) == 0) && methodSymbol.overrides( sym, (TypeSymbol) methodSymbol.owner, types, /* checkResult= */ true)) { return (MethodSymbol) sym; } } return null; }
@Override public UExpression visitMemberSelect(MemberSelectTree tree, Void v) { Symbol sym = ASTHelpers.getSymbol(tree); if (sym instanceof ClassSymbol) { return UClassIdent.create((ClassSymbol) sym); } else if (sym.isStatic()) { ExpressionTree selected = tree.getExpression(); checkState( ASTHelpers.getSymbol(selected) instanceof ClassSymbol, "Refaster cannot match static methods used on instances"); return staticMember(sym); } return UMemberSelect.create( template(tree.getExpression()), tree.getIdentifier(), template(sym.type)); }
@Override public boolean matches(ExpressionTree expressionTree, VisitorState state) { if (expressionTree instanceof JCFieldAccess) { Symbol symbol = ASTHelpers.getSymbol(expressionTree); if (symbol.isStatic() && state.getTypes().unboxedTypeOrType(symbol.type).getTag() == TypeTag.BOOLEAN) { return ((value && symbol.getSimpleName().contentEquals("TRUE")) || symbol.getSimpleName().contentEquals("FALSE")); } } return false; } };