Java


JAVA.STRUCT.UUMETH : Unused Method (Java)

要旨

A method or constructor is not called.

Methods or constructors never used in the code are often harmless, except for an increase in size of the application. In some cases, however, unused methods are the sign of a stale application interface that needs cleaning or of the necessity to introduce an abstract method.

プロパティ

クラス名 Unused Method (Java)
日本語クラス名 Unused Method (Java)
クラス分類 信頼性 (reliability)
ニーモニック JAVA.STRUCT.UUMETH
カテゴリー
CWE CWE:561 Dead Code
対応言語 Java で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで有効になっています。チェックを無効にするにはプロジェクト設定ファイル (configuration file)に以下の WARNING_FILTER ルールを追加してください。
WARNING_FILTER += discard class="Unused Method (Java)"

In the following code, the implementation of method m inside class A is never called: only its redefinitions inside classes B and C are called.

// Main.java
public class Main {
  public static void main(String[] args) {
    A b = new B();
    A c = new C();

    test(b);
    test(c);
  }

  private static void test(A a) {
    System.out.println(a.m(13));
  }
}

// A.java
public class A {
  public int m(int p) { // "Unreachable Code (Java)" warning issued here 
                        // if JAVA_ANALYSIS_ENTRY_POINTS_MODE is set to ONLY_EXPLICIT_ENTRIES or ONLY_STANDARD_ENTRIES
     return p + 1;
  }
}
// B.java
public class B extends A {
  @Override
  public int m(int p) {
    return p + 2;
  }
}
// C.java
public class C extends A {
  @Override
  public int m(int p) {
    return p * 2;
  }
}

A possible resolution is to introduce an abstract definition for m inside class A and make the class A itself abstract:

// A.java, after modification
public abstract class A {
  public abstract int m(int p);
}

解決法

Verify if the application interface can be simplified or an abstract method could replace a non-abstract method.

関連のある設定ファイルパラメータ

設定ファイルの以下のパラメータがこのワーニングクラスのチェックに影響します。