protected RunnerAndConfigurationSettings createConfigurationByElement( final Location location, final ConfigurationContext context) { final PsiElement element = location.getPsiElement(); final PsiFile file = element.getContainingFile(); if (!(file instanceof GroovyFile)) { return null; } GroovyFile groovyFile = (GroovyFile) file; final PsiClass aClass = GroovyRunnerUtil.getRunningClass(location.getPsiElement()); if (aClass instanceof GroovyScriptClass || GroovyRunnerUtil.isRunnable(aClass)) { final RunnerAndConfigurationSettings settings = createConfiguration(aClass); if (settings != null) { mySourceElement = element; final GroovyScriptRunConfiguration configuration = (GroovyScriptRunConfiguration) settings.getConfiguration(); GroovyScriptTypeDetector.getScriptType(groovyFile) .tuneConfiguration(groovyFile, configuration, location); return settings; } } if (file.getText().contains("@Grab")) { ApplicationConfigurationProducer producer = new ApplicationConfigurationProducer(); ConfigurationFromContext settings = producer.createConfigurationFromContext(context); if (settings != null) { PsiElement src = settings.getSourceElement(); mySourceElement = src; return createConfiguration( src instanceof PsiMethod ? ((PsiMethod) src).getContainingClass() : (PsiClass) src); } return null; } else { return null; } }
@Nullable private RunnerAndConfigurationSettings createConfiguration(@Nullable final PsiClass aClass) { if (aClass == null) return null; final Project project = aClass.getProject(); RunnerAndConfigurationSettings settings = RunManagerEx.getInstanceEx(project).createConfiguration("", getConfigurationFactory()); final GroovyScriptRunConfiguration configuration = (GroovyScriptRunConfiguration) settings.getConfiguration(); final PsiFile file = aClass.getContainingFile().getOriginalFile(); final PsiDirectory dir = file.getContainingDirectory(); if (dir == null) return null; configuration.setWorkDir(dir.getVirtualFile().getPath()); final VirtualFile vFile = file.getVirtualFile(); if (vFile == null) return null; configuration.setScriptPath(vFile.getPath()); RunConfigurationModule module = configuration.getConfigurationModule(); String name = GroovyRunnerUtil.getConfigurationName(aClass, module); configuration.setName(name); configuration.setModule(JavaExecutionUtil.findModule(aClass)); return settings; }