Android: Remove `kotlin-gradle-tooling.jar` from excludes
[idea/community.git] / platform / projectModel-api / src / com / intellij / openapi / roots / ProjectFileIndex.java
index 0ffe24353db675c10b95e363fa4cadb0a9f39a88..7527886f368be47d1b2a05ce92b66f3e965c7f66 100644 (file)
@@ -1,42 +1,26 @@
-/*
- * Copyright 2000-2016 JetBrains s.r.o.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
+// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
 package com.intellij.openapi.roots;
 
-import com.intellij.openapi.components.ServiceManager;
 import com.intellij.openapi.fileTypes.FileTypeRegistry;
 import com.intellij.openapi.module.Module;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.vfs.VirtualFile;
+import org.jetbrains.annotations.ApiStatus;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 import java.util.List;
 
 /**
- * Provides information about files contained in a project.
+ * Provides information about files contained in a project. Should be used from a read action.
  *
  * @see ProjectRootManager#getFileIndex()
  */
+@ApiStatus.NonExtendable
 public interface ProjectFileIndex extends FileIndex {
-  class SERVICE {
+  final class SERVICE {
     private SERVICE() { }
 
-    /**
-     * @deprecated use {@link ProjectFileIndex#getInstance(Project)} instead
-     */
     public static ProjectFileIndex getInstance(Project project) {
       return ProjectFileIndex.getInstance(project);
     }
@@ -44,7 +28,7 @@ public interface ProjectFileIndex extends FileIndex {
 
   @NotNull
   static ProjectFileIndex getInstance(@NotNull Project project) {
-    return ServiceManager.getService(project, ProjectFileIndex.class);
+    return project.getService(ProjectFileIndex.class);
   }
 
   /**
@@ -107,19 +91,19 @@ public interface ProjectFileIndex extends FileIndex {
   String getPackageNameByDirectory(@NotNull VirtualFile dir); //Q: move to FileIndex?
 
   /**
-   * Returns true if <code>file</code> is a file which belongs to the classes (not sources) of some library which is included into dependencies
+   * Returns true if {@code file} is a file which belongs to the classes (not sources) of some library which is included into dependencies
    * of some module.
    */
   boolean isLibraryClassFile(@NotNull VirtualFile file);
 
   /**
-   * Returns true if <code>fileOrDir</code> is a file or directory from production/test sources of some module or sources of some library which is included into dependencies
+   * Returns true if {@code fileOrDir} is a file or directory from production/test sources of some module or sources of some library which is included into dependencies
    * of some module.
    */
   boolean isInSource(@NotNull VirtualFile fileOrDir);
 
   /**
-   * Returns true if <code>fileOrDir</code> belongs to classes of some library which is included into dependencies of some module.
+   * Returns true if {@code fileOrDir} belongs to classes of some library which is included into dependencies of some module.
    */
   boolean isInLibraryClasses(@NotNull VirtualFile fileOrDir);
 
@@ -130,7 +114,7 @@ public interface ProjectFileIndex extends FileIndex {
   boolean isInLibrary(@NotNull VirtualFile fileOrDir);
 
   /**
-   * Returns true if <code>fileOrDir</code> is a file or directory from sources of some library which is included into dependencies
+   * Returns true if {@code fileOrDir} is a file or directory from sources of some library which is included into dependencies
    * of some module.
    */
   boolean isInLibrarySource(@NotNull VirtualFile fileOrDir);
@@ -147,7 +131,7 @@ public interface ProjectFileIndex extends FileIndex {
    * Checks if the specified file or directory is located under project roots but the file itself or one of its parent directories is
    * either excluded from the project or ignored by {@link FileTypeRegistry#isFileIgnored(VirtualFile)}).
    *
-   * @return true if <code>file</code> is excluded or ignored, false otherwise.
+   * @return true if {@code file} is excluded or ignored, false otherwise.
    */
   boolean isExcluded(@NotNull VirtualFile file);
 
@@ -155,7 +139,12 @@ public interface ProjectFileIndex extends FileIndex {
    * Checks if the specified file or directory is located under project roots but the file itself or one of its parent directories is ignored
    * by {@link FileTypeRegistry#isFileIgnored(VirtualFile)}).
    *
-   * @return true if <code>file</code> is ignored, false otherwise.
+   * @return true if {@code file} is ignored, false otherwise.
    */
   boolean isUnderIgnored(@NotNull VirtualFile file);
+
+  @Nullable
+  default SourceFolder getSourceFolder(@NotNull VirtualFile fileOrDir) {
+    return null;
+  }
 }