use of com.intellij.openapi.roots.ProjectFileIndex in project intellij-plugins by JetBrains.
the class FlexUnitTestFinder method findTestsForClass.
@NotNull
public Collection<PsiElement> findTestsForClass(@NotNull final PsiElement element) {
final VirtualFile file = element.getContainingFile().getVirtualFile();
final JSClass jsClass = findSourceElement(element);
final String className = jsClass == null ? null : jsClass.getName();
final Pair<Module, FlexUnitSupport> moduleAndSupport = FlexUnitSupport.getModuleAndSupport(element);
final Module module = moduleAndSupport == null ? null : moduleAndSupport.first;
final FlexUnitSupport flexUnitSupport = moduleAndSupport == null ? null : moduleAndSupport.second;
final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(element.getProject()).getFileIndex();
if (className == null || module == null || flexUnitSupport == null || (file != null && fileIndex.isInTestSourceContent(file))) {
return Collections.emptyList();
}
final Collection<String> allNames = StubIndex.getInstance().getAllKeys(JSNameIndex.KEY, element.getProject());
final GlobalSearchScope scope = GlobalSearchScope.moduleWithDependentsScope(module);
final List<Pair<? extends PsiNamedElement, Integer>> classesWithProximity = new ArrayList<>();
for (final String possibleTestName : allNames) {
if (possibleTestName.contains(className)) {
for (final JSQualifiedNamedElement jsElement : JSResolveUtil.findElementsByName(possibleTestName, element.getProject(), scope)) {
final VirtualFile f = jsElement.getContainingFile().getVirtualFile();
final boolean inTestSource = f != null && fileIndex.isInTestSourceContent(f);
if (jsElement instanceof JSClass && jsElement != jsClass && ((inTestSource && possibleTestName.contains("Test")) || flexUnitSupport.isTestClass((JSClass) jsElement, true))) {
classesWithProximity.add(Pair.create(jsElement, TestFinderHelper.calcTestNameProximity(className, jsElement.getName())));
}
}
}
}
return TestFinderHelper.getSortedElements(classesWithProximity, true);
}
use of com.intellij.openapi.roots.ProjectFileIndex in project intellij-plugins by JetBrains.
the class SwfProjectViewStructureProvider method findDecompiledElement.
@Nullable
private static PsiElement findDecompiledElement(JSQualifiedNamedElement element) {
if (DumbService.isDumb(element.getProject())) {
return null;
}
JSQualifiedNamedElement mainElement = JSUtils.getMemberContainingClass(element);
if (mainElement == null) {
mainElement = element;
}
final String qName = mainElement.getQualifiedName();
if (qName == null) {
return null;
}
VirtualFile elementVFile = mainElement.getContainingFile().getVirtualFile();
if (elementVFile == null) {
return null;
}
ProjectFileIndex projectFileIndex = ProjectRootManager.getInstance(mainElement.getProject()).getFileIndex();
GlobalSearchScope searchScope = JSResolveUtil.getResolveScope(mainElement);
Collection<JSQualifiedNamedElement> candidates = StubIndex.getElements(JSQualifiedElementIndex.KEY, qName.hashCode(), mainElement.getProject(), searchScope, JSQualifiedNamedElement.class);
List<OrderEntry> sourceFileEntries = projectFileIndex.getOrderEntriesForFile(elementVFile);
for (JSQualifiedNamedElement candidate : candidates) {
if (candidate == mainElement || !qName.equals(candidate.getQualifiedName())) {
continue;
}
VirtualFile vFile = candidate.getContainingFile().getVirtualFile();
if (vFile != null && projectFileIndex.getClassRootForFile(vFile) != null) {
List<OrderEntry> candidateEntries = projectFileIndex.getOrderEntriesForFile(vFile);
if (ContainerUtil.intersects(sourceFileEntries, candidateEntries)) {
if (element == mainElement) {
return candidate;
} else {
LOG.assertTrue(candidate instanceof JSClass, candidate);
if (element instanceof JSVariable) {
return ((JSClass) candidate).findFieldByName(element.getName());
} else {
LOG.assertTrue(element instanceof JSFunction, element);
return ((JSClass) candidate).findFunctionByNameAndKind(element.getName(), ((JSFunction) element).getKind());
}
}
}
}
}
return null;
}
use of com.intellij.openapi.roots.ProjectFileIndex in project intellij-plugins by JetBrains.
the class FlexUnitRuntimeConfigurationProducer method forDirectory.
private static boolean forDirectory(PsiDirectory directory, Module module, FlexUnitRunnerParameters params) {
final VirtualFile file = directory.getVirtualFile();
ProjectFileIndex projectFileIndex = ProjectRootManager.getInstance(directory.getProject()).getFileIndex();
VirtualFile rootForFile = projectFileIndex.getSourceRootForFile(file);
if (rootForFile == null)
return false;
String packageName = VfsUtilCore.getRelativePath(file, rootForFile, '.');
if (packageName == null || !JSUtils.packageExists(packageName, GlobalSearchScope.moduleScope(module)))
return false;
params.setPackageName(packageName);
params.setScope(FlexUnitRunnerParameters.Scope.Package);
return true;
}
use of com.intellij.openapi.roots.ProjectFileIndex in project intellij-plugins by JetBrains.
the class MxmlUtil method computeEffectiveClass.
static Trinity<Integer, String, Condition<AnnotationBackedDescriptor>> computeEffectiveClass(final PsiElement element, final PsiElement declaration, final ProjectComponentReferenceCounter projectComponentReferenceCounter, final boolean computePropertyFilter) throws InvalidPropertyException {
PsiFile psiFile = declaration.getContainingFile();
VirtualFile virtualFile = psiFile.getVirtualFile();
ProjectFileIndex projectFileIndex = ProjectRootManager.getInstance(psiFile.getProject()).getFileIndex();
LOG.assertTrue(virtualFile != null);
if (!projectFileIndex.isInSourceContent(virtualFile)) {
return NON_PROJECT_CLASS;
}
if (psiFile instanceof XmlFile) {
return new Trinity<>(DocumentFactoryManager.getInstance().getId(virtualFile, (XmlFile) psiFile, projectComponentReferenceCounter), null, null);
}
final Set<PsiFile> filteredFiles;
if (computePropertyFilter) {
filteredFiles = new THashSet<>();
filteredFiles.add(psiFile);
} else {
filteredFiles = null;
}
final JSClass aClass = (JSClass) declaration;
JSClass[] classes;
while ((classes = aClass.getSuperClasses()).length > 0) {
JSClass parentClass = classes[0];
PsiFile containingFile = parentClass.getContainingFile();
//noinspection ConstantConditions
if (!projectFileIndex.isInSourceContent(containingFile.getVirtualFile())) {
return new Trinity<>(-1, parentClass.getQualifiedName(), computePropertyFilter ? new CustomComponentPropertyFilter(filteredFiles) : null);
} else if (computePropertyFilter) {
filteredFiles.add(containingFile);
}
}
// well, it must be at least mx.core.UIComponent or spark.primitives.supportClasses.GraphicElement
throw new InvalidPropertyException(element, "unresolved.class", aClass.getQualifiedName());
}
use of com.intellij.openapi.roots.ProjectFileIndex in project kotlin by JetBrains.
the class SourceNavigationHelper method getOriginalClass.
@Nullable
public static PsiClass getOriginalClass(@NotNull KtClassOrObject classOrObject) {
// Copied from JavaPsiImplementationHelperImpl:getOriginalClass()
FqName fqName = classOrObject.getFqName();
if (fqName == null) {
return null;
}
KtFile file = classOrObject.getContainingKtFile();
VirtualFile vFile = file.getVirtualFile();
Project project = file.getProject();
final ProjectFileIndex idx = ProjectRootManager.getInstance(project).getFileIndex();
if (vFile == null || !idx.isInLibrarySource(vFile))
return null;
final Set<OrderEntry> orderEntries = new THashSet<OrderEntry>(idx.getOrderEntriesForFile(vFile));
return JavaPsiFacade.getInstance(project).findClass(fqName.asString(), new GlobalSearchScope(project) {
@Override
public int compare(@NotNull VirtualFile file1, @NotNull VirtualFile file2) {
return 0;
}
@Override
public boolean contains(@NotNull VirtualFile file) {
List<OrderEntry> entries = idx.getOrderEntriesForFile(file);
for (OrderEntry entry : entries) {
if (orderEntries.contains(entry))
return true;
}
return false;
}
@Override
public boolean isSearchInModuleContent(@NotNull Module aModule) {
return false;
}
@Override
public boolean isSearchInLibraries() {
return true;
}
});
}
Aggregations