@Override
	protected IStatus run(IProgressMonitor monitor) {
		synchronized (Processor.class) {
			try {
				try {
					boolean force = false;
					Collection<ProjectInfo> projects = this.projects;
					if (projects == null) {
						projects = new ArrayList<ProjectInfo>(WorkspaceInfo.getAllProjects());
					} else {
						force = true;
						projects = new ArrayList<ProjectInfo>(projects);
					}
					CreateSbtPlugin.createSbtPlugin();
					console = new Console();
					for (ProjectInfo project : projects) {
						process(project, force);
					}
					if (command == null) {
						for (ProjectInfo project : WorkspaceInfo.getAllProjects()) {
							if (project.isSbtProject()) {
								project.checkProjectDependencies();
							}
						}
					}
					return Status.OK_STATUS;
				} catch (Throwable t) {
					return new Status(Status.ERROR, PLUGIN_ID, t.getMessage(), t);
				}
			} catch (Throwable t) {
				return new Status(Status.ERROR, PLUGIN_ID, t.getMessage(), t);
			} finally {
				try {
					if (console != null) {
						console.close();
					}
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}