void (@NotNull AnActionEvent e) { super.update(e); Presentation presentation = e.getPresentation(); if (!presentation.isEnabled()) { return; } presentation.setText(ActionsBundle.actionText(myBundleKey)); presentation.setVisible(true); Project project = e.getProject(); if (project == null) { presentation.setEnabled(false); return; } boolean forFiles = false; Module module = e.getData(LangDataKeys.MODULE_CONTEXT); final VirtualFile[] files; if (module != null) { files = VirtualFile.EMPTY_ARRAY; } else { files = getCompilableFiles(project, e.getData(CommonDataKeys.VIRTUAL_FILE_ARRAY)); if (files.length == 0 && !ActionPlaces.isShortcutPlace(e.getPlace()) && !ActionPlaces.isPopupPlace(e.getPlace())) { module = e.getData(PlatformCoreDataKeys.MODULE); // fallback to any module available from the context } } if (module == null && files.length == 0) { presentation.setEnabled(false); presentation.setVisible(!ActionPlaces.isPopupPlace(e.getPlace())); return; } String elementDescription = null; if (module != null) { elementDescription = JavaCompilerBundle.message("action.compile.description.module", module.getName()); } else { PsiPackage aPackage = null; if (files.length == 1) { final PsiDirectory directory = PsiManager.getInstance(project).findDirectory(files[0]); if (directory != null) { aPackage = JavaDirectoryService.getInstance().getPackage(directory); } } else { PsiElement element = e.getData(CommonDataKeys.PSI_ELEMENT); if (element instanceof PsiPackage) { aPackage = (PsiPackage)element; } } if (aPackage != null) { String name = aPackage.getQualifiedName(); if (name.length() == 0) { name = "<default>"; } elementDescription = "'" + name + "'"; } else if (files.length == 1) { forFiles = true; final VirtualFile file = files[0]; FileType fileType = file.getFileType(); if (CompilerManager.getInstance(project).isCompilableFileType(fileType) || CompilerConfiguration.getInstance(project).isCompilableResourceFile(project, file)) { elementDescription = "'" + file.getName() + "'"; } else { if (!ActionPlaces.isMainMenuOrActionSearch(e.getPlace())) { // the action should be invisible in popups for non-java files presentation.setEnabledAndVisible(false); return; } } } else { forFiles = true; elementDescription = JavaCompilerBundle.message("action.compile.description.selected.files"); } } if (elementDescription == null) { presentation.setEnabled(false); return; } presentation.setText(createPresentationText(elementDescription), true); presentation.setEnabledAndVisible(forFiles == myIsForFiles); }