mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
JavaScript library files scope for completion (performance improvements for WI-4830)
This commit is contained in:
+25
@@ -47,6 +47,7 @@ public class ScriptingLibraryMappings extends LanguagePerFileMappings<ScriptingL
|
||||
private final ScriptingLibraryManager myLibraryManager;
|
||||
private final Map<VirtualFile, CompoundLibrary> myCompoundLibMap = new HashMap<VirtualFile, CompoundLibrary>();
|
||||
private CompoundLibrary myProjectLibs = new CompoundLibrary();
|
||||
private Set<VirtualFile> myProjectLibFiles;
|
||||
|
||||
public ScriptingLibraryMappings(final Project project, final LibraryType libraryType) {
|
||||
super(project);
|
||||
@@ -95,6 +96,7 @@ public class ScriptingLibraryMappings extends LanguagePerFileMappings<ScriptingL
|
||||
public void setMappings(Map<VirtualFile, ScriptingLibraryTable.LibraryModel> mappings) {
|
||||
super.setMappings(mappings);
|
||||
updateDependencies(mappings);
|
||||
updateProjectLibraryFiles();
|
||||
}
|
||||
|
||||
private static boolean dependencyExists(ModuleRootManager rootManager, Library library) {
|
||||
@@ -171,6 +173,7 @@ public class ScriptingLibraryMappings extends LanguagePerFileMappings<ScriptingL
|
||||
setMapping(file, container);
|
||||
}
|
||||
updateDependencies(getMappings());
|
||||
updateProjectLibraryFiles();
|
||||
}
|
||||
|
||||
public boolean isAssociatedWith(VirtualFile file, String libName) {
|
||||
@@ -401,5 +404,27 @@ public class ScriptingLibraryMappings extends LanguagePerFileMappings<ScriptingL
|
||||
return isApplicable(libFile, srcFile.getParent());
|
||||
}
|
||||
|
||||
private void updateProjectLibraryFiles() {
|
||||
myProjectLibFiles = new HashSet<VirtualFile>();
|
||||
for (CompoundLibrary container : myCompoundLibMap.values()) {
|
||||
for (ScriptingLibraryTable.LibraryModel libModel : container.getLibraries()) {
|
||||
myProjectLibFiles.addAll(Arrays.asList(libModel.getSourceFiles()));
|
||||
myProjectLibFiles.addAll(Arrays.asList(libModel.getCompactFiles()));
|
||||
}
|
||||
}
|
||||
for (ScriptingLibraryTable.LibraryModel libModel : myProjectLibs.getLibraries()) {
|
||||
myProjectLibFiles.addAll(Arrays.asList(libModel.getSourceFiles()));
|
||||
myProjectLibFiles.addAll(Arrays.asList(libModel.getCompactFiles()));
|
||||
}
|
||||
}
|
||||
|
||||
public Set<VirtualFile> getProjectLibraryFiles() {
|
||||
if (myProjectLibFiles == null) {
|
||||
updateProjectLibraryFiles();
|
||||
}
|
||||
return myProjectLibFiles;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
+4
-9
@@ -30,7 +30,7 @@ public class ScriptingLibrariesScope extends GlobalSearchScope {
|
||||
|
||||
private GlobalSearchScope myBaseScope;
|
||||
private ScriptingIndexableSetContributor myContributor;
|
||||
private Set<VirtualFile> myLibraryFiles;
|
||||
protected Set<VirtualFile> myLibraryFiles;
|
||||
|
||||
public ScriptingLibrariesScope(GlobalSearchScope baseScope, Class<? extends IndexableSetContributor> providerClass) {
|
||||
super(baseScope.getProject());
|
||||
@@ -38,21 +38,16 @@ public class ScriptingLibrariesScope extends GlobalSearchScope {
|
||||
IndexableSetContributor contributor = IndexableSetContributor.EP_NAME.findExtension(providerClass);
|
||||
if (contributor instanceof ScriptingIndexableSetContributor) {
|
||||
myContributor = (ScriptingIndexableSetContributor)contributor;
|
||||
updateLibraryFiles();
|
||||
setLibraryFiles();
|
||||
}
|
||||
}
|
||||
|
||||
public void updateLibraryFiles() {
|
||||
public void setLibraryFiles() {
|
||||
myLibraryFiles = myContributor.getLibraryFiles(myBaseScope.getProject());
|
||||
}
|
||||
|
||||
public boolean contains(VirtualFile file) {
|
||||
return myBaseScope.contains(file) | contributorContains(file);
|
||||
}
|
||||
|
||||
private boolean contributorContains(VirtualFile file) {
|
||||
if (myContributor == null) return false;
|
||||
return myLibraryFiles.contains(file);
|
||||
return myBaseScope.contains(file) | (myLibraryFiles == null ? false : myLibraryFiles.contains(file));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user