Updated various dependencies (Kotlin 1.50.0) and AssertJ 3.19.0. Fixed issue#3 reported by hankem where usingRecursiveComparison() was not considered a complex transformation.
This commit is contained in:
@@ -21,13 +21,27 @@ val EXTRACTING_CALL_MATCHERS = CallMatcher.anyOf(
|
||||
|
||||
val DESCRIBED_AS = CallMatcher.instanceCall(AssertJClassNames.DESCRIPTABLE_INTERFACE, MethodNames.DESCRIBED_AS, MethodNames.AS)!!
|
||||
val WITH_REPRESENTATION_AND_SUCH = CallMatcher.instanceCall(AssertJClassNames.ASSERT_INTERFACE, "withRepresentation", "withThreadDumpOnError")!!
|
||||
val USING_COMPARATOR = CallMatcher.instanceCall(AssertJClassNames.ASSERT_INTERFACE, "usingComparator", "usingDefaultComparator")!!
|
||||
val USING_COMPARATOR = CallMatcher.anyOf(
|
||||
CallMatcher.instanceCall(
|
||||
AssertJClassNames.ASSERT_INTERFACE,
|
||||
"usingComparator",
|
||||
"usingDefaultComparator"
|
||||
),
|
||||
CallMatcher.instanceCall(AssertJClassNames.ABSTRACT_ASSERT_CLASSNAME, "usingRecursiveComparison"),
|
||||
CallMatcher.instanceCall(
|
||||
AssertJClassNames.ABSTRACT_OBJECT_ASSERT_CLASSNAME,
|
||||
"usingComparatorForFields",
|
||||
"usingComparatorForType"
|
||||
)
|
||||
)!!
|
||||
|
||||
val IN_HEXADECIMAL_OR_BINARY = CallMatcher.instanceCall(AssertJClassNames.ABSTRACT_ASSERT_CLASSNAME, MethodNames.IN_HEXADECIMAL, MethodNames.IN_BINARY)!!
|
||||
val EXTENSION_POINTS = CallMatcher.instanceCall(
|
||||
AssertJClassNames.EXTENSION_POINTS_INTERFACE,
|
||||
"is", "isNot", "has", "doesNotHave",
|
||||
"satisfies"
|
||||
)!!
|
||||
|
||||
val MORE_EXTENSION_POINTS = CallMatcher.instanceCall(
|
||||
AssertJClassNames.OBJECT_ENUMERABLE_ASSERT_INTERFACE,
|
||||
"are", "areNot", "have", "doNotHave",
|
||||
|
||||
+3
-3
@@ -177,12 +177,12 @@ abstract class AbstractAssertJInspection : AbstractBaseJavaLocalInspectionTool()
|
||||
.parameterCount(0)!!
|
||||
val CHAR_SEQUENCE_LENGTH = CallMatcher.instanceCall("java.lang.CharSequence", "length")
|
||||
.parameterCount(0)!!
|
||||
val OBJECT_EQUALS = CallMatcher.instanceCall(CommonClassNames.JAVA_LANG_OBJECT, "equals")
|
||||
val OBJECT_EQUALS = CallMatcher.instanceCall(CommonClassNames.JAVA_LANG_OBJECT, MethodNames.EQUALS)
|
||||
.parameterTypes(CommonClassNames.JAVA_LANG_OBJECT)!!
|
||||
|
||||
val OPTIONAL_GET = CallMatcher.instanceCall(CommonClassNames.JAVA_UTIL_OPTIONAL, "get")
|
||||
.parameterCount(0)!!
|
||||
val OPTIONAL_IS_PRESENT = CallMatcher.instanceCall(CommonClassNames.JAVA_UTIL_OPTIONAL, "isPresent")
|
||||
val OPTIONAL_IS_PRESENT = CallMatcher.instanceCall(CommonClassNames.JAVA_UTIL_OPTIONAL, MethodNames.IS_PRESENT)
|
||||
.parameterCount(0)!!
|
||||
val OPTIONAL_OR_ELSE = CallMatcher.instanceCall(CommonClassNames.JAVA_UTIL_OPTIONAL, "orElse")
|
||||
.parameterCount(1)!!
|
||||
@@ -196,7 +196,7 @@ abstract class AbstractAssertJInspection : AbstractBaseJavaLocalInspectionTool()
|
||||
|
||||
val GUAVA_OPTIONAL_GET = CallMatcher.instanceCall(GUAVA_OPTIONAL_CLASSNAME, "get")
|
||||
.parameterCount(0)!!
|
||||
val GUAVA_OPTIONAL_IS_PRESENT = CallMatcher.instanceCall(GUAVA_OPTIONAL_CLASSNAME, "isPresent")
|
||||
val GUAVA_OPTIONAL_IS_PRESENT = CallMatcher.instanceCall(GUAVA_OPTIONAL_CLASSNAME, MethodNames.IS_PRESENT)
|
||||
.parameterCount(0)!!
|
||||
val GUAVA_OPTIONAL_OR_NULL = CallMatcher.instanceCall(GUAVA_OPTIONAL_CLASSNAME, "orNull")
|
||||
.parameterCount(0)!!
|
||||
|
||||
+13
-1
@@ -4,39 +4,51 @@ import com.intellij.codeInspection.AbstractBaseJavaLocalInspectionTool
|
||||
import com.intellij.psi.PsiMethodCallExpression
|
||||
import org.jetbrains.annotations.NonNls
|
||||
|
||||
open class AbstractJUnitAssertInspection : AbstractBaseJavaLocalInspectionTool() {
|
||||
abstract class AbstractJUnitAssertInspection : AbstractBaseJavaLocalInspectionTool() {
|
||||
|
||||
companion object {
|
||||
@NonNls
|
||||
const val JUNIT_ASSERT_CLASSNAME = "org.junit.Assert"
|
||||
|
||||
@NonNls
|
||||
const val JUNIT_ASSUME_CLASSNAME = "org.junit.Assume"
|
||||
|
||||
@NonNls
|
||||
const val ASSERT_TRUE_METHOD = "assertTrue"
|
||||
|
||||
@NonNls
|
||||
const val ASSERT_FALSE_METHOD = "assertFalse"
|
||||
|
||||
@NonNls
|
||||
const val ASSERT_NULL_METHOD = "assertNull"
|
||||
|
||||
@NonNls
|
||||
const val ASSERT_NOT_NULL_METHOD = "assertNotNull"
|
||||
|
||||
@NonNls
|
||||
const val ASSERT_EQUALS_METHOD = "assertEquals"
|
||||
|
||||
@NonNls
|
||||
const val ASSERT_NOT_EQUALS_METHOD = "assertNotEquals"
|
||||
|
||||
@NonNls
|
||||
const val ASSERT_SAME_METHOD = "assertSame"
|
||||
|
||||
@NonNls
|
||||
const val ASSERT_NOT_SAME_METHOD = "assertNotSame"
|
||||
|
||||
@NonNls
|
||||
const val ASSERT_ARRAY_EQUALS_METHOD = "assertArrayEquals"
|
||||
|
||||
@NonNls
|
||||
const val ASSUME_TRUE_METHOD = "assumeTrue"
|
||||
|
||||
@NonNls
|
||||
const val ASSUME_FALSE_METHOD = "assumeFalse"
|
||||
|
||||
@NonNls
|
||||
const val ASSUME_NOT_NULL_METHOD = "assumeNotNull"
|
||||
|
||||
@NonNls
|
||||
const val ASSUME_NO_EXCEPTION = "assumeNoException"
|
||||
|
||||
|
||||
+2
-2
@@ -27,9 +27,9 @@ class AssertThatEnumerableIsEmptyInspection : AbstractAssertJInspection() {
|
||||
val value = expression.calculateConstantParameterValue(0) ?: return
|
||||
|
||||
val isEmpty = (CallMatcher.anyOf(HAS_SIZE, HAS_SIZE_LESS_THAN_OR_EQUAL_TO_INT).test(expression) && (value == 0)) ||
|
||||
(HAS_SIZE_LESS_THAN_INT.test(expression) && (value == 1));
|
||||
(HAS_SIZE_LESS_THAN_INT.test(expression) && (value == 1))
|
||||
val isNotEmpty = (HAS_SIZE_GREATER_THAN_INT.test(expression) && (value == 0)) ||
|
||||
(HAS_SIZE_GREATER_THAN_OR_EQUAL_TO_INT.test(expression) && (value == 1));
|
||||
(HAS_SIZE_GREATER_THAN_OR_EQUAL_TO_INT.test(expression) && (value == 1))
|
||||
|
||||
if (isEmpty && isLastExpression) {
|
||||
registerSimplifyMethod(holder, expression, MethodNames.IS_EMPTY)
|
||||
|
||||
+5
-5
@@ -79,25 +79,25 @@ class AssertThatFileExpressionInspection : AbstractMoveOutInspection() {
|
||||
private val MAPPINGS_SINCE_ASSERTJ_3_14_0 = listOf(
|
||||
MoveOutMapping(
|
||||
CallMatcher.instanceCall(CommonClassNames.JAVA_IO_FILE, "length").parameterCount(0),
|
||||
"isEmpty", expectedMatcher = IS_ZERO_LONG, noExpectedExpression = true
|
||||
MethodNames.IS_EMPTY, expectedMatcher = IS_ZERO_LONG, noExpectedExpression = true
|
||||
),
|
||||
MoveOutMapping(
|
||||
CallMatcher.instanceCall(CommonClassNames.JAVA_IO_FILE, "length").parameterCount(0),
|
||||
"isEmpty", expectedMatcher = IS_EQUAL_TO_LONG, noExpectedExpression = true,
|
||||
MethodNames.IS_EMPTY, expectedMatcher = IS_EQUAL_TO_LONG, noExpectedExpression = true,
|
||||
additionalCondition = ARG_IS_ZERO_CONST
|
||||
),
|
||||
MoveOutMapping(
|
||||
CallMatcher.instanceCall(CommonClassNames.JAVA_IO_FILE, "length").parameterCount(0),
|
||||
"isNotEmpty", expectedMatcher = IS_NOT_ZERO_LONG, noExpectedExpression = true
|
||||
MethodNames.IS_NOT_EMPTY, expectedMatcher = IS_NOT_ZERO_LONG, noExpectedExpression = true
|
||||
),
|
||||
MoveOutMapping(
|
||||
CallMatcher.instanceCall(CommonClassNames.JAVA_IO_FILE, "length").parameterCount(0),
|
||||
"isNotEmpty", expectedMatcher = IS_NOT_EQUAL_TO_LONG, noExpectedExpression = true,
|
||||
MethodNames.IS_NOT_EMPTY, expectedMatcher = IS_NOT_EQUAL_TO_LONG, noExpectedExpression = true,
|
||||
additionalCondition = ARG_IS_ZERO_CONST
|
||||
),
|
||||
MoveOutMapping(
|
||||
CallMatcher.instanceCall(CommonClassNames.JAVA_IO_FILE, "length").parameterCount(0),
|
||||
"hasSize", expectedMatcher = IS_EQUAL_TO_LONG,
|
||||
MethodNames.HAS_SIZE, expectedMatcher = IS_EQUAL_TO_LONG,
|
||||
additionalCondition = ARG_IS_NOT_ZERO_CONST
|
||||
)
|
||||
)
|
||||
|
||||
+3
-2
@@ -5,6 +5,7 @@ import com.intellij.psi.JavaElementVisitor
|
||||
import com.intellij.psi.PsiElementVisitor
|
||||
import com.intellij.psi.PsiExpressionStatement
|
||||
import com.siyeh.ig.callMatcher.CallMatcher
|
||||
import de.platon42.intellij.plugins.cajon.MethodNames
|
||||
|
||||
|
||||
class AssertThatPathExpressionInspection : AbstractMoveOutInspection() {
|
||||
@@ -19,11 +20,11 @@ class AssertThatPathExpressionInspection : AbstractMoveOutInspection() {
|
||||
"isAbsolute", "isRelative", expectBoolean = true
|
||||
),
|
||||
MoveOutMapping(
|
||||
CallMatcher.instanceCall(JAVA_NIO_PATH, "startsWith").parameterTypes(JAVA_NIO_PATH),
|
||||
CallMatcher.instanceCall(JAVA_NIO_PATH, MethodNames.STARTS_WITH).parameterTypes(JAVA_NIO_PATH),
|
||||
"startsWithRaw", expectBoolean = true
|
||||
),
|
||||
MoveOutMapping(
|
||||
CallMatcher.instanceCall(JAVA_NIO_PATH, "endsWith").parameterTypes(JAVA_NIO_PATH),
|
||||
CallMatcher.instanceCall(JAVA_NIO_PATH, MethodNames.ENDS_WITH).parameterTypes(JAVA_NIO_PATH),
|
||||
"endsWithRaw", expectBoolean = true
|
||||
),
|
||||
MoveOutMapping(
|
||||
|
||||
+5
-5
@@ -22,12 +22,12 @@ class AssertThatStringExpressionInspection : AbstractMoveOutInspection() {
|
||||
|
||||
private val MAPPINGS = listOf(
|
||||
MoveOutMapping(
|
||||
CallMatcher.instanceCall(CommonClassNames.JAVA_LANG_STRING, "isEmpty").parameterCount(0),
|
||||
CallMatcher.instanceCall(CommonClassNames.JAVA_LANG_STRING, MethodNames.IS_EMPTY).parameterCount(0),
|
||||
MethodNames.IS_EMPTY, MethodNames.IS_NOT_EMPTY, expectBoolean = true
|
||||
),
|
||||
MoveOutMapping(
|
||||
CallMatcher.anyOf(
|
||||
CallMatcher.instanceCall(CommonClassNames.JAVA_LANG_STRING, "equals").parameterCount(1),
|
||||
CallMatcher.instanceCall(CommonClassNames.JAVA_LANG_STRING, MethodNames.EQUALS).parameterCount(1),
|
||||
CallMatcher.instanceCall(CommonClassNames.JAVA_LANG_STRING, "contentEquals").parameterCount(1)
|
||||
),
|
||||
MethodNames.IS_EQUAL_TO, MethodNames.IS_NOT_EQUAL_TO, expectBoolean = true
|
||||
@@ -37,15 +37,15 @@ class AssertThatStringExpressionInspection : AbstractMoveOutInspection() {
|
||||
MethodNames.IS_EQUAL_TO_IC, MethodNames.IS_NOT_EQUAL_TO_IC, expectBoolean = true
|
||||
),
|
||||
MoveOutMapping(
|
||||
CallMatcher.instanceCall(CommonClassNames.JAVA_LANG_STRING, "contains").parameterCount(1),
|
||||
CallMatcher.instanceCall(CommonClassNames.JAVA_LANG_STRING, MethodNames.CONTAINS).parameterCount(1),
|
||||
MethodNames.CONTAINS, MethodNames.DOES_NOT_CONTAIN, expectBoolean = true
|
||||
),
|
||||
MoveOutMapping(
|
||||
CallMatcher.instanceCall(CommonClassNames.JAVA_LANG_STRING, "startsWith").parameterTypes(CommonClassNames.JAVA_LANG_STRING),
|
||||
CallMatcher.instanceCall(CommonClassNames.JAVA_LANG_STRING, MethodNames.STARTS_WITH).parameterTypes(CommonClassNames.JAVA_LANG_STRING),
|
||||
MethodNames.STARTS_WITH, MethodNames.DOES_NOT_START_WITH, expectBoolean = true
|
||||
),
|
||||
MoveOutMapping(
|
||||
CallMatcher.instanceCall(CommonClassNames.JAVA_LANG_STRING, "endsWith").parameterTypes(CommonClassNames.JAVA_LANG_STRING),
|
||||
CallMatcher.instanceCall(CommonClassNames.JAVA_LANG_STRING, MethodNames.ENDS_WITH).parameterTypes(CommonClassNames.JAVA_LANG_STRING),
|
||||
MethodNames.ENDS_WITH, MethodNames.DOES_NOT_END_WITH, expectBoolean = true
|
||||
),
|
||||
MoveOutMapping(
|
||||
|
||||
+4
-4
@@ -25,16 +25,16 @@ class BogusAssertionInspection : AbstractAssertJInspection() {
|
||||
).parameterCount(1)
|
||||
|
||||
private val ARRAY_METHODS = arrayOf(
|
||||
"hasSameSizeAs",
|
||||
MethodNames.HAS_SAME_SIZE_AS,
|
||||
MethodNames.CONTAINS,
|
||||
"containsAnyOf",
|
||||
"containsExactly",
|
||||
MethodNames.CONTAINS_EXACTLY,
|
||||
"containsExactlyInAnyOrder",
|
||||
"containsOnly",
|
||||
"containsSequence",
|
||||
"containsSubsequence",
|
||||
"startsWith",
|
||||
"endsWith"
|
||||
MethodNames.STARTS_WITH,
|
||||
MethodNames.ENDS_WITH
|
||||
)
|
||||
|
||||
private val SAME_BOOLEAN_ARRAY_CONTENTS =
|
||||
|
||||
+8
-8
@@ -30,13 +30,13 @@ class ImplicitAssertionInspection : AbstractAssertJInspection() {
|
||||
private val OBJECT_ENUMERABLE_ANY_CONTENT_ASSERTIONS = CallMatcher.instanceCall(
|
||||
AssertJClassNames.OBJECT_ENUMERABLE_ASSERT_INTERFACE,
|
||||
MethodNames.CONTAINS, "containsOnly", "containsOnlyNulls", MethodNames.CONTAINS_ONLY_ONCE,
|
||||
"containsExactly", "containsExactlyInAnyOrder", "containsExactlyInAnyOrderElementsOf",
|
||||
"containsAll", "containsAnyOf",
|
||||
MethodNames.CONTAINS_EXACTLY, "containsExactlyInAnyOrder", "containsExactlyInAnyOrderElementsOf",
|
||||
MethodNames.CONTAINS_ALL, "containsAnyOf",
|
||||
"containsAnyElementsOf", "containsExactlyElementsOf", "containsOnlyElementsOf",
|
||||
"isSubsetOf", "containsSequence", "containsSubsequence",
|
||||
"doesNotContainSequence", "doesNotContainSubsequence", "doesNotContain",
|
||||
"doesNotContainSequence", "doesNotContainSubsequence", MethodNames.DOES_NOT_CONTAIN,
|
||||
"doesNotContainAnyElementsOf", "doesNotHaveDuplicates",
|
||||
"startsWith", "endsWith", "containsNull", "doesNotContainNull",
|
||||
MethodNames.STARTS_WITH, MethodNames.ENDS_WITH, "containsNull", "doesNotContainNull",
|
||||
"are", "areNot", "have", "doNotHave", "areAtLeastOne", "areAtLeast", "areAtMost", "areExactly",
|
||||
"haveAtLeastOne", "haveAtLeast", "haveAtMost", "haveExactly",
|
||||
"hasAtLeastOneElementOfType", "hasOnlyElementsOfType", "hasOnlyElementsOfTypes",
|
||||
@@ -49,7 +49,7 @@ class ImplicitAssertionInspection : AbstractAssertJInspection() {
|
||||
private val OBJECT_ENUMERABLE_AT_LEAST_ONE_CONTENT_ASSERTIONS = CallMatcher.instanceCall(
|
||||
AssertJClassNames.OBJECT_ENUMERABLE_ASSERT_INTERFACE,
|
||||
"containsOnlyNulls",
|
||||
"startsWith", "endsWith", "containsNull",
|
||||
MethodNames.STARTS_WITH, MethodNames.ENDS_WITH, "containsNull",
|
||||
"areAtLeastOne",
|
||||
"haveAtLeastOne",
|
||||
"hasAtLeastOneElementOfType",
|
||||
@@ -72,10 +72,10 @@ class ImplicitAssertionInspection : AbstractAssertJInspection() {
|
||||
|
||||
private val NON_NULL_CORE_ASSERTIONS = CallMatcher.instanceCall(
|
||||
AssertJClassNames.ASSERT_INTERFACE,
|
||||
"isInstanceOf", "isInstanceOfSatisfying", "isInstanceOfAny", "isExactlyInstanceOf", "isOfAnyClassIn",
|
||||
"isNotInstanceOf", "isNotInstanceOfAny", "isNotExactlyInstanceOf", "isNotOfAnyClassIn",
|
||||
MethodNames.IS_INSTANCE_OF, "isInstanceOfSatisfying", "isInstanceOfAny", "isExactlyInstanceOf", "isOfAnyClassIn",
|
||||
MethodNames.IS_NOT_INSTANCE_OF, "isNotInstanceOfAny", "isNotExactlyInstanceOf", "isNotOfAnyClassIn",
|
||||
"hasSameClassAs", "doesNotHaveSameClassAs",
|
||||
"hasToString", "hasSameHashCodeAs"
|
||||
MethodNames.HAS_TO_STRING, "hasSameHashCodeAs"
|
||||
)!!
|
||||
|
||||
private val GUAVA_IS_PRESENT = CallMatcher.instanceCall(AssertJClassNames.GUAVA_OPTIONAL_ASSERTIONS_CLASSNAME, MethodNames.IS_PRESENT)
|
||||
|
||||
Reference in New Issue
Block a user