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

pmd / pmd / 353

16 Jan 2026 01:01PM UTC coverage: 78.957% (-0.02%) from 78.976%
353

push

github

adangel
[core] Fix #6184: More consistent enum properties (#6233)

18529 of 24342 branches covered (76.12%)

Branch coverage included in aggregate %.

146 of 164 new or added lines in 20 files covered. (89.02%)

6 existing lines in 5 files now uncovered.

40349 of 50228 relevant lines covered (80.33%)

0.81 hits per line

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

70.0
/pmd-core/src/main/java/net/sourceforge/pmd/lang/LanguagePropertyBundle.java
1
/*
2
 * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3
 */
4

5
package net.sourceforge.pmd.lang;
6

7
import java.util.stream.Collectors;
8

9
import org.checkerframework.checker.nullness.qual.NonNull;
10

11
import net.sourceforge.pmd.PMDConfiguration;
12
import net.sourceforge.pmd.properties.AbstractPropertySource;
13
import net.sourceforge.pmd.properties.PropertyDescriptor;
14
import net.sourceforge.pmd.properties.PropertyFactory;
15

16
/**
17
 * A bundle of properties used by languages (see {@link Language#newPropertyBundle()}).
18
 * This class declares language properties that are common to all languages.
19
 * Subclasses may define more properties and provide convenient accessors to them.
20
 *
21
 * @author Clément Fournier
22
 */
23
public class LanguagePropertyBundle extends AbstractPropertySource {
24

25
    // todo for now i think an empty value might interpret every comment
26
    //  as a suppression. I think it should disable suppression comments.
27
    //  #4846
28
    public static final PropertyDescriptor<String> SUPPRESS_MARKER
1✔
29
        = PropertyFactory.stringProperty("suppressMarker")
1✔
30
                         .desc("Marker to identify suppression comments. "
1✔
31
                                   + "Eg a value of NOPMD will make `// NOPMD` a suppression comment in Java or JavaScript.")
32
                         .defaultValue(PMDConfiguration.DEFAULT_SUPPRESS_MARKER)
1✔
33
                         .build();
1✔
34
    public static final String LANGUAGE_VERSION = "version";
35

36
    private final PropertyDescriptor<String> languageVersion;
37
    private final Language language;
38

39
    /**
40
     * Create a new bundle for the given language.
41
     */
42
    public LanguagePropertyBundle(@NonNull Language language) {
1✔
43
        this.language = language;
1✔
44
        languageVersion = PropertyFactory.stringProperty(LANGUAGE_VERSION)
1✔
45
                .desc("Language version to use for this language. See the --use-version CLI switch as well.")
1✔
46
                .defaultValue(language.getDefaultVersion().getVersion())
1✔
47
                .build();
1✔
48

49
        definePropertyDescriptor(SUPPRESS_MARKER);
1✔
50
        definePropertyDescriptor(languageVersion);
1✔
51
    }
1✔
52

53
    public void setLanguageVersion(String string) {
54
        LanguageVersion version = language.getVersion(string);
1✔
55
        if (version == null) {
1!
NEW
56
            throw new IllegalArgumentException("'" + string + "' should be one of "
×
NEW
57
                    + language.getVersions().stream()
×
NEW
58
                        .map(LanguageVersion::getVersion)
×
NEW
59
                        .map(s -> "'" + s + "'")
×
NEW
60
                        .collect(Collectors.joining(", ")));
×
61
        }
62
        setProperty(languageVersion, version.getVersion());
1✔
63
    }
1✔
64

65
    @Override
66
    protected String getPropertySourceType() {
67
        return "Language";
×
68
    }
69

70
    @Override
71
    public String getName() {
72
        return language.getName();
×
73
    }
74

75
    public Language getLanguage() {
76
        return language;
1✔
77
    }
78

79
    public LanguageVersion getLanguageVersion() {
80
        return language.getVersion(getProperty(languageVersion));
1✔
81
    }
82

83
    public String getSuppressMarker() {
84
        return getProperty(SUPPRESS_MARKER);
×
85
    }
86
}
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