@Override public boolean isAvailable(@NotNull Project project, @NotNull PsiFile file, @NotNull PsiElement startElement, @NotNull PsiElement endElement) { PsiReference reference = getReference(startElement); return file instanceof GoFile && file.getManager().isInProject(file) && reference != null && reference.resolve() == null && !getImportPathVariantsToImport(startElement).isEmpty() && notQualified(startElement); }
@Override public boolean isAvailable(@NotNull Project project, @NotNull PsiFile file, @NotNull PsiElement startElement, @NotNull PsiElement endElement) { // We only perform this action on Ballerina modules since this might cause issues in other modules. Module module = ModuleUtil.findModuleForFile(file.getVirtualFile(), file.getProject()); boolean isBallerinaModule = BallerinaSdkService.getInstance(project).isBallerinaModule(module); if (!isBallerinaModule) { return false; } // If the file contain error elements, do not perform auto import. Since this might affect badly to the user // experience. Collection<PsiErrorElement> errorElements = PsiTreeUtil.findChildrenOfType(file, PsiErrorElement.class); if (!errorElements.isEmpty()) { return false; } PsiReference reference = startElement.getReference(); return file instanceof BallerinaFile && file.getManager().isInProject(file) && (reference == null || reference.resolve() == null); }
@Override public Visibility isDeclarationVisible(PsiElement declaration, PsiElement place) { return declaration.getManager().isInProject(declaration) ? Visibility.VISIBLE : Visibility.NOT_VISIBLE; } };
private static void getSuperClassesOfList(@NotNull PsiClassType[] types, @NotNull Set<PsiClass> results, boolean includeNonProject, @NotNull Set<PsiClass> visited, @NotNull PsiManager manager) { for (PsiClassType type : types) { PsiClass resolved = type.resolve(); if (resolved != null && visited.add(resolved)) { if (includeNonProject || manager.isInProject(resolved)) { results.add(resolved); } getSuperClassesOfList(resolved.getSuperTypes(), results, includeNonProject, visited, manager); } } }