1818
1919package org .objectweb .asm .idea ;
2020
21- import com .intellij .openapi .actionSystem .AnAction ;
22- import com .intellij .openapi .actionSystem .AnActionEvent ;
23- import com .intellij .openapi .actionSystem .PlatformDataKeys ;
24- import com .intellij .openapi .actionSystem .Presentation ;
21+ import com .intellij .openapi .actionSystem .*;
2522import com .intellij .openapi .application .Application ;
2623import com .intellij .openapi .application .ApplicationManager ;
2724import com .intellij .openapi .compiler .CompileContext ;
3027import com .intellij .openapi .compiler .CompilerManager ;
3128import com .intellij .openapi .editor .Editor ;
3229import com .intellij .openapi .fileEditor .FileDocumentManager ;
30+ import com .intellij .openapi .fileEditor .FileEditor ;
3331import com .intellij .openapi .module .Module ;
3432import com .intellij .openapi .module .ModuleUtil ;
3533import com .intellij .openapi .project .Project ;
3937import com .intellij .openapi .wm .ToolWindowManager ;
4038import com .intellij .psi .*;
4139import com .intellij .psi .codeStyle .CodeStyleManager ;
40+ import com .intellij .psi .util .PsiUtil ;
4241import org .objectweb .asm .ClassReader ;
4342import org .objectweb .asm .ClassVisitor ;
4443import org .objectweb .asm .idea .config .ASMPluginComponent ;
@@ -90,9 +89,14 @@ public void actionPerformed(AnActionEvent e) {
9089 final CompilerModuleExtension cme = CompilerModuleExtension .getInstance (module );
9190 final CompilerManager compilerManager = CompilerManager .getInstance (project );
9291 final VirtualFile [] files = {virtualFile };
93- final CompileScope compileScope = compilerManager .createFilesCompileScope (files );
9492 if ("class" .equals (virtualFile .getExtension ())) {
9593 updateToolWindowContents (project , virtualFile );
94+ } else if (!virtualFile .isInLocalFileSystem () && !virtualFile .isWritable ()) {
95+ // probably a source file in a library
96+ final PsiClass [] psiClasses = ((PsiClassOwner ) psiFile ).getClasses ();
97+ if (psiClasses .length >0 ) {
98+ updateToolWindowContents (project , psiClasses [0 ].getOriginalElement ().getContainingFile ().getVirtualFile ());
99+ }
96100 } else {
97101 final Application application = ApplicationManager .getApplication ();
98102 application .runWriteAction (new Runnable () {
@@ -102,14 +106,11 @@ public void run() {
102106 });
103107 application .executeOnPooledThread (new Runnable () {
104108 public void run () {
109+ final CompileScope compileScope = compilerManager .createFilesCompileScope (files );
105110 final VirtualFile [] result = {null };
106111 VirtualFile [] outputDirectories = cme == null ? null : cme .getOutputRoots (true );
107112 if (outputDirectories != null && compilerManager .isUpToDate (compileScope )) {
108113 result [0 ] = findClassFile (outputDirectories , psiFile );
109- if (result [0 ]==null && cme !=null ) {
110- // check if file is in test output directory
111-
112- }
113114 } else {
114115 final Semaphore semaphore = new Semaphore (1 );
115116 try {
@@ -129,7 +130,7 @@ public void finished(boolean aborted, int errors, int warnings, final CompileCon
129130 }
130131 semaphore .release ();
131132 }
132- }, true );
133+ });
133134 }
134135 });
135136 try {
0 commit comments