Skip to content

Implement impactful checks from IntelliJ InspectionGadgets plugin #92

@cushon

Description

@cushon

Original issue created by aeagle22206 on 2013-02-25 at 02:11 AM


Full list of checks in the plugin:
(to figure out what each means, have to look at sources: https://github.com/JetBrains/intellij-community/tree/master/plugins/InspectionGadgets )

<!--group.names.abstraction.issues-->

CastToConcreteClass
ClassReferencesSubclass
DeclareCollectionAsInterface
FeatureEnvy
InstanceVariableOfConcreteClass
InstanceofChain
InstanceofInterfaces
InstanceofThis
LocalVariableOfConcreteClass
MagicNumber
MethodOnlyUsedFromInnerClass
MethodReturnOfConcreteClass
OverlyStrongTypeCast
ParameterOfConcreteClass
PublicMethodNotExposedInInterface
StaticMethodOnlyUsedInOneClass
StaticVariableOfConcreteClass
TypeMayBeWeakened
    <!--group.names.assignment.issues-->
AssignmentToCatchBlockParameter
AssignmentToCollectionFieldFromParameter
AssignmentToDateFieldFromParameter
AssignmentToForLoopParameter
AssignmentToMethodParameter
AssignmentToNull
AssignmentToStaticFieldFromInstanceMethod
AssignmentUsedAsCondition
IncrementDecrementUsedAsExpression
NestedAssignment
ReplaceAssignmentWithOperatorAssignment
    <!--group.names.bitwise.operation.issues-->
IncompatibleMask
PointlessBitwiseExpression
ShiftOutOfRange
    <!--group.names.probable.bugs-->
ArchaicSystemPropertyAccess
ArrayEquality
ArrayEquals
ArrayHashCode
AssertWithSideEffects
ConstantAssertCondition
CastConflictsWithInstanceof
CastToIncompatibleInterface
ClassNewInstance
CollectionAddedToSelf
ComparableImplementedButEqualsNotOverridden
ComparatorMethodParameterNotUsed
CompareToUsesNonFinalVariable
CovariantCompareTo
CovariantEquals
EmptyInitializer
EmptyStatementBody
EqualsBetweenInconvertibleTypes
EqualsUsesNonFinalVariable
EqualsWhichDoesntCheckParameterClass
ThrowableInstanceNeverThrown
ForLoopThatDoesntUseLoopVariable
HashCodeUsesNonFinalVariable
IgnoreResultOfCall
ImplicitArrayToString
InfiniteRecursion
InstanceofIncompatibleInterface
InstantiationOfUtilityClass
IteratorHasNextCallsIteratorNext
IteratorNextDoesNotThrowNoSuchElementException
MalformedFormatString
MalformedRegex
MalformedXPath
MathRandomCastToInt
MismatchedArrayReadWrite
MismatchedCollectionQueryUpdate
MismatchedStringBuilderQueryUpdate
MisspelledCompareTo
MisspelledHashcode
MisspelledEquals
MisspelledToString
NewStringBufferWithCharArgument
NonShortCircuitBoolean
NullArgumentToVariableArgMethod
NumberEquality
ObjectEquality
ObjectEqualsNull
ObjectToString
PrimitiveArrayArgumentToVariableArgMethod
ReflectionForUnavailableAnnotation
ReplaceAllDot
ResultOfObjectAllocationIgnored
ResultSetIndexZero
ReturnNull
StaticCallOnSubclass
StringConcatenationInFormatCall
StringConcatenationInMessageFormatCall
StringConcatenationMissingWhitespace
StaticFieldReferenceOnSubclass
StringEquality
SubtractionInCompareTo
SuspiciousArrayCast
SuspiciousIndentAfterControlStatement
SuspiciousSystemArraycopy
SuspiciousToArrayCall
TextLabelInSwitchStatement
ThrowableResultOfMethodCallIgnored
UseOfPropertiesAsHashtable
VariableNotUsedInsideIf
    <!--group.names.class.structure-->
AnonymousInnerClass
ClassInTopLevelPackage
ClassInitializer
ClassMayBeInterface
ClassNameDiffersFromFileName
ConstantDeclaredInAbstractClass
ConstantDeclaredInInterface
EmptyClass
FinalClass
FinalMethodInFinalClass
FinalMethod
FinalPrivateMethod
FinalStaticMethod
InnerClassOnInterface
LimitedScopeInnerClass
ListenerMayUseAdapter
MarkerInterface
MissingDeprecatedAnnotation
MissingOverrideAnnotation
MultipleTopLevelClassesInFile
NonFinalFieldInEnum
NonFinalUtilityClass
NoopMethodInAbstractClass
ProtectedMemberInFinalClass
PublicConstructor
PublicConstructorInNonPublicClass
Singleton
StaticNonFinalField
UtilityClass
UtilityClassWithPublicConstructor
UtilityClassWithoutPrivateConstructor
MethodReturnAlwaysConstant
    <!--group.names.class.metrics-->
AnonymousClassComplexity
AnonymousClassMethodCount
ClassComplexity
ClassCoupling
ClassInheritanceDepth
ClassNestingDepth
ConstructorCount
FieldCount
MethodCount
    <!--group.names.cloning.issues-->
CloneCallsConstructors
CloneCallsSuperClone
CloneDeclaresCloneNotSupported
CloneInNonCloneableClass
CloneableImplementsClone
    <!--group.names.control.flow.issues-->
BreakStatement
BreakStatementWithLabel
ConditionalExpression
ConditionalExpressionWithIdenticalBranches
ConfusingElse
ConstantConditionalExpression
ConstantIfStatement
ContinueStatement
ContinueStatementWithLabel
DefaultNotLastCaseInSwitch
DoubleNegation
DuplicateBooleanBranch
DuplicateCondition
EnumSwitchStatementWhichMissesCases
FallthruInSwitchStatement
ForLoopReplaceableByWhile
ForLoopWithMissingComponent
IfMayBeConditional
IfStatementWithIdenticalBranches
IfStatementWithTooManyBranches
InfiniteLoopStatement
LabeledStatement
LoopConditionNotUpdatedInsideLoop
LoopStatementsThatDontLoop
LoopWithImplicitTerminationCondition
NegatedConditional
NegatedEqualityExpression
NegatedIfElse
NestedConditionalExpression
NestedSwitchStatement
OverlyComplexBooleanExpression
PointlessBooleanExpression
PointlessIndexOfComparison
PointlessNullCheck
SimplifiableConditionalExpression
SwitchStatementDensity
SwitchStatement
SwitchStatementWithConfusingDeclaration
SwitchStatementWithTooFewBranches
SwitchStatementWithTooManyBranches
SwitchStatementsWithoutDefault
TrivialIf
UnnecessaryConditionalExpression
UnnecessaryContinue
UnnecessaryDefault
UnnecessaryLabelOnBreakStatement
UnnecessaryLabelOnContinueStatement
UnnecessaryReturn
    <!--group.names.data.flow.issues-->
BooleanVariableAlwaysNegated
ConstantValueVariableUse
LawOfDemeter
OrredNotEqualExpression
ReuseOfLocalVariable
TooBroadScope
UnnecessaryLocalVariable
BooleanMethodIsAlwaysInverted
    <!--group.names.dependency.issues-->
ClassWithTooManyDependencies
ClassWithTooManyDependents
ClassWithTooManyTransitiveDependencies
ClassWithTooManyTransitiveDependents
CyclicClassDependency
CyclicPackageDependency
    <!--group.names.encapsulation.issues-->
PackageVisibleField
PackageVisibleInnerClass
ProtectedField
ProtectedInnerClass
PublicField
PublicInnerClass
ReturnOfCollectionField
ReturnOfDateField
UseOfAnotherObjectsPrivateField
    <!--group.names.error.handling-->
BadExceptionCaught
BadExceptionDeclared
BadExceptionThrown
CaughtExceptionImmediatelyRethrown
CheckedExceptionClass
ContinueOrBreakFromFinallyBlock
EmptyCatchBlock
EmptyFinallyBlock
EmptyTryBlock
ErrorRethrown
ExceptionFromCatchWhichDoesntWrap
FinallyBlockCannotCompleteNormally
InstanceofCatchParameter
NestedTryStatement
NonFinalFieldOfException
ReturnFromFinallyBlock
ThreadDeathRethrown
ThrowCaughtLocally
ThrowFromFinallyBlock
NullThrown
TooBroadCatch
TooBroadThrows
UncheckedExceptionClass
UnusedCatchParameter
NewExceptionWithoutArguments
ThrowsRuntimeException
    <!--group.names.finalization.issues-->
FinalizeCallsSuperFinalize
Finalize
FinalizeNotProtected
NoExplicitFinalizeCalls
    <!--group.names.imports-->
JavaLangImport
PreconditionsCheckNotNullLiteral
OnDemandImport
RedundantImport
SamePackageImport
SingleClassImport
StaticImport
UnusedImport
    <!--group.names.inheritance.issues-->
AbstractClassExtendsConcreteClass
AbstractClassNeverImplemented
AbstractClassWithoutAbstractMethods
AbstractMethodOverridesAbstractMethod
AbstractMethodOverridesConcreteMethod
AbstractMethodWithMissingImplementations
ExtendsAnnotation
ExtendsConcreteCollection
ExtendsUtilityClass
InterfaceNeverImplemented
NonProtectedConstructorInAbstractClass
RedundantMethodOverride
RefusedBequest
StaticInheritance
TypeParameterExtendsFinalClass
    <!--group.names.initialization.issues-->
AbstractMethodCallInConstructor
InstanceVariableInitialization
InstanceVariableUninitializedUse
NonFinalStaticVariableUsedInClassInitialization
NonThreadSafeLazyInitialization
OverridableMethodCallDuringObjectConstruction
OverriddenMethodCallDuringObjectConstruction
StaticVariableInitialization
StaticVariableUninitializedUse
ThisEscapedInConstructor
    <!--group.names.internationalization.issues-->
CharacterComparison
DateToString
MagicCharacter
NumericToString
SimpleDateFormatWithoutLocale
StringCompareTo
StringConcatenation
StringEqualsIgnoreCase
StringEquals
StringToUpperWithoutLocale
StringTokenizer
TimeToString
AbsoluteAlignmentInUserInterface
    <!--group.names.j2me.issues-->
AbstractClassWithOnlyOneDirectInheritor
AnonymousInnerClassMayBeStatic
ArrayLengthInLoopCondition
CheckForOutOfMemoryOnLargeArrayAllocation
ConnectionResource
FieldRepeatedlyAccessed
InterfaceWithOnlyOneDirectInheritor
MethodCallInLoopCondition
MultiplyOrDivideByPowerOfTwo
OverlyLargePrimitiveArrayInitializer
PrivateMemberAccessBetweenOuterAndInnerClass
RecordStoreResource
SimplifiableIfStatement
SingleCharacterStartsWith
    <!--group.names.javabeans.issues-->
ClassWithoutConstructor
ClassWithoutNoArgConstructor
FieldHasSetterButNoGetter
    <!--group.names.javadoc.issues-->
HtmlTagCanBeJavadocTag
PackageDotHtmlMayBePackageInfo
UnnecessaryJavaDocLink
UnnecessaryInheritDoc
    <!--group.names.language.level.specific.issues.and.migration.aids-->
CollectionsFieldAccessReplaceableByMethodCall
EnumerationCanBeIteration
ForCanBeForeach
IfCanBeSwitch
IndexOfReplaceableByContains
MethodCanBeVariableArityMethod
RawUseOfParameterizedType
StringBufferReplaceableByStringBuilder
TryFinallyCanBeTryWithResources
TryWithIdenticalCatches
UnnecessaryBoxing
UnnecessaryUnboxing
WhileCanBeForeach
    <!--group.names.java.language.level.issues-->
AnnotationClass
Annotation
AssertAsName
AssertStatement
AutoBoxing
AutoUnboxing
EnumAsName
EnumClass
ForeachStatement
VarargParameter
    <!--group.names.junit.issues-->
AssertEqualsBetweenInconvertibleTypes
AssertEqualsMayBeAssertSame
AssertEqualsCalledOnArray
AssertsWithoutMessages
BeforeClassOrAfterClassIsPublicStaticVoidNoArg
BeforeOrAfterIsPublicVoidNoArg
ExpectedExceptionNeverThrown
ParameterizedParametersStaticCollection
ConstantJUnitAssertArgument
IgnoredJUnitTest
JUnit3StyleTestMethodInJUnit4Class
JUnit4AnnotatedMethodInJUnit3TestCase
JUnitAbstractTestClassNamingConvention
JUnitTestClassNamingConvention
MisspelledSetUp
MisspelledTearDown
MisorderedAssertEqualsParameters
MultipleExceptionsDeclaredOnTestMethod
TestCaseWithConstructor
SetupCallsSuperSetup
SetupIsPublicVoidNoArg
SimplifiableJUnitAssertion
StaticSuite
TestCaseInProductCode
TestCaseWithNoTestMethods
TeardownCallsSuperTeardown
TeardownIsPublicVoidNoArg
TestMethodInProductCode
TestMethodIsPublicVoidNoArg
TestMethodWithoutAssertion
UnconstructableTestCase
UseOfObsoleteAssert
    <!--group.names.logging.issues-->
ClassWithMultipleLoggers
ClassWithoutLogger
LoggingConditionDisagreesWithLogStatement
LoggerInitializedWithForeignClass
LogStatementGuardedByLogCondition
NonStaticFinalLogger
PublicMethodWithoutLogging
StringConcatenationArgumentToLogCall
    <!--group.names.code.maturity.issues-->
SuppressionAnnotation
SystemOutErr
ThrowablePrintStackTrace
TodoComment
ThreadDumpStack
ObsoleteCollection
    <!--group.names.memory.issues-->
StaticCollection
StringBufferField
SystemGC
ZeroLengthArrayInitialization
    <!--group.names.method.metrics-->
ParametersPerConstructor
CyclomaticComplexity
MethodCoupling
MethodWithMultipleLoops
MultipleReturnPointsPerMethod
NestingDepth
NonCommentSourceStatements
ParametersPerMethod
ThreeNegationsPerMethod
ThrownExceptionsPerMethod
    <!--group.names.modularization.issues-->
ClassIndependentOfModule
ClassOnlyUsedInOneModule
ModuleWithTooManyClasses
ModuleWithTooFewClasses
    <!--group.names.naming.conventions-->
AnnotationNamingConvention
BooleanMethodNameMustStartWithQuestion
ClassNamePrefixedWithPackageName
ClassNameSameAsAncestorName
ClassNamingConvention
ConfusingMainMethod
ConstantNamingConvention
DollarSignInName
EnumeratedClassNamingConvention
EnumeratedConstantNamingConvention
ExceptionNameDoesntEndWithException
InstanceMethodNamingConvention
InstanceVariableNamingConvention
InterfaceNamingConvention
LocalVariableNamingConvention
MethodNameSameAsClassName
MethodNameSameAsParentName
MethodNamesDifferOnlyByCase
NonBooleanMethodNameMayNotStartWithQuestion
NonExceptionNameEndsWithException
OverloadedMethodsWithSameNumberOfParameters
OverloadedVarargsMethod
PackageNamingConvention
ParameterNameDiffersFromOverriddenParameter
ParameterNamingConvention
QuestionableName
StandardVariableNames
StaticMethodNamingConvention
StaticVariableNamingConvention
TypeParameterNamingConvention
UpperCaseFieldNameNotConstant
    <!--group.names.numeric.issues-->
BadOddness
BigDecimalEquals
CachedNumberConstructorCall
CastThatLosesPrecision
CharUsedInArithmeticContext
ComparisonOfShortAndChar
ComparisonToNaN
ConfusingFloatingPointLiteral
ConstantMathCall
DivideByZero
DoubleLiteralMayBeFloatLiteral
FloatingPointEquality
ImplicitNumericConversion
IntegerDivisionInFloatingPointContext
IntegerMultiplicationImplicitCastToLong
IntLiteralMayBeLongLiteral
LongLiteralsEndingWithLowercaseL
NonReproducibleMathCall
OctalLiteral
OctalAndDecimalIntegersMixed
OverlyComplexArithmeticExpression
PointlessArithmeticExpression
UnaryPlus
UnnecessaryExplicitNumericCast
UnnecessaryUnaryMinus
UnpredictableBigDecimalConstructorCall
    <!--group.names.packaging.issues-->
ClassOnlyUsedInOnePackage
ClassUnconnectedToPackage
DisjointPackage
EmptyDirectory
PackageInMultipleModules
PackageWithTooManyClasses
PackageWithTooFewClasses
    <!--group.names.performance.issues-->
ArraysAsListWithZeroOrOneArgument
BooleanConstructor
CallToSimpleGetterInClass
CallToSimpleSetterInClass
CollectionContainsUrl
CollectionsMustHaveInitialCapacity
ConstantStringIntern
DynamicRegexReplaceableByCompiledPattern
EqualsHashCodeCalledOnUrl
FieldMayBeStatic
InnerClassMayBeStatic
InstantiatingObjectToGetClassObject
JavaLangReflect
KeySetIterationMayUseEntrySet
LengthOneStringInIndexOf
LengthOneStringsInConcatenation
ManualArrayToCollectionCopy
ManualArrayCopy
MapReplaceableByEnumMap
MethodMayBeStatic
ClassInitializerMayBeStatic
ObjectAllocationInLoop
RandomDoubleForRandomInteger
RedundantStringFormatCall
SetReplaceableByEnumSet
StringBufferMustHaveInitialCapacity
StringBufferToStringInConcatenation
StringConcatenationInLoops
StringConcatenationInsideStringBufferAppend
StringConstructor
StringEqualsEmptyString
StringReplaceableByStringBuffer
StringToString
SubstringZero
TailRecursion
ToArrayCallWithZeroLengthArrayArgument
TrivialStringConcatenation
UnnecessaryTemporaryOnConversionToString
UnnecessaryTemporaryOnConversionFromString
BoxingBoxedValue
    <!--group.names.portability.issues-->
HardcodedFileSeparators
HardcodedLineSeparators
NativeMethods
RuntimeExec
SystemExit
SystemGetenv
UseOfAWTPeerClass
UseOfJDBCDriverClass
UseOfProcessBuilder
UseOfSunClasses
    <!--group.names.declaration.redundancy-->
ElementOnlyUsedFromTestCode
UnusedLabel
    <!--group.names.resource.management.issues-->
ChannelResource
DriverManagerGetConnection
HibernateResource
IOResource
JDBCResource
JNDIResource
SocketResource
    <!--group.names.security.issues-->
ClassLoaderInstantiation
CloneableClassInSecureContext
CustomClassloader
CustomSecurityManager
DeserializableClassInSecureContext
DesignForExtension
JDBCExecuteWithNonConstantString
JDBCPrepareStatementWithNonConstantString
LoadLibraryWithNonConstantString
NonFinalClone
NonStaticInnerClassInSecureContext
PublicStaticArrayField
PublicStaticCollectionField
RuntimeExecWithNonConstantString
SerializableClassInSecureContext
SystemSetSecurityManager
SystemProperties
UnsecureRandomNumberGeneration
    <!--group.names.serialization.issues-->
ComparatorNotSerializable
ExternalizableWithoutPublicNoArgConstructor
ExternalizableWithSerializationMethods
NonSerializableFieldInSerializableClass
NonSerializableObjectBoundToHttpSession
NonSerializableObjectPassedToObjectStream
NonSerializableWithSerialVersionUIDField
NonSerializableWithSerializationMethods
ReadObjectAndWriteObjectPrivate
ReadObjectInitialization
ReadResolveAndWriteReplaceProtected
SerialPersistentFieldsWithWrongSignature
SerialVersionUIDNotStaticFinal
SerializableHasSerialVersionUIDField
SerializableHasSerializationMethods
SerializableInnerClassHasSerialVersionUIDField
SerializableInnerClassWithNonSerializableOuterClass
SerializableWithUnconstructableAncestor
TransientFieldInNonSerializableClass
TransientFieldNotInitialized
    <!--group.names.code.style.issues-->
CallToStringConcatCanBeReplacedByOperator
CStyleArrayDeclaration
ChainedEquality
ChainedMethodCall
ConfusingOctalEscape
ConstantOnLHSOfComparison
ConstantOnRHSOfComparison
ControlFlowStatementWithoutBraces
EqualsCalledOnEnumConstant
ExtendsObject
FieldMayBeFinal
ImplicitCallToSuper
ListIndexOfReplaceableByContains
LiteralAsArgToStringEquals
MissortedModifiers
MultipleDeclaration
MultipleTypedDeclaration
UnnecessaryConstantArrayCreationExpression
NestedMethodCall
RedundantFieldInitialization
RedundantImplements
ReturnThis
SimplifiableAnnotation
SimplifiableEqualsExpression
StringBufferReplaceableByString
TypeParameterExtendsObject
UnnecessarilyQualifiedInnerClassAccess
UnnecessarilyQualifiedStaticUsage
UnnecessaryBlockStatement
UnnecessaryCallToStringValueOf
UnnecessaryConstructor
UnnecessaryEnumModifier
UnnecessaryFinalOnLocalVariableOrParameter
UnnecessaryFullyQualifiedName
UnnecessaryInterfaceModifier
UnnecessaryParentheses
UnnecessarilyQualifiedStaticallyImportedElement
UnnecessaryQualifierForThis
UnnecessarySemicolon
UnnecessarySuperConstructor
UnnecessarySuperQualifier
UnnecessaryThis
UnqualifiedFieldAccess
UnqualifiedMethodAccess
UnqualifiedInnerClassAccess
UnqualifiedStaticUsage
UnclearBinaryExpression
SizeReplaceableByIsEmpty
    <!--group.names.threading.issues-->
AccessToNonThreadSafeStaticFieldFromInstance
AccessToStaticFieldLockedOnInstance
AwaitNotInLoop
AwaitWithoutCorrespondingSignal
BusyWait
CallToNativeMethodWhileLocked
ConditionSignal
DoubleCheckedLocking
EmptySynchronizedStatement
ExtendsThread
FieldAccessedSynchronizedAndUnsynchronized
MethodMayBeSynchronized
NakedNotify
NestedSynchronizedStatement
NonAtomicOperationOnVolatileField
NonSynchronizedMethodOverridesSynchronizedMethod
NotifyCalledOnCondition
NotifyNotInSynchronizedContext
NotifyWithoutCorrespondingWait
ObjectNotify
PublicFieldAccessedInSynchronizedContext
SafeLock
SignalWithoutCorrespondingAwait
SleepWhileHoldingLock
SynchronizationOnLocalVariableOrMethodParameter
SynchronizationOnStaticField
SynchronizeOnLock
SynchronizeOnNonFinalField
SynchronizedOnLiteralObject
SynchronizeOnThis
SynchronizedMethod
SystemRunFinalizersOnExit
ThreadLocalNotStaticFinal
ThreadPriority
ThreadRun
ThreadStartInConstruction
ThreadStopSuspendResume
ThreadWithDefaultRunMethod
ThreadYield
UnconditionalWait
VolatileArrayField
VolatileLongOrDoubleField
WaitCalledOnCondition
WaitNotInLoop
WaitNotInSynchronizedContext
WaitOrAwaitWithoutTimeout
WaitWhileHoldingTwoLocks
WaitWithoutCorrespondingNotify
WhileLoopSpinsOnField
    <!--group.names.visibility.issues-->
AmbiguousMethodCall
AmbiguousFieldAccess
AnonymousClassVariableHidesContainingMethodVariable
ClassEscapesItsScope
FieldHidesSuperclassField
InnerClassVariableHidesOuterClassVariable
LocalVariableHidingMemberVariable
MethodOverridesPackageLocalMethod
MethodOverloadsParentMethod
MethodOverridesPrivateMethod
MethodOverridesStaticMethod
TypeParameterHidesVisibleType
ParameterHidingMemberVariable

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions