Class PMDConfiguration


  • public class PMDConfiguration
    extends AbstractConfiguration
    This class contains the details for the runtime configuration of a PMD run. You can either create one and set individual fields, or mimic a CLI run by using extractParameters.

    There are several aspects to the configuration of PMD.

    The aspects related to generic PMD behavior:

    • Suppress marker is used in source files to suppress a RuleViolation, defaults to "NOPMD". getSuppressMarker()
    • The number of threads to create when invoking on multiple files, defaults one thread per available processor. getThreads()
    • A ClassLoader to use when loading classes during Rule processing (e.g. during type resolution), defaults to ClassLoader of the Configuration class. getClassLoader()
    • A means to configure a ClassLoader using a prepended classpath String, instead of directly setting it programmatically. prependAuxClasspath(String)
    • A LanguageVersionDiscoverer instance, which defaults to using the default LanguageVersion of each Language. Means are provided to change the LanguageVersion for each Language. getLanguageVersionDiscoverer()

    The aspects related to Rules and Source files are:

    The aspects related to special PMD behavior are:

    • An indicator of whether PMD should log debug information. AbstractConfiguration.isDebug()
    • An indicator of whether PMD should perform stress testing behaviors, such as randomizing the order of file processing. isStressTest()
    • An indicator of whether PMD should log benchmarking information. isBenchmark()
    • Field Detail

      • DEFAULT_SUPPRESS_MARKER

        public static final String DEFAULT_SUPPRESS_MARKER
        The default suppress marker string.
        See Also:
        Constant Field Values
    • Constructor Detail

      • PMDConfiguration

        public PMDConfiguration()
      • PMDConfiguration

        public PMDConfiguration​(@NonNull LanguageRegistry languageRegistry)
    • Method Detail

      • getSuppressMarker

        public String getSuppressMarker()
        Get the suppress marker. This is the source level marker used to indicate a RuleViolation should be suppressed.
        Returns:
        The suppress marker.
      • setSuppressMarker

        public void setSuppressMarker​(String suppressMarker)
        Set the suppress marker.
        Parameters:
        suppressMarker - The suppress marker to use.
      • getThreads

        public int getThreads()
        Get the number of threads to use when processing Rules.
        Returns:
        The number of threads.
      • setThreads

        public void setThreads​(int threads)
        Set the number of threads to use when processing Rules.
        Parameters:
        threads - The number of threads.
      • getClassLoader

        public ClassLoader getClassLoader()
        Get the ClassLoader being used by PMD when processing Rules.
        Returns:
        The ClassLoader being used
      • setClassLoader

        public void setClassLoader​(ClassLoader classLoader)
        Set the ClassLoader being used by PMD when processing Rules. Setting a value of null will cause the default ClassLoader to be used.
        Parameters:
        classLoader - The ClassLoader to use
      • prependClasspath

        @Deprecated
        public void prependClasspath​(String classpath)
                              throws IOException
        Deprecated.
        Use prependAuxClasspath(String), which doesn't throw a checked IOException
        Prepend the specified classpath like string to the current ClassLoader of the configuration. If no ClassLoader is currently configured, the ClassLoader used to load the PMDConfiguration class will be used as the parent ClassLoader of the created ClassLoader.

        If the classpath String looks like a URL to a file (i.e. starts with file://) the file will be read with each line representing an entry on the classpath.

        Parameters:
        classpath - The prepended classpath.
        Throws:
        IOException - if the given classpath is invalid (e.g. does not exist)
        See Also:
        setClassLoader(ClassLoader), ClasspathClassLoader
      • prependAuxClasspath

        public void prependAuxClasspath​(String classpath)
        Prepend the specified classpath like string to the current ClassLoader of the configuration. If no ClassLoader is currently configured, the ClassLoader used to load the PMDConfiguration class will be used as the parent ClassLoader of the created ClassLoader.

        If the classpath String looks like a URL to a file (i.e. starts with file://) the file will be read with each line representing an entry on the classpath.

        Parameters:
        classpath - The prepended classpath.
        Throws:
        IllegalArgumentException - if the given classpath is invalid (e.g. does not exist)
        See Also:
        setClassLoader(ClassLoader)
      • getReporter

        public @NonNull MessageReporter getReporter()
        Returns the message reporter that is to be used while running the analysis.
      • setReporter

        public void setReporter​(@NonNull MessageReporter reporter)
        Sets the message reporter that is to be used while running the analysis.
        Parameters:
        reporter - A non-null message reporter
      • getLanguageVersionDiscoverer

        public LanguageVersionDiscoverer getLanguageVersionDiscoverer()
        Get the LanguageVersionDiscoverer, used to determine the LanguageVersion of a source file.
        Returns:
        The LanguageVersionDiscoverer.
      • getForceLanguageVersion

        public LanguageVersion getForceLanguageVersion()
        Get the LanguageVersion specified by the force-language parameter. This overrides detection based on file extensions
        Returns:
        The LanguageVersion.
      • isForceLanguageVersion

        public boolean isForceLanguageVersion()
        Is the force-language parameter set to anything?
        Returns:
        true if $getForceLanguageVersion() is not null
      • setForceLanguageVersion

        public void setForceLanguageVersion​(@Nullable LanguageVersion forceLanguageVersion)
        Set the LanguageVersion specified by the force-language parameter. This overrides detection based on file extensions
        Parameters:
        forceLanguageVersion - the language version
      • setDefaultLanguageVersion

        public void setDefaultLanguageVersion​(LanguageVersion languageVersion)
        Set the given LanguageVersion as the current default for it's Language.
        Parameters:
        languageVersion - the LanguageVersion
      • setDefaultLanguageVersions

        public void setDefaultLanguageVersions​(List<LanguageVersion> languageVersions)
        Set the given LanguageVersions as the current default for their Languages.
        Parameters:
        languageVersions - The LanguageVersions.
      • getLanguageVersionOfFile

        public @Nullable LanguageVersion getLanguageVersionOfFile​(String fileName)
        Get the LanguageVersion of the source file with given name. This depends on the fileName extension, and the java version.

        For compatibility with older code that does not always pass in a correct filename, unrecognized files are assumed to be java files.

        Parameters:
        fileName - Name of the file, can be absolute, or simple.
        Returns:
        the LanguageVersion
      • getRuleSets

        @Deprecated
        public @Nullable String getRuleSets()
        Deprecated.
        Get the comma separated list of RuleSet URIs.
        Returns:
        The RuleSet URIs.
      • getMinimumPriority

        public RulePriority getMinimumPriority()
        Get the minimum priority threshold when loading Rules from RuleSets.
        Returns:
        The minimum priority threshold.
      • setMinimumPriority

        public void setMinimumPriority​(RulePriority minimumPriority)
        Set the minimum priority threshold when loading Rules from RuleSets.
        Parameters:
        minimumPriority - The minimum priority.
      • getInputPathList

        public @NonNull List<Path> getInputPathList()
        Returns the list of input paths to explore. This is an unmodifiable list.
      • setInputPathList

        public void setInputPathList​(List<Path> inputPaths)
        Set the input paths to the given list of paths.
        Throws:
        NullPointerException - If the parameter is null or contains a null value
      • addInputPath

        public void addInputPath​(@NonNull Path inputPath)
        Add an input path. It is not split on commas.
        Throws:
        NullPointerException - If the parameter is null
      • getInputFile

        public @Nullable Path getInputFile()
        Returns the path to the file list text file.
      • getIgnoreFile

        public @Nullable Path getIgnoreFile()
      • setInputFilePath

        @Deprecated
        public void setInputFilePath​(String inputFilePath)
        Deprecated.
        The input file path points to a single file, which contains a comma-separated list of source file names to process.
        Parameters:
        inputFilePath - path to the file
      • setInputFilePath

        public void setInputFilePath​(Path inputFilePath)
        The input file path points to a single file, which contains a comma-separated list of source file names to process.
        Parameters:
        inputFilePath - path to the file
      • setIgnoreFilePath

        @Deprecated
        public void setIgnoreFilePath​(String ignoreFilePath)
        Deprecated.
        The input file path points to a single file, which contains a comma-separated list of source file names to ignore.
        Parameters:
        ignoreFilePath - path to the file
      • setIgnoreFilePath

        public void setIgnoreFilePath​(Path ignoreFilePath)
        The input file path points to a single file, which contains a comma-separated list of source file names to ignore.
        Parameters:
        ignoreFilePath - path to the file
      • getUri

        public URI getUri()
        Get the input URI to process for source code objects.
        Returns:
        URI
      • setInputUri

        @Deprecated
        public void setInputUri​(String inputUri)
        Deprecated.
        Set the input URI to process for source code objects.
        Parameters:
        inputUri - a single URI
      • setInputUri

        public void setInputUri​(URI inputUri)
        Set the input URI to process for source code objects.
        Parameters:
        inputUri - a single URI
      • createRenderer

        public Renderer createRenderer()
        Create a Renderer instance based upon the configured reporting options. No writer is created.
        Returns:
        renderer
      • createRenderer

        public Renderer createRenderer​(boolean withReportWriter)
        Create a Renderer instance based upon the configured reporting options. If withReportWriter then we'll configure it with a writer for the reportFile specified.
        Parameters:
        withReportWriter - whether to configure a writer or not
        Returns:
        A Renderer instance.
      • getReportFormat

        public String getReportFormat()
        Get the report format.
        Returns:
        The report format.
      • setReportFormat

        public void setReportFormat​(String reportFormat)
        Set the report format. This should be a name of a Renderer.
        Parameters:
        reportFormat - The report format.
        See Also:
        Renderer
      • getReportFile

        @Deprecated
        public String getReportFile()
        Deprecated.
        Get the file to which the report should render.
        Returns:
        The file to which to render.
      • getReportFilePath

        public Path getReportFilePath()
        Get the file to which the report should render.
        Returns:
        The file to which to render.
      • setReportFile

        @Deprecated
        public void setReportFile​(String reportFile)
        Deprecated.
        Set the file to which the report should render.
        Parameters:
        reportFile - the file to set
      • setReportFile

        public void setReportFile​(Path reportFile)
        Set the file to which the report should render.
        Parameters:
        reportFile - the file to set
      • isShowSuppressedViolations

        public boolean isShowSuppressedViolations()
        Get whether the report should show suppressed violations.
        Returns:
        true if showing suppressed violations, false otherwise.
      • setShowSuppressedViolations

        public void setShowSuppressedViolations​(boolean showSuppressedViolations)
        Set whether the report should show suppressed violations.
        Parameters:
        showSuppressedViolations - true if showing suppressed violations, false otherwise.
      • getReportProperties

        public Properties getReportProperties()
        Get the Report properties. These are used to create the Renderer.
        Returns:
        The report properties.
      • setReportProperties

        public void setReportProperties​(Properties reportProperties)
        Set the Report properties. These are used to create the Renderer.
        Parameters:
        reportProperties - The Report properties to set.
      • isStressTest

        @Deprecated
        public boolean isStressTest()
        Deprecated.
        For removal
        Return the stress test indicator. If this value is true then PMD will randomize the order of file processing to attempt to shake out bugs.
        Returns:
        true if stress test is enbaled, false otherwise.
      • setStressTest

        @Deprecated
        public void setStressTest​(boolean stressTest)
        Deprecated.
        For removal.
        Set the stress test indicator.
        Parameters:
        stressTest - The stree test indicator to set.
        See Also:
        isStressTest()
      • isBenchmark

        @Deprecated
        public boolean isBenchmark()
        Deprecated.
        This behavior is down to CLI, not part of the core analysis.
        Return the benchmark indicator. If this value is true then PMD will log benchmark information.
        Returns:
        true if benchmark logging is enbaled, false otherwise.
      • setBenchmark

        @Deprecated
        public void setBenchmark​(boolean benchmark)
        Deprecated.
        This behavior is down to CLI, not part of the core analysis.
        Set the benchmark indicator.
        Parameters:
        benchmark - The benchmark indicator to set.
        See Also:
        isBenchmark()
      • isFailOnViolation

        public boolean isFailOnViolation()
        Whether PMD should exit with status 4 (the default behavior, true) if violations are found or just with 0 (to not break the build, e.g.).
        Returns:
        failOnViolation
      • setFailOnViolation

        public void setFailOnViolation​(boolean failOnViolation)
        Sets whether PMD should exit with status 4 (the default behavior, true) if violations are found or just with 0 (to not break the build, e.g.).
        Parameters:
        failOnViolation - failOnViolation
      • isRuleSetFactoryCompatibilityEnabled

        public boolean isRuleSetFactoryCompatibilityEnabled()
        Checks if the rule set factory compatibility feature is enabled.
        Returns:
        true, if the rule set factory compatibility feature is enabled
        See Also:
        RuleSetLoader.enableCompatibility(boolean)
      • setRuleSetFactoryCompatibilityEnabled

        public void setRuleSetFactoryCompatibilityEnabled​(boolean ruleSetFactoryCompatibilityEnabled)
        Sets the rule set factory compatibility feature enabled/disabled.
        Parameters:
        ruleSetFactoryCompatibilityEnabled - true if the feature should be enabled
        See Also:
        RuleSetLoader.enableCompatibility(boolean)
      • getAnalysisCache

        public AnalysisCache getAnalysisCache()
        Retrieves the currently used analysis cache. Will never be null.
        Returns:
        The currently used analysis cache. Never null.
      • setAnalysisCache

        public void setAnalysisCache​(AnalysisCache cache)
        Sets the analysis cache to be used. Setting a value of null will cause a Noop AnalysisCache to be used. If incremental analysis was explicitly disabled (isIgnoreIncrementalAnalysis()), then this method is a noop.
        Parameters:
        cache - The analysis cache to be used.
      • setAnalysisCacheLocation

        public void setAnalysisCacheLocation​(String cacheLocation)
        Sets the location of the analysis cache to be used. This will automatically configure and appropriate AnalysisCache implementation.
        Parameters:
        cacheLocation - The location of the analysis cache to be used.
      • setIgnoreIncrementalAnalysis

        public void setIgnoreIncrementalAnalysis​(boolean noCache)
        Sets whether the user has explicitly disabled incremental analysis or not. If so, incremental analysis is not used, and all suggestions to use it are disabled. The analysis cached location is ignored, even if it's specified.
        Parameters:
        noCache - Whether to ignore incremental analysis or not
      • isIgnoreIncrementalAnalysis

        public boolean isIgnoreIncrementalAnalysis()
        Returns whether incremental analysis was explicitly disabled by the user or not.
        Returns:
        true if incremental analysis is explicitly disabled
      • addRelativizeRoot

        public void addRelativizeRoot​(Path path)
        Set the path used to shorten paths output in the report. The path does not need to exist. If it exists, it must point to a directory and not a file. See getRelativizeRoots() for the interpretation.

        If several paths are added, the shortest paths possible are built.

        Parameters:
        path - A path
        Throws:
        IllegalArgumentException - If the path points to a file, and not a directory
        NullPointerException - If the path is null
      • getRelativizeRoots

        public List<Path> getRelativizeRoots()
        Returns the paths used to shorten paths output in the report.
        • If the list is empty, then paths are not touched
        • If the list is non-empty, then source file paths are relativized with all the items in the list. The shortest of these relative paths is taken as the display name of the file.
      • getLanguageProperties

        public @NonNull LanguagePropertyBundle getLanguageProperties​(Language language)
        Returns a mutable bundle of language properties that are associated to the given language (always the same for a given language).
        Parameters:
        language - A language, which must be registered