| import static com.intellij.openapi.actionSystem.LangDataKeys.* |
| |
| ////////////////////////////////////////////////////////////////////////////////////////////// |
| metaClass.propertyMissing = {name -> |
| switch (name) { |
| case "application": return com.intellij.openapi.application.ApplicationManager.getApplication() |
| case "project": return com.intellij.openapi.project.ProjectManager.getInstance().getOpenProjects()[0] |
| case "INDEX": return com.intellij.psi.search.FilenameIndex |
| case "GSS": return com.intellij.psi.search.GlobalSearchScope |
| case "EXT": return com.intellij.openapi.extensions.Extensions |
| default: |
| def variants = [] |
| for (t in [IDE.project, IDE.application]) { |
| for (obj in t.picoContainer.componentKeyToAdapterCache.keySet()) { |
| def key = obj instanceof String ? obj : obj instanceof Class ? obj.getName() : null |
| if (key == null) continue |
| def match = key =~ /[\.]([^\.]+?)(Service|Manager|Helper|Factory)?$/ |
| def groups = match.size()? match[0][1..-1] : [key, null] |
| def singular = groups[1..-1][0] == null |
| def words = com.intellij.psi.codeStyle.NameUtil.nameToWords(groups[0]) |
| def short0 = [words[0].toLowerCase(), words.length==1? "" : words[1..-1]].flatten().join() |
| def shortName = singular? short0 : com.intellij.openapi.util.text.StringUtil.pluralize(short0) |
| if (shortName.equals(name)) return t.picoContainer.getComponentInstance(obj); |
| if (com.intellij.openapi.util.text.StringUtil.containsIgnoreCase(groups[0], name)) variants.add(shortName) |
| } |
| } |
| throw new MissingPropertyException("Service or Component '$name' not found. Variants: $variants") |
| } |
| } |
| |
| String.class.metaClass.file = {-> virtualFiles.findFileByUrl(com.intellij.openapi.vfs.VfsUtil.pathToUrl(delegate))} |
| String.class.metaClass.file2 = {-> def name = delegate; fileEditors.getOpenFiles().find {file -> file.getName().equals(name) }} |
| String.class.metaClass.findPsi = {-> INDEX.getFilesByName(project, delegate, GSS.allScope(project)) } |
| String.class.metaClass.findFile = {-> INDEX.getVirtualFilesByName(project, delegate, GSS.allScope(project)) } |
| String.class.metaClass.firstPsi = {-> delegate.findPsi()[0] } |
| String.class.metaClass.firstFile = {-> delegate.findFile()[0] } |
| String.class.metaClass.ep = {-> EXT.getArea(null).getExtensionPoint(delegate) } |
| com.intellij.openapi.actionSystem.DataKey.class.metaClass.from = {e -> delegate.getData(e.getDataContext()) } |
| |
| def virtualFileMetaClass = com.intellij.openapi.vfs.VirtualFile.class.metaClass |
| virtualFileMetaClass.psi = {-> psiManager.findFile(delegate)} |
| virtualFileMetaClass.document = {-> fileDocuments.getDocument(delegate)} |
| virtualFileMetaClass.editor = {-> fileEditors.getSelectedEditor(delegate)?.getEditor()} |
| |
| def psiMetaClass = com.intellij.psi.PsiElement.class.metaClass |
| psiMetaClass.document = {-> psiDocuments.getDocument(delegate)} |
| psiMetaClass.file = {-> delegate.getContainingFile().getVirtualFile()} |
| psiMetaClass.editor = {-> fileEditors.getSelectedEditor(delegate.file())?.getEditor()} |
| |
| write = { c -> application.runWriteAction(c)} |
| read = { c -> application.runReadAction(c)} |
| pool = { c -> application.executeOnPooledThread(c)} |
| swing = { c -> com.intellij.util.ui.UIUtil.invokeLaterIfNeeded(c)} |
| |
| action = { name, shortcut = null, perform = null -> |
| actions.unregisterAction(name) |
| keymaps.getActiveKeymap().removeAllActionShortcuts(name) |
| |
| if (perform == null) return |
| actions.registerAction(name, new com.intellij.openapi.actionSystem.AnAction(name, name, null) { |
| @Override |
| void actionPerformed(com.intellij.openapi.actionSystem.AnActionEvent e) { |
| perform(e) |
| } }) |
| if (shortcut != null) { |
| keymaps.getActiveKeymap().addShortcut(name, new com.intellij.openapi.actionSystem.KeyboardShortcut( |
| javax.swing.KeyStroke.getKeyStroke(shortcut), null)) |
| } |
| } |
| |
| timer = {name, delay = 1, perform = null -> |
| dispose(name) |
| if (perform == null) return |
| def h = new com.intellij.util.Alarm(project) |
| def r = new Runnable() { public void run() {perform(); h.addRequest(this, delay); }} |
| h.addRequest(r, delay) |
| IDE.put(name, h) |
| } |
| dispose = { h -> |
| t = h instanceof com.intellij.openapi.Disposable ? h : IDE.put(h, null) |
| if (t != null) com.intellij.openapi.util.Disposer.dispose(t) |
| } |
| |
| editor = { -> try {windows.getFocusedComponent(project).getEditor()} catch(e){}} |
Is there a way to execute ide script from console / using run configurations or something similar?