diff --git a/tcl/plugins/org.eclipse.dltk.tcl.testing/.classpath b/tcl/plugins/org.eclipse.dltk.tcl.testing/.classpath
index 64c5e31..eca7bdb 100644
--- a/tcl/plugins/org.eclipse.dltk.tcl.testing/.classpath
+++ b/tcl/plugins/org.eclipse.dltk.tcl.testing/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/tcl/plugins/org.eclipse.dltk.tcl.testing/.settings/org.eclipse.jdt.core.prefs b/tcl/plugins/org.eclipse.dltk.tcl.testing/.settings/org.eclipse.jdt.core.prefs
index e3467e3..9ed7b86 100644
--- a/tcl/plugins/org.eclipse.dltk.tcl.testing/.settings/org.eclipse.jdt.core.prefs
+++ b/tcl/plugins/org.eclipse.dltk.tcl.testing/.settings/org.eclipse.jdt.core.prefs
@@ -1,8 +1,104 @@
-#Tue Sep 29 09:55:36 NOVST 2009
 eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/tcl/plugins/org.eclipse.dltk.tcl.testing/.settings/org.eclipse.jdt.ui.prefs b/tcl/plugins/org.eclipse.dltk.tcl.testing/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..fbac55c
--- /dev/null
+++ b/tcl/plugins/org.eclipse.dltk.tcl.testing/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,59 @@
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_functional_interfaces=true
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.make_local_variable_final=true
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_type_arguments=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=false
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_anonymous_class_creation=false
+sp_cleanup.use_blocks=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_lambda=true
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/tcl/plugins/org.eclipse.dltk.tcl.testing/META-INF/MANIFEST.MF b/tcl/plugins/org.eclipse.dltk.tcl.testing/META-INF/MANIFEST.MF
index 085d950..f3049e8 100644
--- a/tcl/plugins/org.eclipse.dltk.tcl.testing/META-INF/MANIFEST.MF
+++ b/tcl/plugins/org.eclipse.dltk.tcl.testing/META-INF/MANIFEST.MF
@@ -30,5 +30,5 @@
 Eclipse-LazyStart: true
 Bundle-Vendor: %providerName
 Export-Package: org.eclipse.dltk.tcl.testing
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
diff --git a/tcl/plugins/org.eclipse.dltk.tcl.testing/src/org/eclipse/dltk/tcl/internal/testing/Activator.java b/tcl/plugins/org.eclipse.dltk.tcl.testing/src/org/eclipse/dltk/tcl/internal/testing/Activator.java
index b5c1367..a023a43 100644
--- a/tcl/plugins/org.eclipse.dltk.tcl.testing/src/org/eclipse/dltk/tcl/internal/testing/Activator.java
+++ b/tcl/plugins/org.eclipse.dltk.tcl.testing/src/org/eclipse/dltk/tcl/internal/testing/Activator.java
@@ -13,26 +13,20 @@
 
 	// The shared instance
 	private static Activator plugin;
-	
+
 	/**
 	 * The constructor
 	 */
 	public Activator() {
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
-	 */
+	@Override
 	public void start(BundleContext context) throws Exception {
 		super.start(context);
 		plugin = this;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
-	 */
+	@Override
 	public void stop(BundleContext context) throws Exception {
 		plugin = null;
 		super.stop(context);
diff --git a/tcl/plugins/org.eclipse.dltk.tcl.testing/src/org/eclipse/dltk/tcl/internal/testing/TclTestingLaunchConfigurationDelegate.java b/tcl/plugins/org.eclipse.dltk.tcl.testing/src/org/eclipse/dltk/tcl/internal/testing/TclTestingLaunchConfigurationDelegate.java
index b75fefa..5d450cd 100644
--- a/tcl/plugins/org.eclipse.dltk.tcl.testing/src/org/eclipse/dltk/tcl/internal/testing/TclTestingLaunchConfigurationDelegate.java
+++ b/tcl/plugins/org.eclipse.dltk.tcl.testing/src/org/eclipse/dltk/tcl/internal/testing/TclTestingLaunchConfigurationDelegate.java
@@ -4,28 +4,24 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.debug.core.ILaunch;
 import org.eclipse.debug.core.ILaunchConfiguration;
-import org.eclipse.debug.core.model.ILaunchConfigurationDelegate;
 import org.eclipse.dltk.compiler.util.Util;
 import org.eclipse.dltk.launching.IInterpreterRunner;
 import org.eclipse.dltk.launching.InterpreterConfig;
 import org.eclipse.dltk.tcl.launching.TclLaunchConfigurationDelegate;
 import org.eclipse.dltk.tcl.testing.ITclTestingEngine;
-import org.eclipse.dltk.testing.DLTKTestingCore;
 import org.eclipse.dltk.testing.DLTKTestingConstants;
+import org.eclipse.dltk.testing.DLTKTestingCore;
 
-public class TclTestingLaunchConfigurationDelegate extends
-		TclLaunchConfigurationDelegate implements ILaunchConfigurationDelegate {
+public class TclTestingLaunchConfigurationDelegate extends TclLaunchConfigurationDelegate {
 	private ITclTestingEngine engine;
 
-	protected InterpreterConfig createInterpreterConfig(
-			ILaunchConfiguration configuration, ILaunch launch)
+	@Override
+	protected InterpreterConfig createInterpreterConfig(ILaunchConfiguration configuration, ILaunch launch)
 			throws CoreException {
 		// We need to create correct execute script for this element.
-		InterpreterConfig config = super.createInterpreterConfig(configuration,
-				launch);
+		InterpreterConfig config = super.createInterpreterConfig(configuration, launch);
 		ITclTestingEngine[] engines = TclTestingEngineManager.getEngines();
-		String engineId = configuration.getAttribute(
-				DLTKTestingConstants.ATTR_ENGINE_ID, Util.EMPTY_STRING);
+		String engineId = configuration.getAttribute(DLTKTestingConstants.ATTR_ENGINE_ID, Util.EMPTY_STRING);
 		for (int i = 0; i < engines.length; i++) {
 			if (engines[i].getId().equals(engineId)) {
 				engines[i].correctLaunchConfiguration(config, configuration, launch);
@@ -36,13 +32,12 @@
 		return config;
 	}
 
-	protected void runRunner(ILaunchConfiguration configuration,
-			IInterpreterRunner runner, InterpreterConfig config,
+	@Override
+	protected void runRunner(ILaunchConfiguration configuration, IInterpreterRunner runner, InterpreterConfig config,
 			ILaunch launch, IProgressMonitor monitor) throws CoreException {
 
 		if (engine != null) {
-			DLTKTestingCore.registerTestingProcessor(launch, engine
-					.getProcessor(launch));
+			DLTKTestingCore.registerTestingProcessor(launch, engine.getProcessor(launch));
 		}
 
 		super.runRunner(configuration, runner, config, launch, monitor);
diff --git a/tcl/plugins/org.eclipse.dltk.tcl.testing/src/org/eclipse/dltk/tcl/internal/testing/TclTestingLaunchShortcut.java b/tcl/plugins/org.eclipse.dltk.tcl.testing/src/org/eclipse/dltk/tcl/internal/testing/TclTestingLaunchShortcut.java
index 72c4ac6..79bf3a4 100644
--- a/tcl/plugins/org.eclipse.dltk.tcl.testing/src/org/eclipse/dltk/tcl/internal/testing/TclTestingLaunchShortcut.java
+++ b/tcl/plugins/org.eclipse.dltk.tcl.testing/src/org/eclipse/dltk/tcl/internal/testing/TclTestingLaunchShortcut.java
@@ -41,20 +41,17 @@
 
 public class TclTestingLaunchShortcut implements ILaunchShortcut {
 
-	private static final String EMPTY_STRING= ""; //$NON-NLS-1$
-	
+	private static final String EMPTY_STRING = ""; //$NON-NLS-1$
+
 	/**
 	 * Default constructor.
 	 */
 	public TclTestingLaunchShortcut() {
 	}
-	
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.debug.ui.ILaunchShortcut#launch(org.eclipse.ui.IEditorPart, java.lang.String)
-	 */
+
+	@Override
 	public void launch(IEditorPart editor, String mode) {
-		IModelElement element= DLTKUIPlugin.getEditorInputModelElement(editor.getEditorInput());
+		IModelElement element = DLTKUIPlugin.getEditorInputModelElement(editor.getEditorInput());
 		if (element != null) {
 			launch(new Object[] { element }, mode);
 		} else {
@@ -62,9 +59,7 @@
 		}
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.debug.ui.ILaunchShortcut#launch(org.eclipse.jface.viewers.ISelection, java.lang.String)
-	 */
+	@Override
 	public void launch(ISelection selection, String mode) {
 		if (selection instanceof IStructuredSelection) {
 			launch(((IStructuredSelection) selection).toArray(), mode);
@@ -75,38 +70,38 @@
 
 	private void launch(Object[] elements, String mode) {
 		try {
-			IModelElement elementToLaunch= null;
-			
+			IModelElement elementToLaunch = null;
+
 			if (elements.length == 1) {
-				Object selected= elements[0];
+				Object selected = elements[0];
 				if (selected instanceof IFolder) {
 					performLaunch((IFolder) selected, mode);
 					return;
 				}
 				if (!(selected instanceof IModelElement) && selected instanceof IAdaptable) {
-					selected= ((IAdaptable) selected).getAdapter(IModelElement.class);
+					selected = ((IAdaptable) selected).getAdapter(IModelElement.class);
 				}
 				if (selected instanceof IModelElement) {
-					IModelElement element= (IModelElement) selected;
+					IModelElement element = (IModelElement) selected;
 					switch (element.getElementType()) {
-						case IModelElement.SCRIPT_PROJECT: {
-							IProject project = ((IScriptProject) element).getProject();
-							IFolder specFolder = project.getFolder("test");
-							if (specFolder != null && specFolder.exists()) {
-								performLaunch(specFolder, mode);
-								return;
-							}
-						}
-						break;
-						case IModelElement.PROJECT_FRAGMENT:
-						case IModelElement.SCRIPT_FOLDER: {
-							performLaunch((IFolder) element.getResource(), mode);
+					case IModelElement.SCRIPT_PROJECT: {
+						IProject project = ((IScriptProject) element).getProject();
+						IFolder specFolder = project.getFolder("test");
+						if (specFolder != null && specFolder.exists()) {
+							performLaunch(specFolder, mode);
 							return;
 						}
-						case IModelElement.SOURCE_MODULE:
-						case IModelElement.METHOD:
-							elementToLaunch= element;
-							break;
+					}
+						break;
+					case IModelElement.PROJECT_FRAGMENT:
+					case IModelElement.SCRIPT_FOLDER: {
+						performLaunch((IFolder) element.getResource(), mode);
+						return;
+					}
+					case IModelElement.SOURCE_MODULE:
+					case IModelElement.METHOD:
+						elementToLaunch = element;
+						break;
 					}
 				}
 			}
@@ -118,7 +113,8 @@
 		} catch (InterruptedException e) {
 			// OK, silently move on
 		} catch (CoreException e) {
-			ExceptionHandler.handle(e, getShell(), "XUnit Launch", "Launching of XUnit tests unexpectedly failed. Check log for details.");
+			ExceptionHandler.handle(e, getShell(), "XUnit Launch",
+					"Launching of XUnit tests unexpectedly failed. Check log for details.");
 		}
 	}
 
@@ -127,42 +123,48 @@
 	}
 
 	private void performLaunch(IModelElement element, String mode) throws InterruptedException, CoreException {
-		ILaunchConfigurationWorkingCopy temporary= createLaunchConfiguration(element);
-		if( temporary == null ) {
+		ILaunchConfigurationWorkingCopy temporary = createLaunchConfiguration(element);
+		if (temporary == null) {
 			return;
 		}
-		ILaunchConfiguration config= findExistingLaunchConfiguration(temporary, mode);
+		ILaunchConfiguration config = findExistingLaunchConfiguration(temporary, mode);
 		if (config == null) {
 			// no existing found: create a new one
-			config= temporary.doSave();
+			config = temporary.doSave();
 		}
 		DebugUITools.launch(config, mode);
 	}
 
 	private void performLaunch(IFolder folder, String mode) throws InterruptedException, CoreException {
-		String name= folder.getName();
-		String testName= name.substring(name.lastIndexOf(IPath.SEPARATOR) + 1);
-		
-		ILaunchConfigurationType configType= getLaunchManager().getLaunchConfigurationType(getLaunchConfigurationTypeId());
-		ILaunchConfigurationWorkingCopy wc= configType.newInstance(null, getLaunchManager().generateUniqueLaunchConfigurationNameFrom(testName));
-			
+		String name = folder.getName();
+		String testName = name.substring(name.lastIndexOf(IPath.SEPARATOR) + 1);
+
+		ILaunchConfigurationType configType = getLaunchManager()
+				.getLaunchConfigurationType(getLaunchConfigurationTypeId());
+		ILaunchConfigurationWorkingCopy wc = configType.newInstance(null,
+				getLaunchManager().generateUniqueLaunchConfigurationNameFrom(testName));
+
 		wc.setAttribute(ScriptLaunchConfigurationConstants.ATTR_PROJECT_NAME, folder.getProject().getName());
 		wc.setMappedResources(new IResource[] { folder });
 
-//		wc.setAttribute(ScriptLaunchConfigurationConstants.ATTR_TEST_NAME, EMPTY_STRING);
-//		wc.setAttribute(ScriptLaunchConfigurationConstants.ATTR_CONTAINER_PATH, folder.getFullPath().toPortableString());
-//		wc.setAttribute(ScriptLaunchConfigurationConstants.ATTR_TEST_ELEMENT_NAME, EMPTY_STRING);
+		// wc.setAttribute(ScriptLaunchConfigurationConstants.ATTR_TEST_NAME,
+		// EMPTY_STRING);
+		// wc.setAttribute(ScriptLaunchConfigurationConstants.ATTR_CONTAINER_PATH,
+		// folder.getFullPath().toPortableString());
+		// wc.setAttribute(ScriptLaunchConfigurationConstants.ATTR_TEST_ELEMENT_NAME,
+		// EMPTY_STRING);
 
-		ILaunchConfiguration config= findExistingLaunchConfiguration(wc, mode);
+		ILaunchConfiguration config = findExistingLaunchConfiguration(wc, mode);
 		if (config == null) {
 			// no existing found: create a new one
-			config= wc.doSave();
+			config = wc.doSave();
 		}
 		DebugUITools.launch(config, mode);
 	}
 
 	private IType chooseType(IType[] types, String mode) throws InterruptedException {
-		ElementListSelectionDialog dialog= new ElementListSelectionDialog(getShell(), new ModelElementLabelProvider(ModelElementLabelProvider.SHOW_POST_QUALIFIED));
+		ElementListSelectionDialog dialog = new ElementListSelectionDialog(getShell(),
+				new ModelElementLabelProvider(ModelElementLabelProvider.SHOW_POST_QUALIFIED));
 		dialog.setElements(types);
 		dialog.setTitle("Test Selection");
 		if (mode.equals(ILaunchManager.DEBUG_MODE)) {
@@ -186,18 +188,18 @@
 	}
 
 	/**
-	 * Show a selection dialog that allows the user to choose one of the
-	 * specified launch configurations. Return the chosen config, or
-	 * <code>null</code> if the user cancelled the dialog.
-	 * 
+	 * Show a selection dialog that allows the user to choose one of the specified
+	 * launch configurations. Return the chosen config, or <code>null</code> if the
+	 * user cancelled the dialog.
+	 *
 	 * @param configList
 	 * @param mode
 	 * @return ILaunchConfiguration
 	 * @throws InterruptedException
 	 */
 	private ILaunchConfiguration chooseConfiguration(List configList, String mode) throws InterruptedException {
-		IDebugModelPresentation labelProvider= DebugUITools.newDebugModelPresentation();
-		ElementListSelectionDialog dialog= new ElementListSelectionDialog(getShell(), labelProvider);
+		IDebugModelPresentation labelProvider = DebugUITools.newDebugModelPresentation();
+		ElementListSelectionDialog dialog = new ElementListSelectionDialog(getShell(), labelProvider);
 		dialog.setElements(configList.toArray());
 		dialog.setTitle("Select a Test Configuration");
 		if (mode.equals(ILaunchManager.DEBUG_MODE)) {
@@ -206,7 +208,7 @@
 			dialog.setMessage("Select configuration to run");
 		}
 		dialog.setMultipleSelection(false);
-		int result= dialog.open();
+		int result = dialog.open();
 		if (result == Window.OK) {
 			return (ILaunchConfiguration) dialog.getFirstResult();
 		}
@@ -214,53 +216,63 @@
 	}
 
 	/**
-	 * Returns the launch configuration type id of the launch configuration this shortcut will create. Clients can override this method to
-	 * return the id of their launch configuration.
-	 * 
-	 * @return the launch configuration type id of the launch configuration this shortcut will create
+	 * Returns the launch configuration type id of the launch configuration this
+	 * shortcut will create. Clients can override this method to return the id of
+	 * their launch configuration.
+	 *
+	 * @return the launch configuration type id of the launch configuration this
+	 *         shortcut will create
 	 */
 	protected String getLaunchConfigurationTypeId() {
 		return "org.eclipse.dltk.tcl.testing.launchConfig";
 	}
-	
+
 	/**
-	 * Creates a launch configuration working copy for the given element. The launch configuration type created will be of the type returned by {@link #getLaunchConfigurationTypeId}.
-	 * The element type can only be of type {@link IJavaProject}, {@link IPackageFragmentRoot}, {@link IPackageFragment}, {@link IType} or {@link IMethod}.
-	 *  
-	 * Clients can extend this method (should call super) to configure additional attributes on the launch configuration working copy.
-	 * 
-	 * @return a launch configuration working copy for the given element 
+	 * Creates a launch configuration working copy for the given element. The launch
+	 * configuration type created will be of the type returned by
+	 * {@link #getLaunchConfigurationTypeId}. The element type can only be of type
+	 * {@link IJavaProject}, {@link IPackageFragmentRoot}, {@link IPackageFragment},
+	 * {@link IType} or {@link IMethod}.
+	 *
+	 * Clients can extend this method (should call super) to configure additional
+	 * attributes on the launch configuration working copy.
+	 *
+	 * @return a launch configuration working copy for the given element
 	 */
 	protected ILaunchConfigurationWorkingCopy createLaunchConfiguration(IModelElement element) throws CoreException {
 		String testFileName;
 		String containerHandleId;
 		String testElementName;
 
-		String name= ScriptElementLabels.getDefault().getTextLabel(element, ScriptElementLabels.F_FULLY_QUALIFIED);
-		String testName= name.substring(name.lastIndexOf(IPath.SEPARATOR) + 1);
-		
+		String name = ScriptElementLabels.getDefault().getTextLabel(element, ScriptElementLabels.F_FULLY_QUALIFIED);
+		String testName = name.substring(name.lastIndexOf(IPath.SEPARATOR) + 1);
+
 		switch (element.getElementType()) {
-			case IModelElement.SOURCE_MODULE: {
-				containerHandleId= EMPTY_STRING;
-				testFileName= element.getResource().getProjectRelativePath().toPortableString();
-				testElementName= EMPTY_STRING;
-			}
-			break;
-			case IModelElement.METHOD: {
-				containerHandleId= EMPTY_STRING;
-				testFileName= element.getResource().getProjectRelativePath().toPortableString();
-				testElementName= element.getElementName();
-//				testName+= "[" + testElementName + "]";
-			}
-			break;
-			default:
-				throw new IllegalArgumentException("Invalid element type to create a launch configuration: " + element.getClass().getName()); //$NON-NLS-1$
+		case IModelElement.SOURCE_MODULE: {
+			containerHandleId = EMPTY_STRING;
+			testFileName = element.getResource().getProjectRelativePath().toPortableString();
+			testElementName = EMPTY_STRING;
 		}
-		
-		ILaunchConfigurationType configType= getLaunchManager().getLaunchConfigurationType(getLaunchConfigurationTypeId());
-		ILaunchConfigurationWorkingCopy wc= configType.newInstance(null, getLaunchManager().generateUniqueLaunchConfigurationNameFrom(testName));
-			
-		wc.setAttribute(ScriptLaunchConfigurationConstants.ATTR_PROJECT_NAME, element.getScriptProject().getElementName());
+			break;
+		case IModelElement.METHOD: {
+			containerHandleId = EMPTY_STRING;
+			testFileName = element.getResource().getProjectRelativePath().toPortableString();
+			testElementName = element.getElementName();
+			// testName+= "[" + testElementName + "]";
+		}
+			break;
+		default:
+			throw new IllegalArgumentException(
+					"Invalid element type to create a launch configuration: " + element.getClass().getName()); //$NON-NLS-1$
+		}
+
+		ILaunchConfigurationType configType = getLaunchManager()
+				.getLaunchConfigurationType(getLaunchConfigurationTypeId());
+		ILaunchConfigurationWorkingCopy wc = configType.newInstance(null,
+				getLaunchManager().generateUniqueLaunchConfigurationNameFrom(testName));
+
+		wc.setAttribute(ScriptLaunchConfigurationConstants.ATTR_PROJECT_NAME,
+				element.getScriptProject().getElementName());
 		// wc.setAttribute(ITestKind.LAUNCH_ATTR_TEST_KIND, "#");
 		wc.setAttribute(ScriptLaunchConfigurationConstants.ATTR_MAIN_SCRIPT_NAME, testFileName);
 		wc.setAttribute(ScriptLaunchConfigurationConstants.ATTR_SCRIPT_NATURE, TclNature.NATURE_ID);
@@ -269,50 +281,54 @@
 		if (resource != null) {
 			wc.setMappedResources(new IResource[] { resource });
 		}
-//		wc.setAttribute(XUnitLaunchConfigurationConstants.ATTR_TEST_NAME, testFileName);
-//		wc.setAttribute(ScriptLaunchConfigurationConstants.ATTR_CONTAINER_PATH, containerHandleId);
-//		wc.setAttribute(XUnitLaunchConfigurationConstants.ATTR_TEST_ELEMENT_NAME, testElementName);
-//		XUnitMigrationDelegate.mapResources(wc);
+		// wc.setAttribute(XUnitLaunchConfigurationConstants.ATTR_TEST_NAME,
+		// testFileName);
+		// wc.setAttribute(ScriptLaunchConfigurationConstants.ATTR_CONTAINER_PATH,
+		// containerHandleId);
+		// wc.setAttribute(XUnitLaunchConfigurationConstants.ATTR_TEST_ELEMENT_NAME,
+		// testElementName);
+		// XUnitMigrationDelegate.mapResources(wc);
 		ITclTestingEngine[] engines = TclTestingEngineManager.getEngines();
 		ISourceModule module = (ISourceModule) element.getAncestor(IModelElement.SOURCE_MODULE);
 		boolean engineFound = false;
 		for (int i = 0; i < engines.length; i++) {
-			if( engines[i].isValidModule(module)) {
+			if (engines[i].isValidModule(module)) {
 				wc.setAttribute(DLTKTestingConstants.ATTR_ENGINE_ID, engines[i].getId());
 				engineFound = true;
 				break;
 			}
 		}
-//		if( engineFound == false ) {
-//			return null;
-//		}
+		// if( engineFound == false ) {
+		// return null;
+		// }
 
 		return wc;
 	}
-	
+
 	/**
-	 * Returns the attribute names of the attributes that are compared when looking for an existing similar launch configuration.
-	 * Clients can override and replace to customize. 
-	 * 
+	 * Returns the attribute names of the attributes that are compared when looking
+	 * for an existing similar launch configuration. Clients can override and
+	 * replace to customize.
+	 *
 	 * @return the attribute names of the attributes that are compared
 	 */
 	protected String[] getAttributeNamesToCompare() {
-		return new String[] {
-			ScriptLaunchConfigurationConstants.ATTR_PROJECT_NAME,
-			ScriptLaunchConfigurationConstants.ATTR_MAIN_SCRIPT_NAME,
-//			IDLTKTestingConstants.ENGINE_ID_ATR,
-			ScriptLaunchConfigurationConstants.ATTR_SCRIPT_NATURE
-//			XUnitLaunchConfigurationConstants.ATTR_TEST_NAME,
-//			XUnitLaunchConfigurationConstants.ATTR_TEST_CONTAINER,
-//			XUnitLaunchConfigurationConstants.ATTR_TEST_ELEMENT_NAME
+		return new String[] { ScriptLaunchConfigurationConstants.ATTR_PROJECT_NAME,
+				ScriptLaunchConfigurationConstants.ATTR_MAIN_SCRIPT_NAME,
+				// IDLTKTestingConstants.ENGINE_ID_ATR,
+				ScriptLaunchConfigurationConstants.ATTR_SCRIPT_NATURE
+				// XUnitLaunchConfigurationConstants.ATTR_TEST_NAME,
+				// XUnitLaunchConfigurationConstants.ATTR_TEST_CONTAINER,
+				// XUnitLaunchConfigurationConstants.ATTR_TEST_ELEMENT_NAME
 		};
 	}
-	
-	private static boolean hasSameAttributes(ILaunchConfiguration config1, ILaunchConfiguration config2, String[] attributeToCompare) {
+
+	private static boolean hasSameAttributes(ILaunchConfiguration config1, ILaunchConfiguration config2,
+			String[] attributeToCompare) {
 		try {
-			for (int i= 0; i < attributeToCompare.length; i++) {
-				String val1= config1.getAttribute(attributeToCompare[i], EMPTY_STRING);
-				String val2= config2.getAttribute(attributeToCompare[i], EMPTY_STRING);
+			for (int i = 0; i < attributeToCompare.length; i++) {
+				String val1 = config1.getAttribute(attributeToCompare[i], EMPTY_STRING);
+				String val2 = config2.getAttribute(attributeToCompare[i], EMPTY_STRING);
 				if (!val1.equals(val2)) {
 					return false;
 				}
@@ -323,17 +339,17 @@
 		}
 		return false;
 	}
-	
 
-	private ILaunchConfiguration findExistingLaunchConfiguration(ILaunchConfigurationWorkingCopy temporary, String mode) throws InterruptedException, CoreException {
-		ILaunchConfigurationType configType= temporary.getType();
+	private ILaunchConfiguration findExistingLaunchConfiguration(ILaunchConfigurationWorkingCopy temporary, String mode)
+			throws InterruptedException, CoreException {
+		ILaunchConfigurationType configType = temporary.getType();
 
-		ILaunchConfiguration[] configs= getLaunchManager().getLaunchConfigurations(configType);
-		String[] attributeToCompare= getAttributeNamesToCompare();
-		
-		ArrayList candidateConfigs= new ArrayList(configs.length);
-		for (int i= 0; i < configs.length; i++) {
-			ILaunchConfiguration config= configs[i];
+		ILaunchConfiguration[] configs = getLaunchManager().getLaunchConfigurations(configType);
+		String[] attributeToCompare = getAttributeNamesToCompare();
+
+		ArrayList candidateConfigs = new ArrayList(configs.length);
+		for (int i = 0; i < configs.length; i++) {
+			ILaunchConfiguration config = configs[i];
 			if (hasSameAttributes(config, temporary, attributeToCompare)) {
 				candidateConfigs.add(config);
 			}
@@ -345,7 +361,7 @@
 		// Otherwise, if there is more than one config associated with the
 		// IType, prompt the
 		// user to choose one.
-		int candidateCount= candidateConfigs.size();
+		int candidateCount = candidateConfigs.size();
 		if (candidateCount == 0) {
 			return null;
 		} else if (candidateCount == 1) {
@@ -355,7 +371,7 @@
 			// cancelled the dialog, in which case this method returns null,
 			// since cancelling the dialog should also cancel launching
 			// anything.
-			ILaunchConfiguration config= chooseConfiguration(candidateConfigs, mode);
+			ILaunchConfiguration config = chooseConfiguration(candidateConfigs, mode);
 			if (config != null) {
 				return config;
 			}
diff --git a/tcl/plugins/org.eclipse.dltk.tcl.testing/src/org/eclipse/dltk/tcl/internal/testing/TclTestingMainLaunchConfigurationTab.java b/tcl/plugins/org.eclipse.dltk.tcl.testing/src/org/eclipse/dltk/tcl/internal/testing/TclTestingMainLaunchConfigurationTab.java
index 749bf9a..4ca9fac 100644
--- a/tcl/plugins/org.eclipse.dltk.tcl.testing/src/org/eclipse/dltk/tcl/internal/testing/TclTestingMainLaunchConfigurationTab.java
+++ b/tcl/plugins/org.eclipse.dltk.tcl.testing/src/org/eclipse/dltk/tcl/internal/testing/TclTestingMainLaunchConfigurationTab.java
@@ -13,8 +13,6 @@
 import org.eclipse.dltk.tcl.testing.ITclTestingEngine;
 import org.eclipse.dltk.testing.DLTKTestingConstants;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.graphics.Font;
@@ -25,8 +23,7 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Group;
 
-public class TclTestingMainLaunchConfigurationTab extends
-		TclMainLaunchConfigurationTab {
+public class TclTestingMainLaunchConfigurationTab extends TclMainLaunchConfigurationTab {
 
 	private Button detect;
 	private Combo engineType;
@@ -36,9 +33,9 @@
 		super(mode);
 	}
 
+	@Override
 	protected void doCreateControl(Composite composite) {
-		createMainModuleEditor(composite,
-				DLTKLaunchConfigurationsMessages.mainTab_mainModule);
+		createMainModuleEditor(composite, DLTKLaunchConfigurationsMessages.mainTab_mainModule);
 		createVerticalSpacer(composite, 1);
 		createTestEngineEditor(composite, "Tcl Testing engine");
 
@@ -54,16 +51,11 @@
 		layout.numColumns = 2;
 		mainGroup.setLayout(layout);
 		mainGroup.setFont(font);
-		engineType = new Combo(mainGroup, SWT.SINGLE | SWT.BORDER
-				| SWT.DROP_DOWN);
+		engineType = new Combo(mainGroup, SWT.SINGLE | SWT.BORDER | SWT.DROP_DOWN);
 		gd = new GridData(GridData.FILL_HORIZONTAL);
 		engineType.setLayoutData(gd);
 		engineType.setFont(font);
-		engineType.addModifyListener(new ModifyListener() {
-			public void modifyText(ModifyEvent e) {
-				updateLaunchConfigurationDialog();
-			}
-		});
+		engineType.addModifyListener(e -> updateLaunchConfigurationDialog());
 		detect = createPushButton(mainGroup, "Detect", null);
 
 		ITclTestingEngine[] engines = TclTestingEngineManager.getEngines();
@@ -73,6 +65,7 @@
 			nameToId.put(name, engines[i].getId());
 		}
 		detect.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				handleDetectButtonSelected();
 			}
@@ -93,6 +86,7 @@
 		}
 	}
 
+	@Override
 	protected boolean validate() {
 		return super.validate() && validateEngine();
 	}
@@ -103,8 +97,7 @@
 			ITclTestingEngine[] engines = TclTestingEngineManager.getEngines();
 			for (int i = 0; i < engines.length; i++) {
 				String selectedEngine = this.getEngineId();
-				if (engines[i].getId().equals(selectedEngine)
-						&& engines[i].isValidModule(module)) {
+				if (engines[i].getId().equals(selectedEngine) && engines[i].isValidModule(module)) {
 					return true;
 				}
 			}
@@ -113,6 +106,7 @@
 		return true;
 	}
 
+	@Override
 	protected void doPerformApply(ILaunchConfigurationWorkingCopy config) {
 		super.doPerformApply(config);
 		config.setAttribute(DLTKTestingConstants.ATTR_ENGINE_ID, getEngineId());
@@ -122,6 +116,7 @@
 		return (String) this.nameToId.get(this.engineType.getText());
 	}
 
+	@Override
 	protected void doInitializeForm(ILaunchConfiguration config) {
 		super.doInitializeForm(config);
 		ITclTestingEngine[] engines = TclTestingEngineManager.getEngines();
diff --git a/tcl/plugins/org.eclipse.dltk.tcl.testing/src/org/eclipse/dltk/tcl/internal/testing/TclTestingPropertyTester.java b/tcl/plugins/org.eclipse.dltk.tcl.testing/src/org/eclipse/dltk/tcl/internal/testing/TclTestingPropertyTester.java
index 2f31eb0..dba995f 100644
--- a/tcl/plugins/org.eclipse.dltk.tcl.testing/src/org/eclipse/dltk/tcl/internal/testing/TclTestingPropertyTester.java
+++ b/tcl/plugins/org.eclipse.dltk.tcl.testing/src/org/eclipse/dltk/tcl/internal/testing/TclTestingPropertyTester.java
@@ -1,10 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009 xored software, Inc.  
+ * Copyright (c) 2009, 2017 xored software, Inc. and others.
  *
  * 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  
+ * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
  *     xored software, Inc. - initial API and Implementation (Alex Panchenko)
@@ -25,11 +25,11 @@
 
 	private static final String PROPERTY_CAN_LAUNCH_AS_JUNIT_TEST = "canLaunchAsTest"; //$NON-NLS-1$
 
-	public boolean test(Object receiver, String property, Object[] args,
-			Object expectedValue) {
+	@Override
+	public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
 		if (!(receiver instanceof IAdaptable)) {
-			throw new IllegalArgumentException(
-					"Element must be of type 'IAdaptable', is " + receiver == null ? "null" : receiver.getClass().getName()); //$NON-NLS-1$ //$NON-NLS-2$
+			throw new IllegalArgumentException("Element must be of type 'IAdaptable', is " + receiver == null ? "null" //$NON-NLS-1$ //$NON-NLS-2$
+					: receiver.getClass().getName());
 		}
 		IModelElement element;
 		if (receiver instanceof IModelElement) {
@@ -40,11 +40,9 @@
 				return false;
 			}
 		} else { // is IAdaptable
-			element = (IModelElement) ((IAdaptable) receiver)
-					.getAdapter(IModelElement.class);
+			element = ((IAdaptable) receiver).getAdapter(IModelElement.class);
 			if (element == null) {
-				IResource resource = (IResource) ((IAdaptable) receiver)
-						.getAdapter(IResource.class);
+				IResource resource = ((IAdaptable) receiver).getAdapter(IResource.class);
 				element = DLTKCore.create(resource);
 				if (element == null) {
 					return false;
@@ -56,8 +54,7 @@
 		} else if (PROPERTY_CAN_LAUNCH_AS_JUNIT_TEST.equals(property)) {
 			return canLaunchAsTest(element);
 		}
-		throw new IllegalArgumentException(
-				"Unknown test property '" + property + "'"); //$NON-NLS-1$ //$NON-NLS-2$
+		throw new IllegalArgumentException("Unknown test property '" + property + "'"); //$NON-NLS-1$ //$NON-NLS-2$
 	}
 
 	private boolean canLaunchAsTest(IModelElement element) {
@@ -79,8 +76,7 @@
 	private boolean isTest(IModelElement element) {
 		if (element instanceof ISourceModule) {
 			final ISourceModule module = (ISourceModule) element;
-			for (ITclTestingEngine engine : TclTestingEngineManager
-					.getEngines()) {
+			for (ITclTestingEngine engine : TclTestingEngineManager.getEngines()) {
 				if (engine.isValidModule(module)) {
 					return true;
 				}
diff --git a/tcl/plugins/org.eclipse.dltk.tcl.testing/src/org/eclipse/dltk/tcl/internal/testing/TclTestingTabGroup.java b/tcl/plugins/org.eclipse.dltk.tcl.testing/src/org/eclipse/dltk/tcl/internal/testing/TclTestingTabGroup.java
index d716dbb..d9dc3a4 100644
--- a/tcl/plugins/org.eclipse.dltk.tcl.testing/src/org/eclipse/dltk/tcl/internal/testing/TclTestingTabGroup.java
+++ b/tcl/plugins/org.eclipse.dltk.tcl.testing/src/org/eclipse/dltk/tcl/internal/testing/TclTestingTabGroup.java
@@ -12,18 +12,15 @@
 
 public class TclTestingTabGroup extends AbstractLaunchConfigurationTabGroup {
 
+	@Override
 	public void createTabs(ILaunchConfigurationDialog dialog, String mode) {
 		TclTestingMainLaunchConfigurationTab main = new TclTestingMainLaunchConfigurationTab(mode);
-		ILaunchConfigurationTab[] tabs = new ILaunchConfigurationTab[] {
-				main,
-				new ScriptArgumentsTab(), new TclInterpreterTab(main),
-				new EnvironmentTab(), new CommonTab() {
-					public void performApply(
-							ILaunchConfigurationWorkingCopy configuration) {
+		ILaunchConfigurationTab[] tabs = new ILaunchConfigurationTab[] { main, new ScriptArgumentsTab(),
+				new TclInterpreterTab(main), new EnvironmentTab(), new CommonTab() {
+					@Override
+					public void performApply(ILaunchConfigurationWorkingCopy configuration) {
 						super.performApply(configuration);
-						configuration.setAttribute(
-								IDebugUIConstants.ATTR_CAPTURE_IN_CONSOLE,
-								(String) null);
+						configuration.setAttribute(IDebugUIConstants.ATTR_CAPTURE_IN_CONSOLE, (String) null);
 					}
 				} };
 		setTabs(tabs);
