Java


JAVA.STRUCT.UUVAL.PARAM : Unused Value: Write to Parameter (Java)

Summary

A parameter is assigned but the written value is never used later.

This checker finds assignments to local variables that are useless and could be consequently removed from code, hence obtaining a more efficient program. In some cases, these assignments hide actual bugs in the logic of the code.

Properties

Class Name Unused Value: Write to Parameter (Java)
Significance reliability
Mnemonic JAVA.STRUCT.UUVAL.PARAM
Categories
CWE CWE:563 Assignment to Variable without Use
Availability Available for Java only.
Enabling Checks for this warning class are enabled by default. To disable them, add the following WARNING_FILTER rule to the project configuration file.
WARNING_FILTER += discard class="Unused Value: Write to Parameter (Java)"

Example

// Test.java
import java.util.HashMap;
import java.util.Map;

public class Test {
  private int f;
        
  public Test(int f) {
      f = process(f);                                 /* Unused Value: Write to Parameter (Java) 
                                                       *  warning issued here: programmer probably intended to write into 
                                                       *  this.f, which instead remains uninitialized. 
                                                       */   
      Map<String, Integer> factory = new HashMap<>(); // Unused Value: Variable (Java) warning issued here. 
      factory = buildFactory();
      go(factory);
  }

  private int process(int x) {
      return x * 17 + 13;
  }

  private Map<String, Integer> buildFactory() {
      Map<String, Integer> result = new HashMap<>();
      result.put("value", f);
        
      return result;
  }

  private void go(Map<String, Integer> factory) {
      for (String s: factory.keySet())
          System.out.println(s);
  }
  
  boolean b = false;                                  // Useless Assignment to Default (Java) warning issued here. 
 
  private foo(){
      int n = 0;
      // ...
      n = n;                                          // Useless Assignment (Java) warning issued here. 
      // ...
  }
}

In this example, the programmer should probably write into field f and initialize factory to the return value of buildFactory(), immediately, as follows.

// Test.java, after modification 
import java.util.HashMap;
import java.util.Map;

public class Test {
  private int f;
        
  public Test(int f) {
      this.f = process(f);
      Map<String, Integer> factory = buildFactory();
      go(factory);
  }

  //...
}

Resolution

Remove the assignment and check if it actually hid a more serious algorithmic issue.

Relevant Configuration File Parameters

The following configuration file parameters affect checks for this warning class.