import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.DataKeys; import com.intellij.openapi.module.Module; import com.intellij.openapi.roots.CompilerModuleExtension; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileManager; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiJavaFile; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; import java.io.File; /** * Created by serical on 2017/3/17. */ public class ClassesExportAction extends AnAction { @Override public void actionPerformed(AnActionEvent e) { try { com.intellij.openapi.actionSystem.DataContext dataContext = e.getDataContext(); PsiJavaFile javaFile = (PsiJavaFile) ((PsiFile) DataKeys.PSI_FILE.getData(dataContext)).getContainingFile(); String sourceName = javaFile.getName(); Module module = (Module) DataKeys.MODULE.getData(dataContext); String compileRoot = CompilerModuleExtension.getInstance(module).getCompilerOutputPath().getPath(); getVirtualFile(sourceName, CompilerModuleExtension.getInstance(module).getCompilerOutputPath().getChildren(), compileRoot); VirtualFileManager.getInstance().syncRefresh(); } catch (Exception ex) { ex.printStackTrace(); Messages.showErrorDialog("Please build your module or project!!!", "error"); } } private void getVirtualFile(String sourceName, VirtualFile virtualFile[], String compileRoot) throws Exception { if (!ArrayUtils.isEmpty(virtualFile)) { VirtualFile arr$[] = virtualFile; int len$ = arr$.length; for (int i$ = 0; i$ < len$; i$++) { VirtualFile vf = arr$[i$]; String srcName; if (StringUtils.indexOf(vf.toString(), "$") != -1) srcName = StringUtils.substring(vf.toString(), StringUtils.lastIndexOf(vf.toString(), "/") + 1, StringUtils.indexOf(vf.toString(), "$")); else srcName = StringUtils.substring(vf.toString(), StringUtils.lastIndexOf(vf.toString(), "/") + 1, StringUtils.length(vf.toString()) - 6); String dstName = StringUtils.substring(sourceName, 0, StringUtils.length(sourceName) - 5); if (StringUtils.equals(srcName, dstName)) { String outRoot = (new StringBuilder()).append(StringUtils.substring(compileRoot, 0, StringUtils.lastIndexOf(compileRoot, "/"))).append("/out").toString(); String packagePath = StringUtils.substring(vf.getPath(), StringUtils.length(compileRoot), StringUtils.length(vf.getPath())); File s = new File(vf.getPath()); File t = new File((new StringBuilder()).append(outRoot).append(packagePath).toString()); FileUtil.copy(s, t); } if (!ArrayUtils.isEmpty(virtualFile)) getVirtualFile(sourceName, vf.getChildren(), compileRoot); } } } }