2020-11-14 09:20:07 +00:00
<!DOCTYPE html>
< html >
< head >
< meta charset = "utf-8" >
< meta http-equiv = "X-UA-Compatible" content = "IE=edge" >
< meta name = "viewport" content = "width=device-width, initial-scale=1" >
< meta name = "description" content = "" >
< meta name = "keywords" content = "userdocstools, " >
< title > PMD Java API | PMD Source Code Analyzer< / title >
< link rel = "stylesheet" href = "css/syntax.css" >
< link rel = "stylesheet" type = "text/css" href = "https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" >
<!-- <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css"> -->
< link rel = "stylesheet" href = "css/modern-business.css" >
< link rel = "stylesheet" href = "css/lavish-bootstrap.css" >
< link rel = "stylesheet" href = "css/customstyles.css" >
< link rel = "stylesheet" href = "css/theme-blue.css" >
< link rel = "stylesheet" href = "css/pmd-customstyles.css" >
< script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js" > < / script >
< script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js" > < / script >
< script src = "js/jquery.navgoco.min.js" > < / script >
< script src = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js" > < / script >
< script src = "https://cdnjs.cloudflare.com/ajax/libs/anchor-js/2.0.0/anchor.min.js" > < / script >
< script src = "js/toc.js" > < / script >
< script src = "js/customscripts.js" > < / script >
< link rel = "shortcut icon" href = "images/favicon.ico" type = "image/x-icon" >
< link rel = "icon" href = "images/favicon.ico" type = "image/x-icon" >
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!-- [if lt IE 9]>
< script src = "https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js" > < / script >
< script src = "https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js" > < / script >
<![endif]-->
< link rel = "alternate" type = "application/rss+xml" title = "" href = "https://pmd.github.io/pmd/feed.xml" >
< script >
$(document).ready(function() {
// Initialize navgoco with default options
$("#mysidebar").navgoco({
caretHtml: '',
accordion: true,
openClass: 'active', // open
save: false, // leave false or nav highlighting doesn't work right
cookie: {
name: 'navgoco',
expires: false,
path: '/'
},
slide: {
duration: 400,
easing: 'swing'
}
});
$("#collapseAll").click(function(e) {
e.preventDefault();
$("#mysidebar").navgoco('toggle', false);
});
$("#expandAll").click(function(e) {
e.preventDefault();
$("#mysidebar").navgoco('toggle', true);
});
});
< / script >
< script >
$(function () {
$('[data-toggle="tooltip"]').tooltip()
})
< / script >
< script >
$(document).ready(function() {
$("#tg-sb-link").click(function() {
$("#tg-sb-sidebar").toggle();
$("#tg-sb-content").toggleClass('col-md-9');
$("#tg-sb-content").toggleClass('col-md-12');
$("#tg-sb-icon").toggleClass('fa-toggle-on');
$("#tg-sb-icon").toggleClass('fa-toggle-off');
});
});
< / script >
< / head >
< body >
<!-- Content is offset by the height of the topnav bar. -->
<!-- There's already a padding - top rule in modern - business.css, but it apparently doesn't work on Firefox 60 and Chrome 67 -->
< div id = "topbar-content-offset" >
<!-- Navigation -->
< nav class = "navbar navbar-inverse navbar-fixed-top" >
< div class = "container topnavlinks" >
< div class = "navbar-header" >
< button type = "button" class = "navbar-toggle" data-toggle = "collapse" data-target = "#bs-example-navbar-collapse-1" >
< span class = "sr-only" > Toggle navigation< / span >
< span class = "icon-bar" > < / span >
< span class = "icon-bar" > < / span >
< span class = "icon-bar" > < / span >
< / button >
< a class = "fa fa-home fa-lg navbar-brand" href = "index.html" > < span class = "projectTitle" > PMD Source Code Analyzer Project< / span > < / a >
< / div >
< div class = "collapse navbar-collapse" id = "bs-example-navbar-collapse-1" >
< ul class = "nav navbar-nav navbar-right" >
<!-- toggle sidebar button -->
< li > < a id = "tg-sb-link" href = "#" > < i id = "tg-sb-icon" class = "fa fa-toggle-on" > < / i > Nav< / a > < / li >
<!-- entries without drop - downs appear here -->
< li > < a href = "https://github.com/pmd/pmd/releases/latest" target = "_blank" > Download< / a > < / li >
< li > < a href = "https://github.com/pmd/pmd" target = "_blank" > Fork us on github< / a > < / li >
<!-- entries with drop - downs appear here -->
<!-- conditional logic to control which topnav appears for the audience defined in the configuration file. -->
<!-- comment out this block if you want to hide search -->
< li >
<!-- start search -->
< div id = "search-demo-container" >
< input type = "text" id = "search-input" placeholder = "search..." >
< ul id = "results-container" > < / ul >
< / div >
< script src = "js/jekyll-search.js" type = "text/javascript" > < / script >
< script type = "text/javascript" >
SimpleJekyllSearch.init({
searchInput: document.getElementById('search-input'),
resultsContainer: document.getElementById('results-container'),
dataSource: 'search.json',
searchResultTemplate: '< li > < a href = "{url}" title = "PMD Java API" > {title}< / a > < / li > ',
noResultsText: 'No results found.',
limit: 10,
fuzzy: true,
})
< / script >
<!-- end search -->
< / li >
< / ul >
< / div >
< / div >
<!-- /.container -->
< / nav >
<!-- Page Content -->
< div class = "container" >
< div class = "col-lg-12" > < / div >
<!-- Content Row -->
< div class = "row" >
<!-- Sidebar Column -->
< div class = "col-md-3" id = "tg-sb-sidebar" >
< ul id = "mysidebar" class = "nav" >
2021-11-27 10:39:06 +00:00
< li class = "sidebarTitle" > PMD 6.41.0< / li >
2020-11-14 09:20:07 +00:00
< li >
< a href = "#" > About< / a >
< ul >
< li > < a href = "index.html" > Home< / a > < / li >
< li > < a href = "pmd_release_notes.html" > Release notes< / a > < / li >
< li > < a href = "pmd_next_major_development.html" > PMD 7.0.0 development< / a > < / li >
< li > < a href = "pmd_about_help.html" > Getting help< / a > < / li >
< / ul >
< / li >
< li >
< a href = "#" > User Documentation< / a >
< ul >
< li > < a href = "pmd_userdocs_installation.html" > Installation and basic CLI usage< / a > < / li >
< li > < a href = "pmd_userdocs_making_rulesets.html" > Making rulesets< / a > < / li >
< li > < a href = "pmd_userdocs_configuring_rules.html" > Configuring rules< / a > < / li >
< li > < a href = "pmd_userdocs_best_practices.html" > Best practices< / a > < / li >
< li > < a href = "pmd_userdocs_suppressing_warnings.html" > Suppressing warnings< / a > < / li >
< li > < a href = "pmd_userdocs_incremental_analysis.html" > Incremental analysis< / a > < / li >
< li > < a href = "pmd_userdocs_cli_reference.html" > PMD CLI reference< / a > < / li >
< li > < a href = "pmd_userdocs_report_formats.html" > PMD Report formats< / a > < / li >
< li class = "subfolders" >
< a href = "#" > CPD reference< / a >
< ul >
< li > < a href = "pmd_userdocs_cpd.html" > Copy-paste detection< / a > < / li >
< li > < a href = "pmd_userdocs_cpd_report_formats.html" > CPD Report formats< / a > < / li >
< / ul >
< / li >
< li class = "subfolders" >
< a href = "#" > Extending PMD< / a >
< ul >
< li > < a href = "pmd_userdocs_extending_writing_rules_intro.html" > Introduction to writing rules< / a > < / li >
< li > < a href = "pmd_userdocs_extending_your_first_rule.html" > Your first rule< / a > < / li >
< li > < a href = "pmd_userdocs_extending_writing_xpath_rules.html" > XPath rules< / a > < / li >
< li > < a href = "pmd_userdocs_extending_writing_java_rules.html" > Java rules< / a > < / li >
< li > < a href = "pmd_userdocs_extending_designer_reference.html" > Rule designer reference< / a > < / li >
< li > < a href = "pmd_userdocs_extending_defining_properties.html" > Defining rule properties< / a > < / li >
< li > < a href = "pmd_userdocs_extending_metrics_howto.html" > Using and defining code metrics< / a > < / li >
< li > < a href = "pmd_userdocs_extending_rule_guidelines.html" > Rule guidelines< / a > < / li >
< li > < a href = "pmd_userdocs_extending_testing.html" > Testing your rules< / a > < / li >
< / ul >
< / li >
< li class = "subfolders" >
< a href = "#" > Tools / Integrations< / a >
< ul >
< li > < a href = "pmd_userdocs_tools_maven.html" > Maven PMD Plugin< / a > < / li >
< li > < a href = "pmd_userdocs_tools_gradle.html" > Gradle< / a > < / li >
< li > < a href = "pmd_userdocs_tools_ant.html" > Ant< / a > < / li >
< li class = "active" > < a href = "pmd_userdocs_tools_java_api.html" > PMD Java API< / a > < / li >
< li > < a href = "pmd_userdocs_tools_ci.html" > CI integrations< / a > < / li >
< li > < a href = "pmd_userdocs_tools.html" > Other Tools / Integrations< / a > < / li >
< / ul >
< / li >
< / ul >
< / li >
< li >
< a href = "#" > Rule Reference< / a >
< ul >
< li class = "subfolders" >
< a href = "#" > Apex Rules< / a >
< ul >
< li > < a href = "pmd_rules_apex.html" > Index< / a > < / li >
< li > < a href = "pmd_rules_apex_bestpractices.html" > Best Practices< / a > < / li >
< li > < a href = "pmd_rules_apex_codestyle.html" > Code Style< / a > < / li >
< li > < a href = "pmd_rules_apex_design.html" > Design< / a > < / li >
< li > < a href = "pmd_rules_apex_documentation.html" > Documentation< / a > < / li >
< li > < a href = "pmd_rules_apex_errorprone.html" > Error Prone< / a > < / li >
< li > < a href = "pmd_rules_apex_performance.html" > Performance< / a > < / li >
< li > < a href = "pmd_rules_apex_security.html" > Security< / a > < / li >
< / ul >
< / li >
< li class = "subfolders" >
< a href = "#" > Ecmascript Rules< / a >
< ul >
< li > < a href = "pmd_rules_ecmascript.html" > Index< / a > < / li >
< li > < a href = "pmd_rules_ecmascript_bestpractices.html" > Best Practices< / a > < / li >
< li > < a href = "pmd_rules_ecmascript_codestyle.html" > Code Style< / a > < / li >
< li > < a href = "pmd_rules_ecmascript_errorprone.html" > Error Prone< / a > < / li >
< / ul >
< / li >
< li class = "subfolders" >
< a href = "#" > Java Rules< / a >
< ul >
< li > < a href = "pmd_rules_java.html" > Index< / a > < / li >
< li > < a href = "pmd_rules_java_bestpractices.html" > Best Practices< / a > < / li >
< li > < a href = "pmd_rules_java_codestyle.html" > Code Style< / a > < / li >
< li > < a href = "pmd_rules_java_design.html" > Design< / a > < / li >
< li > < a href = "pmd_rules_java_documentation.html" > Documentation< / a > < / li >
< li > < a href = "pmd_rules_java_errorprone.html" > Error Prone< / a > < / li >
< li > < a href = "pmd_rules_java_multithreading.html" > Multithreading< / a > < / li >
< li > < a href = "pmd_rules_java_performance.html" > Performance< / a > < / li >
< li > < a href = "pmd_rules_java_security.html" > Security< / a > < / li >
< / ul >
< / li >
< li class = "subfolders" >
< a href = "#" > Java Server Pages Rules< / a >
< ul >
< li > < a href = "pmd_rules_jsp.html" > Index< / a > < / li >
< li > < a href = "pmd_rules_jsp_bestpractices.html" > Best Practices< / a > < / li >
< li > < a href = "pmd_rules_jsp_codestyle.html" > Code Style< / a > < / li >
< li > < a href = "pmd_rules_jsp_design.html" > Design< / a > < / li >
< li > < a href = "pmd_rules_jsp_errorprone.html" > Error Prone< / a > < / li >
< li > < a href = "pmd_rules_jsp_security.html" > Security< / a > < / li >
< / ul >
< / li >
< li class = "subfolders" >
< a href = "#" > Maven POM Rules< / a >
< ul >
< li > < a href = "pmd_rules_pom.html" > Index< / a > < / li >
< li > < a href = "pmd_rules_pom_errorprone.html" > Error Prone< / a > < / li >
< / ul >
< / li >
< li class = "subfolders" >
< a href = "#" > Modelica Rules< / a >
< ul >
< li > < a href = "pmd_rules_modelica.html" > Index< / a > < / li >
< li > < a href = "pmd_rules_modelica_bestpractices.html" > Best Practices< / a > < / li >
< / ul >
< / li >
< li class = "subfolders" >
< a href = "#" > PLSQL Rules< / a >
< ul >
< li > < a href = "pmd_rules_plsql.html" > Index< / a > < / li >
< li > < a href = "pmd_rules_plsql_bestpractices.html" > Best Practices< / a > < / li >
< li > < a href = "pmd_rules_plsql_codestyle.html" > Code Style< / a > < / li >
< li > < a href = "pmd_rules_plsql_design.html" > Design< / a > < / li >
< li > < a href = "pmd_rules_plsql_errorprone.html" > Error Prone< / a > < / li >
< / ul >
< / li >
< li class = "subfolders" >
< a href = "#" > Salesforce VisualForce Rules< / a >
< ul >
< li > < a href = "pmd_rules_vf.html" > Index< / a > < / li >
< li > < a href = "pmd_rules_vf_security.html" > Security< / a > < / li >
< / ul >
< / li >
< li class = "subfolders" >
< a href = "#" > VM Rules< / a >
< ul >
< li > < a href = "pmd_rules_vm.html" > Index< / a > < / li >
< li > < a href = "pmd_rules_vm_bestpractices.html" > Best Practices< / a > < / li >
< li > < a href = "pmd_rules_vm_design.html" > Design< / a > < / li >
< li > < a href = "pmd_rules_vm_errorprone.html" > Error Prone< / a > < / li >
< / ul >
< / li >
< li class = "subfolders" >
< a href = "#" > XML Rules< / a >
< ul >
< li > < a href = "pmd_rules_xml.html" > Index< / a > < / li >
< li > < a href = "pmd_rules_xml_errorprone.html" > Error Prone< / a > < / li >
< / ul >
< / li >
< li class = "subfolders" >
< a href = "#" > XSL Rules< / a >
< ul >
< li > < a href = "pmd_rules_xsl.html" > Index< / a > < / li >
< li > < a href = "pmd_rules_xsl_codestyle.html" > Code Style< / a > < / li >
< li > < a href = "pmd_rules_xsl_performance.html" > Performance< / a > < / li >
< / ul >
< / li >
< / ul >
< / li >
< li >
< a href = "#" > Language Specific Documentation< / a >
< ul >
< li > < a href = "pmd_languages_jsp.html" > JSP Support< / a > < / li >
< li > < a href = "pmd_java_metrics_index.html" > Java code metrics< / a > < / li >
< li > < a href = "pmd_apex_metrics_index.html" > Apex code metrics< / a > < / li >
2021-03-26 08:22:23 +00:00
< li > < a href = "pmd_languages_plsql.html" > PLSQL< / a > < / li >
2021-10-29 17:50:40 +00:00
< li > < a href = "pmd_languages_visualforce.html" > Visualforce< / a > < / li >
2020-11-14 09:20:07 +00:00
< / ul >
< / li >
< li >
< a href = "#" > Developer Documentation< / a >
< ul >
< li > < a href = "pmd_devdocs_development.html" > Developer resources< / a > < / li >
< li > < a href = "pmd_devdocs_building.html" > Building PMD from source< / a > < / li >
< li > < a href = "https://github.com/pmd/pmd/blob/master/CONTRIBUTING.md" target = "_blank" > Contributing< / a > < / li >
< li > < a href = "pmd_devdocs_writing_documentation.html" > Writing documentation< / a > < / li >
< li > < a href = "pmd_devdocs_roadmap.html" > Roadmap< / a > < / li >
< li > < a href = "pmd_devdocs_how_pmd_works.html" > How PMD works< / a > < / li >
< li > < a href = "pmd_devdocs_pmdtester.html" > Pmdtester< / a > < / li >
< li > < a href = "pmd_devdocs_rule_deprecation_policy.html" > Rule Deprecation Policy< / a > < / li >
< li class = "subfolders" >
< a href = "#" > Major contributions< / a >
< ul >
2021-08-27 14:58:36 +00:00
< li > < a href = "pmd_devdocs_major_rule_guidelines.html" > Rule Guidelines< / a > < / li >
2020-11-14 09:20:07 +00:00
< li > < a href = "pmd_devdocs_major_adding_new_language.html" > Adding a new language< / a > < / li >
< li > < a href = "pmd_devdocs_major_adding_new_cpd_language.html" > Adding a new CPD language< / a > < / li >
< li > < a href = "pmd_devdocs_major_adding_new_metrics_framework.html" > Adding metrics support to a language< / a > < / li >
< / ul >
< / li >
< li class = "subfolders" >
< a href = "#" > Experimental features< / a >
< ul >
< li > < a href = "pmd_devdocs_experimental_ast_dump.html" > Creating (XML) dump of the AST< / a > < / li >
< / ul >
< / li >
< / ul >
< / li >
< li >
< a href = "#" > Project documentation< / a >
< ul >
< li class = "subfolders" >
< a href = "#" > Trivia about PMD< / a >
< ul >
< li > < a href = "pmd_projectdocs_trivia_news.html" > PMD in the press< / a > < / li >
< li > < a href = "pmd_projectdocs_trivia_products.html" > Products & books related to PMD< / a > < / li >
< li > < a href = "pmd_projectdocs_trivia_similarprojects.html" > Similar projects< / a > < / li >
< li > < a href = "pmd_projectdocs_trivia_meaning.html" > What does 'PMD' mean?< / a > < / li >
< / ul >
< / li >
< li > < a href = "pmd_projectdocs_faq.html" > FAQ< / a > < / li >
< li > < a href = "license.html" > License< / a > < / li >
< li > < a href = "pmd_projectdocs_credits.html" > Credits< / a > < / li >
< li > < a href = "pmd_release_notes_old.html" > Old release notes< / a > < / li >
< li class = "subfolders" >
< a href = "#" > Project management< / a >
< ul >
2021-04-23 20:35:51 +00:00
< li > < a href = "pmd_projectdocs_committers_infrastructure.html" > Infrastructure< / a > < / li >
2020-11-14 09:20:07 +00:00
< li > < a href = "pmd_projectdocs_committers_releasing.html" > Release process< / a > < / li >
< li > < a href = "pmd_projectdocs_committers_merging_pull_requests.html" > Merging pull requests< / a > < / li >
< li > < a href = "pmd_projectdocs_committers_main_landing_page.html" > Main Landing page< / a > < / li >
< / ul >
< / li >
< / ul >
< / li >
<!-- if you aren't using the accordion, uncomment this block:
< p class = "external" >
< a href = "#" id = "collapseAll" > Collapse All< / a > | < a href = "#" id = "expandAll" > Expand All< / a >
< / p >
-->
< / ul >
<!-- this highlights the active parent class in the navgoco sidebar. this is critical so that the parent expands when you're viewing a page. This must appear below the sidebar code above. Otherwise, if placed inside customscripts.js, the script runs before the sidebar code runs and the class never gets inserted. -->
< script > $ ( "li.active" ) . parents ( 'li' ) . toggleClass ( "active" ) ; < / script >
< / div >
<!-- Content Column -->
< div class = "col-md-9" id = "tg-sb-content" >
< div class = "post-header" >
< h1 class = "post-title-main" > PMD Java API< / h1 >
< / div >
< div class = "post-content" >
<!-- this handles the automatic toc. use ## for subheads to auto - generate the on - page minitoc. if you use html tags, you must supply an ID for the heading element in order for it to appear in the minitoc. -->
< script >
$( document ).ready(function() {
// Handler for .ready() called.
$('#toc').toc({ minimumHeaders: 0, listType: 'ul', showSpeed: 0, headers: 'h2,h3,h4' });
});
< / script >
< div id = "toc" > < / div >
2021-04-30 09:54:50 +00:00
< a target = "_blank" href = "https://github.com/pmd/pmd/blob/master/docs/pages/pmd/userdocs/tools/java-api.md" class = "btn btn-default githubEditButton" role = "button" > < i class = "fa fa-github fa-lg" > < / i > Edit me< / a >
2020-11-14 09:20:07 +00:00
< p > The easiest way to run PMD is to just use a build plugin in your favorite build tool
like < a href = "pmd_userdocs_tools_ant.html" > Apache Ant< / a > , < a href = "pmd_userdocs_tools_maven.html" > Apache Maven< / a > or
< a href = "pmd_userdocs_tools_gradle.html" > Gradle< / a > .< / p >
< p > There are also many integrations for IDEs available, see < a href = "pmd_userdocs_tools.html" > Tools< / a > .< / p >
< p > If you have your own build tool or want to integrate PMD in a different way, you can call PMD programmatically,
as described here.< / p >
< h2 id = "dependencies" > Dependencies< / h2 >
< p > You’ ll need to add the dependency to the language, you want to analyze. For Java, it will be
< code class = "language-plaintext highlighter-rouge" > net.sourceforge.pmd:pmd-java< / code > . If you use Maven, you can add a new (compile time) dependency like this:< / p >
< div class = "language-xml highlighter-rouge" > < div class = "highlight" > < pre class = "highlight" > < code > < span class = "nt" > < dependency> < / span >
< span class = "nt" > < groupId> < / span > net.sourceforge.pmd< span class = "nt" > < /groupId> < / span >
< span class = "nt" > < artifactId> < / span > pmd-java< span class = "nt" > < /artifactId> < / span >
< span class = "nt" > < version> < / span > ${pmdVersion}< span class = "nt" > < /version> < / span >
< span class = "nt" > < /dependency> < / span >
< / code > < / pre > < / div > < / div >
< p > Note: You’ ll need to select a specific version. This is done in the example via the property < code class = "language-plaintext highlighter-rouge" > pmdVersion< / code > .< / p >
< p > This will transitively pull in the artifact < code class = "language-plaintext highlighter-rouge" > pmd-core< / code > which contains the API.< / p >
< h2 id = "command-line-interface" > Command line interface< / h2 >
< p > The easiest way is to call PMD with the same interface as from command line. The main class is
< code class = "language-plaintext highlighter-rouge" > net.sourceforge.pmd.PMD< / code > :< / p >
< div class = "language-java highlighter-rouge" > < div class = "highlight" > < pre class = "highlight" > < code > < span class = "kn" > import< / span > < span class = "nn" > net.sourceforge.pmd.PMD< / span > < span class = "o" > ;< / span >
< span class = "kd" > public< / span > < span class = "kd" > class< / span > < span class = "nc" > Example< / span > < span class = "o" > {< / span >
< span class = "kd" > public< / span > < span class = "kd" > static< / span > < span class = "kt" > void< / span > < span class = "nf" > main< / span > < span class = "o" > (< / span > < span class = "nc" > String< / span > < span class = "o" > []< / span > < span class = "n" > args< / span > < span class = "o" > )< / span > < span class = "o" > {< / span >
< span class = "nc" > String< / span > < span class = "o" > []< / span > < span class = "n" > pmdArgs< / span > < span class = "o" > =< / span > < span class = "o" > {< / span >
< span class = "s" > "-d"< / span > < span class = "o" > ,< / span > < span class = "s" > "/home/workspace/src/main/java/code"< / span > < span class = "o" > ,< / span >
< span class = "s" > "-R"< / span > < span class = "o" > ,< / span > < span class = "s" > "rulesets/java/quickstart.xml"< / span > < span class = "o" > ,< / span >
< span class = "s" > "-f"< / span > < span class = "o" > ,< / span > < span class = "s" > "xml"< / span > < span class = "o" > ,< / span >
< span class = "s" > "-r"< / span > < span class = "o" > ,< / span > < span class = "s" > "/home/workspace/pmd-report.xml"< / span >
< span class = "o" > };< / span >
< span class = "no" > PMD< / span > < span class = "o" > .< / span > < span class = "na" > main< / span > < span class = "o" > (< / span > < span class = "n" > pmdArgs< / span > < span class = "o" > );< / span >
< span class = "o" > }< / span >
< span class = "o" > }< / span >
< / code > < / pre > < / div > < / div >
< p > It uses the same options as described in < a href = "pmd_userdocs_cli_reference.html" > PMD CLI reference< / a > .< / p >
< h2 id = "programmatically-variant-1" > Programmatically, variant 1< / h2 >
< p > This is very similar:< / p >
< div class = "language-java highlighter-rouge" > < div class = "highlight" > < pre class = "highlight" > < code > < span class = "kn" > import< / span > < span class = "nn" > net.sourceforge.pmd.PMD< / span > < span class = "o" > ;< / span >
< span class = "kn" > import< / span > < span class = "nn" > net.sourceforge.pmd.PMDConfiguration< / span > < span class = "o" > ;< / span >
< span class = "kd" > public< / span > < span class = "kd" > class< / span > < span class = "nc" > PmdExample< / span > < span class = "o" > {< / span >
< span class = "kd" > public< / span > < span class = "kd" > static< / span > < span class = "kt" > void< / span > < span class = "nf" > main< / span > < span class = "o" > (< / span > < span class = "nc" > String< / span > < span class = "o" > []< / span > < span class = "n" > args< / span > < span class = "o" > )< / span > < span class = "o" > {< / span >
< span class = "nc" > PMDConfiguration< / span > < span class = "n" > configuration< / span > < span class = "o" > =< / span > < span class = "k" > new< / span > < span class = "nc" > PMDConfiguration< / span > < span class = "o" > ();< / span >
< span class = "n" > configuration< / span > < span class = "o" > .< / span > < span class = "na" > setInputPaths< / span > < span class = "o" > (< / span > < span class = "s" > "/home/workspace/src/main/java/code"< / span > < span class = "o" > );< / span >
< span class = "n" > configuration< / span > < span class = "o" > .< / span > < span class = "na" > setRuleSets< / span > < span class = "o" > (< / span > < span class = "s" > "rulesets/java/quickstart.xml"< / span > < span class = "o" > );< / span >
< span class = "n" > configuration< / span > < span class = "o" > .< / span > < span class = "na" > setReportFormat< / span > < span class = "o" > (< / span > < span class = "s" > "xml"< / span > < span class = "o" > );< / span >
< span class = "n" > configuration< / span > < span class = "o" > .< / span > < span class = "na" > setReportFile< / span > < span class = "o" > (< / span > < span class = "s" > "/home/workspace/pmd-report.xml"< / span > < span class = "o" > );< / span >
2021-05-27 09:02:51 +00:00
< span class = "no" > PMD< / span > < span class = "o" > .< / span > < span class = "na" > runPMD< / span > < span class = "o" > (< / span > < span class = "n" > configuration< / span > < span class = "o" > );< / span >
2020-11-14 09:20:07 +00:00
< span class = "o" > }< / span >
< span class = "o" > }< / span >
< / code > < / pre > < / div > < / div >
< h2 id = "programmatically-variant-2" > Programmatically, variant 2< / h2 >
< p > This gives you more control over which files are processed, but is also more complicated.
2021-05-27 09:02:51 +00:00
You can also provide your own custom renderers.< / p >
2020-11-14 09:20:07 +00:00
< ol >
< li >
< p > First we create a < code class = "language-plaintext highlighter-rouge" > PMDConfiguration< / code > . This is currently the only way to specify a ruleset:< / p >
< div class = "language-java highlighter-rouge" > < div class = "highlight" > < pre class = "highlight" > < code > < span class = "nc" > PMDConfiguration< / span > < span class = "n" > configuration< / span > < span class = "o" > =< / span > < span class = "k" > new< / span > < span class = "nc" > PMDConfiguration< / span > < span class = "o" > ();< / span >
< span class = "n" > configuration< / span > < span class = "o" > .< / span > < span class = "na" > setMinimumPriority< / span > < span class = "o" > (< / span > < span class = "nc" > RulePriority< / span > < span class = "o" > .< / span > < span class = "na" > MEDIUM< / span > < span class = "o" > );< / span >
< span class = "n" > configuration< / span > < span class = "o" > .< / span > < span class = "na" > setRuleSets< / span > < span class = "o" > (< / span > < span class = "s" > "rulesets/java/quickstart.xml"< / span > < span class = "o" > );< / span >
< / code > < / pre > < / div > < / div >
< / li >
< li >
< p > In order to support type resolution, PMD needs to have access to the compiled classes and dependencies
as well. This is called “auxclasspath” and is also configured here.
Note: you can specify multiple class paths separated by < code class = "language-plaintext highlighter-rouge" > :< / code > on Unix-systems or < code class = "language-plaintext highlighter-rouge" > ;< / code > under Windows.< / p >
< div class = "language-java highlighter-rouge" > < div class = "highlight" > < pre class = "highlight" > < code > < span class = "n" > configuration< / span > < span class = "o" > .< / span > < span class = "na" > prependClasspath< / span > < span class = "o" > (< / span > < span class = "s" > "/home/workspace/target/classes:/home/.m2/repository/my/dependency.jar"< / span > < span class = "o" > );< / span >
< / code > < / pre > < / div > < / div >
< / li >
< li >
2021-05-27 09:02:51 +00:00
< p > Then we need to load the rulesets. This is done by using the configuration, taking the minimum priority into
2020-11-14 09:20:07 +00:00
account:< / p >
2021-05-27 09:02:51 +00:00
< div class = "language-java highlighter-rouge" > < div class = "highlight" > < pre class = "highlight" > < code > < span class = "nc" > RuleSetLoader< / span > < span class = "n" > ruleSetLoader< / span > < span class = "o" > =< / span > < span class = "nc" > RuleSetLoader< / span > < span class = "o" > .< / span > < span class = "na" > fromPmdConfig< / span > < span class = "o" > (< / span > < span class = "n" > configuration< / span > < span class = "o" > );< / span >
< span class = "nc" > List< / span > < span class = "o" > < < / span > < span class = "nc" > RuleSet< / span > < span class = "o" > > < / span > < span class = "n" > ruleSets< / span > < span class = "o" > =< / span > < span class = "n" > ruleSetLoader< / span > < span class = "o" > .< / span > < span class = "na" > loadFromResources< / span > < span class = "o" > (< / span > < span class = "nc" > Arrays< / span > < span class = "o" > .< / span > < span class = "na" > asList< / span > < span class = "o" > (< / span > < span class = "n" > configuration< / span > < span class = "o" > .< / span > < span class = "na" > getRuleSets< / span > < span class = "o" > ().< / span > < span class = "na" > split< / span > < span class = "o" > (< / span > < span class = "s" > ","< / span > < span class = "o" > )));< / span >
2020-11-14 09:20:07 +00:00
< / code > < / pre > < / div > < / div >
< / li >
< li >
< p > PMD operates on a list of < code class = "language-plaintext highlighter-rouge" > DataSource< / code > . You can assemble a own list of < code class = "language-plaintext highlighter-rouge" > FileDataSource< / code > , e.g.< / p >
< div class = "language-java highlighter-rouge" > < div class = "highlight" > < pre class = "highlight" > < code > < span class = "nc" > List< / span > < span class = "o" > < < / span > < span class = "nc" > DataSource< / span > < span class = "o" > > < / span > < span class = "n" > files< / span > < span class = "o" > =< / span > < span class = "nc" > Arrays< / span > < span class = "o" > .< / span > < span class = "na" > asList< / span > < span class = "o" > (< / span > < span class = "k" > new< / span > < span class = "nc" > FileDataSource< / span > < span class = "o" > (< / span > < span class = "k" > new< / span > < span class = "nc" > File< / span > < span class = "o" > (< / span > < span class = "s" > "/path/to/src/MyClass.java"< / span > < span class = "o" > )));< / span >
< / code > < / pre > < / div > < / div >
< / li >
< li >
2021-05-27 09:02:51 +00:00
< p > For reporting, you can use a built-in renderer, e.g. < code class = "language-plaintext highlighter-rouge" > XMLRenderer< / code > or a custom renderer implementing
< code class = "language-plaintext highlighter-rouge" > Renderer< / code > . Note, that you must manually initialize
2020-11-14 09:20:07 +00:00
the renderer by setting a suitable < code class = "language-plaintext highlighter-rouge" > Writer< / code > and calling < code class = "language-plaintext highlighter-rouge" > start()< / code > . After the PMD run, you need to call
< code class = "language-plaintext highlighter-rouge" > end()< / code > and < code class = "language-plaintext highlighter-rouge" > flush()< / code > . Then your writer should have received all output.< / p >
< div class = "language-java highlighter-rouge" > < div class = "highlight" > < pre class = "highlight" > < code > < span class = "nc" > StringWriter< / span > < span class = "n" > rendererOutput< / span > < span class = "o" > =< / span > < span class = "k" > new< / span > < span class = "nc" > StringWriter< / span > < span class = "o" > ();< / span >
< span class = "nc" > Renderer< / span > < span class = "n" > xmlRenderer< / span > < span class = "o" > =< / span > < span class = "k" > new< / span > < span class = "nc" > XMLRenderer< / span > < span class = "o" > (< / span > < span class = "s" > "UTF-8"< / span > < span class = "o" > );< / span >
< span class = "n" > xmlRenderer< / span > < span class = "o" > .< / span > < span class = "na" > setWriter< / span > < span class = "o" > (< / span > < span class = "n" > rendererOutput< / span > < span class = "o" > );< / span >
< span class = "n" > xmlRenderer< / span > < span class = "o" > .< / span > < span class = "na" > start< / span > < span class = "o" > ();< / span >
< / code > < / pre > < / div > < / div >
< / li >
< li >
< p > Now, all the preparations are done, and PMD can be executed. This is done by calling
2021-05-27 09:02:51 +00:00
< code class = "language-plaintext highlighter-rouge" > PMD.processFiles(...)< / code > . This method call takes the configuration, the rulesets, the files
to process, and the list of renderers. Provide an empty list, if you don’ t want to use
2020-11-14 09:20:07 +00:00
any renderer. Note: The auxclasspath needs to be closed explicitly. Otherwise the class or jar files may
remain open and file resources are leaked.< / p >
< div class = "language-java highlighter-rouge" > < div class = "highlight" > < pre class = "highlight" > < code > < span class = "k" > try< / span > < span class = "o" > {< / span >
2021-05-27 09:02:51 +00:00
< span class = "no" > PMD< / span > < span class = "o" > .< / span > < span class = "na" > processFiles< / span > < span class = "o" > (< / span > < span class = "n" > configuration< / span > < span class = "o" > ,< / span > < span class = "n" > ruleSets< / span > < span class = "o" > ,< / span > < span class = "n" > files< / span > < span class = "o" > ,< / span > < span class = "nc" > Collections< / span > < span class = "o" > .< / span > < span class = "na" > singletonList< / span > < span class = "o" > (< / span > < span class = "n" > renderer< / span > < span class = "o" > ));< / span >
2020-11-14 09:20:07 +00:00
< span class = "o" > }< / span > < span class = "k" > finally< / span > < span class = "o" > {< / span >
< span class = "nc" > ClassLoader< / span > < span class = "n" > auxiliaryClassLoader< / span > < span class = "o" > =< / span > < span class = "n" > configuration< / span > < span class = "o" > .< / span > < span class = "na" > getClassLoader< / span > < span class = "o" > ();< / span >
< span class = "k" > if< / span > < span class = "o" > (< / span > < span class = "n" > auxiliaryClassLoader< / span > < span class = "k" > instanceof< / span > < span class = "nc" > ClasspathClassLoader< / span > < span class = "o" > )< / span > < span class = "o" > {< / span >
< span class = "o" > ((< / span > < span class = "nc" > ClasspathClassLoader< / span > < span class = "o" > )< / span > < span class = "n" > auxiliaryClassLoader< / span > < span class = "o" > ).< / span > < span class = "na" > close< / span > < span class = "o" > ();< / span >
< span class = "o" > }< / span >
< span class = "o" > }< / span >
< / code > < / pre > < / div > < / div >
< / li >
< li >
< p > After the call, you need to finish the renderer via < code class = "language-plaintext highlighter-rouge" > end()< / code > and < code class = "language-plaintext highlighter-rouge" > flush()< / code > .
Then you can check the rendered output.< / p >
< div class = "language-java highlighter-rouge" > < div class = "highlight" > < pre class = "highlight" > < code > < span class = "n" > renderer< / span > < span class = "o" > .< / span > < span class = "na" > end< / span > < span class = "o" > ();< / span >
< span class = "n" > renderer< / span > < span class = "o" > .< / span > < span class = "na" > flush< / span > < span class = "o" > ();< / span >
< span class = "nc" > System< / span > < span class = "o" > .< / span > < span class = "na" > out< / span > < span class = "o" > .< / span > < span class = "na" > println< / span > < span class = "o" > (< / span > < span class = "s" > "Rendered Report:"< / span > < span class = "o" > );< / span >
< span class = "nc" > System< / span > < span class = "o" > .< / span > < span class = "na" > out< / span > < span class = "o" > .< / span > < span class = "na" > println< / span > < span class = "o" > (< / span > < span class = "n" > rendererOutput< / span > < span class = "o" > .< / span > < span class = "na" > toString< / span > < span class = "o" > ());< / span >
< / code > < / pre > < / div > < / div >
< / li >
< / ol >
< p > Here is a complete example:< / p >
< div class = "language-java highlighter-rouge" > < div class = "highlight" > < pre class = "highlight" > < code > < span class = "kn" > import< / span > < span class = "nn" > java.io.IOException< / span > < span class = "o" > ;< / span >
< span class = "kn" > import< / span > < span class = "nn" > java.io.StringWriter< / span > < span class = "o" > ;< / span >
< span class = "kn" > import< / span > < span class = "nn" > java.io.Writer< / span > < span class = "o" > ;< / span >
< span class = "kn" > import< / span > < span class = "nn" > java.nio.file.FileSystems< / span > < span class = "o" > ;< / span >
< span class = "kn" > import< / span > < span class = "nn" > java.nio.file.FileVisitResult< / span > < span class = "o" > ;< / span >
< span class = "kn" > import< / span > < span class = "nn" > java.nio.file.Files< / span > < span class = "o" > ;< / span >
< span class = "kn" > import< / span > < span class = "nn" > java.nio.file.Path< / span > < span class = "o" > ;< / span >
< span class = "kn" > import< / span > < span class = "nn" > java.nio.file.PathMatcher< / span > < span class = "o" > ;< / span >
< span class = "kn" > import< / span > < span class = "nn" > java.nio.file.SimpleFileVisitor< / span > < span class = "o" > ;< / span >
< span class = "kn" > import< / span > < span class = "nn" > java.nio.file.attribute.BasicFileAttributes< / span > < span class = "o" > ;< / span >
< span class = "kn" > import< / span > < span class = "nn" > java.util.ArrayList< / span > < span class = "o" > ;< / span >
2021-05-27 09:02:51 +00:00
< span class = "kn" > import< / span > < span class = "nn" > java.util.Arrays< / span > < span class = "o" > ;< / span >
2020-11-14 09:20:07 +00:00
< span class = "kn" > import< / span > < span class = "nn" > java.util.Collections< / span > < span class = "o" > ;< / span >
< span class = "kn" > import< / span > < span class = "nn" > java.util.List< / span > < span class = "o" > ;< / span >
< span class = "kn" > import< / span > < span class = "nn" > net.sourceforge.pmd.PMD< / span > < span class = "o" > ;< / span >
< span class = "kn" > import< / span > < span class = "nn" > net.sourceforge.pmd.PMDConfiguration< / span > < span class = "o" > ;< / span >
< span class = "kn" > import< / span > < span class = "nn" > net.sourceforge.pmd.RulePriority< / span > < span class = "o" > ;< / span >
2021-05-27 09:02:51 +00:00
< span class = "kn" > import< / span > < span class = "nn" > net.sourceforge.pmd.RuleSet< / span > < span class = "o" > ;< / span >
< span class = "kn" > import< / span > < span class = "nn" > net.sourceforge.pmd.RuleSetLoader< / span > < span class = "o" > ;< / span >
2020-11-14 09:20:07 +00:00
< span class = "kn" > import< / span > < span class = "nn" > net.sourceforge.pmd.renderers.Renderer< / span > < span class = "o" > ;< / span >
< span class = "kn" > import< / span > < span class = "nn" > net.sourceforge.pmd.renderers.XMLRenderer< / span > < span class = "o" > ;< / span >
< span class = "kn" > import< / span > < span class = "nn" > net.sourceforge.pmd.util.ClasspathClassLoader< / span > < span class = "o" > ;< / span >
< span class = "kn" > import< / span > < span class = "nn" > net.sourceforge.pmd.util.datasource.DataSource< / span > < span class = "o" > ;< / span >
< span class = "kn" > import< / span > < span class = "nn" > net.sourceforge.pmd.util.datasource.FileDataSource< / span > < span class = "o" > ;< / span >
< span class = "kd" > public< / span > < span class = "kd" > class< / span > < span class = "nc" > PmdExample2< / span > < span class = "o" > {< / span >
< span class = "kd" > public< / span > < span class = "kd" > static< / span > < span class = "kt" > void< / span > < span class = "nf" > main< / span > < span class = "o" > (< / span > < span class = "nc" > String< / span > < span class = "o" > []< / span > < span class = "n" > args< / span > < span class = "o" > )< / span > < span class = "kd" > throws< / span > < span class = "nc" > IOException< / span > < span class = "o" > {< / span >
< span class = "nc" > PMDConfiguration< / span > < span class = "n" > configuration< / span > < span class = "o" > =< / span > < span class = "k" > new< / span > < span class = "nc" > PMDConfiguration< / span > < span class = "o" > ();< / span >
< span class = "n" > configuration< / span > < span class = "o" > .< / span > < span class = "na" > setMinimumPriority< / span > < span class = "o" > (< / span > < span class = "nc" > RulePriority< / span > < span class = "o" > .< / span > < span class = "na" > MEDIUM< / span > < span class = "o" > );< / span >
< span class = "n" > configuration< / span > < span class = "o" > .< / span > < span class = "na" > setRuleSets< / span > < span class = "o" > (< / span > < span class = "s" > "rulesets/java/quickstart.xml"< / span > < span class = "o" > );< / span >
< span class = "n" > configuration< / span > < span class = "o" > .< / span > < span class = "na" > prependClasspath< / span > < span class = "o" > (< / span > < span class = "s" > "/home/workspace/target/classes"< / span > < span class = "o" > );< / span >
2021-05-27 09:02:51 +00:00
< span class = "nc" > RuleSetLoader< / span > < span class = "n" > ruleSetLoader< / span > < span class = "o" > =< / span > < span class = "nc" > RuleSetLoader< / span > < span class = "o" > .< / span > < span class = "na" > fromPmdConfig< / span > < span class = "o" > (< / span > < span class = "n" > configuration< / span > < span class = "o" > );< / span >
< span class = "nc" > List< / span > < span class = "o" > < < / span > < span class = "nc" > RuleSet< / span > < span class = "o" > > < / span > < span class = "n" > ruleSets< / span > < span class = "o" > =< / span > < span class = "n" > ruleSetLoader< / span > < span class = "o" > .< / span > < span class = "na" > loadFromResources< / span > < span class = "o" > (< / span > < span class = "nc" > Arrays< / span > < span class = "o" > .< / span > < span class = "na" > asList< / span > < span class = "o" > (< / span > < span class = "n" > configuration< / span > < span class = "o" > .< / span > < span class = "na" > getRuleSets< / span > < span class = "o" > ().< / span > < span class = "na" > split< / span > < span class = "o" > (< / span > < span class = "s" > ","< / span > < span class = "o" > )));< / span >
2020-11-14 09:20:07 +00:00
< span class = "nc" > List< / span > < span class = "o" > < < / span > < span class = "nc" > DataSource< / span > < span class = "o" > > < / span > < span class = "n" > files< / span > < span class = "o" > =< / span > < span class = "n" > determineFiles< / span > < span class = "o" > (< / span > < span class = "s" > "/home/workspace/src/main/java/code"< / span > < span class = "o" > );< / span >
< span class = "nc" > Writer< / span > < span class = "n" > rendererOutput< / span > < span class = "o" > =< / span > < span class = "k" > new< / span > < span class = "nc" > StringWriter< / span > < span class = "o" > ();< / span >
< span class = "nc" > Renderer< / span > < span class = "n" > renderer< / span > < span class = "o" > =< / span > < span class = "n" > createRenderer< / span > < span class = "o" > (< / span > < span class = "n" > rendererOutput< / span > < span class = "o" > );< / span >
< span class = "n" > renderer< / span > < span class = "o" > .< / span > < span class = "na" > start< / span > < span class = "o" > ();< / span >
< span class = "k" > try< / span > < span class = "o" > {< / span >
2021-05-27 09:02:51 +00:00
< span class = "no" > PMD< / span > < span class = "o" > .< / span > < span class = "na" > processFiles< / span > < span class = "o" > (< / span > < span class = "n" > configuration< / span > < span class = "o" > ,< / span > < span class = "n" > ruleSets< / span > < span class = "o" > ,< / span > < span class = "n" > files< / span > < span class = "o" > ,< / span > < span class = "nc" > Collections< / span > < span class = "o" > .< / span > < span class = "na" > singletonList< / span > < span class = "o" > (< / span > < span class = "n" > renderer< / span > < span class = "o" > ));< / span >
2020-11-14 09:20:07 +00:00
< span class = "o" > }< / span > < span class = "k" > finally< / span > < span class = "o" > {< / span >
< span class = "nc" > ClassLoader< / span > < span class = "n" > auxiliaryClassLoader< / span > < span class = "o" > =< / span > < span class = "n" > configuration< / span > < span class = "o" > .< / span > < span class = "na" > getClassLoader< / span > < span class = "o" > ();< / span >
< span class = "k" > if< / span > < span class = "o" > (< / span > < span class = "n" > auxiliaryClassLoader< / span > < span class = "k" > instanceof< / span > < span class = "nc" > ClasspathClassLoader< / span > < span class = "o" > )< / span > < span class = "o" > {< / span >
< span class = "o" > ((< / span > < span class = "nc" > ClasspathClassLoader< / span > < span class = "o" > )< / span > < span class = "n" > auxiliaryClassLoader< / span > < span class = "o" > ).< / span > < span class = "na" > close< / span > < span class = "o" > ();< / span >
< span class = "o" > }< / span >
< span class = "o" > }< / span >
< span class = "n" > renderer< / span > < span class = "o" > .< / span > < span class = "na" > end< / span > < span class = "o" > ();< / span >
< span class = "n" > renderer< / span > < span class = "o" > .< / span > < span class = "na" > flush< / span > < span class = "o" > ();< / span >
< span class = "nc" > System< / span > < span class = "o" > .< / span > < span class = "na" > out< / span > < span class = "o" > .< / span > < span class = "na" > println< / span > < span class = "o" > (< / span > < span class = "s" > "Rendered Report:"< / span > < span class = "o" > );< / span >
< span class = "nc" > System< / span > < span class = "o" > .< / span > < span class = "na" > out< / span > < span class = "o" > .< / span > < span class = "na" > println< / span > < span class = "o" > (< / span > < span class = "n" > rendererOutput< / span > < span class = "o" > .< / span > < span class = "na" > toString< / span > < span class = "o" > ());< / span >
< span class = "o" > }< / span >
< span class = "kd" > private< / span > < span class = "kd" > static< / span > < span class = "nc" > Renderer< / span > < span class = "nf" > createRenderer< / span > < span class = "o" > (< / span > < span class = "nc" > Writer< / span > < span class = "n" > writer< / span > < span class = "o" > )< / span > < span class = "o" > {< / span >
< span class = "nc" > XMLRenderer< / span > < span class = "n" > xml< / span > < span class = "o" > =< / span > < span class = "k" > new< / span > < span class = "nc" > XMLRenderer< / span > < span class = "o" > (< / span > < span class = "s" > "UTF-8"< / span > < span class = "o" > );< / span >
< span class = "n" > xml< / span > < span class = "o" > .< / span > < span class = "na" > setWriter< / span > < span class = "o" > (< / span > < span class = "n" > writer< / span > < span class = "o" > );< / span >
< span class = "k" > return< / span > < span class = "n" > xml< / span > < span class = "o" > ;< / span >
< span class = "o" > }< / span >
< span class = "kd" > private< / span > < span class = "kd" > static< / span > < span class = "nc" > List< / span > < span class = "o" > < < / span > < span class = "nc" > DataSource< / span > < span class = "o" > > < / span > < span class = "nf" > determineFiles< / span > < span class = "o" > (< / span > < span class = "nc" > String< / span > < span class = "n" > basePath< / span > < span class = "o" > )< / span > < span class = "kd" > throws< / span > < span class = "nc" > IOException< / span > < span class = "o" > {< / span >
< span class = "nc" > Path< / span > < span class = "n" > dirPath< / span > < span class = "o" > =< / span > < span class = "nc" > FileSystems< / span > < span class = "o" > .< / span > < span class = "na" > getDefault< / span > < span class = "o" > ().< / span > < span class = "na" > getPath< / span > < span class = "o" > (< / span > < span class = "n" > basePath< / span > < span class = "o" > );< / span >
2021-05-27 09:02:51 +00:00
< span class = "kd" > final< / span > < span class = "nc" > PathMatcher< / span > < span class = "n" > matcher< / span > < span class = "o" > =< / span > < span class = "nc" > FileSystems< / span > < span class = "o" > .< / span > < span class = "na" > getDefault< / span > < span class = "o" > ().< / span > < span class = "na" > getPathMatcher< / span > < span class = "o" > (< / span > < span class = "s" > "glob:*.java"< / span > < span class = "o" > );< / span >
2020-11-14 09:20:07 +00:00
2021-05-27 09:02:51 +00:00
< span class = "kd" > final< / span > < span class = "nc" > List< / span > < span class = "o" > < < / span > < span class = "nc" > DataSource< / span > < span class = "o" > > < / span > < span class = "n" > files< / span > < span class = "o" > =< / span > < span class = "k" > new< / span > < span class = "nc" > ArrayList< / span > < span class = "o" > < > ();< / span >
2020-11-14 09:20:07 +00:00
< span class = "nc" > Files< / span > < span class = "o" > .< / span > < span class = "na" > walkFileTree< / span > < span class = "o" > (< / span > < span class = "n" > dirPath< / span > < span class = "o" > ,< / span > < span class = "k" > new< / span > < span class = "nc" > SimpleFileVisitor< / span > < span class = "o" > < < / span > < span class = "nc" > Path< / span > < span class = "o" > > ()< / span > < span class = "o" > {< / span >
< span class = "nd" > @Override< / span >
< span class = "kd" > public< / span > < span class = "nc" > FileVisitResult< / span > < span class = "nf" > visitFile< / span > < span class = "o" > (< / span > < span class = "nc" > Path< / span > < span class = "n" > path< / span > < span class = "o" > ,< / span > < span class = "nc" > BasicFileAttributes< / span > < span class = "n" > attrs< / span > < span class = "o" > )< / span > < span class = "kd" > throws< / span > < span class = "nc" > IOException< / span > < span class = "o" > {< / span >
< span class = "k" > if< / span > < span class = "o" > (< / span > < span class = "n" > matcher< / span > < span class = "o" > .< / span > < span class = "na" > matches< / span > < span class = "o" > (< / span > < span class = "n" > path< / span > < span class = "o" > .< / span > < span class = "na" > getFileName< / span > < span class = "o" > ()))< / span > < span class = "o" > {< / span >
< span class = "nc" > System< / span > < span class = "o" > .< / span > < span class = "na" > out< / span > < span class = "o" > .< / span > < span class = "na" > printf< / span > < span class = "o" > (< / span > < span class = "s" > "Using %s%n"< / span > < span class = "o" > ,< / span > < span class = "n" > path< / span > < span class = "o" > );< / span >
< span class = "n" > files< / span > < span class = "o" > .< / span > < span class = "na" > add< / span > < span class = "o" > (< / span > < span class = "k" > new< / span > < span class = "nc" > FileDataSource< / span > < span class = "o" > (< / span > < span class = "n" > path< / span > < span class = "o" > .< / span > < span class = "na" > toFile< / span > < span class = "o" > ()));< / span >
< span class = "o" > }< / span > < span class = "k" > else< / span > < span class = "o" > {< / span >
< span class = "nc" > System< / span > < span class = "o" > .< / span > < span class = "na" > out< / span > < span class = "o" > .< / span > < span class = "na" > printf< / span > < span class = "o" > (< / span > < span class = "s" > "Ignoring %s%n"< / span > < span class = "o" > ,< / span > < span class = "n" > path< / span > < span class = "o" > );< / span >
< span class = "o" > }< / span >
< span class = "k" > return< / span > < span class = "kd" > super< / span > < span class = "o" > .< / span > < span class = "na" > visitFile< / span > < span class = "o" > (< / span > < span class = "n" > path< / span > < span class = "o" > ,< / span > < span class = "n" > attrs< / span > < span class = "o" > );< / span >
< span class = "o" > }< / span >
< span class = "o" > });< / span >
< span class = "nc" > System< / span > < span class = "o" > .< / span > < span class = "na" > out< / span > < span class = "o" > .< / span > < span class = "na" > printf< / span > < span class = "o" > (< / span > < span class = "s" > "Analyzing %d files in %s%n"< / span > < span class = "o" > ,< / span > < span class = "n" > files< / span > < span class = "o" > .< / span > < span class = "na" > size< / span > < span class = "o" > (),< / span > < span class = "n" > basePath< / span > < span class = "o" > );< / span >
< span class = "k" > return< / span > < span class = "n" > files< / span > < span class = "o" > ;< / span >
< span class = "o" > }< / span >
< span class = "o" > }< / span >
< / code > < / pre > < / div > < / div >
< div class = "tags" >
< b > Tags: < / b >
< a href = "tag_userdocs.html" class = "btn btn-default navbar-btn cursorNorm" role = "button" > userdocs< / a >
< a href = "tag_tools.html" class = "btn btn-default navbar-btn cursorNorm" role = "button" > tools< / a >
< / div >
< / div >
< hr class = "shaded" / >
< footer >
< div class = "row" >
< div class = "col-lg-12 footer" >
2021-01-01 05:00:10 +00:00
© 2021 PMD Open Source Project. All rights reserved. < br / >
2021-11-27 09:40:37 +00:00
Site last generated: Nov 27, 2021 < br / >
2020-11-14 09:20:07 +00:00
< p > < img src = "images/pmd-logo-small.png" alt = "Company logo" / > < / p >
< / div >
< / div >
< / footer >
< / div >
<!-- /.row -->
< / div >
<!-- /.container -->
< / div >
< / div >
< / body >
< / html >