3737import consulo .module .content .ProjectRootManager ;
3838import consulo .project .Project ;
3939import consulo .ui .ex .action .AnActionEvent ;
40+ import consulo .ui .ex .action .AnActionWithAsyncUpdate ;
41+ import consulo .ui .ex .action .coroutine .ActionSafeReadLock ;
42+ import consulo .util .concurrent .coroutine .Coroutine ;
4043import consulo .virtualFileSystem .VirtualFile ;
4144import org .jspecify .annotations .Nullable ;
4245
4952import static com .intellij .java .language .psi .PsiJavaModule .MODULE_INFO_FILE ;
5053
5154@ ActionImpl (id = "NewModuleInfo" )
52- public class CreateModuleInfoAction extends CreateFromTemplateActionBase {
55+ public class CreateModuleInfoAction extends CreateFromTemplateActionBase implements AnActionWithAsyncUpdate {
5356 public CreateModuleInfoAction () {
5457 super (
5558 JavaLocalize .actionCreateNewModuleInfoTitle (),
@@ -59,24 +62,26 @@ public CreateModuleInfoAction() {
5962 }
6063
6164 @ Override
62- public void update (AnActionEvent e ) {
63- if (!e .getPresentation ().isVisible ()) {
64- return ;
65- }
66- DataContext ctx = e .getDataContext ();
67- boolean available = Optional .ofNullable (ctx .getData (IdeView .KEY ))
68- .map (view -> getTargetDirectory (ctx , view ))
69- .filter (PsiUtil ::isLanguageLevel9OrHigher )
70- .map (PsiElement ::getModule )
71- .map (
72- module -> FilenameIndex .getVirtualFilesByName (
73- module .getProject (),
74- MODULE_INFO_FILE ,
75- GlobalSearchScope .moduleScope (module )
76- ).isEmpty ()
77- )
78- .orElse (false );
79- e .getPresentation ().setEnabledAndVisible (available );
65+ public Coroutine <?, ?> updateAsync (AnActionEvent e ) {
66+ return ActionSafeReadLock .run (e , presentation -> {
67+ if (!e .getPresentation ().isVisible ()) {
68+ return ;
69+ }
70+ DataContext ctx = e .getDataContext ();
71+ boolean available = Optional .ofNullable (ctx .getData (IdeView .KEY ))
72+ .map (view -> getTargetDirectory (ctx , view ))
73+ .filter (PsiUtil ::isLanguageLevel9OrHigher )
74+ .map (PsiElement ::getModule )
75+ .map (
76+ module -> FilenameIndex .getVirtualFilesByName (
77+ module .getProject (),
78+ MODULE_INFO_FILE ,
79+ GlobalSearchScope .moduleScope (module )
80+ ).isEmpty ()
81+ )
82+ .orElse (false );
83+ e .getPresentation ().setEnabledAndVisible (available );
84+ }).toCoroutine ();
8085 }
8186
8287 @ Nullable
0 commit comments