PsiJavaModule (Project project, ProjectFileIndex index, VirtualFile file) { VirtualFile root = index.getClassRootForFile(file); if (root != null) { VirtualFile descriptorFile = JavaModuleNameIndex.descriptorFile(root); if (descriptorFile != null) { PsiFile psiFile = PsiManager.getInstance(project).findFile(descriptorFile); if (psiFile instanceof PsiJavaFile) { return ((PsiJavaFile)psiFile).getModuleDeclaration(); } } else if (root.getFileSystem() instanceof JarFileSystem && "jar".equalsIgnoreCase(root.getExtension())) { PsiDirectory rootPsi = PsiManager.getInstance(project).findDirectory(root); assert rootPsi != null : root; return CachedValuesManager.getCachedValue(rootPsi, () -> { VirtualFile _root = rootPsi.getVirtualFile(); LightJavaModule result = LightJavaModule.create(rootPsi.getManager(), _root, LightJavaModule.moduleName(_root)); return Result.create(result, _root, ProjectRootModificationTracker.getInstance(rootPsi.getProject())); }); } } else { root = index.getSourceRootForFile(file); if (root != null) { VirtualFile moduleDescriptor = root.findChild(PsiJavaModule.MODULE_INFO_FILE); PsiFile psiFile = moduleDescriptor != null ? PsiManager.getInstance(project).findFile(moduleDescriptor) : null; if (psiFile instanceof PsiJavaFile) { return ((PsiJavaFile)psiFile).getModuleDeclaration(); } } } return null; }