From 212683a78c13748b10d1b6770b798df6668f4e1c Mon Sep 17 00:00:00 2001 From: Bart van Helvert Date: Tue, 3 Oct 2023 12:16:20 +0200 Subject: [PATCH] [jvm] Disable assertions between inconvertible types on throwables #IDEA-331109 GitOrigin-RevId: b7f9a705ae3cce08880316d7d7a2ff0a92668bf9 --- ...sertBetweenInconvertibleTypesInspection.kt | 22 ++++++++++++++----- ...BetweenInconvertibleTypesInspectionTest.kt | 15 +++++++++++++ 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/jvm/jvm-analysis-impl/src/com/intellij/codeInspection/test/AssertBetweenInconvertibleTypesInspection.kt b/jvm/jvm-analysis-impl/src/com/intellij/codeInspection/test/AssertBetweenInconvertibleTypesInspection.kt index 04c07f6c03ae..e787a7e1fa32 100644 --- a/jvm/jvm-analysis-impl/src/com/intellij/codeInspection/test/AssertBetweenInconvertibleTypesInspection.kt +++ b/jvm/jvm-analysis-impl/src/com/intellij/codeInspection/test/AssertBetweenInconvertibleTypesInspection.kt @@ -97,6 +97,7 @@ private class AssertEqualsBetweenInconvertibleTypesVisitor(private val holder: P ASSERTJ_EXTRACTING_REF_MATCHER.uCallMatches(elem) -> return // not supported ASSERTJ_EXTRACTING_FUN_MATCHER.uCallMatches(elem) -> return // not supported ASSERTJ_EXTRACTING_ITER_FUN_MATCHER.uCallMatches(elem) -> return // not supported + elem.resolve()?.containingClass?.qualifiedName == "org.assertj.core.api.AbstractThrowableAssert" -> return // not supported ASSERTJ_SINGLE_ELEMENT_MATCHER.uCallMatches(elem) || ASSERTJ_FIRST_ELEMENT_MATCHER.uCallMatches(elem) -> { if (!InheritanceUtil.isInheritor(sourceType, CommonClassNames.JAVA_LANG_ITERABLE)) return sourceType.asSafely()?.parameters?.firstOrNull() ?: return @@ -111,15 +112,24 @@ private class AssertEqualsBetweenInconvertibleTypesVisitor(private val holder: P val comparedTypeText = left.presentableText val comparisonTypeText = right.presentableText if (isAssertNotEqualsMethod(methodName)) { - return JvmAnalysisBundle.message("jvm.inspections.assertnotequals.between.inconvertible.types.problem.descriptor", comparedTypeText, - comparisonTypeText) + return JvmAnalysisBundle.message( + "jvm.inspections.assertnotequals.between.inconvertible.types.problem.descriptor", + comparedTypeText, + comparisonTypeText + ) } return if (isAssertNotSameMethod(methodName)) { - JvmAnalysisBundle.message("jvm.inspections.assertnotsame.between.inconvertible.types.problem.descriptor", comparedTypeText, comparisonTypeText) + JvmAnalysisBundle.message( + "jvm.inspections.assertnotsame.between.inconvertible.types.problem.descriptor", + comparedTypeText, + comparisonTypeText + ) } - else JvmAnalysisBundle.message("jvm.inspections.assertequals.between.inconvertible.types.problem.descriptor", - StringUtil.escapeXmlEntities(comparedTypeText), - StringUtil.escapeXmlEntities(comparisonTypeText)) + else JvmAnalysisBundle.message( + "jvm.inspections.assertequals.between.inconvertible.types.problem.descriptor", + StringUtil.escapeXmlEntities(comparedTypeText), + StringUtil.escapeXmlEntities(comparisonTypeText) + ) } private fun isAssertNotEqualsMethod(methodName: String): Boolean = "assertNotEquals" == methodName || "isNotEqualTo" == methodName diff --git a/jvm/jvm-analysis-java-tests/testSrc/com/intellij/codeInspection/tests/java/test/JavaAssertEqualsBetweenInconvertibleTypesInspectionTest.kt b/jvm/jvm-analysis-java-tests/testSrc/com/intellij/codeInspection/tests/java/test/JavaAssertEqualsBetweenInconvertibleTypesInspectionTest.kt index c0f4ef88d6e4..5b9ace9c2b59 100644 --- a/jvm/jvm-analysis-java-tests/testSrc/com/intellij/codeInspection/tests/java/test/JavaAssertEqualsBetweenInconvertibleTypesInspectionTest.kt +++ b/jvm/jvm-analysis-java-tests/testSrc/com/intellij/codeInspection/tests/java/test/JavaAssertEqualsBetweenInconvertibleTypesInspectionTest.kt @@ -318,4 +318,19 @@ class JavaAssertEqualsBetweenInconvertibleTypesInspectionTest : AssertEqualsBetw } """.trimIndent()) } + + fun `test Assertj cause match`() { + myFixture.testHighlighting(JvmLanguage.JAVA, """ + import org.assertj.core.api.Assertions; + + class MyTest { + @org.junit.jupiter.api.Test + void testExtractingNoHighlight() { + NullPointerException cause = new NullPointerException(); + IllegalArgumentException e = new IllegalArgumentException(cause); + Assertions.assertThat(e).cause().isSameAs(cause); + } + } + """.trimIndent()) + } }