Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[java] CyclomaticComplexityRule counts ?-operator twice #1217

Closed
dreniers opened this issue Jun 28, 2018 · 0 comments
Closed

[java] CyclomaticComplexityRule counts ?-operator twice #1217

dreniers opened this issue Jun 28, 2018 · 0 comments
Labels
a:bug PMD crashes or fails to analyse a file. in:metrics Affects the metrics framework
Milestone

Comments

@dreniers
Copy link
Contributor

Affects PMD Version: 6.5.0

Rule: category/java/design.xml/CyclomaticComplexity

Description: CyclomaticComplexityRule counts conditional ternary operator twice. I believe this is incorrect, as it just adds one code path and can be rewritten as an if-else statement which just has complexity 1.

Code Sample demonstrating the issue:

  public void get() {
    final String a = b == null ? c : d;
  }

Running PMD through: CLI

Example of output:

15:07:55 E:\dev\pmd-cyclox>more TernaryOperator.java & echo --- & more ruleset-for-cyclox.xml & echo --- & pmd-bin-6.5.0\bin\pmd.bat -f xml -R ruleset-for-cyclo
x.xml -d TernaryOperator.java
class MyClass {
  public void run(String b, String c) {
    final String a = b == null ? c : b;
  }
}
---
<?xml version="1.0"?>

<ruleset name="Custom Rules"
    xmlns="http://pmd.sourceforge.net/ruleset/3.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/3.0.0 http://pmd.sourceforge.net/ruleset_3_0_0.xsd">
  <description>
Custom rules
  </description>

  <rule
   ref="category/java/design.xml/CyclomaticComplexity"
   >
   <properties>
        <property name="methodReportLevel" value="1"/>
    </properties>
  </rule>

</ruleset>
---
jun 28, 2018 3:07:56 PM net.sourceforge.pmd.PMD processFiles
WARNING: This analysis could be faster, please consider using Incremental Analysis: https://pmd.github.io/pmd-6.5.0/pmd_userdocs_incremental_analysis.html
<?xml version="1.0" encoding="UTF-8"?>
<pmd xmlns="http://pmd.sourceforge.net/report/2.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://pmd.sourceforge.net/report/2.0.0 http://pmd.sourceforge.net/report_2_0_0.xsd"
    version="6.5.0" timestamp="2018-06-28T15:07:56.983">
<file name="E:\dev\pmd-cyclox\TernaryOperator.java">
<violation beginline="2" endline="4" begincolumn="10" endcolumn="3" rule="CyclomaticComplexity" ruleset="Design" class="MyClass" method="run" externalInfoUrl="h
ttps://pmd.github.io/pmd/pmd_rules_java_design.html#cyclomaticcomplexity" priority="3">
The method 'run(String, String)' has a cyclomatic complexity of 3.
</violation>
</file>
</pmd>

PMD reports a complexity of 3, where I believe it should be 2: one for the method entry, and one for the ?-operator.

@oowekyala oowekyala added this to the 6.6.0 milestone Jun 29, 2018
@oowekyala oowekyala added a:bug PMD crashes or fails to analyse a file. in:metrics Affects the metrics framework has:pr labels Jun 29, 2018
adangel added a commit that referenced this issue Jul 8, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
a:bug PMD crashes or fails to analyse a file. in:metrics Affects the metrics framework
Projects
None yet
Development

No branches or pull requests

2 participants