pmd/pmd_rules_apex.html

2091 lines
63 KiB
HTML
Raw Permalink 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" type="text/css" href="assets/fontawesome-free-5.15.4-web/css/all.min.css">
<link rel="stylesheet" type="text/css" href="assets/bootstrap-4.5.2-dist/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="css/syntax.css">
<link rel="stylesheet" type="text/css" href="css/modern-business.css">
<link rel="stylesheet" type="text/css" href="css/customstyles.css">
<link rel="stylesheet" type="text/css" href="css/theme-green.css">
<link rel="stylesheet" type="text/css" href="css/pmd-customstyles.css">
<link rel="shortcut icon" href="images/logo/favicon.ico" type="image/x-icon">
<link rel="icon" href="images/logo/favicon.ico" type="image/x-icon">
<link rel="alternate" type="application/rss+xml" title="" href="feed.xml">
</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-expand-lg fixed-top navbar-dark">
<div class="container topnavlinks">
<a class="navbar-brand fas fa-home fa-lg" href="index.html">&nbsp;<span class="projectTitle"> PMD Source Code Analyzer Project</span></a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav mr-auto mt-2 mt-lg-0"></ul>
<ul class="navbar-nav">
<!-- toggle sidebar button -->
<li class="nav-item"><a id="tg-sb-link" class="nav-link" href="#"><i id="tg-sb-icon" class="fas fa-toggle-on"></i> Nav</a></li>
<!-- entries without drop-downs appear here -->
<li class="nav-item"><a class="nav-link" href="https://github.com/pmd/pmd/releases/latest" target="_blank">Download</a></li>
<li class="nav-item"><a class="nav-link" 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.-->
</ul>
<form class="form-inline my-2 my-lg-0">
<input class="form-control mr-sm-2" type="search" placeholder="search..." id="search-input">
<ul id="results-container"></ul>
</form>
</div>
</div>
</nav>
<!-- Page Content -->
<div class="container-toc-wrapper">
<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 7.8.0-SNAPSHOT</li>
<div class="sidebarTitleDate">Release date: 29-November-2024</div>
<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_release_notes_pmd7.html">Release notes (PMD 7)</a></li>
<li><a href="pmd_about_help.html">Getting help</a></li>
<li><a href="pmd_about_release_policies.html">Release policies</a></li>
<li><a href="pmd_about_support_lifecycle.html">Support lifecycle</a></li>
</ul>
</li>
<li>
<a href="#">User Documentation</a>
<ul>
<li><a href="pmd_userdocs_migrating_to_pmd7.html">Migration Guide for PMD 7</a></li>
<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><a href="pmd_userdocs_3rdpartyrulesets.html">3rd party rulesets</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_rule_guidelines.html">Rule guidelines</a></li>
<li><a href="pmd_userdocs_extending_testing.html">Testing your rules</a></li>
<li><a href="pmd_userdocs_extending_ast_dump.html">Creating (XML) dump of the AST</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><a href="pmd_userdocs_tools_java_api.html">PMD Java API</a></li>
<li><a href="pmd_userdocs_tools_bld.html">bld PMD Extension</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="#">HTML Rules</a>
<ul>
<li><a href="pmd_rules_html.html">Index</a></li>
<li><a href="pmd_rules_html_bestpractices.html">Best Practices</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="#">JavaScript 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>
<li><a href="pmd_rules_ecmascript_performance.html">Performance</a></li>
</ul>
</li>
<li class="subfolders">
<a href="#">Kotlin Rules</a>
<ul>
<li><a href="pmd_rules_kotlin.html">Index</a></li>
<li><a href="pmd_rules_kotlin_bestpractices.html">Best Practices</a></li>
<li><a href="pmd_rules_kotlin_errorprone.html">Error Prone</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_visualforce.html">Index</a></li>
<li><a href="pmd_rules_visualforce_security.html">Security</a></li>
</ul>
</li>
<li class="subfolders">
<a href="#">Scala Rules</a>
<ul>
<li><a href="pmd_rules_scala.html">Index</a></li>
</ul>
</li>
<li class="subfolders">
<a href="#">Swift Rules</a>
<ul>
<li><a href="pmd_rules_swift.html">Index</a></li>
<li><a href="pmd_rules_swift_bestpractices.html">Best Practices</a></li>
<li><a href="pmd_rules_swift_errorprone.html">Error Prone</a></li>
</ul>
</li>
<li class="subfolders">
<a href="#">Velocity Template Language (VTL) Rules</a>
<ul>
<li><a href="pmd_rules_velocity.html">Index</a></li>
<li><a href="pmd_rules_velocity_bestpractices.html">Best Practices</a></li>
<li><a href="pmd_rules_velocity_design.html">Design</a></li>
<li><a href="pmd_rules_velocity_errorprone.html">Error Prone</a></li>
</ul>
</li>
<li class="subfolders">
<a href="#">WSDL Rules</a>
<ul>
<li><a href="pmd_rules_wsdl.html">Index</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_bestpractices.html">Best Practices</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_index.html">Overview</a></li>
<li><a href="pmd_languages_configuration.html">Language configuration</a></li>
<li><a href="pmd_languages_apex.html">Apex</a></li>
<li><a href="pmd_languages_cpp.html">C/C++</a></li>
<li><a href="pmd_languages_cs.html">C#</a></li>
<li><a href="pmd_languages_coco.html">Coco</a></li>
<li><a href="pmd_languages_dart.html">Dart</a></li>
<li><a href="pmd_languages_fortran.html">Fortran</a></li>
<li><a href="pmd_languages_gherkin.html">Gherkin</a></li>
<li><a href="pmd_languages_go.html">Go</a></li>
<li><a href="pmd_languages_html.html">HTML</a></li>
<li><a href="pmd_languages_java.html">Java</a></li>
<li><a href="pmd_languages_js_ts.html">JavaScript / TypeScript</a></li>
<li><a href="pmd_languages_jsp.html">JSP</a></li>
<li><a href="pmd_languages_julia.html">Julia</a></li>
<li><a href="pmd_languages_kotlin.html">Kotlin</a></li>
<li><a href="pmd_languages_lua.html">Lua</a></li>
<li><a href="pmd_languages_matlab.html">Matlab</a></li>
<li><a href="pmd_languages_modelica.html">Modelica</a></li>
<li><a href="pmd_languages_objectivec.html">Objective-C</a></li>
<li><a href="pmd_languages_perl.html">Perl</a></li>
<li><a href="pmd_languages_php.html">PHP</a></li>
<li><a href="pmd_languages_plsql.html">PLSQL</a></li>
<li><a href="pmd_languages_python.html">Python</a></li>
<li><a href="pmd_languages_ruby.html">Ruby</a></li>
<li><a href="pmd_languages_scala.html">Scala</a></li>
<li><a href="pmd_languages_swift.html">Swift</a></li>
<li><a href="pmd_languages_tsql.html">T-SQL</a></li>
<li><a href="pmd_languages_visualforce.html">Visualforce</a></li>
<li><a href="pmd_languages_velocity.html">Velocity Template Language (VTL)</a></li>
<li><a href="pmd_languages_xml.html">XML and XML dialects</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/main/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_rule_guidelines.html">Rule Guidelines</a></li>
<li><a href="pmd_devdocs_major_adding_new_language_javacc.html">Adding a new language (JavaCC)</a></li>
<li><a href="pmd_devdocs_major_adding_new_language_antlr.html">Adding a new language (ANTLR)</a></li>
<li><a href="pmd_devdocs_major_adding_new_cpd_language.html">Adding a new CPD language</a></li>
</ul>
</li>
<li class="subfolders">
<a href="#">Experimental features</a>
<ul>
<li><a href="tag_experimental.html">List of experimental Features</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_logo.html">Logo</a></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><a href="pmd_projectdocs_decisions.html">Decisions</a></li>
<li class="subfolders">
<a href="#">Project management</a>
<ul>
<li><a href="pmd_projectdocs_committers_infrastructure.html">Infrastructure</a></li>
<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>
</ul>
</div>
<!-- Content Column -->
<div class="col-md-9" id="tg-sb-content">
<header>
<div class="row">
<div class="col-lg-12">
<a href="./" role="button"
><i class="fa fa-home fa-lg"></i
></a>
» Apex Rules
</div>
</div>
<hr />
</header>
<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>
<details id="inline-toc-details">
<summary>Table of Contents</summary>
<div id="inline-toc"><!-- empty, move TOC here when screen size too small --></div>
</details>
<!-- 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#apexunittestclassshouldhaverunas">ApexUnitTestClassShouldHaveRunAs</a>: Apex unit tests should include at least one runAs method. This makes the tests more robust, and …</li>
<li><a href="pmd_rules_apex_bestpractices.html#apexunittestmethodshouldhaveistestannotation">ApexUnitTestMethodShouldHaveIsTestAnnotation</a>: Apex test methods should have @isTest annotation instead of the testMethod keyword, as testM…</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>
<li><a href="pmd_rules_apex_bestpractices.html#queueablewithoutfinalizer">QueueableWithoutFinalizer</a>: Detects when the Queueable interface is used but a Finalizer is not attached. It is best practice…</li>
<li><a href="pmd_rules_apex_bestpractices.html#unusedlocalvariable">UnusedLocalVariable</a>: Detects when a local variable is declared and/or assigned but not used.</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 declara…</li>
<li><a href="pmd_rules_apex_codestyle.html#fielddeclarationsshouldbeatstart">FieldDeclarationsShouldBeAtStart</a>: Field declarations should appear before method declarations within a class.</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 or indentat…</li>
<li><a href="pmd_rules_apex_codestyle.html#formalparameternamingconventions">FormalParameterNamingConventions</a>: Configurable naming conventions for formal parameters of methods. This rule reports f…</li>
<li><a href="pmd_rules_apex_codestyle.html#ifelsestmtsmustusebraces">IfElseStmtsMustUseBraces</a>: Avoid using if..else statements without using surrounding braces. If the code formatting or inden…</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 code formatting…</li>
<li><a href="pmd_rules_apex_codestyle.html#localvariablenamingconventions">LocalVariableNamingConventions</a>: Configurable naming conventions for local variable declarations. This rule reports va…</li>
<li><a href="pmd_rules_apex_codestyle.html#methodnamingconventions">MethodNamingConventions</a>: Configurable naming conventions for method declarations. This rule reports method dec…</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, it ca…</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#whileloopsmustusebraces">WhileLoopsMustUseBraces</a>: Avoid using while statements without using braces to surround the code block. If the code forma…</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#cognitivecomplexity">CognitiveComplexity</a>: Methods that are highly complex are difficult to read and more costly to maintain. If you include…</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, attributes, and properties require disproportionate…</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>
<li><a href="pmd_rules_apex_design.html#unusedmethod">UnusedMethod</a>: Avoid having unused methods since they make understanding and maintaining code harder. This rule …</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 th…</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 suc…</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 circ…</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 timing…</li>
<li><a href="pmd_rules_apex_errorprone.html#inaccessibleauraenabledgetter">InaccessibleAuraEnabledGetter</a>: In the Summer 21 release, a mandatory security update enforces access modifiers on Apex properti…</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>
<li><a href="pmd_rules_apex_errorprone.html#overridebothequalsandhashcode">OverrideBothEqualsAndHashcode</a>: Override both public Boolean equals(Object obj), and public Integer hashCode(), or override n…</li>
<li><a href="pmd_rules_apex_errorprone.html#testmethodsmustbeintestclasses">TestMethodsMustBeInTestClasses</a>: Test methods marked as a testMethod or annotated with @IsTest, but not residing in a te…</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#avoiddebugstatements">AvoidDebugStatements</a>: Debug statements contribute to longer transactions and consume Apex CPU time even when debug logs…</li>
<li><a href="pmd_rules_apex_performance.html#avoidnonrestrictivequeries">AvoidNonRestrictiveQueries</a>: When working with very large amounts of data, unfiltered SOQL or SOSL queries can quickly cause …</li>
<li><a href="pmd_rules_apex_performance.html#eagerlyloadeddescribesobjectresult">EagerlyLoadedDescribeSObjectResult</a>: This rule finds DescribeSObjectResults which could have been loaded eagerly via SObjectType.ge…</li>
<li><a href="pmd_rules_apex_performance.html#operationwithhighcostinloop">OperationWithHighCostInLoop</a>: This rule finds method calls inside loops that are known to be likely a performance issue. These …</li>
<li><a href="pmd_rules_apex_performance.html#operationwithlimitsinloop">OperationWithLimitsInLoop</a>: Database class methods, DML operations, SOQL queries, SOSL queries, Approval class methods, Email…</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. Sinc…</li>
<li><a href="pmd_rules_apex_security.html#apexdangerousmethods">ApexDangerousMethods</a>: Checks against calling dangerous methods. For the time being, it reports: Against FinancialForc…</li>
<li><a href="pmd_rules_apex_security.html#apexinsecureendpoint">ApexInsecureEndpoint</a>: Checks against accessing endpoints under plain http. You should always use https for security.</li>
<li><a href="pmd_rules_apex_security.html#apexopenredirect">ApexOpenRedirect</a>: Checks against redirects to user-controlled locations. This prevents attackers from redirecting u…</li>
<li><a href="pmd_rules_apex_security.html#apexsharingviolations">ApexSharingViolations</a>: Detect classes declared without explicit sharing mode if DML methods are used. This forces the de…</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 addError will be d…</li>
<li><a href="pmd_rules_apex_security.html#apexxssfromurlparam">ApexXSSFromURLParam</a>: Makes sure that all values obtained from URL parameters are properly escaped / sanitized to avoid…</li>
</ul>
<h2 id="additional-rulesets">Additional rulesets</h2>
<ul>
<li>
<p>quickstart (<code class="language-plaintext 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#apexunittestclassshouldhaverunas">ApexUnitTestClassShouldHaveRunAs</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_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_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_performance.html#operationwithhighcostinloop">OperationWithHighCostInLoop</a>, <a href="pmd_rules_apex_performance.html#operationwithlimitsinloop">OperationWithLimitsInLoop</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>
</ul>
<div class="tags">
<b>Tags: </b>
<a href="tag_rule_references.html" class="btn btn-outline-secondary navbar-btn cursorNorm" role="button">rule_references</a>
</div>
</div>
<footer>
<hr />
<div class="row">
<div class="col-lg-12 footer">
&copy;2024 PMD Open Source Project. All rights
reserved. <br />
Site last generated: Nov 21, 2024 <br />
<p>
<img src="images/logo/pmd-logo-70px.png" alt="PMD
logo"/>
</p>
</div>
</div>
</footer>
</div>
<!-- /.row -->
</div>
<!-- /.container -->
</div>
<!-- Sticky TOC column -->
<div class="toc-col">
<div id="toc"></div>
</div>
<!-- /.toc-container-wrapper -->
</div>
</div>
<script type="application/javascript" src="assets/jquery-3.5.1/jquery-3.5.1.min.js"></script>
<script type="application/javascript" src="assets/anchorjs-4.2.2/anchor.min.js"></script>
<script type="application/javascript" src="assets/navgoco-0.2.1/src/jquery.navgoco.min.js"></script>
<script type="application/javascript" src="assets/bootstrap-4.5.2-dist/js/bootstrap.bundle.min.js"></script>
<script type="application/javascript" src="assets/Simple-Jekyll-Search-1.0.8/dest/jekyll-search.js"></script>
<script type="application/javascript" src="assets/jekyll-table-of-contents/toc.js"></script>
<script type="application/javascript" src="js/tabstate.js"></script>
<script type="application/javascript" src="js/customscripts.js"></script>
</body>
</html>