public static boolean inSamePackage(@NotNull PsiFile firstFile, @NotNull PsiFile secondFile) { PsiDirectory containingDirectory = firstFile.getContainingDirectory(); if (containingDirectory == null || !containingDirectory.equals(secondFile.getContainingDirectory())) { return false; } if (firstFile instanceof GoFile && secondFile instanceof GoFile) { String referencePackage = ((GoFile)firstFile).getPackageName(); String definitionPackage = ((GoFile)secondFile).getPackageName(); return referencePackage != null && referencePackage.equals(definitionPackage); } return true; }
public static PsiDirectory getJavaSrc(PsiFile psiFile) { PsiDirectory psiDirectory = null; if (psiFile instanceof PsiJavaFileImpl) { String packageName = ((PsiJavaFileImpl) psiFile).getPackageName(); String[] arg = packageName.split("\\."); psiDirectory = psiFile.getContainingDirectory(); for (int i = 0; i < arg.length; i++) { psiDirectory = psiDirectory.getParent(); if (psiDirectory == null) { break; } } } return psiDirectory; }
@NotNull @Override public Collection<PsiElement> findTestsForClass(@NotNull PsiElement element) { PsiFile file = InjectedLanguageUtil.getTopLevelFile(element); if (file instanceof GoFile) { PsiDirectory directory = file.getContainingDirectory(); PsiFile testFile = directory.findFile(FileUtil.getNameWithoutExtension(file.getName()) + GoConstants.TEST_SUFFIX_WITH_EXTENSION); if (testFile != null) { return ContainerUtil.newSmartList(testFile); } } return Collections.emptyList(); }
@NotNull @Override public Collection<PsiElement> findClassesForTest(@NotNull PsiElement element) { PsiFile testFile = InjectedLanguageUtil.getTopLevelFile(element); if (testFile instanceof GoFile) { PsiDirectory directory = testFile.getContainingDirectory(); PsiFile sourceFile = directory.findFile(StringUtil.trimEnd(testFile.getName(), GoConstants.TEST_SUFFIX_WITH_EXTENSION) + EXTENSION); if (sourceFile != null) { return ContainerUtil.newSmartList(sourceFile); } } return Collections.emptyList(); }
private void doTestWithExistingPackage(@NotNull String fileName, @NotNull String expectedPackage, @NotNull String expectedPackageWithTestSuffix) { myFixture.configureByText("a.go", "package a"); doTest(myFixture.getFile().getContainingDirectory(), fileName, expectedPackage, expectedPackageWithTestSuffix); }
@Override public void invoke(@NotNull Project project, @NotNull PsiFile file, @Nullable("is null when called from inspection") Editor editor, @NotNull PsiElement startElement, @NotNull PsiElement endElement) { if (editor == null || myTestingPackageName != null) { renamePackagesInDirectory(project, file.getContainingDirectory(), myTestingPackageName != null ? myTestingPackageName : myPackageName); return; } JBList list = new JBList(myPackages); list.installCellRenderer(o -> { JBLabel label = new JBLabel(o.toString()); label.setBorder(IdeBorderFactory.createEmptyBorder(2, 4, 2, 4)); return label; }); JBPopupFactory.getInstance().createListPopupBuilder(list).setTitle("Choose package name").setItemChoosenCallback(() -> { String name = (String)list.getSelectedValue(); if (name != null) { renamePackagesInDirectory(project, file.getContainingDirectory(), name); } }).createPopup().showInBestPositionFor(editor); }
@NotNull protected VirtualFile getFixtureRootFile() { return myFixture.getFile().getContainingDirectory().getVirtualFile(); }
public boolean processResolveVariants(@NotNull BallerinaScopeProcessorBase processor) { PsiFile containingFile = myElement.getContainingFile(); if (!(containingFile instanceof BallerinaFile)) { return false; } // Get suggestions from current file. This is needed sometimes because without the dummy identifier inserted // by the IDEA, the file might not generate the PSI tree correctly. if (!processor.execute(containingFile, ResolveState.initial())) { return false; } PsiFile originalFile = containingFile.getOriginalFile(); // Get suggestions from current file. if (!processor.execute(originalFile, ResolveState.initial())) { return false; } // Recursively find definitions in the project starting from the current directory. recursivelyFind(processor, originalFile.getContainingDirectory(), originalFile); return true; }
public static void addCompletions(@NotNull CompletionResultSet result, @NotNull Module module, @Nullable PsiElement context, @NotNull GlobalSearchScope scope, boolean allowMain) { Project project = module.getProject(); boolean vendoringEnabled = GoVendoringUtil.isVendoringEnabled(module); String contextImportPath = GoCompletionUtil.getContextImportPath(context, vendoringEnabled); GoExcludedPathsSettings excludedSettings = GoExcludedPathsSettings.getInstance(project); PsiFile contextFile = context != null ? context.getContainingFile() : null; boolean testFileWithTestPackage = GoTestFinder.isTestFileWithTestPackage(contextFile); for (VirtualFile file : FileTypeIndex.getFiles(GoFileType.INSTANCE, scope)) { ProgressManager.checkCanceled(); PsiFile psiFile = PsiManager.getInstance(project).findFile(file); if (!(psiFile instanceof GoFile)) continue; PsiDirectory directory = psiFile.getContainingDirectory(); if (directory == null) continue; GoFile goFile = (GoFile)psiFile; if (!GoPsiImplUtil.canBeAutoImported(goFile, allowMain, module)) continue; String importPath = goFile.getImportPath(vendoringEnabled); if (StringUtil.isNotEmpty(importPath) && !excludedSettings.isExcluded(importPath) && (testFileWithTestPackage || !importPath.equals(contextImportPath))) { result.addElement(GoCompletionUtil.createPackageLookupElement(importPath, contextImportPath, directory, false)); } } } }
for (GoFile packageFile : GoPackageUtil.getAllPackageFiles(referencePsiFile.getContainingDirectory(), null)) { if (packageFile != referencePsiFile && referencePsiFile.getOriginalFile() != packageFile) { Map<String, GoImportSpec> packagesMap = packageFile.getImportedPackagesMap();
Project project = parameters.getPosition().getProject(); PsiFile file = parameters.getOriginalFile(); PsiDirectory containingDirectory = file.getContainingDirectory(); if (file instanceof GoFile && containingDirectory != null) { CompletionResultSet resultSet = result.withPrefixMatcher(new CamelHumpMatcher(result.getPrefixMatcher().getPrefix(), false));
public void testInvalidateCacheOnChangingBuildTags() { myFixture.configureByText("foo.go", "// +build ignored\n\npackage ignored"); myFixture.configureByText("bar.go", "package not_ignored"); assertSameElements(GoPackageUtil.getAllPackagesInDirectory(myFixture.getFile().getContainingDirectory(), null, true), "not_ignored"); GoBuildTargetSettings newSettings = new GoBuildTargetSettings(); newSettings.customFlags = new String[]{"ignored"}; GoModuleSettings.getInstance(myFixture.getModule()).setBuildTargetSettings(newSettings); assertSameElements(GoPackageUtil.getAllPackagesInDirectory(myFixture.getFile().getContainingDirectory(), null, true), "not_ignored", "ignored"); } }
public void testPackageNameOfTestPackageInNonTestFile() { myFixture.configureByText("foo.go", "package foo"); myFixture.configureByText("foo_test.go", "package foo_test"); myFixture.configureByText("main.go", "package main"); myFixture.configureByText("docs.go", "package documentation"); myFixture.configureByText("bar_test.go", "package tricky_package_name"); myFixture.configureByText("non_test_file.go", "package non_test"); myFixture.configureByText("ignored.go", "// +build ignored\n\npackage ignored"); assertSameElements(GoPackageUtil.getAllPackagesInDirectory(myFixture.getFile().getContainingDirectory(), null, true), "foo", "main", "non_test", "tricky_package_name"); assertSameElements(GoPackageUtil.getAllPackagesInDirectory(myFixture.getFile().getContainingDirectory(), null, false), "foo", "foo_test", "main", "non_test", "tricky_package_name"); }
private void doTest(@NotNull String beforeText, String... expectedResolve) { myFixture.configureByText(GitFileType.INSTANCE, beforeText); PsiPolyVariantReference reference = ((PsiPolyVariantReference) myFixture.getReferenceAtCaretPosition()); assertNotNull(reference); final VirtualFile rootFile = myFixture.getFile().getContainingDirectory().getVirtualFile(); ResolveResult[] resolveResults = reference.multiResolve(true); List<String> actualResolve = ContainerUtil.map(resolveResults, new Function<ResolveResult, String>() { @Override public String fun(ResolveResult resolveResult) { PsiElement resolveResultElement = resolveResult.getElement(); assertNotNull(resolveResultElement); assertInstanceOf(resolveResultElement, PsiFileSystemItem.class); PsiFileSystemItem fileSystemItem = (PsiFileSystemItem) resolveResultElement; return VfsUtilCore.getRelativePath(fileSystemItem.getVirtualFile(), rootFile, '/'); } }); assertContainsElements(actualResolve, expectedResolve); }
if (originalFile.getContainingDirectory() != null) { recursivelyFindOutwards(processor, originalFile.getContainingDirectory(), originalFile);
@Nullable public PsiDirectory getDirectory() { if(null == this.phpClass.getContainingFile()) { return null; } PsiDirectory bundleDirectory = this.phpClass.getContainingFile().getContainingDirectory(); if(null == bundleDirectory) { return null; } return bundleDirectory; }
/** * Gives targets to files which relative to current file directory */ @NotNull public static Collection<PsiFile> getFileResourceTargetsInDirectoryScope(@NotNull PsiFile psiFile, @NotNull String content) { // bundle scope if(content.startsWith("@")) { return Collections.emptyList(); } PsiDirectory containingDirectory = psiFile.getContainingDirectory(); if(containingDirectory == null) { return Collections.emptyList(); } VirtualFile relativeFile = VfsUtil.findRelativeFile(content, containingDirectory.getVirtualFile()); if(relativeFile == null) { return Collections.emptyList(); } PsiFile targetFile = PsiElementUtils.virtualFileToPsiFile(psiFile.getProject(), relativeFile); if(targetFile == null) { return Collections.emptyList(); } return Collections.singletonList(targetFile); } }
@NotNull public static PsiElement createBundleFile(@NotNull PhpClass bundleClass, @NotNull String template, @NotNull String className, Map<String, String> vars) throws Exception { VirtualFile directory = bundleClass.getContainingFile().getContainingDirectory().getVirtualFile(); if(fileExists(directory, new String[] {className})) { throw new Exception("File already exists"); } String COMPILER_TEMPLATE = "/fileTemplates/" + template + ".php"; String fileTemplateContent = getFileTemplateContent(COMPILER_TEMPLATE); if(fileTemplateContent == null) { throw new Exception("Template content error"); } String[] split = className.split("\\\\"); String ns = bundleClass.getNamespaceName(); String join = StringUtils.join(Arrays.copyOf(split, split.length - 1), "/"); vars.put("ns", (ns.startsWith("\\") ? ns.substring(1) : ns) + join.replace("/", "\\")); vars.put("class", split[split.length - 1]); for (Map.Entry<String, String> entry : vars.entrySet()) { fileTemplateContent = fileTemplateContent.replace("{{ " + entry.getKey() + " }}", entry.getValue()); } VirtualFile compilerDirectory = getAndCreateDirectory(directory, join); if(compilerDirectory == null) { throw new Exception("Directory creation failed"); } Project project = bundleClass.getProject(); PsiFile fileFromText = PsiFileFactory.getInstance(project).createFileFromText(split[split.length - 1] + ".php", PhpFileType.INSTANCE, fileTemplateContent); CodeStyleManager.getInstance(project).reformat(fileFromText); return PsiDirectoryFactory.getInstance(project).createDirectory(compilerDirectory).add(fileFromText); }
@Override protected void addCompletions(@NotNull CompletionParameters completionParameters, final ProcessingContext processingContext, @NotNull final CompletionResultSet completionResultSet) { PsiFile originalFile = completionParameters.getOriginalFile(); if(!Symfony2ProjectComponent.isEnabled(originalFile)) { return; } final PsiDirectory containingDirectory = originalFile.getContainingDirectory(); if (containingDirectory == null) { return; } final VirtualFile containingDirectoryFiles = containingDirectory.getVirtualFile(); VfsUtil.visitChildrenRecursively(containingDirectoryFiles, new VirtualFileVisitor() { @Override public boolean visitFile(@NotNull VirtualFile file) { String relativePath = VfsUtil.getRelativePath(file, containingDirectoryFiles, '/'); if (relativePath == null) { return super.visitFile(file); } completionResultSet.addElement(LookupElementBuilder.create(relativePath).withIcon(file.getFileType().getIcon())); return super.visitFile(file); } }); } }
@NotNull public static PsiElement createCompilerPass(@NotNull PhpClass bundleClass, @NotNull String className) throws Exception { VirtualFile directory = bundleClass.getContainingFile().getContainingDirectory().getVirtualFile(); if(fileExists(directory, className)) { throw new Exception("File already exists");