pmd/pmd_rules_apex.html
Travis CI (pmd-bot) a7549d2ec7 Update documentation
TRAVIS_JOB_NUMBER=4578.2
TRAVIS_COMMIT_RANGE=a0d0a22e7b17...af537034a90f
2020-01-06 14:17:06 +00:00

1573 lines
62 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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="Index of all built-in rules available for Apex">
<meta name="keywords" content="rule_referencesapex, ">
<title>Apex Rules | 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">&nbsp;<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="Apex Rules">{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">&nbsp;</div>
<!-- Content Row -->
<div class="row">
<!-- Sidebar Column -->
<div class="col-md-3" id="tg-sb-sidebar">
<ul id="mysidebar" class="nav">
<li class="sidebarTitle">PMD 6.21.0</li>
<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 class="subfolders">
<a href="#">Extending PMD</a>
<ul>
<li><a href="pmd_userdocs_extending_writing_pmd_rules.html">Writing a rule</a></li>
<li><a href="pmd_userdocs_extending_writing_xpath_rules.html">Writing XPath 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><a href="pmd_userdocs_cpd.html">Copy-paste detection</a></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_ant.html">Ant</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 class="active"><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>
</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>
<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>
</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>
<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>
</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">Apex Rules</h1>
</div>
<div class="post-content">
<div class="summary">Index of all built-in rules available for Apex</div>
<!-- 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>
<a target="_blank" href="https://github.com/pmd/pmd/blob/master/docs/pages/pmd/rules/apex.md" class="btn btn-default githubEditButton" role="button"><i class="fa fa-github fa-lg"></i> Edit me</a>
<!-- DO NOT EDIT THIS FILE. This file is generated. -->
<h2 id="best-practices">Best Practices</h2>
<div class="bs-callout bs-callout-">Rules which enforce generally accepted best practices.</div>
<ul>
<li><a href="pmd_rules_apex_bestpractices.html#apexassertionsshouldincludemessage">ApexAssertionsShouldIncludeMessage</a>: The second parameter of System.assert/third parameter of System.assertEquals/System.assertNotEqua…</li>
<li><a href="pmd_rules_apex_bestpractices.html#apexunittestclassshouldhaveasserts">ApexUnitTestClassShouldHaveAsserts</a>: Apex unit tests should include at least one assertion. This makes the tests more robust, and usi…</li>
<li><a href="pmd_rules_apex_bestpractices.html#apexunittestmethodshouldhaveistestannotation">ApexUnitTestMethodShouldHaveIsTestAnnotation</a>: Apex test methods should have @isTest annotation.As testMethod keyword is deprecated, Salesforce …</li>
<li><a href="pmd_rules_apex_bestpractices.html#apexunittestshouldnotuseseealldatatrue">ApexUnitTestShouldNotUseSeeAllDataTrue</a>: Apex unit tests should not use @isTest(seeAllData=true) because it opens up the existing database…</li>
<li><a href="pmd_rules_apex_bestpractices.html#avoidglobalmodifier">AvoidGlobalModifier</a>: Global classes should be avoided (especially in managed packages) as they can never be deleted or…</li>
<li><a href="pmd_rules_apex_bestpractices.html#avoidlogicintrigger">AvoidLogicInTrigger</a>: As triggers do not allow methods like regular classes they are less flexible and suited to apply …</li>
<li><a href="pmd_rules_apex_bestpractices.html#debugsshoulduselogginglevel">DebugsShouldUseLoggingLevel</a>: The first parameter of System.debug, when using the signature with two parameters, is a LoggingLe…</li>
</ul>
<h2 id="code-style">Code Style</h2>
<div class="bs-callout bs-callout-">Rules which enforce a specific coding style.</div>
<ul>
<li><a href="pmd_rules_apex_codestyle.html#classnamingconventions">ClassNamingConventions</a>: Configurable naming conventions for type declarations. This rule reports type declarat…</li>
<li><a href="pmd_rules_apex_codestyle.html#fieldnamingconventions">FieldNamingConventions</a>: Configurable naming conventions for field declarations. This rule reports variable declarations …</li>
<li><a href="pmd_rules_apex_codestyle.html#forloopsmustusebraces">ForLoopsMustUseBraces</a>: Avoid using for statements without using surrounding braces. If the code formatting orindentati…</li>
<li><a href="pmd_rules_apex_codestyle.html#formalparameternamingconventions">FormalParameterNamingConventions</a>: Configurable naming conventions for formal parameters of methods. This rule reports fo…</li>
<li><a href="pmd_rules_apex_codestyle.html#ifelsestmtsmustusebraces">IfElseStmtsMustUseBraces</a>: Avoid using if..else statements without using surrounding braces. If the code formattingor indent…</li>
<li><a href="pmd_rules_apex_codestyle.html#ifstmtsmustusebraces">IfStmtsMustUseBraces</a>: Avoid using if statements without using braces to surround the code block. If the codeformatting …</li>
<li><a href="pmd_rules_apex_codestyle.html#localvariablenamingconventions">LocalVariableNamingConventions</a>: Configurable naming conventions for local variable declarations. This rule reports var…</li>
<li><a href="pmd_rules_apex_codestyle.html#methodnamingconventions">MethodNamingConventions</a>: Configurable naming conventions for method declarations. This rule reports method decl…</li>
<li><a href="pmd_rules_apex_codestyle.html#onedeclarationperline">OneDeclarationPerLine</a>: Apex allows the use of several variables declaration of the same type on one line. However, itcan…</li>
<li><a href="pmd_rules_apex_codestyle.html#propertynamingconventions">PropertyNamingConventions</a>: Configurable naming conventions for property declarations. This rule reports property …</li>
<li><a href="pmd_rules_apex_codestyle.html#variablenamingconventions">VariableNamingConventions</a>: <span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> A variable naming conventions rule - customize this to your liking. Currently, itchecks for fina…</li>
<li><a href="pmd_rules_apex_codestyle.html#whileloopsmustusebraces">WhileLoopsMustUseBraces</a>: Avoid using while statements without using braces to surround the code block. If the codeformat…</li>
</ul>
<h2 id="design">Design</h2>
<div class="bs-callout bs-callout-">Rules that help you discover design issues.</div>
<ul>
<li><a href="pmd_rules_apex_design.html#avoiddeeplynestedifstmts">AvoidDeeplyNestedIfStmts</a>: Avoid creating deeply nested if-then statements since they are harder to read and error-prone to …</li>
<li><a href="pmd_rules_apex_design.html#cyclomaticcomplexity">CyclomaticComplexity</a>: The complexity of methods directly affects maintenance costs and readability. Concentrating too m…</li>
<li><a href="pmd_rules_apex_design.html#excessiveclasslength">ExcessiveClassLength</a>: Excessive class file lengths are usually indications that the class may be burdened with excessiv…</li>
<li><a href="pmd_rules_apex_design.html#excessiveparameterlist">ExcessiveParameterList</a>: Methods with numerous parameters are a challenge to maintain, especially if most of them share th…</li>
<li><a href="pmd_rules_apex_design.html#excessivepubliccount">ExcessivePublicCount</a>: Classes with large numbers of public methods and attributes require disproportionate testing effo…</li>
<li><a href="pmd_rules_apex_design.html#ncssconstructorcount">NcssConstructorCount</a>: This rule uses the NCSS (Non-Commenting Source Statements) algorithm to determine the number of l…</li>
<li><a href="pmd_rules_apex_design.html#ncssmethodcount">NcssMethodCount</a>: This rule uses the NCSS (Non-Commenting Source Statements) algorithm to determine the number of l…</li>
<li><a href="pmd_rules_apex_design.html#ncsstypecount">NcssTypeCount</a>: This rule uses the NCSS (Non-Commenting Source Statements) algorithm to determine the number of l…</li>
<li><a href="pmd_rules_apex_design.html#stdcyclomaticcomplexity">StdCyclomaticComplexity</a>: Complexity directly affects maintenance costs is determined by the number of decision points in a…</li>
<li><a href="pmd_rules_apex_design.html#toomanyfields">TooManyFields</a>: Classes that have too many fields can become unwieldy and could be redesigned to have fewer field…</li>
</ul>
<h2 id="documentation">Documentation</h2>
<div class="bs-callout bs-callout-">Rules that are related to code documentation.</div>
<ul>
<li><a href="pmd_rules_apex_documentation.html#apexdoc">ApexDoc</a>: This rule validates that: ApexDoc comments are present for classes, methods, and properties that …</li>
</ul>
<h2 id="error-prone">Error Prone</h2>
<div class="bs-callout bs-callout-">Rules to detect constructs that are either broken, extremely confusing or prone to runtime errors.</div>
<ul>
<li><a href="pmd_rules_apex_errorprone.html#apexcsrf">ApexCSRF</a>: Having DML operations in Apex class constructor or initializers can have unexpected side effects:…</li>
<li><a href="pmd_rules_apex_errorprone.html#avoiddirectaccesstriggermap">AvoidDirectAccessTriggerMap</a>: Avoid directly accessing Trigger.old and Trigger.new as it can lead to a bug. Triggers should be …</li>
<li><a href="pmd_rules_apex_errorprone.html#avoidhardcodingid">AvoidHardcodingId</a>: When deploying Apex code between sandbox and production environments, or installing Force.com App…</li>
<li><a href="pmd_rules_apex_errorprone.html#avoidnonexistentannotations">AvoidNonExistentAnnotations</a>: Apex supported non existent annotations for legacy reasons. In the future, use of such…</li>
<li><a href="pmd_rules_apex_errorprone.html#emptycatchblock">EmptyCatchBlock</a>: Empty Catch Block finds instances where an exception is caught, but nothing is done. In most cir…</li>
<li><a href="pmd_rules_apex_errorprone.html#emptyifstmt">EmptyIfStmt</a>: Empty If Statement finds instances where a condition is checked but nothing is done about it.</li>
<li><a href="pmd_rules_apex_errorprone.html#emptystatementblock">EmptyStatementBlock</a>: Empty block statements serve no purpose and should be removed.</li>
<li><a href="pmd_rules_apex_errorprone.html#emptytryorfinallyblock">EmptyTryOrFinallyBlock</a>: Avoid empty try or finally blocks - whats the point?</li>
<li><a href="pmd_rules_apex_errorprone.html#emptywhilestmt">EmptyWhileStmt</a>: Empty While Statement finds all instances where a while statement does nothing. If it is a timin…</li>
<li><a href="pmd_rules_apex_errorprone.html#methodwithsamenameasenclosingclass">MethodWithSameNameAsEnclosingClass</a>: Non-constructor methods should not have the same name as the enclosing class.</li>
</ul>
<h2 id="performance">Performance</h2>
<div class="bs-callout bs-callout-">Rules that flag suboptimal code.</div>
<ul>
<li><a href="pmd_rules_apex_performance.html#avoiddmlstatementsinloops">AvoidDmlStatementsInLoops</a>: Avoid DML statements inside loops to avoid hitting the DML governor limit. Instead, try to batch …</li>
<li><a href="pmd_rules_apex_performance.html#avoidsoqlinloops">AvoidSoqlInLoops</a>: New objects created within loops should be checked to see if they can created outside them and re…</li>
<li><a href="pmd_rules_apex_performance.html#avoidsoslinloops">AvoidSoslInLoops</a>: Sosl calls within loops can cause governor limit exceptions.</li>
</ul>
<h2 id="security">Security</h2>
<div class="bs-callout bs-callout-">Rules that flag potential security flaws.</div>
<ul>
<li><a href="pmd_rules_apex_security.html#apexbadcrypto">ApexBadCrypto</a>: The rule makes sure you are using randomly generated IVs and keys for Crypto calls.Hard-wiring …</li>
<li><a href="pmd_rules_apex_security.html#apexcrudviolation">ApexCRUDViolation</a>: The rule validates you are checking for access permissions before a SOQL/SOSL/DML operation.Since…</li>
<li><a href="pmd_rules_apex_security.html#apexcsrf">ApexCSRF</a>: <span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> The rule has been moved to another ruleset. Use instead <a href="pmd_rules_apex_errorprone.html#apexcsrf">ApexCSRF</a>.</li>
<li><a href="pmd_rules_apex_security.html#apexdangerousmethods">ApexDangerousMethods</a>: Checks against calling dangerous methods.For the time being, it reports: Against FinancialForce</li>
<li><a href="pmd_rules_apex_security.html#apexinsecureendpoint">ApexInsecureEndpoint</a>: Checks against accessing endpoints under plain http. You should always usehttps for security.</li>
<li><a href="pmd_rules_apex_security.html#apexopenredirect">ApexOpenRedirect</a>: Checks against redirects to user-controlled locations. This prevents attackers fromredirecting us…</li>
<li><a href="pmd_rules_apex_security.html#apexsharingviolations">ApexSharingViolations</a>: Detect classes declared without explicit sharing mode if DML methods are used. Thisforces the dev…</li>
<li><a href="pmd_rules_apex_security.html#apexsoqlinjection">ApexSOQLInjection</a>: Detects the usage of untrusted / unescaped variables in DML queries.</li>
<li><a href="pmd_rules_apex_security.html#apexsuggestusingnamedcred">ApexSuggestUsingNamedCred</a>: Detects hardcoded credentials used in requests to an endpoint.You should refrain from hardcoding …</li>
<li><a href="pmd_rules_apex_security.html#apexxssfromescapefalse">ApexXSSFromEscapeFalse</a>: Reports on calls to addError with disabled escaping. The message passed to addErrorwill be di…</li>
<li><a href="pmd_rules_apex_security.html#apexxssfromurlparam">ApexXSSFromURLParam</a>: Makes sure that all values obtained from URL parameters are properly escaped / sanitizedto avoid …</li>
</ul>
<h2 id="additional-rulesets">Additional rulesets</h2>
<ul>
<li>
<p>ApexUnit (<code class="highlighter-rouge">rulesets/apex/apexunit.xml</code>):</p>
<p><span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> This ruleset is for backwards compatibility.</p>
<p>It contains the following rules:</p>
<p><a href="pmd_rules_apex_bestpractices.html#apexunittestclassshouldhaveasserts">ApexUnitTestClassShouldHaveAsserts</a>, <a href="pmd_rules_apex_bestpractices.html#apexunittestshouldnotuseseealldatatrue">ApexUnitTestShouldNotUseSeeAllDataTrue</a></p>
</li>
<li>
<p>Braces (<code class="highlighter-rouge">rulesets/apex/braces.xml</code>):</p>
<p><span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> This ruleset is for backwards compatibility.</p>
<p>It contains the following rules:</p>
<p><a href="pmd_rules_apex_codestyle.html#forloopsmustusebraces">ForLoopsMustUseBraces</a>, <a href="pmd_rules_apex_codestyle.html#ifelsestmtsmustusebraces">IfElseStmtsMustUseBraces</a>, <a href="pmd_rules_apex_codestyle.html#ifstmtsmustusebraces">IfStmtsMustUseBraces</a>, <a href="pmd_rules_apex_codestyle.html#whileloopsmustusebraces">WhileLoopsMustUseBraces</a></p>
</li>
<li>
<p>Complexity (<code class="highlighter-rouge">rulesets/apex/complexity.xml</code>):</p>
<p><span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> This ruleset is for backwards compatibility.</p>
<p>It contains the following rules:</p>
<p><a href="pmd_rules_apex_design.html#avoiddeeplynestedifstmts">AvoidDeeplyNestedIfStmts</a>, <a href="pmd_rules_apex_design.html#excessiveclasslength">ExcessiveClassLength</a>, <a href="pmd_rules_apex_design.html#excessiveparameterlist">ExcessiveParameterList</a>, <a href="pmd_rules_apex_design.html#excessivepubliccount">ExcessivePublicCount</a>, <a href="pmd_rules_apex_design.html#ncssconstructorcount">NcssConstructorCount</a>, <a href="pmd_rules_apex_design.html#ncssmethodcount">NcssMethodCount</a>, <a href="pmd_rules_apex_design.html#ncsstypecount">NcssTypeCount</a>, <a href="pmd_rules_apex_design.html#stdcyclomaticcomplexity">StdCyclomaticComplexity</a>, <a href="pmd_rules_apex_design.html#toomanyfields">TooManyFields</a></p>
</li>
<li>
<p>Default ruleset used by the CodeClimate Engine for Salesforce.com Apex (<code class="highlighter-rouge">rulesets/apex/ruleset.xml</code>):</p>
<p><span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> This ruleset is for backwards compatibility.</p>
<p>It contains the following rules:</p>
<p><a href="pmd_rules_apex_security.html#apexbadcrypto">ApexBadCrypto</a>, <a href="pmd_rules_apex_security.html#apexcrudviolation">ApexCRUDViolation</a>, <a href="pmd_rules_apex_errorprone.html#apexcsrf">ApexCSRF</a>, <a href="pmd_rules_apex_security.html#apexdangerousmethods">ApexDangerousMethods</a>, <a href="pmd_rules_apex_documentation.html#apexdoc">ApexDoc</a>, <a href="pmd_rules_apex_security.html#apexinsecureendpoint">ApexInsecureEndpoint</a>, <a href="pmd_rules_apex_security.html#apexopenredirect">ApexOpenRedirect</a>, <a href="pmd_rules_apex_security.html#apexsharingviolations">ApexSharingViolations</a>, <a href="pmd_rules_apex_security.html#apexsoqlinjection">ApexSOQLInjection</a>, <a href="pmd_rules_apex_security.html#apexsuggestusingnamedcred">ApexSuggestUsingNamedCred</a>, <a href="pmd_rules_apex_bestpractices.html#apexunittestclassshouldhaveasserts">ApexUnitTestClassShouldHaveAsserts</a>, <a href="pmd_rules_apex_bestpractices.html#apexunittestshouldnotuseseealldatatrue">ApexUnitTestShouldNotUseSeeAllDataTrue</a>, <a href="pmd_rules_apex_security.html#apexxssfromescapefalse">ApexXSSFromEscapeFalse</a>, <a href="pmd_rules_apex_security.html#apexxssfromurlparam">ApexXSSFromURLParam</a>, <a href="pmd_rules_apex_design.html#avoiddeeplynestedifstmts">AvoidDeeplyNestedIfStmts</a>, <a href="pmd_rules_apex_errorprone.html#avoiddirectaccesstriggermap">AvoidDirectAccessTriggerMap</a>, <a href="pmd_rules_apex_performance.html#avoiddmlstatementsinloops">AvoidDmlStatementsInLoops</a>, <a href="pmd_rules_apex_bestpractices.html#avoidglobalmodifier">AvoidGlobalModifier</a>, <a href="pmd_rules_apex_errorprone.html#avoidhardcodingid">AvoidHardcodingId</a>, <a href="pmd_rules_apex_bestpractices.html#avoidlogicintrigger">AvoidLogicInTrigger</a>, <a href="pmd_rules_apex_errorprone.html#avoidnonexistentannotations">AvoidNonExistentAnnotations</a>, <a href="pmd_rules_apex_performance.html#avoidsoqlinloops">AvoidSoqlInLoops</a>, <a href="pmd_rules_apex_performance.html#avoidsoslinloops">AvoidSoslInLoops</a>, <a href="pmd_rules_apex_codestyle.html#classnamingconventions">ClassNamingConventions</a>, <a href="pmd_rules_apex_design.html#cyclomaticcomplexity">CyclomaticComplexity</a>, <a href="pmd_rules_apex_errorprone.html#emptycatchblock">EmptyCatchBlock</a>, <a href="pmd_rules_apex_errorprone.html#emptyifstmt">EmptyIfStmt</a>, <a href="pmd_rules_apex_errorprone.html#emptystatementblock">EmptyStatementBlock</a>, <a href="pmd_rules_apex_errorprone.html#emptytryorfinallyblock">EmptyTryOrFinallyBlock</a>, <a href="pmd_rules_apex_errorprone.html#emptywhilestmt">EmptyWhileStmt</a>, <a href="pmd_rules_apex_design.html#excessiveclasslength">ExcessiveClassLength</a>, <a href="pmd_rules_apex_design.html#excessiveparameterlist">ExcessiveParameterList</a>, <a href="pmd_rules_apex_design.html#excessivepubliccount">ExcessivePublicCount</a>, <a href="pmd_rules_apex_codestyle.html#forloopsmustusebraces">ForLoopsMustUseBraces</a>, <a href="pmd_rules_apex_codestyle.html#ifelsestmtsmustusebraces">IfElseStmtsMustUseBraces</a>, <a href="pmd_rules_apex_codestyle.html#ifstmtsmustusebraces">IfStmtsMustUseBraces</a>, <a href="pmd_rules_apex_codestyle.html#methodnamingconventions">MethodNamingConventions</a>, <a href="pmd_rules_apex_errorprone.html#methodwithsamenameasenclosingclass">MethodWithSameNameAsEnclosingClass</a>, <a href="pmd_rules_apex_design.html#ncssconstructorcount">NcssConstructorCount</a>, <a href="pmd_rules_apex_design.html#ncssmethodcount">NcssMethodCount</a>, <a href="pmd_rules_apex_design.html#ncsstypecount">NcssTypeCount</a>, <a href="pmd_rules_apex_codestyle.html#onedeclarationperline">OneDeclarationPerLine</a>, <a href="pmd_rules_apex_design.html#stdcyclomaticcomplexity">StdCyclomaticComplexity</a>, <a href="pmd_rules_apex_design.html#toomanyfields">TooManyFields</a>, <a href="pmd_rules_apex_codestyle.html#variablenamingconventions">VariableNamingConventions</a>, <a href="pmd_rules_apex_codestyle.html#whileloopsmustusebraces">WhileLoopsMustUseBraces</a></p>
</li>
<li>
<p>Empty Code (<code class="highlighter-rouge">rulesets/apex/empty.xml</code>):</p>
<p><span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> This ruleset is for backwards compatibility.</p>
<p>It contains the following rules:</p>
<p><a href="pmd_rules_apex_errorprone.html#emptycatchblock">EmptyCatchBlock</a>, <a href="pmd_rules_apex_errorprone.html#emptyifstmt">EmptyIfStmt</a>, <a href="pmd_rules_apex_errorprone.html#emptystatementblock">EmptyStatementBlock</a>, <a href="pmd_rules_apex_errorprone.html#emptytryorfinallyblock">EmptyTryOrFinallyBlock</a>, <a href="pmd_rules_apex_errorprone.html#emptywhilestmt">EmptyWhileStmt</a></p>
</li>
<li>
<p>Metrics temporary ruleset (<code class="highlighter-rouge">rulesets/apex/metrics.xml</code>):</p>
<p><span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> This ruleset is for backwards compatibility.</p>
<p>It contains the following rules:</p>
<p><a href="pmd_rules_apex_design.html#cyclomaticcomplexity">CyclomaticComplexity</a></p>
</li>
<li>
<p>Performance (<code class="highlighter-rouge">rulesets/apex/performance.xml</code>):</p>
<p><span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> This ruleset is for backwards compatibility.</p>
<p>It contains the following rules:</p>
<p><a href="pmd_rules_apex_performance.html#avoiddmlstatementsinloops">AvoidDmlStatementsInLoops</a>, <a href="pmd_rules_apex_performance.html#avoidsoqlinloops">AvoidSoqlInLoops</a>, <a href="pmd_rules_apex_performance.html#avoidsoslinloops">AvoidSoslInLoops</a></p>
</li>
<li>
<p>quickstart (<code class="highlighter-rouge">rulesets/apex/quickstart.xml</code>):</p>
<p>Quickstart configuration of PMD for Salesforce.com Apex. Includes the rules that are most likely to apply everywhere.</p>
<p>It contains the following rules:</p>
<p><a href="pmd_rules_apex_security.html#apexbadcrypto">ApexBadCrypto</a>, <a href="pmd_rules_apex_security.html#apexcrudviolation">ApexCRUDViolation</a>, <a href="pmd_rules_apex_errorprone.html#apexcsrf">ApexCSRF</a>, <a href="pmd_rules_apex_security.html#apexdangerousmethods">ApexDangerousMethods</a>, <a href="pmd_rules_apex_documentation.html#apexdoc">ApexDoc</a>, <a href="pmd_rules_apex_security.html#apexinsecureendpoint">ApexInsecureEndpoint</a>, <a href="pmd_rules_apex_security.html#apexopenredirect">ApexOpenRedirect</a>, <a href="pmd_rules_apex_security.html#apexsharingviolations">ApexSharingViolations</a>, <a href="pmd_rules_apex_security.html#apexsoqlinjection">ApexSOQLInjection</a>, <a href="pmd_rules_apex_security.html#apexsuggestusingnamedcred">ApexSuggestUsingNamedCred</a>, <a href="pmd_rules_apex_bestpractices.html#apexunittestclassshouldhaveasserts">ApexUnitTestClassShouldHaveAsserts</a>, <a href="pmd_rules_apex_bestpractices.html#apexunittestshouldnotuseseealldatatrue">ApexUnitTestShouldNotUseSeeAllDataTrue</a>, <a href="pmd_rules_apex_security.html#apexxssfromescapefalse">ApexXSSFromEscapeFalse</a>, <a href="pmd_rules_apex_security.html#apexxssfromurlparam">ApexXSSFromURLParam</a>, <a href="pmd_rules_apex_design.html#avoiddeeplynestedifstmts">AvoidDeeplyNestedIfStmts</a>, <a href="pmd_rules_apex_errorprone.html#avoiddirectaccesstriggermap">AvoidDirectAccessTriggerMap</a>, <a href="pmd_rules_apex_performance.html#avoiddmlstatementsinloops">AvoidDmlStatementsInLoops</a>, <a href="pmd_rules_apex_bestpractices.html#avoidglobalmodifier">AvoidGlobalModifier</a>, <a href="pmd_rules_apex_errorprone.html#avoidhardcodingid">AvoidHardcodingId</a>, <a href="pmd_rules_apex_bestpractices.html#avoidlogicintrigger">AvoidLogicInTrigger</a>, <a href="pmd_rules_apex_errorprone.html#avoidnonexistentannotations">AvoidNonExistentAnnotations</a>, <a href="pmd_rules_apex_performance.html#avoidsoqlinloops">AvoidSoqlInLoops</a>, <a href="pmd_rules_apex_performance.html#avoidsoslinloops">AvoidSoslInLoops</a>, <a href="pmd_rules_apex_codestyle.html#classnamingconventions">ClassNamingConventions</a>, <a href="pmd_rules_apex_design.html#cyclomaticcomplexity">CyclomaticComplexity</a>, <a href="pmd_rules_apex_bestpractices.html#debugsshoulduselogginglevel">DebugsShouldUseLoggingLevel</a>, <a href="pmd_rules_apex_errorprone.html#emptycatchblock">EmptyCatchBlock</a>, <a href="pmd_rules_apex_errorprone.html#emptyifstmt">EmptyIfStmt</a>, <a href="pmd_rules_apex_errorprone.html#emptystatementblock">EmptyStatementBlock</a>, <a href="pmd_rules_apex_errorprone.html#emptytryorfinallyblock">EmptyTryOrFinallyBlock</a>, <a href="pmd_rules_apex_errorprone.html#emptywhilestmt">EmptyWhileStmt</a>, <a href="pmd_rules_apex_design.html#excessiveclasslength">ExcessiveClassLength</a>, <a href="pmd_rules_apex_design.html#excessiveparameterlist">ExcessiveParameterList</a>, <a href="pmd_rules_apex_design.html#excessivepubliccount">ExcessivePublicCount</a>, <a href="pmd_rules_apex_codestyle.html#fieldnamingconventions">FieldNamingConventions</a>, <a href="pmd_rules_apex_codestyle.html#forloopsmustusebraces">ForLoopsMustUseBraces</a>, <a href="pmd_rules_apex_codestyle.html#formalparameternamingconventions">FormalParameterNamingConventions</a>, <a href="pmd_rules_apex_codestyle.html#ifelsestmtsmustusebraces">IfElseStmtsMustUseBraces</a>, <a href="pmd_rules_apex_codestyle.html#ifstmtsmustusebraces">IfStmtsMustUseBraces</a>, <a href="pmd_rules_apex_codestyle.html#localvariablenamingconventions">LocalVariableNamingConventions</a>, <a href="pmd_rules_apex_codestyle.html#methodnamingconventions">MethodNamingConventions</a>, <a href="pmd_rules_apex_errorprone.html#methodwithsamenameasenclosingclass">MethodWithSameNameAsEnclosingClass</a>, <a href="pmd_rules_apex_design.html#ncssconstructorcount">NcssConstructorCount</a>, <a href="pmd_rules_apex_design.html#ncssmethodcount">NcssMethodCount</a>, <a href="pmd_rules_apex_design.html#ncsstypecount">NcssTypeCount</a>, <a href="pmd_rules_apex_codestyle.html#onedeclarationperline">OneDeclarationPerLine</a>, <a href="pmd_rules_apex_codestyle.html#propertynamingconventions">PropertyNamingConventions</a>, <a href="pmd_rules_apex_design.html#stdcyclomaticcomplexity">StdCyclomaticComplexity</a>, <a href="pmd_rules_apex_design.html#toomanyfields">TooManyFields</a>, <a href="pmd_rules_apex_codestyle.html#whileloopsmustusebraces">WhileLoopsMustUseBraces</a></p>
</li>
<li>
<p>Security (<code class="highlighter-rouge">rulesets/apex/security.xml</code>):</p>
<p><span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> This ruleset is for backwards compatibility.</p>
<p>It contains the following rules:</p>
<p><a href="pmd_rules_apex_security.html#apexbadcrypto">ApexBadCrypto</a>, <a href="pmd_rules_apex_security.html#apexcrudviolation">ApexCRUDViolation</a>, <a href="pmd_rules_apex_errorprone.html#apexcsrf">ApexCSRF</a>, <a href="pmd_rules_apex_security.html#apexdangerousmethods">ApexDangerousMethods</a>, <a href="pmd_rules_apex_security.html#apexinsecureendpoint">ApexInsecureEndpoint</a>, <a href="pmd_rules_apex_security.html#apexopenredirect">ApexOpenRedirect</a>, <a href="pmd_rules_apex_security.html#apexsharingviolations">ApexSharingViolations</a>, <a href="pmd_rules_apex_security.html#apexsoqlinjection">ApexSOQLInjection</a>, <a href="pmd_rules_apex_security.html#apexsuggestusingnamedcred">ApexSuggestUsingNamedCred</a>, <a href="pmd_rules_apex_security.html#apexxssfromescapefalse">ApexXSSFromEscapeFalse</a>, <a href="pmd_rules_apex_security.html#apexxssfromurlparam">ApexXSSFromURLParam</a></p>
</li>
<li>
<p>Style (<code class="highlighter-rouge">rulesets/apex/style.xml</code>):</p>
<p><span style="border-radius: 0.25em; color: #fff; padding: 0.2em 0.6em 0.3em; display: inline; background-color: #d9534f; font-size: 75%;">Deprecated</span> This ruleset is for backwards compatibility.</p>
<p>It contains the following rules:</p>
<p><a href="pmd_rules_apex_errorprone.html#avoiddirectaccesstriggermap">AvoidDirectAccessTriggerMap</a>, <a href="pmd_rules_apex_bestpractices.html#avoidglobalmodifier">AvoidGlobalModifier</a>, <a href="pmd_rules_apex_errorprone.html#avoidhardcodingid">AvoidHardcodingId</a>, <a href="pmd_rules_apex_bestpractices.html#avoidlogicintrigger">AvoidLogicInTrigger</a>, <a href="pmd_rules_apex_codestyle.html#classnamingconventions">ClassNamingConventions</a>, <a href="pmd_rules_apex_codestyle.html#methodnamingconventions">MethodNamingConventions</a>, <a href="pmd_rules_apex_errorprone.html#methodwithsamenameasenclosingclass">MethodWithSameNameAsEnclosingClass</a>, <a href="pmd_rules_apex_codestyle.html#variablenamingconventions">VariableNamingConventions</a></p>
</li>
</ul>
<div class="tags">
<b>Tags: </b>
<a href="tag_rule_references.html" class="btn btn-default navbar-btn cursorNorm" role="button">rule_references</a>
</div>
</div>
<hr class="shaded"/>
<footer>
<div class="row">
<div class="col-lg-12 footer">
&copy;2020 PMD Open Source Project. All rights reserved. <br />
Site last generated: Jan 6, 2020 <br />
<p><img src="images/pmd-logo-small.png" alt="Company logo"/></p>
</div>
</div>
</footer>
</div>
<!-- /.row -->
</div>
<!-- /.container -->
</div>
</div>
</body>
</html>