LanguageLevel (VirtualFile virtualFile) { final ProjectFileIndex index = ProjectRootManager.getInstance(myProject).getFileIndex(); final VirtualFile sourceRoot = index.getSourceRootForFile(virtualFile); VirtualFile folder = virtualFile.isDirectory() ? virtualFile : virtualFile.getParent(); if (sourceRoot != null && sourceRoot.isDirectory() && folder != null) { String relativePath = VfsUtilCore.getRelativePath(folder, sourceRoot, '/'); if (relativePath == null) { LOG.error("Null relative path: folder=" + folder + "; root=" + sourceRoot); return null; } String className = virtualFile.getNameWithoutExtension(); Set<VirtualFile> visitedRoots = new HashSet<>(); for (OrderEntry entry : index.getOrderEntriesForFile(virtualFile)) { for (VirtualFile rootFile : entry.getFiles(OrderRootType.CLASSES)) { if (visitedRoots.add(rootFile)) { VirtualFile classFile = rootFile.findFileByRelativePath(relativePath); PsiJavaFile javaFile = classFile == null ? null : getPsiFileInRoot(classFile, className); if (javaFile != null) { return javaFile.getLanguageLevel(); } } } } return LanguageLevelProjectExtension.getInstance(myProject).getLanguageLevel(); } return null; }