mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
introduced FileTypeSpecificInputFilter for index to expose its applicability to specific file types: allows us to have faster calculation of affected indices candidates
This commit is contained in:
@@ -46,16 +46,6 @@ public class ImageInfoIndex extends SingleEntryFileBasedIndexExtension<ImageInfo
|
||||
|
||||
public static final ID<Integer, ImageInfo> INDEX_ID = ID.create("ImageFileInfoIndex");
|
||||
|
||||
private final FileBasedIndex.InputFilter myInputFilter = new FileBasedIndex.InputFilter() {
|
||||
@Override
|
||||
public boolean acceptInput(final VirtualFile file) {
|
||||
return (file.getFileSystem() == LocalFileSystem.getInstance() || file.getFileSystem() instanceof TempFileSystem) &&
|
||||
file.getFileType() == ImageFileTypeManager.getInstance().getImageFileType() &&
|
||||
(file.getLength() / 1024) < ourMaxImageSize
|
||||
;
|
||||
}
|
||||
};
|
||||
|
||||
private final DataExternalizer<ImageInfo> myValueExternalizer = new DataExternalizer<ImageInfo>() {
|
||||
@Override
|
||||
public void save(final DataOutput out, final ImageInfo info) throws IOException {
|
||||
@@ -102,7 +92,14 @@ public class ImageInfoIndex extends SingleEntryFileBasedIndexExtension<ImageInfo
|
||||
|
||||
@Override
|
||||
public FileBasedIndex.InputFilter getInputFilter() {
|
||||
return myInputFilter;
|
||||
return new DefaultFileTypeSpecificInputFilter(ImageFileTypeManager.getInstance().getImageFileType()) {
|
||||
@Override
|
||||
public boolean acceptInput(final VirtualFile file) {
|
||||
return (file.getFileSystem() == LocalFileSystem.getInstance() || file.getFileSystem() instanceof TempFileSystem) &&
|
||||
(file.getLength() / 1024) < ourMaxImageSize
|
||||
;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+1
-3
@@ -20,7 +20,6 @@ import com.intellij.lang.cacheBuilder.CacheBuilderRegistry;
|
||||
import com.intellij.openapi.fileTypes.FileType;
|
||||
import com.intellij.openapi.fileTypes.LanguageFileType;
|
||||
import com.intellij.openapi.fileTypes.impl.CustomSyntaxTableFileType;
|
||||
import com.intellij.openapi.project.ProjectCoreUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.util.indexing.*;
|
||||
import com.intellij.util.io.DataExternalizer;
|
||||
@@ -45,8 +44,7 @@ public class IdIndex extends FileBasedIndexExtension<IdIndexEntry, Integer> {
|
||||
private final FileBasedIndex.InputFilter myInputFilter = new FileBasedIndex.InputFilter() {
|
||||
@Override
|
||||
public boolean acceptInput(final VirtualFile file) {
|
||||
final FileType fileType = file.getFileType();
|
||||
return isIndexable(fileType) && !ProjectCoreUtil.isProjectOrWorkspaceFile(file, fileType);
|
||||
return isIndexable(file.getFileType());
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
+5
-22
@@ -20,7 +20,6 @@ import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.fileTypes.FileType;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.patterns.ElementPattern;
|
||||
import com.intellij.util.EventDispatcher;
|
||||
import com.intellij.util.containers.MultiMap;
|
||||
@@ -37,7 +36,7 @@ import java.util.*;
|
||||
public class FrameworkDetectionIndex extends ScalarIndexExtension<Integer> {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.framework.detection.impl.FrameworkDetectionIndex");
|
||||
public static final ID<Integer,Void> NAME = ID.create("FrameworkDetectionIndex");
|
||||
private FileTypesInputFilter myInputFilter;
|
||||
|
||||
private final FrameworkDetectorRegistry myRegistry;
|
||||
private final EventDispatcher<FrameworkDetectionIndexListener> myDispatcher = EventDispatcher.create(FrameworkDetectionIndexListener.class);
|
||||
|
||||
@@ -99,14 +98,11 @@ public class FrameworkDetectionIndex extends ScalarIndexExtension<Integer> {
|
||||
|
||||
@Override
|
||||
public FileBasedIndex.InputFilter getInputFilter() {
|
||||
if (myInputFilter == null) {
|
||||
final Set<FileType> acceptedTypes = new HashSet<FileType>();
|
||||
for (FrameworkDetector detector : FrameworkDetector.EP_NAME.getExtensions()) {
|
||||
acceptedTypes.add(detector.getFileType());
|
||||
}
|
||||
myInputFilter = new FileTypesInputFilter(acceptedTypes);
|
||||
final Set<FileType> acceptedTypes = new HashSet<FileType>();
|
||||
for (FrameworkDetector detector : FrameworkDetector.EP_NAME.getExtensions()) {
|
||||
acceptedTypes.add(detector.getFileType());
|
||||
}
|
||||
return myInputFilter;
|
||||
return new DefaultFileTypeSpecificInputFilter(acceptedTypes.toArray(new FileType[acceptedTypes.size()]));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -118,17 +114,4 @@ public class FrameworkDetectionIndex extends ScalarIndexExtension<Integer> {
|
||||
public int getVersion() {
|
||||
return myRegistry.getDetectorsVersion();
|
||||
}
|
||||
|
||||
private static class FileTypesInputFilter implements FileBasedIndex.InputFilter {
|
||||
private final Set<FileType> myAcceptedTypes;
|
||||
|
||||
public FileTypesInputFilter(Set<FileType> acceptedTypes) {
|
||||
myAcceptedTypes = acceptedTypes;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean acceptInput(VirtualFile file) {
|
||||
return myAcceptedTypes.contains(file.getFileType());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-4
@@ -118,10 +118,7 @@ public class TodoIndex extends FileBasedIndexExtension<TodoIndexEntry, Integer>
|
||||
}
|
||||
|
||||
final FileType fileType = file.getFileType();
|
||||
if (ProjectCoreUtil.isProjectOrWorkspaceFile(file, fileType)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
if (fileType instanceof LanguageFileType) {
|
||||
final Language lang = ((LanguageFileType)fileType).getLanguage();
|
||||
final ParserDefinition parserDef = LanguageParserDefinitions.INSTANCE.forLanguage(lang);
|
||||
|
||||
@@ -17,9 +17,11 @@
|
||||
package com.intellij.psi.impl.include;
|
||||
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.fileTypes.FileType;
|
||||
import com.intellij.openapi.vfs.JarFileSystem;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.util.containers.FactoryMap;
|
||||
import com.intellij.util.containers.MultiMap;
|
||||
import com.intellij.util.indexing.*;
|
||||
@@ -160,7 +162,7 @@ public class FileIncludeIndex extends FileBasedIndexExtension<FileIncludeIndex.K
|
||||
|
||||
@Override
|
||||
public FileBasedIndex.InputFilter getInputFilter() {
|
||||
return new FileBasedIndex.InputFilter() {
|
||||
return new FileBasedIndex.FileTypeSpecificInputFilter() {
|
||||
@Override
|
||||
public boolean acceptInput(VirtualFile file) {
|
||||
if (file.getFileSystem() == JarFileSystem.getInstance()) {
|
||||
@@ -173,6 +175,13 @@ public class FileIncludeIndex extends FileBasedIndexExtension<FileIncludeIndex.K
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerFileTypesUsedForIndexing(@NotNull Consumer<FileType> fileTypeSink) {
|
||||
for (FileIncludeProvider provider : myProviders) {
|
||||
provider.registerFileTypesUsedForIndexing(fileTypeSink);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,9 @@
|
||||
package com.intellij.psi.impl.include;
|
||||
|
||||
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.intellij.openapi.fileTypes.FileType;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.util.indexing.FileContent;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -32,7 +34,9 @@ public abstract class FileIncludeProvider {
|
||||
public abstract String getId();
|
||||
|
||||
public abstract boolean acceptFile(VirtualFile file);
|
||||
|
||||
|
||||
public abstract void registerFileTypesUsedForIndexing(@NotNull Consumer<FileType> fileTypeSink);
|
||||
|
||||
@NotNull
|
||||
public abstract FileIncludeInfo[] getIncludeInfos(FileContent content);
|
||||
}
|
||||
|
||||
@@ -15,8 +15,7 @@
|
||||
*/
|
||||
package com.intellij.lang.ant;
|
||||
|
||||
import com.intellij.ide.highlighter.XmlFileType;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.fileTypes.StdFileTypes;
|
||||
import com.intellij.util.indexing.*;
|
||||
import com.intellij.util.io.EnumeratorIntegerDescriptor;
|
||||
import com.intellij.util.io.KeyDescriptor;
|
||||
@@ -81,12 +80,6 @@ public class AntImportsIndex extends ScalarIndexExtension<Integer>{
|
||||
return map;
|
||||
}
|
||||
};
|
||||
private static final FileBasedIndex.InputFilter INPUT_FILTER = new FileBasedIndex.InputFilter() {
|
||||
@Override
|
||||
public boolean acceptInput(final VirtualFile file) {
|
||||
return file.getFileType() instanceof XmlFileType;
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
public int getVersion() {
|
||||
@@ -112,7 +105,7 @@ public class AntImportsIndex extends ScalarIndexExtension<Integer>{
|
||||
|
||||
@Override
|
||||
public FileBasedIndex.InputFilter getInputFilter() {
|
||||
return INPUT_FILTER;
|
||||
return new DefaultFileTypeSpecificInputFilter(StdFileTypes.XML);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -58,6 +58,7 @@ import com.intellij.util.io.KeyDescriptor;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.groovy.GroovyFileType;
|
||||
import org.jetbrains.plugins.groovy.annotator.GroovyFrameworkConfigNotification;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.GroovyFile;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrClosableBlock;
|
||||
@@ -92,7 +93,6 @@ public class GroovyDslFileIndex extends ScalarIndexExtension<String> {
|
||||
public static final NotificationGroup NOTIFICATION_GROUP =
|
||||
new NotificationGroup("Groovy DSL errors", NotificationDisplayType.BALLOON, true);
|
||||
private final MyDataIndexer myDataIndexer = new MyDataIndexer();
|
||||
private final MyInputFilter myInputFilter = new MyInputFilter();
|
||||
|
||||
private static final MultiMap<String, LinkedBlockingQueue<Pair<VirtualFile, GroovyDslExecutor>>> filesInProcessing =
|
||||
new ConcurrentMultiMap<String, LinkedBlockingQueue<Pair<VirtualFile, GroovyDslExecutor>>>();
|
||||
@@ -144,7 +144,7 @@ public class GroovyDslFileIndex extends ScalarIndexExtension<String> {
|
||||
|
||||
@Override
|
||||
public FileBasedIndex.InputFilter getInputFilter() {
|
||||
return myInputFilter;
|
||||
return new MyInputFilter();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -511,7 +511,11 @@ public class GroovyDslFileIndex extends ScalarIndexExtension<String> {
|
||||
}
|
||||
}
|
||||
|
||||
private static class MyInputFilter implements FileBasedIndex.InputFilter {
|
||||
private static class MyInputFilter extends DefaultFileTypeSpecificInputFilter {
|
||||
MyInputFilter() {
|
||||
super(GroovyFileType.GROOVY_FILE_TYPE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean acceptInput(final VirtualFile file) {
|
||||
return "gdsl".equals(file.getExtension());
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package org.jetbrains.plugins.javaFX;
|
||||
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.fileTypes.StdFileTypes;
|
||||
import com.intellij.openapi.project.IndexNotReadyException;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Computable;
|
||||
@@ -127,7 +128,10 @@ public class JavaFxControllerClassIndex extends ScalarIndexExtension<String> {
|
||||
}
|
||||
}
|
||||
|
||||
static class MyInputFilter implements FileBasedIndex.InputFilter {
|
||||
public static class MyInputFilter extends DefaultFileTypeSpecificInputFilter {
|
||||
public MyInputFilter() {
|
||||
super(StdFileTypes.XML);
|
||||
}
|
||||
@Override
|
||||
public boolean acceptInput(final VirtualFile file) {
|
||||
return JavaFxFileTypeFactory.isFxml(file);
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
package com.intellij.lang.properties.xml;
|
||||
|
||||
import com.intellij.ide.highlighter.XmlFileType;
|
||||
import com.intellij.openapi.fileTypes.FileType;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.io.StreamUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.util.indexing.*;
|
||||
import com.intellij.util.io.*;
|
||||
import com.intellij.util.text.CharArrayUtil;
|
||||
@@ -22,7 +24,7 @@ import java.util.Map;
|
||||
* Date: 7/25/11
|
||||
*/
|
||||
public class XmlPropertiesIndex extends FileBasedIndexExtension<XmlPropertiesIndex.Key, String>
|
||||
implements FileBasedIndex.InputFilter, DataIndexer<XmlPropertiesIndex.Key, String, FileContent>,
|
||||
implements FileBasedIndex.FileTypeSpecificInputFilter, DataIndexer<XmlPropertiesIndex.Key, String, FileContent>,
|
||||
KeyDescriptor<XmlPropertiesIndex.Key> {
|
||||
|
||||
public final static Key MARKER_KEY = new Key();
|
||||
@@ -69,7 +71,12 @@ public class XmlPropertiesIndex extends FileBasedIndexExtension<XmlPropertiesInd
|
||||
|
||||
@Override
|
||||
public boolean acceptInput(VirtualFile file) {
|
||||
return XmlFileType.INSTANCE == file.getFileType();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerFileTypesUsedForIndexing(@NotNull Consumer<FileType> fileTypeSink) {
|
||||
fileTypeSink.consume(XmlFileType.INSTANCE);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
@@ -41,7 +41,6 @@ import java.util.*;
|
||||
public class FormClassIndex extends ScalarIndexExtension<String> {
|
||||
@NonNls public static final ID<String, Void> NAME = ID.create("FormClassIndex");
|
||||
private final EnumeratorStringDescriptor myKeyDescriptor = new EnumeratorStringDescriptor();
|
||||
private final MyInputFilter myInputFilter = new MyInputFilter();
|
||||
private final MyDataIndexer myDataIndexer = new MyDataIndexer();
|
||||
|
||||
@Override
|
||||
@@ -63,7 +62,7 @@ public class FormClassIndex extends ScalarIndexExtension<String> {
|
||||
|
||||
@Override
|
||||
public FileBasedIndex.InputFilter getInputFilter() {
|
||||
return myInputFilter;
|
||||
return new DefaultFileTypeSpecificInputFilter(StdFileTypes.GUI_DESIGNER_FORM);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -94,13 +93,6 @@ public class FormClassIndex extends ScalarIndexExtension<String> {
|
||||
}
|
||||
}
|
||||
|
||||
private static class MyInputFilter implements FileBasedIndex.InputFilter {
|
||||
@Override
|
||||
public boolean acceptInput(final VirtualFile file) {
|
||||
return file.getFileType() == StdFileTypes.GUI_DESIGNER_FORM;
|
||||
}
|
||||
}
|
||||
|
||||
public static List<PsiFile> findFormsBoundToClass(Project project, String className) {
|
||||
return findFormsBoundToClass(project, className, ProjectScope.getAllScope(project));
|
||||
}
|
||||
|
||||
+7
@@ -17,9 +17,11 @@
|
||||
package org.intellij.lang.xpath.xslt.impl;
|
||||
|
||||
import com.intellij.ide.highlighter.XmlFileType;
|
||||
import com.intellij.openapi.fileTypes.FileType;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.impl.include.FileIncludeInfo;
|
||||
import com.intellij.psi.impl.include.FileIncludeProvider;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.util.indexing.FileContent;
|
||||
import com.intellij.util.text.CharArrayUtil;
|
||||
import com.intellij.util.xml.NanoXmlUtil;
|
||||
@@ -41,6 +43,11 @@ public class XsltIncludeProvider extends FileIncludeProvider {
|
||||
return file.getFileType() == XmlFileType.INSTANCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerFileTypesUsedForIndexing(@NotNull Consumer<FileType> fileTypeSink) {
|
||||
fileTypeSink.consume(XmlFileType.INSTANCE);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public FileIncludeInfo[] getIncludeInfos(FileContent content) {
|
||||
CharSequence contentAsText = content.getContentAsText();
|
||||
|
||||
@@ -144,13 +144,10 @@ public class XsltSymbolIndex extends FileBasedIndexExtension<String, XsltSymbolI
|
||||
|
||||
@Override
|
||||
public FileBasedIndex.InputFilter getInputFilter() {
|
||||
return new FileBasedIndex.InputFilter() {
|
||||
return new DefaultFileTypeSpecificInputFilter(StdFileTypes.XML) {
|
||||
@Override
|
||||
public boolean acceptInput(VirtualFile file) {
|
||||
if (file.getFileSystem() instanceof JarFileSystem) {
|
||||
return false; // there is lots and lots of custom XML inside zip files
|
||||
}
|
||||
return file.getFileType() == StdFileTypes.XML;
|
||||
return !(file.getFileSystem() instanceof JarFileSystem);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -17,7 +17,6 @@ package com.intellij.util.xml;
|
||||
|
||||
import com.intellij.openapi.fileTypes.StdFileTypes;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.indexing.*;
|
||||
import com.intellij.util.io.EnumeratorStringDescriptor;
|
||||
@@ -38,12 +37,6 @@ import java.util.Set;
|
||||
*/
|
||||
public class DomFileIndex extends ScalarIndexExtension<String>{
|
||||
public static final ID<String,Void> NAME = ID.create("DomFileIndex");
|
||||
private static final FileBasedIndex.InputFilter INPUT_FILTER = new FileBasedIndex.InputFilter() {
|
||||
@Override
|
||||
public boolean acceptInput(final VirtualFile file) {
|
||||
return file.getFileType() == StdFileTypes.XML;
|
||||
}
|
||||
};
|
||||
private final DataIndexer<String,Void, FileContent> myDataIndexer;
|
||||
|
||||
public DomFileIndex() {
|
||||
@@ -98,7 +91,7 @@ public class DomFileIndex extends ScalarIndexExtension<String>{
|
||||
|
||||
@Override
|
||||
public FileBasedIndex.InputFilter getInputFilter() {
|
||||
return INPUT_FILTER;
|
||||
return new DefaultFileTypeSpecificInputFilter(StdFileTypes.XML);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -21,7 +21,6 @@ import com.intellij.lang.xhtml.XHTMLLanguage;
|
||||
import com.intellij.lexer.HtmlHighlightingLexer;
|
||||
import com.intellij.lexer.Lexer;
|
||||
import com.intellij.lexer.XHtmlHighlightingLexer;
|
||||
import com.intellij.openapi.fileTypes.FileType;
|
||||
import com.intellij.openapi.fileTypes.LanguageFileType;
|
||||
import com.intellij.openapi.fileTypes.StdFileTypes;
|
||||
import com.intellij.openapi.vfs.LocalFileSystem;
|
||||
@@ -76,18 +75,6 @@ public class Html5CustomAttributesIndex extends ScalarIndexExtension<String> {
|
||||
}
|
||||
};
|
||||
|
||||
private final FileBasedIndex.InputFilter myInputFilter = new FileBasedIndex.InputFilter() {
|
||||
@Override
|
||||
public boolean acceptInput(final VirtualFile file) {
|
||||
if (file.getFileSystem() != LocalFileSystem.getInstance() && !(file.getFileSystem() instanceof TempFileSystem)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
final FileType fileType = file.getFileType();
|
||||
return fileType == StdFileTypes.HTML || fileType == StdFileTypes.XHTML;
|
||||
}
|
||||
};
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public ID<String, Void> getName() {
|
||||
@@ -107,7 +94,16 @@ public class Html5CustomAttributesIndex extends ScalarIndexExtension<String> {
|
||||
|
||||
@Override
|
||||
public FileBasedIndex.InputFilter getInputFilter() {
|
||||
return myInputFilter;
|
||||
return new DefaultFileTypeSpecificInputFilter(StdFileTypes.HTML, StdFileTypes.XHTML) {
|
||||
@Override
|
||||
public boolean acceptInput(final VirtualFile file) {
|
||||
if (file.getFileSystem() != LocalFileSystem.getInstance() && !(file.getFileSystem() instanceof TempFileSystem)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -26,6 +26,7 @@ import com.intellij.openapi.roots.ProjectRootManager;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.VirtualFileFilter;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.util.indexing.DefaultFileTypeSpecificInputFilter;
|
||||
import com.intellij.util.indexing.FileBasedIndex;
|
||||
import com.intellij.util.indexing.FileBasedIndexExtension;
|
||||
import com.intellij.util.io.EnumeratorStringDescriptor;
|
||||
@@ -41,15 +42,6 @@ public abstract class XmlIndex<V> extends FileBasedIndexExtension<String, V> {
|
||||
|
||||
protected static final EnumeratorStringDescriptor KEY_DESCRIPTOR = new EnumeratorStringDescriptor();
|
||||
|
||||
private static final FileBasedIndex.InputFilter INPUT_FILTER = new FileBasedIndex.InputFilter() {
|
||||
public boolean acceptInput(final VirtualFile file) {
|
||||
FileType fileType = file.getFileType();
|
||||
final String extension = file.getExtension();
|
||||
return XmlFileType.INSTANCE.equals(fileType) && "xsd".equals(extension) ||
|
||||
DTDFileType.INSTANCE.equals(fileType) && "dtd".equals(extension);
|
||||
}
|
||||
};
|
||||
|
||||
protected static GlobalSearchScope createFilter(final Project project) {
|
||||
final GlobalSearchScope projectScope = GlobalSearchScope.allScope(project);
|
||||
return new GlobalSearchScope(project) {
|
||||
@@ -108,7 +100,14 @@ public abstract class XmlIndex<V> extends FileBasedIndexExtension<String, V> {
|
||||
}
|
||||
|
||||
public FileBasedIndex.InputFilter getInputFilter() {
|
||||
return INPUT_FILTER;
|
||||
return new DefaultFileTypeSpecificInputFilter(XmlFileType.INSTANCE, DTDFileType.INSTANCE) {
|
||||
public boolean acceptInput(final VirtualFile file) {
|
||||
FileType fileType = file.getFileType();
|
||||
final String extension = file.getExtension();
|
||||
return XmlFileType.INSTANCE.equals(fileType) && "xsd".equals(extension) ||
|
||||
DTDFileType.INSTANCE.equals(fileType) && "dtd".equals(extension);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public boolean dependsOnFileContent() {
|
||||
|
||||
@@ -17,10 +17,10 @@ package com.intellij.xml.util;
|
||||
|
||||
import com.intellij.ide.highlighter.XmlFileType;
|
||||
import com.intellij.openapi.fileTypes.FileType;
|
||||
import com.intellij.openapi.project.ProjectCoreUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.impl.include.FileIncludeInfo;
|
||||
import com.intellij.psi.impl.include.FileIncludeProvider;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.util.indexing.FileContent;
|
||||
import com.intellij.util.text.CharArrayUtil;
|
||||
import com.intellij.util.xml.NanoXmlUtil;
|
||||
@@ -40,8 +40,12 @@ public class XIncludeProvider extends FileIncludeProvider {
|
||||
|
||||
@Override
|
||||
public boolean acceptFile(VirtualFile file) {
|
||||
final FileType fileType = file.getFileType();
|
||||
return fileType == XmlFileType.INSTANCE && !ProjectCoreUtil.isProjectOrWorkspaceFile(file, fileType);
|
||||
return file.getFileType() == XmlFileType.INSTANCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerFileTypesUsedForIndexing(@NotNull Consumer<FileType> fileTypeSink) {
|
||||
fileTypeSink.consume(XmlFileType.INSTANCE);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
@@ -5,6 +5,7 @@ import com.intellij.openapi.fileTypes.FileType;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.impl.include.FileIncludeInfo;
|
||||
import com.intellij.psi.impl.include.FileIncludeProvider;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.util.indexing.FileContent;
|
||||
import com.intellij.util.text.CharArrayUtil;
|
||||
import com.intellij.util.xml.NanoXmlUtil;
|
||||
@@ -35,6 +36,12 @@ public class RelaxIncludeProvider extends FileIncludeProvider {
|
||||
return type == XmlFileType.INSTANCE || type == RncFileType.getInstance();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerFileTypesUsedForIndexing(@NotNull Consumer<FileType> fileTypeSink) {
|
||||
fileTypeSink.consume(XmlFileType.INSTANCE);
|
||||
fileTypeSink.consume(RncFileType.getInstance());
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public FileIncludeInfo[] getIncludeInfos(FileContent content) {
|
||||
|
||||
@@ -6,7 +6,6 @@ import com.intellij.navigation.ItemPresentation;
|
||||
import com.intellij.navigation.NavigationItem;
|
||||
import com.intellij.navigation.PsiElementNavigationItem;
|
||||
import com.intellij.openapi.editor.colors.TextAttributesKey;
|
||||
import com.intellij.openapi.fileTypes.FileType;
|
||||
import com.intellij.openapi.fileTypes.StdFileTypes;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.JarFileSystem;
|
||||
@@ -72,7 +71,7 @@ public class RelaxSymbolIndex extends ScalarIndexExtension<String> {
|
||||
final HashMap<String, Void> map = new HashMap<String, Void>();
|
||||
if (inputData.getFileType() == XmlFileType.INSTANCE) {
|
||||
CharSequence inputDataContentAsText = inputData.getContentAsText();
|
||||
if (CharArrayUtil.indexOf(inputDataContentAsText, ApplicationLoader.RNG_NAMESPACE, 0) == -1) return Collections.EMPTY_MAP;
|
||||
if (CharArrayUtil.indexOf(inputDataContentAsText, ApplicationLoader.RNG_NAMESPACE, 0) == -1) return Collections.emptyMap();
|
||||
NanoXmlUtil.parse(CharArrayUtil.readerFromCharSequence(inputData.getContentAsText()), new NanoXmlUtil.IXMLBuilderAdapter() {
|
||||
NanoXmlUtil.IXMLBuilderAdapter attributeHandler;
|
||||
int depth;
|
||||
@@ -137,14 +136,10 @@ public class RelaxSymbolIndex extends ScalarIndexExtension<String> {
|
||||
|
||||
@Override
|
||||
public FileBasedIndex.InputFilter getInputFilter() {
|
||||
return new FileBasedIndex.InputFilter() {
|
||||
return new DefaultFileTypeSpecificInputFilter(StdFileTypes.XML, RncFileType.getInstance()) {
|
||||
@Override
|
||||
public boolean acceptInput(VirtualFile file) {
|
||||
if (file.getFileSystem() instanceof JarFileSystem) {
|
||||
return false; // there is lots and lots of custom XML inside zip files
|
||||
}
|
||||
final FileType fileType = file.getFileType();
|
||||
return fileType == StdFileTypes.XML || fileType == RncFileType.getInstance();
|
||||
return !(file.getFileSystem() instanceof JarFileSystem);
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -243,7 +238,7 @@ public class RelaxSymbolIndex extends ScalarIndexExtension<String> {
|
||||
|
||||
@Override
|
||||
public ItemPresentation getPresentation() {
|
||||
return myPresentation != null ? this : null;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user