package com.intellij.javascript.flex.css;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.util.AtomicNotNullLazyValue;
import com.intellij.openapi.util.NotNullLazyValue;
import com.intellij.openapi.vfs.VfsUtil;
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.net.URL;
import java.util.Collections;
import java.util.Set;
/**
* @author ksafonov
*/
public class FlexStylesIndexableSetContributor extends IndexableSetContributor {
private static final Logger LOG = Logger.getInstance(FlexStylesIndexableSetContributor.class);
private static final NotNullLazyValue<Set<VirtualFile>> ourFiles = new AtomicNotNullLazyValue<Set<VirtualFile>>() {
@NotNull
@Override
protected Set<VirtualFile> compute() {
URL libFileUrl = FlexStylesIndexableSetContributor.class.getResource("FlexStyles.as");
VirtualFile file = VfsUtil.findFileByURL(libFileUrl);
if (file != null) {
return Collections.singleton(file);
}
else {
LOG.error("Cannot find FlexStyles.as file by URL " + libFileUrl);
return Collections.emptySet();
}
}
};
@NotNull
@Override
public Set<VirtualFile> getAdditionalRootsToIndex() {
return ourFiles.getValue();
}
@NotNull
public static GlobalSearchScope enlarge(@NotNull final GlobalSearchScope scope) {
return scope.union(new GlobalSearchScope() {
@Override
public boolean contains(@NotNull final VirtualFile file) {
return ourFiles.getValue().contains(file);
}
@Override
public int compare(@NotNull final VirtualFile file1, @NotNull final VirtualFile file2) {
return scope.compare(file1, file2);
}
@Override
public boolean isSearchInModuleContent(@NotNull final Module aModule) {
return scope.isSearchInModuleContent(aModule);
}
@Override
public boolean isSearchInLibraries() {
return scope.isSearchInLibraries();
}
});
}
}