Refactored Code to avoid string duplications... added Boolean.map() extension.
This commit is contained in:
parent
d49b7bf17b
commit
2cdc242125
@ -0,0 +1,32 @@
|
|||||||
|
package de.platon42.intellij.plugins.cajon
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NonNls
|
||||||
|
|
||||||
|
class AssertJClassNames {
|
||||||
|
companion object {
|
||||||
|
@NonNls
|
||||||
|
const val ASSERTIONS_CLASSNAME = "org.assertj.core.api.Assertions"
|
||||||
|
|
||||||
|
@NonNls
|
||||||
|
const val ABSTRACT_ASSERT_CLASSNAME = "org.assertj.core.api.AbstractAssert"
|
||||||
|
@NonNls
|
||||||
|
const val ABSTRACT_BOOLEAN_ASSERT_CLASSNAME = "org.assertj.core.api.AbstractBooleanAssert"
|
||||||
|
@NonNls
|
||||||
|
const val ABSTRACT_INTEGER_ASSERT_CLASSNAME = "org.assertj.core.api.AbstractIntegerAssert"
|
||||||
|
@NonNls
|
||||||
|
const val ABSTRACT_COMPARABLE_ASSERT_CLASSNAME = "org.assertj.core.api.AbstractComparableAssert"
|
||||||
|
@NonNls
|
||||||
|
const val ABSTRACT_STRING_ASSERT_CLASSNAME = "org.assertj.core.api.AbstractStringAssert"
|
||||||
|
@NonNls
|
||||||
|
const val ABSTRACT_CHAR_SEQUENCE_ASSERT_CLASSNAME = "org.assertj.core.api.AbstractCharSequenceAssert"
|
||||||
|
@NonNls
|
||||||
|
const val ABSTRACT_ITERABLE_ASSERT_CLASSNAME = "org.assertj.core.api.AbstractIterableAssert"
|
||||||
|
@NonNls
|
||||||
|
const val ABSTRACT_ENUMERABLE_ASSERT_CLASSNAME = "org.assertj.core.api.EnumerableAssert"
|
||||||
|
|
||||||
|
@NonNls
|
||||||
|
const val GUAVA_OPTIONAL_CLASSNAME = "com.google.common.base.Optional"
|
||||||
|
@NonNls
|
||||||
|
const val GUAVA_ASSERTIONS_CLASSNAME = "org.assertj.guava.api.Assertions"
|
||||||
|
}
|
||||||
|
}
|
@ -15,3 +15,5 @@ fun PsiMethodCallExpression.replaceQualifierFromMethodCall(oldMethodCall: PsiMet
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun PsiMethodCallExpression.getArg(n: Int): PsiExpression = this.argumentList.expressions[n]
|
fun PsiMethodCallExpression.getArg(n: Int): PsiExpression = this.argumentList.expressions[n]
|
||||||
|
|
||||||
|
fun <T> Boolean.map(forTrue: T, forFalse: T) = if (this) forTrue else forFalse
|
@ -0,0 +1,78 @@
|
|||||||
|
package de.platon42.intellij.plugins.cajon
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NonNls
|
||||||
|
|
||||||
|
class MethodNames {
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
|
||||||
|
@NonNls
|
||||||
|
const val EQUALS = "equals"
|
||||||
|
|
||||||
|
@NonNls
|
||||||
|
const val ASSERT_THAT = "assertThat"
|
||||||
|
@NonNls
|
||||||
|
const val AS = "as"
|
||||||
|
@NonNls
|
||||||
|
const val IS_EQUAL_TO = "isEqualTo"
|
||||||
|
@NonNls
|
||||||
|
const val IS_NOT_EQUAL_TO = "isNotEqualTo"
|
||||||
|
@NonNls
|
||||||
|
const val IS_SAME_AS = "isSameAs"
|
||||||
|
@NonNls
|
||||||
|
const val IS_NOT_SAME_AS = "isNotSameAs"
|
||||||
|
@NonNls
|
||||||
|
const val IS_GREATER_THAN = "isGreaterThan"
|
||||||
|
@NonNls
|
||||||
|
const val IS_GREATER_THAN_OR_EQUAL_TO = "isGreaterThanOrEqualTo"
|
||||||
|
@NonNls
|
||||||
|
const val IS_LESS_THAN = "isLessThan"
|
||||||
|
@NonNls
|
||||||
|
const val IS_LESS_THAN_OR_EQUAL_TO = "isLessThanOrEqualTo"
|
||||||
|
@NonNls
|
||||||
|
const val IS_ZERO = "isZero"
|
||||||
|
@NonNls
|
||||||
|
const val IS_NOT_ZERO = "isNotZero"
|
||||||
|
@NonNls
|
||||||
|
const val IS_TRUE = "isTrue"
|
||||||
|
@NonNls
|
||||||
|
const val IS_FALSE = "isFalse"
|
||||||
|
@NonNls
|
||||||
|
const val IS_NULL = "isNull"
|
||||||
|
@NonNls
|
||||||
|
const val IS_NOT_NULL = "isNotNull"
|
||||||
|
@NonNls
|
||||||
|
const val IS_CLOSE_TO = "isCloseTo"
|
||||||
|
@NonNls
|
||||||
|
const val IS_NOT_CLOSE_TO = "isNotCloseTo"
|
||||||
|
|
||||||
|
@NonNls
|
||||||
|
const val IS_EMPTY = "isEmpty"
|
||||||
|
@NonNls
|
||||||
|
const val IS_NOT_EMPTY = "isNotEmpty"
|
||||||
|
@NonNls
|
||||||
|
const val HAS_SIZE = "hasSize"
|
||||||
|
@NonNls
|
||||||
|
const val HAS_SIZE_LESS_THAN = "hasSizeLessThan"
|
||||||
|
@NonNls
|
||||||
|
const val HAS_SIZE_LESS_THAN_OR_EQUAL_TO = "hasSizeLessThanOrEqualTo"
|
||||||
|
@NonNls
|
||||||
|
const val HAS_SIZE_GREATER_THAN = "hasSizeGreaterThan"
|
||||||
|
@NonNls
|
||||||
|
const val HAS_SIZE_GREATER_THAN_OR_EQUAL_TO = "hasSizeGreaterThanOrEqualTo"
|
||||||
|
@NonNls
|
||||||
|
const val HAS_SAME_SIZE_AS = "hasSameSizeAs"
|
||||||
|
@NonNls
|
||||||
|
const val CONTAINS = "contains"
|
||||||
|
@NonNls
|
||||||
|
const val CONTAINS_EXACTLY = "containsExactly"
|
||||||
|
@NonNls
|
||||||
|
const val CONTAINS_SAME = "containsSame"
|
||||||
|
@NonNls
|
||||||
|
const val IS_PRESENT = "isPresent"
|
||||||
|
@NonNls
|
||||||
|
const val IS_NOT_PRESENT = "isNotPresent"
|
||||||
|
@NonNls
|
||||||
|
const val IS_ABSENT = "isAbsent"
|
||||||
|
}
|
||||||
|
}
|
@ -7,81 +7,40 @@ import com.intellij.psi.search.GlobalSearchScope
|
|||||||
import com.intellij.psi.tree.IElementType
|
import com.intellij.psi.tree.IElementType
|
||||||
import com.intellij.psi.util.PsiTypesUtil
|
import com.intellij.psi.util.PsiTypesUtil
|
||||||
import com.siyeh.ig.callMatcher.CallMatcher
|
import com.siyeh.ig.callMatcher.CallMatcher
|
||||||
|
import de.platon42.intellij.plugins.cajon.AssertJClassNames.Companion.ABSTRACT_ASSERT_CLASSNAME
|
||||||
|
import de.platon42.intellij.plugins.cajon.AssertJClassNames.Companion.ABSTRACT_BOOLEAN_ASSERT_CLASSNAME
|
||||||
|
import de.platon42.intellij.plugins.cajon.AssertJClassNames.Companion.ABSTRACT_COMPARABLE_ASSERT_CLASSNAME
|
||||||
|
import de.platon42.intellij.plugins.cajon.AssertJClassNames.Companion.ABSTRACT_ENUMERABLE_ASSERT_CLASSNAME
|
||||||
|
import de.platon42.intellij.plugins.cajon.AssertJClassNames.Companion.ABSTRACT_INTEGER_ASSERT_CLASSNAME
|
||||||
|
import de.platon42.intellij.plugins.cajon.AssertJClassNames.Companion.ASSERTIONS_CLASSNAME
|
||||||
|
import de.platon42.intellij.plugins.cajon.AssertJClassNames.Companion.GUAVA_ASSERTIONS_CLASSNAME
|
||||||
|
import de.platon42.intellij.plugins.cajon.MethodNames
|
||||||
import de.platon42.intellij.plugins.cajon.getArg
|
import de.platon42.intellij.plugins.cajon.getArg
|
||||||
import de.platon42.intellij.plugins.cajon.qualifierExpression
|
import de.platon42.intellij.plugins.cajon.qualifierExpression
|
||||||
import de.platon42.intellij.plugins.cajon.quickfixes.RemoveActualOutmostMethodCallQuickFix
|
import de.platon42.intellij.plugins.cajon.quickfixes.RemoveActualOutmostMethodCallQuickFix
|
||||||
import de.platon42.intellij.plugins.cajon.quickfixes.ReplaceExpectedOutmostMethodCallQuickFix
|
import de.platon42.intellij.plugins.cajon.quickfixes.ReplaceExpectedOutmostMethodCallQuickFix
|
||||||
import de.platon42.intellij.plugins.cajon.quickfixes.ReplaceSimpleMethodCallQuickFix
|
import de.platon42.intellij.plugins.cajon.quickfixes.ReplaceSimpleMethodCallQuickFix
|
||||||
import org.jetbrains.annotations.NonNls
|
|
||||||
|
|
||||||
open class AbstractAssertJInspection : AbstractBaseJavaLocalInspectionTool() {
|
open class AbstractAssertJInspection : AbstractBaseJavaLocalInspectionTool() {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val SIMPLIFY_MESSAGE_TEMPLATE = "%s can be simplified to %s"
|
const val SIMPLIFY_MESSAGE_TEMPLATE = "%s() can be simplified to %s()"
|
||||||
const val MORE_CONCISE_MESSAGE_TEMPLATE = "%s would be more concise than %s"
|
const val MORE_CONCISE_MESSAGE_TEMPLATE = "%s() would be more concise than %s"
|
||||||
|
|
||||||
const val REPLACE_DESCRIPTION_TEMPLATE = "Replace %s with %s"
|
|
||||||
|
|
||||||
@NonNls
|
|
||||||
const val ASSERTIONS_CLASSNAME = "org.assertj.core.api.Assertions"
|
|
||||||
|
|
||||||
@NonNls
|
|
||||||
const val ABSTRACT_ASSERT_CLASSNAME = "org.assertj.core.api.AbstractAssert"
|
|
||||||
@NonNls
|
|
||||||
const val ABSTRACT_BOOLEAN_ASSERT_CLASSNAME = "org.assertj.core.api.AbstractBooleanAssert"
|
|
||||||
@NonNls
|
|
||||||
const val ABSTRACT_INTEGER_ASSERT_CLASSNAME = "org.assertj.core.api.AbstractIntegerAssert"
|
|
||||||
@NonNls
|
|
||||||
const val ABSTRACT_COMPARABLE_ASSERT_CLASSNAME = "org.assertj.core.api.AbstractComparableAssert"
|
|
||||||
@NonNls
|
|
||||||
const val ABSTRACT_STRING_ASSERT_CLASSNAME = "org.assertj.core.api.AbstractStringAssert"
|
|
||||||
@NonNls
|
|
||||||
const val ABSTRACT_CHAR_SEQUENCE_ASSERT_CLASSNAME = "org.assertj.core.api.AbstractCharSequenceAssert"
|
|
||||||
@NonNls
|
|
||||||
const val ABSTRACT_ENUMERABLE_ASSERT_CLASSNAME = "org.assertj.core.api.EnumerableAssert"
|
|
||||||
|
|
||||||
@NonNls
|
|
||||||
const val ASSERT_THAT_METHOD = "assertThat"
|
|
||||||
@NonNls
|
|
||||||
const val IS_EQUAL_TO_METHOD = "isEqualTo"
|
|
||||||
@NonNls
|
|
||||||
const val IS_NOT_EQUAL_TO_METHOD = "isNotEqualTo"
|
|
||||||
@NonNls
|
|
||||||
const val IS_SAME_AS_METHOD = "isSameAs"
|
|
||||||
@NonNls
|
|
||||||
const val IS_NOT_SAME_AS_METHOD = "isNotSameAs"
|
|
||||||
@NonNls
|
|
||||||
const val IS_GREATER_THAN_METHOD = "isGreaterThan"
|
|
||||||
@NonNls
|
|
||||||
const val IS_GREATER_THAN_OR_EQUAL_TO_METHOD = "isGreaterThanOrEqualTo"
|
|
||||||
@NonNls
|
|
||||||
const val IS_LESS_THAN_METHOD = "isLessThan"
|
|
||||||
@NonNls
|
|
||||||
const val IS_LESS_THAN_OR_EQUAL_TO_METHOD = "isLessThanOrEqualTo"
|
|
||||||
@NonNls
|
|
||||||
const val IS_ZERO_METHOD = "isZero"
|
|
||||||
@NonNls
|
|
||||||
const val IS_NOT_ZERO_METHOD = "isNotZero"
|
|
||||||
@NonNls
|
|
||||||
const val IS_TRUE_METHOD = "isTrue"
|
|
||||||
@NonNls
|
|
||||||
const val IS_FALSE_METHOD = "isFalse"
|
|
||||||
@NonNls
|
|
||||||
const val HAS_SIZE_METHOD = "hasSize"
|
|
||||||
|
|
||||||
|
const val REPLACE_DESCRIPTION_TEMPLATE = "Replace %s() with %s()"
|
||||||
|
|
||||||
val TOKEN_TO_ASSERTJ_FOR_PRIMITIVE_MAP = mapOf<IElementType, String>(
|
val TOKEN_TO_ASSERTJ_FOR_PRIMITIVE_MAP = mapOf<IElementType, String>(
|
||||||
JavaTokenType.EQEQ to IS_EQUAL_TO_METHOD,
|
JavaTokenType.EQEQ to MethodNames.IS_EQUAL_TO,
|
||||||
JavaTokenType.NE to IS_NOT_EQUAL_TO_METHOD,
|
JavaTokenType.NE to MethodNames.IS_NOT_EQUAL_TO,
|
||||||
JavaTokenType.GT to IS_GREATER_THAN_METHOD,
|
JavaTokenType.GT to MethodNames.IS_GREATER_THAN,
|
||||||
JavaTokenType.GE to IS_GREATER_THAN_OR_EQUAL_TO_METHOD,
|
JavaTokenType.GE to MethodNames.IS_GREATER_THAN_OR_EQUAL_TO,
|
||||||
JavaTokenType.LT to IS_LESS_THAN_METHOD,
|
JavaTokenType.LT to MethodNames.IS_LESS_THAN,
|
||||||
JavaTokenType.LE to IS_LESS_THAN_OR_EQUAL_TO_METHOD
|
JavaTokenType.LE to MethodNames.IS_LESS_THAN_OR_EQUAL_TO
|
||||||
)
|
)
|
||||||
|
|
||||||
val TOKEN_TO_ASSERTJ_FOR_OBJECT_MAPPINGS = mapOf<IElementType, String>(
|
val TOKEN_TO_ASSERTJ_FOR_OBJECT_MAPPINGS = mapOf<IElementType, String>(
|
||||||
JavaTokenType.EQEQ to IS_SAME_AS_METHOD,
|
JavaTokenType.EQEQ to MethodNames.IS_SAME_AS,
|
||||||
JavaTokenType.NE to IS_NOT_SAME_AS_METHOD
|
JavaTokenType.NE to MethodNames.IS_NOT_SAME_AS
|
||||||
)
|
)
|
||||||
|
|
||||||
val SWAP_SIDE_OF_BINARY_OPERATOR = mapOf<IElementType, IElementType>(
|
val SWAP_SIDE_OF_BINARY_OPERATOR = mapOf<IElementType, IElementType>(
|
||||||
@ -101,55 +60,58 @@ open class AbstractAssertJInspection : AbstractBaseJavaLocalInspectionTool() {
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
val ASSERT_THAT_INT = CallMatcher.staticCall(ASSERTIONS_CLASSNAME, ASSERT_THAT_METHOD)
|
val ASSERT_THAT_INT = CallMatcher.staticCall(ASSERTIONS_CLASSNAME, MethodNames.ASSERT_THAT)
|
||||||
.parameterTypes("int")!!
|
.parameterTypes("int")!!
|
||||||
|
|
||||||
val ASSERT_THAT_BOOLEAN = CallMatcher.staticCall(ASSERTIONS_CLASSNAME, ASSERT_THAT_METHOD)
|
val ASSERT_THAT_BOOLEAN = CallMatcher.staticCall(ASSERTIONS_CLASSNAME, MethodNames.ASSERT_THAT)
|
||||||
.parameterTypes("boolean")!!
|
.parameterTypes("boolean")!!
|
||||||
|
|
||||||
val ASSERT_THAT_ANY = CallMatcher.staticCall(ASSERTIONS_CLASSNAME, ASSERT_THAT_METHOD)
|
val ASSERT_THAT_ANY = CallMatcher.staticCall(ASSERTIONS_CLASSNAME, MethodNames.ASSERT_THAT)
|
||||||
.parameterCount(1)!!
|
.parameterCount(1)!!
|
||||||
|
|
||||||
val ASSERT_THAT_JAVA8_OPTIONAL = CallMatcher.staticCall(ASSERTIONS_CLASSNAME, ASSERT_THAT_METHOD)
|
val ASSERT_THAT_JAVA8_OPTIONAL = CallMatcher.staticCall(ASSERTIONS_CLASSNAME, MethodNames.ASSERT_THAT)
|
||||||
.parameterTypes(CommonClassNames.JAVA_UTIL_OPTIONAL)!!
|
.parameterTypes(CommonClassNames.JAVA_UTIL_OPTIONAL)!!
|
||||||
|
|
||||||
val IS_EQUAL_TO_OBJECT = CallMatcher.instanceCall(ABSTRACT_ASSERT_CLASSNAME, IS_EQUAL_TO_METHOD)
|
val ASSERT_THAT_GUAVA_OPTIONAL = CallMatcher.staticCall(GUAVA_ASSERTIONS_CLASSNAME, MethodNames.ASSERT_THAT)
|
||||||
|
.parameterTypes()!!
|
||||||
|
|
||||||
|
val IS_EQUAL_TO_OBJECT = CallMatcher.instanceCall(ABSTRACT_ASSERT_CLASSNAME, MethodNames.IS_EQUAL_TO)
|
||||||
.parameterTypes(CommonClassNames.JAVA_LANG_OBJECT)!!
|
.parameterTypes(CommonClassNames.JAVA_LANG_OBJECT)!!
|
||||||
val IS_NOT_EQUAL_TO_OBJECT = CallMatcher.instanceCall(ABSTRACT_ASSERT_CLASSNAME, IS_NOT_EQUAL_TO_METHOD)
|
val IS_NOT_EQUAL_TO_OBJECT = CallMatcher.instanceCall(ABSTRACT_ASSERT_CLASSNAME, MethodNames.IS_NOT_EQUAL_TO)
|
||||||
.parameterTypes(CommonClassNames.JAVA_LANG_OBJECT)!!
|
.parameterTypes(CommonClassNames.JAVA_LANG_OBJECT)!!
|
||||||
val IS_EQUAL_TO_BOOLEAN = CallMatcher.instanceCall(ABSTRACT_BOOLEAN_ASSERT_CLASSNAME, IS_EQUAL_TO_METHOD)
|
val IS_EQUAL_TO_BOOLEAN = CallMatcher.instanceCall(ABSTRACT_BOOLEAN_ASSERT_CLASSNAME, MethodNames.IS_EQUAL_TO)
|
||||||
.parameterTypes("boolean")!!
|
.parameterTypes("boolean")!!
|
||||||
val IS_NOT_EQUAL_TO_BOOLEAN =
|
val IS_NOT_EQUAL_TO_BOOLEAN =
|
||||||
CallMatcher.instanceCall(ABSTRACT_BOOLEAN_ASSERT_CLASSNAME, IS_NOT_EQUAL_TO_METHOD)
|
CallMatcher.instanceCall(ABSTRACT_BOOLEAN_ASSERT_CLASSNAME, MethodNames.IS_NOT_EQUAL_TO)
|
||||||
.parameterTypes("boolean")!!
|
.parameterTypes("boolean")!!
|
||||||
val IS_SAME_AS_OBJECT = CallMatcher.instanceCall(ABSTRACT_ASSERT_CLASSNAME, IS_SAME_AS_METHOD)
|
val IS_SAME_AS_OBJECT = CallMatcher.instanceCall(ABSTRACT_ASSERT_CLASSNAME, MethodNames.IS_SAME_AS)
|
||||||
.parameterTypes(CommonClassNames.JAVA_LANG_OBJECT)!!
|
.parameterTypes(CommonClassNames.JAVA_LANG_OBJECT)!!
|
||||||
val IS_NOT_SAME_AS_OBJECT = CallMatcher.instanceCall(ABSTRACT_ASSERT_CLASSNAME, IS_NOT_SAME_AS_METHOD)
|
val IS_NOT_SAME_AS_OBJECT = CallMatcher.instanceCall(ABSTRACT_ASSERT_CLASSNAME, MethodNames.IS_NOT_SAME_AS)
|
||||||
.parameterTypes(CommonClassNames.JAVA_LANG_OBJECT)!!
|
.parameterTypes(CommonClassNames.JAVA_LANG_OBJECT)!!
|
||||||
|
|
||||||
val HAS_SIZE = CallMatcher.instanceCall(ABSTRACT_ENUMERABLE_ASSERT_CLASSNAME, HAS_SIZE_METHOD)
|
val HAS_SIZE = CallMatcher.instanceCall(ABSTRACT_ENUMERABLE_ASSERT_CLASSNAME, MethodNames.HAS_SIZE)
|
||||||
.parameterTypes("int")!!
|
.parameterTypes("int")!!
|
||||||
|
|
||||||
val IS_EQUAL_TO_INT = CallMatcher.instanceCall(ABSTRACT_ASSERT_CLASSNAME, IS_EQUAL_TO_METHOD)
|
val IS_EQUAL_TO_INT = CallMatcher.instanceCall(ABSTRACT_ASSERT_CLASSNAME, MethodNames.IS_EQUAL_TO)
|
||||||
.parameterTypes("int")!!
|
.parameterTypes("int")!!
|
||||||
val IS_GREATER_THAN_INT = CallMatcher.instanceCall(ABSTRACT_COMPARABLE_ASSERT_CLASSNAME, IS_GREATER_THAN_METHOD)
|
val IS_GREATER_THAN_INT = CallMatcher.instanceCall(ABSTRACT_COMPARABLE_ASSERT_CLASSNAME, MethodNames.IS_GREATER_THAN)
|
||||||
.parameterTypes("int")!!
|
.parameterTypes("int")!!
|
||||||
val IS_GREATER_THAN_OR_EQUAL_TO_INT = CallMatcher.instanceCall(ABSTRACT_COMPARABLE_ASSERT_CLASSNAME, IS_GREATER_THAN_OR_EQUAL_TO_METHOD)
|
val IS_GREATER_THAN_OR_EQUAL_TO_INT = CallMatcher.instanceCall(ABSTRACT_COMPARABLE_ASSERT_CLASSNAME, MethodNames.IS_GREATER_THAN_OR_EQUAL_TO)
|
||||||
.parameterTypes("int")!!
|
.parameterTypes("int")!!
|
||||||
|
|
||||||
val IS_LESS_THAN_INT = CallMatcher.instanceCall(ABSTRACT_COMPARABLE_ASSERT_CLASSNAME, IS_LESS_THAN_METHOD)
|
val IS_LESS_THAN_INT = CallMatcher.instanceCall(ABSTRACT_COMPARABLE_ASSERT_CLASSNAME, MethodNames.IS_LESS_THAN)
|
||||||
.parameterTypes("int")!!
|
.parameterTypes("int")!!
|
||||||
val IS_LESS_THAN_OR_EQUAL_TO_INT = CallMatcher.instanceCall(ABSTRACT_COMPARABLE_ASSERT_CLASSNAME, IS_LESS_THAN_OR_EQUAL_TO_METHOD)
|
val IS_LESS_THAN_OR_EQUAL_TO_INT = CallMatcher.instanceCall(ABSTRACT_COMPARABLE_ASSERT_CLASSNAME, MethodNames.IS_LESS_THAN_OR_EQUAL_TO)
|
||||||
.parameterTypes("int")!!
|
.parameterTypes("int")!!
|
||||||
|
|
||||||
val IS_ZERO = CallMatcher.instanceCall(ABSTRACT_INTEGER_ASSERT_CLASSNAME, IS_ZERO_METHOD)
|
val IS_ZERO = CallMatcher.instanceCall(ABSTRACT_INTEGER_ASSERT_CLASSNAME, MethodNames.IS_ZERO)
|
||||||
.parameterCount(0)!!
|
.parameterCount(0)!!
|
||||||
val IS_NOT_ZERO = CallMatcher.instanceCall(ABSTRACT_INTEGER_ASSERT_CLASSNAME, IS_NOT_ZERO_METHOD)
|
val IS_NOT_ZERO = CallMatcher.instanceCall(ABSTRACT_INTEGER_ASSERT_CLASSNAME, MethodNames.IS_NOT_ZERO)
|
||||||
.parameterCount(0)!!
|
.parameterCount(0)!!
|
||||||
|
|
||||||
val IS_TRUE = CallMatcher.instanceCall(ABSTRACT_BOOLEAN_ASSERT_CLASSNAME, IS_TRUE_METHOD)
|
val IS_TRUE = CallMatcher.instanceCall(ABSTRACT_BOOLEAN_ASSERT_CLASSNAME, MethodNames.IS_TRUE)
|
||||||
.parameterCount(0)!!
|
.parameterCount(0)!!
|
||||||
val IS_FALSE = CallMatcher.instanceCall(ABSTRACT_BOOLEAN_ASSERT_CLASSNAME, IS_FALSE_METHOD)
|
val IS_FALSE = CallMatcher.instanceCall(ABSTRACT_BOOLEAN_ASSERT_CLASSNAME, MethodNames.IS_FALSE)
|
||||||
.parameterCount(0)!!
|
.parameterCount(0)!!
|
||||||
|
|
||||||
val COLLECTION_SIZE = CallMatcher.instanceCall(CommonClassNames.JAVA_UTIL_COLLECTION, "size")
|
val COLLECTION_SIZE = CallMatcher.instanceCall(CommonClassNames.JAVA_UTIL_COLLECTION, "size")
|
||||||
@ -185,8 +147,7 @@ open class AbstractAssertJInspection : AbstractBaseJavaLocalInspectionTool() {
|
|||||||
return assertedClass.isEquivalentTo(expectedClass) || assertedClass.isInheritor(expectedClass, true)
|
return assertedClass.isEquivalentTo(expectedClass) || assertedClass.isInheritor(expectedClass, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
protected fun getOriginalMethodName(expression: PsiMethodCallExpression) =
|
protected fun getOriginalMethodName(expression: PsiMethodCallExpression) = expression.resolveMethod()?.name
|
||||||
expression.resolveMethod()?.name?.plus("()")
|
|
||||||
|
|
||||||
protected fun registerSimplifyMethod(
|
protected fun registerSimplifyMethod(
|
||||||
holder: ProblemsHolder,
|
holder: ProblemsHolder,
|
||||||
@ -261,11 +222,10 @@ open class AbstractAssertJInspection : AbstractBaseJavaLocalInspectionTool() {
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
protected fun hasAssertJMethod(element: PsiElement, classAndMethod: String): Boolean {
|
protected fun hasAssertJMethod(element: PsiElement, classname: String, methodname: String): Boolean {
|
||||||
val classname = "org.assertj.core.api.${classAndMethod.substringBeforeLast(".")}"
|
|
||||||
val findClass =
|
val findClass =
|
||||||
JavaPsiFacade.getInstance(element.project).findClass(classname, GlobalSearchScope.allScope(element.project))
|
JavaPsiFacade.getInstance(element.project).findClass(classname, GlobalSearchScope.allScope(element.project))
|
||||||
?: return false
|
?: return false
|
||||||
return findClass.findMethodsByName(classAndMethod.substringAfterLast(".")).isNotEmpty()
|
return findClass.findMethodsByName(methodname).isNotEmpty()
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -9,7 +9,7 @@ open class AbstractJUnitAssertInspection : AbstractBaseJavaLocalInspectionTool()
|
|||||||
companion object {
|
companion object {
|
||||||
const val CONVERT_MESSAGE_TEMPLATE = "%s can be converted to AssertJ style"
|
const val CONVERT_MESSAGE_TEMPLATE = "%s can be converted to AssertJ style"
|
||||||
|
|
||||||
const val REPLACE_DESCRIPTION_TEMPLATE = "Replace %s with assertThat().%s"
|
const val REPLACE_DESCRIPTION_TEMPLATE = "Replace %s() with assertThat().%s()"
|
||||||
|
|
||||||
@NonNls
|
@NonNls
|
||||||
const val JUNIT_ASSERT_CLASSNAME = "org.junit.Assert"
|
const val JUNIT_ASSERT_CLASSNAME = "org.junit.Assert"
|
||||||
@ -38,6 +38,5 @@ open class AbstractJUnitAssertInspection : AbstractBaseJavaLocalInspectionTool()
|
|||||||
return "AssertJ"
|
return "AssertJ"
|
||||||
}
|
}
|
||||||
|
|
||||||
protected fun getOriginalMethodName(expression: PsiMethodCallExpression) =
|
protected fun getOriginalMethodName(expression: PsiMethodCallExpression) = expression.resolveMethod()?.name
|
||||||
expression.resolveMethod()?.name?.plus("()")
|
|
||||||
}
|
}
|
@ -4,7 +4,11 @@ import com.intellij.codeInspection.ProblemsHolder
|
|||||||
import com.intellij.psi.*
|
import com.intellij.psi.*
|
||||||
import com.intellij.psi.util.PsiTreeUtil
|
import com.intellij.psi.util.PsiTreeUtil
|
||||||
import com.intellij.psi.util.TypeConversionUtil
|
import com.intellij.psi.util.TypeConversionUtil
|
||||||
|
import de.platon42.intellij.plugins.cajon.MethodNames
|
||||||
|
import de.platon42.intellij.plugins.cajon.MethodNames.Companion.IS_NOT_NULL
|
||||||
|
import de.platon42.intellij.plugins.cajon.MethodNames.Companion.IS_NULL
|
||||||
import de.platon42.intellij.plugins.cajon.firstArg
|
import de.platon42.intellij.plugins.cajon.firstArg
|
||||||
|
import de.platon42.intellij.plugins.cajon.map
|
||||||
import de.platon42.intellij.plugins.cajon.quickfixes.SplitBinaryExpressionMethodCallQuickFix
|
import de.platon42.intellij.plugins.cajon.quickfixes.SplitBinaryExpressionMethodCallQuickFix
|
||||||
import de.platon42.intellij.plugins.cajon.quickfixes.SplitEqualsExpressionMethodCallQuickFix
|
import de.platon42.intellij.plugins.cajon.quickfixes.SplitEqualsExpressionMethodCallQuickFix
|
||||||
|
|
||||||
@ -12,10 +16,8 @@ class AssertThatBinaryExpressionIsTrueOrFalseInspection : AbstractAssertJInspect
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val DISPLAY_NAME = "Asserting a binary expression"
|
private const val DISPLAY_NAME = "Asserting a binary expression"
|
||||||
private const val SPLIT_BINARY_EXPRESSION_DESCRIPTION = "Split binary expression out of assertThat()"
|
private const val SPLIT_EXPRESSION_DESCRIPTION_TEMPLATE = "Split %s expression out of assertThat()"
|
||||||
private const val SPLIT_EQUALS_EXPRESSION_DESCRIPTION = "Split equals() expression out of assertThat()"
|
private const val MORE_MEANINGFUL_MESSAGE_TEMPLATE = "Moving %s expression out of assertThat() would be more meaningful"
|
||||||
private const val BINARY_MORE_MEANINGFUL_MESSAGE = "Moving binary expression out of assertThat() would be more meaningful"
|
|
||||||
private const val EQUALS_MORE_MEANINGFUL_MESSAGE = "Moving equals() expression out of assertThat() would be more meaningful"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getDisplayName() = DISPLAY_NAME
|
override fun getDisplayName() = DISPLAY_NAME
|
||||||
@ -34,9 +36,12 @@ class AssertThatBinaryExpressionIsTrueOrFalseInspection : AbstractAssertJInspect
|
|||||||
|
|
||||||
val assertThatArgument = expression.firstArg
|
val assertThatArgument = expression.firstArg
|
||||||
if (assertThatArgument is PsiMethodCallExpression && OBJECT_EQUALS.test(assertThatArgument)) {
|
if (assertThatArgument is PsiMethodCallExpression && OBJECT_EQUALS.test(assertThatArgument)) {
|
||||||
val replacementMethod = if (expectedResult) "isEqualTo()" else "isNotEqualTo()"
|
val replacementMethod = if (expectedResult) MethodNames.IS_EQUAL_TO else MethodNames.IS_NOT_EQUAL_TO
|
||||||
val quickFix = SplitEqualsExpressionMethodCallQuickFix(SPLIT_EQUALS_EXPRESSION_DESCRIPTION, replacementMethod)
|
val type = "${MethodNames.EQUALS}()"
|
||||||
holder.registerProblem(expression, EQUALS_MORE_MEANINGFUL_MESSAGE, quickFix)
|
val description = SPLIT_EXPRESSION_DESCRIPTION_TEMPLATE.format(type)
|
||||||
|
val message = MORE_MEANINGFUL_MESSAGE_TEMPLATE.format(type)
|
||||||
|
val quickFix = SplitEqualsExpressionMethodCallQuickFix(description, replacementMethod)
|
||||||
|
holder.registerProblem(expression, message, quickFix)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,7 +55,7 @@ class AssertThatBinaryExpressionIsTrueOrFalseInspection : AbstractAssertJInspect
|
|||||||
if (isLeftNull && isRightNull) {
|
if (isLeftNull && isRightNull) {
|
||||||
return
|
return
|
||||||
} else if (isLeftNull || isRightNull) {
|
} else if (isLeftNull || isRightNull) {
|
||||||
val replacementMethod = if (expectedResult) "isNull()" else "isNotNull()"
|
val replacementMethod = if (expectedResult) IS_NULL else IS_NOT_NULL
|
||||||
registerSplitBinaryExpressionMethod(holder, expression, replacementMethod, pickRightOperand = isLeftNull, noExpectedExpression = true)
|
registerSplitBinaryExpressionMethod(holder, expression, replacementMethod, pickRightOperand = isLeftNull, noExpectedExpression = true)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -68,14 +73,10 @@ class AssertThatBinaryExpressionIsTrueOrFalseInspection : AbstractAssertJInspect
|
|||||||
if (expectedResult) it else INVERT_BINARY_OPERATOR.getOrDefault(it, it)
|
if (expectedResult) it else INVERT_BINARY_OPERATOR.getOrDefault(it, it)
|
||||||
} ?: return
|
} ?: return
|
||||||
val mappingToUse =
|
val mappingToUse =
|
||||||
if (isPrimitive || isNumericType) {
|
(isPrimitive || isNumericType).map(TOKEN_TO_ASSERTJ_FOR_PRIMITIVE_MAP, TOKEN_TO_ASSERTJ_FOR_OBJECT_MAPPINGS)
|
||||||
TOKEN_TO_ASSERTJ_FOR_PRIMITIVE_MAP
|
|
||||||
} else {
|
|
||||||
TOKEN_TO_ASSERTJ_FOR_OBJECT_MAPPINGS
|
|
||||||
}
|
|
||||||
val replacementMethod = mappingToUse[tokenType] ?: return
|
val replacementMethod = mappingToUse[tokenType] ?: return
|
||||||
|
|
||||||
registerSplitBinaryExpressionMethod(holder, expression, "$replacementMethod()", pickRightOperand = swapExpectedAndActual)
|
registerSplitBinaryExpressionMethod(holder, expression, replacementMethod, pickRightOperand = swapExpectedAndActual)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun registerSplitBinaryExpressionMethod(
|
private fun registerSplitBinaryExpressionMethod(
|
||||||
@ -85,8 +86,11 @@ class AssertThatBinaryExpressionIsTrueOrFalseInspection : AbstractAssertJInspect
|
|||||||
pickRightOperand: Boolean = false,
|
pickRightOperand: Boolean = false,
|
||||||
noExpectedExpression: Boolean = false
|
noExpectedExpression: Boolean = false
|
||||||
) {
|
) {
|
||||||
val quickFix = SplitBinaryExpressionMethodCallQuickFix(SPLIT_BINARY_EXPRESSION_DESCRIPTION, replacementMethod, pickRightOperand, noExpectedExpression)
|
val type = "binary"
|
||||||
holder.registerProblem(expression, BINARY_MORE_MEANINGFUL_MESSAGE, quickFix)
|
val description = SPLIT_EXPRESSION_DESCRIPTION_TEMPLATE.format(type)
|
||||||
|
val message = MORE_MEANINGFUL_MESSAGE_TEMPLATE.format(type)
|
||||||
|
val quickFix = SplitBinaryExpressionMethodCallQuickFix(description, replacementMethod, pickRightOperand, noExpectedExpression)
|
||||||
|
holder.registerProblem(expression, message, quickFix)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,10 @@ import com.intellij.psi.JavaElementVisitor
|
|||||||
import com.intellij.psi.PsiElementVisitor
|
import com.intellij.psi.PsiElementVisitor
|
||||||
import com.intellij.psi.PsiMethodCallExpression
|
import com.intellij.psi.PsiMethodCallExpression
|
||||||
import com.intellij.psi.util.TypeConversionUtil
|
import com.intellij.psi.util.TypeConversionUtil
|
||||||
|
import de.platon42.intellij.plugins.cajon.AssertJClassNames.Companion.ABSTRACT_BOOLEAN_ASSERT_CLASSNAME
|
||||||
|
import de.platon42.intellij.plugins.cajon.MethodNames
|
||||||
import de.platon42.intellij.plugins.cajon.firstArg
|
import de.platon42.intellij.plugins.cajon.firstArg
|
||||||
|
import de.platon42.intellij.plugins.cajon.map
|
||||||
|
|
||||||
class AssertThatBooleanIsTrueOrFalseInspection : AbstractAssertJInspection() {
|
class AssertThatBooleanIsTrueOrFalseInspection : AbstractAssertJInspection() {
|
||||||
|
|
||||||
@ -37,7 +40,7 @@ class AssertThatBooleanIsTrueOrFalseInspection : AbstractAssertJInspection() {
|
|||||||
val expectedResult = calculateConstantParameterValue(expression, 0) as? Boolean ?: return
|
val expectedResult = calculateConstantParameterValue(expression, 0) as? Boolean ?: return
|
||||||
val flippedBooleanTest = matchingCalls.drop(2).any { it }
|
val flippedBooleanTest = matchingCalls.drop(2).any { it }
|
||||||
|
|
||||||
val replacementMethod = if (expectedResult xor flippedBooleanTest) "isTrue()" else "isFalse()"
|
val replacementMethod = (expectedResult xor flippedBooleanTest).map(MethodNames.IS_TRUE, MethodNames.IS_FALSE)
|
||||||
registerSimplifyMethod(holder, expression, replacementMethod)
|
registerSimplifyMethod(holder, expression, replacementMethod)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import com.intellij.codeInspection.ProblemsHolder
|
|||||||
import com.intellij.psi.JavaElementVisitor
|
import com.intellij.psi.JavaElementVisitor
|
||||||
import com.intellij.psi.PsiElementVisitor
|
import com.intellij.psi.PsiElementVisitor
|
||||||
import com.intellij.psi.PsiMethodCallExpression
|
import com.intellij.psi.PsiMethodCallExpression
|
||||||
|
import de.platon42.intellij.plugins.cajon.MethodNames
|
||||||
|
|
||||||
class AssertThatEnumerableIsEmptyInspection : AbstractAssertJInspection() {
|
class AssertThatEnumerableIsEmptyInspection : AbstractAssertJInspection() {
|
||||||
|
|
||||||
@ -23,7 +24,7 @@ class AssertThatEnumerableIsEmptyInspection : AbstractAssertJInspection() {
|
|||||||
|
|
||||||
val value = calculateConstantParameterValue(expression, 0) ?: return
|
val value = calculateConstantParameterValue(expression, 0) ?: return
|
||||||
if (value == 0) {
|
if (value == 0) {
|
||||||
registerSimplifyMethod(holder, expression, "isEmpty()")
|
registerSimplifyMethod(holder, expression, MethodNames.IS_EMPTY)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,9 @@ import com.intellij.psi.PsiElementVisitor
|
|||||||
import com.intellij.psi.PsiMethodCallExpression
|
import com.intellij.psi.PsiMethodCallExpression
|
||||||
import com.intellij.psi.PsiStatement
|
import com.intellij.psi.PsiStatement
|
||||||
import com.intellij.psi.util.PsiTreeUtil
|
import com.intellij.psi.util.PsiTreeUtil
|
||||||
|
import de.platon42.intellij.plugins.cajon.MethodNames
|
||||||
import de.platon42.intellij.plugins.cajon.firstArg
|
import de.platon42.intellij.plugins.cajon.firstArg
|
||||||
|
import de.platon42.intellij.plugins.cajon.map
|
||||||
|
|
||||||
class AssertThatJava8OptionalInspection : AbstractAssertJInspection() {
|
class AssertThatJava8OptionalInspection : AbstractAssertJInspection() {
|
||||||
|
|
||||||
@ -30,14 +32,14 @@ class AssertThatJava8OptionalInspection : AbstractAssertJInspection() {
|
|||||||
if (IS_EQUAL_TO_OBJECT.test(expectedCallExpression)) {
|
if (IS_EQUAL_TO_OBJECT.test(expectedCallExpression)) {
|
||||||
val innerExpectedCall = expectedCallExpression.firstArg as? PsiMethodCallExpression ?: return
|
val innerExpectedCall = expectedCallExpression.firstArg as? PsiMethodCallExpression ?: return
|
||||||
if (OPTIONAL_OF.test(innerExpectedCall) || OPTIONAL_OF_NULLABLE.test(innerExpectedCall)) {
|
if (OPTIONAL_OF.test(innerExpectedCall) || OPTIONAL_OF_NULLABLE.test(innerExpectedCall)) {
|
||||||
registerRemoveExpectedOutmostMethod(holder, expression, expectedCallExpression, "contains()")
|
registerRemoveExpectedOutmostMethod(holder, expression, expectedCallExpression, MethodNames.CONTAINS)
|
||||||
} else if (OPTIONAL_EMPTY.test(innerExpectedCall)) {
|
} else if (OPTIONAL_EMPTY.test(innerExpectedCall)) {
|
||||||
registerSimplifyMethod(holder, expectedCallExpression, "isNotPresent()")
|
registerSimplifyMethod(holder, expectedCallExpression, MethodNames.IS_NOT_PRESENT)
|
||||||
}
|
}
|
||||||
} else if (IS_NOT_EQUAL_TO_OBJECT.test(expectedCallExpression)) {
|
} else if (IS_NOT_EQUAL_TO_OBJECT.test(expectedCallExpression)) {
|
||||||
val innerExpectedCall = expectedCallExpression.firstArg as? PsiMethodCallExpression ?: return
|
val innerExpectedCall = expectedCallExpression.firstArg as? PsiMethodCallExpression ?: return
|
||||||
if (OPTIONAL_EMPTY.test(innerExpectedCall)) {
|
if (OPTIONAL_EMPTY.test(innerExpectedCall)) {
|
||||||
registerSimplifyMethod(holder, expectedCallExpression, "isPresent()")
|
registerSimplifyMethod(holder, expectedCallExpression, MethodNames.IS_PRESENT)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -48,13 +50,13 @@ class AssertThatJava8OptionalInspection : AbstractAssertJInspection() {
|
|||||||
if (isGet || isIsPresent) {
|
if (isGet || isIsPresent) {
|
||||||
if (isGet) {
|
if (isGet) {
|
||||||
if (IS_EQUAL_TO_OBJECT.test(expectedCallExpression)) {
|
if (IS_EQUAL_TO_OBJECT.test(expectedCallExpression)) {
|
||||||
registerRemoveActualOutmostMethod(holder, expression, expectedCallExpression, "contains()")
|
registerRemoveActualOutmostMethod(holder, expression, expectedCallExpression, MethodNames.CONTAINS)
|
||||||
} else if (IS_SAME_AS_OBJECT.test(expectedCallExpression)) {
|
} else if (IS_SAME_AS_OBJECT.test(expectedCallExpression)) {
|
||||||
registerRemoveActualOutmostMethod(holder, expression, expectedCallExpression, "containsSame()")
|
registerRemoveActualOutmostMethod(holder, expression, expectedCallExpression, MethodNames.CONTAINS_SAME)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
val expectedPresence = getExpectedBooleanResult(expectedCallExpression) ?: return
|
val expectedPresence = getExpectedBooleanResult(expectedCallExpression) ?: return
|
||||||
val replacementMethod = if (expectedPresence) "isPresent()" else "isNotPresent()"
|
val replacementMethod = expectedPresence.map(MethodNames.IS_PRESENT, MethodNames.IS_NOT_PRESENT)
|
||||||
registerRemoveActualOutmostMethod(holder, expression, expectedCallExpression, replacementMethod, noExpectedExpression = true)
|
registerRemoveActualOutmostMethod(holder, expression, expectedCallExpression, replacementMethod, noExpectedExpression = true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,9 @@ import com.intellij.psi.JavaElementVisitor
|
|||||||
import com.intellij.psi.PsiElementVisitor
|
import com.intellij.psi.PsiElementVisitor
|
||||||
import com.intellij.psi.PsiMethodCallExpression
|
import com.intellij.psi.PsiMethodCallExpression
|
||||||
import com.intellij.psi.PsiType
|
import com.intellij.psi.PsiType
|
||||||
|
import de.platon42.intellij.plugins.cajon.MethodNames
|
||||||
import de.platon42.intellij.plugins.cajon.firstArg
|
import de.platon42.intellij.plugins.cajon.firstArg
|
||||||
|
import de.platon42.intellij.plugins.cajon.map
|
||||||
|
|
||||||
class AssertThatObjectIsNullOrNotNullInspection : AbstractAssertJInspection() {
|
class AssertThatObjectIsNullOrNotNullInspection : AbstractAssertJInspection() {
|
||||||
|
|
||||||
@ -26,7 +28,7 @@ class AssertThatObjectIsNullOrNotNullInspection : AbstractAssertJInspection() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (expression.firstArg.type == PsiType.NULL) {
|
if (expression.firstArg.type == PsiType.NULL) {
|
||||||
registerSimplifyMethod(holder, expression, if (isEqualTo) "isNull()" else "isNotNull()")
|
registerSimplifyMethod(holder, expression, isEqualTo.map(MethodNames.IS_NULL, MethodNames.IS_NOT_NULL))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,18 +3,22 @@ package de.platon42.intellij.plugins.cajon.inspections
|
|||||||
import com.intellij.codeInspection.ProblemsHolder
|
import com.intellij.codeInspection.ProblemsHolder
|
||||||
import com.intellij.psi.*
|
import com.intellij.psi.*
|
||||||
import com.intellij.psi.util.PsiTreeUtil
|
import com.intellij.psi.util.PsiTreeUtil
|
||||||
|
import de.platon42.intellij.plugins.cajon.AssertJClassNames.Companion.ABSTRACT_ITERABLE_ASSERT_CLASSNAME
|
||||||
|
import de.platon42.intellij.plugins.cajon.MethodNames
|
||||||
import de.platon42.intellij.plugins.cajon.firstArg
|
import de.platon42.intellij.plugins.cajon.firstArg
|
||||||
|
import de.platon42.intellij.plugins.cajon.map
|
||||||
import de.platon42.intellij.plugins.cajon.quickfixes.ReplaceSizeMethodCallQuickFix
|
import de.platon42.intellij.plugins.cajon.quickfixes.ReplaceSizeMethodCallQuickFix
|
||||||
|
|
||||||
class AssertThatSizeInspection : AbstractAssertJInspection() {
|
class AssertThatSizeInspection : AbstractAssertJInspection() {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val DISPLAY_NAME = "Asserting the size of an collection or array"
|
private const val DISPLAY_NAME = "Asserting the size of an collection or array"
|
||||||
|
|
||||||
private val BONUS_EXPRESSIONS_CALL_MATCHER_MAP = listOf(
|
private val BONUS_EXPRESSIONS_CALL_MATCHER_MAP = listOf(
|
||||||
IS_GREATER_THAN_INT to "hasSizeGreaterThan()",
|
IS_LESS_THAN_INT to MethodNames.HAS_SIZE_LESS_THAN,
|
||||||
IS_GREATER_THAN_OR_EQUAL_TO_INT to "hasSizeGreaterThanOrEqualTo()",
|
IS_LESS_THAN_OR_EQUAL_TO_INT to MethodNames.HAS_SIZE_LESS_THAN_OR_EQUAL_TO,
|
||||||
IS_LESS_THAN_OR_EQUAL_TO_INT to "hasSizeLessThanOrEqualTo()",
|
IS_GREATER_THAN_INT to MethodNames.HAS_SIZE_GREATER_THAN,
|
||||||
IS_LESS_THAN_INT to "hasSizeLessThan()"
|
IS_GREATER_THAN_OR_EQUAL_TO_INT to MethodNames.HAS_SIZE_GREATER_THAN_OR_EQUAL_TO
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -35,13 +39,13 @@ class AssertThatSizeInspection : AbstractAssertJInspection() {
|
|||||||
val constValue = calculateConstantParameterValue(expectedCallExpression, 0)
|
val constValue = calculateConstantParameterValue(expectedCallExpression, 0)
|
||||||
if (IS_EQUAL_TO_INT.test(expectedCallExpression)) {
|
if (IS_EQUAL_TO_INT.test(expectedCallExpression)) {
|
||||||
if (constValue == 0) {
|
if (constValue == 0) {
|
||||||
registerReplaceSizeMethod(holder, expression, expectedCallExpression, "isEmpty()", noExpectedExpression = true)
|
registerReplaceSizeMethod(holder, expression, expectedCallExpression, MethodNames.IS_EMPTY, noExpectedExpression = true)
|
||||||
} else {
|
} else {
|
||||||
val equalToExpression = expectedCallExpression.firstArg
|
val equalToExpression = expectedCallExpression.firstArg
|
||||||
if (isCollectionSize(equalToExpression) || isArrayLength(equalToExpression)) {
|
if (isCollectionSize(equalToExpression) || isArrayLength(equalToExpression)) {
|
||||||
registerReplaceSizeMethod(holder, expression, expectedCallExpression, "hasSameSizeAs()", expectedIsCollection = true)
|
registerReplaceSizeMethod(holder, expression, expectedCallExpression, MethodNames.HAS_SAME_SIZE_AS, expectedIsCollection = true)
|
||||||
} else {
|
} else {
|
||||||
registerReplaceSizeMethod(holder, expression, expectedCallExpression, "hasSize()")
|
registerReplaceSizeMethod(holder, expression, expectedCallExpression, MethodNames.HAS_SIZE)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -51,14 +55,13 @@ class AssertThatSizeInspection : AbstractAssertJInspection() {
|
|||||||
val isTestForNotEmpty = ((IS_GREATER_THAN_INT.test(expectedCallExpression) && (constValue == 0))
|
val isTestForNotEmpty = ((IS_GREATER_THAN_INT.test(expectedCallExpression) && (constValue == 0))
|
||||||
|| (IS_GREATER_THAN_OR_EQUAL_TO_INT.test(expectedCallExpression) && (constValue == 1))
|
|| (IS_GREATER_THAN_OR_EQUAL_TO_INT.test(expectedCallExpression) && (constValue == 1))
|
||||||
|| IS_NOT_ZERO.test(expectedCallExpression))
|
|| IS_NOT_ZERO.test(expectedCallExpression))
|
||||||
when {
|
if (isTestForEmpty || isTestForNotEmpty) {
|
||||||
isTestForEmpty -> registerReplaceSizeMethod(holder, expression, expectedCallExpression, "isEmpty()", noExpectedExpression = true)
|
val replacementMethod = isTestForEmpty.map(MethodNames.IS_EMPTY, MethodNames.IS_NOT_EMPTY)
|
||||||
isTestForNotEmpty -> registerReplaceSizeMethod(holder, expression, expectedCallExpression, "isNotEmpty()", noExpectedExpression = true)
|
registerReplaceSizeMethod(holder, expression, expectedCallExpression, replacementMethod, noExpectedExpression = true)
|
||||||
|
} else if (hasAssertJMethod(expression, ABSTRACT_ITERABLE_ASSERT_CLASSNAME, MethodNames.HAS_SIZE_LESS_THAN)) {
|
||||||
// new stuff in AssertJ 13.2.0
|
// new stuff in AssertJ 13.2.0
|
||||||
hasAssertJMethod(expression, "AbstractIterableAssert.hasSizeLessThan") -> {
|
val matchedMethod = BONUS_EXPRESSIONS_CALL_MATCHER_MAP.find { it.first.test(expectedCallExpression) }?.second ?: return
|
||||||
val matchedMethod = BONUS_EXPRESSIONS_CALL_MATCHER_MAP.find { it.first.test(expectedCallExpression) }?.second ?: return
|
registerReplaceSizeMethod(holder, expression, expectedCallExpression, matchedMethod)
|
||||||
registerReplaceSizeMethod(holder, expression, expectedCallExpression, matchedMethod)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,8 @@ import com.intellij.codeInspection.ProblemsHolder
|
|||||||
import com.intellij.psi.JavaElementVisitor
|
import com.intellij.psi.JavaElementVisitor
|
||||||
import com.intellij.psi.PsiElementVisitor
|
import com.intellij.psi.PsiElementVisitor
|
||||||
import com.intellij.psi.PsiMethodCallExpression
|
import com.intellij.psi.PsiMethodCallExpression
|
||||||
|
import de.platon42.intellij.plugins.cajon.AssertJClassNames.Companion.ABSTRACT_CHAR_SEQUENCE_ASSERT_CLASSNAME
|
||||||
|
import de.platon42.intellij.plugins.cajon.MethodNames
|
||||||
|
|
||||||
class AssertThatStringIsEmptyInspection : AbstractAssertJInspection() {
|
class AssertThatStringIsEmptyInspection : AbstractAssertJInspection() {
|
||||||
|
|
||||||
@ -29,7 +31,7 @@ class AssertThatStringIsEmptyInspection : AbstractAssertJInspection() {
|
|||||||
|
|
||||||
val value = calculateConstantParameterValue(expression, 0) ?: return
|
val value = calculateConstantParameterValue(expression, 0) ?: return
|
||||||
if ((isEqual && (value == "")) || (hasSize && (value == 0))) {
|
if ((isEqual && (value == "")) || (hasSize && (value == 0))) {
|
||||||
registerSimplifyMethod(holder, expression, "isEmpty()")
|
registerSimplifyMethod(holder, expression, MethodNames.IS_EMPTY)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@ import com.intellij.psi.PsiElementVisitor
|
|||||||
import com.intellij.psi.PsiMethodCallExpression
|
import com.intellij.psi.PsiMethodCallExpression
|
||||||
import com.siyeh.ig.callMatcher.CallMatcher
|
import com.siyeh.ig.callMatcher.CallMatcher
|
||||||
import com.siyeh.ig.callMatcher.CallMatcher.anyOf
|
import com.siyeh.ig.callMatcher.CallMatcher.anyOf
|
||||||
|
import de.platon42.intellij.plugins.cajon.MethodNames
|
||||||
import de.platon42.intellij.plugins.cajon.quickfixes.ReplaceJUnitAssertMethodCallQuickFix
|
import de.platon42.intellij.plugins.cajon.quickfixes.ReplaceJUnitAssertMethodCallQuickFix
|
||||||
import de.platon42.intellij.plugins.cajon.quickfixes.ReplaceJUnitDeltaAssertMethodCallQuickFix
|
import de.platon42.intellij.plugins.cajon.quickfixes.ReplaceJUnitDeltaAssertMethodCallQuickFix
|
||||||
|
|
||||||
@ -21,28 +22,28 @@ class JUnitAssertToAssertJInspection : AbstractJUnitAssertInspection() {
|
|||||||
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_TRUE_METHOD).parameterTypes(CommonClassNames.JAVA_LANG_STRING, "boolean"),
|
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_TRUE_METHOD).parameterTypes(CommonClassNames.JAVA_LANG_STRING, "boolean"),
|
||||||
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_TRUE_METHOD).parameterTypes("boolean")
|
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_TRUE_METHOD).parameterTypes("boolean")
|
||||||
),
|
),
|
||||||
"isTrue()", false
|
MethodNames.IS_TRUE, false
|
||||||
),
|
),
|
||||||
Mapping(
|
Mapping(
|
||||||
anyOf(
|
anyOf(
|
||||||
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_FALSE_METHOD).parameterTypes(CommonClassNames.JAVA_LANG_STRING, "boolean"),
|
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_FALSE_METHOD).parameterTypes(CommonClassNames.JAVA_LANG_STRING, "boolean"),
|
||||||
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_FALSE_METHOD).parameterTypes("boolean")
|
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_FALSE_METHOD).parameterTypes("boolean")
|
||||||
),
|
),
|
||||||
"isFalse()", false
|
MethodNames.IS_FALSE, false
|
||||||
),
|
),
|
||||||
Mapping(
|
Mapping(
|
||||||
anyOf(
|
anyOf(
|
||||||
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_NULL_METHOD).parameterTypes(CommonClassNames.JAVA_LANG_STRING, CommonClassNames.JAVA_LANG_OBJECT),
|
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_NULL_METHOD).parameterTypes(CommonClassNames.JAVA_LANG_STRING, CommonClassNames.JAVA_LANG_OBJECT),
|
||||||
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_NULL_METHOD).parameterTypes(CommonClassNames.JAVA_LANG_OBJECT)
|
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_NULL_METHOD).parameterTypes(CommonClassNames.JAVA_LANG_OBJECT)
|
||||||
),
|
),
|
||||||
"isNull()", false
|
MethodNames.IS_NULL, false
|
||||||
),
|
),
|
||||||
Mapping(
|
Mapping(
|
||||||
anyOf(
|
anyOf(
|
||||||
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_NOT_NULL_METHOD).parameterTypes(CommonClassNames.JAVA_LANG_STRING, CommonClassNames.JAVA_LANG_OBJECT),
|
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_NOT_NULL_METHOD).parameterTypes(CommonClassNames.JAVA_LANG_STRING, CommonClassNames.JAVA_LANG_OBJECT),
|
||||||
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_NOT_NULL_METHOD).parameterTypes(CommonClassNames.JAVA_LANG_OBJECT)
|
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_NOT_NULL_METHOD).parameterTypes(CommonClassNames.JAVA_LANG_OBJECT)
|
||||||
),
|
),
|
||||||
"isNotNull()", false
|
MethodNames.IS_NOT_NULL, false
|
||||||
),
|
),
|
||||||
Mapping(
|
Mapping(
|
||||||
anyOf(
|
anyOf(
|
||||||
@ -51,14 +52,14 @@ class JUnitAssertToAssertJInspection : AbstractJUnitAssertInspection() {
|
|||||||
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_EQUALS_METHOD).parameterTypes(CommonClassNames.JAVA_LANG_STRING, "float", "float", "float"),
|
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_EQUALS_METHOD).parameterTypes(CommonClassNames.JAVA_LANG_STRING, "float", "float", "float"),
|
||||||
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_EQUALS_METHOD).parameterTypes("float", "float", "float")
|
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_EQUALS_METHOD).parameterTypes("float", "float", "float")
|
||||||
),
|
),
|
||||||
"isCloseTo()", hasDelta = true
|
MethodNames.IS_CLOSE_TO, hasDelta = true
|
||||||
),
|
),
|
||||||
Mapping(
|
Mapping(
|
||||||
anyOf(
|
anyOf(
|
||||||
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_EQUALS_METHOD).parameterCount(3),
|
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_EQUALS_METHOD).parameterCount(3),
|
||||||
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_EQUALS_METHOD).parameterCount(2)
|
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_EQUALS_METHOD).parameterCount(2)
|
||||||
),
|
),
|
||||||
"isEqualTo()"
|
MethodNames.IS_EQUAL_TO
|
||||||
),
|
),
|
||||||
Mapping(
|
Mapping(
|
||||||
anyOf(
|
anyOf(
|
||||||
@ -67,28 +68,28 @@ class JUnitAssertToAssertJInspection : AbstractJUnitAssertInspection() {
|
|||||||
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_NOT_EQUALS_METHOD).parameterTypes(CommonClassNames.JAVA_LANG_STRING, "float", "float", "float"),
|
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_NOT_EQUALS_METHOD).parameterTypes(CommonClassNames.JAVA_LANG_STRING, "float", "float", "float"),
|
||||||
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_NOT_EQUALS_METHOD).parameterTypes("float", "float", "float")
|
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_NOT_EQUALS_METHOD).parameterTypes("float", "float", "float")
|
||||||
),
|
),
|
||||||
"isNotCloseTo()", hasDelta = true
|
MethodNames.IS_NOT_CLOSE_TO, hasDelta = true
|
||||||
),
|
),
|
||||||
Mapping(
|
Mapping(
|
||||||
anyOf(
|
anyOf(
|
||||||
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_NOT_EQUALS_METHOD).parameterCount(3),
|
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_NOT_EQUALS_METHOD).parameterCount(3),
|
||||||
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_NOT_EQUALS_METHOD).parameterCount(2)
|
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_NOT_EQUALS_METHOD).parameterCount(2)
|
||||||
),
|
),
|
||||||
"isNotEqualTo()"
|
MethodNames.IS_NOT_EQUAL_TO
|
||||||
),
|
),
|
||||||
Mapping(
|
Mapping(
|
||||||
anyOf(
|
anyOf(
|
||||||
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_SAME_METHOD).parameterCount(3),
|
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_SAME_METHOD).parameterCount(3),
|
||||||
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_SAME_METHOD).parameterCount(2)
|
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_SAME_METHOD).parameterCount(2)
|
||||||
),
|
),
|
||||||
"isSameAs()"
|
MethodNames.IS_SAME_AS
|
||||||
),
|
),
|
||||||
Mapping(
|
Mapping(
|
||||||
anyOf(
|
anyOf(
|
||||||
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_NOT_SAME_METHOD).parameterCount(3),
|
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_NOT_SAME_METHOD).parameterCount(3),
|
||||||
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_NOT_SAME_METHOD).parameterCount(2)
|
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_NOT_SAME_METHOD).parameterCount(2)
|
||||||
),
|
),
|
||||||
"isNotSameAs()"
|
MethodNames.IS_NOT_SAME_AS
|
||||||
),
|
),
|
||||||
Mapping(
|
Mapping(
|
||||||
anyOf(
|
anyOf(
|
||||||
@ -97,14 +98,14 @@ class JUnitAssertToAssertJInspection : AbstractJUnitAssertInspection() {
|
|||||||
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_ARRAY_EQUALS_METHOD).parameterTypes(CommonClassNames.JAVA_LANG_STRING, "float[]", "float[]", "float"),
|
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_ARRAY_EQUALS_METHOD).parameterTypes(CommonClassNames.JAVA_LANG_STRING, "float[]", "float[]", "float"),
|
||||||
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_ARRAY_EQUALS_METHOD).parameterTypes("float[]", "float[]", "float")
|
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_ARRAY_EQUALS_METHOD).parameterTypes("float[]", "float[]", "float")
|
||||||
),
|
),
|
||||||
"containsExactly()", hasDelta = true
|
MethodNames.CONTAINS_EXACTLY, hasDelta = true
|
||||||
),
|
),
|
||||||
Mapping(
|
Mapping(
|
||||||
anyOf(
|
anyOf(
|
||||||
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_ARRAY_EQUALS_METHOD).parameterCount(2),
|
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_ARRAY_EQUALS_METHOD).parameterCount(2),
|
||||||
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_ARRAY_EQUALS_METHOD).parameterCount(3)
|
CallMatcher.staticCall(JUNIT_ASSERT_CLASSNAME, ASSERT_ARRAY_EQUALS_METHOD).parameterCount(3)
|
||||||
),
|
),
|
||||||
"containsExactly()"
|
MethodNames.CONTAINS_EXACTLY
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -142,7 +143,7 @@ class JUnitAssertToAssertJInspection : AbstractJUnitAssertInspection() {
|
|||||||
val originalMethod = getOriginalMethodName(expression) ?: return
|
val originalMethod = getOriginalMethodName(expression) ?: return
|
||||||
val description = REPLACE_DESCRIPTION_TEMPLATE.format(originalMethod, replacementMethod)
|
val description = REPLACE_DESCRIPTION_TEMPLATE.format(originalMethod, replacementMethod)
|
||||||
val message = CONVERT_MESSAGE_TEMPLATE.format(originalMethod)
|
val message = CONVERT_MESSAGE_TEMPLATE.format(originalMethod)
|
||||||
val quickFix = ReplaceJUnitAssertMethodCallQuickFix(description, hasExpected, replacementMethod)
|
val quickFix = ReplaceJUnitAssertMethodCallQuickFix(description, !hasExpected, replacementMethod)
|
||||||
holder.registerProblem(expression, message, quickFix)
|
holder.registerProblem(expression, message, quickFix)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,21 +1,15 @@
|
|||||||
package de.platon42.intellij.plugins.cajon.quickfixes
|
package de.platon42.intellij.plugins.cajon.quickfixes
|
||||||
|
|
||||||
import com.intellij.codeInspection.LocalQuickFix
|
import com.intellij.codeInspection.LocalQuickFix
|
||||||
import com.intellij.psi.PsiElementFactory
|
import com.intellij.psi.*
|
||||||
import com.intellij.psi.PsiJavaFile
|
import de.platon42.intellij.plugins.cajon.AssertJClassNames
|
||||||
import com.intellij.psi.PsiMethod
|
import de.platon42.intellij.plugins.cajon.MethodNames
|
||||||
import com.intellij.psi.PsiMethodCallExpression
|
import de.platon42.intellij.plugins.cajon.firstArg
|
||||||
import org.jetbrains.annotations.NonNls
|
|
||||||
|
|
||||||
abstract class AbstractCommonQuickFix(private val description: String) : LocalQuickFix {
|
abstract class AbstractCommonQuickFix(private val description: String) : LocalQuickFix {
|
||||||
|
|
||||||
override fun getFamilyName() = description
|
override fun getFamilyName() = description
|
||||||
|
|
||||||
companion object {
|
|
||||||
@NonNls
|
|
||||||
const val GUAVA_ASSERTIONS_CLASSNAME = "org.assertj.guava.api.Assertions"
|
|
||||||
}
|
|
||||||
|
|
||||||
protected fun addStaticImport(method: PsiMethod, element: PsiMethodCallExpression, factory: PsiElementFactory, vararg allowedClashes: String) {
|
protected fun addStaticImport(method: PsiMethod, element: PsiMethodCallExpression, factory: PsiElementFactory, vararg allowedClashes: String) {
|
||||||
val methodName = method.name
|
val methodName = method.name
|
||||||
val containingClass = method.containingClass ?: return
|
val containingClass = method.containingClass ?: return
|
||||||
@ -29,4 +23,13 @@ abstract class AbstractCommonQuickFix(private val description: String) : LocalQu
|
|||||||
importList.add(factory.createImportStaticStatement(containingClass, methodName))
|
importList.add(factory.createImportStaticStatement(containingClass, methodName))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected fun createAssertThat(context: PsiElement, actualExpression: PsiExpression): PsiMethodCallExpression {
|
||||||
|
val factory = JavaPsiFacade.getElementFactory(context.project)
|
||||||
|
val newMethodCall = factory.createExpressionFromText(
|
||||||
|
"${AssertJClassNames.ASSERTIONS_CLASSNAME}.${MethodNames.ASSERT_THAT}(a)", context
|
||||||
|
) as PsiMethodCallExpression
|
||||||
|
newMethodCall.firstArg.replace(actualExpression)
|
||||||
|
return newMethodCall
|
||||||
|
}
|
||||||
}
|
}
|
@ -7,6 +7,7 @@ import com.intellij.psi.PsiMethodCallExpression
|
|||||||
import com.intellij.psi.PsiStatement
|
import com.intellij.psi.PsiStatement
|
||||||
import com.intellij.psi.util.PsiTreeUtil
|
import com.intellij.psi.util.PsiTreeUtil
|
||||||
import de.platon42.intellij.plugins.cajon.firstArg
|
import de.platon42.intellij.plugins.cajon.firstArg
|
||||||
|
import de.platon42.intellij.plugins.cajon.map
|
||||||
import de.platon42.intellij.plugins.cajon.qualifierExpression
|
import de.platon42.intellij.plugins.cajon.qualifierExpression
|
||||||
import de.platon42.intellij.plugins.cajon.replaceQualifierFromMethodCall
|
import de.platon42.intellij.plugins.cajon.replaceQualifierFromMethodCall
|
||||||
|
|
||||||
@ -25,8 +26,9 @@ class RemoveActualOutmostMethodCallQuickFix(
|
|||||||
val oldExpectedExpression = PsiTreeUtil.findChildOfType(statement, PsiMethodCallExpression::class.java) ?: return
|
val oldExpectedExpression = PsiTreeUtil.findChildOfType(statement, PsiMethodCallExpression::class.java) ?: return
|
||||||
|
|
||||||
val factory = JavaPsiFacade.getElementFactory(element.project)
|
val factory = JavaPsiFacade.getElementFactory(element.project)
|
||||||
val expectedExpression =
|
val expectedExpression = factory.createExpressionFromText(
|
||||||
factory.createExpressionFromText("a.${if (noExpectedExpression) replacementMethod else replacementMethod.replace("()", "(e)")}", element) as PsiMethodCallExpression
|
"a.$replacementMethod${noExpectedExpression.map("()", "(e)")}", element
|
||||||
|
) as PsiMethodCallExpression
|
||||||
if (!noExpectedExpression) {
|
if (!noExpectedExpression) {
|
||||||
expectedExpression.firstArg.replace(oldExpectedExpression.firstArg)
|
expectedExpression.firstArg.replace(oldExpectedExpression.firstArg)
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@ class ReplaceExpectedOutmostMethodCallQuickFix(description: String, private val
|
|||||||
|
|
||||||
val factory = JavaPsiFacade.getElementFactory(element.project)
|
val factory = JavaPsiFacade.getElementFactory(element.project)
|
||||||
val expectedExpression =
|
val expectedExpression =
|
||||||
factory.createExpressionFromText("a.${replacementMethod.replace("()", "(e)")}", element) as PsiMethodCallExpression
|
factory.createExpressionFromText("a.$replacementMethod(e)", element) as PsiMethodCallExpression
|
||||||
val expectedMethodCallExpression = oldExpectedExpression.firstArg as? PsiMethodCallExpression ?: return
|
val expectedMethodCallExpression = oldExpectedExpression.firstArg as? PsiMethodCallExpression ?: return
|
||||||
expectedExpression.firstArg.replace(expectedMethodCallExpression.firstArg)
|
expectedExpression.firstArg.replace(expectedMethodCallExpression.firstArg)
|
||||||
expectedExpression.replaceQualifierFromMethodCall(oldExpectedExpression)
|
expectedExpression.replaceQualifierFromMethodCall(oldExpectedExpression)
|
||||||
|
@ -6,10 +6,13 @@ import com.intellij.psi.JavaPsiFacade
|
|||||||
import com.intellij.psi.PsiMethodCallExpression
|
import com.intellij.psi.PsiMethodCallExpression
|
||||||
import com.intellij.psi.codeStyle.CodeStyleManager
|
import com.intellij.psi.codeStyle.CodeStyleManager
|
||||||
import com.intellij.psi.codeStyle.JavaCodeStyleManager
|
import com.intellij.psi.codeStyle.JavaCodeStyleManager
|
||||||
|
import de.platon42.intellij.plugins.cajon.AssertJClassNames.Companion.GUAVA_ASSERTIONS_CLASSNAME
|
||||||
|
import de.platon42.intellij.plugins.cajon.MethodNames
|
||||||
import de.platon42.intellij.plugins.cajon.firstArg
|
import de.platon42.intellij.plugins.cajon.firstArg
|
||||||
|
import de.platon42.intellij.plugins.cajon.map
|
||||||
import de.platon42.intellij.plugins.cajon.replaceQualifier
|
import de.platon42.intellij.plugins.cajon.replaceQualifier
|
||||||
|
|
||||||
class ReplaceJUnitAssertMethodCallQuickFix(description: String, private val hasExpected: Boolean, private val replacementMethod: String) :
|
class ReplaceJUnitAssertMethodCallQuickFix(description: String, private val noExpectedExpression: Boolean, private val replacementMethod: String) :
|
||||||
AbstractCommonQuickFix(description) {
|
AbstractCommonQuickFix(description) {
|
||||||
|
|
||||||
override fun applyFix(project: Project, descriptor: ProblemDescriptor) {
|
override fun applyFix(project: Project, descriptor: ProblemDescriptor) {
|
||||||
@ -18,30 +21,27 @@ class ReplaceJUnitAssertMethodCallQuickFix(description: String, private val hasE
|
|||||||
val args = methodCallExpression.argumentList
|
val args = methodCallExpression.argumentList
|
||||||
val count = args.expressionCount
|
val count = args.expressionCount
|
||||||
val actualExpression = args.expressions[count - 1] ?: return
|
val actualExpression = args.expressions[count - 1] ?: return
|
||||||
val (expectedExpression, messageExpression) = if (hasExpected) {
|
val (expectedExpression, messageExpression) = if (noExpectedExpression) {
|
||||||
|
val message = if (count > 1) args.expressions[0] else null
|
||||||
|
null to message
|
||||||
|
} else {
|
||||||
val expected = args.expressions[count - 2] ?: return
|
val expected = args.expressions[count - 2] ?: return
|
||||||
val message = if (count > 2) args.expressions[0] else null
|
val message = if (count > 2) args.expressions[0] else null
|
||||||
expected to message
|
expected to message
|
||||||
} else {
|
|
||||||
val message = if (count > 1) args.expressions[0] else null
|
|
||||||
null to message
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val factory = JavaPsiFacade.getElementFactory(element.project)
|
val factory = JavaPsiFacade.getElementFactory(element.project)
|
||||||
val expectedMethodCall = factory.createExpressionFromText(
|
val expectedMethodCall = factory.createExpressionFromText(
|
||||||
"a.${if (hasExpected) replacementMethod.replace("()", "(e)") else replacementMethod}", element
|
"a.$replacementMethod${noExpectedExpression.map("()", "(e)")}", element
|
||||||
) as PsiMethodCallExpression
|
) as PsiMethodCallExpression
|
||||||
if (hasExpected) {
|
if (!noExpectedExpression) {
|
||||||
expectedMethodCall.firstArg.replace(expectedExpression!!)
|
expectedMethodCall.firstArg.replace(expectedExpression!!)
|
||||||
}
|
}
|
||||||
|
|
||||||
val newMethodCall = factory.createExpressionFromText(
|
val newMethodCall = createAssertThat(element, actualExpression)
|
||||||
"org.assertj.core.api.Assertions.assertThat(a)", element
|
|
||||||
) as PsiMethodCallExpression
|
|
||||||
newMethodCall.firstArg.replace(actualExpression)
|
|
||||||
|
|
||||||
if (messageExpression != null) {
|
if (messageExpression != null) {
|
||||||
val asExpression = factory.createExpressionFromText("a.as(desc)", element) as PsiMethodCallExpression
|
val asExpression = factory.createExpressionFromText("a.${MethodNames.AS}(desc)", element) as PsiMethodCallExpression
|
||||||
asExpression.firstArg.replace(messageExpression)
|
asExpression.firstArg.replace(messageExpression)
|
||||||
asExpression.replaceQualifier(newMethodCall)
|
asExpression.replaceQualifier(newMethodCall)
|
||||||
expectedMethodCall.replaceQualifier(asExpression)
|
expectedMethodCall.replaceQualifier(asExpression)
|
||||||
|
@ -6,6 +6,7 @@ import com.intellij.psi.JavaPsiFacade
|
|||||||
import com.intellij.psi.PsiMethodCallExpression
|
import com.intellij.psi.PsiMethodCallExpression
|
||||||
import com.intellij.psi.codeStyle.CodeStyleManager
|
import com.intellij.psi.codeStyle.CodeStyleManager
|
||||||
import com.intellij.psi.codeStyle.JavaCodeStyleManager
|
import com.intellij.psi.codeStyle.JavaCodeStyleManager
|
||||||
|
import de.platon42.intellij.plugins.cajon.AssertJClassNames.Companion.GUAVA_ASSERTIONS_CLASSNAME
|
||||||
import de.platon42.intellij.plugins.cajon.firstArg
|
import de.platon42.intellij.plugins.cajon.firstArg
|
||||||
import de.platon42.intellij.plugins.cajon.getArg
|
import de.platon42.intellij.plugins.cajon.getArg
|
||||||
import de.platon42.intellij.plugins.cajon.replaceQualifier
|
import de.platon42.intellij.plugins.cajon.replaceQualifier
|
||||||
@ -30,16 +31,13 @@ class ReplaceJUnitDeltaAssertMethodCallQuickFix(description: String, private val
|
|||||||
offsetMethodCall.firstArg.replace(deltaExpression)
|
offsetMethodCall.firstArg.replace(deltaExpression)
|
||||||
|
|
||||||
val expectedMethodCall = factory.createExpressionFromText(
|
val expectedMethodCall = factory.createExpressionFromText(
|
||||||
"a.${replacementMethod.removeSuffix("()")}(e, offs)", element
|
"a.$replacementMethod(e, offs)", element
|
||||||
) as PsiMethodCallExpression
|
) as PsiMethodCallExpression
|
||||||
|
|
||||||
expectedMethodCall.firstArg.replace(expectedExpression)
|
expectedMethodCall.firstArg.replace(expectedExpression)
|
||||||
expectedMethodCall.getArg(1).replace(offsetMethodCall)
|
expectedMethodCall.getArg(1).replace(offsetMethodCall)
|
||||||
|
|
||||||
val newMethodCall = factory.createExpressionFromText(
|
val newMethodCall = createAssertThat(element, actualExpression)
|
||||||
"org.assertj.core.api.Assertions.assertThat(a)", element
|
|
||||||
) as PsiMethodCallExpression
|
|
||||||
newMethodCall.firstArg.replace(actualExpression)
|
|
||||||
|
|
||||||
if (messageExpression != null) {
|
if (messageExpression != null) {
|
||||||
val asExpression = factory.createExpressionFromText("a.as(desc)", element) as PsiMethodCallExpression
|
val asExpression = factory.createExpressionFromText("a.as(desc)", element) as PsiMethodCallExpression
|
||||||
|
@ -14,7 +14,7 @@ class ReplaceSimpleMethodCallQuickFix(description: String, private val replaceme
|
|||||||
|
|
||||||
val factory = JavaPsiFacade.getElementFactory(element.project)
|
val factory = JavaPsiFacade.getElementFactory(element.project)
|
||||||
val expectedExpression =
|
val expectedExpression =
|
||||||
factory.createExpressionFromText("a.$replacementMethod", element) as PsiMethodCallExpression
|
factory.createExpressionFromText("a.$replacementMethod()", element) as PsiMethodCallExpression
|
||||||
expectedExpression.replaceQualifierFromMethodCall(methodCallExpression)
|
expectedExpression.replaceQualifierFromMethodCall(methodCallExpression)
|
||||||
element.replace(expectedExpression)
|
element.replace(expectedExpression)
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import com.intellij.openapi.project.Project
|
|||||||
import com.intellij.psi.*
|
import com.intellij.psi.*
|
||||||
import com.intellij.psi.util.PsiTreeUtil
|
import com.intellij.psi.util.PsiTreeUtil
|
||||||
import de.platon42.intellij.plugins.cajon.firstArg
|
import de.platon42.intellij.plugins.cajon.firstArg
|
||||||
|
import de.platon42.intellij.plugins.cajon.map
|
||||||
import de.platon42.intellij.plugins.cajon.qualifierExpression
|
import de.platon42.intellij.plugins.cajon.qualifierExpression
|
||||||
import de.platon42.intellij.plugins.cajon.replaceQualifierFromMethodCall
|
import de.platon42.intellij.plugins.cajon.replaceQualifierFromMethodCall
|
||||||
|
|
||||||
@ -24,8 +25,9 @@ class ReplaceSizeMethodCallQuickFix(
|
|||||||
val oldExpectedExpression = PsiTreeUtil.findChildOfType(statement, PsiMethodCallExpression::class.java) ?: return
|
val oldExpectedExpression = PsiTreeUtil.findChildOfType(statement, PsiMethodCallExpression::class.java) ?: return
|
||||||
|
|
||||||
val factory = JavaPsiFacade.getElementFactory(element.project)
|
val factory = JavaPsiFacade.getElementFactory(element.project)
|
||||||
val expectedExpression =
|
val expectedExpression = factory.createExpressionFromText(
|
||||||
factory.createExpressionFromText("a.${if (noExpectedExpression) replacementMethod else replacementMethod.replace("()", "(e)")}", element) as PsiMethodCallExpression
|
"a.$replacementMethod${noExpectedExpression.map("()", "(e)")}", element
|
||||||
|
) as PsiMethodCallExpression
|
||||||
if (!noExpectedExpression) {
|
if (!noExpectedExpression) {
|
||||||
if (expectedIsCollection) {
|
if (expectedIsCollection) {
|
||||||
replaceCollectionSizeOrArrayLength(oldExpectedExpression.firstArg)
|
replaceCollectionSizeOrArrayLength(oldExpectedExpression.firstArg)
|
||||||
|
@ -8,6 +8,7 @@ import com.intellij.psi.PsiMethodCallExpression
|
|||||||
import com.intellij.psi.PsiStatement
|
import com.intellij.psi.PsiStatement
|
||||||
import com.intellij.psi.util.PsiTreeUtil
|
import com.intellij.psi.util.PsiTreeUtil
|
||||||
import de.platon42.intellij.plugins.cajon.firstArg
|
import de.platon42.intellij.plugins.cajon.firstArg
|
||||||
|
import de.platon42.intellij.plugins.cajon.map
|
||||||
import de.platon42.intellij.plugins.cajon.replaceQualifierFromMethodCall
|
import de.platon42.intellij.plugins.cajon.replaceQualifierFromMethodCall
|
||||||
|
|
||||||
class SplitBinaryExpressionMethodCallQuickFix(
|
class SplitBinaryExpressionMethodCallQuickFix(
|
||||||
@ -28,8 +29,9 @@ class SplitBinaryExpressionMethodCallQuickFix(
|
|||||||
val oldExpectedExpression = PsiTreeUtil.findChildOfType(statement, PsiMethodCallExpression::class.java) ?: return
|
val oldExpectedExpression = PsiTreeUtil.findChildOfType(statement, PsiMethodCallExpression::class.java) ?: return
|
||||||
|
|
||||||
val factory = JavaPsiFacade.getElementFactory(element.project)
|
val factory = JavaPsiFacade.getElementFactory(element.project)
|
||||||
val expectedExpression =
|
val expectedExpression = factory.createExpressionFromText(
|
||||||
factory.createExpressionFromText("a.${if (noExpectedExpression) replacementMethod else replacementMethod.replace("()", "(e)")}", element) as PsiMethodCallExpression
|
"a.$replacementMethod${noExpectedExpression.map("()", "(e)")}", element
|
||||||
|
) as PsiMethodCallExpression
|
||||||
if (!noExpectedExpression) {
|
if (!noExpectedExpression) {
|
||||||
expectedExpression.firstArg.replace(expectedArgument)
|
expectedExpression.firstArg.replace(expectedArgument)
|
||||||
}
|
}
|
||||||
|
@ -23,8 +23,9 @@ class SplitEqualsExpressionMethodCallQuickFix(description: String, private val r
|
|||||||
val oldExpectedExpression = PsiTreeUtil.findChildOfType(statement, PsiMethodCallExpression::class.java) ?: return
|
val oldExpectedExpression = PsiTreeUtil.findChildOfType(statement, PsiMethodCallExpression::class.java) ?: return
|
||||||
|
|
||||||
val factory = JavaPsiFacade.getElementFactory(element.project)
|
val factory = JavaPsiFacade.getElementFactory(element.project)
|
||||||
val expectedExpression =
|
val expectedExpression = factory.createExpressionFromText(
|
||||||
factory.createExpressionFromText("a.${replacementMethod.replace("()", "(e)")}", element) as PsiMethodCallExpression
|
"a.$replacementMethod(e)", element
|
||||||
|
) as PsiMethodCallExpression
|
||||||
expectedExpression.firstArg.replace(expectedArgument)
|
expectedExpression.firstArg.replace(expectedArgument)
|
||||||
expectedExpression.replaceQualifierFromMethodCall(oldExpectedExpression)
|
expectedExpression.replaceQualifierFromMethodCall(oldExpectedExpression)
|
||||||
oldExpectedExpression.replace(expectedExpression)
|
oldExpectedExpression.replace(expectedExpression)
|
||||||
|
Loading…
Reference in New Issue
Block a user