33import com .intellij .openapi .actionSystem .AnAction ;
44import com .intellij .openapi .actionSystem .AnActionEvent ;
55import com .intellij .openapi .actionSystem .LangDataKeys ;
6- import com .intellij .openapi .actionSystem .PlatformDataKeys ;
76import com .intellij .openapi .compiler .CompileContext ;
87import com .intellij .openapi .compiler .CompileStatusNotification ;
98import com .intellij .openapi .compiler .CompilerManager ;
10- import com .intellij .openapi .editor .Editor ;
119import com .intellij .openapi .fileEditor .OpenFileDescriptor ;
1210import com .intellij .openapi .module .Module ;
1311import com .intellij .openapi .project .Project ;
1412import com .intellij .openapi .roots .ProjectRootManager ;
1513import com .intellij .openapi .vfs .LocalFileSystem ;
1614import com .intellij .openapi .vfs .VirtualFile ;
17- import com .intellij .psi .PsiClass ;
18- import com .intellij .psi .PsiElement ;
1915import com .intellij .psi .PsiFile ;
2016import com .intellij .psi .PsiJavaFile ;
21- import com .intellij .psi .util . PsiTreeUtil ;
17+ import com .intellij .psi .PsiManager ;
2218
2319import java .io .File ;
2420import java .io .IOException ;
@@ -31,33 +27,36 @@ public class GenerateAction extends AnAction {
3127 private static final String SMALI_EXTENSION = ".smali" ;
3228
3329 public void actionPerformed (AnActionEvent e ) {
34- PsiJavaFile javaFile = ( PsiJavaFile ) getPsiClassFromContext ( e ). getContainingFile ( );
30+ VirtualFile vFile = getVirtualFileFromContext ( e );
3531
3632 Project p = e .getProject ();
37- Module module = ProjectRootManager .getInstance (p ).getFileIndex ().getModuleForFile (javaFile .getVirtualFile ());
33+ Module module = ProjectRootManager .getInstance (p ).getFileIndex ().getModuleForFile (vFile );
34+ PsiJavaFile javaFile = (PsiJavaFile ) PsiManager .getInstance (p ).findFile (vFile );
3835
39- // Compile the javaFile 's module
36+ // Compile the vFile 's module
4037 CompilerCallback compilerCallback = new CompilerCallback (module , javaFile );
4138 CompilerManager .getInstance (p ).compile (module , compilerCallback );
4239 }
4340
4441 @ Override
4542 public void update (AnActionEvent e ) {
46- PsiClass psiClass = getPsiClassFromContext (e );
47- e .getPresentation ().setEnabled (psiClass != null && psiClass .getContainingFile () instanceof PsiJavaFile );
43+ boolean enabled = false ;
44+
45+ VirtualFile vFile = getVirtualFileFromContext (e );
46+ if (vFile != null ) {
47+ String extension = vFile .getFileType ().getDefaultExtension ();
48+ Module m = ProjectRootManager .getInstance (e .getProject ()).getFileIndex ().getModuleForFile (vFile );
49+ enabled = "java" .equals (extension ) && m != null ;
50+ }
51+ e .getPresentation ().setEnabled (enabled );
4852 }
4953
50- private PsiClass getPsiClassFromContext (AnActionEvent e ) {
54+ private VirtualFile getVirtualFileFromContext (AnActionEvent e ) {
5155 PsiFile psiFile = e .getData (LangDataKeys .PSI_FILE );
52- Editor editor = e .getData (PlatformDataKeys .EDITOR );
53-
54- if (psiFile == null || editor == null ) {
56+ if (psiFile == null ) {
5557 return null ;
5658 }
57-
58- int offset = editor .getCaretModel ().getOffset ();
59- PsiElement elementAt = psiFile .findElementAt (offset );
60- return PsiTreeUtil .getParentOfType (elementAt , PsiClass .class );
59+ return psiFile .getVirtualFile ();
6160 }
6261
6362 private static VirtualFile getSourceRootFile (PsiFile file ) {
0 commit comments