WEB-46403 Improve HTML lexer API for easier consumption by framework specific support
[idea/community.git] / platform / projectModel-api / src / com / intellij / openapi / roots / TestSourcesFilter.java
1 // Copyright 2000-2018 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.
2 package com.intellij.openapi.roots;
3
4 import com.intellij.openapi.extensions.ExtensionPointName;
5 import com.intellij.openapi.project.Project;
6 import com.intellij.openapi.vfs.VirtualFile;
7 import org.jetbrains.annotations.ApiStatus;
8 import org.jetbrains.annotations.NotNull;
9 import org.jetbrains.jps.model.module.JpsModuleSourceRootType;
10
11 /**
12  * Implementations of this extension point can tell IDE whether some particular file is a test file.
13  * <p>
14  * By default, IntelliJ Platform considers files as tests only if they are located under test
15  * sources root {@link FileIndex#isInTestSourceContent(VirtualFile)}.
16  * <p>
17  * However there are plenty frameworks and languages which keep test files just nearby production files.
18  * E.g. *_test.go files are test files in Go language and some js/dart files are test files depending
19  * on their content. The extensions allow IDE to highlight such files with a green background,
20  * properly check if they are included in built-in search scopes, etc.
21  *
22  * @see FileIndex#isInTestSourceContent(VirtualFile)
23  * @see JpsModuleSourceRootType#isForTests()
24  * @author zolotov
25  */
26 @ApiStatus.OverrideOnly
27 public abstract class TestSourcesFilter {
28   private static final ExtensionPointName<TestSourcesFilter> EP_NAME = ExtensionPointName.create("com.intellij.testSourcesFilter");
29
30   public static boolean isTestSources(@NotNull VirtualFile file, @NotNull Project project) {
31     for (TestSourcesFilter filter : EP_NAME.getExtensions()) {
32       if (filter.isTestSource(file, project)) {
33         return true;
34       }
35     }
36     return false;
37   }
38
39   public abstract boolean isTestSource(@NotNull VirtualFile file, @NotNull Project project);
40 }