package com.google.jstestdriver.idea.execution.tree; import com.google.common.collect.Lists; import com.google.jstestdriver.idea.assertFramework.TestFileStructureManager; import com.google.jstestdriver.idea.assertFramework.TestFileStructurePack; import com.google.jstestdriver.idea.config.JstdConfigStructure; import com.intellij.lang.javascript.psi.JSFile; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.io.File; import java.util.List; /** * @author Sergey Simonchik */ public class NavUtils { private NavUtils() {} @Nullable public static PsiElement findPsiElement(@NotNull Project project, @NotNull File jstdConfigFile, @NotNull String testCaseName, @Nullable String testMethodName) { JstdConfigStructure configStructure = JstdConfigStructure.newConfigStructure(jstdConfigFile); List<File> files = Lists.newArrayList(); files.addAll(configStructure.getLoadFiles()); files.addAll(configStructure.getTestFiles()); for (File loadFile : files) { VirtualFile vf = LocalFileSystem.getInstance().findFileByIoFile(loadFile); if (vf != null) { PsiFile psiFile = PsiManager.getInstance(project).findFile(vf); if (psiFile instanceof JSFile) { PsiElement element = findPsiElementInJsFile((JSFile)psiFile, testCaseName, testMethodName); if (element != null) { return element; } } } } return null; } @Nullable private static PsiElement findPsiElementInJsFile(@NotNull JSFile jsFile, @NotNull String testCaseName, @Nullable String testMethodName) { TestFileStructurePack pack = TestFileStructureManager.fetchTestFileStructurePackByJsFile(jsFile); if (pack != null) { return pack.findPsiElement(testCaseName, testMethodName); } return null; } }