add ProjectFileIndex#isInLibrary(fileOrDir)
authorSergey Simonchik <sergey.simonchik@jetbrains.com>
Fri, 26 Aug 2016 13:22:37 +0000 (16:22 +0300)
committerSergey Simonchik <sergey.simonchik@jetbrains.com>
Fri, 26 Aug 2016 13:22:37 +0000 (16:22 +0300)
java/java-tests/testSrc/com/intellij/openapi/roots/impl/DirectoryIndexTest.java
platform/projectModel-api/src/com/intellij/openapi/roots/ProjectFileIndex.java
platform/projectModel-impl/src/com/intellij/openapi/roots/impl/ProjectFileIndexImpl.java

index 778ae4f759b0a77691ac00790ea19134f98aaf94..03541cdbe2dda9bf719d658376d8624db8390841 100644 (file)
@@ -858,7 +858,7 @@ public class DirectoryIndexTest extends IdeaTestCase {
 
   private void checkInfo(VirtualFile file,
                          @Nullable Module module,
-                         boolean isInLibrary,
+                         boolean isInLibraryClasses,
                          boolean isInLibrarySource,
                          @Nullable String packageName, 
                          @Nullable final JpsModuleSourceRootType<?> moduleSourceRootType,
@@ -872,8 +872,9 @@ public class DirectoryIndexTest extends IdeaTestCase {
     else {
       assertFalse("isInModuleSource", info.isInModuleSource());
     }
-    assertEquals(isInLibrary, info.hasLibraryClassRoot());
+    assertEquals(isInLibraryClasses, info.hasLibraryClassRoot());
     assertEquals(isInLibrarySource, info.isInLibrarySource());
+    assertEquals(isInLibraryClasses || isInLibrarySource, myFileIndex.isInLibrary(file));
 
     if (file.isDirectory()) {
       assertEquals(packageName, myFileIndex.getPackageNameByDirectory(file));
index ee6c141050b0f03e03a8396f6978f0ac42d583ec..22b6241b681c1f768e2e8ea89a92d69e55096e46 100644 (file)
@@ -141,6 +141,16 @@ public interface ProjectFileIndex extends FileIndex {
   boolean isInLibraryClasses(@NotNull VirtualFile fileOrDir);
 
   /**
+   * Returns true if <code>fileOrDir</code> is a file which belongs to the classes or sources of some library.
+   *
+   * @param fileOrDir the file or directory to check.
+   * @return true if the file belongs to the classes or sources of some library, false otherwise.
+   */
+  default boolean isInLibrary(@NotNull VirtualFile fileOrDir) {
+    return isInLibraryClasses(fileOrDir) || isInLibrarySource(fileOrDir);
+  }
+
+  /**
    * Returns true if <code>fileOrDir</code> is a file or directory from library source.
    *
    * @param fileOrDir the file or directory to check.
@@ -173,4 +183,4 @@ public interface ProjectFileIndex extends FileIndex {
    * @return true if <code>file</code> is ignored, false otherwise.
    */
   boolean isUnderIgnored(@NotNull VirtualFile file);
-}
\ No newline at end of file
+}
index d669a2b870f99e27fbb3ff62459bf907a7832e5e..a9bfea4bc768afda272131c9d281f3032efb14dc 100644 (file)
@@ -191,6 +191,12 @@ public class ProjectFileIndexImpl extends FileIndexBase implements ProjectFileIn
     return getInfoForFileOrDirectory(fileOrDir).isInLibrarySource();
   }
 
+  // a slightly faster implementation then the default one
+  public boolean isInLibrary(@NotNull VirtualFile fileOrDir) {
+    DirectoryInfo info = getInfoForFileOrDirectory(fileOrDir);
+    return info.isInProject() && info.hasLibraryClassRoot() || info.isInLibrarySource();
+  }
+
   @Override
   public boolean isIgnored(@NotNull VirtualFile file) {
     return isExcluded(file);