From 78156dd3b1d8d3dbf35214bd3fcfa7b6cd3cc9cc Mon Sep 17 00:00:00 2001 From: "Rustam.Vishnyakov" Date: Thu, 14 Oct 2010 15:52:11 +0400 Subject: [PATCH] WI-2477: Ability to specify to a file a JavaScript library/file to autocomplete from (in progress) --- .../LangScriptingContextConfigurable.java | 4 +- .../ScriptingContextsConfigurable.java | 3 +- .../ScriptingIndexableSetContributor.java | 14 ++-- .../scripting/ScriptingLibrariesScope.java | 68 +++++++++++++++++++ .../scripting}/ScriptingLibraryManager.java | 2 +- 5 files changed, 81 insertions(+), 10 deletions(-) rename platform/lang-impl/src/com/intellij/{ide/scriptingContext => openapi/roots/libraries/scripting}/ScriptingIndexableSetContributor.java (85%) create mode 100644 platform/lang-impl/src/com/intellij/openapi/roots/libraries/scripting/ScriptingLibrariesScope.java rename platform/lang-impl/src/com/intellij/{ide/scriptingContext => openapi/roots/libraries/scripting}/ScriptingLibraryManager.java (97%) diff --git a/platform/lang-impl/src/com/intellij/ide/scriptingContext/LangScriptingContextConfigurable.java b/platform/lang-impl/src/com/intellij/ide/scriptingContext/LangScriptingContextConfigurable.java index 3166703e93e2..690aefd54b67 100644 --- a/platform/lang-impl/src/com/intellij/ide/scriptingContext/LangScriptingContextConfigurable.java +++ b/platform/lang-impl/src/com/intellij/ide/scriptingContext/LangScriptingContextConfigurable.java @@ -16,13 +16,11 @@ package com.intellij.ide.scriptingContext; import com.intellij.ide.scriptingContext.ui.ScriptingLibrariesPanel; -import com.intellij.openapi.application.Application; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.options.Configurable; import com.intellij.openapi.options.ConfigurationException; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.roots.ModifiableRootModel; import com.intellij.openapi.roots.libraries.LibraryTable; +import com.intellij.openapi.roots.libraries.scripting.ScriptingLibraryManager; import org.jetbrains.annotations.Nls; import javax.swing.*; diff --git a/platform/lang-impl/src/com/intellij/ide/scriptingContext/ScriptingContextsConfigurable.java b/platform/lang-impl/src/com/intellij/ide/scriptingContext/ScriptingContextsConfigurable.java index a81190614687..2f0943fd5f76 100644 --- a/platform/lang-impl/src/com/intellij/ide/scriptingContext/ScriptingContextsConfigurable.java +++ b/platform/lang-impl/src/com/intellij/ide/scriptingContext/ScriptingContextsConfigurable.java @@ -16,11 +16,10 @@ package com.intellij.ide.scriptingContext; import com.intellij.ide.scriptingContext.ui.MainScriptingContextsPanel; -import com.intellij.openapi.Disposable; import com.intellij.openapi.options.Configurable; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.project.Project; -import com.intellij.openapi.roots.ModifiableRootModel; +import com.intellij.openapi.roots.libraries.scripting.ScriptingLibraryManager; import org.jetbrains.annotations.Nls; import javax.swing.*; diff --git a/platform/lang-impl/src/com/intellij/ide/scriptingContext/ScriptingIndexableSetContributor.java b/platform/lang-impl/src/com/intellij/openapi/roots/libraries/scripting/ScriptingIndexableSetContributor.java similarity index 85% rename from platform/lang-impl/src/com/intellij/ide/scriptingContext/ScriptingIndexableSetContributor.java rename to platform/lang-impl/src/com/intellij/openapi/roots/libraries/scripting/ScriptingIndexableSetContributor.java index e7ef2ab60287..498dddbaf9b4 100644 --- a/platform/lang-impl/src/com/intellij/ide/scriptingContext/ScriptingIndexableSetContributor.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/libraries/scripting/ScriptingIndexableSetContributor.java @@ -13,8 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.ide.scriptingContext; +package com.intellij.openapi.roots.libraries.scripting; +import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.roots.libraries.Library; @@ -25,7 +26,6 @@ import com.intellij.util.indexing.IndexableSetContributor; import gnu.trove.THashSet; import org.jetbrains.annotations.Nullable; -import java.util.Arrays; import java.util.Set; /** @@ -38,6 +38,12 @@ public abstract class ScriptingIndexableSetContributor extends IndexableSetContr final Set predefinedFiles = getPredefinedFilesToIndex(); final THashSet filesToIndex = new THashSet(); filesToIndex.addAll(predefinedFiles); + filesToIndex.addAll(getLibraryFiles(project)); + return filesToIndex; + } + + public Set getLibraryFiles(Project project) { + final THashSet libFiles = new THashSet(); if (project != null) { ScriptingLibraryManager manager = new ScriptingLibraryManager(project); LibraryTable libTable = manager.getLibraryTable(); @@ -45,13 +51,13 @@ public abstract class ScriptingIndexableSetContributor extends IndexableSetContr for (Library lib : libTable.getLibraries()) { for (VirtualFile libFile : lib.getFiles(OrderRootType.CLASSES)) { libFile.putUserData(getIndexKey(), ""); - filesToIndex.add(libFile); + libFiles.add(libFile); } } } manager.disposeModel(); } - return filesToIndex; + return libFiles; } @Override diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/libraries/scripting/ScriptingLibrariesScope.java b/platform/lang-impl/src/com/intellij/openapi/roots/libraries/scripting/ScriptingLibrariesScope.java new file mode 100644 index 000000000000..1116df4e140d --- /dev/null +++ b/platform/lang-impl/src/com/intellij/openapi/roots/libraries/scripting/ScriptingLibrariesScope.java @@ -0,0 +1,68 @@ +/* + * Copyright 2000-2010 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.openapi.roots.libraries.scripting; + +import com.intellij.openapi.module.Module; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.util.indexing.IndexableSetContributor; +import org.jetbrains.annotations.NotNull; + +import java.util.Set; + +/** + * @author Rustam Vishnyakov + */ +public class ScriptingLibrariesScope extends GlobalSearchScope { + + private GlobalSearchScope myBaseScope; + private ScriptingIndexableSetContributor myContributor; + + public ScriptingLibrariesScope(GlobalSearchScope baseScope, Class providerClass) { + super(baseScope.getProject()); + myBaseScope = baseScope; + IndexableSetContributor contributor = IndexableSetContributor.EP_NAME.findExtension(providerClass); + if (contributor instanceof ScriptingIndexableSetContributor) { + myContributor = (ScriptingIndexableSetContributor)contributor; + } + } + + public boolean contains(VirtualFile file) { + return myBaseScope.contains(file) | contributorContains(file); + } + + private boolean contributorContains(VirtualFile file) { + if (myContributor == null) return false; + return myContributor.getLibraryFiles(myBaseScope.getProject()).contains(file); + } + + @Override + public boolean isSearchOutsideRootModel() { + return true; + } + + public int compare(VirtualFile file1, VirtualFile file2) { + return myBaseScope.compare(file1, file2); + } + + public boolean isSearchInModuleContent(@NotNull Module aModule) { + return myBaseScope.isSearchInModuleContent(aModule); + } + + public boolean isSearchInLibraries() { + return myBaseScope.isSearchInLibraries(); + } +} diff --git a/platform/lang-impl/src/com/intellij/ide/scriptingContext/ScriptingLibraryManager.java b/platform/lang-impl/src/com/intellij/openapi/roots/libraries/scripting/ScriptingLibraryManager.java similarity index 97% rename from platform/lang-impl/src/com/intellij/ide/scriptingContext/ScriptingLibraryManager.java rename to platform/lang-impl/src/com/intellij/openapi/roots/libraries/scripting/ScriptingLibraryManager.java index 57d85e9bbe0d..44ca8818e72a 100644 --- a/platform/lang-impl/src/com/intellij/ide/scriptingContext/ScriptingLibraryManager.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/libraries/scripting/ScriptingLibraryManager.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.ide.scriptingContext; +package com.intellij.openapi.roots.libraries.scripting; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager;