JavaScript library files scope for completion (performance improvements for WI-4830)

This commit is contained in:
Rustam.Vishnyakov
2011-01-24 20:34:36 +03:00
parent ed89acd6c3
commit 2ec7b6f5e6
2 changed files with 29 additions and 9 deletions
@@ -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;
}
}
@@ -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