• 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

62.79
/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/symbols/internal/SymbolToStrings.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;
6

7
import java.util.stream.Collectors;
8

9
import net.sourceforge.pmd.lang.java.symbols.JClassSymbol;
10
import net.sourceforge.pmd.lang.java.symbols.JConstructorSymbol;
11
import net.sourceforge.pmd.lang.java.symbols.JElementSymbol;
12
import net.sourceforge.pmd.lang.java.symbols.JFieldSymbol;
13
import net.sourceforge.pmd.lang.java.symbols.JFormalParamSymbol;
14
import net.sourceforge.pmd.lang.java.symbols.JLocalVariableSymbol;
15
import net.sourceforge.pmd.lang.java.symbols.JMethodSymbol;
16
import net.sourceforge.pmd.lang.java.symbols.JTypeDeclSymbol;
17
import net.sourceforge.pmd.lang.java.symbols.JTypeParameterSymbol;
18
import net.sourceforge.pmd.lang.java.symbols.SymbolVisitor;
19
import net.sourceforge.pmd.lang.java.symbols.SymbolicValue.SymAnnot;
20

21
public class SymbolToStrings {
22

23
    public static final SymbolToStrings SHARED = new SymbolToStrings("");
1✔
24
    public static final SymbolToStrings FAKE = new SymbolToStrings("fake");
1✔
25
    public static final SymbolToStrings ASM = new SymbolToStrings("asm");
1✔
26
    public static final SymbolToStrings AST = new SymbolToStrings("ast");
1✔
27

28
    private final ToStringVisitor visitor;
29

30
    public SymbolToStrings(String impl) {
1✔
31
        this.visitor = new ToStringVisitor(impl);
1✔
32
    }
1✔
33

34
    public String toString(JElementSymbol symbol) {
35
        return symbol.acceptVisitor(visitor, new StringBuilder()).toString();
1✔
36
    }
37

38
    public String toString(SymAnnot annot) {
39
        String attrs;
40
        if (annot.getAttributeNames().isEmpty()) {
×
41
            attrs = "";
×
42
        } else {
43
            attrs = annot.getAttributeNames()
×
44
                         .stream()
×
45
                         .map(name -> name + "=" + annot.getAttribute(name))
×
46
                         .collect(Collectors.joining(", ", "(", ")"));
×
47
        }
48
        return "@" + annot.getBinaryName() + attrs;
×
49
    }
50

51
    private static final class ToStringVisitor implements SymbolVisitor<StringBuilder, StringBuilder> {
52

53
        private final String impl;
54

55
        private ToStringVisitor(String impl) {
1✔
56
            this.impl = impl;
1✔
57
        }
1✔
58

59
        private StringBuilder withImpl(StringBuilder builder, String kind, Object first, Object... rest) {
60
            if (!impl.isEmpty()) {
1✔
61
                builder.append(impl).append(':');
1✔
62
            }
63
            builder.append(kind).append('(').append(first);
1✔
64
            for (Object s : rest) {
1✔
65
                builder.append(", ").append(s);
1✔
66
            }
67
            return builder.append(')');
1✔
68
        }
69

70
        @Override
71
        public StringBuilder visitSymbol(JElementSymbol sym, StringBuilder builder) {
72
            throw new IllegalStateException("Unknown symbol " + sym.getClass());
×
73
        }
74

75
        @Override
76
        public StringBuilder visitClass(JClassSymbol sym, StringBuilder param) {
77
            String kind;
78
            if (sym.isUnresolved()) {
1✔
79
                kind = "unresolved";
×
80
            } else if (sym.isEnum()) {
1✔
81
                kind = "enum";
×
82
            } else if (sym.isAnnotation()) {
1✔
83
                kind = "annot";
×
84
            } else if (sym.isRecord()) {
1✔
85
                kind = "record";
×
86
            } else {
87
                kind = "class";
1✔
88
            }
89

90
            return withImpl(param, kind, sym.getBinaryName());
1✔
91
        }
92

93
        @Override
94
        public StringBuilder visitArray(JClassSymbol sym, JTypeDeclSymbol component, StringBuilder param) {
95
            param.append("array(");
1✔
96
            return component.acceptVisitor(this, param).append(")");
1✔
97
        }
98

99
        @Override
100
        public StringBuilder visitTypeParam(JTypeParameterSymbol sym, StringBuilder param) {
101
            return withImpl(param, "tparam", sym.getSimpleName(), sym.getDeclaringSymbol());
×
102
        }
103

104
        @Override
105
        public StringBuilder visitCtor(JConstructorSymbol sym, StringBuilder param) {
106
            return withImpl(param, "ctor", sym.getEnclosingClass());
×
107
        }
108

109
        @Override
110
        public StringBuilder visitMethod(JMethodSymbol sym, StringBuilder param) {
111
            return withImpl(param, "method", sym.getSimpleName(), sym.getEnclosingClass());
1✔
112
        }
113

114
        @Override
115
        public StringBuilder visitField(JFieldSymbol sym, StringBuilder param) {
116
            return withImpl(param, "field", sym.getSimpleName(), sym.getEnclosingClass());
1✔
117
        }
118

119
        @Override
120
        public StringBuilder visitLocal(JLocalVariableSymbol sym, StringBuilder param) {
121
            return withImpl(param, "local", sym.getSimpleName());
×
122
        }
123

124
        @Override
125
        public StringBuilder visitFormal(JFormalParamSymbol sym, StringBuilder param) {
126
            return withImpl(param, "formal", sym.getSimpleName());
×
127
        }
128
    }
129

130
}
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