jenkinsci/hpe-application-automation-tools-plugin

View on GitHub
src/main/java/com/microfocus/application/automation/tools/octane/model/processors/scm/StarTeamSCMProcessor.java

Summary

Maintainability
A
45 mins
Test Coverage

Avoid deeply nested control flow statements.
Open

              if (property instanceof Mailer.UserProperty) {
                userEmail = ((Mailer.UserProperty) property).getAddress();
              }

    Refactor this method to reduce its Cognitive Complexity from 19 to the 15 allowed.
    Open

      private List<SCMCommit> extractCommits(List<ChangeLogSet<? extends ChangeLogSet.Entry>> changes) {

    Cognitive Complexity is a measure of how hard the control flow of a method is to understand. Methods with high Cognitive Complexity will be difficult to maintain.

    See

    Define a constant instead of duplicating this literal "DELETE" 3 times.
    Open

        if (changeType.equals("DELETE")) {

    Duplicated string literals make the process of refactoring error-prone, since you must be sure to update all occurrences.

    On the other hand, constants can be referenced from many places, but only need to be updated in a single place.

    Noncompliant Code Example

    With the default threshold of 3:

    public void run() {
      prepare("action1");                              // Noncompliant - "action1" is duplicated 3 times
      execute("action1");
      release("action1");
    }
    
    @SuppressWarning("all")                            // Compliant - annotations are excluded
    private void method1() { /* ... */ }
    @SuppressWarning("all")
    private void method2() { /* ... */ }
    
    public String method3(String a) {
      System.out.println("'" + a + "'");               // Compliant - literal "'" has less than 5 characters and is excluded
      return "";                                       // Compliant - literal "" has less than 5 characters and is excluded
    }
    

    Compliant Solution

    private static final String ACTION_1 = "action1";  // Compliant
    
    public void run() {
      prepare(ACTION_1);                               // Compliant
      execute(ACTION_1);
      release(ACTION_1);
    }
    

    Exceptions

    To prevent generating some false-positives, literals having less than 5 characters are excluded.

    Remove this unused method parameter "run".
    Open

      private SCMData extractSCMData(Run run, SCM scm, List<ChangeLogSet<? extends ChangeLogSet.Entry>> changes) {

    Unused parameters are misleading. Whatever the values passed to such parameters, the behavior will be the same.

    Noncompliant Code Example

    void doSomething(int a, int b) {     // "b" is unused
      compute(a);
    }
    

    Compliant Solution

    void doSomething(int a) {
      compute(a);
    }
    

    Exceptions

    The rule will not raise issues for unused parameters:

    • that are annotated with @javax.enterprise.event.Observes
    • in overrides and implementation methods
    • in interface default methods
    • in non-private methods that only throw or that have empty bodies
    • in annotated methods, unless the annotation is @SuppressWarning("unchecked") or @SuppressWarning("rawtypes"), in which case the annotation will be ignored
    • in overridable methods (non-final, or not member of a final class, non-static, non-private), if the parameter is documented with a proper javadoc.
    @Override
    void doSomething(int a, int b) {     // no issue reported on b
      compute(a);
    }
    
    public void foo(String s) {
      // designed to be extended but noop in standard case
    }
    
    protected void bar(String s) {
      //open-closed principle
    }
    
    public void qix(String s) {
      throw new UnsupportedOperationException("This method should be implemented in subclasses");
    }
    
    /**
     * @param s This string may be use for further computation in overriding classes
     */
    protected void foobar(int a, String s) { // no issue, method is overridable and unused parameter has proper javadoc
      compute(a);
    }
    

    See

    • CERT, MSC12-C. - Detect and remove code that has no effect or is never executed

    There are no issues that match your filters.

    Category
    Status