Detectors
This document lists all detectors in SpotBugs.
Standard detectors
These detectors are on by default:
OverridingMethodsMustInvokeSuperDetector
オーバーライドしているメソッドのうち、スーパークラスのメソッドを呼び出すべきものを見つけます。
FindRoughConstants
このディテクタは,ほぼ (しかし,正確ではなく) 同じである Math.PI
のような既知の定数を見つけます。
SynchronizeAndNullCheckField
このディテクタは,同期化されたフィールドを null
チェックしているコードを探します。
InitializeNonnullFieldsInConstructor
このディテクタは,コンストラクタで書き込まれない非 null
フィールドを見つけます。
BooleanReturnNull
このディテクタは,明示的に null
値を返す戻り型が Boolean
のメソッドを探します。
OptionalReturnNull
このディテクタは, Optional
の戻り型が明示的に null
値を返すメソッドを探します。
ConfusionBetweenInheritedAndOuterMethod
このディテクタは,継承されたメソッドと外部のメソッドとの潜在的混同を探します。
NoteUnconditionalParamDerefs
このディテクタは,無条件にパラメータの参照外しが行われるのかを決定するためにアプリケーションのすべてのメソッドを解析します。
この情報は, null
値がメソッドに渡されるかもしれない呼び出し場所を発見するために後の解析パスで使われます。
低速ディテクタです。
SynchronizeOnClassLiteralNotGetClass
このディテクタは,クラスリテラルではなく, getClass
メソッドの結果で同期化するコードを探します。
InfiniteRecursiveLoop
このディテクタは,無限再帰ループを探します。
InfiniteLoop
このディテクタは,無限ループを探します。
VolatileUsage
このディテクタは, volatile
フィールドの使い方のバグパターンを探します。
InheritanceUnsafeGetResource
このディテクタは,クラスが別のパッケージのクラスによって拡張されるなら,予想外の結果をもたらす可能性がある this.getClass().getResource(...)
の使用を探します。
DoInsideDoPrivileged
このディテクタは, doPrivileged
ブロックの中で実行すべきコードを探します。
FinalizerNullsFields
このディテクタは,クラスのフィールドを null
にするファイナライザを探します。
どんな方法でもフィールドを null
にすることは効果がなく,ガベージコレクタの助けになりません。
MutableEnum
このディテクタは,可変列挙型フィールドを探して警告します。
InconsistentAnnotations
このディテクタは,型修飾子が直接適用されるメソッドパラメータとそれらのメソッドパラメータの使い方との間で矛盾を見つけます。
RepeatedConditionals
このディテクタは, (x == 5 || x == 5)
のような繰り返される条件テストを含んでいるコードを探します。
RedundantConditions
このディテクタは,この式 (x >= 10 && x >= 5)
の2番目の条件のような役に立たない条件を含んでいるコードを探します.
FormatStringChecker
このディテクタは,間違った書式文字列をチェックします。
LostLoggerDueToWeakReference
このディテクタは,OpenJDK 1.6の下で異なる振る舞いをするコードを探します。OpenJDK 1.6では, Logger
を保持するのに弱参照が使われます。
EqualsOperandShouldHaveClassCompatibleWithThis
このディテクタは, equals
メソッドを定義しているクラスと互換性がないクラスのインスタンスをオペランドにしてチェックする equals
メソッドをチェックします。
CheckImmutableAnnotation
このディテクタは, net.jcip.annotations.Immutable
または javax.annotation.concurrent.Immutable
というアノテーションが付けられたクラスのルール違反を探します。
DontCatchIllegalMonitorStateException
このディテクタは, IllegalMonitorStateException
をキャッチする try-catch
ブロックを探します。
CloneIdiom
このディテクタは, Cloneable
クラスを書くためのイディオムの違反を探します。
ComparatorIdiom
このディテクタは, Comparator
を実装するクラスを書くためのイディオムの違反を探します。
FindFieldSelfAssignment
このディテクタは,フィールドが同じフィールドの値を読み出して代入される場所を探します。
FindSelfComparison
このディテクタは,値がそれ自身と比較される場所を探します。
FindSelfComparison2
このディテクタは,値がそれ自身と比較される場所を探します。
DroppedException
このディテクタは,例外をキャッチしていますが,何もしていないコードを探します。
LoadOfKnownNullValue
このディテクタは, null
とわかっている値の読み出しを探します。
DumbMethodInvocations
このディテクタは,メソッド (例:substring(0)
) に渡されている間違った引数を探します。
URLProblems
java.net.URL
の equals
と hashCode
メソッドはドメイン名の解決をします。
その結果,これらの操作はかなり高くつきます。このディテクタは,メソッドが呼び出されるかもしれない場所を探します。
DumbMethods
このディテクタは,引数のない String
コンストラクタのような無意味なメソッドの呼び出しを探します。
BC: equals メソッドは引数の型を仮定すべきではない (BC_EQUALS_METHOD_SHOULD_WORK_FOR_ALL_OBJECTS)
DMI: 正確に表されない double から構築された BigDecimal (DMI_BIGDECIMAL_CONSTRUCTED_FROM_DOUBLE)
DMI: hasNext メソッドで next メソッドを呼び出している (DMI_CALLING_NEXT_FROM_HASNEXT)
DMI: int に対して Double.longBitsToDouble() を呼び出している (DMI_LONG_BITS_TO_DOUBLE_INVOKED_ON_INT)
DMI: Random オブジェクトが作成され1度しか使われない (DMI_RANDOM_USED_ONLY_ONCE)
Dm: Thread オブジェクトが Runnable が期待されているところに渡されている (DMI_THREAD_PASSED_WHERE_RUNNABLE_EXPECTED)
Dm: EasyMock メソッドへの役に立たない/無意味な呼び出し (DMI_VACUOUS_CALL_TO_EASYMOCK_METHOD)
Bx: プリミティブを解析するためのボクシング/アンボクシング (DM_BOXED_PRIMITIVE_FOR_PARSING)
Bx: toString メソッドを呼び出すためだけにボクシングされたプリミティブを割り当てている (DM_BOXED_PRIMITIVE_TOSTRING)
Dm: Condition で呼び出された wait メソッドを監視している (DM_MONITOR_WAIT_ON_CONDITION)
Dm: クラスオブジェクトを得るためだけにインスタンスを作成しているメソッド (DM_NEW_FOR_GETCLASS)
Dm: 整数の乱数を生成するためには nextDouble メソッド ではなく nextInt メソッドを使用する (DM_NEXTINT_VIA_NEXTDOUBLE)
Dm: 危険なメソッド runFinalizersOnExit を呼び出しているメソッド (DM_RUN_FINALIZERS_ON_EXIT)
Dm: 効率が悪い new String(String) コンストラクタを呼び出しているメソッド (DM_STRING_CTOR)
Dm: 効率が悪い new String() コンストラクタを呼び出しているメソッド (DM_STRING_VOID_CTOR)
INT: int 値と long 定数との間違った比較 (INT_BAD_COMPARISON_WITH_INT_VALUE)
INT: 負ではない値と負の定数またはゼロとの間違った比較 (INT_BAD_COMPARISON_WITH_NONNEGATIVE_VALUE)
NP: readLine メソッドの結果をすぐに利用している (NP_IMMEDIATE_DEREFERENCE_OF_READLINE)
RV: 符号付き32ビットハッシュコードの絶対値を計算する間違った試み (RV_ABSOLUTE_VALUE_OF_HASHCODE)
RV: 符号付き整数の乱数の絶対値を計算する間違った試み (RV_ABSOLUTE_VALUE_OF_RANDOM_INT)
SW: Swing メソッドは AWT イベントディスパッチスレッドから呼び出す必要がある (SW_SWING_METHODS_INVOKED_IN_SWING_THREAD)
NumberConstructor
このディテクタは, Number
コンストラクタのプリミティブ型の引数による呼び出しを探します。
FindSqlInjection
このディテクタは, switch
文で定数文字列以外の何かが引数として渡される SQL 文の execute
メソッドの呼び出しを探すためにデータフロー解析を使います。
FindDoubleCheck
このディテクタは,ダブルチェックロッキングのインスタンスを探します。
FindFinalizeInvocations
このディテクタは, finalize
メソッドの呼び出しと他のファイナライザ関連の問題を探します。
FindHEmismatch
このディテクタは, hashCode
メソッドと equals
メソッドの定義の問題を探します。
Eq: compareTo(...) メソッドを定義して Object.equals() を使用しているクラス (EQ_COMPARETO_USE_OBJECT_EQUALS)
Eq: スーパークラスの equals メソッドをオーバーライドしていないクラス (EQ_DOESNT_OVERRIDE_EQUALS)
Eq: 列挙型は共変な equals メソッドを定義している (EQ_DONT_DEFINE_EQUALS_FOR_ENUM)
Eq: equals(Object) メソッドをオーバーライドしていない equals メソッドの定義 (EQ_OTHER_NO_OBJECT)
Eq: Object.equals(Object) をオーバーライドしていない equals メソッドの定義 (EQ_OTHER_USE_OBJECT)
Eq: 共変な equals メソッドを定義して,Object.equals(Object) を継承している (EQ_SELF_USE_OBJECT)
HE: equals メソッドは定義していますが hashCode メソッドは定義していないクラス (HE_EQUALS_NO_HASHCODE)
HE: equals メソッドを定義して Object.hashCode() を使用しているクラス (HE_EQUALS_USE_HASHCODE)
HE: hashCode メソッドを定義していますが equals メソッドは定義していないクラス (HE_HASHCODE_NO_EQUALS)
HE: hashCode メソッドを定義して Object.equals() を使用しているクラス (HE_HASHCODE_USE_OBJECT_EQUALS)
HE: equals メソッドを継承して Object.hashCode() を使用しているクラス (HE_INHERITS_EQUALS_USE_HASHCODE)
HE: ハッシュ化されたコンテキストでハッシュ化できないクラスの使用がシグネチャで宣言されている (HE_SIGNATURE_DECLARES_HASHING_OF_UNHASHABLE_CLASS)
HE: ハッシュデータ構造で hashCode メソッドのないクラスを使用している (HE_USE_OF_UNHASHABLE_CLASS)
OverridingEqualsNotSymmetrical
このディテクタは,同値関係が対称的ではないかもしれないスーパークラスの equals
メソッドをオーバーライドする equals
メソッドを探します。
FindNakedNotify
このディテクタは,可変オブジェクトの状態を変更するとは思えない notify
メソッドの呼び出しを探します。
FindReturnRef
このディテクタは,可変静的データを返すメソッドを探します。
EI: May expose internal representation by returning a buffer sharing non-public data (EI_EXPOSE_BUF)
EI: 可変オブジェクトへの参照を返すことによって内部表現を暴露するかもしれないメソッド (EI_EXPOSE_REP)
EI2: 可変オブジェクトへの参照を取り込むことによって内部表現を暴露するかもしれないメソッド (EI_EXPOSE_REP2)
MS: static フィールドに可変オブジェクトを格納することによって,内部の静的状態を暴露するかもしれないメソッド (EI_EXPOSE_STATIC_REP2)
MS: May expose internal representation by returning a buffer sharing non-public data (MS_EXPOSE_BUF)
MS: 配列または可変オブジェクトを返すことによって内部表現を暴露するかもしれない public static メソッド (MS_EXPOSE_REP)
FindRunInvocations
このディテクタは, Thread.run()
の呼び出しを探します。
高速ディテクタです。
SwitchFallthrough
このディテクタは,フォールスルーがある switch
文を探します。
FindSpinLoop
このディテクタは,フィールドからの読み取りをするスピンループを探します。
FindNonShortCircuit
このディテクタは,非短絡論理演算子の疑わしい使用を探します(||
と &&
の代わりに |
と &
)。
FindTwoLockWait
このディテクタは,2つ以上のロックを保持している状態で wait
メソッドの呼び出しを探します。
低速ディテクタです。
FindUnconditionalWait
このディテクタは,条件文,またはループの中にない wait
メソッドの呼び出しを探します。
FindUninitializedGet
このディテクタは,コンストラクタで初期化されていないフィールドの読み出しを探します。
DontUseEnum
このディテクタは,フィールドとメソッドが J2SE 5.0のキーワードである assert
や enum
を名前として使用していないことをチェックします。
FindUnsyncGet
このディテクタは,set メソッドは同期化していて get メソッドは同期化していない get メソッドと set メソッドを探します。
InitializationChain
このディテクタは,潜在的循環クラス初期化依存関係を探します。
IteratorIdioms
このディテクタは, Iterator
クラスの定義方法の問題を探します。
PreferZeroLengthArrays
このディテクタは,配列か明示的に null
参照を返すメソッドを探します。
長さが0の配列を返すことは,このコンテキストにおいて null
参照を返すことよりも一般的に好ましいです。
SynchronizingOnContentsOfFieldToProtectField
このディテクタは,フィールドの更新をガードするためにフィールドを同期化しているように思われるコードを探します。
MutableLock
このディテクタは,変更されたフィールドから読み込まれるオブジェクトの同期化を探します。
FindUselessObjects
このディテクタは役に立たないオブジェクトを探します。
MutableStaticFields
このディテクタは,悪意のあるコードによって変更されるかもしれない static
フィールドを探します。
Naming
このディテクタは,疑わしい名前のメソッドを探します。
Nm: クラスは equal(Object) を定義しています。equals(Object) にすべきですか? (NM_BAD_EQUAL)
Nm: 例外クラスのように命名されているが,クラスは Exception から派生されていない (NM_CLASS_NOT_EXCEPTION)
Nm: クラスは hashcode() を定義しています。hashCode() にすべきですか? (NM_LCASE_HASHCODE)
Nm: クラスは tostring() を定義しています。toString() にすべきですか? (NM_LCASE_TOSTRING)
Nm: クラス名は実装されたインタフェースの単純名を遮るべきではない (NM_SAME_SIMPLE_NAME_AS_INTERFACE)
Nm: クラス名はスーパークラスの単純名を遮るべきではない (NM_SAME_SIMPLE_NAME_AS_SUPERCLASS)
Nm: パラメータの間違ったパッケージのためにスーパークラスのメソッドをオーバーライドしていないメソッド (NM_WRONG_PACKAGE)
Nm: パラメータの間違ったパッケージのためにスーパークラスのメソッドをオーバーライドしていないメソッド (NM_WRONG_PACKAGE_INTENTIONAL)
ReadReturnShouldBeChecked
このディテクタは,戻り値が無視される InputStream.read()
または InputStream.skip()
の呼び出しを探します。
SerializableIdiom
このディテクタは, Serializable
クラスの実装の潜在的な問題を探します。
Se: 非直列化可能な値を直列化可能クラスのインスタンスフィールドに格納している (SE_BAD_FIELD_STORE)
Se: 直列化機構のために private にしなければならないメソッド (SE_METHOD_MUST_BE_PRIVATE)
Se: serialVersionUID が final ではない (SE_NONFINAL_SERIALVERSIONID)
Se: serialVersionUID が long ではない (SE_NONLONG_SERIALVERSIONID)
Se: serialVersionUID が static ではない (SE_NONSTATIC_SERIALVERSIONID)
SnVI: Serializable なクラスが serialVersionUID を定義していない (SE_NO_SERIALVERSIONID)
Se: Serializable なクラスのスーパークラスで,引数なしコンストラクタを定義していない (SE_NO_SUITABLE_CONSTRUCTOR)
Se: Externalizable なクラスが引数なしコンストラクタを定義していない (SE_NO_SUITABLE_CONSTRUCTOR_FOR_EXTERNALIZATION)
Se: Prevent overwriting of externalizable objects (SE_PREVENT_EXT_OBJ_OVERWRITE)
Se: サブクラスで継承できない private な readResolve メソッド (SE_PRIVATE_READ_RESOLVE_NOT_INHERITED)
Se: readResolve メソッドが static メソッドとして宣言されている (SE_READ_RESOLVE_IS_STATIC)
Se: readResolve メソッドの戻り値の型が Object で宣言されていない (SE_READ_RESOLVE_MUST_RETURN_OBJECT)
Se: 直列化復元によって設定されない transient フィールド (SE_TRANSIENT_FIELD_NOT_RESTORED)
Se: Serializable ではないクラスの transient フィールド (SE_TRANSIENT_FIELD_OF_NONSERIALIZABLE_CLASS)
WS: writeObject メソッドは同期化しているがその他のメソッドは同期化していないクラス (WS_WRITEOBJECT_SYNC)
StartInConstructor
このディテクタは,スレッドを開始するコンストラクタを探します。
FindBadForLoop
このディテクタは,間違った for
ループを探します。
ExplicitSerialization
このディテクタは,このクラスが本当に直列化されるという証拠として, readObject
と writeObject
による明示的な直列化を探します。
:ref:``
UnreadFields
このディテクタは,値が決して読み出されないフィールドを探します。
NP: 書き込まれていない public または protected フィールドの読み出し (NP_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD)
SIC: 名前付き static 内部クラスにリファクタリングできるかもしれない (SIC_INNER_SHOULD_BE_STATIC_ANON)
SIC: static 内部クラスにリファクタリングできるかもしれない (SIC_INNER_SHOULD_BE_STATIC_NEEDS_THIS)
SIC: 非 static 内部クラスとスレッドローカルのデッドロック (SIC_THREADLOCAL_DEADLY_EMBRACE)
ST: インスタンスメソッドから static フィールドへの書き込み (ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD)
UrF: 読み出されない public または protected フィールド (URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD)
UuF: 未使用の public または protected フィールド (UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD)
UwF: コンストラクタで初期化されていないフィールドを null チェックなしで null 値を利用している (UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR)
UwF: 書き込まてれいない public または protected フィールド (UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD)
WaitInLoop
このディテクタは,ループの中にない wait
メソッドの呼び出しを探します。
FindComparatorProblems
このディテクタは, Comparator.compare
または Comparable.compareTo
の実装における問題を探します。
FindNullDeref
このディテクタは, NullPointerException
が発生するかもしれない場所を探します。
また, null
に対する参照値の冗長な比較を探します。
低速ディテクタです。
NP: readLine メソッドの結果が null なのか確かめないで値を利用している (NP_DEREFERENCE_OF_READLINE_VALUE)
NP: equals メソッドは null の引数をチェックしていない (NP_EQUALS_SHOULD_HANDLE_NULL_ARGUMENT)
NP: null 値を例外経路で利用することが保証されている (NP_GUARANTEED_DEREF_ON_EXCEPTION_PATH)
NP: メソッド呼び出しは非 null パラメータに null を渡している (NP_NONNULL_PARAM_VIOLATION)
NP: null を返すかもしれないメソッドが @Nonnull 宣言されている (NP_NONNULL_RETURN_VIOLATION)
NP: null 値を例外経路で利用している可能性がある (NP_NULL_ON_SOME_PATH_EXCEPTION)
NP: null になっている可能性があるメソッドの戻り値を利用している (NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE)
NP: null 値を実行不可能かもしれない分岐で利用している可能性がある (NP_NULL_ON_SOME_PATH_MIGHT_BE_INFEASIBLE)
NP: メソッド呼び出しは非 null パラメータに null を渡している (NP_NULL_PARAM_DEREF)
NP: メソッド呼び出しは非 null パラメータに null を渡している (NP_NULL_PARAM_DEREF_ALL_TARGETS_DANGEROUS)
NP: 非 null パラメータに null を渡している非仮想メソッドの呼び出し (NP_NULL_PARAM_DEREF_NONVIRTUAL)
NP: @Nonnull アノテーションが付けられたフィールドに null を格納している (NP_STORE_INTO_NONNULL_FIELD)
NP: null を返すかもしれない toString メソッド (NP_TOSTRING_COULD_RETURN_NULL)
RCN: 非 null 値と null 値との冗長な比較 (RCN_REDUNDANT_COMPARISON_OF_NULL_AND_NONNULL_VALUE)
RCN: 2つの null 値の冗長な比較 (RCN_REDUNDANT_COMPARISON_TWO_NULL_VALUES)
RCN: null ではないことがわかっている値の冗長な null チェック (RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE)
RCN: null とわかっている値の冗長な null チェック (RCN_REDUNDANT_NULLCHECK_OF_NULL_VALUE)
RCN: 既に利用していた値の null チェック (RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE)
FindNullDerefsInvolvingNonShortCircuitEvaluation
このディテクタは, NullPointerException
が発生するかもしれない場所を探します。
非短絡評価の使用はありふれたテクニックで失敗の原因になります。
FindOpenStream
このディテクタは,メソッドから脱出しないで,メソッドからのすべての経路でクローズされるように見えない I/O ストリームオブジェクトを探します。
低速ディテクタです。
FindUselessControlFlow
このディテクタは,効果がない制御フロー文を探します。
FindUnreleasedLock
このディテクタは,JSR-166(java.util.concurrent) のロックを獲得したのにメソッドからのすべての経路で解除されないロックを探します。
中速ディテクタです。
補助クラスパスに java.util.concurrent パッケージ (またはパッケージ自体を解析している) が必要であることに注意してこのディテクタを使用してください
FindRefComparison
このディテクタは,2つの参照値を ==
や !=
演算子で比較している場所を探します。
java.lang.String
のような型のクラスの参照値を比較することは一般的に誤りです。
EC: equals(...) メソッドを使用して互換性のない配列を比較している (EC_INCOMPATIBLE_ARRAY_COMPARE)
EC: equals メソッドを呼び出して無関係のクラスとインタフェースを比較している (EC_UNRELATED_CLASS_AND_INTERFACE)
EC: equals メソッドを呼び出して異なる型のインタフェースを比較している (EC_UNRELATED_INTERFACES)
EC: 参照等価性を使用して異なる型を比較している (EC_UNRELATED_TYPES_USING_POINTER_EQUALITY)
ES: String パラメータを == や != を使用して比較している (ES_COMPARING_PARAMETER_STRING_WITH_EQ)
ES: String オブジェクトを == や != を使用して比較している (ES_COMPARING_STRINGS_WITH_EQ)
RC: Boolean 値の疑わしい参照比較 (RC_REF_COMPARISON_BAD_PRACTICE_BOOLEAN)
FindMismatchedWaitOrNotify
このディテクタは,現在ロックされているオブジェクトで作成されるように見えない wait
メソッド, notify
メソッド, notifyAll
メソッドの呼び出しを探します。
このディテクタは,まだ開発中で,あまりに多くの誤検出が発生するので,無効にされています。
FindEmptySynchronizedBlock
このディテクタは,空の synchronized
ブロックを探します。
FindInconsistentSync2
このディテクタは,ロックに関して一貫性のない方法でアクセスされるフィールドを探します。
低速ディテクタです。
FindLocalSelfAssignment2
このディテクタは,ローカル変数の自己代入を探します。
IncompatMask
このディテクタは,疑わしいビット論理式を探します。
LazyInit
このディテクタは,フィールドが volatile
ではないフィールドの遅延初期化を探します。
中速ディテクタです。
FindJSR166LockMonitorenter
このディテクタは,JSR-166 のロックで実行される通常の同期化を探します。
中速ディテクタです。
FindUncalledPrivateMethods
このディテクタは,決して呼び出されない private
メソッドを探します。
UncallableMethodOfAnonymousClass
このディテクタは,無名内部クラスに定義されたメソッドで,スーパークラスのメソッドをオーバーライドすることを意図していますが,実際はオーバーライドになっていないメソッドを探します。
StringConcatenation
このディテクタは,+を使ったループによる文字列の連結を探します。
InvalidJUnitTest
このディテクタは,不正な形式の JUnit テストを探します。
BadlyOverriddenAdapter
このディテクタは, Adapter
クラスを拡張して,間違ったシグネチャで Listener
メソッドをオーバーライドするコードを探します。
BadResultSetAccess
このディテクタは,列インデックス番号が0の ResultSet
の getXXX
または setXXX
メソッドの呼び出しを探します。
ResultSet
の列インデックス番号は1で始まるので,これは常に間違いです。
SuperfluousInstanceOf
このディテクタは,静的に判定される instanceof
演算子を使用している型チェックを探します。
SuspiciousThreadInterrupted
このディテクタは,非スタティックなコンテキストから Thread.interrupted()
の呼び出しを探します。
Thread.currentThread().interrupted()
から呼び出されるなら,役に立たない行為なので Thread.interrupted()
を使用します。
しかしながら, interrupted
メソッドは常にカレントスレッドで呼び出されるので,任意のスレッドオブジェクトで呼び出すのはほぼ間違いなく誤りです。
FindDeadLocalStores
このディテクタは,その後,決して読み出されないローカル変数への代入を探します。
中速ディテクタです。
FindMaskedFields
このディテクタは,メソッドで定義されたローカル変数によって隠されるフィールドを探します。
WrongMapIterator
このディテクタは, keySet
イテレータから取り出されたキーを使用して Map
エントリの値にアクセスするコードを探します。
InstantiateStaticClass
このディテクタは, static
メソッドしか定義していないクラスのオブジェクトを作成しているコードを探します。
RuntimeExceptionCapture
このディテクタは,ブロックの中のコードが例外をスローしないのに例外をキャッチする catch
節を探します。
DontCatchNullPointerException
Nullpointer exceptions should not be caught.
FindFloatEquality
このディテクタは,浮動小数点の等価式を探します。
高速ディテクタです。
FindUnsatisfiedObligation
このディテクタは,メソッドからのすべての経路でクリーンアップされない入出力ストリームとデータベースリソースを探します。
低速ディテクタです。
UnnecessaryMath
このディテクタは,計算結果が静的に知られている値を計算するために java.lang.Math
の static
メソッドを呼び出すコードを探します。
その代わりに定数を使用する方がより高速で,ときにはより正確です。
RedundantInterfaces
このディテクタは,スーパークラスと同じインタフェースを実装すると宣言しているサブクラスを探します。 スーパークラスがインタフェースを実装しているので,サブクラスで同じことをするのは冗長です。
MultithreadedInstanceAccess
このディテクタは,Struts フレームワークを実装する際の潜在的な問題を探します。
BadUseOfReturnValue
このディテクタは,メソッドの戻り値が null
ではないことをチェックした後で捨てるケースを探します。
MethodReturnCheck
このディテクタは,戻り値が疑わしく無視されるメソッドの呼び出しを探します。
IDivResultCastToDouble
このディテクタは,整数除算の結果が double
にキャストされる場所を探します。
多くの場合,意味されたことは,整数オペランドを double
にキャストしてから除算を実行することでした。
FindBadCast2
このディテクタは,データフロー解析を使用してオブジェクト参照の間違ったキャストを探します。
FindUseOfNonSerializableValue
このディテクタは,それらが直列化可能であることを要求するコンテキストで,非 Serializable
オブジェクトの使用を探します。
BadSyntaxForRegularExpression
このディテクタは,無効な構文がある正規表現を探します。
VarArgsProblems
このディテクタは,J2SE 5.0の可変長引数に起因する問題を探します。
FindPuzzlers
このディテクタは,Joshua Bloch と Neal Gafter が『Java Puzzlers』で言及した多方面にわたるささいな誤りを探します。
Bx: プリミティブ値がボクシングされて,すぐにアンボクシングされる (BX_BOXING_IMMEDIATELY_UNBOXED)
Bx: プリミティブ値がプリミティブ型の型変換をするためにボクシングされて,アンボクシングされる (BX_BOXING_IMMEDIATELY_UNBOXED_TO_PERFORM_COERCION)
Bx: プリミティブ値が3項演算子のためにアンボクシングされて,型変換される (BX_UNBOXED_AND_COERCED_FOR_TERNARY_OPERATOR)
Bx: ボクシングされた値がアンボクシングされて,すぐに再ボクシングされる (BX_UNBOXING_IMMEDIATELY_REBOXED)
DMI: エントリセットの要素を加えることは,Entry オブジェクトの再利用のために失敗するかもしれない (DMI_ENTRY_SETS_MAY_REUSE_ENTRY_OBJECTS)
DMI: 配列で hashCode メソッドを呼び出している (DMI_INVOKING_HASHCODE_ON_ARRAY)
USELESS_STRING: 名前のない配列で toString メソッドを呼び出している (DMI_INVOKING_TOSTRING_ON_ANONYMOUS_ARRAY)
USELESS_STRING: 配列で toString メソッドを呼び出している (DMI_INVOKING_TOSTRING_ON_ARRAY)
BSHIFT: 32ビット int の-31から31の範囲を超えた量によるシフト (ICAST_BAD_SHIFT_AMOUNT)
ICAST: 整数乗算の結果を long にキャストしている (ICAST_INTEGER_MULTIPLY_CAST_TO_LONG)
BSHIFT: 符号なし右シフトを short/byte にキャストしている (ICAST_QUESTIONABLE_UNSIGNED_RIGHT_SHIFT)
IC: スーパークラスは初期化中にサブクラスを使用している (IC_SUPERCLASS_USES_SUBCLASS_DURING_INITIALIZATION)
IJU: run メソッドでの JUnit アサーションは JUnit によって通知されない (IJU_ASSERT_METHOD_INVOKED_FROM_RUN_METHOD)
IM: 平均の計算はオーバーフローする可能性がある (IM_AVERAGE_COMPUTATION_COULD_OVERFLOW)
PZ: 繰り返しでエントリオブジェクトを再利用しない (PZ_DONT_REUSE_ENTRY_OBJECTS_IN_ITERATORS)
RV: compareTo()/compare() の結果を無効にする (RV_NEGATING_RESULT_OF_COMPARETO)
IntCast2LongAsInstant
このディテクタは,エポックからミリ秒を記述する32ビット値の使い方を見つけます。
FindSleepWithLockHeld
このディテクタは,ロックを保持している状態での Thread.sleep()
の呼び出しを探します。
低速ディテクタです。
DuplicateBranches
このディテクタは,2つの分岐に同じコードがある if
/else
または switch
文を探します。
これは多くの場合,2つの分岐に同じコードをコピー & ペーストしていることが片方の分岐の間違ったロジックの原因になります。
XMLFactoryBypass
このディテクタは,XML インタフェースを実装したクラスのインスタンスを直接生成しているコードを探します。 これらのオブジェクトを作成するために提供されたファクトリパターンを使用するのではなく,特定の実装にコードを結びつけます。
ConfusedInheritance
このディテクタは, protected
メンバを宣言する final
クラスを探します。
このクラスは派生させることができないので, protected
メンバの使用は正しくありません。
アクセス権は,メンバの正しい意図を表すために public
か private
に変更すべきです。
おそらく,新しいパラダイムにクラスのすべてを完全に変更することではなく,クラスの使用中の変化が原因となりました。
QuestionableBooleanAssignment
このディテクタは,条件式で変数にリテラルブール値の単純な代入を探します。
AppendingToAnObjectOutputStream
このディテクタは,オブジェクト出力ストリームに追加しようとする試みを探します。
StaticCalendarDetector
Calendar
は,マルチスレッドでの使用は本質的に安全ではないので,このディテクタは, java.util.Calendar
や java.text.DateFormat
(サブクラスも) の static
フィールドについて警告します。
CheckTypeQualifiers
このディテクタは,JSR-305 の型修飾子アノテーションで特定されたプロパティの違反をチェックします。
TQ: 型修飾子アノテーションが付けられた値がその修飾子を付けてはならない値を必要とする場所で使われている (TQ_ALWAYS_VALUE_USED_WHERE_NEVER_REQUIRED)
TQ: 互換性のない型修飾子による比較値 (TQ_COMPARING_VALUES_WITH_INCOMPATIBLE_TYPE_QUALIFIERS)
TQ: 値は型修飾子を必要としているが,不明としてマークされている (TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_ALWAYS_SINK)
TQ: 値は型修飾子を必要としないが,不明としてマークされている (TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_NEVER_SINK)
TQ: 型修飾子を付けていないかもしれない値がその型修飾子を必要とする方法で常に使われている (TQ_MAYBE_SOURCE_VALUE_REACHES_ALWAYS_SINK)
TQ: 型修飾子を付けているかもしれない値がその型修飾子を禁止する方法で常に使われている (TQ_MAYBE_SOURCE_VALUE_REACHES_NEVER_SINK)
TQ: 型修飾子アノテーションが付けられていない値がその修飾子が付けられた値を必要とする場所で使われている (TQ_NEVER_VALUE_USED_WHERE_ALWAYS_REQUIRED)
TQ: 型修飾子がない値が修飾子を必要とする場所で使われている (TQ_UNKNOWN_VALUE_USED_WHERE_ALWAYS_STRICTLY_REQUIRED)
CrossSiteScripting
このディテクタは XSS 脆弱性の自明で露骨なケースを探します。
DontIgnoreResultOfPutIfAbsent
このディテクタは, ConcurrentMap
の putIfAbsent
メソッドの結果が無視されるなら,2番目の引数として渡された値が再利用されていないことをチェックします。
ReadOfInstanceFieldInMethodInvokedByConstructorInSuperclass
このディテクタは,スーパークラスのためのコンストラクタから呼び出されるメソッドをチェックします。
AtomicityProblem
このディテクタは,アトミックに実行されない並行抽象の操作シーケンス(たとえば,get/put)を見つけます。
DefaultEncodingDetector
このディテクタは,ユーザのデフォルトプラットフォームエンコーディングを使用して, byte
から String
(または String
から byte
) に変換するメソッドの呼び出しをチェックします。
これはアプリケーションの振る舞いがプラットフォーム間で異なる原因となります。
CheckRelaxingNullnessAnnotation
このディテクタは,オーバライドメソッドが 戻り値またはパラメータの @CheckForNull
(@Nonnull
で作られた) で @Nonnull
(@CheckForNull
で作られた) を緩和していないことをチェックします。
DontAssertInstanceofInTests
このディテクタは、インスタンスの型を instanceof 演算子を使って検証しているJUnitテストをチェックします。
instanceof 演算子を使うと "false is not true" という直感的でないメッセージを 伴う例外が記録されます。これは ClassCastException などよりも情報に乏しいため、他の手法を 用いることが推奨されます。
このディテクタは高速に動作します。
FindBadEndOfStreamCheck
Detector for patterns where the return value of java.io.FileInputStream.read() or java.io.FileReader.read() is converted before checking against -1.
Both methods return an int. If this int is converted to byte (in the case of FileInputStream.read()) then -1 and the byte 0xFF become indistinguishable. If it is converted to char (in the case of FileReader.read()) then -1 becomes 0xFFFF which is Character.MAX_VALUE since characters are unsigned in Java.
ReflectionIncreaseAccessibility
Detector for public methods instantiating a class they get in their parameter.
An attacker may invoke this method with a class that has no public constructor.
FindOverridableMethodCall
Detector for patterns where a constructor, a clone(), or a readObject() method calls an overridable method.
Calling an overridable method from a constructor may result in the use of uninitialized data. Calling such method from a clone(), or readObject() method is insecure.
ConstructorThrow
Finds constructors that throw exceptions.
DontUseFloatsAsLoopCounters
Checks for floats in loop counters.
PermissionsSuper
Checks method getPermissions() of classes implementing interface java.security.SecureClassLoader. The methods must always call super.getPermissions() to get the initial value of the object which they return at the end.
FindPotentialSecurityCheckBasedOnUntrustedSource
Looks for potential security checks on an untrusted source before entering a doPrivileged block.
FindAssertionsWithSideEffects
Finds assertions with side effects.
FindPublicAttributes
This detector looks for public attributes that are also written by the methods of the class.
FindVulnerableSecurityCheckMethods
Methods that perform security checks should be prevented from being overridden, so they must be declared as private or final. Otherwise, these methods can be compromised when a malicious subclass overrides them and omits the checks.
FindArgumentAssertions
Finds assertions that validate public method arguments.
UnnecessaryEnvUsage
Checks for calls of System.getenv(), where the variable has an equivalent Java property too.
MultipleInstantiationsOfSingletons
This detector looks for violations of the idioms for writing classes using singleton design pattern.
Disabled detectors
These detectors are off by default:
EmptyZipFileEntry
このディテクタは,空の zip ファイルエントリの作成を探します。
中速ディテクタです。
CallToUnsupportedMethod
このディテクタは,サポートされていないメソッドの呼び出しを探します。
CovariantArrayAssignment
このディテクタは,実行時に ArrayStoreException
を引き起こすかもしれない Object[] array = new String[10]
のような共変配列代入を探します。
InefficientInitializationInsideLoop
このディテクタは,パフォーマンスを向上させるために外側に移せるループ内で初期化しているオブジェクトを探します。
InefficientIndexOf
このディテクタは, String.indexOf(String)
または String.lastIndexOf(String)
を使用して定数に長さ1の文字列を渡すコードを探します。
より効率的な整数実装を使用することを推奨します。
高速ディテクタです。
InefficientToArray
このディテクタは, toArray(T[] a)
メソッドに長さが0の配列を渡してコレクションを配列に変換するコードを探します。
BadAppletConstructor
このディテクタは, Applet
スタブに依存する親 Applet
でメソッドを呼び出す Applet
コンストラクタを探します。
このスタブは init
メソッドの前まで初期化されないので,これらのメソッドはコンストラクタで失敗します。
FindCircularDependencies
このディテクタは,クラス間の循環依存関係を探します。
PublicSemaphores
このディテクタは,同期化して this
に対して wait
メソッド, notify
メソッド, notifyAll
メソッドを使用する public
クラスを探します。
これは public
クラスの同期化実装を暴露することになります。
クラスのクライアントは,そのクラスのインスタンスをそれ自身の同期オブジェクトとして使用し,ベース実装に大惨事をもたらします。
InefficientMemberAccess
このディテクタは,所有クラスの private
フィールドに書き込んでいる内部クラスを探します。
この場合,コンパイラは必ずこのフィールドへ書き込むことに使われるアクセサメソッドを生成します。
可視性を protected
に緩和することは,フィールドに直接書き込むことを可能にします。
UselessSubclassMethod
このディテクタは,スーパークラスで定義されたメソッドを実装して,スーパークラスのメソッドにパラメータをそのまま渡しているだけのサブクラスを探します。 これらのメソッドは除去できます。
CheckExpectedWarnings
このディテクタは,@ExpectedWarning と @NoWarning アノテーションをチェックします。 このディテクタは,SpotBugs をテストするためだけに使われます。
ThrowingExceptions
This detector looks for methods throwing RuntimeException and methods that have Exception or Throwable in their throws clause.
DontReusePublicIdentifiers
Checks for reuse of public identifiers, public utility classes, interfaces, or packages in the Java Standard Library.