J2K KotlinSourceFilterScope: autoconvert
This commit is contained in:
+61
-84
@@ -14,105 +14,82 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jetbrains.kotlin.idea.stubindex;
|
package org.jetbrains.kotlin.idea.stubindex
|
||||||
|
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.roots.ProjectFileIndex;
|
import com.intellij.openapi.roots.ProjectFileIndex
|
||||||
import com.intellij.openapi.roots.ProjectRootManager;
|
import com.intellij.openapi.roots.ProjectRootManager
|
||||||
import com.intellij.openapi.util.Ref;
|
import com.intellij.openapi.util.Ref
|
||||||
import com.intellij.openapi.vfs.VirtualFile;
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
import com.intellij.psi.search.DelegatingGlobalSearchScope;
|
import com.intellij.psi.search.DelegatingGlobalSearchScope
|
||||||
import com.intellij.psi.search.GlobalSearchScope;
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
|
||||||
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil;
|
|
||||||
|
|
||||||
public class KotlinSourceFilterScope extends DelegatingGlobalSearchScope {
|
class KotlinSourceFilterScope private constructor(
|
||||||
@NotNull
|
delegate: GlobalSearchScope,
|
||||||
public static GlobalSearchScope sourcesAndLibraries(@NotNull GlobalSearchScope delegate, @NotNull Project project) {
|
private val includeProjectSourceFiles: Boolean,
|
||||||
return create(delegate, true, true, true, project);
|
private val includeLibrarySourceFiles: Boolean,
|
||||||
|
private val includeClassFiles: Boolean,
|
||||||
|
private val project: Project) : DelegatingGlobalSearchScope(delegate) {
|
||||||
|
|
||||||
|
private val index = ProjectRootManager.getInstance(project).fileIndex
|
||||||
|
|
||||||
|
//NOTE: avoid recomputing in potentially bottleneck 'contains' method
|
||||||
|
private val isJsProjectRef = Ref<Boolean?>(null)
|
||||||
|
|
||||||
|
override fun getProject(): Project? {
|
||||||
|
return project
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
override fun contains(file: VirtualFile): Boolean {
|
||||||
public static GlobalSearchScope sourceAndClassFiles(@NotNull GlobalSearchScope delegate, @NotNull Project project) {
|
if (!super.contains(file)) return false
|
||||||
return create(delegate, true, false, true, project);
|
return ProjectRootsUtil.isInContent(
|
||||||
|
project, file, includeProjectSourceFiles, includeLibrarySourceFiles, includeClassFiles, index, isJsProjectRef)
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
companion object {
|
||||||
public static GlobalSearchScope sources(@NotNull GlobalSearchScope delegate, @NotNull Project project) {
|
fun sourcesAndLibraries(delegate: GlobalSearchScope, project: Project): GlobalSearchScope {
|
||||||
return create(delegate, true, false, false, project);
|
return create(delegate, true, true, true, project)
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
fun sourceAndClassFiles(delegate: GlobalSearchScope, project: Project): GlobalSearchScope {
|
||||||
public static GlobalSearchScope librarySources(@NotNull GlobalSearchScope delegate, @NotNull Project project) {
|
return create(delegate, true, false, true, project)
|
||||||
return create(delegate, false, true, false, project);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
fun sources(delegate: GlobalSearchScope, project: Project): GlobalSearchScope {
|
||||||
public static GlobalSearchScope libraryClassFiles(@NotNull GlobalSearchScope delegate, @NotNull Project project) {
|
return create(delegate, true, false, false, project)
|
||||||
return create(delegate, false, false, true, project);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
fun librarySources(delegate: GlobalSearchScope, project: Project): GlobalSearchScope {
|
||||||
private static GlobalSearchScope create(
|
return create(delegate, false, true, false, project)
|
||||||
@NotNull GlobalSearchScope delegate,
|
}
|
||||||
boolean includeProjectSourceFiles,
|
|
||||||
boolean includeLibrarySourceFiles,
|
|
||||||
boolean includeClassFiles,
|
|
||||||
@NotNull Project project
|
|
||||||
) {
|
|
||||||
if (delegate == GlobalSearchScope.EMPTY_SCOPE) return delegate;
|
|
||||||
|
|
||||||
if (delegate instanceof KotlinSourceFilterScope) {
|
fun libraryClassFiles(delegate: GlobalSearchScope, project: Project): GlobalSearchScope {
|
||||||
KotlinSourceFilterScope wrappedDelegate = (KotlinSourceFilterScope) delegate;
|
return create(delegate, false, false, true, project)
|
||||||
|
}
|
||||||
|
|
||||||
boolean doIncludeProjectSourceFiles = wrappedDelegate.includeProjectSourceFiles && includeProjectSourceFiles;
|
private fun create(
|
||||||
boolean doIncludeLibrarySourceFiles = wrappedDelegate.includeLibrarySourceFiles && includeLibrarySourceFiles;
|
delegate: GlobalSearchScope,
|
||||||
boolean doIncludeClassFiles = wrappedDelegate.includeClassFiles && includeClassFiles;
|
includeProjectSourceFiles: Boolean,
|
||||||
|
includeLibrarySourceFiles: Boolean,
|
||||||
|
includeClassFiles: Boolean,
|
||||||
|
project: Project): GlobalSearchScope {
|
||||||
|
if (delegate === GlobalSearchScope.EMPTY_SCOPE) return delegate
|
||||||
|
|
||||||
return new KotlinSourceFilterScope(wrappedDelegate.myBaseScope,
|
if (delegate is KotlinSourceFilterScope) {
|
||||||
|
|
||||||
|
val doIncludeProjectSourceFiles = delegate.includeProjectSourceFiles && includeProjectSourceFiles
|
||||||
|
val doIncludeLibrarySourceFiles = delegate.includeLibrarySourceFiles && includeLibrarySourceFiles
|
||||||
|
val doIncludeClassFiles = delegate.includeClassFiles && includeClassFiles
|
||||||
|
|
||||||
|
return KotlinSourceFilterScope(delegate.myBaseScope,
|
||||||
doIncludeProjectSourceFiles,
|
doIncludeProjectSourceFiles,
|
||||||
doIncludeLibrarySourceFiles,
|
doIncludeLibrarySourceFiles,
|
||||||
doIncludeClassFiles,
|
doIncludeClassFiles,
|
||||||
project);
|
project)
|
||||||
|
}
|
||||||
|
|
||||||
|
return KotlinSourceFilterScope(delegate, includeProjectSourceFiles, includeLibrarySourceFiles, includeClassFiles, project)
|
||||||
}
|
}
|
||||||
|
|
||||||
return new KotlinSourceFilterScope(delegate, includeProjectSourceFiles, includeLibrarySourceFiles, includeClassFiles, project);
|
|
||||||
}
|
|
||||||
|
|
||||||
private final ProjectFileIndex index;
|
|
||||||
private final Project project;
|
|
||||||
private final boolean includeProjectSourceFiles;
|
|
||||||
private final boolean includeLibrarySourceFiles;
|
|
||||||
private final boolean includeClassFiles;
|
|
||||||
|
|
||||||
//NOTE: avoid recomputing in potentially bottleneck 'contains' method
|
|
||||||
private final Ref<Boolean> isJsProjectRef = new Ref<Boolean>();
|
|
||||||
|
|
||||||
private KotlinSourceFilterScope(
|
|
||||||
@NotNull GlobalSearchScope delegate,
|
|
||||||
boolean includeProjectSourceFiles,
|
|
||||||
boolean includeLibrarySourceFiles,
|
|
||||||
boolean includeClassFiles,
|
|
||||||
@NotNull Project project
|
|
||||||
) {
|
|
||||||
super(delegate);
|
|
||||||
this.project = project;
|
|
||||||
this.includeProjectSourceFiles = includeProjectSourceFiles;
|
|
||||||
this.includeLibrarySourceFiles = includeLibrarySourceFiles;
|
|
||||||
this.includeClassFiles = includeClassFiles;
|
|
||||||
this.index = ProjectRootManager.getInstance(project).getFileIndex();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Project getProject() {
|
|
||||||
return project;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean contains(@NotNull VirtualFile file) {
|
|
||||||
if (!super.contains(file)) return false;
|
|
||||||
return ProjectRootsUtil.isInContent(
|
|
||||||
project, file, includeProjectSourceFiles, includeLibrarySourceFiles, includeClassFiles, index, isJsProjectRef
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user