diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/HardcodedContracts.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/HardcodedContracts.java index c9097d2f1e13..5092bebd2dc2 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/HardcodedContracts.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/HardcodedContracts.java @@ -80,21 +80,23 @@ public class HardcodedContracts { return Collections.singletonList(new MethodContract(constraints, THROW_EXCEPTION)); } } - else if ("junit.framework.Assert".equals(className) || - "org.junit.Assert".equals(className) || - "org.junit.Assume".equals(className) || - "junit.framework.TestCase".equals(className) || - "com.google.common.truth.Truth".equals(className) || - "com.google.common.truth.TestVerb".equals(className) || - className.startsWith("org.assertj.core.api.") || - "org.testng.Assert".equals(className) || - "org.testng.AssertJUnit".equals(className)) { + else if (isJunit(className) || isTestng(className) || + className.startsWith("com.google.common.truth.") || + className.startsWith("org.assertj.core.api.")) { return handleTestFrameworks(paramCount, className, methodName, call); } return Collections.emptyList(); } + private static boolean isJunit(String className) { + return className.startsWith("junit.framework.") || className.startsWith("org.junit."); + } + + private static boolean isTestng(String className) { + return className.startsWith("org.testng."); + } + private static boolean isNotNullMatcher(PsiExpression expr) { if (expr instanceof PsiMethodCallExpression) { String calledName = ((PsiMethodCallExpression)expr).getMethodExpression().getReferenceName(); @@ -122,16 +124,11 @@ public class HardcodedContracts { return handleAssertThat(paramCount, call); } - if (!"junit.framework.Assert".equals(className) && - !"junit.framework.TestCase".equals(className) && - !"org.junit.Assert".equals(className) && - !"org.junit.Assume".equals(className) && - !"org.testng.Assert".equals(className) && - !"org.testng.AssertJUnit".equals(className)) { + if (!isJunit(className) && !isTestng(className)) { return Collections.emptyList(); } - boolean testng = className.startsWith("org.testng."); + boolean testng = isTestng(className); if ("fail".equals(methodName)) { return Collections.singletonList(new MethodContract(createConstraintArray(paramCount), THROW_EXCEPTION)); } diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/Junit5Assert.java b/java/java-tests/testData/inspection/dataFlow/fixture/Junit5Assert.java new file mode 100644 index 000000000000..9a0c5684f31f --- /dev/null +++ b/java/java-tests/testData/inspection/dataFlow/fixture/Junit5Assert.java @@ -0,0 +1,11 @@ +import org.junit.jupiter.api.*; +import org.jetbrains.annotations.Nullable; + +class Contracts { + + void foo(@Nullable Object o) { + Assertions.assertNotNull(o); + String s = o.toString(); + } + +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/HardcodedContractsTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/HardcodedContractsTest.java index fcbaba1eeadf..228d05413964 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/HardcodedContractsTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/HardcodedContractsTest.java @@ -108,4 +108,11 @@ public class HardcodedContractsTest extends DataFlowInspectionTestCase { checkHighlighting(); } + public void testJunit5Assert() { + myFixture.addClass("package org.junit.jupiter.api; public class Assertions {\n" + + " public static void assertNotNull(Object actual){}" + + "}"); + checkHighlighting(); + } + }