Search in sources :

Example 71 with ProjectFileIndex

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);
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) PsiNamedElement(com.intellij.psi.PsiNamedElement) ArrayList(java.util.ArrayList) JSQualifiedNamedElement(com.intellij.lang.javascript.psi.ecmal4.JSQualifiedNamedElement) ProjectFileIndex(com.intellij.openapi.roots.ProjectFileIndex) GlobalSearchScope(com.intellij.psi.search.GlobalSearchScope) Module(com.intellij.openapi.module.Module) JSClass(com.intellij.lang.javascript.psi.ecmal4.JSClass) Pair(com.intellij.openapi.util.Pair) NotNull(org.jetbrains.annotations.NotNull)

Example 72 with ProjectFileIndex

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;
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) OrderEntry(com.intellij.openapi.roots.OrderEntry) ProjectFileIndex(com.intellij.openapi.roots.ProjectFileIndex) GlobalSearchScope(com.intellij.psi.search.GlobalSearchScope) JSQualifiedNamedElement(com.intellij.lang.javascript.psi.ecmal4.JSQualifiedNamedElement) JSClass(com.intellij.lang.javascript.psi.ecmal4.JSClass) Nullable(org.jetbrains.annotations.Nullable)

Example 73 with ProjectFileIndex

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;
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) ProjectFileIndex(com.intellij.openapi.roots.ProjectFileIndex)

Example 74 with ProjectFileIndex

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());
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) Trinity(com.intellij.openapi.util.Trinity) ProjectFileIndex(com.intellij.openapi.roots.ProjectFileIndex) InvalidPropertyException(com.intellij.flex.uiDesigner.InvalidPropertyException) JSClass(com.intellij.lang.javascript.psi.ecmal4.JSClass)

Example 75 with ProjectFileIndex

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;
        }
    });
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) Project(com.intellij.openapi.project.Project) OrderEntry(com.intellij.openapi.roots.OrderEntry) ProjectFileIndex(com.intellij.openapi.roots.ProjectFileIndex) GlobalSearchScope(com.intellij.psi.search.GlobalSearchScope) FqName(org.jetbrains.kotlin.name.FqName) List(java.util.List) Module(com.intellij.openapi.module.Module) THashSet(gnu.trove.THashSet) Nullable(org.jetbrains.annotations.Nullable)

Aggregations

ProjectFileIndex (com.intellij.openapi.roots.ProjectFileIndex)157 VirtualFile (com.intellij.openapi.vfs.VirtualFile)119 Module (com.intellij.openapi.module.Module)52 Project (com.intellij.openapi.project.Project)49 Nullable (org.jetbrains.annotations.Nullable)37 NotNull (org.jetbrains.annotations.NotNull)24 PsiDirectory (com.intellij.psi.PsiDirectory)23 GlobalSearchScope (com.intellij.psi.search.GlobalSearchScope)16 PsiFile (com.intellij.psi.PsiFile)14 ArrayList (java.util.ArrayList)13 IdeView (com.intellij.ide.IdeView)10 OrderEntry (com.intellij.openapi.roots.OrderEntry)9 THashSet (gnu.trove.THashSet)6 PropertiesFile (com.intellij.lang.properties.psi.PropertiesFile)5 ProjectRootManager (com.intellij.openapi.roots.ProjectRootManager)5 AbstractTreeNode (com.intellij.ide.util.treeView.AbstractTreeNode)4 File (java.io.File)4 List (java.util.List)4 JSClass (com.intellij.lang.javascript.psi.ecmal4.JSClass)3 Presentation (com.intellij.openapi.actionSystem.Presentation)3