• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

pmd / pmd / #3722

pending completion
#3722

push

github actions

adangel
Suppress MissingOverride for Chars::isEmpty (#4291)

67270 of 127658 relevant lines covered (52.7%)

0.53 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

89.74
/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/symbols/internal/ast/AstSymbolicAnnot.java
1
/*
2
 * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3
 */
4

5
package net.sourceforge.pmd.lang.java.symbols.internal.ast;
6

7
import java.util.ArrayList;
8
import java.util.List;
9
import java.util.Objects;
10

11
import org.checkerframework.checker.nullness.qual.NonNull;
12
import org.checkerframework.checker.nullness.qual.Nullable;
13

14
import net.sourceforge.pmd.lang.java.ast.ASTAnnotation;
15
import net.sourceforge.pmd.lang.java.ast.ASTAssignableExpr.ASTNamedReferenceExpr;
16
import net.sourceforge.pmd.lang.java.ast.ASTClassLiteral;
17
import net.sourceforge.pmd.lang.java.ast.ASTMemberValue;
18
import net.sourceforge.pmd.lang.java.ast.ASTMemberValueArrayInitializer;
19
import net.sourceforge.pmd.lang.java.symbols.JClassSymbol;
20
import net.sourceforge.pmd.lang.java.symbols.JTypeDeclSymbol;
21
import net.sourceforge.pmd.lang.java.symbols.SymbolicValue;
22
import net.sourceforge.pmd.lang.java.symbols.internal.SymbolEquality;
23
import net.sourceforge.pmd.lang.java.symbols.internal.SymbolToStrings;
24
import net.sourceforge.pmd.lang.java.types.JClassType;
25
import net.sourceforge.pmd.lang.java.types.JTypeMirror;
26

27
/**
28
 *
29
 */
30
class AstSymbolicAnnot implements SymbolicValue.SymAnnot {
31

32
    private final ASTAnnotation node;
33
    private final JClassSymbol sym;
34

35
    AstSymbolicAnnot(@NonNull ASTAnnotation node, @NonNull JClassSymbol sym) {
1✔
36
        this.node = node;
1✔
37
        this.sym = Objects.requireNonNull(sym);
1✔
38
    }
1✔
39

40
    @Override
41
    public @Nullable SymbolicValue getAttribute(String attrName) {
42
        ASTMemberValue explicitAttr = node.getAttribute(attrName);
1✔
43
        if (explicitAttr != null) {
1✔
44
            return ofNode(explicitAttr);
1✔
45
        }
46
        return getAnnotationSymbol().getDefaultAnnotationAttributeValue(attrName);
1✔
47
    }
48

49
    @Override
50
    public @NonNull JClassSymbol getAnnotationSymbol() {
51
        return sym;
1✔
52

53
    }
54

55
    @Override
56
    public String getSimpleName() {
57
        return node.getSimpleName();
1✔
58
    }
59

60
    @Override
61
    public boolean equals(Object o) {
62
        return SymbolEquality.ANNOTATION.equals(this, o);
1✔
63
    }
64

65
    @Override
66
    public int hashCode() {
67
        return SymbolEquality.ANNOTATION.hash(this);
1✔
68
    }
69

70
    @Override
71
    public String toString() {
72
        return SymbolToStrings.AST.toString(this);
×
73
    }
74

75
    static SymbolicValue ofNode(ASTMemberValue valueNode) {
76
        if (valueNode == null) {
1✔
77
            return null;
×
78
        }
79

80
        { // note: this returns null for enums, annotations, and classes
81
            Object constValue = valueNode.getConstValue();
1✔
82
            if (constValue != null) {
1✔
83
                return SymbolicValue.of(valueNode.getTypeSystem(), constValue);
1✔
84
            }
85
        }
86

87
        if (valueNode instanceof ASTMemberValueArrayInitializer) {
1✔
88
            // array
89
            List<SymbolicValue> elements = new ArrayList<>(valueNode.getNumChildren());
1✔
90
            for (ASTMemberValue elt : (ASTMemberValueArrayInitializer) valueNode) {
1✔
91
                SymbolicValue symElt = ofNode(elt);
1✔
92
                if (symElt == null) {
1✔
93
                    return null;
×
94
                }
95
                elements.add(symElt);
1✔
96
            }
1✔
97
            return SymArray.forElements(elements);
1✔
98
        } else if (valueNode instanceof ASTClassLiteral) {
1✔
99
            // class
100
            JTypeDeclSymbol symbol = ((ASTClassLiteral) valueNode).getTypeNode().getTypeMirror().getSymbol();
1✔
101
            if (symbol instanceof JClassSymbol) {
1✔
102
                return SymClass.ofBinaryName(symbol.getTypeSystem(), ((JClassSymbol) symbol).getBinaryName());
1✔
103
            }
104
        } else if (valueNode instanceof ASTNamedReferenceExpr) {
1✔
105
            // enum constants
106
            ASTNamedReferenceExpr refExpr = (ASTNamedReferenceExpr) valueNode;
1✔
107
            JTypeMirror t = refExpr.getTypeMirror();
1✔
108
            if (t instanceof JClassType && ((JClassType) t).getSymbol().isEnum()) {
1✔
109
                return SymEnum.fromBinaryName(t.getTypeSystem(),
1✔
110
                                              ((JClassType) t).getSymbol().getBinaryName(),
1✔
111
                                              refExpr.getName());
1✔
112
            }
113
        }
114
        return null;
×
115
    }
116
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc