diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/unusedLibraries/UnusedLibrariesInspection.java b/java/java-analysis-impl/src/com/intellij/codeInspection/unusedLibraries/UnusedLibrariesInspection.java index d59acd8c23b4..efba1fb45f75 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/unusedLibraries/UnusedLibrariesInspection.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/unusedLibraries/UnusedLibrariesInspection.java @@ -100,7 +100,9 @@ public class UnusedLibrariesInspection extends GlobalInspectionTool { final List result = new ArrayList<>(); for (OrderEntry entry : moduleRootManager.getOrderEntries()) { - if (entry instanceof LibraryOrderEntry && !((LibraryOrderEntry)entry).isExported()) { + if (entry instanceof LibraryOrderEntry && + !((LibraryOrderEntry)entry).isExported() && + ((LibraryOrderEntry)entry).getScope() != DependencyScope.RUNTIME) { final Set files = new HashSet<>(Arrays.asList(((LibraryOrderEntry)entry).getRootFiles(OrderRootType.CLASSES))); boolean allRootsUnused = usedRoots == null || !files.removeAll(usedRoots); if (allRootsUnused) { diff --git a/java/java-tests/testData/inspection/unusedLibrary/junit.jar b/java/java-tests/testData/inspection/unusedLibrary/junit.jar deleted file mode 100644 index bfb318b2d7eb..000000000000 Binary files a/java/java-tests/testData/inspection/unusedLibrary/junit.jar and /dev/null differ diff --git a/java/java-tests/testData/inspection/unusedLibrary/junitAsRuntime/expected.xml b/java/java-tests/testData/inspection/unusedLibrary/junitAsRuntime/expected.xml new file mode 100644 index 000000000000..ec272abeaa3a --- /dev/null +++ b/java/java-tests/testData/inspection/unusedLibrary/junitAsRuntime/expected.xml @@ -0,0 +1,3 @@ + + + diff --git a/java/java-tests/testData/inspection/unusedLibrary/junitAsRuntime/src/Test.java b/java/java-tests/testData/inspection/unusedLibrary/junitAsRuntime/src/Test.java new file mode 100644 index 000000000000..96d83e0c5031 --- /dev/null +++ b/java/java-tests/testData/inspection/unusedLibrary/junitAsRuntime/src/Test.java @@ -0,0 +1,2 @@ +class Test { +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/UnusedLibraryInspectionTest.java b/java/java-tests/testSrc/com/intellij/java/codeInspection/UnusedLibraryInspectionTest.java index 5d6b74c8ac6c..1c9f6d02f1d5 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/UnusedLibraryInspectionTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/UnusedLibraryInspectionTest.java @@ -19,6 +19,10 @@ package com.intellij.java.codeInspection; import com.intellij.JavaTestUtil; import com.intellij.analysis.AnalysisScope; import com.intellij.codeInspection.unusedLibraries.UnusedLibrariesInspection; +import com.intellij.openapi.roots.DependencyScope; +import com.intellij.openapi.roots.LibraryOrderEntry; +import com.intellij.openapi.roots.ModuleRootManager; +import com.intellij.openapi.roots.OrderEntry; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.project.IntelliJProjectConfiguration; import com.intellij.testFramework.InspectionTestCase; @@ -35,6 +39,13 @@ public class UnusedLibraryInspectionTest extends InspectionTestCase { protected void setupRootModel(@NotNull String testDir, @NotNull VirtualFile[] sourceDir, String sdkName) { super.setupRootModel(testDir, sourceDir, sdkName); PsiTestUtil.addProjectLibrary(getModule(), "JUnit", IntelliJProjectConfiguration.getProjectLibraryClassesRootPaths("JUnit4")); + if (getTestName(true).endsWith("Runtime")) { + for (OrderEntry entry : ModuleRootManager.getInstance(getModule()).getOrderEntries()) { + if (entry instanceof LibraryOrderEntry && "JUnit".equals(((LibraryOrderEntry)entry).getLibraryName())) { + ((LibraryOrderEntry)entry).setScope(DependencyScope.RUNTIME); + } + } + } } private void doTest() { @@ -49,6 +60,7 @@ public class UnusedLibraryInspectionTest extends InspectionTestCase { public void testSimple() { doTest(); } public void testUsedJunit() { doTest(); } + public void testJunitAsRuntime() { doTest(); } public void testUsedJunitFromField() { doTest(); } public void testUsedInParameterAnnotation() { doTest(); } }