merged from HEAD
diff --git a/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/popup/actions/DLTKValidatorsActionGroup.java b/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/popup/actions/DLTKValidatorsActionGroup.java
index 15b6430..2a9ac60 100644
--- a/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/popup/actions/DLTKValidatorsActionGroup.java
+++ b/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/popup/actions/DLTKValidatorsActionGroup.java
@@ -22,6 +22,7 @@
 import org.eclipse.dltk.validators.core.ValidatorRuntime;
 import org.eclipse.jface.action.IMenuManager;
 import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IWorkbenchActionConstants;
 import org.eclipse.ui.actions.ActionGroup;
@@ -53,22 +54,49 @@
 		if (validatorTypes == null || validatorTypes.length == 0) {
 			return;
 		}
+		int validatorCount = 0;
 		final IMenuManager subMenu = new MenuManager(
 				Messages.DLTKValidatorsEditorContextMenu_text);
+		if (DEBUG) {
+			System.out.println("validators BEGIN"); //$NON-NLS-1$
+		}
 		for (int i = 0; i < validatorTypes.length; ++i) {
 			final IValidatorType type = validatorTypes[i];
+			if (DEBUG) {
+				System.out.println("validatorType " + type.getName()); //$NON-NLS-1$
+			}
 			final IValidator[] validators = type.getValidators();
 			if (validators != null && validators.length != 0) {
 				for (int j = 0; j < validators.length; ++j) {
 					final IValidator validator = validators[j];
-					if (validator.isValidatorValid(environment)) {
-						subMenu.add(new ValidateAction(validator, element));
-						subMenu.add(new RemoveMarkersAction(validator, element));
+					if (DEBUG) {
+						System.out.println("validator " + validator.getName()); //$NON-NLS-1$
+					}
+					++validatorCount;
+					final ValidateAction action = new ValidateAction(validator,
+							element);
+					action.setEnabled(validator.isValidatorValid(environment));
+					subMenu.add(action);
+					if (false) {
+						subMenu
+								.add(new RemoveMarkersAction(validator, element));
 					}
 				}
 			}
 		}
+		if (DEBUG) {
+			System.out.println("validators END"); //$NON-NLS-1$
+		}
+		if (validatorCount != 0) {
+			subMenu.add(new Separator());
+		}
+		subMenu.add(new RemoveAllMarkersAction(element));
+		if (validatorCount != 0) {
+			subMenu.add(new ValidateAllAction(element));
+		}
 		menu.appendToGroup(IWorkbenchActionConstants.MB_ADDITIONS, subMenu);
 	}
 
+	private static final boolean DEBUG = false;
+
 }
diff --git a/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/popup/actions/Messages.java b/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/popup/actions/Messages.java
index e190735..4fdc186 100644
--- a/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/popup/actions/Messages.java
+++ b/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/popup/actions/Messages.java
@@ -7,6 +7,8 @@
 	public static String DLTKValidatorsEditorContextMenu_text;
 	public static String DLTKValidatorsEditorContextMenu_validateWith;
 	public static String DLTKValidatorsEditorContextMenu_validatorCleanup;
+	public static String DLTKValidatorsEditorContextMenu_cleanupAll;
+	public static String DLTKValidatorsEditorContextMenu_validateAll;
 	public static String RemoveValidatorAllMarkersAction_validatorCleanup;
 	public static String ValidateSelectionWithConsoleAction_validation;
 	static {
diff --git a/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/popup/actions/RemoveAllMarkersAction.java b/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/popup/actions/RemoveAllMarkersAction.java
new file mode 100644
index 0000000..3433b32
--- /dev/null
+++ b/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/popup/actions/RemoveAllMarkersAction.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2008 xored software, Inc.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     xored software, Inc. - initial API and Implementation (Alex Panchenko)
+ *******************************************************************************/
+package org.eclipse.dltk.validators.internal.ui.popup.actions;
+
+import java.io.OutputStream;
+import java.util.List;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.dltk.core.IModelElement;
+import org.eclipse.dltk.validators.core.ValidatorRuntime;
+import org.eclipse.dltk.validators.internal.ui.ValidatorsUI;
+import org.eclipse.dltk.validators.ui.AbstractValidateSelectionWithConsole;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.viewers.StructuredSelection;
+
+public class RemoveAllMarkersAction extends Action {
+
+	private final IModelElement element;
+
+	/**
+	 * @param element
+	 */
+	public RemoveAllMarkersAction(IModelElement element) {
+		this.element = element;
+		setText(Messages.DLTKValidatorsEditorContextMenu_cleanupAll);
+		setImageDescriptor(ValidatorsUI.getDefault().getImageDescriptor(
+				RemoveMarkersAction.CLEANUP_IMAGE));
+	}
+
+	public void run() {
+		final AbstractValidateSelectionWithConsole delegate = new AbstractValidateSelectionWithConsole() {
+
+			protected boolean isConsoleRequired() {
+				return false;
+			}
+
+			protected String getJobName() {
+				return Messages.RemoveValidatorAllMarkersAction_validatorCleanup;
+			}
+
+			protected void invoceValidationFor(OutputStream out, List elements,
+					List resources, IProgressMonitor monitor) {
+				ValidatorRuntime.executeCleanAllValidatorsWithConsole(elements,
+						resources, monitor);
+			}
+		};
+		delegate.selectionChanged(this, new StructuredSelection(element));
+		delegate.run(this);
+	}
+
+}
diff --git a/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/popup/actions/RemoveMarkersAction.java b/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/popup/actions/RemoveMarkersAction.java
index b678085..1abe187 100644
--- a/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/popup/actions/RemoveMarkersAction.java
+++ b/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/popup/actions/RemoveMarkersAction.java
@@ -26,7 +26,7 @@
 
 public class RemoveMarkersAction extends Action {
 
-	private static final String CLEANUP_IMAGE = "icons/clear_co.gif"; //$NON-NLS-1$
+	static final String CLEANUP_IMAGE = "icons/clear_co.gif"; //$NON-NLS-1$
 
 	private final IValidator validator;
 	private final IModelElement element;
@@ -55,8 +55,8 @@
 
 			protected void invoceValidationFor(OutputStream out, List elements,
 					List resources, IProgressMonitor monitor) {
-				ValidatorRuntime.cleanValidator(validator, elements,
-						resources, monitor);
+				ValidatorRuntime.cleanValidator(validator, elements, resources,
+						monitor);
 			}
 		};
 		delegate.selectionChanged(this, new StructuredSelection(element));
diff --git a/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/popup/actions/ValidateAction.java b/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/popup/actions/ValidateAction.java
index 145c26c..3511e33 100644
--- a/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/popup/actions/ValidateAction.java
+++ b/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/popup/actions/ValidateAction.java
@@ -26,7 +26,7 @@
 
 public class ValidateAction extends Action {
 
-	private static final String VALIDATE_IMAGE = "icons/goto_input.gif"; //$NON-NLS-1$
+	static final String VALIDATE_IMAGE = "icons/goto_input.gif"; //$NON-NLS-1$
 
 	private final IValidator validator;
 	private final IModelElement element;
diff --git a/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/popup/actions/ValidateAllAction.java b/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/popup/actions/ValidateAllAction.java
new file mode 100644
index 0000000..81098c8
--- /dev/null
+++ b/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/popup/actions/ValidateAllAction.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2008 xored software, Inc.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     xored software, Inc. - initial API and Implementation (Alex Panchenko)
+ *******************************************************************************/
+package org.eclipse.dltk.validators.internal.ui.popup.actions;
+
+import java.io.OutputStream;
+import java.util.List;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.dltk.core.IModelElement;
+import org.eclipse.dltk.validators.core.ValidatorRuntime;
+import org.eclipse.dltk.validators.internal.ui.ValidatorsUI;
+import org.eclipse.dltk.validators.ui.AbstractValidateSelectionWithConsole;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.viewers.StructuredSelection;
+
+public class ValidateAllAction extends Action {
+
+	private final IModelElement element;
+
+	/**
+	 * @param element
+	 */
+	public ValidateAllAction(IModelElement element) {
+		this.element = element;
+		setText(Messages.DLTKValidatorsEditorContextMenu_validateAll);
+		setImageDescriptor(ValidatorsUI.getDefault().getImageDescriptor(
+				ValidateAction.VALIDATE_IMAGE));
+	}
+
+	public void run() {
+		final AbstractValidateSelectionWithConsole delegate = new AbstractValidateSelectionWithConsole() {
+
+			protected boolean isConsoleRequired() {
+				return false;
+			}
+
+			protected String getJobName() {
+				return Messages.ValidateSelectionWithConsoleAction_validation;
+			}
+
+			protected void invoceValidationFor(OutputStream out, List elements,
+					List resources, IProgressMonitor monitor) {
+				ValidatorRuntime.executeAllValidators(out, elements, resources,
+						monitor);
+			}
+		};
+		delegate.selectionChanged(this, new StructuredSelection(element));
+		delegate.run(this);
+	}
+
+}
diff --git a/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/popup/actions/messages.properties b/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/popup/actions/messages.properties
index c925aff..ae23ba3 100644
--- a/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/popup/actions/messages.properties
+++ b/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/popup/actions/messages.properties
@@ -1,5 +1,7 @@
 DLTKValidatorsEditorContextMenu_text=DLTK Validators
 DLTKValidatorsEditorContextMenu_validateWith=Validate with {0}
 DLTKValidatorsEditorContextMenu_validatorCleanup={0} cleanup
+DLTKValidatorsEditorContextMenu_cleanupAll=Remove all validator markers
+DLTKValidatorsEditorContextMenu_validateAll=Execute all active validators with console
 RemoveValidatorAllMarkersAction_validatorCleanup=Validator cleanup
 ValidateSelectionWithConsoleAction_validation=Validation