From 82c7b69cd3a5bcdf47d3d9fe64c7ef95f1b4a4b5 Mon Sep 17 00:00:00 2001 From: Ilyas Selimov Date: Thu, 14 May 2020 20:23:23 +0700 Subject: [PATCH] IDEA-235734 false positive warning: inspection should check whether an element is PsiClass descendant GitOrigin-RevId: 509445bd4a02c13d007b9c0cf37f559b2ec461bf --- .../codeInspection/testOnly/TestOnlyInspection.java | 13 ++++++------- .../expected.xml | 0 .../insideTestOnlyClass/src/InnerGenericType.java | 8 ++++++++ .../src/SeveralGenericTypes.java | 0 .../src/SingleGenericType.java | 0 .../src/StaticInitializerVariable.java | 8 ++++++++ .../java/codeInspection/TestOnlyInspectionTest.java | 2 +- 7 files changed, 23 insertions(+), 8 deletions(-) rename java/java-tests/testData/inspection/testOnly/{genericType => insideTestOnlyClass}/expected.xml (100%) create mode 100644 java/java-tests/testData/inspection/testOnly/insideTestOnlyClass/src/InnerGenericType.java rename java/java-tests/testData/inspection/testOnly/{genericType => insideTestOnlyClass}/src/SeveralGenericTypes.java (100%) rename java/java-tests/testData/inspection/testOnly/{genericType => insideTestOnlyClass}/src/SingleGenericType.java (100%) create mode 100644 java/java-tests/testData/inspection/testOnly/insideTestOnlyClass/src/StaticInitializerVariable.java diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/testOnly/TestOnlyInspection.java b/java/java-analysis-impl/src/com/intellij/codeInspection/testOnly/TestOnlyInspection.java index 2c8eb7e3652e..aa87acc06087 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/testOnly/TestOnlyInspection.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/testOnly/TestOnlyInspection.java @@ -112,8 +112,8 @@ public class TestOnlyInspection extends AbstractBaseJavaLocalInspectionTool { if (vft == null && !isAnnotatedAsTestOnly(member)) { return true; } - if (isInsideTestOnlyMethod(place) || isInsideTestOnlyField(place) || isInsideTestClass(place) || isUnderTestSources(place) - || isGenericType(place, member)) { + if (isInsideTestOnlyMethod(place) || isInsideTestOnlyField(place) || isInsideTestOnlyClass(place) || isInsideTestClass(place) + || isUnderTestSources(place)) { return true; } @@ -174,6 +174,10 @@ public class TestOnlyInspection extends AbstractBaseJavaLocalInspectionTool { return isAnnotatedAsTestOnly(getTopLevelParentOfType(e, PsiField.class)); } + private static boolean isInsideTestOnlyClass(@NotNull PsiElement e) { + return isAnnotatedAsTestOnly(getTopLevelParentOfType(e, PsiClass.class)); + } + private static boolean isAnnotatedAsTestOnly(@Nullable PsiMember m) { if (m == null) return false; return isDirectlyTestOnly(m) || isAnnotatedAsTestOnly(m.getContainingClass()); @@ -188,11 +192,6 @@ public class TestOnlyInspection extends AbstractBaseJavaLocalInspectionTool { return c != null && TestFrameworks.getInstance().isTestClass(c); } - private static boolean isGenericType(@NotNull PsiElement place, @NotNull PsiMember member) { - PsiClass parent = PsiTreeUtil.getParentOfType(place, PsiClass.class); - return member.equals(parent); - } - private static T getTopLevelParentOfType(PsiElement e, Class c) { T parent = PsiTreeUtil.getParentOfType(e, c); if (parent == null) return null; diff --git a/java/java-tests/testData/inspection/testOnly/genericType/expected.xml b/java/java-tests/testData/inspection/testOnly/insideTestOnlyClass/expected.xml similarity index 100% rename from java/java-tests/testData/inspection/testOnly/genericType/expected.xml rename to java/java-tests/testData/inspection/testOnly/insideTestOnlyClass/expected.xml diff --git a/java/java-tests/testData/inspection/testOnly/insideTestOnlyClass/src/InnerGenericType.java b/java/java-tests/testData/inspection/testOnly/insideTestOnlyClass/src/InnerGenericType.java new file mode 100644 index 000000000000..9b1259a8c873 --- /dev/null +++ b/java/java-tests/testData/inspection/testOnly/insideTestOnlyClass/src/InnerGenericType.java @@ -0,0 +1,8 @@ +import org.jetbrains.annotations.TestOnly; +import java.util.List; + +@TestOnly +public class Bar { + static abstract class Foo implements List { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/inspection/testOnly/genericType/src/SeveralGenericTypes.java b/java/java-tests/testData/inspection/testOnly/insideTestOnlyClass/src/SeveralGenericTypes.java similarity index 100% rename from java/java-tests/testData/inspection/testOnly/genericType/src/SeveralGenericTypes.java rename to java/java-tests/testData/inspection/testOnly/insideTestOnlyClass/src/SeveralGenericTypes.java diff --git a/java/java-tests/testData/inspection/testOnly/genericType/src/SingleGenericType.java b/java/java-tests/testData/inspection/testOnly/insideTestOnlyClass/src/SingleGenericType.java similarity index 100% rename from java/java-tests/testData/inspection/testOnly/genericType/src/SingleGenericType.java rename to java/java-tests/testData/inspection/testOnly/insideTestOnlyClass/src/SingleGenericType.java diff --git a/java/java-tests/testData/inspection/testOnly/insideTestOnlyClass/src/StaticInitializerVariable.java b/java/java-tests/testData/inspection/testOnly/insideTestOnlyClass/src/StaticInitializerVariable.java new file mode 100644 index 000000000000..94544e4690c5 --- /dev/null +++ b/java/java-tests/testData/inspection/testOnly/insideTestOnlyClass/src/StaticInitializerVariable.java @@ -0,0 +1,8 @@ +import org.jetbrains.annotations.TestOnly; + +@TestOnly +public class Bar { + static { + java.lang.Class clazz = Bar.class; + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/TestOnlyInspectionTest.java b/java/java-tests/testSrc/com/intellij/java/codeInspection/TestOnlyInspectionTest.java index e1f0b8e18d2a..19ac896bfaf3 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/TestOnlyInspectionTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/TestOnlyInspectionTest.java @@ -80,7 +80,7 @@ public class TestOnlyInspectionTest extends JavaInspectionTestCase { doTest(); } - public void testGenericType() { + public void testInsideTestOnlyClass() { doTest(); }