IDEA-320457: Move class to top level BaseFileTypeInputFilter.FileTypeStrategy > FileTypeSubstitutionStrategy

GitOrigin-RevId: 2f77cf9428129d5edd82a1e73d1afc8d661ff1f6
This commit is contained in:
Andrei.Kuznetsov
2023-06-02 13:03:07 +02:00
committed by intellij-monorepo-bot
parent 957abe6a71
commit 897f449714
6 changed files with 26 additions and 11 deletions

View File

@@ -24,7 +24,7 @@ import org.jetbrains.annotations.Nullable;
import java.util.HashMap;
import java.util.Map;
import static com.intellij.util.indexing.hints.BaseFileTypeInputFilter.FileTypeStrategy.BEFORE_SUBSTITUTION;
import static com.intellij.util.indexing.hints.FileTypeSubstitutionStrategy.BEFORE_SUBSTITUTION;
public class JsonSchemaFileValuesIndex extends FileBasedIndexExtension<String, String> {
public static final ID<String, String> INDEX_ID = ID.create("json.file.root.values");

View File

@@ -6,7 +6,6 @@ import com.intellij.util.ThreeState
import com.intellij.util.indexing.FileBasedIndex
import com.intellij.util.indexing.IndexedFile
import com.intellij.util.indexing.SubstitutedFileType
import com.intellij.util.indexing.hints.BaseFileTypeInputFilter.FileTypeStrategy
import org.jetbrains.annotations.ApiStatus
/**
@@ -16,21 +15,20 @@ import org.jetbrains.annotations.ApiStatus
*
* If filetype is a [SubstitutedFileType] there are two options how to invoke [acceptFileType]: with filetype before substitution as
* an argument ([SubstitutedFileType.getOriginalFileType]), or filetype after substitution ([SubstitutedFileType.getFileType]).
* Default behavior is to use filetype after substitution. This can be changed via [FileTypeStrategy]
* Default behavior is to use filetype after substitution. This can be changed via [FileTypeSubstitutionStrategy]
*
* @see com.intellij.psi.LanguageSubstitutor
*/
@ApiStatus.Experimental
abstract class BaseFileTypeInputFilter(private val fileTypeStrategy: FileTypeStrategy) : FileBasedIndex.ProjectSpecificInputFilter,
FileTypeIndexingHint {
enum class FileTypeStrategy { BEFORE_SUBSTITUTION, AFTER_SUBSTITUTION }
abstract class BaseFileTypeInputFilter(private val fileTypeStrategy: FileTypeSubstitutionStrategy) : FileBasedIndex.ProjectSpecificInputFilter,
FileTypeIndexingHint {
constructor() : this(FileTypeStrategy.AFTER_SUBSTITUTION)
constructor() : this(FileTypeSubstitutionStrategy.AFTER_SUBSTITUTION)
final override fun hintAcceptFileType(fileType: FileType): ThreeState {
val fileTypeToUse: FileType =
if (fileType is SubstitutedFileType) {
if (fileTypeStrategy == FileTypeStrategy.BEFORE_SUBSTITUTION) fileType.originalFileType else fileType.fileType
if (fileTypeStrategy == FileTypeSubstitutionStrategy.BEFORE_SUBSTITUTION) fileType.originalFileType else fileType.fileType
}
else {
fileType

View File

@@ -18,7 +18,7 @@ class FileTypeInputFilterPredicate : BaseFileTypeInputFilter {
this.predicate = predicate
}
constructor(fileTypeStrategy: FileTypeStrategy, predicate: (filetype: FileType) -> Boolean) : super(fileTypeStrategy) {
constructor(fileTypeStrategy: FileTypeSubstitutionStrategy, predicate: (filetype: FileType) -> Boolean) : super(fileTypeStrategy) {
this.predicate = predicate
}

View File

@@ -0,0 +1,17 @@
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.util.indexing.hints
import com.intellij.util.indexing.SubstitutedFileType
/**
* [SubstitutedFileType] is an error-prone way to use filetype. Effectively it means that some file has two file types:
* before substitution ([SubstitutedFileType.getOriginalFileType]) and after substitution ([SubstitutedFileType.getFileType]).
*
* Client code often does not expect that it needs to deal with some artificial [SubstitutedFileType] that is not equal to
* any real filetype (e.g. JavaFileType). To simplify API, some classes (e.g. [BaseFileTypeInputFilter]) resolve
* [SubstitutedFileType] to real filetype. [FileTypeSubstitutionStrategy] defines the resolution strategy.
*/
enum class FileTypeSubstitutionStrategy {
BEFORE_SUBSTITUTION,
AFTER_SUBSTITUTION
}

View File

@@ -24,7 +24,7 @@ import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import static com.intellij.util.indexing.hints.BaseFileTypeInputFilter.FileTypeStrategy.BEFORE_SUBSTITUTION;
import static com.intellij.util.indexing.hints.FileTypeSubstitutionStrategy.BEFORE_SUBSTITUTION;
public class HtmlTagIdIndex extends XmlIndex<Integer> {
public static final ID<String, Integer> INDEX = ID.create("HtmlTagIdIndex");

View File

@@ -23,7 +23,7 @@ import org.jetbrains.annotations.NotNull;
import java.util.*;
import static com.intellij.util.indexing.hints.BaseFileTypeInputFilter.FileTypeStrategy.BEFORE_SUBSTITUTION;
import static com.intellij.util.indexing.hints.FileTypeSubstitutionStrategy.BEFORE_SUBSTITUTION;
public class PyModuleNameIndex extends ScalarIndexExtension<String> {
public static final ID<String, Void> NAME = ID.create("Py.module.name");