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

pmd / pmd / 4502

13 Mar 2025 12:14PM UTC coverage: 83.089% (+3.4%) from 79.659%
4502

push

github

adangel
[java] Fix crash when parsing class for anonymous class (#5588)

Merge pull request #5588 from oowekyala:fix-anon-class-loading

1912 of 2411 branches covered (79.3%)

Branch coverage included in aggregate %.

29 of 33 new or added lines in 2 files covered. (87.88%)

30 existing lines in 6 files now uncovered.

4559 of 5377 relevant lines covered (84.79%)

14.17 hits per line

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

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

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

10
import org.checkerframework.checker.nullness.qual.NonNull;
11
import org.slf4j.Logger;
12
import org.slf4j.LoggerFactory;
13

14
import net.sourceforge.pmd.lang.LanguageVersionHandler;
15
import net.sourceforge.pmd.lang.ast.Parser;
16
import net.sourceforge.pmd.lang.impl.BatchLanguageProcessor;
17
import net.sourceforge.pmd.lang.java.ast.JavaParser;
18
import net.sourceforge.pmd.lang.java.internal.JavaLanguageProperties.InferenceLoggingVerbosity;
19
import net.sourceforge.pmd.lang.java.rule.xpath.internal.BaseContextNodeTestFun;
20
import net.sourceforge.pmd.lang.java.rule.xpath.internal.GetCommentOnFunction;
21
import net.sourceforge.pmd.lang.java.rule.xpath.internal.GetModifiersFun;
22
import net.sourceforge.pmd.lang.java.rule.xpath.internal.MatchesSignatureFunction;
23
import net.sourceforge.pmd.lang.java.rule.xpath.internal.MetricFunction;
24
import net.sourceforge.pmd.lang.java.rule.xpath.internal.NodeIsFunction;
25
import net.sourceforge.pmd.lang.java.types.TypeSystem;
26
import net.sourceforge.pmd.lang.java.types.internal.infer.TypeInferenceLogger;
27
import net.sourceforge.pmd.lang.java.types.internal.infer.TypeInferenceLogger.SimpleLogger;
28
import net.sourceforge.pmd.lang.java.types.internal.infer.TypeInferenceLogger.VerboseLogger;
29
import net.sourceforge.pmd.lang.metrics.LanguageMetricsProvider;
30
import net.sourceforge.pmd.lang.rule.xpath.impl.XPathHandler;
31
import net.sourceforge.pmd.reporting.ViolationDecorator;
32
import net.sourceforge.pmd.reporting.ViolationSuppressor;
33
import net.sourceforge.pmd.util.designerbindings.DesignerBindings;
34

35
/**
36
 * @author Clément Fournier
37
 */
38
public class JavaLanguageProcessor extends BatchLanguageProcessor<JavaLanguageProperties>
39
    implements LanguageVersionHandler {
40

41
    private static final Logger LOG = LoggerFactory.getLogger(JavaLanguageProcessor.class);
2✔
42

43
    private final LanguageMetricsProvider myMetricsProvider = new JavaMetricsProvider();
2✔
44
    private final JavaParser parser;
45
    private final JavaParser parserWithoutProcessing;
46
    private final boolean firstClassLombok;
47
    private TypeSystem typeSystem;
48

49
    public JavaLanguageProcessor(JavaLanguageProperties properties, TypeSystem typeSystem) {
50
        super(properties);
2✔
51
        this.typeSystem = typeSystem;
2✔
52

53
        String suppressMarker = properties.getSuppressMarker();
2✔
54
        this.parser = new JavaParser(suppressMarker, this, true);
2✔
55
        this.parserWithoutProcessing = new JavaParser(suppressMarker, this, false);
2✔
56
        this.firstClassLombok = properties.getProperty(JavaLanguageProperties.FIRST_CLASS_LOMBOK);
2✔
57
    }
2✔
58

59
    public JavaLanguageProcessor(JavaLanguageProperties properties) {
60
        this(properties, TypeSystem.usingClassLoaderClasspath(properties.getAnalysisClassLoader()));
2✔
61
        LOG.debug("Using analysis classloader: {}", properties.getAnalysisClassLoader());
2✔
62
    }
2✔
63

64
    @Override
65
    public @NonNull LanguageVersionHandler services() {
66
        return this;
2✔
67
    }
68

69
    @Override
70
    public Parser getParser() {
71
        return parser;
2✔
72
    }
73

74
    public JavaParser getParserWithoutProcessing() {
75
        return parserWithoutProcessing;
2✔
76
    }
77

78
    public TypeSystem getTypeSystem() {
79
        return typeSystem;
2✔
80
    }
81

82
    public boolean hasFirstClassLombokSupport() {
83
        return firstClassLombok;
2✔
84
    }
85

86
    TypeInferenceLogger newTypeInfLogger() {
87
        InferenceLoggingVerbosity verbosity = getProperties().getProperty(JavaLanguageProperties.INTERNAL_INFERENCE_LOGGING_VERBOSITY);
2✔
88
        if (verbosity == InferenceLoggingVerbosity.VERBOSE) {
2!
UNCOV
89
            return new VerboseLogger(System.err);
×
90
        } else if (verbosity == InferenceLoggingVerbosity.SIMPLE) {
2!
UNCOV
91
            return new SimpleLogger(System.err);
×
92
        } else {
93
            return TypeInferenceLogger.noop();
2✔
94
        }
95
    }
96

97
    @Override
98
    public DesignerBindings getDesignerBindings() {
UNCOV
99
        return JavaDesignerBindings.INSTANCE;
×
100
    }
101

102
    @Override
103
    public XPathHandler getXPathHandler() {
104
        return XPATH_HANDLER;
2✔
105
    }
106

107
    @Override
108
    public List<ViolationSuppressor> getExtraViolationSuppressors() {
109
        return AnnotationSuppressionUtil.ALL_JAVA_SUPPRESSORS;
2✔
110
    }
111

112
    @Override
113
    public ViolationDecorator getViolationDecorator() {
114
        return JavaViolationDecorator.INSTANCE;
2✔
115
    }
116

117
    @Override
118
    public LanguageMetricsProvider getLanguageMetricsProvider() {
119
        return myMetricsProvider;
2✔
120
    }
121

122
    private static final XPathHandler XPATH_HANDLER =
2✔
123
        XPathHandler.getHandlerForFunctionDefs(
2✔
124
            BaseContextNodeTestFun.TYPE_IS_EXACTLY,
125
            BaseContextNodeTestFun.TYPE_IS,
126
            BaseContextNodeTestFun.HAS_ANNOTATION,
127
            MatchesSignatureFunction.INSTANCE,
128
            NodeIsFunction.INSTANCE,
129
            GetModifiersFun.GET_EFFECTIVE,
130
            GetModifiersFun.GET_EXPLICIT,
131
            MetricFunction.INSTANCE,
132
            GetCommentOnFunction.INSTANCE
133
        );
134

135
    public void setTypeSystem(TypeSystem ts) {
136
        this.typeSystem = Objects.requireNonNull(ts);
2✔
137
    }
2✔
138

139
    @Override
140
    public void close() throws Exception {
141
        this.typeSystem.logStats();
2✔
142
        super.close();
2✔
143
    }
2✔
144
}
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