in src/java/org/jetbrains/plugins/clojure/runner/ClojureScriptRunConfiguration.java [181:276]
public RunProfileState getState(@NotNull Executor executor, @NotNull ExecutionEnvironment environment) throws ExecutionException {
final Module module = getModule();
if (module == null) {
throw new ExecutionException("Module is not specified");
}
final ModuleRootManager rootManager = ModuleRootManager.getInstance(module);
final Sdk sdk = rootManager.getSdk();
if (sdk == null || !(sdk.getSdkType() instanceof JavaSdkType)) {
throw CantRunException.noJdkForModule(getModule());
}
final Project project = module.getProject();
if (!org.jetbrains.plugins.clojure.config.ClojureConfigUtil.isClojureConfigured(module)) {
Messages.showErrorDialog(project,
ClojureBundle.message("error.running.configuration.with.error.error.message", getName(),
ClojureBundle.message("clojure.lib.is.not.attached")),
ClojureBundle.message("run.error.message.title"));
ModulesConfigurator.showDialog(project, module.getName(), ClasspathEditor.NAME);
return null;
}
final ClojureConfigUtil.RunConfigurationParameters params =
new ClojureConfigUtil.RunConfigurationParameters();
final String namespace;
if (runMainFunction) {
final VirtualFile virtualFile = VfsUtil.findFileByIoFile(new File(scriptPath), true);
if (virtualFile == null) {
showCannotDetermineNamespaceError();
return null;
}
final PsiFile file = PsiManager.getInstance(getProject()).findFile(virtualFile);
if (!(file instanceof ClojureFile)) {
showCannotDetermineNamespaceError();
return null;
}
final String ns = ((ClojureFile) file).getNamespace();
if (ns == null) {
showCannotDetermineNamespaceError();
return null;
}
namespace = ns;
} else {
namespace = null;
}
final JavaCommandLineState state = new JavaCommandLineState(environment) {
protected JavaParameters createJavaParameters() throws ExecutionException {
ProgramParametersUtil.configureConfiguration(params, ClojureScriptRunConfiguration.this);
configureJavaParams(params, module);
final ParametersList list = params.getProgramParametersList();
if (runMainFunction) {
configureMainFunction(list, namespace);
} else {
configureScript(list);
}
return params;
}
};
final TextConsoleBuilderImpl builder = new TextConsoleBuilderImpl(project) {
private final ArrayList<Filter> filters = new ArrayList<Filter>();
@Override
public ConsoleView getConsole() {
final ConsoleViewImpl view = new ConsoleViewImpl(project, false);
for (Filter filter : filters) {
view.addMessageFilter(filter);
}
return view;
}
@Override
public void addFilter(Filter filter) {
filters.add(filter);
}
};
state.setConsoleBuilder(builder);
if (params.isDefaultClojureJarUsed()) {
ClojureConfigUtil.warningDefaultClojureJar(module);
}
return state;
}