|
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){}} |
Wrote a little script to create a text file based on the name of the current Git branch. We add changelogs this way and it was very tedious to copy over the branch name all the time.
Thanks to all of you sharing your scripts as examples!