diff --git a/org.eclipse.jdt.junit.core/plugin.properties b/org.eclipse.jdt.junit.core/plugin.properties
deleted file mode 100644
index 1575a2f..0000000
--- a/org.eclipse.jdt.junit.core/plugin.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-pluginName=Java Development Tools JUnit support
-providerName=Eclipse.org
-
-View.label= JUnit
-Launch.label= JUnit
-PreferencePage.label= JUnit
-
-TestWizard.description= Create a JUnit Test Case
-SuiteWizard.description= Create a JUnit Test Suite
-UpdateSuiteAction.label= Recreate Test Suite...
-UpdateSuiteAction.tooltip= Recreate JUnit TestSuite with new test classes
-Task.name= JUnit Task
-WizardCategory.name= JUnit
-TestCaseWizard.name= TestCase
-TestSuiteWizard.name= TestSuite
-
-JUnitShortcut.label=JUnit Test
diff --git a/org.eclipse.jdt.junit.core/plugin.xml b/org.eclipse.jdt.junit.core/plugin.xml
deleted file mode 100644
index 383b154..0000000
--- a/org.eclipse.jdt.junit.core/plugin.xml
+++ /dev/null
@@ -1,161 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<plugin
-	id="org.eclipse.jdt.junit"
-	name="%pluginName"
-	version="2.1.0"
-	class="org.eclipse.jdt.internal.junit.ui.JUnitPlugin"
-	provider-name="%providerName">
-
-	<requires>
-		<import plugin="org.eclipse.ui"/>
-		<import plugin="org.eclipse.core.resources"/>
-		<import plugin="org.eclipse.core.boot"/>
-		<import plugin="org.eclipse.debug.core"/>
-		<import plugin="org.eclipse.debug.ui"/>
-		<import plugin="org.eclipse.jdt.core"/>
-		<import plugin="org.eclipse.jdt.ui"/>
-		<import plugin="org.eclipse.jdt.debug"/>
-		<import plugin="org.eclipse.swt"/>
-		<import plugin="org.eclipse.core.runtime"/>
-		<import plugin="org.eclipse.jdt.launching"/>
-		<import plugin="org.eclipse.jdt.debug.ui"/>
-		<import plugin="org.junit"/>     
-	</requires>
-	
-	<runtime>
-		<library name="junitsupport.jar">
-			<export name="*"/>
-		</library>
-	</runtime>
-
-	<extension
-		point="org.eclipse.ui.views">
-		<view
-			name="%View.label"
-			icon="icons/full/cview16/junit.gif"
-			category="org.eclipse.jdt.ui.java"
-			class="org.eclipse.jdt.internal.junit.ui.TestRunnerViewPart"
-			id="org.eclipse.jdt.junit.ResultView"
-			fastViewWidthRatio="0.40">	
-		</view>
-	</extension>
-	
-    <extension 
-    	point="org.eclipse.ui.perspectiveExtensions">
-        <perspectiveExtension 
-           targetID="org.eclipse.jdt.ui.JavaPerspective"> 
-           <view id="org.eclipse.jdt.junit.ResultView" 
-                relative="org.eclipse.jdt.ui.PackageExplorer"
-                visible="false" 
-                relationship="stack"/> 
-        </perspectiveExtension> 
-    </extension> 
-
-	<extension
-		point="org.eclipse.ui.preferencePages">
-		<page name="%PreferencePage.label"
-			id="org.eclipse.jdt.junit.preferences"
-			class="org.eclipse.jdt.internal.junit.ui.JUnitPreferencePage"
-			category= "org.eclipse.jdt.ui.preferences.JavaBasePreferencePage"> 
-		</page>
-	</extension>
-	
-	<extension point = "org.eclipse.debug.core.launchConfigurationTypes">
-   		<launchConfigurationType
-   	   		id="org.eclipse.jdt.junit.launchconfig"
-	   		name="%Launch.label"
-	   		delegate="org.eclipse.jdt.internal.junit.launcher.JUnitLaunchConfiguration"
-	   		modes= "run, debug">
-	   <fileExtension
-	   		extension="java"
-	   		default="false"/>
-	   <fileExtension
-	   		extension="class"
-	   		default="false"/>
-   		</launchConfigurationType>
-	</extension>
-	
-	<extension point = "org.eclipse.debug.core.launchConfigurationComparators">
-		<launchConfigurationComparator
-			id = "org.eclipse.jdt.junit.containerComparator"
-			class = "org.eclipse.jdt.internal.junit.launcher.ContainerComparator"
-			attribute = "org.eclipse.jdt.junit.CONTAINER"/>
-	</extension>
-	
-	<extension point="org.eclipse.debug.ui.launchConfigurationTypeImages">
-		<launchConfigurationTypeImage
-			id="org.eclipse.jdt.junit.launchimage"
-			configTypeID="org.eclipse.jdt.junit.launchconfig"
-			icon="icons/full/obj16/julaunch.gif">
-		</launchConfigurationTypeImage>	
-	</extension>
-		
-	<extension point = "org.eclipse.debug.ui.launchConfigurationTabGroups">
-		<launchConfigurationTabGroup
-			id="org.eclipse.jdt.junit.launchConfigurationTabGroup.junit"
-			type ="org.eclipse.jdt.junit.launchconfig"
-			class="org.eclipse.jdt.internal.junit.launcher.JUnitTabGroup">
-		</launchConfigurationTabGroup>
-	</extension>
-
-	<extension point="org.eclipse.ui.newWizards">
-		<category
-		   id = "org.eclipse.jdt.junit"
-		   parentCategory="org.eclipse.jdt.ui.java"
-		   name="%WizardCategory.name">
-		</category>
-		<wizard 
-			id="org.eclipse.jdt.junit.wizards.NewTestCaseCreationWizard"
-			name="%TestCaseWizard.name"
-			class="org.eclipse.jdt.internal.junit.wizards.NewTestCaseCreationWizard"
-			category="org.eclipse.jdt.ui.java/org.eclipse.jdt.junit"
-			icon="icons/full/ctool16/new_testcase.gif">
-			<description>%TestWizard.description</description>
-	    </wizard>
-		<wizard 
-			id="org.eclipse.jdt.junit.wizards.NewTestSuiteCreationWizard"
-			name="%TestSuiteWizard.name"
-			class="org.eclipse.jdt.internal.junit.wizards.NewTestSuiteCreationWizard"
-			category="org.eclipse.jdt.ui.java/org.eclipse.jdt.junit"
-			icon="icons/full/ctool16/new_testsuite.gif">
-			<description>%SuiteWizard.description</description>
-	    </wizard>
-	</extension>
-	
-	<extension point="org.eclipse.ui.popupMenus">
-		<objectContribution
-			id="org.eclipse.jdt.junit.wizards.UpdateTestSuite"
-			objectClass="org.eclipse.jdt.core.ICompilationUnit"
-			nameFilter="AllTests.java">
-			<action
-				id="updateTestSuite"
-				label="%UpdateSuiteAction.label"
-				tooltip="%UpdateSuiteAction.tooltip"
-				enablesFor="1"
-				class="org.eclipse.jdt.internal.junit.wizards.UpdateTestSuite">
-			</action>
-		</objectContribution>
-	
-	</extension>
-	
-	<extension id="junit_task" point="org.eclipse.core.resources.markers" name="%Task.name">
-		<super type="org.eclipse.core.resources.taskmarker"/>
-		<persistent value="true"/>
-	</extension>
-	
-	<extension point = "org.eclipse.debug.ui.launchShortcuts">
-		<shortcut
-			id="org.eclipse.jdt.junit.junitShortcut"
-			class="org.eclipse.jdt.internal.junit.launcher.JUnitLaunchShortcut"
-			label="%JUnitShortcut.label"
-			icon="icons/full/obj16/julaunch.gif"
-			modes="run, debug">
-			<perspective id="org.eclipse.jdt.ui.JavaPerspective"/>
-			<perspective id="org.eclipse.jdt.ui.JavaHierarchyPerspective"/>
-			<perspective id="org.eclipse.jdt.ui.JavaBrowsingPerspective"/>
-			<perspective id="org.eclipse.debug.ui.DebugPerspective"/>
-		</shortcut>
-	</extension>
-
-</plugin>
\ No newline at end of file
diff --git a/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/JUnitCorePlugin.java b/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/JUnitCorePlugin.java
deleted file mode 100644
index 0ab84cf..0000000
--- a/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/JUnitCorePlugin.java
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.ui;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.AbstractSet;
-import java.util.HashSet;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPluginDescriptor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.debug.core.DebugPlugin;
-import org.eclipse.debug.core.ILaunch;
-import org.eclipse.debug.core.ILaunchConfiguration;
-import org.eclipse.debug.core.ILaunchListener;
-import org.eclipse.debug.core.ILaunchManager;
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.internal.junit.launcher.JUnitBaseLaunchConfiguration;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-
-/**
- * The plug-in runtime class for the JUnit plug-in.
- */
-public class JUnitPlugin extends AbstractUIPlugin implements ILaunchListener {	
-	/**
-	 * The single instance of this plug-in runtime class.
-	 */
-	private static JUnitPlugin fgPlugin= null;
-	
-	public static final String PLUGIN_ID = "org.eclipse.jdt.junit" ; //$NON-NLS-1$
-
-	public final static String TEST_SUPERCLASS_NAME= "junit.framework.TestCase"; //$NON-NLS-1$
-	public final static String TEST_INTERFACE_NAME= "junit.framework.Test"; //$NON-NLS-1$
-
-	private static URL fgIconBaseURL;
-	
-	/**
-	 * Use to track new launches. We need to do this
-	 * so that we only attach a TestRunner once to a launch.
-	 * Once a test runner is connected it is removed from the set.
-	 */
-	private AbstractSet fTrackedLaunches= new HashSet(20);
-	
-	public JUnitPlugin(IPluginDescriptor desc) {
-		super(desc);
-		fgPlugin= this;
-		String pathSuffix= "icons/full/"; //$NON-NLS-1$
-		try {
-			fgIconBaseURL= new URL(getDescriptor().getInstallURL(), pathSuffix);
-		} catch (MalformedURLException e) {
-			// do nothing
-		}
-	}
-		
-	public static JUnitPlugin getDefault() {
-		return fgPlugin;
-	}
-	
-	public static Shell getActiveWorkbenchShell() {
-		IWorkbenchWindow workBenchWindow= getActiveWorkbenchWindow();
-		if (workBenchWindow == null) 
-			return null;
-		return workBenchWindow.getShell();
-	}
-	
-	/**
-	 * Returns the active workbench window
-	 * 
-	 * @return the active workbench window
-	 */
-	public static IWorkbenchWindow getActiveWorkbenchWindow() {
-		if (fgPlugin == null) 
-			return null;
-		IWorkbench workBench= fgPlugin.getWorkbench();
-		if (workBench == null) 
-			return null;
-		return workBench.getActiveWorkbenchWindow();
-	}	
-	
-	public IWorkbenchPage getActivePage() {
-		return getActiveWorkbenchWindow().getActivePage();
-	}
-
-	public static String getPluginId() {
-		return getDefault().getDescriptor().getUniqueIdentifier();
-	}
-	
-	/*
-	 * @see AbstractUIPlugin#initializeDefaultPreferences
-	 */
-	protected void initializeDefaultPreferences(IPreferenceStore store) {
-		super.initializeDefaultPreferences(store);	
-		JUnitPreferencePage.initializeDefaults(store);
-	}
-	
-	public static void log(Throwable e) {
-		log(new Status(IStatus.ERROR, getPluginId(), IStatus.ERROR, "Error", e));  //$NON-NLS-1$
-	}
-
-	public static void log(IStatus status) {
-		getDefault().getLog().log(status);
-	}
-	
-	public static URL makeIconFileURL(String name) throws MalformedURLException {
-		if (JUnitPlugin.fgIconBaseURL == null)
-			throw new MalformedURLException();
-		return new URL(JUnitPlugin.fgIconBaseURL, name);
-	}
-
-	static ImageDescriptor getImageDescriptor(String relativePath) {
-		try {
-			return ImageDescriptor.createFromURL(makeIconFileURL(relativePath));
-		} catch (MalformedURLException e) {
-			// should not happen
-			return ImageDescriptor.getMissingImageDescriptor();
-		}
-	}
-
-	/*
-	 * @see ILaunchListener#launchRemoved(ILaunch)
-	 */
-	public void launchRemoved(ILaunch launch) {
-		fTrackedLaunches.remove(launch);
-	}
-
-	/*
-	 * @see ILaunchListener#launchAdded(ILaunch)
-	 */
-	public void launchAdded(ILaunch launch) {
-		fTrackedLaunches.add(launch);
-	}
-
-	public void connectTestRunner(ILaunch launch, IType launchedType, int port) {
-		IWorkbench workbench= getWorkbench();
-		if (workbench == null)
-			return;
-			
-		IWorkbenchWindow window= getWorkbench().getActiveWorkbenchWindow();
-		IWorkbenchPage page= window.getActivePage();
-		TestRunnerViewPart testRunner= null;
-		if (page != null) {
-			try { // show the result view if it isn't shown yet
-				testRunner= (TestRunnerViewPart)page.findView(TestRunnerViewPart.NAME);
-				if(testRunner == null) {
-					IWorkbenchPart activePart= page.getActivePart();
-					testRunner= (TestRunnerViewPart)page.showView(TestRunnerViewPart.NAME);
-					//restore focus stolen by the creation of the result view
-					page.activate(activePart);
-				} 
-			} catch (PartInitException pie) {
-				log(pie);
-			}
-		}
-		if (testRunner != null)
-			testRunner.startTestRunListening(launchedType, port, launch);	
-	}
-
-	/*
-	 * @see ILaunchListener#launchChanged(ILaunch)
-	 */
-	public void launchChanged(final ILaunch launch) {
-		if (!fTrackedLaunches.contains(launch))
-			return;
-			
-		ILaunchConfiguration config= launch.getLaunchConfiguration();
-		IType launchedType= null;
-		int port= -1;
-		if (config != null) {
-			// test whether the launch defines the JUnit attributes
-			String portStr= launch.getAttribute(JUnitBaseLaunchConfiguration.PORT_ATTR);
-			String typeStr= launch.getAttribute(JUnitBaseLaunchConfiguration.TESTTYPE_ATTR);
-			if (portStr != null && typeStr != null) {
-				port= Integer.parseInt(portStr);
-				IJavaElement element= JavaCore.create(typeStr);
-				if (element instanceof IType) 
-					launchedType= (IType)element; 
-			}
-		}	
-		if (launchedType != null) {
-			fTrackedLaunches.remove(launch);
-			final int finalPort= port;
-			final IType finalType= launchedType;
-			getDisplay().asyncExec(new Runnable() {
-				public void run() {
-					connectTestRunner(launch, finalType, finalPort);
-				}
-			});		
-		}	
-	}
-	
-	/*
-	 * @see Plugin#startup()
-	 */
-	public void startup() throws CoreException {
-		super.startup();
-		ILaunchManager launchManager= DebugPlugin.getDefault().getLaunchManager();
-		launchManager.addLaunchListener(this);	
-	}
-
-	/*
-	 * @see Plugin#shutdown()
-	 */
-	public void shutdown() throws CoreException {
-		super.shutdown();
-		ILaunchManager launchManager= DebugPlugin.getDefault().getLaunchManager();
-		launchManager.removeLaunchListener(this);
-	}
-
-	public static Display getDisplay() {
-		Shell shell= getActiveWorkbenchShell();
-		if (shell != null) {
-			return shell.getDisplay();
-		}
-		Display display= Display.getCurrent();
-		if (display == null) {
-			display= Display.getDefault();
-		}
-		return display;
-	}		
-	
-}
diff --git a/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/JUnitMessages.java b/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/JUnitMessages.java
deleted file mode 100644
index a2cb6d1..0000000
--- a/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/JUnitMessages.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.eclipse.jdt.internal.junit.ui;
-
-import java.text.MessageFormat;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-public class JUnitMessages {
-
-	private static final String BUNDLE_NAME= "org.eclipse.jdt.internal.junit.ui.JUnitMessages"; //$NON-NLS-1$
-
-	private static final ResourceBundle RESOURCE_BUNDLE= ResourceBundle.getBundle(BUNDLE_NAME);
-
-	private JUnitMessages() {
-	}
-
-	/**
-	 * Gets a string from the resource bundle and formats it with the argument
-	 * 
-	 * @param key	the string used to get the bundle value, must not be null
-	 */
-	public static String getFormattedString(String key, Object arg) {
-		return MessageFormat.format(getString(key), new Object[] { arg });
-	}
-
-	/**
-	 * Gets a string from the resource bundle and formats it with arguments
-	 */	
-	public static String getFormattedString(String key, Object[] args) {
-		return MessageFormat.format(getString(key), args);
-	}
-
-	public static String getString(String key) {
-		try {
-			return RESOURCE_BUNDLE.getString(key);
-		} catch (MissingResourceException e) {
-			return '!' + key + '!';
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/JUnitMessages.properties b/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/JUnitMessages.properties
deleted file mode 100644
index 4aa2c20..0000000
--- a/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/JUnitMessages.properties
+++ /dev/null
@@ -1,91 +0,0 @@
-CopyTrace.action.label=Copy Trace
-
-CounterPanel.label.runs=Runs: 
-CounterPanel.label.errors=Errors: 
-CounterPanel.label.failures=Failures: 
-CounterPanel.runcount= {0}/{1}
-
-EnableStackFilterAction.action.label=Filter
-EnableStackFilterAction.action.description=Filter the stack trace
-EnableStackFilterAction.action.tooltip=Filter Stack Trace
-
-FailureRunView.tab.tooltip=Failures and Errors
-FailureRunView.tab.title=Failures
-
-FilterPatternsDialog.message.notempty=Filter must not be empty
-
-HierarchyRunView.tab.tooltip=Test Hierarchy
-HierarchyRunView.tab.title=Hierarchy
-
-JUnitPlugin.error.cannotshow=Could not show JUnit Result View
-
-JUnitPreferencePage.addbutton.label=&Add...
-JUnitPreferencePage.removebutton.label=&Remove
-JUnitPreferencePage.filter.label=&Stack filter patterns:
-JUnitPreferencePage.adddialog.title=Add Stack Filter Pattern
-JUnitPreferencePage.addialog.prompt=Enter Filter Pattern:
-JUnitPreferencePage.showcheck.label=Show the JUnit results &view only when an error or failure occurs
-
-OpenEditorAction.action.label=&Goto File
-OpenEditorAction.error.cannotopen.title=Cannot Open Editor
-OpenEditorAction.error.cannotopen.message=Test class not found in project
-OpenEditorAction.error.dialog.title=Error
-OpenEditorAction.error.dialog.message=Could not open editor
-OpenEditorAction.message.cannotopen=Could not open editor
-
-RerunAction.action.label=&Rerun
-
-TestRunnerViewPart.stopaction.text=Stop JUnit Test
-TestRunnerViewPart.stopaction.tooltip=Stop JUnit Test Run
-TestRunnerViewPart.rerunaction.label=Rerun last Test
-TestRunnerViewPart.rerunaction.tooltip=Rerun last test
-TestRunnerViewPart.error.cannotrerun=Could not rerun test
-TestRunnerViewPart.message.terminated=Terminated
-TestRunnerViewPart.message.launching=Launching TestRunner
-TestRunnerViewPart.cannotrerun.title=Rerun Test
-TestRunnerViewPart.cannotrerurn.message=Can only rerun tests when they are launched under the debugger\nand when the \'keep JUnit running\' is set in the launch configuration.
-TestRunnerViewPart.message.cannotshow=Could not show JUnit Result View
-TestRunnerViewPart.label.failure=Failure Trace
-TestRunnerViewPart.message.finish= JUnit test run finished: {0} seconds
-TestRunnerViewPart.message.stopped= JUnit test run stopped after: {0} seconds
-TestRunnerViewPart.message.started= JUnit test run started: {0}
-TestRunnerViewPart.message.failure= {0}({1}) had a failure
-TestRunnerViewPart.message.error= {0}({1}) had an error
-TestRunnerViewPart.message.success= {0}({1}) was successful
-TestRunnerViewPart.title= JUnit ({0})
-
-
-JUnitBaseLaunchConfiguration.error.invalidproject=Invalid project specified
-JUnitBaseLaunchConfiguration.error.novmrunner=Internal error: JRE {0} does not specify a VM Runner
-JUnitMainTab.label.project=&Project:
-JUnitMainTab.label.browse=&Browse...
-JUnitMainTab.label.test=T&est class:
-JUnitMainTab.label.search=&Search...
-JUnitMainTab.label.keeprunning=&Keep JUnit running after a test run when debugging
-JUnitMainTab.testdialog.title=Test Selection
-JUnitMainTab.testdialog.message=Choose a test case or test suite:
-JUnitMainTab.projectdialog.title=Project Selection
-JUnitMainTab.projectdialog.message=Choose a project to constrain the search for main types:
-JUnitMainTab.error.projectnotexists=Project does not exist
-JUnitMainTab.error.testnotdefined=Test not specified
-JUnitMainTab.tab.label=Test
-
-RemoteTestRunner.error.classnotfound= Class not found {0}
-RemoteTestRunner.error.exception= "Error:  " {0}
-RemoteTestRunner.error.invoke= Failed to invoke suite(): {0}
-RemoteTestRunner.error.load= Could not reload Test: {0}
-RemoteTestRunner.error.connect= Could not connect to: {0} : {1}			
-
-RemoteTestRunner.error.classnamemissing=Error: parameter '-classNames' or '-className' not specified
-RemoteTestRunner.error.portmissing=Error: parameter '-port' not specified
-
-TestSearchEngine.message.searching=Searching suites
-LaunchTestAction.dialog.title=JUnit Launch
-LaunchTestAction.message.notests=No JUnit tests found.
-LaunchTestAction.dialog.title2=Test Selection
-LaunchTestAction.message.selectTestToRun=Select Test to debug
-LaunchTestAction.message.selectTestToDebug=Select Test to run
-LaunchTestAction.message.launchFailed=JUnit Launch Failed
-LaunchTestAction.message.selectConfiguration=Select a Test Configuration
-LaunchTestAction.message.selectDebugConfiguration=Select JUnit configuration to debug
-LaunchTestAction.message.selectRunConfiguration=Select JUnit configuration to run
diff --git a/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/launcher/ContainerComparator.java b/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/launcher/ContainerComparator.java
deleted file mode 100644
index bc58cf0..0000000
--- a/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/launcher/ContainerComparator.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.eclipse.jdt.internal.junit.launcher;
-
-import java.util.Comparator;
-
-public class ContainerComparator implements Comparator {
-
-    public int compare(Object o1, Object o2) {
-		String container1= (String)o1;
-		String container2= (String)o2;
-		if (container1 == null)
-			container1= "";
-		if (container2 == null)
-			container2= "";
-		return container1.compareTo(container2);
-    }
-}
diff --git a/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/util/TestSearchEngine.java b/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/util/TestSearchEngine.java
deleted file mode 100644
index 15fb676..0000000
--- a/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/util/TestSearchEngine.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.util;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.SubProgressMonitor;
-
-import org.eclipse.jface.operation.IRunnableContext;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-
-import org.eclipse.ui.IFileEditorInput;
-
-import org.eclipse.jdt.core.Flags;
-import org.eclipse.jdt.core.IClassFile;
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IMethod;
-import org.eclipse.jdt.core.ISourceReference;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.ITypeHierarchy;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.search.IJavaSearchConstants;
-import org.eclipse.jdt.core.search.IJavaSearchResultCollector;
-import org.eclipse.jdt.core.search.IJavaSearchScope;
-import org.eclipse.jdt.core.search.ISearchPattern;
-import org.eclipse.jdt.core.search.SearchEngine;
-
-import org.eclipse.jdt.internal.junit.ui.JUnitMessages;
-import org.eclipse.jdt.internal.junit.ui.JUnitPlugin;
-
-/**
- * Custom Search engine for suite() methods
- */
-public class TestSearchEngine {
-
-	private class JUnitSearchResultCollector implements IJavaSearchResultCollector {
-		IProgressMonitor fProgressMonitor;
-		List fList;
-		Set fFailed= new HashSet();
-		Set fMatches= new HashSet();
-		
-		public JUnitSearchResultCollector(List list, IProgressMonitor progressMonitor) {
-			fProgressMonitor= progressMonitor;
-			fList= list;
-		}
-		
-		public void accept(IResource resource, int start, int end, IJavaElement enclosingElement, int accuracy) throws JavaModelException{
-			if (!(enclosingElement instanceof IMethod)) 
-				return;
-			
-			IMethod method= (IMethod)enclosingElement;		
-			
-			IType declaringType= method.getDeclaringType();
-			if (fMatches.contains(declaringType) || fFailed.contains(declaringType))
-				return;
-			if (!hasSuiteMethod(declaringType) && !isTestType(declaringType)) {
-				fFailed.add(declaringType);
-				return;
-			}
-			fMatches.add(declaringType);
-		}
-		
-		public IProgressMonitor getProgressMonitor() {
-			return fProgressMonitor;
-		}
-				
-		public void aboutToStart() {
-		}
-		
-		public void done() {
-			fList.addAll(fMatches);
-		}
-	}
-	
-	private List searchMethod(IProgressMonitor pm, final IJavaSearchScope scope) throws JavaModelException {
-		final List typesFound= new ArrayList(200);	
-		searchMethod(typesFound, scope, pm);
-		return typesFound;	
-	}
-
-	private List searchMethod(final List v, IJavaSearchScope scope, final IProgressMonitor progressMonitor) throws JavaModelException {		
-		IJavaSearchResultCollector collector= new JUnitSearchResultCollector(v, progressMonitor);
-		ISearchPattern suitePattern= SearchEngine.createSearchPattern("suite() Test", IJavaSearchConstants.METHOD, IJavaSearchConstants.DECLARATIONS, true); //$NON-NLS-1$
-		ISearchPattern testPattern= SearchEngine.createSearchPattern("test*() void", IJavaSearchConstants.METHOD , IJavaSearchConstants.DECLARATIONS, true); //$NON-NLS-1$
-		SearchEngine engine= new SearchEngine();
-		engine.search(ResourcesPlugin.getWorkspace(), SearchEngine.createOrSearchPattern(suitePattern, testPattern), scope, collector); 
-		return v;
-	}
-	
-	public static IType[] findTests(IRunnableContext context, final Object[] elements) throws InvocationTargetException, InterruptedException{
-		final Set result= new HashSet();
-	
-		if (elements.length > 0) {
-			IRunnableWithProgress runnable= new IRunnableWithProgress() {
-				public void run(IProgressMonitor pm) throws InterruptedException {
-					doFindTests(elements, result, pm);
-				}
-			};
-			context.run(true, true, runnable);			
-		}
-		return (IType[]) result.toArray(new IType[result.size()]) ;
-	}
-
-	public static void doFindTests(Object[] elements, Set result, IProgressMonitor pm) throws InterruptedException {
-		int nElements= elements.length;
-		pm.beginTask(JUnitMessages.getString("TestSearchEngine.message.searching"), nElements);  //$NON-NLS-1$
-		try {
-			for (int i= 0; i < nElements; i++) {
-				try {
-					collectTypes(elements[i], new SubProgressMonitor(pm, 1), result);
-				} catch (JavaModelException e) {
-					JUnitPlugin.log(e.getStatus());
-				}
-				if (pm.isCanceled()) {
-					throw new InterruptedException();
-				}
-			}
-		} finally {
-			pm.done();
-		}
-	}
-
-	private static void collectTypes(Object element, IProgressMonitor pm, Set result) throws JavaModelException/*, InvocationTargetException*/ {
-		element= computeScope(element);
-		while((element instanceof IJavaElement) && !(element instanceof ICompilationUnit) && (element instanceof ISourceReference)) {
-			if(element instanceof IType) {
-				if (hasSuiteMethod((IType)element) || isTestType((IType)element)) {
-					result.add(element);
-					return;
-				}
-			}
-			element= ((IJavaElement)element).getParent();
-		}
-		if (element instanceof ICompilationUnit) {
-			ICompilationUnit cu= (ICompilationUnit)element;
-			IType[] types= cu.getAllTypes();
-			for (int i= 0; i < types.length; i++) {
-				if (hasSuiteMethod(types[i])  || isTestType(types[i]))
-					result.add(types[i]);
-			}
-		} 
-		else if (element instanceof IJavaElement) {
-			List found= searchSuiteMethods(pm, (IJavaElement)element);
-			result.addAll(found);
-		}
-	}
-
-	private static Object computeScope(Object element) throws JavaModelException {
-		if (element instanceof IFileEditorInput)
-			element= ((IFileEditorInput)element).getFile();
-		if (element instanceof IResource)
-			element= JavaCore.create((IResource)element);
-		if (element instanceof IClassFile) {
-			IClassFile cf= (IClassFile)element;
-			element= cf.getType();
-		}
-		return element;
-	}
-	
-	private static List searchSuiteMethods(IProgressMonitor pm, IJavaElement element) throws JavaModelException {	
-		IJavaSearchScope scope= SearchEngine.createJavaSearchScope(new IJavaElement[] { element });
-		TestSearchEngine searchEngine= new TestSearchEngine(); 
-		return searchEngine.searchMethod(pm, scope);
-	}
-		
-	private static boolean hasSuiteMethod(IType type) throws JavaModelException {
-		IMethod method= type.getMethod("suite", new String[0]); //$NON-NLS-1$
-		if (method == null || !method.exists()) 
-			return false;
-		
-		if (!Flags.isStatic(method.getFlags()) ||	
-			!Flags.isPublic(method.getFlags()) ||			
-			!Flags.isPublic(method.getDeclaringType().getFlags())) { 
-			return false;
-		}
-		return true;
-	}
-	
-	private static boolean isTestType(IType type) throws JavaModelException {
-		if (Flags.isAbstract(type.getFlags())) 
-			return false;
-		if (!Flags.isPublic(type.getFlags())) 
-			return false;
-		
-		IType[] interfaces= type.newSupertypeHierarchy(null).getAllSuperInterfaces(type);
-		for (int i= 0; i < interfaces.length; i++)
-			if(interfaces[i].getFullyQualifiedName().equals(JUnitPlugin.TEST_INTERFACE_NAME))
-				return true;
-		return false;
-	}
-
-	public static boolean isTestImplementor(IType type) throws JavaModelException {
-		ITypeHierarchy typeHier= type.newSupertypeHierarchy(null);
-		IType[] superInterfaces= typeHier.getAllInterfaces();
-		for (int i= 0; i < superInterfaces.length; i++) {
-			if (superInterfaces[i].getFullyQualifiedName().equals(JUnitPlugin.TEST_INTERFACE_NAME))
-				return true;
-		}
-		return false;
-	}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.junit/.classpath b/org.eclipse.jdt.junit/.classpath
deleted file mode 100644
index e7d2e7f..0000000
--- a/org.eclipse.jdt.junit/.classpath
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-    <classpathentry kind="src" path="src"/>
-    <classpathentry kind="src" path="/org.eclipse.core.boot"/>
-    <classpathentry kind="src" path="/org.eclipse.core.runtime"/>
-    <classpathentry kind="src" path="/org.eclipse.ui"/>
-    <classpathentry kind="src" path="/org.eclipse.core.resources"/>
-    <classpathentry kind="src" path="/org.eclipse.debug.core"/>
-    <classpathentry kind="src" path="/org.eclipse.debug.ui"/>
-    <classpathentry kind="src" path="/org.eclipse.jdt.core"/>
-    <classpathentry kind="src" path="/org.eclipse.jdt.ui"/>
-    <classpathentry kind="src" path="/org.eclipse.jdt.debug"/>
-    <classpathentry kind="src" path="/org.eclipse.swt"/>
-    <classpathentry kind="src" path="/org.eclipse.jdt.launching"/>
-    <classpathentry kind="src" path="/org.apache.xerces"/>
-    <classpathentry kind="src" path="/org.junit"/>
-    <classpathentry kind="var" path="JRE_LIB" rootpath="JRE_SRCROOT" sourcepath="JRE_SRC"/>
-    <classpathentry kind="src" path="/org.eclipse.jdt.debug.ui"/>
-    <classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/org.eclipse.jdt.junit/.cvsignore b/org.eclipse.jdt.junit/.cvsignore
deleted file mode 100644
index 092357e..0000000
--- a/org.eclipse.jdt.junit/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-bin
diff --git a/org.eclipse.jdt.junit/.project b/org.eclipse.jdt.junit/.project
deleted file mode 100644
index 56f06e4..0000000
--- a/org.eclipse.jdt.junit/.project
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jdt.junit</name>
-	<comment></comment>
-	<projects>
-		<project>org.apache.xerces</project>
-		<project>org.eclipse.core.boot</project>
-		<project>org.eclipse.core.resources</project>
-		<project>org.eclipse.core.runtime</project>
-		<project>org.eclipse.debug.core</project>
-		<project>org.eclipse.debug.ui</project>
-		<project>org.eclipse.jdt.core</project>
-		<project>org.eclipse.jdt.debug</project>
-		<project>org.eclipse.jdt.debug.ui</project>
-		<project>org.eclipse.jdt.launching</project>
-		<project>org.eclipse.jdt.ui</project>
-		<project>org.eclipse.jdt.ui.tests</project>
-		<project>org.eclipse.junit.server</project>
-		<project>org.eclipse.swt</project>
-		<project>org.eclipse.ui</project>
-		<project>org.junit</project>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/org.eclipse.jdt.junit/about.html b/org.eclipse.jdt.junit/about.html
deleted file mode 100644
index 9db411a..0000000
--- a/org.eclipse.jdt.junit/about.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>20th June, 2002</p>	
-<h3>License</h3>
-<p>Eclipse.org makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
-Common Public License Version 1.0 (&quot;CPL&quot;).  A copy of the CPL is available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>.
-For purposes of the CPL, &quot;Program&quot; will mean the Content.</p>
-
-<h3>Contributions</h3>
-
-<p>If this Content is licensed to you under the terms and conditions of the CPL, any Contributions, as defined in the CPL, uploaded, submitted, or otherwise
-made available to Eclipse.org, members of Eclipse.org and/or the host of Eclipse.org web site, by you that relate to such
-Content are provided under the terms and conditions of the CPL and can be made available to others under the terms of the CPL.</p>
-
-<p>If this Content is licensed to you under license terms and conditions other than the CPL (&quot;Other License&quot;), any modifications, enhancements and/or
-other code and/or documentation (&quot;Modifications&quot;) uploaded, submitted, or otherwise made available to Eclipse.org, members of Eclipse.org and/or the
-host of Eclipse.org, by you that relate to such Content are provided under terms and conditions of the Other License and can be made available
-to others under the terms of the Other License.  In addition, with regard to Modifications for which you are the copyright holder, you are also
-providing the Modifications under the terms and conditions of the CPL and such Modifications can be made available to others under the terms of
-the CPL.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/org.eclipse.jdt.junit/build.properties b/org.eclipse.jdt.junit/build.properties
deleted file mode 100644
index cfcccc6..0000000
--- a/org.eclipse.jdt.junit/build.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-bin.includes = plugin.xml,\
-               about.html,\
-               icons/,\
-               plugin.properties,\
-               *.jar
-
-source.junitsupport.jar = src/
-
-src.includes=about.html
\ No newline at end of file
diff --git a/org.eclipse.jdt.junit/icons/full/clcl16/cfilter.gif b/org.eclipse.jdt.junit/icons/full/clcl16/cfilter.gif
deleted file mode 100644
index 0c3470d..0000000
--- a/org.eclipse.jdt.junit/icons/full/clcl16/cfilter.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/clcl16/relaunch.gif b/org.eclipse.jdt.junit/icons/full/clcl16/relaunch.gif
deleted file mode 100644
index 6b0c23d..0000000
--- a/org.eclipse.jdt.junit/icons/full/clcl16/relaunch.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/clcl16/stop.gif b/org.eclipse.jdt.junit/icons/full/clcl16/stop.gif
deleted file mode 100644
index d47876f..0000000
--- a/org.eclipse.jdt.junit/icons/full/clcl16/stop.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/ctool16/debugjunit.gif b/org.eclipse.jdt.junit/icons/full/ctool16/debugjunit.gif
deleted file mode 100644
index 3d218a1..0000000
--- a/org.eclipse.jdt.junit/icons/full/ctool16/debugjunit.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/ctool16/new_testcase.gif b/org.eclipse.jdt.junit/icons/full/ctool16/new_testcase.gif
deleted file mode 100644
index 08b508b..0000000
--- a/org.eclipse.jdt.junit/icons/full/ctool16/new_testcase.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/ctool16/new_testsuite.gif b/org.eclipse.jdt.junit/icons/full/ctool16/new_testsuite.gif
deleted file mode 100644
index 93c2cf1..0000000
--- a/org.eclipse.jdt.junit/icons/full/ctool16/new_testsuite.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/ctool16/runjunit.gif b/org.eclipse.jdt.junit/icons/full/ctool16/runjunit.gif
deleted file mode 100644
index 8d950f5..0000000
--- a/org.eclipse.jdt.junit/icons/full/ctool16/runjunit.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/cview16/junit.gif b/org.eclipse.jdt.junit/icons/full/cview16/junit.gif
deleted file mode 100644
index 3db90db..0000000
--- a/org.eclipse.jdt.junit/icons/full/cview16/junit.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/cview16/juniterr.gif b/org.eclipse.jdt.junit/icons/full/cview16/juniterr.gif
deleted file mode 100644
index adc4b32..0000000
--- a/org.eclipse.jdt.junit/icons/full/cview16/juniterr.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/cview16/juniterrq.gif b/org.eclipse.jdt.junit/icons/full/cview16/juniterrq.gif
deleted file mode 100644
index 94f3619..0000000
--- a/org.eclipse.jdt.junit/icons/full/cview16/juniterrq.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/cview16/junitsucc.gif b/org.eclipse.jdt.junit/icons/full/cview16/junitsucc.gif
deleted file mode 100644
index 7b1d00c..0000000
--- a/org.eclipse.jdt.junit/icons/full/cview16/junitsucc.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/cview16/junitsuccq.gif b/org.eclipse.jdt.junit/icons/full/cview16/junitsuccq.gif
deleted file mode 100644
index aaeb0d1..0000000
--- a/org.eclipse.jdt.junit/icons/full/cview16/junitsuccq.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/cview16/stackframe.gif b/org.eclipse.jdt.junit/icons/full/cview16/stackframe.gif
deleted file mode 100644
index 924e1c8..0000000
--- a/org.eclipse.jdt.junit/icons/full/cview16/stackframe.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/dlcl16/cfilter.gif b/org.eclipse.jdt.junit/icons/full/dlcl16/cfilter.gif
deleted file mode 100644
index 297b472..0000000
--- a/org.eclipse.jdt.junit/icons/full/dlcl16/cfilter.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/dlcl16/relaunch.gif b/org.eclipse.jdt.junit/icons/full/dlcl16/relaunch.gif
deleted file mode 100644
index d390fab..0000000
--- a/org.eclipse.jdt.junit/icons/full/dlcl16/relaunch.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/dlcl16/stop.gif b/org.eclipse.jdt.junit/icons/full/dlcl16/stop.gif
deleted file mode 100644
index bf15460..0000000
--- a/org.eclipse.jdt.junit/icons/full/dlcl16/stop.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/dtool16/debugjunit.gif b/org.eclipse.jdt.junit/icons/full/dtool16/debugjunit.gif
deleted file mode 100644
index e5721db..0000000
--- a/org.eclipse.jdt.junit/icons/full/dtool16/debugjunit.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/dtool16/runjunit.gif b/org.eclipse.jdt.junit/icons/full/dtool16/runjunit.gif
deleted file mode 100644
index e42021c..0000000
--- a/org.eclipse.jdt.junit/icons/full/dtool16/runjunit.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/elcl16/cfilter.gif b/org.eclipse.jdt.junit/icons/full/elcl16/cfilter.gif
deleted file mode 100644
index 51057e8..0000000
--- a/org.eclipse.jdt.junit/icons/full/elcl16/cfilter.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/elcl16/relaunch.gif b/org.eclipse.jdt.junit/icons/full/elcl16/relaunch.gif
deleted file mode 100644
index 7a95d09..0000000
--- a/org.eclipse.jdt.junit/icons/full/elcl16/relaunch.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/elcl16/stop.gif b/org.eclipse.jdt.junit/icons/full/elcl16/stop.gif
deleted file mode 100644
index 8ea6ff73..0000000
--- a/org.eclipse.jdt.junit/icons/full/elcl16/stop.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/etool16/debugjunit.gif b/org.eclipse.jdt.junit/icons/full/etool16/debugjunit.gif
deleted file mode 100644
index 162b956..0000000
--- a/org.eclipse.jdt.junit/icons/full/etool16/debugjunit.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/etool16/runjunit.gif b/org.eclipse.jdt.junit/icons/full/etool16/runjunit.gif
deleted file mode 100644
index 50ead9d..0000000
--- a/org.eclipse.jdt.junit/icons/full/etool16/runjunit.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/eview16/junit.gif b/org.eclipse.jdt.junit/icons/full/eview16/junit.gif
deleted file mode 100644
index 5f1d7e1..0000000
--- a/org.eclipse.jdt.junit/icons/full/eview16/junit.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/eview16/juniterr.gif b/org.eclipse.jdt.junit/icons/full/eview16/juniterr.gif
deleted file mode 100644
index 3e6586b..0000000
--- a/org.eclipse.jdt.junit/icons/full/eview16/juniterr.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/eview16/juniterrq.gif b/org.eclipse.jdt.junit/icons/full/eview16/juniterrq.gif
deleted file mode 100644
index 9348b7d..0000000
--- a/org.eclipse.jdt.junit/icons/full/eview16/juniterrq.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/eview16/junitfail.gif b/org.eclipse.jdt.junit/icons/full/eview16/junitfail.gif
deleted file mode 100644
index 4de4d13..0000000
--- a/org.eclipse.jdt.junit/icons/full/eview16/junitfail.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/eview16/junitfailq.gif b/org.eclipse.jdt.junit/icons/full/eview16/junitfailq.gif
deleted file mode 100644
index 44a86ba..0000000
--- a/org.eclipse.jdt.junit/icons/full/eview16/junitfailq.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/eview16/junitsuc.gif b/org.eclipse.jdt.junit/icons/full/eview16/junitsuc.gif
deleted file mode 100644
index 2cd5a81..0000000
--- a/org.eclipse.jdt.junit/icons/full/eview16/junitsuc.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/eview16/junitsucc.gif b/org.eclipse.jdt.junit/icons/full/eview16/junitsucc.gif
deleted file mode 100644
index 0e20c00..0000000
--- a/org.eclipse.jdt.junit/icons/full/eview16/junitsucc.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/eview16/junitsuccq.gif b/org.eclipse.jdt.junit/icons/full/eview16/junitsuccq.gif
deleted file mode 100644
index 1345316..0000000
--- a/org.eclipse.jdt.junit/icons/full/eview16/junitsuccq.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/eview16/junitsucq.gif b/org.eclipse.jdt.junit/icons/full/eview16/junitsucq.gif
deleted file mode 100644
index 6ffc1e5..0000000
--- a/org.eclipse.jdt.junit/icons/full/eview16/junitsucq.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/eview16/stackframe.gif b/org.eclipse.jdt.junit/icons/full/eview16/stackframe.gif
deleted file mode 100644
index 4e444db..0000000
--- a/org.eclipse.jdt.junit/icons/full/eview16/stackframe.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/obj16/exc_catch.gif b/org.eclipse.jdt.junit/icons/full/obj16/exc_catch.gif
deleted file mode 100644
index 037eef1..0000000
--- a/org.eclipse.jdt.junit/icons/full/obj16/exc_catch.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/obj16/faillist.gif b/org.eclipse.jdt.junit/icons/full/obj16/faillist.gif
deleted file mode 100644
index a67a320..0000000
--- a/org.eclipse.jdt.junit/icons/full/obj16/faillist.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/obj16/failures.gif b/org.eclipse.jdt.junit/icons/full/obj16/failures.gif
deleted file mode 100644
index 1ff549c..0000000
--- a/org.eclipse.jdt.junit/icons/full/obj16/failures.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/obj16/julaunch.gif b/org.eclipse.jdt.junit/icons/full/obj16/julaunch.gif
deleted file mode 100644
index e3c749a..0000000
--- a/org.eclipse.jdt.junit/icons/full/obj16/julaunch.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/obj16/stkfrm_obj.gif b/org.eclipse.jdt.junit/icons/full/obj16/stkfrm_obj.gif
deleted file mode 100644
index 567ea42..0000000
--- a/org.eclipse.jdt.junit/icons/full/obj16/stkfrm_obj.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/obj16/test.gif b/org.eclipse.jdt.junit/icons/full/obj16/test.gif
deleted file mode 100644
index 2e472d4..0000000
--- a/org.eclipse.jdt.junit/icons/full/obj16/test.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/obj16/testerr.gif b/org.eclipse.jdt.junit/icons/full/obj16/testerr.gif
deleted file mode 100644
index 7314764..0000000
--- a/org.eclipse.jdt.junit/icons/full/obj16/testerr.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/obj16/testfail.gif b/org.eclipse.jdt.junit/icons/full/obj16/testfail.gif
deleted file mode 100644
index 5f15ff7..0000000
--- a/org.eclipse.jdt.junit/icons/full/obj16/testfail.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/obj16/testhier.gif b/org.eclipse.jdt.junit/icons/full/obj16/testhier.gif
deleted file mode 100644
index 72861a5..0000000
--- a/org.eclipse.jdt.junit/icons/full/obj16/testhier.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/obj16/testok.gif b/org.eclipse.jdt.junit/icons/full/obj16/testok.gif
deleted file mode 100644
index c68bd2c..0000000
--- a/org.eclipse.jdt.junit/icons/full/obj16/testok.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/obj16/tsuite.gif b/org.eclipse.jdt.junit/icons/full/obj16/tsuite.gif
deleted file mode 100644
index 4fe79e7..0000000
--- a/org.eclipse.jdt.junit/icons/full/obj16/tsuite.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/obj16/tsuiteerror.gif b/org.eclipse.jdt.junit/icons/full/obj16/tsuiteerror.gif
deleted file mode 100644
index db32174..0000000
--- a/org.eclipse.jdt.junit/icons/full/obj16/tsuiteerror.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/obj16/tsuitefail.gif b/org.eclipse.jdt.junit/icons/full/obj16/tsuitefail.gif
deleted file mode 100644
index c373376..0000000
--- a/org.eclipse.jdt.junit/icons/full/obj16/tsuitefail.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/obj16/tsuiteok.gif b/org.eclipse.jdt.junit/icons/full/obj16/tsuiteok.gif
deleted file mode 100644
index ede2c0b..0000000
--- a/org.eclipse.jdt.junit/icons/full/obj16/tsuiteok.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/ovr16/error_ovr.gif b/org.eclipse.jdt.junit/icons/full/ovr16/error_ovr.gif
deleted file mode 100644
index 8612eaf..0000000
--- a/org.eclipse.jdt.junit/icons/full/ovr16/error_ovr.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/ovr16/failed_ovr.gif b/org.eclipse.jdt.junit/icons/full/ovr16/failed_ovr.gif
deleted file mode 100644
index d45b970..0000000
--- a/org.eclipse.jdt.junit/icons/full/ovr16/failed_ovr.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/ovr16/success_ovr.gif b/org.eclipse.jdt.junit/icons/full/ovr16/success_ovr.gif
deleted file mode 100644
index 0f0cf30..0000000
--- a/org.eclipse.jdt.junit/icons/full/ovr16/success_ovr.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/prgss/ff1.gif b/org.eclipse.jdt.junit/icons/full/prgss/ff1.gif
deleted file mode 100644
index 25f7579..0000000
--- a/org.eclipse.jdt.junit/icons/full/prgss/ff1.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/prgss/ff2.gif b/org.eclipse.jdt.junit/icons/full/prgss/ff2.gif
deleted file mode 100644
index b6a4782..0000000
--- a/org.eclipse.jdt.junit/icons/full/prgss/ff2.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/prgss/ff3.gif b/org.eclipse.jdt.junit/icons/full/prgss/ff3.gif
deleted file mode 100644
index 11cbcb5..0000000
--- a/org.eclipse.jdt.junit/icons/full/prgss/ff3.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/prgss/ff4.gif b/org.eclipse.jdt.junit/icons/full/prgss/ff4.gif
deleted file mode 100644
index 30b31e6..0000000
--- a/org.eclipse.jdt.junit/icons/full/prgss/ff4.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/prgss/ff5.gif b/org.eclipse.jdt.junit/icons/full/prgss/ff5.gif
deleted file mode 100644
index c826bdc..0000000
--- a/org.eclipse.jdt.junit/icons/full/prgss/ff5.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/prgss/ff6.gif b/org.eclipse.jdt.junit/icons/full/prgss/ff6.gif
deleted file mode 100644
index 24a3452..0000000
--- a/org.eclipse.jdt.junit/icons/full/prgss/ff6.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/prgss/ff7.gif b/org.eclipse.jdt.junit/icons/full/prgss/ff7.gif
deleted file mode 100644
index 52e1ad0..0000000
--- a/org.eclipse.jdt.junit/icons/full/prgss/ff7.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/prgss/ff8.gif b/org.eclipse.jdt.junit/icons/full/prgss/ff8.gif
deleted file mode 100644
index 62597bc..0000000
--- a/org.eclipse.jdt.junit/icons/full/prgss/ff8.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/prgss/ff9.gif b/org.eclipse.jdt.junit/icons/full/prgss/ff9.gif
deleted file mode 100644
index 5471191..0000000
--- a/org.eclipse.jdt.junit/icons/full/prgss/ff9.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/prgss/ss1.gif b/org.eclipse.jdt.junit/icons/full/prgss/ss1.gif
deleted file mode 100644
index e08e842..0000000
--- a/org.eclipse.jdt.junit/icons/full/prgss/ss1.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/prgss/ss2.gif b/org.eclipse.jdt.junit/icons/full/prgss/ss2.gif
deleted file mode 100644
index 67f852f..0000000
--- a/org.eclipse.jdt.junit/icons/full/prgss/ss2.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/prgss/ss3.gif b/org.eclipse.jdt.junit/icons/full/prgss/ss3.gif
deleted file mode 100644
index 69ee58a..0000000
--- a/org.eclipse.jdt.junit/icons/full/prgss/ss3.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/prgss/ss4.gif b/org.eclipse.jdt.junit/icons/full/prgss/ss4.gif
deleted file mode 100644
index 6553766..0000000
--- a/org.eclipse.jdt.junit/icons/full/prgss/ss4.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/prgss/ss5.gif b/org.eclipse.jdt.junit/icons/full/prgss/ss5.gif
deleted file mode 100644
index f1af0d5..0000000
--- a/org.eclipse.jdt.junit/icons/full/prgss/ss5.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/prgss/ss6.gif b/org.eclipse.jdt.junit/icons/full/prgss/ss6.gif
deleted file mode 100644
index 14406e2..0000000
--- a/org.eclipse.jdt.junit/icons/full/prgss/ss6.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/prgss/ss7.gif b/org.eclipse.jdt.junit/icons/full/prgss/ss7.gif
deleted file mode 100644
index 14d6602..0000000
--- a/org.eclipse.jdt.junit/icons/full/prgss/ss7.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/prgss/ss8.gif b/org.eclipse.jdt.junit/icons/full/prgss/ss8.gif
deleted file mode 100644
index 3562961..0000000
--- a/org.eclipse.jdt.junit/icons/full/prgss/ss8.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/prgss/ss9.gif b/org.eclipse.jdt.junit/icons/full/prgss/ss9.gif
deleted file mode 100644
index 9077dcd..0000000
--- a/org.eclipse.jdt.junit/icons/full/prgss/ss9.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/wizban/newsuite_wiz.gif b/org.eclipse.jdt.junit/icons/full/wizban/newsuite_wiz.gif
deleted file mode 100644
index a4f146b..0000000
--- a/org.eclipse.jdt.junit/icons/full/wizban/newsuite_wiz.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/icons/full/wizban/newtest_wiz.gif b/org.eclipse.jdt.junit/icons/full/wizban/newtest_wiz.gif
deleted file mode 100644
index b753340..0000000
--- a/org.eclipse.jdt.junit/icons/full/wizban/newtest_wiz.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.junit/plugin.properties b/org.eclipse.jdt.junit/plugin.properties
deleted file mode 100644
index 1575a2f..0000000
--- a/org.eclipse.jdt.junit/plugin.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-pluginName=Java Development Tools JUnit support
-providerName=Eclipse.org
-
-View.label= JUnit
-Launch.label= JUnit
-PreferencePage.label= JUnit
-
-TestWizard.description= Create a JUnit Test Case
-SuiteWizard.description= Create a JUnit Test Suite
-UpdateSuiteAction.label= Recreate Test Suite...
-UpdateSuiteAction.tooltip= Recreate JUnit TestSuite with new test classes
-Task.name= JUnit Task
-WizardCategory.name= JUnit
-TestCaseWizard.name= TestCase
-TestSuiteWizard.name= TestSuite
-
-JUnitShortcut.label=JUnit Test
diff --git a/org.eclipse.jdt.junit/plugin.xml b/org.eclipse.jdt.junit/plugin.xml
deleted file mode 100644
index 383b154..0000000
--- a/org.eclipse.jdt.junit/plugin.xml
+++ /dev/null
@@ -1,161 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<plugin
-	id="org.eclipse.jdt.junit"
-	name="%pluginName"
-	version="2.1.0"
-	class="org.eclipse.jdt.internal.junit.ui.JUnitPlugin"
-	provider-name="%providerName">
-
-	<requires>
-		<import plugin="org.eclipse.ui"/>
-		<import plugin="org.eclipse.core.resources"/>
-		<import plugin="org.eclipse.core.boot"/>
-		<import plugin="org.eclipse.debug.core"/>
-		<import plugin="org.eclipse.debug.ui"/>
-		<import plugin="org.eclipse.jdt.core"/>
-		<import plugin="org.eclipse.jdt.ui"/>
-		<import plugin="org.eclipse.jdt.debug"/>
-		<import plugin="org.eclipse.swt"/>
-		<import plugin="org.eclipse.core.runtime"/>
-		<import plugin="org.eclipse.jdt.launching"/>
-		<import plugin="org.eclipse.jdt.debug.ui"/>
-		<import plugin="org.junit"/>     
-	</requires>
-	
-	<runtime>
-		<library name="junitsupport.jar">
-			<export name="*"/>
-		</library>
-	</runtime>
-
-	<extension
-		point="org.eclipse.ui.views">
-		<view
-			name="%View.label"
-			icon="icons/full/cview16/junit.gif"
-			category="org.eclipse.jdt.ui.java"
-			class="org.eclipse.jdt.internal.junit.ui.TestRunnerViewPart"
-			id="org.eclipse.jdt.junit.ResultView"
-			fastViewWidthRatio="0.40">	
-		</view>
-	</extension>
-	
-    <extension 
-    	point="org.eclipse.ui.perspectiveExtensions">
-        <perspectiveExtension 
-           targetID="org.eclipse.jdt.ui.JavaPerspective"> 
-           <view id="org.eclipse.jdt.junit.ResultView" 
-                relative="org.eclipse.jdt.ui.PackageExplorer"
-                visible="false" 
-                relationship="stack"/> 
-        </perspectiveExtension> 
-    </extension> 
-
-	<extension
-		point="org.eclipse.ui.preferencePages">
-		<page name="%PreferencePage.label"
-			id="org.eclipse.jdt.junit.preferences"
-			class="org.eclipse.jdt.internal.junit.ui.JUnitPreferencePage"
-			category= "org.eclipse.jdt.ui.preferences.JavaBasePreferencePage"> 
-		</page>
-	</extension>
-	
-	<extension point = "org.eclipse.debug.core.launchConfigurationTypes">
-   		<launchConfigurationType
-   	   		id="org.eclipse.jdt.junit.launchconfig"
-	   		name="%Launch.label"
-	   		delegate="org.eclipse.jdt.internal.junit.launcher.JUnitLaunchConfiguration"
-	   		modes= "run, debug">
-	   <fileExtension
-	   		extension="java"
-	   		default="false"/>
-	   <fileExtension
-	   		extension="class"
-	   		default="false"/>
-   		</launchConfigurationType>
-	</extension>
-	
-	<extension point = "org.eclipse.debug.core.launchConfigurationComparators">
-		<launchConfigurationComparator
-			id = "org.eclipse.jdt.junit.containerComparator"
-			class = "org.eclipse.jdt.internal.junit.launcher.ContainerComparator"
-			attribute = "org.eclipse.jdt.junit.CONTAINER"/>
-	</extension>
-	
-	<extension point="org.eclipse.debug.ui.launchConfigurationTypeImages">
-		<launchConfigurationTypeImage
-			id="org.eclipse.jdt.junit.launchimage"
-			configTypeID="org.eclipse.jdt.junit.launchconfig"
-			icon="icons/full/obj16/julaunch.gif">
-		</launchConfigurationTypeImage>	
-	</extension>
-		
-	<extension point = "org.eclipse.debug.ui.launchConfigurationTabGroups">
-		<launchConfigurationTabGroup
-			id="org.eclipse.jdt.junit.launchConfigurationTabGroup.junit"
-			type ="org.eclipse.jdt.junit.launchconfig"
-			class="org.eclipse.jdt.internal.junit.launcher.JUnitTabGroup">
-		</launchConfigurationTabGroup>
-	</extension>
-
-	<extension point="org.eclipse.ui.newWizards">
-		<category
-		   id = "org.eclipse.jdt.junit"
-		   parentCategory="org.eclipse.jdt.ui.java"
-		   name="%WizardCategory.name">
-		</category>
-		<wizard 
-			id="org.eclipse.jdt.junit.wizards.NewTestCaseCreationWizard"
-			name="%TestCaseWizard.name"
-			class="org.eclipse.jdt.internal.junit.wizards.NewTestCaseCreationWizard"
-			category="org.eclipse.jdt.ui.java/org.eclipse.jdt.junit"
-			icon="icons/full/ctool16/new_testcase.gif">
-			<description>%TestWizard.description</description>
-	    </wizard>
-		<wizard 
-			id="org.eclipse.jdt.junit.wizards.NewTestSuiteCreationWizard"
-			name="%TestSuiteWizard.name"
-			class="org.eclipse.jdt.internal.junit.wizards.NewTestSuiteCreationWizard"
-			category="org.eclipse.jdt.ui.java/org.eclipse.jdt.junit"
-			icon="icons/full/ctool16/new_testsuite.gif">
-			<description>%SuiteWizard.description</description>
-	    </wizard>
-	</extension>
-	
-	<extension point="org.eclipse.ui.popupMenus">
-		<objectContribution
-			id="org.eclipse.jdt.junit.wizards.UpdateTestSuite"
-			objectClass="org.eclipse.jdt.core.ICompilationUnit"
-			nameFilter="AllTests.java">
-			<action
-				id="updateTestSuite"
-				label="%UpdateSuiteAction.label"
-				tooltip="%UpdateSuiteAction.tooltip"
-				enablesFor="1"
-				class="org.eclipse.jdt.internal.junit.wizards.UpdateTestSuite">
-			</action>
-		</objectContribution>
-	
-	</extension>
-	
-	<extension id="junit_task" point="org.eclipse.core.resources.markers" name="%Task.name">
-		<super type="org.eclipse.core.resources.taskmarker"/>
-		<persistent value="true"/>
-	</extension>
-	
-	<extension point = "org.eclipse.debug.ui.launchShortcuts">
-		<shortcut
-			id="org.eclipse.jdt.junit.junitShortcut"
-			class="org.eclipse.jdt.internal.junit.launcher.JUnitLaunchShortcut"
-			label="%JUnitShortcut.label"
-			icon="icons/full/obj16/julaunch.gif"
-			modes="run, debug">
-			<perspective id="org.eclipse.jdt.ui.JavaPerspective"/>
-			<perspective id="org.eclipse.jdt.ui.JavaHierarchyPerspective"/>
-			<perspective id="org.eclipse.jdt.ui.JavaBrowsingPerspective"/>
-			<perspective id="org.eclipse.debug.ui.DebugPerspective"/>
-		</shortcut>
-	</extension>
-
-</plugin>
\ No newline at end of file
diff --git a/org.eclipse.jdt.junit/scripts/exportplugin.xml b/org.eclipse.jdt.junit/scripts/exportplugin.xml
deleted file mode 100644
index f52bb99..0000000
--- a/org.eclipse.jdt.junit/scripts/exportplugin.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<!-- build script to create JUnit Plugin -->
-<project name="org.eclipse.jdt.junit" default="export" basedir="..">
-	<target name="init">
-		<tstamp/>
-		<property name="destdir" value="../../plugin-export" />
-		<property name="plugin"  value="org.eclipse.jdt.junit" />
-		<property name="version"  value="_2.1.0" />
-		<property name="dest"  value="${destdir}/${plugin}${version}" />
-	</target>
-
-	<target name="build" depends="init">
-    	<eclipse.incrementalBuild project="${plugin}" kind="incr"/>
-	</target>
-
-	<target name="export" depends="build">
-		<mkdir dir="${destdir}" />
-		<delete dir="${dest}" />
-		<mkdir dir="${dest}" />
-		
-		<jar 
-			jarfile="${dest}/junitsupport.jar"
-			basedir="bin"
-		/>
-				
-		<jar 		
-			jarfile="${dest}/junitsupportsrc.jar"
-			basedir="src"
-		/>
-		
-		<copy file="plugin.xml" todir="${dest}"/>
-		<copy file="plugin.properties" todir="${dest}"/>
-		<copy file="about.html" todir="${dest}"/>
-		<copy todir="${dest}/icons">
-			<fileset dir="icons" />
-		</copy>		
-	</target>
-</project>
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/launcher/ContainerComparator.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/launcher/ContainerComparator.java
deleted file mode 100644
index bc58cf0..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/launcher/ContainerComparator.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.eclipse.jdt.internal.junit.launcher;
-
-import java.util.Comparator;
-
-public class ContainerComparator implements Comparator {
-
-    public int compare(Object o1, Object o2) {
-		String container1= (String)o1;
-		String container2= (String)o2;
-		if (container1 == null)
-			container1= "";
-		if (container2 == null)
-			container2= "";
-		return container1.compareTo(container2);
-    }
-}
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/launcher/JUnitBaseLaunchConfiguration.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/launcher/JUnitBaseLaunchConfiguration.java
deleted file mode 100644
index d381858..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/launcher/JUnitBaseLaunchConfiguration.java
+++ /dev/null
@@ -1,179 +0,0 @@
-package org.eclipse.jdt.internal.junit.launcher;
-
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-
-import java.io.File;
-import java.text.MessageFormat;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.eclipse.core.resources.IWorkspaceRoot;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.debug.core.ILaunch;
-import org.eclipse.debug.core.ILaunchConfiguration;
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IJavaModel;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.internal.junit.ui.JUnitMessages;
-import org.eclipse.jdt.internal.junit.ui.JUnitPlugin;
-import org.eclipse.jdt.internal.junit.util.SocketUtil;
-import org.eclipse.jdt.internal.junit.util.TestSearchEngine;
-import org.eclipse.jdt.launching.AbstractJavaLaunchConfigurationDelegate;
-import org.eclipse.jdt.launching.ExecutionArguments;
-import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
-import org.eclipse.jdt.launching.IVMInstall;
-import org.eclipse.jdt.launching.IVMRunner;
-import org.eclipse.jdt.launching.VMRunnerConfiguration;
-
-/**
- * Abstract launch configuration delegate for a JUnit test.
- */
-public abstract class JUnitBaseLaunchConfiguration extends AbstractJavaLaunchConfigurationDelegate {
-
-	public static final String PORT_ATTR= JUnitPlugin.PLUGIN_ID+".PORT"; //$NON-NLS-1$
-	public static final String TESTTYPE_ATTR= JUnitPlugin.PLUGIN_ID+".TESTTYPE"; //$NON-NLS-1$
-	public static final String ATTR_KEEPRUNNING = JUnitPlugin.PLUGIN_ID+ ".KEEPRUNNING_ATTR"; //$NON-NLS-1$
-	public static final String LAUNCH_CONTAINER_ATTR= JUnitPlugin.PLUGIN_ID+".CONTAINER";
-	/**
-	 * @see ILaunchConfigurationDelegate#launch(ILaunchConfiguration, String)
-	 */
-	
-	public void launch(ILaunchConfiguration configuration, String mode, ILaunch launch, IProgressMonitor pm) throws CoreException {		
-		IJavaProject javaProject= getJavaProject(configuration);
-		if ((javaProject == null) || !javaProject.exists()) {
-			abort(JUnitMessages.getString("JUnitBaseLaunchConfiguration.error.invalidproject"), null, IJavaLaunchConfigurationConstants.ERR_NOT_A_JAVA_PROJECT); //$NON-NLS-1$
-		}
-		IType[] testTypes = getTestTypes(configuration, javaProject, pm);
-		IVMInstall install= getVMInstall(configuration);
-		IVMRunner runner = install.getVMRunner(mode);
-		if (runner == null) {
-			abort(MessageFormat.format(JUnitMessages.getString("JUnitBaseLaunchConfiguration.error.novmrunner"), new String[]{install.getId()}), null, IJavaLaunchConfigurationConstants.ERR_VM_RUNNER_DOES_NOT_EXIST); //$NON-NLS-1$
-		}
-		
-		int port= SocketUtil.findUnusedLocalPort("", 5000, 15000);   //$NON-NLS-1$
-		VMRunnerConfiguration runConfig= launchTypes(configuration, mode, testTypes, port);
-		setDefaultSourceLocator(launch, configuration);
-		
-		launch.setAttribute(PORT_ATTR, Integer.toString(port));
-		launch.setAttribute(TESTTYPE_ATTR, testTypes[0].getHandleIdentifier());
-		runner.run(runConfig, launch, pm);		
-	}
-
-	protected VMRunnerConfiguration launchTypes(ILaunchConfiguration configuration,
-					String mode, IType[] tests, int port) throws CoreException {
-		File workingDir = verifyWorkingDirectory(configuration);
-		String workingDirName = null;
-		if (workingDir != null) 
-			workingDirName = workingDir.getAbsolutePath();
-		
-		// Program & VM args
-		String vmArgs= getVMArguments(configuration);
-		ExecutionArguments execArgs = new ExecutionArguments(vmArgs, ""); //$NON-NLS-1$
-				
-		VMRunnerConfiguration runConfig= createVMRunner(configuration, tests, port, mode);
-		runConfig.setVMArguments(execArgs.getVMArgumentsArray());
-		runConfig.setWorkingDirectory(workingDirName);
-		
-		String[] bootpath = getBootpath(configuration);
-		runConfig.setBootClassPath(bootpath);
-		return runConfig;
-	}
-
-	public IType[] getTestTypes(ILaunchConfiguration configuration, IJavaProject javaProject, IProgressMonitor pm) throws CoreException {
-		String testTypeName = configuration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME, (String)null);
-		if (pm == null)
-			pm= new NullProgressMonitor();
-//		if ((testTypeName == null) || (testTypeName.trim().length() < 1)) {
-//			abort("No test type specified", null, IJavaLaunchConfigurationConstants.ERR_UNSPECIFIED_MAIN_TYPE); //$NON-NLS-1$
-//		}
-		
-		String containerHandle = configuration.getAttribute(LAUNCH_CONTAINER_ATTR, "");
-		if (containerHandle.length() == 0) {
-			return findSingleTest(javaProject, testTypeName);
-		}
-		else 
-			return findTestsInContainer(javaProject, containerHandle, pm);
-	}
-
-	private IType[] findTestsInContainer(IJavaProject javaProject, String containerHandle, IProgressMonitor pm) {
-		IJavaElement container= JavaCore.create(containerHandle);
-		Set result= new HashSet();
-		try {
-			TestSearchEngine.doFindTests(new Object[]{container}, result, pm);
-		} catch (InterruptedException e) {
-		}
-		return (IType[]) result.toArray(new IType[result.size()]) ;
-	}
-
-
-	public IType[] findSingleTest(IJavaProject javaProject, String testName) throws CoreException {
-		IType type = null;
-		try {
-			type = findType(javaProject, testName);
-		} catch (JavaModelException jme) {
-			abort("Test type does not exist", null, IJavaLaunchConfigurationConstants.ERR_UNSPECIFIED_MAIN_TYPE); //$NON-NLS-1$
-		}
-		if (type == null) {
-			abort("Test type does not exist", null, IJavaLaunchConfigurationConstants.ERR_UNSPECIFIED_MAIN_TYPE); //$NON-NLS-1$
-		}
-		return new IType[]{type};
-	}
-	
-	/**
-	 * Throws a core exception with the given message and optional
-	 * exception. The exception's status code will indicate an error.
-	 * 
-	 * @param message error message
-	 * @param exception cause of the error, or <code>null</code>
-	 * @exception CoreException with the given message and underlying
-	 *  exception
-	 */
-	protected void abort(String message, Throwable exception, int code) throws CoreException {
-		throw new CoreException(new Status(IStatus.ERROR, JUnitPlugin.PLUGIN_ID, code, message, exception));
-	}
-	
-	/**
-	 * Find the specified (fully-qualified) type name in the specified java project.
-	 */
-	private IType findType(IJavaProject javaProject, String mainTypeName) throws JavaModelException {
-		return javaProject.findType(mainTypeName);
-	}
-	
-	/**
-	 * Convenience method to get the java model.
-	 */
-	private IJavaModel getJavaModel() {
-		return JavaCore.create(getWorkspaceRoot());
-	}
-
-	/**
-	 * Convenience method to get the workspace root.
-	 */
-	private IWorkspaceRoot getWorkspaceRoot() {
-		return ResourcesPlugin.getWorkspace().getRoot();
-	}
-	
-	/**
-	 * Override to create a custom VMRunnerConfiguration for a launch configuration.
-	 */
-	protected abstract VMRunnerConfiguration createVMRunner(ILaunchConfiguration configuration, IType[] testTypes, int port, String runMode) throws CoreException;
-
-	protected boolean keepAlive(ILaunchConfiguration config) {
-		try {
-			return config.getAttribute(ATTR_KEEPRUNNING, false);
-		} catch(CoreException e) {
-		}
-		return false;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/launcher/JUnitLaunchConfiguration.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/launcher/JUnitLaunchConfiguration.java
deleted file mode 100644
index 847e53a..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/launcher/JUnitLaunchConfiguration.java
+++ /dev/null
@@ -1,113 +0,0 @@
-package org.eclipse.jdt.internal.junit.launcher;
-
-/* 
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Vector;
-
-import org.eclipse.core.boot.BootLoader;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Status;
-
-import org.eclipse.debug.core.ILaunchConfiguration;
-import org.eclipse.debug.core.ILaunchManager;
-
-import org.eclipse.jdt.core.IType;
-
-import org.eclipse.jdt.launching.VMRunnerConfiguration;
-
-import org.eclipse.jdt.internal.junit.ui.JUnitPlugin;
-
-/**
- * Launch configuration delegate for a plain JUnit test.
- */
-public class JUnitLaunchConfiguration extends JUnitBaseLaunchConfiguration {
-	public static final String ID_JUNIT_APPLICATION= "org.eclipse.jdt.junit.launchconfig"; //$NON-NLS-1$
-	/**
-	 * Add a VMRunner with a class path that includes org.eclipse.jdt.junit plugin.
-	 * In addition it adds the port for the RemoteTestRunner as an argument
-	 */
-	protected VMRunnerConfiguration createVMRunner(ILaunchConfiguration configuration, IType[] testTypes, int port, String runMode) throws CoreException {
-		String[] classPath= createClassPath(configuration);	
-		VMRunnerConfiguration vmConfig= new VMRunnerConfiguration("org.eclipse.jdt.internal.junit.runner.RemoteTestRunner", classPath); //$NON-NLS-1$
-	
-		Vector argv= new Vector(10);
-		argv.add("-port"); //$NON-NLS-1$
-		argv.add(Integer.toString(port));
-		//argv("-debugging");
-				
-		if (keepAlive(configuration) && runMode.equals(ILaunchManager.DEBUG_MODE))
-			argv.add(0, "-keepalive"); //$NON-NLS-1$
-		
-		if (testTypes.length > 1) {
-			String fileName= createTestNamesFile(testTypes);
-			argv.add("-testNameFile"); //$NON-NLS-1$
-			argv.add(fileName);
-		} else {
-			argv.add("-classNames"); //$NON-NLS-1$
-			for (int i= 0; i < testTypes.length; i++) 
-				argv.add(testTypes[i].getFullyQualifiedName());
-		}
-		String[] args= new String[argv.size()];
-		argv.copyInto(args);
-		vmConfig.setProgramArguments(args);
-		return vmConfig;
-	}
-
-	private String createTestNamesFile(IType[] testTypes) throws CoreException {
-		try {
-			File file= File.createTempFile("testNames", ".txt");
-			file.deleteOnExit();
-			BufferedWriter bw= null;
-			try {
-				bw= new BufferedWriter(new FileWriter(file));
-				for (int i= 0; i < testTypes.length; i++) {
-					String testName= testTypes[i].getFullyQualifiedName();
-					bw.write(testName);
-					bw.newLine();
-				}
-			} finally {
-				if (bw != null) {
-					bw.close();
-				}
-			}
-			return file.getAbsolutePath();
-		} catch (IOException e) {
-			throw new CoreException(new Status(IStatus.ERROR, JUnitPlugin.PLUGIN_ID, IStatus.ERROR, "", e));
-		}
-	}
-
-	
-	private String[] createClassPath(ILaunchConfiguration configuration) throws CoreException {
-		URL url= JUnitPlugin.getDefault().getDescriptor().getInstallURL();
-		String[] cp= getClasspath(configuration);
-		boolean inDevelopmentMode= BootLoader.inDevelopmentMode();
-
-		String[] classPath= new String[cp.length + 1];
-		System.arraycopy(cp, 0, classPath, 1, cp.length);
-		try {
-			if (inDevelopmentMode) {
-				// assumption is that the output folder is called bin!
-				classPath[0]= Platform.asLocalURL(new URL(url, "bin")).getFile(); //$NON-NLS-1$
-			}
-			else {
-				classPath[0]= Platform.asLocalURL(new URL(url, "junitsupport.jar")).getFile(); //$NON-NLS-1$
-			}
-		} catch (MalformedURLException e) {
-			JUnitPlugin.log(e); // TO DO abort run and inform user
-		} catch (IOException e) {
-			JUnitPlugin.log(e); // TO DO abort run and inform user
-		}
-		return classPath;
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/launcher/JUnitLaunchConfigurationTab.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/launcher/JUnitLaunchConfigurationTab.java
deleted file mode 100644
index 6c16a6f..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/launcher/JUnitLaunchConfigurationTab.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package org.eclipse.jdt.internal.junit.launcher;
-
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
- 
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
-import org.eclipse.debug.ui.AbstractLaunchConfigurationTab;
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
-import org.eclipse.jdt.internal.ui.util.SWTUtil;
-import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IWorkbenchPage;
-
-/**
- * Common function for Java launch configuration tabs.
- */
-public abstract class JUnitLaunchConfigurationTab extends AbstractLaunchConfigurationTab {
-		
-	/**
-	 * Returns the current Java element context from which to initialize
-	 * default settings, or <code>null</code> if none.
-	 * 
-	 * @return Java element context.
-	 */
-	protected IJavaElement getContext() {
-		IWorkbenchPage page = JDIDebugUIPlugin.getActivePage();
-		if (page != null) {
-			ISelection selection = page.getSelection();
-			if (selection instanceof IStructuredSelection) {
-				IStructuredSelection ss = (IStructuredSelection)selection;
-				if (!ss.isEmpty()) {
-					Object obj = ss.getFirstElement();
-					if (obj instanceof IJavaElement) {
-						return (IJavaElement)obj;
-					}
-					if (obj instanceof IResource) {
-						IJavaElement je = JavaCore.create((IResource)obj);
-						if (je == null) {
-							IProject pro = ((IResource)obj).getProject();
-							je = JavaCore.create(pro);
-						}
-						if (je != null) {
-							return je;
-						}
-					}
-				}
-			}
-			IEditorPart part = page.getActiveEditor();
-			if (part != null) {
-				IEditorInput input = part.getEditorInput();
-				return (IJavaElement) input.getAdapter(IJavaElement.class);
-			}
-		}
-		return null;
-	}
-	
-	/**
-	 * Set the java project attribute based on the IJavaElement.
-	 */
-	protected void initializeJavaProject(IJavaElement javaElement, ILaunchConfigurationWorkingCopy config) {
-		IJavaProject javaProject = javaElement.getJavaProject();
-		String name = null;
-		if (javaProject != null && javaProject.exists()) {
-			name = javaProject.getElementName();
-		}
-		config.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, name);
-	}
-
-	protected void setButtonGridData(Button button) {
-		GridData gridData= new GridData();
-		button.setLayoutData(gridData);
-		SWTUtil.setButtonDimensionHint(button);
-	}
-	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/launcher/JUnitLaunchShortcut.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/launcher/JUnitLaunchShortcut.java
deleted file mode 100644
index 5691d4f..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/launcher/JUnitLaunchShortcut.java
+++ /dev/null
@@ -1,276 +0,0 @@
-package org.eclipse.jdt.internal.junit.launcher;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.debug.core.DebugPlugin;
-import org.eclipse.debug.core.ILaunchConfiguration;
-import org.eclipse.debug.core.ILaunchConfigurationType;
-import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
-import org.eclipse.debug.core.ILaunchManager;
-import org.eclipse.debug.ui.DebugUITools;
-import org.eclipse.debug.ui.IDebugModelPresentation;
-import org.eclipse.debug.ui.IDebugUIConstants;
-import org.eclipse.debug.ui.ILaunchShortcut;
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.debug.ui.JavaUISourceLocator;
-import org.eclipse.jdt.internal.junit.ui.JUnitMessages;
-import org.eclipse.jdt.internal.junit.ui.JUnitPlugin;
-import org.eclipse.jdt.internal.junit.util.TestSearchEngine;
-import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
-import org.eclipse.jdt.ui.JavaElementLabelProvider;
-import org.eclipse.jface.dialogs.ErrorDialog;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.dialogs.ProgressMonitorDialog;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.dialogs.ElementListSelectionDialog;
-
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-public class JUnitLaunchShortcut implements ILaunchShortcut {
-	
-	/**
-	 * @see ILaunchShortcut#launch(IEditorPart, String)
-	 */
-	public void launch(IEditorPart editor, String mode) {
-		IEditorInput input = editor.getEditorInput();
-		IJavaElement je = (IJavaElement) input.getAdapter(IJavaElement.class);
-		if (je != null) {
-			searchAndLaunch(new Object[] {je}, mode);
-		} 
-	}
-
-	/**
-	 * @see ILaunchShortcut#launch(ISelection, String)
-	 */
-	public void launch(ISelection selection, String mode) {
-		if (selection instanceof IStructuredSelection) {
-			searchAndLaunch(((IStructuredSelection)selection).toArray(), mode);
-		} 
-	}
-
-	protected void searchAndLaunch(Object[] search, String mode) {
-		if (search != null) {
-			if (search[0] instanceof IJavaElement) {
-				IJavaElement element= (IJavaElement)search[0];
-				if (element.getElementType() < IJavaElement.COMPILATION_UNIT) {
-					launchContainer(element, mode);
-					return;
-				}
-			}
-			// launch a CU or type
-			launchType(search, mode);
-		}
-	}
-
-	protected void launchType(Object[] search, String mode) {
-		IType[] types= null;
-		try {
-			types= TestSearchEngine.findTests(new ProgressMonitorDialog(getShell()), search);
-		} catch (InterruptedException e) {
-			JUnitPlugin.log(e);
-			return;
-		} catch (InvocationTargetException e) {
-			JUnitPlugin.log(e);
-			return;
-		}
-		IType type= null;
-		if (types.length == 0) {
-			MessageDialog.openInformation(getShell(), JUnitMessages.getString("LaunchTestAction.dialog.title"), JUnitMessages.getString("LaunchTestAction.message.notests")); //$NON-NLS-1$ //$NON-NLS-2$
-		} else if (types.length > 1) {
-			type= chooseType(types, mode);
-		} else {
-			type= types[0];
-		}
-		if (type != null) {
-			launch(type, mode);
-		}
-	}
-
-	private void launchContainer(IJavaElement container, String mode) {
-		ILaunchConfiguration config = findLaunchConfiguration(container, mode);
-		launchConfiguration(mode, config);
-	}
-	
-	private void launch(IType type, String mode) {
-		ILaunchConfiguration config = findLaunchConfiguration(type, mode);
-		launchConfiguration(mode, config);
-	}
-
-	private void launchConfiguration(String mode, ILaunchConfiguration config) {
-		try { 
-			if (config != null) {
-				DebugUITools.saveAndBuildBeforeLaunch();
-				config.launch(mode, null);
-			}			
-		} catch (CoreException e) {
-			ErrorDialog.openError(getShell(), JUnitMessages.getString("LaunchTestAction.message.launchFailed"), e.getMessage(), e.getStatus());  //$NON-NLS-1$
-		}
-	}
-
-	protected ILaunchConfiguration findLaunchConfiguration(IType type, String mode) {
-		return findLaunchConfiguration(mode, type, IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME, type.getFullyQualifiedName());
-	}
-	
-	protected ILaunchConfiguration findLaunchConfiguration(IJavaElement container, String mode) {
-		return findLaunchConfiguration(mode, container, JUnitBaseLaunchConfiguration.LAUNCH_CONTAINER_ATTR, container.getHandleIdentifier());
-	}
-	
-	/**
-	 * Prompts the user to select a type
-	 * 
-	 * @return the selected type or <code>null</code> if none.
-	 */
-	protected IType chooseType(IType[] types, String mode) {
-		ElementListSelectionDialog dialog= new ElementListSelectionDialog(getShell(), new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_POST_QUALIFIED));
-		dialog.setElements(types);
-		dialog.setTitle(JUnitMessages.getString("LaunchTestAction.dialog.title2")); //$NON-NLS-1$
-		if (mode.equals(ILaunchManager.DEBUG_MODE)) {
-			dialog.setMessage(JUnitMessages.getString("LaunchTestAction.message.selectTestToRun"));  //$NON-NLS-1$
-		} else {
-			dialog.setMessage(JUnitMessages.getString("LaunchTestAction.message.selectTestToDebug")); //$NON-NLS-1$
-		}
-		dialog.setMultipleSelection(false);
-		if (dialog.open() == ElementListSelectionDialog.OK) {
-			return (IType)dialog.getFirstResult();
-		}
-		return null;
-	}
-	
-	private ILaunchConfiguration findLaunchConfiguration(String mode, IJavaElement element, String attribute, String value) {
-		ILaunchConfigurationType configType= getJUnitLaunchConfigType();
-		List candidateConfigs= Collections.EMPTY_LIST;
-		try {
-			ILaunchConfiguration[] configs= getLaunchManager().getLaunchConfigurations(configType);
-			candidateConfigs= new ArrayList(configs.length);
-			for (int i= 0; i < configs.length; i++) {
-				ILaunchConfiguration config= configs[i];
-				if (config.getAttribute(attribute, "").equals(value)) { //$NON-NLS-1$
-					if (config.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, "").equals(element.getJavaProject().getElementName())) { //$NON-NLS-1$
-						candidateConfigs.add(config);
-					}
-				}
-			}
-		} catch (CoreException e) {
-			JUnitPlugin.log(e);
-		}
-		
-		// If there are no existing configs associated with the IType, create one.
-		// If there is exactly one config associated with the IType, return it.
-		// Otherwise, if there is more than one config associated with the IType, prompt the
-		// user to choose one.
-		int candidateCount= candidateConfigs.size();
-		if (candidateCount < 1) {
-			return createConfiguration(element);
-		} else if (candidateCount == 1) {
-			return (ILaunchConfiguration) candidateConfigs.get(0);
-		} else {
-			// Prompt the user to choose a config.  A null result means the user
-			// cancelled the dialog, in which case this method returns null,
-			// since cancelling the dialog should also cancel launching anything.
-			ILaunchConfiguration config= chooseConfiguration(candidateConfigs, mode);
-			if (config != null) {
-				return config;
-			}
-		}
-		return null;
-	}
-
-
-	/**
-	 * 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.
-	 */
-	protected ILaunchConfiguration chooseConfiguration(List configList, String mode) {
-		IDebugModelPresentation labelProvider = DebugUITools.newDebugModelPresentation();
-		ElementListSelectionDialog dialog= new ElementListSelectionDialog(getShell(), labelProvider);
-		dialog.setElements(configList.toArray());
-		dialog.setTitle(JUnitMessages.getString("LaunchTestAction.message.selectConfiguration")); //$NON-NLS-1$
-		if (mode.equals(ILaunchManager.DEBUG_MODE)) {
-			dialog.setMessage(JUnitMessages.getString("LaunchTestAction.message.selectDebugConfiguration")); //$NON-NLS-1$
-		} else {
-			dialog.setMessage(JUnitMessages.getString("LaunchTestAction.message.selectRunConfiguration")); //$NON-NLS-1$
-		}
-		dialog.setMultipleSelection(false);
-		int result= dialog.open();
-		labelProvider.dispose();
-		if (result == ElementListSelectionDialog.OK) {
-			return (ILaunchConfiguration)dialog.getFirstResult();
-		}
-		return null;		
-	}
-	
-	/**
-	 * Create & return a new configuration based on the specified <code>IType</code>.
-	 */
-	private ILaunchConfiguration createConfiguration(IJavaElement element) {
-		// create a launch configuration for a type
-		if (element instanceof IType) {
-			IType type= (IType)element;
-			return createConfiguration(
-				type.getJavaProject(),
-				type.getElementName(),
-				type.getFullyQualifiedName(),
-				""
-			);
-		}
-		// create a launch configuration for a container	
-		return createConfiguration(
-			element.getJavaProject(),
-			element.getElementName(),
-			"",
-			element.getHandleIdentifier()
-		);
-		
-	}
-
-	private ILaunchConfiguration createConfiguration(IJavaProject project, String name, String mainType, String container) {
-		ILaunchConfiguration config= null;
-		try {
-			ILaunchConfigurationType configType= getJUnitLaunchConfigType();
-			ILaunchConfigurationWorkingCopy wc = configType.newInstance(null, getLaunchManager().generateUniqueLaunchConfigurationNameFrom(name)); 
-			wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME, mainType);
-			wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, project.getElementName());
-			wc.setAttribute(IDebugUIConstants.ATTR_TARGET_DEBUG_PERSPECTIVE, IDebugUIConstants.PERSPECTIVE_DEFAULT);
-			wc.setAttribute(IDebugUIConstants.ATTR_TARGET_RUN_PERSPECTIVE, IDebugUIConstants.PERSPECTIVE_NONE);
-			wc.setAttribute(ILaunchConfiguration.ATTR_SOURCE_LOCATOR_ID, JavaUISourceLocator.ID_PROMPTING_JAVA_SOURCE_LOCATOR);
-			wc.setAttribute(JUnitBaseLaunchConfiguration.ATTR_KEEPRUNNING, false);
-			wc.setAttribute(JUnitBaseLaunchConfiguration.LAUNCH_CONTAINER_ATTR, container);
-			config= wc.doSave();		
-		} catch (CoreException ce) {
-			JUnitPlugin.log(ce);
-		}
-		return config;
-	}
-	
-	/**
-	 * Returns the local java launch config type
-	 */
-	protected ILaunchConfigurationType getJUnitLaunchConfigType() {
-		ILaunchManager lm= DebugPlugin.getDefault().getLaunchManager();
-		return lm.getLaunchConfigurationType(JUnitLaunchConfiguration.ID_JUNIT_APPLICATION);		
-	}	
-	
-	protected ILaunchManager getLaunchManager() {
-		return DebugPlugin.getDefault().getLaunchManager();
-	}
-	
-	/**
-	 * Convenience method to get the window that owns this action's Shell.
-	 */
-	protected Shell getShell() {
-		return JUnitPlugin.getActiveWorkbenchShell();
-	}
-}
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/launcher/JUnitMainTab.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/launcher/JUnitMainTab.java
deleted file mode 100644
index 6e1554f..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/launcher/JUnitMainTab.java
+++ /dev/null
@@ -1,580 +0,0 @@
-package org.eclipse.jdt.internal.junit.launcher;
-
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
- 
-import java.lang.reflect.InvocationTargetException;
-import java.net.MalformedURLException;
-
-import org.eclipse.core.resources.IWorkspaceRoot;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.debug.core.ILaunchConfiguration;
-import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
-import org.eclipse.jdt.core.IClassFile;
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IJavaModel;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.ISourceReference;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.internal.junit.ui.JUnitMessages;
-import org.eclipse.jdt.internal.junit.ui.JUnitPlugin;
-import org.eclipse.jdt.internal.junit.util.TestSearchEngine;
-import org.eclipse.jdt.internal.ui.util.BusyIndicatorRunnableContext;
-import org.eclipse.jdt.internal.ui.wizards.TypedElementSelectionValidator;
-import org.eclipse.jdt.internal.ui.wizards.TypedViewerFilter;
-import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
-import org.eclipse.jdt.ui.JavaElementLabelProvider;
-import org.eclipse.jdt.ui.JavaElementSorter;
-import org.eclipse.jdt.ui.StandardJavaElementContentProvider;
-import org.eclipse.jface.dialogs.ProgressMonitorDialog;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerFilter;
-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.events.SelectionListener;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.dialogs.ElementListSelectionDialog;
-import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
-import org.eclipse.ui.dialogs.SelectionDialog;
-
-/**
- * This tab appears in the LaunchConfigurationDialog for launch configurations that
- * require Java-specific launching information such as a main type and JRE.
- */
-public class JUnitMainTab extends JUnitLaunchConfigurationTab {
-	
-	// Project UI widgets
-	private Label fProjLabel;
-	private Text fProjText;
-	private Button fProjButton;
-	private Button fKeepRunning;
-	
-	// Test class UI widgets
-	private Label fTestLabel;
-	private Text fTestText;
-	private Button fSearchButton;
-	private final Image fTestIcon= createImage("obj16/test.gif");
-
-	private Text fContainerText;
-	private IJavaElement fContainerElement;
-
-	private Button fContainerSearchButton;
-	private Button fTestContainerRadioButton;
-	private Button fTestRadioButton; 
-				
-	/**
-	 * @see ILaunchConfigurationTab#createControl(TabItem)
-	 */
-	public void createControl(Composite parent) {		
-		Composite comp = new Composite(parent, SWT.NONE);
-		setControl(comp);
-
-		GridLayout topLayout = new GridLayout();
-		topLayout.numColumns= 2;
-		comp.setLayout(topLayout);		
-		
-		new Label(comp, SWT.NONE);
-		
-		createProjectGroup(comp);
-		createTestSelectionGroup(comp);
-		createTestContainerSelectionGroup(comp);
-		createKeepAliveGroup(comp);
-	}
-
-	private void createTestContainerSelectionGroup(Composite comp) {
-		GridData gd;
-		fTestContainerRadioButton= new Button(comp, SWT.RADIO);
-		fTestContainerRadioButton.setText("All Tests in Project, Source Folder or Package:");
-		gd = new GridData();
-		gd.horizontalSpan = 2;
-		fTestContainerRadioButton.setLayoutData(gd);
-		fTestContainerRadioButton.addSelectionListener(new SelectionListener() {
-			public void widgetSelected(SelectionEvent e) {
-				if (fTestContainerRadioButton.getSelection()) {
-					testModeChanged();
-					fTestText.setText("");
-				}
-			}
-			public void widgetDefaultSelected(SelectionEvent e) {
-			}
-		});
-		
-		fContainerText = new Text(comp, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY);
-		gd = new GridData(GridData.FILL_HORIZONTAL);
-		gd.horizontalIndent= 20;
-		fContainerText.setLayoutData(gd);
-		fContainerText.addModifyListener(new ModifyListener() {
-			public void modifyText(ModifyEvent evt) {
-				updateLaunchConfigurationDialog();
-			}
-		});
-		
-		fContainerSearchButton = new Button(comp, SWT.PUSH);
-		fContainerSearchButton.setText(JUnitMessages.getString("JUnitMainTab.label.search")); //$NON-NLS-1$
-		fContainerSearchButton.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent evt) {
-				handleContainerSearchButtonSelected();
-			}
-		});
-		setButtonGridData(fContainerSearchButton);	
-	}
-
-	private void handleContainerSearchButtonSelected() {
-		IJavaElement javaElement= chooseContainer(fContainerElement);
-		if (javaElement != null) {
-			fContainerElement= javaElement;
-			fContainerText.setText(javaElement.getElementName());
-		}
-	}
-
-	public void createKeepAliveGroup(Composite comp) {
-		GridData gd;
-		fKeepRunning = new Button(comp, SWT.CHECK);
-		fKeepRunning.setText(JUnitMessages.getString("JUnitMainTab.label.keeprunning")); //$NON-NLS-1$
-		gd= new GridData();
-		gd.horizontalAlignment= GridData.FILL;
-		gd.horizontalSpan= 2;
-		fKeepRunning.setLayoutData(gd);
-	}
-
-	public void createTestSelectionGroup(Composite comp) {
-		GridData gd;
-		fTestRadioButton= new Button(comp, SWT.RADIO /*| SWT.LEFT*/);
-		fTestRadioButton.setText(JUnitMessages.getString("JUnitMainTab.label.test"));
-		gd = new GridData();
-		gd.horizontalSpan = 2;
-		fTestRadioButton.setLayoutData(gd); 
-		fTestRadioButton.addSelectionListener(new SelectionListener() {
-			public void widgetSelected(SelectionEvent e) {
-				if (fTestRadioButton.getSelection()) {
-					testModeChanged();
-					fContainerText.setText("");
-					fContainerElement= null;
-				}
-			}
-			public void widgetDefaultSelected(SelectionEvent e) {
-			}
-		});
-	
-		fTestText = new Text(comp, SWT.SINGLE | SWT.BORDER);
-		gd = new GridData(GridData.FILL_HORIZONTAL);
-		gd.horizontalIndent= 20;
-		fTestText.setLayoutData(gd);
-		fTestText.addModifyListener(new ModifyListener() {
-			public void modifyText(ModifyEvent evt) {
-				updateLaunchConfigurationDialog();
-			}
-		});
-		
-		fSearchButton = new Button(comp, SWT.PUSH);
-		fSearchButton.setText(JUnitMessages.getString("JUnitMainTab.label.search")); //$NON-NLS-1$
-		fSearchButton.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent evt) {
-				handleSearchButtonSelected();
-			}
-		});
-		setButtonGridData(fSearchButton);
-	}
-
-	public void createProjectGroup(Composite comp) {
-		GridData gd;
-		fProjLabel = new Label(comp, SWT.NONE);
-		fProjLabel.setText(JUnitMessages.getString("JUnitMainTab.label.project")); //$NON-NLS-1$
-		gd= new GridData();
-		gd.horizontalSpan = 2;
-		fProjLabel.setLayoutData(gd);
-		
-		fProjText= new Text(comp, SWT.SINGLE | SWT.BORDER);
-		gd = new GridData(GridData.FILL_HORIZONTAL);
-		fProjText.setLayoutData(gd);
-		fProjText.addModifyListener(new ModifyListener() {
-			public void modifyText(ModifyEvent evt) {
-				updateLaunchConfigurationDialog();
-			}
-		});
-		
-		fProjButton = new Button(comp, SWT.PUSH);
-		fProjButton.setText(JUnitMessages.getString("JUnitMainTab.label.browse")); //$NON-NLS-1$
-		fProjButton.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent evt) {
-				handleProjectButtonSelected();
-			}
-		});
-		setButtonGridData(fProjButton); 
-	}
-	
-	protected static Image createImage(String path) {
-		try {
-			ImageDescriptor id= ImageDescriptor.createFromURL(JUnitPlugin.makeIconFileURL(path));
-			return id.createImage();
-		} catch (MalformedURLException e) {
-			// fall through
-		}  
-		return null;
-	}
-
-
-	/**
-	 * @see ILaunchConfigurationTab#initializeFrom(ILaunchConfiguration)
-	 */
-	public void initializeFrom(ILaunchConfiguration config) {
-		updateProjectFromConfig(config);
-		String containerHandle= "";
-		try {
-			containerHandle = config.getAttribute(JUnitBaseLaunchConfiguration.LAUNCH_CONTAINER_ATTR, ""); //$NON-NLS-1$
-		} catch (CoreException ce) {			
-		}
-		
-		if (containerHandle.length() > 0)
-			updateTestContainerFromConfig(config);
-		else
-			updateTestTypeFromConfig(config);
-		updateKeepRunning(config);
-	}
-
-	private void updateKeepRunning(ILaunchConfiguration config) {
-		boolean running= false;
-		try {
-			running= config.getAttribute(JUnitBaseLaunchConfiguration.ATTR_KEEPRUNNING, false);
-		} catch (CoreException ce) {
-		}
-		fKeepRunning.setSelection(running);	 	
-	}
-	
-	protected void updateProjectFromConfig(ILaunchConfiguration config) {
-		String projectName= ""; //$NON-NLS-1$
-		try {
-			projectName = config.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, ""); //$NON-NLS-1$
-		} catch (CoreException ce) {
-		}
-		fProjText.setText(projectName);
-	}
-	
-	protected void updateTestTypeFromConfig(ILaunchConfiguration config) {
-		String testTypeName= ""; //$NON-NLS-1$
-		try {
-			testTypeName = config.getAttribute(IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME, ""); //$NON-NLS-1$
-		} catch (CoreException ce) {			
-		}
-		fTestRadioButton.setSelection(true);
-		setEnableSingleTestGroup(true);
-		setEnableContainerTestGroup(false);		
-		fTestContainerRadioButton.setSelection(false);
-		fTestText.setText(testTypeName);
-		fContainerText.setText("");
-	}
-
-	protected void updateTestContainerFromConfig(ILaunchConfiguration config) {
-		String containerHandle= "";
-		try {
-			containerHandle = config.getAttribute(JUnitBaseLaunchConfiguration.LAUNCH_CONTAINER_ATTR, ""); //$NON-NLS-1$
-			if (containerHandle.length() > 0) {
-				fContainerElement= JavaCore.create(containerHandle);
-			}
-		} catch (CoreException ce) {			
-		}
-		fTestContainerRadioButton.setSelection(true);
-		setEnableSingleTestGroup(false);
-		setEnableContainerTestGroup(true);				
-		fTestRadioButton.setSelection(false);
-		if (fContainerElement != null) 
-			fContainerText.setText(fContainerElement.getElementName());
-		fTestText.setText("");
-	}
-	/**
-	 * @see ILaunchConfigurationTab#performApply(ILaunchConfigurationWorkingCopy)
-	 */
-	public void performApply(ILaunchConfigurationWorkingCopy config) {
-		config.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, (String)fProjText.getText());
-		if (fTestContainerRadioButton.getSelection() && fContainerElement != null) 
-			config.setAttribute(JUnitBaseLaunchConfiguration.LAUNCH_CONTAINER_ATTR, fContainerElement.getHandleIdentifier());
-		else 
-			config.setAttribute(IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME, (String)fTestText.getText());
-		config.setAttribute(JUnitBaseLaunchConfiguration.ATTR_KEEPRUNNING, fKeepRunning.getSelection());
-	}
-
-	/**
-	 * @see ILaunchConfigurationTab#dispose()
-	 */
-	public void dispose() {
-		super.dispose();
-		fTestIcon.dispose();
-	}
-	/**
-	 * @see AbstractLaunchConfigurationTab#getImage()
-	 */
-	public Image getImage() {
-		return fTestIcon;
-	}
-
-	/**
-	 * Show a dialog that lists all main types
-	 */
-	protected void handleSearchButtonSelected() {
-		Shell shell = getShell();
-		
-		IJavaProject javaProject = getJavaProject();
-		SelectionDialog dialog = new TestSelectionDialog(shell, new ProgressMonitorDialog(shell), javaProject);
-		dialog.setTitle(JUnitMessages.getString("JUnitMainTab.testdialog.title")); //$NON-NLS-1$
-		dialog.setMessage(JUnitMessages.getString("JUnitMainTab.testdialog.message")); //$NON-NLS-1$
-		if (dialog.open() == SelectionDialog.CANCEL) {
-			return;
-		}
-		
-		Object[] results = dialog.getResult();
-		if ((results == null) || (results.length < 1)) {
-			return;
-		}		
-		IType type = (IType)results[0];
-		
-		if (type != null) {
-			fTestText.setText(type.getFullyQualifiedName());
-			javaProject = type.getJavaProject();
-			fProjText.setText(javaProject.getElementName());
-		}
-	}
-		
-	/**
-	 * Show a dialog that lets the user select a project.  This in turn provides
-	 * context for the main type, allowing the user to key a main type name, or
-	 * constraining the search for main types to the specified project.
-	 */
-	protected void handleProjectButtonSelected() {
-		IJavaProject project = chooseJavaProject();
-		if (project == null) {
-			return;
-		}
-		
-		String projectName = project.getElementName();
-		fProjText.setText(projectName);		
-	}
-	
-	/**
-	 * Realize a Java Project selection dialog and return the first selected project,
-	 * or null if there was none.
-	 */
-	protected IJavaProject chooseJavaProject() {
-		IJavaProject[] projects;
-		try {
-			projects= JavaCore.create(getWorkspaceRoot()).getJavaProjects();
-		} catch (JavaModelException e) {
-			JUnitPlugin.log(e.getStatus());
-			projects= new IJavaProject[0];
-		}
-		
-		ILabelProvider labelProvider= new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT);
-		ElementListSelectionDialog dialog= new ElementListSelectionDialog(getShell(), labelProvider);
-		dialog.setTitle(JUnitMessages.getString("JUnitMainTab.projectdialog.title")); //$NON-NLS-1$
-		dialog.setMessage(JUnitMessages.getString("JUnitMainTab.projectdialog.message")); //$NON-NLS-1$
-		dialog.setElements(projects);
-		
-		IJavaProject javaProject = getJavaProject();
-		if (javaProject != null) {
-			dialog.setInitialSelections(new Object[] { javaProject });
-		}
-		if (dialog.open() == ElementListSelectionDialog.OK) {			
-			return (IJavaProject) dialog.getFirstResult();
-		}			
-		return null;		
-	}
-	
-	/**
-	 * Return the IJavaProject corresponding to the project name in the project name
-	 * text field, or null if the text does not match a project name.
-	 */
-	protected IJavaProject getJavaProject() {
-		String projectName = fProjText.getText().trim();
-		if (projectName.length() < 1) {
-			return null;
-		}
-		return getJavaModel().getJavaProject(projectName);		
-	}
-	
-	/**
-	 * Convenience method to get the workspace root.
-	 */
-	private IWorkspaceRoot getWorkspaceRoot() {
-		return ResourcesPlugin.getWorkspace().getRoot();
-	}
-	
-	/**
-	 * Convenience method to get access to the java model.
-	 */
-	private IJavaModel getJavaModel() {
-		return JavaCore.create(getWorkspaceRoot());
-	}
-
-	/**
-	 * @see ILaunchConfigurationTab#isValid(ILaunchConfiguration)
-	 */
-	public boolean isValid(ILaunchConfiguration config) {		
-		setErrorMessage(null);
-		setMessage(null);
-		
-		String projectName = fProjText.getText().trim();
-		if (projectName.length() > 0) {
-			if (!ResourcesPlugin.getWorkspace().getRoot().getProject(projectName).exists()) {
-				setErrorMessage(JUnitMessages.getString("JUnitMainTab.error.projectnotexists")); //$NON-NLS-1$
-				return false;
-			}
-		}
-
-		String testName = fTestText.getText().trim();
-		if (testName.length() == 0 && fContainerElement == null) {
-			setErrorMessage(JUnitMessages.getString("JUnitMainTab.error.testnotdefined")); //$NON-NLS-1$
-			return false;
-		}
-		// TO DO should verify that test exists
-		return true;
-	}
-	
-	private void testModeChanged() {
-		boolean isSingleTestMode= fTestRadioButton.getSelection();
-		setEnableSingleTestGroup(isSingleTestMode);
-		setEnableContainerTestGroup(!isSingleTestMode);
-	}
-
-	private void setEnableContainerTestGroup(boolean enabled) {
-		fContainerSearchButton.setEnabled(enabled);
-		fContainerText.setEnabled(enabled);
-	}
-
-	private void setEnableSingleTestGroup(boolean enabled) {
-		fSearchButton.setEnabled(enabled);
-		fTestText.setEnabled(enabled);
-	}
-
-	/**
-	 * @see ILaunchConfigurationTab#setDefaults(ILaunchConfigurationWorkingCopy)
-	 */
-	public void setDefaults(ILaunchConfigurationWorkingCopy config) {
-		IJavaElement javaElement = getContext();
-		if (javaElement != null) {
-			initializeJavaProject(javaElement, config);
-		} else {
-			// We set empty attributes for project & main type so that when one config is
-			// compared to another, the existence of empty attributes doesn't cause an
-			// incorrect result (the performApply() method can result in empty values
-			// for these attributes being set on a config if there is nothing in the
-			// corresponding text boxes)
-			config.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, ""); //$NON-NLS-1$
-			config.setAttribute(JUnitBaseLaunchConfiguration.LAUNCH_CONTAINER_ATTR, ""); //$NON-NLS-1$
-		}
-		initializeTestAttributes(javaElement, config);
-	}
-
-	private void initializeTestAttributes(IJavaElement javaElement, ILaunchConfigurationWorkingCopy config) {
-		if (javaElement.getElementType() < IJavaElement.COMPILATION_UNIT) 
-			initializeTestContainer(javaElement, config);
-		else
-			initializeTestType(javaElement, config);
-	}
-
-	private void initializeTestContainer(IJavaElement javaElement, ILaunchConfigurationWorkingCopy config) {
-		config.setAttribute(JUnitBaseLaunchConfiguration.LAUNCH_CONTAINER_ATTR, javaElement.getHandleIdentifier());
-		initializeName(config, javaElement.getElementName());
-	}
-
-	private void initializeName(ILaunchConfigurationWorkingCopy config, String name) {
-		if (name == null) {
-			name= "";
-		}
-		if (name.length() > 0) {
-			int index = name.lastIndexOf('.');
-			if (index > 0) {
-				name = name.substring(index + 1);
-			}
-			name= getLaunchConfigurationDialog().generateName(name);
-			config.rename(name);
-		}
-	}
-
-	/**
-	 * Set the main type & name attributes on the working copy based on the IJavaElement
-	 */
-	protected void initializeTestType(IJavaElement javaElement, ILaunchConfigurationWorkingCopy config) {
-		String name= ""; //$NON-NLS-1$
-		try {
-			// we only do a search for compilation units or class files or 
-			// or source references
-			if ((javaElement instanceof ICompilationUnit) || 
-				(javaElement instanceof ISourceReference) ||
-				(javaElement instanceof IClassFile)) {
-		
-				IType[] types = TestSearchEngine.findTests(new BusyIndicatorRunnableContext(), new Object[] {javaElement});
-				if ((types == null) || (types.length < 1)) {
-					return;
-				}
-				// Simply grab the first main type found in the searched element
-				name = types[0].getFullyQualifiedName();
-			}	
-		} catch (InterruptedException ie) {
-		} catch (InvocationTargetException ite) {
-		}
-		if (name == null)
-			name= "";
-		config.setAttribute(IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME, name);
-		initializeName(config, name);
-	}
-	
-	/**
-	 * @see ILaunchConfigurationTab#getName()
-	 */
-	public String getName() {
-		return JUnitMessages.getString("JUnitMainTab.tab.label"); //$NON-NLS-1$
-	}
-	
-	private IJavaElement chooseContainer(IJavaElement initElement) {
-		Class[] acceptedClasses= new Class[] { IPackageFragmentRoot.class, IJavaProject.class, IPackageFragment.class };
-		TypedElementSelectionValidator validator= new TypedElementSelectionValidator(acceptedClasses, false) {
-			public boolean isSelectedValid(Object element) {
-				return true;
-			}
-		};
-		
-		acceptedClasses= new Class[] { IJavaModel.class, IPackageFragmentRoot.class, IJavaProject.class, IPackageFragment.class };
-		ViewerFilter filter= new TypedViewerFilter(acceptedClasses) {
-			public boolean select(Viewer viewer, Object parent, Object element) {
-				return super.select(viewer, parent, element);
-			}
-		};		
-
-		StandardJavaElementContentProvider provider= new StandardJavaElementContentProvider();
-		ILabelProvider labelProvider= new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT); 
-		ElementTreeSelectionDialog dialog= new ElementTreeSelectionDialog(getShell(), labelProvider, provider);
-		dialog.setValidator(validator);
-		dialog.setSorter(new JavaElementSorter());
-		dialog.setTitle("Folder Selection"); 
-		dialog.setMessage("Choose a Project, Source Folder or Package:"); 
-		dialog.addFilter(filter);
-		dialog.setInput(JavaCore.create(getWorkspaceRoot()));
-		dialog.setInitialSelection(initElement);
-		dialog.setAllowMultiple(false);
-		
-		if (dialog.open() == ElementTreeSelectionDialog.OK) {
-			Object element= dialog.getFirstResult();
-			return (IJavaElement)element;
-		}
-		return null;
-	}
-}
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/launcher/JUnitTabGroup.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/launcher/JUnitTabGroup.java
deleted file mode 100644
index b8af4f9..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/launcher/JUnitTabGroup.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.eclipse.jdt.internal.junit.launcher;
-
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
- 
-import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
-import org.eclipse.debug.ui.AbstractLaunchConfigurationTabGroup;
-import org.eclipse.debug.ui.CommonTab;
-import org.eclipse.debug.ui.IDebugUIConstants;
-import org.eclipse.debug.ui.ILaunchConfigurationDialog;
-import org.eclipse.debug.ui.ILaunchConfigurationTab;
-import org.eclipse.jdt.debug.ui.launchConfigurations.JavaArgumentsTab;
-import org.eclipse.jdt.debug.ui.launchConfigurations.JavaClasspathTab;
-import org.eclipse.jdt.debug.ui.launchConfigurations.JavaJRETab;
- 
-public class JUnitTabGroup extends AbstractLaunchConfigurationTabGroup {
-	/**
-	 * @see ILaunchConfigurationTabGroup#createTabs(ILaunchConfigurationDialog, String)
-	 */
-	public void createTabs(ILaunchConfigurationDialog dialog, String mode) {		
-		ILaunchConfigurationTab[] tabs= new ILaunchConfigurationTab[] {
-			new JUnitMainTab(),
-			new JavaArgumentsTab(),
-			new JavaClasspathTab(),
-			new JavaJRETab(),
-			new CommonTab()
-		};
-		setTabs(tabs);
-	}
-
-	/**
-	 * @see ILaunchConfigurationTabGroup#setDefaults(ILaunchConfigurationWorkingCopy)
-	 */
-	public void setDefaults(ILaunchConfigurationWorkingCopy config) {
-		super.setDefaults(config); 
-		config.setAttribute(IDebugUIConstants.ATTR_TARGET_RUN_PERSPECTIVE, IDebugUIConstants.PERSPECTIVE_NONE);
-	}
-}
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/launcher/TestSelectionDialog.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/launcher/TestSelectionDialog.java
deleted file mode 100644
index 7702fad..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/launcher/TestSelectionDialog.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package org.eclipse.jdt.internal.junit.launcher;
-
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
- 
-import java.lang.reflect.InvocationTargetException;
-
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.dialogs.TwoPaneElementSelector;
-
-import org.eclipse.jface.operation.IRunnableContext;
-import org.eclipse.jface.util.Assert;
-
-import org.eclipse.jdt.internal.junit.util.TestSearchEngine;
-
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IType;
-
-import org.eclipse.jdt.ui.JavaElementLabelProvider;
-
-import org.eclipse.jdt.internal.junit.ui.JUnitPlugin;
-
-/**
- * A dialog to select a test class or a test suite from a list of types.
- */
-public class TestSelectionDialog extends TwoPaneElementSelector {
-
-	private IRunnableContext fRunnableContext;
-	private IJavaProject fProject;
-	
-	private static class PackageRenderer extends JavaElementLabelProvider {
-		public PackageRenderer() {
-			super(JavaElementLabelProvider.SHOW_PARAMETERS | JavaElementLabelProvider.SHOW_POST_QUALIFIED | JavaElementLabelProvider.SHOW_ROOT);	
-		}
-
-		public Image getImage(Object element) {
-			return super.getImage(((IType)element).getPackageFragment());
-		}
-		
-		public String getText(Object element) {
-			return super.getText(((IType)element).getPackageFragment());
-		}
-	}
-	
-	/**
-	 * Constructor.
-	 */
-	public TestSelectionDialog(Shell shell, IRunnableContext context, IJavaProject project)
-	{
-		super(shell, new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_BASICS | JavaElementLabelProvider.SHOW_OVERLAY_ICONS), 
-			new PackageRenderer());
-
-		Assert.isNotNull(context);
-		Assert.isNotNull(project);
-
-		fRunnableContext= context;
-		fProject= project;
-	}
-	
-	/**
-	 * @see Windows#configureShell
-	 */
-	protected void configureShell(Shell newShell) {
-		super.configureShell(newShell);
-		//WorkbenchHelp.setHelp(newShell, new Object[] { IJavaHelpContextIds.MAINTYPE_SELECTION_DIALOG });
-	}
-
-	/*
-	 * @see Window#open()
-	 */
-	public int open() {
-		IType[] types= new IType[0];
-		try {
-			types= TestSearchEngine.findTests(fRunnableContext, new Object[] {fProject});
-		} catch (InterruptedException e) {
-			return CANCEL;
-		} catch (InvocationTargetException e) {
-			JUnitPlugin.log(e.getTargetException());
-			return CANCEL;
-		}
-		
-		setElements(types);
-		return super.open();
-	}
-	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/runner/ITestRunListener.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/runner/ITestRunListener.java
deleted file mode 100644
index 98944e9..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/runner/ITestRunListener.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.runner;
-  
-/**
- * A listener interface for observing the
- * execution of a test run.
- */
- public interface ITestRunListener {
- 	/**
- 	 * Test passed.
- 	 */
- 	public static final int STATUS_OK= 0;
- 	/**
- 	 * Test had an error.
- 	 */
- 	public static final int STATUS_ERROR= 1;
- 	/**
- 	 * Test had a failure.
- 	 */
- 	public static final int STATUS_FAILURE= 2;
- 	/**
- 	 * A test run has started
- 	 */
-	public void testRunStarted(int testCount);
-	/**
-	 * A test run ended.
-	 */
-	public void testRunEnded(long elapsedTime);
-	/**
-	 * A test run was stopped before it ended
-	 */
-	public void testRunStopped(long elapsedTime);
-	/**
-	 * A test started
-	 */
-	public void testStarted(String testName);
-	/**
-	 * A test ended
-	 */
-	public void testEnded(String testName);
-	/**
-	 * A test failed.
-	 */
-	public void testFailed(int status, String testName, String trace);		
-	/**
-	 * Add an entry to the tree.
-	 * The format of the string is: 
-	 * testName","isSuite","testcount
-	 * Example: "testPass(junit.tests.MyTest),false,1"
-	 */ 
-	public void testTreeEntry(String entry);
-	/**
-	 * The test runner VM has terminated
-	 */
-	public void testRunTerminated();
-	
-	/**
-	 * A test was reran.
-	 */
-	public void testReran(String testClass, String testName, int status, String trace);
-}
-
-
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/runner/MessageIds.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/runner/MessageIds.java
deleted file mode 100644
index 9e97ddc..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/runner/MessageIds.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.runner;
-
-/**
- * Message identifiers for messages sent by the
- * RemoteTestRunner. 
- * 
- * @see RemoteTestRunner
- */
-public class MessageIds { 
-	/**
-	 * The header length of a message, all messages
-	 * have a fixed header length
-	 */
-	public static final int MSG_HEADER_LENGTH= 8;
-	
-	/**
-	 * Notification that a test trace has started.
-	 * The end of the trace is signaled by a Trace_END
-	 * message. In between the TRACE_START and TRACE_END
-	 * the stack trace is submitted as multiple lines.
-	 */
-	public static final String TRACE_START= "%TRACES "; //$NON-NLS-1$
-	/**
-	 * Notification that a trace for a reran test has started.
-	 * The end of the trace is signaled by a RTrace_END
-	 * message.
-	 */
-	public static final String RTRACE_START= "%RTRACES"; //$NON-NLS-1$
-	/**
-	 * Notification that a trace ends.
-	 */
-	public static final String TRACE_END=   "%TRACEE "; //$NON-NLS-1$
-	/**
-	 * Notification that a trace of a reran trace ends.
-	 */
-	public static final String RTRACE_END=  "%RTRACEE"; //$NON-NLS-1$
-	/**
-	 * Notification that a test run has started. 
-	 * MessageIds.TEST_RUN_START+testCount.toString
-	 */
-	public static final String TEST_RUN_START=  "%TESTC  "; //$NON-NLS-1$
-	/**
-	 * Notification that a test has started.
-	 * MessageIds.TEST_START + testName
-	 */
-	public static final String TEST_START=  "%TESTS  ";		 //$NON-NLS-1$
-	/**
-	 * Notification that a test has started.
-	 * TEST_END + testName
-	 */
-	public static final String TEST_END=    "%TESTE  ";		 //$NON-NLS-1$
-	/**
-	 * Notification that a test had a error.
-	 * TEST_ERROR + testName.
-	 * After the notification follows the stack trace.
-	 */
-	public static final String TEST_ERROR=  "%ERROR  ";		 //$NON-NLS-1$
-	/**
-	 * Notification that a test had a failure.
-	 * TEST_FAILED + testName.
-	 * After the notification follows the stack trace.
-	 */
-	public static final String TEST_FAILED= "%FAILED ";	 //$NON-NLS-1$
-	/**
-	 * Notification that a test run has ended.
-	 * TEST_RUN_END+elapsedTime.toString().
-	 */ 	
-	public static final String TEST_RUN_END="%RUNTIME";	 //$NON-NLS-1$
-	/**
-	 * Notification that a test run was successfully stopped.
-	 */ 
-	public static final String TEST_STOPPED="%TSTSTP "; //$NON-NLS-1$
-	/**
-	 * Notification that a test was reran.
-	 * TEST_RERAN+testClass+" "+testName+STATUS.
-	 * Status = "OK" or "FAILURE".
-	 */ 
-	public static final String TEST_RERAN=  "%TSTRERN"; //$NON-NLS-1$
-	/**
-	 * Notification about a test inside the test suite.
-	 * TEST_TREE+testName","isSuite","testcount
-	 * isSuite = "true" or "false"
-	 */ 
-	public static final String TEST_TREE="%TSTTREE"; //$NON-NLS-1$
-	/**
-	 * Request to stop the current test run.
-	 */
-	public static final String TEST_STOP=	">STOP   "; //$NON-NLS-1$
-	/**
-	 * Request to rerun a test.
-	 * TEST_RERUN+ClassName+" "+testName
-	 */
-	public static final String TEST_RERUN=	">RERUN  "; //$NON-NLS-1$
-}
-
-
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/runner/RemoteTestRunner.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/runner/RemoteTestRunner.java
deleted file mode 100644
index 749b2c8..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/runner/RemoteTestRunner.java
+++ /dev/null
@@ -1,593 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.runner;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.net.Socket;
-import java.util.ArrayList;
-
-import java.util.List;
-import junit.extensions.TestDecorator;
-import junit.framework.AssertionFailedError;
-import junit.framework.Test;
-import junit.framework.TestFailure;
-import junit.framework.TestListener;
-import junit.framework.TestResult;
-import junit.framework.TestSuite;
-import org.eclipse.jdt.internal.junit.ui.JUnitMessages;
-
-/**
- * A TestRunner that reports results via a socket connection.
- * See MessageIds for more information about the protocl.
- */
-public class RemoteTestRunner implements TestListener {
-	/**
-	 * Holder for information for a rerun request
-	 */
-	private static class RerunRequest {
-		String fClassName;
-		String fTestName;
-		
-		public RerunRequest(String className, String testName) {
-			fClassName= className;
-			fTestName= testName;
-		}
-	}
-	
-	private static final String SUITE_METHODNAME= "suite";	 //$NON-NLS-1$
-	/**
-	 * The name of the test classes to be executed
-	 */
-	private String[] fTestClassNames;
-	/**
-	 * The current test result
-	 */
-	private TestResult fTestResult;
-
-	/**
-	 * The client socket.
-	 */
-	private Socket fClientSocket;
-	/**
-	 * Print writer for sending messages
-	 */
-	private PrintWriter fWriter;
-	/**
-	 * Reader for incoming messages
-	 */
-	private BufferedReader fReader;
-	/**
-	 * Host to connect to, default is the localhost
-	 */
-	private String fHost= ""; //$NON-NLS-1$
-	/**
-	 * Port to connect to.
-	 */
-	private int fPort= -1;
-	/**
-	 * Is the debug mode enabled?
-	 */
-	private boolean fDebugMode= false;	
-	/**
-	 * Keep the test run server alive after a test run has finished.
-	 * This allows to rerun tests.
-	 */
-	private boolean fKeepAlive= false;
-	/**
-	 * Has the server been stopped
-	 */
-	private boolean fStopped= false;
-	/**
-	 * Queue of rerun requests.
-	 */
-	private List fRerunRequests= new ArrayList(10);
-	/**
-	 * Reader thread that processes messages from the client.
-	 */
-	private class ReaderThread extends Thread {
-		public ReaderThread() {
-			super("ReaderThread"); //$NON-NLS-1$
-		}
-
-		public void run(){
-			try { 
-				String message= null; 
-				while (true) { 
-					if ((message= fReader.readLine()) != null) {
-						
-						if (message.startsWith(MessageIds.TEST_STOP)){
-							fStopped= true;
-							RemoteTestRunner.this.stop();
-							synchronized(RemoteTestRunner.this) {
-								RemoteTestRunner.this.notifyAll();
-							}
-							break;
-						}
-						
-						else if (message.startsWith(MessageIds.TEST_RERUN)) {
-							String arg= message.substring(MessageIds.MSG_HEADER_LENGTH);
-							int c= arg.indexOf(" "); //$NON-NLS-1$
-							synchronized(RemoteTestRunner.this) {
-								fRerunRequests.add(new RerunRequest(arg.substring(0, c), arg.substring(c+1)));
-								RemoteTestRunner.this.notifyAll();
-							}
-						}
-					}
-				} 
-			} catch (Exception e) {
-				RemoteTestRunner.this.stop();
-			}
-		}
-	}	
-	
-	/** 
-	 * The main entry point.
-	 * Parameters<pre>
-	 * -classnames: the name of the test suite class
-     * -host: the host to connect to - default local host
-     * -port: the port to connect to, mandatory argument
-     * -keepalive: keep the process alive after a test run
-     * </pre>
-     */
-	public static void main(String[] args) {
-		// hack to pass the AllTests of JUnit
-		// force static initialization of BaseTestRunner 
-		// by creating a junit.textui.TestRunner and free
-		// it immediately.		
-		RemoteTestRunner testRunServer= new RemoteTestRunner();
-		testRunServer.init(args);
-		testRunServer.run();
-		// fix for 14434
-		System.exit(0);
-	}
-	
-	/**
-	 * Parse command line arguments. Hook for subclasses to process
-	 * additional arguments.
-	 */
-	protected void init(String[] args) {
-		defaultInit(args);		
-	}	
-	
-	/**
-	 * The class loader to be used for loading tests.
-	 * Subclasses may override to use another class loader.
-	 */
-	protected ClassLoader getClassLoader() {
-		return getClass().getClassLoader();
-	}
-	
-	/**
-	 * Process the default arguments.
-	 */
-	protected final void defaultInit(String[] args) {
-		for(int i= 0; i < args.length; i++) {
-			if(args[i].toLowerCase().equals("-classnames") || args[i].toLowerCase().equals("-classname")){ //$NON-NLS-1$ //$NON-NLS-2$
-				ArrayList list= new ArrayList();
-				for (int j= i+1; j < args.length; j++) {
-					if (args[j].startsWith("-")) //$NON-NLS-1$
-						break;
-					list.add(args[j]);
-				}
-				fTestClassNames= (String[]) list.toArray(new String[list.size()]);
-			}	
-			else if(args[i].toLowerCase().equals("-testnamefile")) {
-				String testNameFile= args[i+1];
-				try {
-					readTestNames(testNameFile);
-				} catch (IOException e) {
-					throw new IllegalArgumentException("Cannot read testname file.");		
-				}
-				i++;
-			
-			} else if(args[i].toLowerCase().equals("-port")) { //$NON-NLS-1$
-				fPort= Integer.parseInt(args[i+1]);
-				i++;
-			}
-			else if(args[i].toLowerCase().equals("-host")) { //$NON-NLS-1$
-				fHost= args[i+1];
-				i++;
-			}
-			else if(args[i].toLowerCase().equals("-keepalive")) { //$NON-NLS-1$
-				fKeepAlive= true;
-			}
-			else if(args[i].toLowerCase().equals("-debugging") || args[i].toLowerCase().equals("-debug")){ //$NON-NLS-1$ //$NON-NLS-2$
-				fDebugMode= true;
-			}
-		}
-		if(fTestClassNames == null || fTestClassNames.length == 0)
-			throw new IllegalArgumentException(JUnitMessages.getString("RemoteTestRunner.error.classnamemissing")); //$NON-NLS-1$
-
-		if (fPort == -1)
-			throw new IllegalArgumentException(JUnitMessages.getString("RemoteTestRunner.error.portmissing")); //$NON-NLS-1$
-		if (fDebugMode)
-			System.out.println("keepalive "+fKeepAlive); //$NON-NLS-1$
-	}
-
-	private void readTestNames(String testNameFile) throws IOException {
-		BufferedReader br= new BufferedReader(new FileReader(new File(testNameFile)));
-		try {
-			String line;
-			ArrayList list= new ArrayList();
-			while ((line= br.readLine()) != null) {
-				list.add(line);
-			}
-			fTestClassNames= (String[]) list.toArray(new String[list.size()]);
-		}
-		finally {
-			br.close();
-		}
-	}
-
-	
-	/**
-	 * Connects to the remote ports and runs the tests.
-	 */
-	protected void run() {
-		if (!connect()) {
-			return;
-		} 
-			
-		fTestResult= new TestResult();
-		fTestResult.addListener(this);
-		runTests(fTestClassNames);
-		fTestResult.removeListener(this);
-		
-		if (fTestResult != null) {
-			fTestResult.stop();
-			fTestResult= null;
-		}
-		if (fKeepAlive)
-			waitForReruns();
-			
-		shutDown();
-		
-	}
-
-	/**
-	 * Waits for rerun requests until an explicit stop request
-	 */
-	private synchronized void waitForReruns() {
-		while (!fStopped) {
-			try {
-				wait();
-				if (!fStopped && fRerunRequests.size() > 0) {
-					RerunRequest r= (RerunRequest)fRerunRequests.remove(0);
-					rerunTest(r.fClassName, r.fTestName);
-				}
-			} catch (InterruptedException e) {
-			}
-		}
-	}
-	
-	/**
-	 * Returns the Test corresponding to the given suite. 
-	 */
-	private Test getTest(String suiteClassName) {
-		Class testClass= null;
-		try {
-			testClass= loadSuiteClass(suiteClassName);
-		} catch (ClassNotFoundException e) {
-			String clazz= e.getMessage();
-			if (clazz == null) 
-				clazz= suiteClassName;
-			runFailed(JUnitMessages.getFormattedString("RemoteTestRunner.error.classnotfound", clazz)); //$NON-NLS-1$
-			return null;
-		} catch(Exception e) {
-			runFailed(JUnitMessages.getFormattedString("RemoteTestRunner.error.exception", e.toString() )); //$NON-NLS-1$
-			return null;
-		}
-		Method suiteMethod= null;
-		try {
-			suiteMethod= testClass.getMethod(SUITE_METHODNAME, new Class[0]);
-	 	} catch(Exception e) {
-	 		// try to extract a test suite automatically
-			return new TestSuite(testClass);
-		}
-		Test test= null;
-		try {
-			test= (Test)suiteMethod.invoke(null, new Class[0]); // static method
-		} 
-		catch (InvocationTargetException e) {
-			runFailed(JUnitMessages.getFormattedString("RemoteTestRunner.error.invoke", e.getTargetException().toString() )); //$NON-NLS-1$
-			return null;
-		}
-		catch (IllegalAccessException e) {
-			runFailed(JUnitMessages.getFormattedString("RemoteTestRunner.error.invoke", e.toString() )); //$NON-NLS-1$
-			return null;
-		}
-		return test;
-	}
-
-	protected void runFailed(String message) {
-		System.err.println(message);
-	}
-	
-	/**
-	 * Loads the test suite class.
-	 */
-	private Class loadSuiteClass(String className) throws ClassNotFoundException {
-		if (className == null) 
-			return null;
-		return getClassLoader().loadClass(className);
-	}
-			
-	/**
-	 * Runs a set of tests.
-	 */
-	private void runTests(String[] testClassNames) {
-		// instantiate all tests
-		Test[] suites= new Test[testClassNames.length];
-		for (int i= 0; i < suites.length; i++) {
-			Test test= getTest(testClassNames[i]);
-			suites[i]= test;
-		}
-		
-		// count all testMethods and inform ITestRunListeners		
-		int count= countTests(suites);
-		notifyTestRunStarted(count);
-		
-		if (count == 0) {
-			notifyTestRunEnded(0);
-			return;
-		}
-		
-		long startTime= System.currentTimeMillis();
-		if (fDebugMode)
-			System.out.println("start send tree"); //$NON-NLS-1$
-		for (int i= 0; i < suites.length; i++) {
-			sendTree(suites[i]);
-		}
-		
-		if (fDebugMode)
-			System.out.println("done send tree"+(System.currentTimeMillis()-startTime)); //$NON-NLS-1$
-
-		long testStartTime= System.currentTimeMillis();
-		for (int i= 0; i < suites.length; i++) {
-			suites[i].run(fTestResult);
-		}
-		// inform ITestRunListeners of test end
-		if (fTestResult == null || fTestResult.shouldStop())
-			notifyTestRunStopped(System.currentTimeMillis() - testStartTime);
-		else
-			notifyTestRunEnded(System.currentTimeMillis() - testStartTime);
-	}
-	
-	private int countTests(Test[] tests) {
-		int count= 0;
-		for (int i= 0; i < tests.length; i++) {
-			if (tests[i] != null)
-				count= count + tests[i].countTestCases();
-		}
-		return count;
-	}
-	
-	/**
-	 * Reruns a test as defined by the fully qualified class name and
-	 * the name of the test.
-	 */
-	public void rerunTest(String className, String testName) {
-		Test reloadedTest= null;
-		try {
-			Class reloadedTestClass= getClassLoader().loadClass(className);
-			Class[] classArgs= { String.class };
-			Constructor constructor= reloadedTestClass.getConstructor(classArgs);
-			Object[] args= new Object[]{testName};
-			reloadedTest=(Test)constructor.newInstance(args);
-		} catch(Exception e) {
-			runFailed(JUnitMessages.getFormattedString("RemoteTestRunner.error.load", reloadedTest )); //$NON-NLS-1$
-			return;
-		}
-		TestResult result= new TestResult();
-		reloadedTest.run(result);
-		notifyTestReran(result, className, testName);
-	}
-
-
-	/*
-	 * @see TestListener#addError(Test, Throwable)
-	 */
-	public final void addError(Test test, Throwable throwable) {
-		notifyTestFailed(MessageIds.TEST_ERROR, test.toString(), getTrace(throwable));
-	}
-
-	/*
-	 * @see TestListener#addFailure(Test, AssertionFailedError)
-	 */
-	public final void addFailure(Test test, AssertionFailedError assertionFailedError) {
-		notifyTestFailed(MessageIds.TEST_FAILED, test.toString(), getTrace(assertionFailedError));
-	}
-
-	/*
-	 * @see TestListener#endTest(Test)
-	 */
-	public void endTest(Test test) {
-		notifyTestEnded(test.toString());
-	}
-
-	/*
-	 * @see TestListener#startTest(Test)
-	 */
-	public void startTest(Test test) {
-		notifyTestStarted(test.toString());
-	}
-	
-	private void sendTree(Test test){
-		if(test instanceof TestDecorator){
-			TestDecorator decorator= (TestDecorator) test;
-			sendTree(decorator.getTest());		
-		}
-		else if(test instanceof TestSuite){
-			TestSuite suite= (TestSuite) test;
-			notifyTestTreeEntry(suite.toString().trim() + ',' + true + ',' + suite.testCount());
-			for(int i=0; i < suite.testCount(); i++){	
-				sendTree(suite.testAt(i));		
-			}				
-		}
-		else {
-			notifyTestTreeEntry(test.toString().trim() + ',' + false + ',' +  test.countTestCases());
-		}
-	}
-	
-	/**
-	 * Returns the stack trace for the given throwable.
-	 */
-	private String getTrace(Throwable t) { 
-		StringWriter stringWriter= new StringWriter();
-		PrintWriter writer= new PrintWriter(stringWriter);
-		t.printStackTrace(writer);
-		StringBuffer buffer= stringWriter.getBuffer();
-		return buffer.toString();
-	}	
-
-	/**
-	 * Stop the current test run.
-	 */
-	protected void stop() {
-		if (fTestResult != null) {
-			fTestResult.stop();
-		}
-	}
-	
-	/**
-	 * Connect to the remote test listener.
-	 */
-	private boolean connect() {
-		if (fDebugMode)
-			System.out.println("RemoteTestRunner: trying to connect" + fHost + ":" + fPort); //$NON-NLS-1$ //$NON-NLS-2$
-		Exception exception= null;
-		for (int i= 1; i < 10; i++) {
-			try{
-				fClientSocket= new Socket(fHost, fPort);
-				fWriter= new PrintWriter(fClientSocket.getOutputStream(), false/*true*/);
-				fReader= new BufferedReader(new InputStreamReader(fClientSocket.getInputStream()));
-				new ReaderThread().start();
-				return true;
-			} catch(IOException e){
-				exception= e;
-			}
-			try {
-				Thread.sleep(2000);
-			} catch(InterruptedException e) {
-			}
-		}
-		runFailed(JUnitMessages.getFormattedString("RemoteTestRunner.error.connect", new String[]{fHost, Integer.toString(fPort)} )); //$NON-NLS-1$
-		exception.printStackTrace();
-		return false;
-	}
-
-	/**
-	 * Shutsdown the connection to the remote test listener.
-	 */
-	private void shutDown() {
-		if (fWriter != null) {
-			fWriter.close();
-			fWriter= null;
-		}
-		
-		try {
-			if (fReader != null) {
-				fReader.close();
-				fReader= null;
-			}
-		} catch(IOException e) {
-			if (fDebugMode)
-				e.printStackTrace();
-		}
-		
-		try {
-			if (fClientSocket != null) {
-				fClientSocket.close();
-				fClientSocket= null;
-			}
-		} catch(IOException e) {
-			if (fDebugMode)	
-				e.printStackTrace();
-		}
-	}
-
-
-	private void sendMessage(String msg) {
-		if(fWriter == null) 
-			return;
-		fWriter.println(msg);
-	}
-
-
-	private void notifyTestRunStarted(int testCount) {
-		sendMessage(MessageIds.TEST_RUN_START + testCount);
-	}
-
-
-	private void notifyTestRunEnded(long elapsedTime) {
-		sendMessage(MessageIds.TEST_RUN_END + elapsedTime);
-		fWriter.flush();
-		//shutDown();
-	}
-
-
-	private void notifyTestRunStopped(long elapsedTime) {
-		sendMessage(MessageIds.TEST_STOPPED + elapsedTime );
-		fWriter.flush();
-		//shutDown();
-	}
-
-	private void notifyTestStarted(String testName) {
-		sendMessage(MessageIds.TEST_START + testName);
-		fWriter.flush();
-	}
-
-	private void notifyTestEnded(String testName) {
-		sendMessage(MessageIds.TEST_END + testName);
-	}
-
-	private void notifyTestFailed(String status, String testName, String trace) {
-		sendMessage(status + testName);
-		sendMessage(MessageIds.TRACE_START);
-		sendMessage(trace);
-		sendMessage(MessageIds.TRACE_END);
-		fWriter.flush();
-	}
-
-	private void notifyTestTreeEntry(String treeEntry) {
-		sendMessage(MessageIds.TEST_TREE + treeEntry);
-	}
-	
-	private void notifyTestReran(TestResult result, String testClass, String testName) {
-		TestFailure failure= null;
-		if (result.errorCount() > 0) {
-			failure= (TestFailure)result.errors().nextElement();
-		}
-		if (result.failureCount() > 0) {
-			failure= (TestFailure)result.failures().nextElement();
-		}
-		if (failure != null) {
-			Throwable t= failure.thrownException();
-			String trace= getTrace(t);
-			sendMessage(MessageIds.RTRACE_START);
-			sendMessage(trace);
-			sendMessage(MessageIds.RTRACE_END);
-			fWriter.flush();
-		}
-		String status= "OK"; //$NON-NLS-1$
-		if (result.errorCount() > 0)
-			status= "ERROR"; //$NON-NLS-1$
-		else if (result.failureCount() > 0)
-			status= "FAILURE"; //$NON-NLS-1$
-		if (fPort != -1) {
-			sendMessage(MessageIds.TEST_RERAN + testClass+" "+testName+" "+status); //$NON-NLS-1$ //$NON-NLS-2$
-			fWriter.flush();
-		}
-	}
-}	
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/CopyTraceAction.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/CopyTraceAction.java
deleted file mode 100644
index 872836f..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/CopyTraceAction.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.ui;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringReader;
-import java.io.StringWriter;
-
-import org.eclipse.swt.dnd.Clipboard;
-import org.eclipse.swt.dnd.TextTransfer;
-import org.eclipse.swt.dnd.Transfer;
-import org.eclipse.ui.help.WorkbenchHelp;
-
-import org.eclipse.jface.action.Action;
-
-/**
- * Copies a test failure stack trace to the clipboard.
- */
-public class CopyTraceAction extends Action {
-	private FailureTraceView fView;
-	
-	/**
-	 * Constructor for CopyTraceAction.
-	 */
-	public CopyTraceAction(FailureTraceView view) {
-		super(JUnitMessages.getString("CopyTrace.action.label"));  //$NON-NLS-1$
-		WorkbenchHelp.setHelp(this, IJUnitHelpContextIds.COPYTRACE_ACTION);
-		fView= view;
-	}
-
-	/*
-	 * @see IAction#run()
-	 */
-	public void run() {
-		String trace= fView.getTrace();
-		if (trace == null)
-			trace= ""; //$NON-NLS-1$
-		
-		TextTransfer plainTextTransfer = TextTransfer.getInstance();
-		Clipboard clipboard= new Clipboard(fView.getComposite().getDisplay());		
-		clipboard.setContents(
-			new String[]{ convertLineTerminators(trace) }, 
-			new Transfer[]{ plainTextTransfer });
-		clipboard.dispose();
-	}
-
-	private String convertLineTerminators(String in) {
-		StringWriter stringWriter= new StringWriter();
-		PrintWriter printWriter= new PrintWriter(stringWriter);
-		StringReader stringReader= new StringReader(in);
-		BufferedReader bufferedReader= new BufferedReader(stringReader);		
-		String line;
-		try {
-			while ((line= bufferedReader.readLine()) != null) {
-				printWriter.println(line);
-			}
-		} catch (IOException e) {
-			return in; // return the trace unfiltered
-		}
-		return stringWriter.toString();
-	}
-}
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/CounterPanel.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/CounterPanel.java
deleted file mode 100644
index 2fe58fb..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/CounterPanel.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.ui;
-
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-
-/**
- * A panel with counters for the number of Runs, Errors and Failures.
- */
-public class CounterPanel extends Composite {
-	private Label fNumberOfErrors;
-	private Label fNumberOfFailures;
-	private Label fNumberOfRuns;
-	private int fTotal;
-	
-	private final Image fErrorIcon= TestRunnerViewPart.createImage("ovr16/error_ovr.gif"); //$NON-NLS-1$
-	private final Image fFailureIcon= TestRunnerViewPart.createImage("ovr16/failed_ovr.gif"); //$NON-NLS-1$
-			
-	public CounterPanel(Composite parent) {
-		super(parent, SWT.WRAP);
-		GridLayout gridLayout= new GridLayout();
-		gridLayout.numColumns= 9;
-		gridLayout.makeColumnsEqualWidth= false;
-		gridLayout.marginWidth= 0;
-		setLayout(gridLayout);
-		
-		fNumberOfRuns= createLabel(JUnitMessages.getString("CounterPanel.label.runs"), null, " 0/0  ");  //$NON-NLS-1$ //$NON-NLS-2$
-		fNumberOfErrors= createLabel(JUnitMessages.getString("CounterPanel.label.errors"), fErrorIcon, " 0 "); //$NON-NLS-1$ //$NON-NLS-2$
-		fNumberOfFailures= createLabel(JUnitMessages.getString("CounterPanel.label.failures"), fFailureIcon, " 0 "); //$NON-NLS-1$ //$NON-NLS-2$
-
-		addDisposeListener(new DisposeListener() {
-			public void widgetDisposed(DisposeEvent e) {
-				disposeIcons();
-			}
-		});
-	}
- 
-	void disposeIcons() {
-		fErrorIcon.dispose();
-		fFailureIcon.dispose();
-	}
-
-	private Label createLabel(String name, Image image, String init) {
-		Label label= new Label(this, SWT.NONE);
-		if (image != null) {
-			image.setBackground(label.getBackground());
-			label.setImage(image);
-		}
-		label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
-		
-		label= new Label(this, SWT.NONE);
-		label.setText(name);
-		label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
-
-		label= new Label(this, SWT.NONE);
-		label.setText(init);
-		label.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.HORIZONTAL_ALIGN_BEGINNING));
-		return label;
-	}
-
-	public void reset() {
-		fNumberOfErrors.setForeground(getDisplay().getSystemColor(SWT.COLOR_BLACK));
-		fNumberOfFailures.setForeground(getDisplay().getSystemColor(SWT.COLOR_BLACK));
-		fNumberOfErrors.setText(" 0 "); //$NON-NLS-1$
-		fNumberOfFailures.setText(" 0 "); //$NON-NLS-1$
-		String runString= JUnitMessages.getFormattedString("CounterPanel.runcount", new String[] { Integer.toString(0), Integer.toString(0) }); //$NON-NLS-1$
-		fNumberOfRuns.setText(runString); 
-		fTotal= 0;
-	}
-	
-	public void setTotal(int value) {
-		fTotal= value;
-	}
-	
-	public int getTotal(){
-		return fTotal;
-	}
-	
-	public void setRunValue(int value) {
-		String runString= JUnitMessages.getFormattedString("CounterPanel.runcount", new String[] { Integer.toString(value), Integer.toString(fTotal) }); //$NON-NLS-1$
-		fNumberOfRuns.setText(runString);
-
-		fNumberOfRuns.redraw();
-		redraw();
-	}
-	
-	public void setErrorValue(int value) {
-		fNumberOfErrors.setText(Integer.toString(value));
-		redraw();
-	}
-	
-	public void setFailureValue(int value) {
-		fNumberOfFailures.setText(Integer.toString(value));
-		redraw();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/EnableStackFilterAction.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/EnableStackFilterAction.java
deleted file mode 100644
index 14ebe59..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/EnableStackFilterAction.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.ui;
-
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.ui.help.WorkbenchHelp;
-
-/**
- * Action to enable/disable stack trace filtering.
- */
-public class EnableStackFilterAction extends Action {
-
-	private FailureTraceView fView;	
-	
-	public EnableStackFilterAction(FailureTraceView view) {
-		super(JUnitMessages.getString("EnableStackFilterAction.action.label"));  //$NON-NLS-1$
-		setDescription(JUnitMessages.getString("EnableStackFilterAction.action.description"));  //$NON-NLS-1$
-		setToolTipText(JUnitMessages.getString("EnableStackFilterAction.action.tooltip")); //$NON-NLS-1$
-		
-		setDisabledImageDescriptor(JUnitPlugin.getImageDescriptor("dlcl16/cfilter.gif")); //$NON-NLS-1$
-		setHoverImageDescriptor(JUnitPlugin.getImageDescriptor("clcl16/cfilter.gif")); //$NON-NLS-1$
-		setImageDescriptor(JUnitPlugin.getImageDescriptor("elcl16/cfilter.gif")); //$NON-NLS-1$
-		WorkbenchHelp.setHelp(this, IJUnitHelpContextIds.ENABLEFILTER_ACTION);
-
-		fView= view;
-		setChecked(JUnitPreferencePage.getFilterStack());
-	}
-
-	/*
-	 * @see Action#actionPerformed
-	 */		
-	public void run() {
-		JUnitPreferencePage.setFilterStack(isChecked());
-		fView.refresh();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/FailureRunView.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/FailureRunView.java
deleted file mode 100644
index 099191a..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/FailureRunView.java
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.ui;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CTabFolder;
-import org.eclipse.swt.custom.CTabItem;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.MouseListener;
-import org.eclipse.swt.events.MouseMoveListener;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableItem;
-
-import org.eclipse.jface.action.IMenuListener;
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.MenuManager;
-
-import org.eclipse.jdt.internal.junit.runner.ITestRunListener;
-
-
-/**
- * A view presenting the failed tests in a table.
- */
-class FailureRunView implements ITestRunView, IMenuListener {
-	private Table fTable;
-	private TestRunnerViewPart fRunnerViewPart;
-	private boolean fPressed= false;
-	
-	private final Image fErrorIcon= TestRunnerViewPart.createImage("obj16/testerr.gif"); //$NON-NLS-1$
-	private final Image fFailureIcon= TestRunnerViewPart.createImage("obj16/testfail.gif"); //$NON-NLS-1$
-	private final Image fFailureTabIcon= TestRunnerViewPart.createImage("obj16/failures.gif"); //$NON-NLS-1$
-	
-	public FailureRunView(CTabFolder tabFolder, TestRunnerViewPart runner) {
-		fRunnerViewPart= runner;
-		
-		CTabItem failureTab= new CTabItem(tabFolder, SWT.NONE);
-		failureTab.setText(getName());
-		failureTab.setImage(fFailureTabIcon);
-
-		Composite composite= new Composite(tabFolder, SWT.NONE);
-		GridLayout gridLayout= new GridLayout();
-		gridLayout.marginHeight= 0;
-		gridLayout.marginWidth= 0;
-		composite.setLayout(gridLayout);
-		
-		GridData gridData= new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL);
-		composite.setLayoutData(gridData);	
-			
-		fTable= new Table(composite, SWT.NONE);
-		gridLayout= new GridLayout();
-		gridLayout.marginHeight= 0;
-		gridLayout.marginWidth= 0;
-		fTable.setLayout(gridLayout);
-		
-		gridData= new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL);
-		fTable.setLayoutData(gridData);
-		
-		failureTab.setControl(composite);
-		failureTab.setToolTipText(JUnitMessages.getString("FailureRunView.tab.tooltip")); //$NON-NLS-1$
-		
-		initMenu();
-		addListeners();	
-	}
-
-	void disposeIcons() {
-		fErrorIcon.dispose();
-		fFailureIcon.dispose();
-		fFailureTabIcon.dispose();
-	}
-
-	private void initMenu() {
-		MenuManager menuMgr= new MenuManager();
-		menuMgr.setRemoveAllWhenShown(true);
-		menuMgr.addMenuListener(this);
-		Menu menu= menuMgr.createContextMenu(fTable);
-		fTable.setMenu(menu);
-	}
-	
-	public String getName() {
-		return JUnitMessages.getString("FailureRunView.tab.title"); //$NON-NLS-1$
-	}
-	
-	public String getTestName() {
-		int index= fTable.getSelectionIndex();
-		if (index == -1)
-			return null;
-		return fTable.getItem(index).getText();
-	}
-	
-	private String getClassName() {
-		String className= getSelectedText();
-		className= className.substring(className.indexOf('(') + 1);
-		return className.substring(0, className.indexOf(')'));
-	}
-	
-	private String getMethodName() {
-		String methodName= getSelectedText();
-		return methodName.substring(0, methodName.indexOf('('));
-	}
-
-	public void menuAboutToShow(IMenuManager manager){
-		if (fTable.getSelectionCount() > 0) {
-			manager.add(new OpenTestAction(fRunnerViewPart, getClassName(), getMethodName()));
-			manager.add(new RerunAction(fRunnerViewPart, getClassName(), getMethodName()));
-		}
-	}		
-	
-	private String getSelectedText() {
-		int index= fTable.getSelectionIndex();
-		if (index == -1)
-			return null;
-		return fTable.getItem(index).getText();
-	}
-	
-	public void setSelectedTest(String testName){
-		TableItem[] items= fTable.getItems();
-		for (int i= 0; i < items.length; i++) {
-			TableItem tableItem= items[i]; 			
-			if (tableItem.getText().equals(testName)){
-				fTable.setSelection(new TableItem[] { tableItem });
-				fTable.showItem(tableItem);
-				return;
-			}
-		}
-	}
-	
-	public void setFocus() {
-		fTable.setFocus();
-	}
-	
-	public void endTest(String testName){
-		TestRunInfo testInfo= fRunnerViewPart.getTestInfo(testName);
-		if(testInfo == null || testInfo.fStatus == ITestRunListener.STATUS_OK) 
-			return;
-
-		TableItem tableItem= new TableItem(fTable, SWT.NONE);
-		updateTableItem(testInfo, tableItem);
-		fTable.showItem(tableItem);
-	}
-
-	private void updateTableItem(TestRunInfo testInfo, TableItem tableItem) {
-		tableItem.setText(testInfo.fTestName);
-		if (testInfo.fStatus == ITestRunListener.STATUS_FAILURE)
-			tableItem.setImage(fFailureIcon);
-		else
-			tableItem.setImage(fErrorIcon);
-		tableItem.setData(testInfo);
-	}
-
-	private TableItem findItemByTest(String testName) {
-		TableItem[] items= fTable.getItems();
-		for (int i= 0; i < items.length; i++) {
-			if (items[i].getText().equals(testName))
-				return items[i];
-		}
-		return null;
-	}
-
-	public void activate() {
-		testSelected();
-	}
-
-	public void aboutToStart() {
-		fTable.removeAll();
-	}
-
-	protected void testSelected() {
-		fRunnerViewPart.handleTestSelected(getTestName());
-	}
-	
-	protected void addListeners() {
-		fTable.addSelectionListener(new SelectionListener() {
-			public void widgetSelected(SelectionEvent e) {
-				activate();
-			}
-			public void widgetDefaultSelected(SelectionEvent e) {
-				activate();
-			}
-		});
-		
-		fTable.addDisposeListener(new DisposeListener() {
-			public void widgetDisposed(DisposeEvent e) {
-				disposeIcons();
-			}
-		});
-
-		fTable.addMouseListener(new MouseListener() {
-			public void mouseDoubleClick(MouseEvent e){
-				handleDoubleClick(e);
-			}
-			public void mouseDown(MouseEvent e) {
-				fPressed= true;
-				activate();
-			}
-			public void mouseUp(MouseEvent e) {
-				fPressed= false;
-				activate();
-			}
-		});
-		
-		fTable.addMouseMoveListener(new MouseMoveListener() {
-			public void mouseMove(MouseEvent e) {
-				TableItem tableItem= ((Table) e.getSource()).getItem(new Point(e.x, e.y));
-				if (fPressed & (null != tableItem)) {
-					fTable.setSelection(new TableItem[] { tableItem });
-					activate();
-				}
-				// scrolling up and down
-				if ((e.y + 1 > fTable.getBounds().height)
-					& fPressed
-					& (fTable.getSelectionIndex() != fTable.getItemCount() - 1)) {
-					fTable.setTopIndex(fTable.getTopIndex() + 1);
-					fTable.setSelection(fTable.getSelectionIndex() + 1);
-					activate();
-				}
-				if ((e.y - 1 < 0) & fPressed & (fTable.getTopIndex() != 0)) {
-					fTable.setTopIndex(fTable.getTopIndex() - 1);
-					fTable.setSelection(fTable.getSelectionIndex() - 1);
-					activate();
-				}
-			}
-		});
-	}
-	
-	public void handleDoubleClick(MouseEvent e) {
-		if (fTable.getSelectionCount() > 0) 
-			new OpenTestAction(fRunnerViewPart, getClassName(), getMethodName()).run();
-	}
-	
-	public void newTreeEntry(String treeEntry) {
-	}
-	
-	/*
-	 * @see ITestRunView#testStatusChanged(TestRunInfo)
-	 */
-	public void testStatusChanged(TestRunInfo info) {
-		TableItem item= findItemByTest(info.fTestName);
-		if (item != null) {
-			if (info.fStatus == ITestRunListener.STATUS_OK) {
-				item.dispose();
-				return;
-			}
-			updateTableItem(info, item);
-		} 
-		if (item == null && info.fStatus != ITestRunListener.STATUS_OK) {
-			item= new TableItem(fTable, SWT.NONE);
-			updateTableItem(info, item);
-		}
-		if (item != null)
-			fTable.showItem(item);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/FailureTraceView.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/FailureTraceView.java
deleted file mode 100644
index 8920e59..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/FailureTraceView.java
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.ui;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringReader;
-import java.io.StringWriter;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.MouseAdapter;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableItem;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IMenuListener;
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.MenuManager;
-
-/**
- * A view that shows a stack trace of a failed test.
- */
-class FailureTraceView implements IMenuListener {
-	private Table fTable;
-	private TestRunnerViewPart fTestRunner;
-	private String fInputTrace;
-	
-	private final Image fStackIcon= TestRunnerViewPart.createImage("obj16/stkfrm_obj.gif"); //$NON-NLS-1$
-	private final Image fExceptionIcon= TestRunnerViewPart.createImage("obj16/exc_catch.gif"); //$NON-NLS-1$
-
-	public FailureTraceView(Composite parent, TestRunnerViewPart testRunner) {
-		fTable= new Table(parent, SWT.SINGLE | SWT.V_SCROLL | SWT.H_SCROLL);
-		fTestRunner= testRunner;
-		
-		fTable.addMouseListener(new MouseAdapter() {
-			public void mouseDoubleClick(MouseEvent e){
-				handleDoubleClick(e);
-			}
-		});
-		
-		initMenu();
-		
-		parent.addDisposeListener(new DisposeListener() {
-			public void widgetDisposed(DisposeEvent e) {
-				disposeIcons();
-			}
-		});
-	}
-	
-	void handleDoubleClick(MouseEvent e) {
-		if(fTable.getSelection().length != 0) {
-			Action a= createOpenEditorAction(getSelectedText());
-			if (a != null)
-				a.run();
-		}
-	}
-	
-	private void initMenu() {
-		MenuManager menuMgr= new MenuManager();
-		menuMgr.setRemoveAllWhenShown(true);
-		menuMgr.addMenuListener(this);
-		Menu menu= menuMgr.createContextMenu(fTable);
-		fTable.setMenu(menu);		
-	}
-	
-	public void menuAboutToShow(IMenuManager manager) {
-		if (fTable.getSelectionCount() > 0) {
-			Action a= createOpenEditorAction(getSelectedText());
-			if (a != null)
-				manager.add(a);
-		}
-		manager.add(new CopyTraceAction(FailureTraceView.this));
-	}
-
-	public String getTrace() {
-		return fInputTrace;
-	}
-	
-	private String getSelectedText() {
-		return fTable.getSelection()[0].getText();
-	}				
-
-	private Action createOpenEditorAction(String traceLine) {
-		try { 
-			// TO DO works for JDK stack trace only
-			String testName= traceLine;
-			testName= testName.substring(testName.indexOf("at ")); //$NON-NLS-1$
-			testName= testName.substring(3, testName.indexOf('(')).trim();
-			testName= testName.substring(0, testName.lastIndexOf('.'));
-			
-			String lineNumber= traceLine;
-			lineNumber= lineNumber.substring(lineNumber.indexOf(':') + 1, lineNumber.indexOf(")")); //$NON-NLS-1$
-			int line= Integer.valueOf(lineNumber).intValue();
-			return new OpenEditorAtLineAction(fTestRunner, testName, line);
-		} catch(NumberFormatException e) {
-		}
-		catch(IndexOutOfBoundsException e) {	
-		}	
-		return null;
-	}
-	
-	void disposeIcons(){
-		if (fExceptionIcon != null && !fExceptionIcon.isDisposed()) 
-			fExceptionIcon.dispose();
-		if (fStackIcon != null && !fStackIcon.isDisposed()) 
-			fStackIcon.dispose();
-	}
-	
-	/**
-	 * Returns the composite used to present the trace
-	 */
-	public Composite getComposite(){
-		return fTable;
-	}
-	
-	/**
-	 * Refresh the table from the the trace.
-	 */
-	public void refresh() {
-		updateTable(fInputTrace);
-	}
-	
-	/**
-	 * Shows a TestFailure
-	 */
-	public void showFailure(String trace) {	
-		if (fInputTrace == trace)
-			return;
-		fInputTrace= trace;
-		updateTable(trace);
-	}
-
-	private void updateTable(String trace) {
-		if(trace == null || trace.trim().equals("")) { //$NON-NLS-1$
-			clear();
-			return;
-		}
-		trace= trace.trim();
-		fTable.setRedraw(false);
-		fTable.removeAll();
-		fillTable(filterStack(trace));
-		fTable.setRedraw(true);
-	}
-
-	protected void fillTable(String trace) {
-		StringReader stringReader= new StringReader(trace);
-		BufferedReader bufferedReader= new BufferedReader(stringReader);
-		String line;
-
-		try {	
-			// first line contains the thrown exception
-			line= bufferedReader.readLine();
-			if (line == null)
-				return;
-				
-			TableItem tableItem= new TableItem(fTable, SWT.NONE);
-			String itemLabel= line.replace('\t', ' ');
-			tableItem.setText(itemLabel);
-			tableItem.setImage(fExceptionIcon);
-			
-			// the stack frames of the trace
-			while ((line= bufferedReader.readLine()) != null) {
-				itemLabel= line.replace('\t', ' ');
-				if (itemLabel.trim().length() > 0) {
-					tableItem= new TableItem(fTable, SWT.NONE);
-					// heuristic for detecting a stack frame - works for JDK
-					if ((itemLabel.indexOf(" at ") >= 0)) { //$NON-NLS-1$
-						tableItem.setImage(fStackIcon);
-					}
-					tableItem.setText(itemLabel);
-				}	
-			}
-		} catch (IOException e) {
-			TableItem tableItem= new TableItem(fTable, SWT.NONE);
-			tableItem.setText(trace);
-		}			
-	}
-	
-	/**
-	 * Shows other information than a stack trace.
-	 */
-	public void setInformation(String text) {
-		clear();
-		TableItem tableItem= new TableItem(fTable, SWT.NONE);
-		tableItem.setText(text);
-	}
-	
-	/**
-	 * Clears the non-stack trace info
-	 */
-	public void clear() {
-		fTable.removeAll();
-		fInputTrace= null;
-	}
-	
-	private String filterStack(String stackTrace) {	
-		if (!JUnitPreferencePage.getFilterStack() || stackTrace == null) 
-			return stackTrace;
-			
-		StringWriter stringWriter= new StringWriter();
-		PrintWriter printWriter= new PrintWriter(stringWriter);
-		StringReader stringReader= new StringReader(stackTrace);
-		BufferedReader bufferedReader= new BufferedReader(stringReader);	
-			
-		String line;
-		String[] patterns= JUnitPreferencePage.getFilterPatterns();
-		try {	
-			while ((line= bufferedReader.readLine()) != null) {
-				if (!filterLine(patterns, line))
-					printWriter.println(line);
-			}
-		} catch (IOException e) {
-			return stackTrace; // return the stack unfiltered
-		}
-		return stringWriter.toString();
-	}
-	
-	private boolean filterLine(String[] patterns, String line) {
-		for (int i= 0; i < patterns.length; i++) {
-			if (line.indexOf(patterns[i]) > 0)
-				return true;
-		}		
-		return false;
-	}
-}
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/FilterPatternsDialog.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/FilterPatternsDialog.java
deleted file mode 100644
index 436818a..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/FilterPatternsDialog.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.ui;
-
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Shell;
-
-import org.eclipse.jface.dialogs.IInputValidator;
-import org.eclipse.jface.dialogs.InputDialog;
-
-/**
- * A dialog to enter a filter pattern. 
- */
-public class FilterPatternsDialog extends InputDialog {	
-    
-    static class NonEmptyValidator implements IInputValidator {
-		public String isValid(String input) {
-		    if (input.length() > 0)
-		    	return null;
-		    return JUnitMessages.getString("FilterPatternsDialog.message.notempty"); //$NON-NLS-1$
-		}
-	};
-	
-	/*
-	 * @see InputDialog#InputDialog
-	 */
-	public FilterPatternsDialog(Shell parent, String title, String message) {
-		super(parent, title, message, "", new NonEmptyValidator()); //$NON-NLS-1$
-	}
-	
-	/*
-	 * @see InputDialog#createDialogArea(Composite)
-	 */
-	protected Control createDialogArea(Composite parent) {
-		Control result= super.createDialogArea(parent);
-		getText().setFocus();
-		return result;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/HierarchyRunView.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/HierarchyRunView.java
deleted file mode 100644
index fd3d589..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/HierarchyRunView.java
+++ /dev/null
@@ -1,429 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.ui;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Vector;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CTabFolder;
-import org.eclipse.swt.custom.CTabItem;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.MouseListener;
-import org.eclipse.swt.events.MouseMoveListener;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.Tree;
-import org.eclipse.swt.widgets.TreeItem;
-
-import org.eclipse.jface.action.IMenuListener;
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.MenuManager;
-
-import org.eclipse.jdt.internal.junit.runner.ITestRunListener;
-
-/*
- * A view that shows the contents of a test suite
- * as a tree.
- */
-class HierarchyRunView implements ITestRunView, IMenuListener {
-	/**
-	 * The tree widget
-	 */
-	private Tree fTree;
-	
-	public static final int IS_SUITE= -1;	
-	/**
-	 * Helper used to resurrect test hierarchy
-	 */
-	private static class SuiteInfo {
-		public int fTestCount;
-		public TreeItem fTreeItem;
-		
-		public SuiteInfo(TreeItem treeItem, int testCount){
-			fTreeItem= treeItem;
-			fTestCount= testCount;
-		}
-	}
-	/**
-	 * Vector of SuiteInfo items
-	 */
-	private Vector fSuiteInfos= new Vector();
-	/**
-	 * Maps test names to TreeItems. 
-	 * If there is one treeItem for a test then the
-	 * value of the map corresponds to the item, otherwise
-	 * there is a list of tree items.
-	 */
-	private Map fTreeItemMap= new HashMap();
-	
-	private TestRunnerViewPart fTestRunnerPart;
-	
-	private boolean fPressed= false;
-	
-	private final Image fOkIcon= TestRunnerViewPart.createImage("obj16/testok.gif"); //$NON-NLS-1$
-	private final Image fErrorIcon= TestRunnerViewPart.createImage("obj16/testerr.gif"); //$NON-NLS-1$
-	private final Image fFailureIcon= TestRunnerViewPart.createImage("obj16/testfail.gif"); //$NON-NLS-1$
-	private final Image fHierarchyIcon= TestRunnerViewPart.createImage("obj16/testhier.gif"); //$NON-NLS-1$
-	private final Image fSuiteIcon= TestRunnerViewPart.createImage("obj16/tsuite.gif"); //$NON-NLS-1$
-	private final Image fSuiteErrorIcon= TestRunnerViewPart.createImage("obj16/tsuiteerror.gif"); //$NON-NLS-1$
-	private final Image fSuiteFailIcon= TestRunnerViewPart.createImage("obj16/tsuitefail.gif"); //$NON-NLS-1$
-	private final Image fTestIcon= TestRunnerViewPart.createImage("obj16/test.gif"); //$NON-NLS-1$
-		
-	public HierarchyRunView(CTabFolder tabFolder, TestRunnerViewPart runner) {
-		fTestRunnerPart= runner;
-		
-		CTabItem hierarchyTab= new CTabItem(tabFolder, SWT.NONE);
-		hierarchyTab.setText(getName());
-		hierarchyTab.setImage(fHierarchyIcon);
-		
-		Composite testTreePanel= new Composite(tabFolder, SWT.NONE);
-		GridLayout gridLayout= new GridLayout();
-		gridLayout.marginHeight= 0;
-		gridLayout.marginWidth= 0;
-		testTreePanel.setLayout(gridLayout);
-		
-		GridData gridData= new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL);
-		testTreePanel.setLayoutData(gridData);
-		
-		hierarchyTab.setControl(testTreePanel);
-		hierarchyTab.setToolTipText(JUnitMessages.getString("HierarchyRunView.tab.tooltip")); //$NON-NLS-1$
-		
-		fTree= new Tree(testTreePanel, SWT.V_SCROLL);
-		gridData= new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL);
-		fTree.setLayoutData(gridData);
-		
-		initMenu();
-		addListeners();
-	}
-
-
-	void disposeIcons() {
-		fErrorIcon.dispose();
-		fFailureIcon.dispose();
-		fOkIcon.dispose();
-		fHierarchyIcon.dispose();
-		fTestIcon.dispose();
-		fSuiteIcon.dispose();
-		fSuiteErrorIcon.dispose();
-		fSuiteFailIcon.dispose(); 
-	}
-	
-	private void initMenu() {
-		MenuManager menuMgr= new MenuManager();
-		menuMgr.setRemoveAllWhenShown(true);
-		menuMgr.addMenuListener(this);
-		Menu menu= menuMgr.createContextMenu(fTree);
-		fTree.setMenu(menu);	
-	}
-
-	private String getTestLabel() {
-		TreeItem treeItem= fTree.getSelection()[0];
-		if(treeItem == null) 
-			return ""; //$NON-NLS-1$
-		return treeItem.getText();
-	}
-
-	private TestRunInfo getTestInfo() {
-		TreeItem[] treeItems= fTree.getSelection();
-		if(treeItems.length == 0) 
-			return null;
-		return ((TestRunInfo)treeItems[0].getData());
-	}	
-	
-	public String getClassName() {
-		TestRunInfo testInfo= getTestInfo();
-		if (testInfo == null) 
-			return null;
-		return extractClassName(testInfo.fTestName);
-	}
-	
-	public String getTestName() {
-		TestRunInfo testInfo= getTestInfo();
-		if (testInfo == null) 
-			return null;
-		return testInfo.fTestName;
-	}
-	
-	private String extractClassName(String testNameString) {
-		if (testNameString == null) 
-			return null;
-		int index= testNameString.indexOf('(');
-		if (index < 0) 
-			return testNameString;
-		testNameString= testNameString.substring(index + 1);
-		return testNameString.substring(0, testNameString.indexOf(')'));
-	}		
-
-	public String getName() {
-		return JUnitMessages.getString("HierarchyRunView.tab.title"); //$NON-NLS-1$
-	}
-	
-	public void setSelectedTest(String testName) {
-		TreeItem treeItem= findFirstItem(testName);
-		fTree.setSelection(new TreeItem[]{treeItem});
-	}
-	
-	public void endTest(String testName) {	
-		TreeItem treeItem= findFirstNotRunItem(testName);
-		// workaround for bug 8657
-		if (treeItem == null)  
-			return;
-			
-		TestRunInfo testInfo= fTestRunnerPart.getTestInfo(testName);
-			
-		updateItem(treeItem, testInfo);
-			
-		if (testInfo.fTrace != null)
-			fTree.showItem(treeItem);
-	}
-
-	private void updateItem(TreeItem treeItem, TestRunInfo testInfo) {
-		treeItem.setData(testInfo);
-		if(testInfo.fStatus == ITestRunListener.STATUS_OK) {
-			treeItem.setImage(fOkIcon);	
-			return;
-		}
-		
-		if (testInfo.fStatus == ITestRunListener.STATUS_FAILURE) 
-			treeItem.setImage(fFailureIcon);
-		else if (testInfo.fStatus == ITestRunListener.STATUS_ERROR)
-			treeItem.setImage(fErrorIcon);
-		propagateStatus(treeItem, testInfo.fStatus);	
-	}
-
-	void propagateStatus(TreeItem item, int status) {
-		TreeItem parent= item.getParentItem();
-		if (parent == null)
-			return;
-		Image parentImage= parent.getImage();
-		
-		if (status == ITestRunListener.STATUS_FAILURE) {
-			if (parentImage == fSuiteErrorIcon || parentImage == fSuiteFailIcon) 
-				return;
-			parent.setImage(fSuiteFailIcon);
-		} else {
-			if (parentImage == fSuiteErrorIcon) 
-				return;
-			parent.setImage(fSuiteErrorIcon);
-		}
-		propagateStatus(parent, status);
-	}
-	
-	public void activate() {
-		testSelected();
-	}
-	
-	public void setFocus() {
-		fTree.setFocus();
-	}
-
-	public void aboutToStart() {
-		fTree.removeAll();
-		fSuiteInfos.removeAllElements();
-		fTreeItemMap= new HashMap();
-	}
-	
-	protected void testSelected() {
-		fTestRunnerPart.handleTestSelected(getTestName());
-	}
-	
-	public void menuAboutToShow(IMenuManager manager) {
-		if (fTree.getSelectionCount() > 0) {
-			final TreeItem treeItem= fTree.getSelection()[0];
-			TestRunInfo testInfo= (TestRunInfo) treeItem.getData();
-			if (testInfo.fStatus == IS_SUITE) {	
-				String className= getTestLabel();
-				int index= className.length();
-				if ((index= className.indexOf('@')) > 0)
-					className= className.substring(0, index);
-				manager.add(new OpenTestAction(fTestRunnerPart, className));
-			} else {
-				manager.add(new OpenTestAction(fTestRunnerPart, getClassName(), getTestLabel()));
-				manager.add(new RerunAction(fTestRunnerPart, getClassName(), getTestLabel()));
-			}
-		}
-	}	
-
-	private void addListeners() {
-		fTree.addSelectionListener(new SelectionListener() {
-			public void widgetSelected(SelectionEvent e) {
-				activate();
-			}
-			public void widgetDefaultSelected(SelectionEvent e) {
-				activate();
-			}
-		});
-		
-		fTree.addDisposeListener(new DisposeListener() {
-			public void widgetDisposed(DisposeEvent e) {
-				disposeIcons();
-			}
-		});
-
-		fTree.addMouseListener(new MouseListener() {
-			public void mouseDoubleClick(MouseEvent e) {
-				handleDoubleClick(e);
-			}
-			public void mouseDown(MouseEvent e) {
-				fPressed= true;
-			}
-			public void mouseUp(MouseEvent e) {
-				fPressed= false;
-			}
-		});
-		
-		fTree.addMouseMoveListener(new MouseMoveListener() {
-			public void mouseMove(MouseEvent e) {
-				if (!(e.getSource() instanceof Tree)) 
-					return;
-				
-				TreeItem[] treeItem= {((Tree) e.getSource()).getItem(new Point(e.x, e.y))};
-				if (fPressed & (null != treeItem[0])) {
-					fTree.setSelection(treeItem);
-					activate();
-				}
-				// scroll
-				if ((e.y < 1) & fPressed) {
-					try {
-						TreeItem tItem= treeItem[0].getParentItem();
-						fTree.setSelection(new TreeItem[] { tItem });
-						activate();
-					} catch (Exception ex) {
-					}
-				}
-			}
-		});
-	}
-	
-	void handleDoubleClick(MouseEvent e) {
-		TestRunInfo testInfo= getTestInfo();
-		if(testInfo == null) 
-			return;
-		
-		if ((testInfo.fStatus == IS_SUITE)) {
-			String className= getTestLabel();
-			int index= className.length();
-			if ((index= className.indexOf('@')) > 0)
-				className= className.substring(0, index);
-			(new OpenTestAction(fTestRunnerPart, className)).run();							
-		}
-		else {
-			(new OpenTestAction(fTestRunnerPart, getClassName(), getTestLabel())).run();
-		}							
-	}
-	
-	public void newTreeEntry(String treeEntry) {
-		int index0= treeEntry.indexOf(',');
-		int index1= treeEntry.lastIndexOf(',');
-		String label= treeEntry.substring(0, index0).trim();
-		TestRunInfo testInfo= new TestRunInfo(label);
-		//fTestInfo.addElement(testInfo);
-		int index2;
-		if((index2= label.indexOf('(')) > 0)
-			label= label.substring(0, index2);
-		if((index2= label.indexOf('@')) > 0)
-			label= label.substring(0, index2);
-		
-		String isSuite= treeEntry.substring(index0+1, index1);
-		int testCount= Integer.parseInt(treeEntry.substring(index1+1));
-		TreeItem treeItem;
-	
-		while((fSuiteInfos.size() > 0) && (((SuiteInfo) fSuiteInfos.lastElement()).fTestCount == 0))	{
-			fSuiteInfos.removeElementAt(fSuiteInfos.size()-1);
-		}
-
-		if(fSuiteInfos.size() == 0){
-			testInfo.fStatus= IS_SUITE;
-			treeItem= new TreeItem(fTree, SWT.NONE);
-			treeItem.setImage(fSuiteIcon);
-			fSuiteInfos.addElement(new SuiteInfo(treeItem, testCount));
-		} else if(isSuite.equals("true")) { //$NON-NLS-1$
-			testInfo.fStatus= IS_SUITE;
-			treeItem= new TreeItem(((SuiteInfo) fSuiteInfos.lastElement()).fTreeItem, SWT.NONE);
-			treeItem.setImage(fHierarchyIcon);
-			((SuiteInfo)fSuiteInfos.lastElement()).fTestCount -= 1;
-			fSuiteInfos.addElement(new SuiteInfo(treeItem, testCount));
-		} else {
-			treeItem= new TreeItem(((SuiteInfo) fSuiteInfos.lastElement()).fTreeItem, SWT.NONE);
-			treeItem.setImage(fTestIcon);
-			((SuiteInfo)fSuiteInfos.lastElement()).fTestCount -= 1;
-			mapTest(testInfo, treeItem);
-		}
-		treeItem.setText(label);
-		treeItem.setData(testInfo);
-	}
-	
-	private void mapTest(TestRunInfo info, TreeItem item) {
-		String test= info.fTestName;
-		Object o= fTreeItemMap.get(test);
-		if (o == null) {
-			fTreeItemMap.put(test, item);
-			return;
-		}
-		if (o instanceof TreeItem) {
-			List list= new ArrayList();
-			list.add(o);
-			list.add(item);
-			fTreeItemMap.put(test, list);
-			return;
-		}
-		if (o instanceof List) {
-			((List)o).add(item);
-		}
-	}
-	
-	private TreeItem findFirstNotRunItem(String testName) {
-		Object o= fTreeItemMap.get(testName);
-		if (o instanceof TreeItem) 
-			return (TreeItem)o;
-		if (o instanceof List) {
-			List l= (List)o;
-			for (int i= 0; i < l.size(); i++) {
-				TreeItem item= (TreeItem)l.get(i);
-				if (item.getImage() == fTestIcon)
-					return item;
-			}
-			return null;
-		}
-		return null;
-	}
-	
-	private TreeItem findFirstItem(String testName) {
-		Object o= fTreeItemMap.get(testName);
-		if (o instanceof TreeItem) 
-			return (TreeItem)o;
-		if (o instanceof List) {
-			return (TreeItem)((List)o).get(0);
-		}
-		return null;
-	}
-	/*
-	 * @see ITestRunView#testStatusChanged(TestRunInfo, int)
-	 */
-	public void testStatusChanged(TestRunInfo newInfo) {
-		Object o= fTreeItemMap.get(newInfo.fTestName);
-		if (o instanceof TreeItem) {
-			updateItem((TreeItem)o, newInfo);
-			return;
-		}
-		if (o instanceof List) {
-			List l= (List)o;
-			for (int i= 0; i < l.size(); i++) 
-				updateItem((TreeItem)l.get(i), newInfo);
-		}		
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/IJUnitHelpContextIds.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/IJUnitHelpContextIds.java
deleted file mode 100644
index 77876ae..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/IJUnitHelpContextIds.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.ui;
-
-/**
- * Help context ids for the JUnit UI.
- */
-public interface IJUnitHelpContextIds {
-	public static final String PREFIX= JUnitPlugin.PLUGIN_ID + '.';
-
-	// Actions
-	public static final String COPYTRACE_ACTION= PREFIX + "copy_trace_action_context"; //$NON-NLS-1$
-	public static final String ENABLEFILTER_ACTION= PREFIX + "enable_filter_action_context"; //$NON-NLS-1$
-	public static final String OPENEDITORATLINE_ACTION= PREFIX + "open_editor_atline_action_context"; //$NON-NLS-1$
-	public static final String OPENTEST_ACTION= PREFIX + "open_test_action_context"; //$NON-NLS-1$
-	public static final String RERUN_ACTION= PREFIX + "retrun_test_action_context"; //$NON-NLS-1$
-	
-	// view parts
-	public static final String RESULTS_VIEW= PREFIX + "results_view_context"; //$NON-NLS-1$
-
-	// Preference/Property pages
-	public static final String JUNIT_PREFERENCE_PAGE= PREFIX + "junit_preference_page_context"; //$NON-NLS-1$
-
-	// Wizard pages
-	public static final String NEW_TESTCASE_WIZARD_PAGE= PREFIX + "new_testcase_wizard_page_context"; //$NON-NLS-1$
-	public static final String NEW_TESTCASE_WIZARD_PAGE2= PREFIX + "new_testcase_wizard_page2_context"; //$NON-NLS-1$
-	public static final String NEW_TESTSUITE_WIZARD_PAGE= PREFIX + "new_testsuite_wizard_page2_context"; //$NON-NLS-1$
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/ITestRunView.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/ITestRunView.java
deleted file mode 100644
index 2887221..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/ITestRunView.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.ui;
-
-
-/**
- * A TestRunView is shown as a page in a tabbed folder.
- * It contributes the page contents and can return
- * the currently selected test.
- */
-interface ITestRunView {
-	/**
-	 * Returns the name of the currently selected Test in the View
-	 */
-	public String getTestName();
-
-	/**
-	 * Activates the TestRunView
-	 */
-	public void activate();
-	
-	/**
-	 * Sets the focus in the TestRunView
-	 */
-	public void setFocus();
-	
-	/**
-	 * Informs that the suite is about to start 
-	 */
-	public void aboutToStart();
-
-	/**
-	 * Returns the name of the RunView
-	 */
-	public String getName();
-	
-	/**
-	 * Sets the current Test in the View
-	 */
-	public void setSelectedTest(String testName);
-	
-	/**
-	 * A test has ended
-	 */
-	public void endTest(String testName);
-	
-	/**
-	 * The status of a test has changed
-	 */
-	public void testStatusChanged(TestRunInfo newInfo);
-	/**
-	 * A new tree entry got posted.
-	 */
-	public void newTreeEntry(String treeEntry);
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitMessages.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitMessages.java
deleted file mode 100644
index a2cb6d1..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitMessages.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.eclipse.jdt.internal.junit.ui;
-
-import java.text.MessageFormat;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-public class JUnitMessages {
-
-	private static final String BUNDLE_NAME= "org.eclipse.jdt.internal.junit.ui.JUnitMessages"; //$NON-NLS-1$
-
-	private static final ResourceBundle RESOURCE_BUNDLE= ResourceBundle.getBundle(BUNDLE_NAME);
-
-	private JUnitMessages() {
-	}
-
-	/**
-	 * Gets a string from the resource bundle and formats it with the argument
-	 * 
-	 * @param key	the string used to get the bundle value, must not be null
-	 */
-	public static String getFormattedString(String key, Object arg) {
-		return MessageFormat.format(getString(key), new Object[] { arg });
-	}
-
-	/**
-	 * Gets a string from the resource bundle and formats it with arguments
-	 */	
-	public static String getFormattedString(String key, Object[] args) {
-		return MessageFormat.format(getString(key), args);
-	}
-
-	public static String getString(String key) {
-		try {
-			return RESOURCE_BUNDLE.getString(key);
-		} catch (MissingResourceException e) {
-			return '!' + key + '!';
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitMessages.properties b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitMessages.properties
deleted file mode 100644
index 4aa2c20..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitMessages.properties
+++ /dev/null
@@ -1,91 +0,0 @@
-CopyTrace.action.label=Copy Trace
-
-CounterPanel.label.runs=Runs: 
-CounterPanel.label.errors=Errors: 
-CounterPanel.label.failures=Failures: 
-CounterPanel.runcount= {0}/{1}
-
-EnableStackFilterAction.action.label=Filter
-EnableStackFilterAction.action.description=Filter the stack trace
-EnableStackFilterAction.action.tooltip=Filter Stack Trace
-
-FailureRunView.tab.tooltip=Failures and Errors
-FailureRunView.tab.title=Failures
-
-FilterPatternsDialog.message.notempty=Filter must not be empty
-
-HierarchyRunView.tab.tooltip=Test Hierarchy
-HierarchyRunView.tab.title=Hierarchy
-
-JUnitPlugin.error.cannotshow=Could not show JUnit Result View
-
-JUnitPreferencePage.addbutton.label=&Add...
-JUnitPreferencePage.removebutton.label=&Remove
-JUnitPreferencePage.filter.label=&Stack filter patterns:
-JUnitPreferencePage.adddialog.title=Add Stack Filter Pattern
-JUnitPreferencePage.addialog.prompt=Enter Filter Pattern:
-JUnitPreferencePage.showcheck.label=Show the JUnit results &view only when an error or failure occurs
-
-OpenEditorAction.action.label=&Goto File
-OpenEditorAction.error.cannotopen.title=Cannot Open Editor
-OpenEditorAction.error.cannotopen.message=Test class not found in project
-OpenEditorAction.error.dialog.title=Error
-OpenEditorAction.error.dialog.message=Could not open editor
-OpenEditorAction.message.cannotopen=Could not open editor
-
-RerunAction.action.label=&Rerun
-
-TestRunnerViewPart.stopaction.text=Stop JUnit Test
-TestRunnerViewPart.stopaction.tooltip=Stop JUnit Test Run
-TestRunnerViewPart.rerunaction.label=Rerun last Test
-TestRunnerViewPart.rerunaction.tooltip=Rerun last test
-TestRunnerViewPart.error.cannotrerun=Could not rerun test
-TestRunnerViewPart.message.terminated=Terminated
-TestRunnerViewPart.message.launching=Launching TestRunner
-TestRunnerViewPart.cannotrerun.title=Rerun Test
-TestRunnerViewPart.cannotrerurn.message=Can only rerun tests when they are launched under the debugger\nand when the \'keep JUnit running\' is set in the launch configuration.
-TestRunnerViewPart.message.cannotshow=Could not show JUnit Result View
-TestRunnerViewPart.label.failure=Failure Trace
-TestRunnerViewPart.message.finish= JUnit test run finished: {0} seconds
-TestRunnerViewPart.message.stopped= JUnit test run stopped after: {0} seconds
-TestRunnerViewPart.message.started= JUnit test run started: {0}
-TestRunnerViewPart.message.failure= {0}({1}) had a failure
-TestRunnerViewPart.message.error= {0}({1}) had an error
-TestRunnerViewPart.message.success= {0}({1}) was successful
-TestRunnerViewPart.title= JUnit ({0})
-
-
-JUnitBaseLaunchConfiguration.error.invalidproject=Invalid project specified
-JUnitBaseLaunchConfiguration.error.novmrunner=Internal error: JRE {0} does not specify a VM Runner
-JUnitMainTab.label.project=&Project:
-JUnitMainTab.label.browse=&Browse...
-JUnitMainTab.label.test=T&est class:
-JUnitMainTab.label.search=&Search...
-JUnitMainTab.label.keeprunning=&Keep JUnit running after a test run when debugging
-JUnitMainTab.testdialog.title=Test Selection
-JUnitMainTab.testdialog.message=Choose a test case or test suite:
-JUnitMainTab.projectdialog.title=Project Selection
-JUnitMainTab.projectdialog.message=Choose a project to constrain the search for main types:
-JUnitMainTab.error.projectnotexists=Project does not exist
-JUnitMainTab.error.testnotdefined=Test not specified
-JUnitMainTab.tab.label=Test
-
-RemoteTestRunner.error.classnotfound= Class not found {0}
-RemoteTestRunner.error.exception= "Error:  " {0}
-RemoteTestRunner.error.invoke= Failed to invoke suite(): {0}
-RemoteTestRunner.error.load= Could not reload Test: {0}
-RemoteTestRunner.error.connect= Could not connect to: {0} : {1}			
-
-RemoteTestRunner.error.classnamemissing=Error: parameter '-classNames' or '-className' not specified
-RemoteTestRunner.error.portmissing=Error: parameter '-port' not specified
-
-TestSearchEngine.message.searching=Searching suites
-LaunchTestAction.dialog.title=JUnit Launch
-LaunchTestAction.message.notests=No JUnit tests found.
-LaunchTestAction.dialog.title2=Test Selection
-LaunchTestAction.message.selectTestToRun=Select Test to debug
-LaunchTestAction.message.selectTestToDebug=Select Test to run
-LaunchTestAction.message.launchFailed=JUnit Launch Failed
-LaunchTestAction.message.selectConfiguration=Select a Test Configuration
-LaunchTestAction.message.selectDebugConfiguration=Select JUnit configuration to debug
-LaunchTestAction.message.selectRunConfiguration=Select JUnit configuration to run
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitPlugin.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitPlugin.java
deleted file mode 100644
index 0ab84cf..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitPlugin.java
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.ui;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.AbstractSet;
-import java.util.HashSet;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPluginDescriptor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.debug.core.DebugPlugin;
-import org.eclipse.debug.core.ILaunch;
-import org.eclipse.debug.core.ILaunchConfiguration;
-import org.eclipse.debug.core.ILaunchListener;
-import org.eclipse.debug.core.ILaunchManager;
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.internal.junit.launcher.JUnitBaseLaunchConfiguration;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-
-/**
- * The plug-in runtime class for the JUnit plug-in.
- */
-public class JUnitPlugin extends AbstractUIPlugin implements ILaunchListener {	
-	/**
-	 * The single instance of this plug-in runtime class.
-	 */
-	private static JUnitPlugin fgPlugin= null;
-	
-	public static final String PLUGIN_ID = "org.eclipse.jdt.junit" ; //$NON-NLS-1$
-
-	public final static String TEST_SUPERCLASS_NAME= "junit.framework.TestCase"; //$NON-NLS-1$
-	public final static String TEST_INTERFACE_NAME= "junit.framework.Test"; //$NON-NLS-1$
-
-	private static URL fgIconBaseURL;
-	
-	/**
-	 * Use to track new launches. We need to do this
-	 * so that we only attach a TestRunner once to a launch.
-	 * Once a test runner is connected it is removed from the set.
-	 */
-	private AbstractSet fTrackedLaunches= new HashSet(20);
-	
-	public JUnitPlugin(IPluginDescriptor desc) {
-		super(desc);
-		fgPlugin= this;
-		String pathSuffix= "icons/full/"; //$NON-NLS-1$
-		try {
-			fgIconBaseURL= new URL(getDescriptor().getInstallURL(), pathSuffix);
-		} catch (MalformedURLException e) {
-			// do nothing
-		}
-	}
-		
-	public static JUnitPlugin getDefault() {
-		return fgPlugin;
-	}
-	
-	public static Shell getActiveWorkbenchShell() {
-		IWorkbenchWindow workBenchWindow= getActiveWorkbenchWindow();
-		if (workBenchWindow == null) 
-			return null;
-		return workBenchWindow.getShell();
-	}
-	
-	/**
-	 * Returns the active workbench window
-	 * 
-	 * @return the active workbench window
-	 */
-	public static IWorkbenchWindow getActiveWorkbenchWindow() {
-		if (fgPlugin == null) 
-			return null;
-		IWorkbench workBench= fgPlugin.getWorkbench();
-		if (workBench == null) 
-			return null;
-		return workBench.getActiveWorkbenchWindow();
-	}	
-	
-	public IWorkbenchPage getActivePage() {
-		return getActiveWorkbenchWindow().getActivePage();
-	}
-
-	public static String getPluginId() {
-		return getDefault().getDescriptor().getUniqueIdentifier();
-	}
-	
-	/*
-	 * @see AbstractUIPlugin#initializeDefaultPreferences
-	 */
-	protected void initializeDefaultPreferences(IPreferenceStore store) {
-		super.initializeDefaultPreferences(store);	
-		JUnitPreferencePage.initializeDefaults(store);
-	}
-	
-	public static void log(Throwable e) {
-		log(new Status(IStatus.ERROR, getPluginId(), IStatus.ERROR, "Error", e));  //$NON-NLS-1$
-	}
-
-	public static void log(IStatus status) {
-		getDefault().getLog().log(status);
-	}
-	
-	public static URL makeIconFileURL(String name) throws MalformedURLException {
-		if (JUnitPlugin.fgIconBaseURL == null)
-			throw new MalformedURLException();
-		return new URL(JUnitPlugin.fgIconBaseURL, name);
-	}
-
-	static ImageDescriptor getImageDescriptor(String relativePath) {
-		try {
-			return ImageDescriptor.createFromURL(makeIconFileURL(relativePath));
-		} catch (MalformedURLException e) {
-			// should not happen
-			return ImageDescriptor.getMissingImageDescriptor();
-		}
-	}
-
-	/*
-	 * @see ILaunchListener#launchRemoved(ILaunch)
-	 */
-	public void launchRemoved(ILaunch launch) {
-		fTrackedLaunches.remove(launch);
-	}
-
-	/*
-	 * @see ILaunchListener#launchAdded(ILaunch)
-	 */
-	public void launchAdded(ILaunch launch) {
-		fTrackedLaunches.add(launch);
-	}
-
-	public void connectTestRunner(ILaunch launch, IType launchedType, int port) {
-		IWorkbench workbench= getWorkbench();
-		if (workbench == null)
-			return;
-			
-		IWorkbenchWindow window= getWorkbench().getActiveWorkbenchWindow();
-		IWorkbenchPage page= window.getActivePage();
-		TestRunnerViewPart testRunner= null;
-		if (page != null) {
-			try { // show the result view if it isn't shown yet
-				testRunner= (TestRunnerViewPart)page.findView(TestRunnerViewPart.NAME);
-				if(testRunner == null) {
-					IWorkbenchPart activePart= page.getActivePart();
-					testRunner= (TestRunnerViewPart)page.showView(TestRunnerViewPart.NAME);
-					//restore focus stolen by the creation of the result view
-					page.activate(activePart);
-				} 
-			} catch (PartInitException pie) {
-				log(pie);
-			}
-		}
-		if (testRunner != null)
-			testRunner.startTestRunListening(launchedType, port, launch);	
-	}
-
-	/*
-	 * @see ILaunchListener#launchChanged(ILaunch)
-	 */
-	public void launchChanged(final ILaunch launch) {
-		if (!fTrackedLaunches.contains(launch))
-			return;
-			
-		ILaunchConfiguration config= launch.getLaunchConfiguration();
-		IType launchedType= null;
-		int port= -1;
-		if (config != null) {
-			// test whether the launch defines the JUnit attributes
-			String portStr= launch.getAttribute(JUnitBaseLaunchConfiguration.PORT_ATTR);
-			String typeStr= launch.getAttribute(JUnitBaseLaunchConfiguration.TESTTYPE_ATTR);
-			if (portStr != null && typeStr != null) {
-				port= Integer.parseInt(portStr);
-				IJavaElement element= JavaCore.create(typeStr);
-				if (element instanceof IType) 
-					launchedType= (IType)element; 
-			}
-		}	
-		if (launchedType != null) {
-			fTrackedLaunches.remove(launch);
-			final int finalPort= port;
-			final IType finalType= launchedType;
-			getDisplay().asyncExec(new Runnable() {
-				public void run() {
-					connectTestRunner(launch, finalType, finalPort);
-				}
-			});		
-		}	
-	}
-	
-	/*
-	 * @see Plugin#startup()
-	 */
-	public void startup() throws CoreException {
-		super.startup();
-		ILaunchManager launchManager= DebugPlugin.getDefault().getLaunchManager();
-		launchManager.addLaunchListener(this);	
-	}
-
-	/*
-	 * @see Plugin#shutdown()
-	 */
-	public void shutdown() throws CoreException {
-		super.shutdown();
-		ILaunchManager launchManager= DebugPlugin.getDefault().getLaunchManager();
-		launchManager.removeLaunchListener(this);
-	}
-
-	public static Display getDisplay() {
-		Shell shell= getActiveWorkbenchShell();
-		if (shell != null) {
-			return shell.getDisplay();
-		}
-		Display display= Display.getCurrent();
-		if (display == null) {
-			display= Display.getDefault();
-		}
-		return display;
-	}		
-	
-}
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitPreferencePage.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitPreferencePage.java
deleted file mode 100644
index 47a68c7..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitPreferencePage.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.ui;
-
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.preference.*;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.ui.*;
-import org.eclipse.ui.help.WorkbenchHelp;
-
-/**
- * Preference page for JUnit settings. Supports to define the failure
- * stack filter patterns.
- */
-public class JUnitPreferencePage extends PreferencePage 
-		implements IWorkbenchPreferencePage, SelectionListener {
-					
-	private String fFilterString;
-	private Table fTable;
-	private Button fAddButton;
-	private Button fRemoveButton;
-	private Button fShowOnErrorCheck;
-	
-	public static String STACK_FILTER_ENTRIES_COUNT= "NOF_STACK_FILTER_ENTRIES"; //$NON-NLS-1$
-	public static String STACK_FILTER_ENTRY_= "STACK_FILTER_ENTRY_"; //$NON-NLS-1$
-	public static String DO_FILTER_STACK= "DO_FILTER_STACK"; //$NON-NLS-1$
-	public static String SHOW_ON_ERROR_ONLY= "SHOW_ON_ERROR"; //$NON-NLS-1$
-	
-	private static String[] fgDefaultFilterPatterns= new String[] {
-		"org.eclipse.jdt.internal.junit.runner", //$NON-NLS-1$
-		"org.eclipse.jdt.internal.junit.ui", //$NON-NLS-1$
-		"junit.framework.TestCase", //$NON-NLS-1$
-		"junit.framework.TestResult", //$NON-NLS-1$
-		"junit.framework.TestSuite", //$NON-NLS-1$
-		"junit.framework.Assert.", // don't filter AssertionFailure //$NON-NLS-1$
-		"java.lang.reflect.Method.invoke" //$NON-NLS-1$
-	};
-
-	public JUnitPreferencePage() {
-		super();
-		setPreferenceStore(JUnitPlugin.getDefault().getPreferenceStore());
-	}
-
-	public static String[] getFilterPatterns() {
-		IPreferenceStore store= JUnitPlugin.getDefault().getPreferenceStore();
-		int count= store.getInt(STACK_FILTER_ENTRIES_COUNT);
-		String[] result= new String[count];
-		for (int i= 0; i < count; i++) {
-			result[i]= store.getString(STACK_FILTER_ENTRY_ + i);
-		}
-		return result;
-	}
-	
-	public static boolean getFilterStack() {
-		IPreferenceStore store= JUnitPlugin.getDefault().getPreferenceStore();
-		return store.getBoolean(DO_FILTER_STACK);
-	}
-	
-	public static void setFilterStack(boolean filter) {
-		IPreferenceStore store= JUnitPlugin.getDefault().getPreferenceStore();
-		store.setValue(DO_FILTER_STACK, filter);
-	}
-	
-	public static void initializeDefaults(IPreferenceStore store) {
-		store.setDefault(JUnitPreferencePage.DO_FILTER_STACK, true); 
-		store.setDefault(JUnitPreferencePage.SHOW_ON_ERROR_ONLY, false); 
-		int count= store.getInt(STACK_FILTER_ENTRIES_COUNT);
-		if (count == 0) {
-			store.setValue(STACK_FILTER_ENTRIES_COUNT, fgDefaultFilterPatterns.length);
-			for (int i= 0; i < fgDefaultFilterPatterns.length; i++) {
-				store.setValue(STACK_FILTER_ENTRY_ + i, fgDefaultFilterPatterns[i]);
-			}
-		}
-	}
-	
-	/*
-	 * @see PreferencePage#createContents(Composite)
-	 */
-	protected Control createContents(Composite parent) {
-		noDefaultAndApplyButton();
-		
-		Composite composite= new Composite(parent, SWT.NULL);
-		GridLayout layout= new GridLayout();
-		layout.numColumns= 2;
-		layout.marginWidth= 0;
-		layout.marginHeight= 0;
-		composite.setLayout(layout);
-		GridData data= new GridData();
-		data.verticalAlignment= GridData.FILL;
-		data.horizontalAlignment= GridData.FILL;
-		
-		composite.setLayoutData(data);
-		
-		createShowCheck(composite);
-		createFilterTable(composite);
-		createListButtons(composite);
-		WorkbenchHelp.setHelp(composite, IJUnitHelpContextIds.JUNIT_PREFERENCE_PAGE);
-
-		return composite;
-	}
-
-	private void createShowCheck(Composite composite) {
-		GridData data;
-		fShowOnErrorCheck= new Button(composite, SWT.CHECK);
-		fShowOnErrorCheck.setText(JUnitMessages.getString("JUnitPreferencePage.showcheck.label")); //$NON-NLS-1$
-		data= new GridData();
-		data.horizontalAlignment= GridData.FILL;
-		data.horizontalSpan= 2;
-		fShowOnErrorCheck.setLayoutData(data);		
-		fShowOnErrorCheck.setSelection(getShowOnErrorOnly());
-	}
-
-	/**
-	 * @return boolean
-	 */
-	public static boolean getShowOnErrorOnly() {
-		IPreferenceStore store= JUnitPlugin.getDefault().getPreferenceStore();
-		return store.getBoolean(SHOW_ON_ERROR_ONLY);
-	}
-		
-	protected void createListButtons(Composite composite) {
-		Composite buttonComposite= new Composite(composite, SWT.NONE);
-		GridLayout layout= new GridLayout();
-		layout.marginHeight= 0;
-		buttonComposite.setLayout(layout);	
-		GridData gridData= new GridData();
-		gridData.verticalAlignment= GridData.FILL;
-		gridData.horizontalAlignment= GridData.FILL;
-		buttonComposite.setLayoutData(gridData);
-		
-		fAddButton= new Button(buttonComposite, SWT.CENTER | SWT.PUSH);
-		fAddButton.setText(JUnitMessages.getString("JUnitPreferencePage.addbutton.label")); //$NON-NLS-1$
-		setButtonGridData(fAddButton);
-		fAddButton.addSelectionListener(this);
-
-		fRemoveButton= new Button(buttonComposite, SWT.CENTER | SWT.PUSH);
-		fRemoveButton.setText(JUnitMessages.getString("JUnitPreferencePage.removebutton.label")); //$NON-NLS-1$
-		setButtonGridData(fRemoveButton);
-		fRemoveButton.addSelectionListener(this);
-	}
-	
-	private void setButtonGridData(Button button) {
-		GridData data = new GridData();
-		data.horizontalAlignment = GridData.FILL;
-		data.grabExcessHorizontalSpace = true;
-		data.heightHint= convertVerticalDLUsToPixels(IDialogConstants.BUTTON_HEIGHT);
-		int widthHint= convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH);
-		data.widthHint= Math.max(widthHint, button.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x);
-		button.setLayoutData(data);
-	}
-
-	protected void createFilterTable(Composite composite) {
-		Label label= new Label(composite, SWT.NONE);
-		label.setText(JUnitMessages.getString("JUnitPreferencePage.filter.label")); //$NON-NLS-1$
-		GridData gridData= new GridData();
-		gridData.horizontalAlignment= GridData.FILL;
-		gridData.horizontalSpan= 2;
-		label.setLayoutData(gridData);
-		
-		fTable= new Table(composite, SWT.BORDER | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
-		GridData data= new GridData();
-		//Set heightHint with a small value so the list size will be defined by 
-		//the space available in the dialog instead of resizing the dialog to
-		//fit all the items in the list.
-		data.heightHint= fTable.getItemHeight();
-		data.verticalAlignment= GridData.FILL;
-		data.horizontalAlignment= GridData.FILL;
-		data.grabExcessHorizontalSpace= true;
-		data.grabExcessVerticalSpace= true;
-
-		fTable.setLayoutData(data);
-		fTable.addSelectionListener(this);
-		fillList();
-		if (fTable.getItemCount() > 0)
-			fTable.setSelection(0);
-	}
-	
-	/*
-	 * @see IWorkbenchPreferencePage#init(IWorkbench)
-	 */
-	public void init(IWorkbench workbench) {
-	}
-	
-	/*
-	 * @see SelectionListener#widgetDefaultSelected(SelectionEvent)
-	 */
-	public void widgetDefaultSelected(SelectionEvent selectionEvent) {
-		widgetSelected(selectionEvent);
-	}
-
-
-	protected void addFilterString(String filterEntry) {
-		if (filterEntry != null) {
-			TableItem tableItem= new TableItem(fTable, SWT.NONE);
-			tableItem.setText(filterEntry);
-		}
-	}
-			
-	/*
-	 * @see SelectionListener#widgetSelected(SelectionEvent)
-	 */
-	public void widgetSelected(SelectionEvent selectionEvent) {
-		if (selectionEvent.getSource().equals(fAddButton)) {
-			FilterPatternsDialog dialog= new FilterPatternsDialog(getControl().getShell(), JUnitMessages.getString("JUnitPreferencePage.adddialog.title"), JUnitMessages.getString("JUnitPreferencePage.addialog.prompt")); //$NON-NLS-1$ //$NON-NLS-2$
-			dialog.open();
-			String pattern= dialog.getValue();
-			addFilterString(pattern);
-			fTable.deselectAll();
-			fTable.select(fTable.getItemCount()-1);
-		}
-		else if (selectionEvent.getSource().equals(fRemoveButton)) {
-			fTable.remove(fTable.getSelectionIndices());
-		}	
-	    fRemoveButton.setEnabled(fTable.getSelectionIndex() != -1);
-	}
-	
-	public boolean performOk() {
-		IPreferenceStore store= getPreferenceStore();
-		int filterEntriesCount= fTable.getItemCount();
-		
-		store.setValue(STACK_FILTER_ENTRIES_COUNT, filterEntriesCount);
-		for (int i= 0; i < filterEntriesCount; i++) {
-			store.setValue(STACK_FILTER_ENTRY_ + i, fTable.getItem(i).getText());
-		}
-		store.setValue(SHOW_ON_ERROR_ONLY, fShowOnErrorCheck.getSelection());
-		return true;			
-	}
-	
-	private void fillList() {
-		String[] patterns= getFilterPatterns();		
-		for (int i= 0; i < patterns.length; i++) {
-			TableItem tableItem= new TableItem(fTable, SWT.NONE);
-			tableItem.setText(patterns[i]);
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/OpenEditorAction.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/OpenEditorAction.java
deleted file mode 100644
index d937ac1..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/OpenEditorAction.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.ui;
-
-import org.eclipse.core.runtime.CoreException;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.dialogs.ErrorDialog;
-import org.eclipse.jface.dialogs.MessageDialog;
-
-import org.eclipse.ui.texteditor.ITextEditor;
-
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.JavaModelException;
-
-import org.eclipse.jdt.internal.ui.javaeditor.EditorUtility;
-
-/**
- * Abstract Action for opening a Java editor.
- */
-public abstract class OpenEditorAction extends Action {
-	protected String fClassName;
-	protected TestRunnerViewPart fTestRunner;
-	
-	/**
-	 * Constructor for OpenEditorAction.
-	 */
-	protected OpenEditorAction(TestRunnerViewPart testRunner, String testClassName) {
-		super(JUnitMessages.getString("OpenEditorAction.action.label")); //$NON-NLS-1$
-		fClassName= testClassName;
-		fTestRunner= testRunner;
-	}
-
-	/*
-	 * @see IAction#run()
-	 */
-	public void run() {
-		ITextEditor textEditor= null;
-		try {
-			IJavaElement element= findElement(fTestRunner.getLaunchedProject(), fClassName);
-			if (element == null) {
-				MessageDialog.openError(fTestRunner.getSite().getShell(), 
-					JUnitMessages.getString("OpenEditorAction.error.cannotopen.title"), JUnitMessages.getString("OpenEditorAction.error.cannotopen.message")); //$NON-NLS-1$ //$NON-NLS-2$
-				return;
-			}
-			// use of internal API for backward compatibility with 1.0
-			textEditor= (ITextEditor)EditorUtility.openInEditor(element, false);			
-		} catch (CoreException e) {
-			ErrorDialog.openError(fTestRunner.getSite().getShell(), JUnitMessages.getString("OpenEditorAction.error.dialog.title"), JUnitMessages.getString("OpenEditorAction.error.dialog.message"), e.getStatus()); //$NON-NLS-1$ //$NON-NLS-2$
-			return;
-		}
-		if (textEditor == null) {
-			fTestRunner.postInfo(JUnitMessages.getString("OpenEditorAction.message.cannotopen")); //$NON-NLS-1$
-			return;
-		}
-		reveal(textEditor);
-	}
-	
-	protected abstract IJavaElement findElement(IJavaProject project, String className) throws JavaModelException;
-	
-	protected abstract void reveal(ITextEditor editor);
-}
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/OpenEditorAtLineAction.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/OpenEditorAtLineAction.java
deleted file mode 100644
index 1e8f0ea..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/OpenEditorAtLineAction.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.ui;
-
-import org.eclipse.jface.text.BadLocationException;
-import org.eclipse.jface.text.IDocument;
-
-import org.eclipse.ui.help.WorkbenchHelp;
-import org.eclipse.ui.texteditor.ITextEditor;
-
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.JavaModelException;
-
-/**
- * Open a test in the Java editor and reveal a given line
- */
-public class OpenEditorAtLineAction extends OpenEditorAction {
-	
-	private int fLineNumber;
-	
-	/**
-	 * Constructor for OpenEditorAtLineAction.
-	 */
-	public OpenEditorAtLineAction(TestRunnerViewPart testRunner, String className, int line) {
-		super(testRunner, className);
-		WorkbenchHelp.setHelp(this, IJUnitHelpContextIds.OPENEDITORATLINE_ACTION);
-		fLineNumber= line;
-	}
-		
-	protected void reveal(ITextEditor textEditor) {
-		if (fLineNumber >= 0) {
-			try {
-				IDocument document= textEditor.getDocumentProvider().getDocument(textEditor.getEditorInput());
-				textEditor.selectAndReveal(document.getLineOffset(fLineNumber-1), document.getLineLength(fLineNumber-1));
-			} catch (BadLocationException x) {
-				// marker refers to invalid text position -> do nothing
-			}
-		}
-	}
-	
-	protected IJavaElement findElement(IJavaProject project, String className) throws JavaModelException {
-		return project.findType(className);
-	}
-}
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/OpenTestAction.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/OpenTestAction.java
deleted file mode 100644
index 6bc3651..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/OpenTestAction.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.ui;
-
-import org.eclipse.ui.help.WorkbenchHelp;
-import org.eclipse.ui.texteditor.ITextEditor;
-
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IMethod;
-import org.eclipse.jdt.core.ISourceRange;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.ITypeHierarchy;
-import org.eclipse.jdt.core.JavaModelException;
-
-/**
- * Open a class on a Test method.
- */
-public class OpenTestAction extends OpenEditorAction {
-	
-	private String fMethodName;
-	private ISourceRange fRange;
-	
-	/**
-	 * Constructor for OpenTestAction.
-	 */
-	public OpenTestAction(TestRunnerViewPart testRunner, String className, String method) {
-		super(testRunner, className);
-		WorkbenchHelp.setHelp(this, IJUnitHelpContextIds.OPENTEST_ACTION);
-		fMethodName= method;
-	}
-	
-	public OpenTestAction(TestRunnerViewPart testRunner, String className) {
-		this(testRunner, className, null);
-	}
-
-	protected IJavaElement findElement(IJavaProject project, String className) throws JavaModelException {
-		IType type= project.findType(className);
-		if (type == null) 
-			return null;
-		
-		if (fMethodName == null)
-			return type;
-			
-		IMethod method= findMethod(type);
-		if (method == null) {
-			ITypeHierarchy typeHierarchy= type.newSupertypeHierarchy(null);
-			IType[] types= typeHierarchy.getAllSuperclasses(type);
-			for (int i= 0; i < types.length; i++) {
-				method= findMethod(types[i]);
-				if (method != null)
-					break;
-			}
-		}
-		if (method != null)
-			fRange= method.getNameRange();
-		return method;
-	}
-	
-	IMethod findMethod(IType type) throws JavaModelException {
-		IMethod method= type.getMethod(fMethodName, new String[0]);
-		if (method != null && method.exists())
-			return method;
-		return null;
-	}
-	
-	protected void reveal(ITextEditor textEditor) {
-		if (fRange != null)
-			textEditor.selectAndReveal(fRange.getOffset(), fRange.getLength());
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/ProgressImages.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/ProgressImages.java
deleted file mode 100644
index 9c1b58e..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/ProgressImages.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package org.eclipse.jdt.internal.junit.ui;
-
-import java.net.MalformedURLException;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.swt.graphics.Image;
-
-/**
- * Manages a set of images that can show progress in the image itself.
- */
-public class ProgressImages {
-	static final int PROGRESS_STEPS= 9;
-	
-	static final String BASE= "prgss/"; //$NON-NLS-1$
-	static final String FAILURE= "ff"; //$NON-NLS-1$
-	static final String OK= "ss"; //$NON-NLS-1$
-	
-	Image[] fOKImages= new Image[PROGRESS_STEPS];
-	Image[] fFailureImages= new Image[PROGRESS_STEPS];
-	Image fMissingImage= null;
-	
-	void load() {
-		if (isLoaded())
-			return;
-			
-		for (int i= 0; i < PROGRESS_STEPS; i++) {
-			String okname= BASE+OK+Integer.toString(i+1)+".gif"; //$NON-NLS-1$ 
-			fOKImages[i]= createImage(okname);
-			String failurename= BASE+FAILURE+Integer.toString(i+1)+".gif"; //$NON-NLS-1$ 
-			fFailureImages[i]= createImage(failurename);
-		}
-	}
-
-	Image createImage(String name) {
-		try {
-			ImageDescriptor id= ImageDescriptor.createFromURL(JUnitPlugin.makeIconFileURL(name));
-			return id.createImage();
-		} catch (MalformedURLException e) {
-			// fall through
-		}  
-		if (fMissingImage == null) 
-			fMissingImage= ImageDescriptor.getMissingImageDescriptor().createImage();
-		return fMissingImage;
-	}
-	
-	public void dispose() {
-		if (!isLoaded())
-			return; 
-			
-		if (fMissingImage != null)
-			fMissingImage.dispose();	
-				
-		for (int i= 0; i < PROGRESS_STEPS; i++) {
-			fOKImages[i].dispose();
-			fOKImages[i]= null;
-			fFailureImages[i].dispose();
-			fFailureImages[i]= null;
-		}
-	}
-	
-	public Image getImage(int current, int total, int errors, int failures) {
-		if (!isLoaded())
-			load();
-			
-		if (total == 0)
-			return fOKImages[0];
-		int index= ((current*PROGRESS_STEPS)/total)-1;
-		index= Math.min(Math.max(0, index), PROGRESS_STEPS-1);
-
-		if (errors + failures == 0)
-			return fOKImages[index];
-		return fFailureImages[index];
-	}
-	
-	boolean isLoaded() {
-		return fOKImages[0] != null;
-	}	
-}
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/RemoteTestRunnerClient.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/RemoteTestRunnerClient.java
deleted file mode 100644
index 4ed08f6..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/RemoteTestRunnerClient.java
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.ui;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.PrintWriter;
-import java.net.ServerSocket;
-import java.net.Socket;
-import java.net.SocketException;
-
-import org.eclipse.jdt.internal.junit.runner.ITestRunListener;
-import org.eclipse.jdt.internal.junit.runner.MessageIds;
-
-/**
- * The client side of the RemoteTestRunner. Handles the
- * marshalling of th different messages.
- */
-public class RemoteTestRunnerClient {
-	/**
-	 * A listener that is informed about test events.
-	 */
-	private ITestRunListener fListener;
-	/**
-	 * The server socket
-	 */
-	private ServerSocket fServerSocket;
-	private Socket fSocket;
-	private int fPort= -1;
-	private PrintWriter fWriter;
-	private BufferedReader fBufferedReader;
-
-	/**
-	 * RemoteTestRunner is sending trace. 
-	 */
-	private boolean fInReadTrace= false;
-	/**
-	 * RemoteTestRunner is sending the rerun trace. 
-	 */
-	private boolean fInReadRerunTrace= false;
-	/**
-	 * The currently received failed message
-	 */
-	private boolean fInFailedMessage= false;
-	/**
-	 * The failed test that is currently reported from the RemoteTestRunner
-	 */
-	private String fFailedTest;
-	/**
-	 * The failed message that is currently reported from the RemoteTestRunner
-	 */
-	private String fFailedMessage;
-	/**
-	 * The failed trace that is currently reported from the RemoteTestRunner
-	 */
-	private String fFailedTrace;
-	/**
-	 * The failed trace of a reran test
-	 */
-	private String fFailedRerunTrace;
-	/**
-	 * The kind of failure of the test that is currently reported as failed
-	 */
-	private int fFailureKind;
-	
-	private boolean fDebug= false;
-	
-	/**
-	 * Reads the message stream from the RemoteTestRunner
-	 */
-	private class ServerConnection extends Thread {
-		int fPort;
-		
-		public ServerConnection(int port) {
-			super("ServerConnection"); //$NON-NLS-1$
-			fPort= port;
-		}
-		
-		public void run() {
-			try {
-				if (fDebug)
-					System.out.println("Creating server socket "+fPort); //$NON-NLS-1$
-				fServerSocket= new ServerSocket(fPort);
-				fSocket= fServerSocket.accept();				
-				fBufferedReader= new BufferedReader(new InputStreamReader(fSocket.getInputStream()));
-				fWriter= new PrintWriter(fSocket.getOutputStream(), true);
-				String message;
-				while(fBufferedReader != null && (message= readMessage(fBufferedReader)) != null)
-					receiveMessage(message);
-			} catch (SocketException e) {
-				fListener.testRunTerminated();
-			} catch (IOException e) {
-				System.out.println(e);
-				// fall through
-			}
-			shutDown();
-		}
-	}
-
-	/**
-	 * Start listening to a test run. Start a server connection that
-	 * the RemoteTestRunner can connect to.
-	 */
-	public synchronized void startListening(ITestRunListener listener, int port) {
-		fListener= listener;
-		fPort= port;
-		ServerConnection connection= new ServerConnection(port);
-		connection.start();		
-	}
-	
-	/**
-	 * Requests to stop the remote test run.
-	 */
-	public synchronized void stopTest() {
-		if (isRunning()) {
-			fWriter.println(MessageIds.TEST_STOP);
-			fWriter.flush();
-		}
-	}
-
-	/**
-	 * Requests to rerun a test
-	 */
-	public synchronized void rerunTest(String className, String testName) {
-		if (isRunning()) {
-			fWriter.println(MessageIds.TEST_RERUN+className+" "+testName); //$NON-NLS-1$
-			fWriter.flush();
-		}
-	}
-
-	private synchronized void shutDown() {
-		if (fDebug) 
-			System.out.println("shutdown "+fPort); //$NON-NLS-1$
-		
-		if (fWriter != null) {
-			fWriter.close();
-			fWriter= null;
-		}
-		try {
-			if (fBufferedReader != null) {
-				fBufferedReader.close();
-				fBufferedReader= null;
-			}
-		} catch(IOException e) {
-		}	
-		try{
-			if(fSocket != null) {
-				fSocket.close();
-				fSocket= null;
-			}
-		} catch(IOException e) {
-		}
-		try{
-			if(fServerSocket != null) {
-				fServerSocket.close();
-				fServerSocket= null;
-			}
-		} catch(IOException e) {
-		}
-	}
-	
-	public boolean isRunning() {
-		return fSocket != null;
-	}
-	
-	private String readMessage(BufferedReader in) throws IOException {
-		return in.readLine();
-	}
-		
-	private void receiveMessage(String message) {
-		if (message.startsWith(MessageIds.TRACE_START)) {
-			fInReadTrace= true;
-			fFailedTrace= ""; //$NON-NLS-1$
-			return;
-		}
-		if (message.startsWith(MessageIds.TRACE_END)) {
-			fInReadTrace= false;
-			fListener.testFailed(fFailureKind, fFailedTest, fFailedTrace);
-			fFailedTrace= ""; //$NON-NLS-1$
-			return;
-		}
-		if (fInReadTrace) {
-			fFailedTrace+= message + '\n';
-			return;
-		}
-		
-		if (message.startsWith(MessageIds.RTRACE_START)) {
-			fInReadRerunTrace= true;
-			fFailedRerunTrace= ""; //$NON-NLS-1$
-			return;
-		}
-		if (message.startsWith(MessageIds.RTRACE_END)) {
-			fInReadRerunTrace= false;
-			return;
-		}
-		if (fInReadRerunTrace) {
-			fFailedRerunTrace+= message + '\n';
-			return;
-		}
-
-		String arg= message.substring(MessageIds.MSG_HEADER_LENGTH);
-		if (message.startsWith(MessageIds.TEST_RUN_START)) {
-			int count= Integer.parseInt(arg);
-			fListener.testRunStarted(count);
-			return;
-		}
-		if (message.startsWith(MessageIds.TEST_START)) {
-			fListener.testStarted(arg);
-			return;
-		}
-		if (message.startsWith(MessageIds.TEST_END)) {
-			fListener.testEnded(arg);
-			return;
-		}
-		if (message.startsWith(MessageIds.TEST_ERROR)) {
-			fFailedTest= arg;
-			fFailureKind= ITestRunListener.STATUS_ERROR;
-			return;
-		}
-		if (message.startsWith(MessageIds.TEST_FAILED)) {
-			fFailedTest= arg;
-			fFailureKind= ITestRunListener.STATUS_FAILURE;
-			return;
-		}
-		if (message.startsWith(MessageIds.TEST_RUN_END)) {
-			long elapsedTime= Long.parseLong(arg);
-			fListener.testRunEnded(elapsedTime);
-			return;
-		}
-		if (message.startsWith(MessageIds.TEST_STOPPED)) {
-			long elapsedTime= Long.parseLong(arg);
-			fListener.testRunStopped(elapsedTime);
-			shutDown();
-			return;
-		}
-		if (message.startsWith(MessageIds.TEST_TREE)) {
-			fListener.testTreeEntry(arg);
-			return;
-		}
-		if (message.startsWith(MessageIds.TEST_RERAN)) {
-			// format: className" "testName" "status
-			// status: FAILURE, ERROR, OK
-			int c= arg.indexOf(" "); //$NON-NLS-1$
-			int t= arg.indexOf(" ", c+1); //$NON-NLS-1$
-			String className= arg.substring(0, c);
-			String testName= arg.substring(c+1, t);
-			String status= arg.substring(t+1);
-			int statusCode= ITestRunListener.STATUS_OK;
-			if (status.equals("FAILURE")) //$NON-NLS-1$
-				statusCode= ITestRunListener.STATUS_FAILURE;
-			else if (status.equals("ERROR")) //$NON-NLS-1$
-				statusCode= ITestRunListener.STATUS_ERROR;
-				
-			String trace= ""; //$NON-NLS-1$
-			if (statusCode != ITestRunListener.STATUS_OK)
-				trace= fFailedRerunTrace; // assumption a rerun trace was sent before
-			fListener.testReran(className, testName, statusCode, trace);
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/RerunAction.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/RerunAction.java
deleted file mode 100644
index 3728f59..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/RerunAction.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.ui;
-
-import org.eclipse.ui.help.WorkbenchHelp;
-
-import org.eclipse.jface.action.Action;
-
-/**
- * Requests to rerun a test.
- */
-public class RerunAction extends Action {
-	private String fClassName;
-	private String fTestName;
-	private TestRunnerViewPart fTestRunner;
-	
-	/**
-	 * Constructor for RerunAction.
-	 */
-	public RerunAction(TestRunnerViewPart runner, String className, String testName) {
-		super(JUnitMessages.getString("RerunAction.action.label"));  //$NON-NLS-1$
-		WorkbenchHelp.setHelp(this, IJUnitHelpContextIds.RERUN_ACTION);
-		fTestRunner= runner;
-		fClassName= className;
-		fTestName= testName;
-	}
-
-	/*
-	 * @see IAction#run()
-	 */
-	public void run() {
-		fTestRunner.rerunTest(fClassName, fTestName);
-	}
-}
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TabFolderLayout.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TabFolderLayout.java
deleted file mode 100644
index 1ff4221..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TabFolderLayout.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved
- */
-package org.eclipse.jdt.internal.junit.ui;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Layout;
-
-/**
- * Layout that fixes an SWT limitation on Motif
- */
-public class TabFolderLayout extends Layout {
-	
-	protected Point computeSize (Composite composite, int wHint, int hHint, boolean flushCache) {
-		if (wHint != SWT.DEFAULT && hHint != SWT.DEFAULT)
-			return new Point(wHint, hHint);
-			
-		Control [] children = composite.getChildren ();
-		int count = children.length;
-		int maxWidth = 0, maxHeight = 0;
-		for (int i=0; i<count; i++) {
-			Control child = children [i];
-			Point pt = child.computeSize (SWT.DEFAULT, SWT.DEFAULT, flushCache);
-			maxWidth = Math.max (maxWidth, pt.x);
-			maxHeight = Math.max (maxHeight, pt.y);
-		}
-		if (wHint != SWT.DEFAULT)
-			maxWidth= wHint;
-		if (hHint != SWT.DEFAULT)
-			maxHeight= hHint;
-		
-		return new Point(maxWidth, maxHeight);	
-		
-	}
-	
-	protected void layout (Composite composite, boolean flushCache) {
-		Rectangle rect = composite.getClientArea();
-	
-		Control[] children = composite.getChildren();
-		for (int i = 0; i < children.length; i++) {
-			children[i].setBounds(rect);
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestRunInfo.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestRunInfo.java
deleted file mode 100644
index f2df89d..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestRunInfo.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.ui;
-
-/**
- * Store information about an executed test.
- */
-public class TestRunInfo extends Object {
-	public String fTestName;
-	public String fTrace;
-	public int fStatus;
-
-	public TestRunInfo(String testName){
-		fTestName= testName;
-	}	
-	
-	/*
-	 * @see Object#hashCode()
-	 */
-	public int hashCode() {
-		return fTestName.hashCode();
-	}
-
-	/*
-	 * @see Object#equals(Object)
-	 */
-	public boolean equals(Object obj) {
-		return fTestName.equals(obj);
-	}
-}
-
-
-
-
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestRunnerViewPart.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestRunnerViewPart.java
deleted file mode 100644
index 33acf0c..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestRunnerViewPart.java
+++ /dev/null
@@ -1,880 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.ui;
-
-import java.net.MalformedURLException;
-import java.text.NumberFormat;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Vector;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.debug.core.*;
-import org.eclipse.debug.core.ILaunchManager;
-import org.eclipse.debug.ui.DebugUITools;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CLabel;
-import org.eclipse.swt.custom.CTabFolder;
-import org.eclipse.swt.custom.SashForm;
-import org.eclipse.swt.custom.ViewForm;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.ProgressBar;
-import org.eclipse.swt.widgets.ToolBar;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IStatusLineManager;
-import org.eclipse.jface.action.IToolBarManager;
-import org.eclipse.jface.action.ToolBarManager;
-import org.eclipse.jface.dialogs.ErrorDialog;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.util.IPropertyChangeListener;
-import org.eclipse.jface.util.PropertyChangeEvent;
-
-import org.eclipse.ui.IActionBars;
-import org.eclipse.ui.IEditorActionBarContributor;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IViewPart;
-import org.eclipse.ui.IViewSite;
-import org.eclipse.ui.IWorkbenchActionConstants;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.help.WorkbenchHelp;
-import org.eclipse.ui.part.EditorActionBarContributor;
-import org.eclipse.ui.part.ViewPart;
-
-import org.eclipse.jdt.core.ElementChangedEvent;
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IElementChangedListener;
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IJavaElementDelta;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.JavaCore;
-
-import org.eclipse.jdt.internal.junit.runner.ITestRunListener;
-
-/**
- * A ViewPart that shows the results of a test run.
- */
-public class TestRunnerViewPart extends ViewPart implements ITestRunListener, IPropertyChangeListener {
-
-	public static final String NAME= "org.eclipse.jdt.junit.ResultView"; //$NON-NLS-1$
- 	/**
- 	 * Number of executed tests during a test run
- 	 */
-	protected int fExecutedTests;
-	/**
-	 * Number of errors during this test run
-	 */
-	protected int fErrors;
-	/**
-	 * Number of failures during this test run
-	 */
-	protected int fFailures;
-	/**
-	 * Number of tests run
-	 */
-	private int fTestCount;
-	/**
-	 * Map storing TestInfos for each executed test keyed by
-	 * the test name.
-	 */
-	private Map fTestInfos = new HashMap();
-	/**
-	 * The first failure of a test run. Used to reveal the
-	 * first failed tests at the end of a run.
-	 */
-	private TestRunInfo fFirstFailure;
-
-	private ProgressBar fProgressBar;
-	private ProgressImages fProgressImages;
-	private Image fViewImage;
-	private CounterPanel fCounterPanel;
-	private boolean fShowOnErrorOnly= false;
-
-	/** 
-	 * The view that shows the stack trace of a failure
-	 */
-	private FailureTraceView fFailureView;
-	/** 
-	 * The collection of ITestRunViews
-	 */
-	private Vector fTestRunViews = new Vector();
-	/**
-	 * The currently active run view
-	 */
-	private ITestRunView fActiveRunView;
-	/**
-	 * Is the UI disposed
-	 */
-	private boolean fIsDisposed= false;
-	/**
-	 * The launched project
-	 */
-	private IJavaProject fTestProject;
-	/**
-	 * The launcher that has started the test
-	 */
-	private String fLaunchMode;
-	private ILaunch fLastLaunch= null;
-	/**
-	 * The client side of the remote test runner
-	 */
-	private RemoteTestRunnerClient fTestRunnerClient;
-
-	final Image fStackViewIcon= TestRunnerViewPart.createImage("cview16/stackframe.gif");//$NON-NLS-1$
-	final Image fTestRunOKIcon= TestRunnerViewPart.createImage("cview16/junitsucc.gif"); //$NON-NLS-1$
-	final Image fTestRunFailIcon= TestRunnerViewPart.createImage("cview16/juniterr.gif"); //$NON-NLS-1$
-	final Image fTestRunOKDirtyIcon= TestRunnerViewPart.createImage("cview16/junitsuccq.gif"); //$NON-NLS-1$
-	final Image fTestRunFailDirtyIcon= TestRunnerViewPart.createImage("cview16/juniterrq.gif"); //$NON-NLS-1$
-	
-	Image fOriginalViewImage= null;
-	IElementChangedListener fDirtyListener= null;
-	
-	private class StopAction extends Action{
-		public StopAction() {
-			setText(JUnitMessages.getString("TestRunnerViewPart.stopaction.text"));//$NON-NLS-1$
-			setToolTipText(JUnitMessages.getString("TestRunnerViewPart.stopaction.tooltip"));//$NON-NLS-1$
-			setDisabledImageDescriptor(JUnitPlugin.getImageDescriptor("dlcl16/stop.gif")); //$NON-NLS-1$
-			setHoverImageDescriptor(JUnitPlugin.getImageDescriptor("clcl16/stop.gif")); //$NON-NLS-1$
-			setImageDescriptor(JUnitPlugin.getImageDescriptor("elcl16/stop.gif")); //$NON-NLS-1$
-		}
-
-		public void run() {
-			stopTest();
-		}
-	}
-
-	private class RerunAction extends Action{
-		public RerunAction() {
-			setText(JUnitMessages.getString("TestRunnerViewPart.rerunaction.label")); //$NON-NLS-1$
-			setToolTipText(JUnitMessages.getString("TestRunnerViewPart.rerunaction.tooltip")); //$NON-NLS-1$
-			setDisabledImageDescriptor(JUnitPlugin.getImageDescriptor("dlcl16/relaunch.gif")); //$NON-NLS-1$
-			setHoverImageDescriptor(JUnitPlugin.getImageDescriptor("clcl16/relaunch.gif")); //$NON-NLS-1$
-			setImageDescriptor(JUnitPlugin.getImageDescriptor("elcl16/relaunch.gif")); //$NON-NLS-1$
-		}
-		
-		public void run(){
-			rerunTestRun();
-		}
-	}
-	
-	/**
-	 * Listen for for modifications to Java elements
-	 */
-	private class DirtyListener implements IElementChangedListener {
-		public void elementChanged(ElementChangedEvent event) {
-			processDelta(event.getDelta());				
-		}
-		
-		private boolean processDelta(IJavaElementDelta delta) {
-			int kind= delta.getKind();
-			int details= delta.getFlags();
-			int type= delta.getElement().getElementType();
-			
-			switch (type) {
-				// Consider containers for class files.
-				case IJavaElement.JAVA_MODEL:
-				case IJavaElement.JAVA_PROJECT:
-				case IJavaElement.PACKAGE_FRAGMENT_ROOT:
-				case IJavaElement.PACKAGE_FRAGMENT:
-					// If we did some different than changing a child we flush the the undo / redo stack.
-					if (kind != IJavaElementDelta.CHANGED || details != IJavaElementDelta.F_CHILDREN) {
-						codeHasChanged();
-						return false;
-					}
-					break;
-				case IJavaElement.COMPILATION_UNIT:
-					ICompilationUnit unit= (ICompilationUnit)delta.getElement();
-					// If we change a working copy we do nothing
-					if (unit.isWorkingCopy()) {
-						// Don't examine children of a working copy but keep processing siblings.
-						return true;
-					} else {
-						codeHasChanged();
-						return false;
-					}
-				case IJavaElement.CLASS_FILE:
-					// Don't examine children of a class file but keep on examining siblings.
-					return true;
-				default:
-					codeHasChanged();
-					return false;	
-			}
-				
-			IJavaElementDelta[] affectedChildren= delta.getAffectedChildren();
-			if (affectedChildren == null)
-				return true;
-	
-			for (int i= 0; i < affectedChildren.length; i++) {
-				if (!processDelta(affectedChildren[i]))
-					return false;
-			}
-			return true;			
-		}
-	}
-	
-	/**
-	 * Stops the currently running test and shuts down the RemoteTestRunner
-	 */
-	public void stopTest() {
-		if (fTestRunnerClient != null)
-			fTestRunnerClient.stopTest();
-	}
-
-	/**
-	 * Stops the currently running test and shuts down the RemoteTestRunner
-	 */
-	public void rerunTestRun() {
-		if (fLastLaunch != null && fLastLaunch.getLaunchConfiguration() != null) {
-			try {
-				DebugUITools.saveAndBuildBeforeLaunch();
-				fLastLaunch.getLaunchConfiguration().launch(fLastLaunch.getLaunchMode(), null);		
-			} catch (CoreException e) {
-				ErrorDialog.openError(getSite().getShell(), 
-					JUnitMessages.getString("TestRunnerViewPart.error.cannotrerun"), e.getMessage(), e.getStatus() //$NON-NLS-1$
-				);
-			}
-		}
-	}
-
-	/*
-	 * @see ITestRunListener#testRunStarted(testCount)
-	 */
-	public void testRunStarted(final int testCount){
-		reset(testCount);
-		fShowOnErrorOnly= JUnitPreferencePage.getShowOnErrorOnly();
-		fExecutedTests++;
-	}
-
-	/*
-	 * @see ITestRunListener#testRunEnded
-	 */
-	public void testRunEnded(long elapsedTime){
-		fExecutedTests--;
-		String msg= JUnitMessages.getFormattedString("TestRunnerViewPart.message.finish", elapsedTimeAsString(elapsedTime)); //$NON-NLS-1$
-		postInfo(msg);
-		postAsyncRunnable(new Runnable() {				
-			public void run() {
-				if(isDisposed()) 
-					return;	
-				if (fFirstFailure != null) {
-					fActiveRunView.setSelectedTest(fFirstFailure.fTestName);
-					handleTestSelected(fFirstFailure.fTestName);
-				}
-				updateViewIcon();
-				if (fDirtyListener == null) {
-					fDirtyListener= new DirtyListener();
-					JavaCore.addElementChangedListener(fDirtyListener);
-				}
-			}
-		});	
-	}
-
-	private void updateViewIcon() {
-		if (fErrors+fFailures > 0) 
-			fViewImage= fTestRunFailIcon;
-		else 
-			fViewImage= fTestRunOKIcon;
-		firePropertyChange(IWorkbenchPart.PROP_TITLE);	
-	}
-
-	private String elapsedTimeAsString(long runTime) {
-		return NumberFormat.getInstance().format((double)runTime/1000);
-	}
-
-	/*
-	 * @see ITestRunListener#testRunStopped
-	 */
-	public void testRunStopped(final long elapsedTime) {
-		String msg= JUnitMessages.getFormattedString("TestRunnerViewPart.message.stopped", elapsedTimeAsString(elapsedTime)); //$NON-NLS-1$
-		postInfo(msg);
-		postAsyncRunnable(new Runnable() {				
-			public void run() {
-				if(isDisposed()) 
-					return;	
-				resetViewIcon();
-			}
-		});	
-
-	}
-
-	private void resetViewIcon() {
-		fViewImage= fOriginalViewImage;
-		firePropertyChange(IWorkbenchPart.PROP_TITLE);
-	}
-
-	/*
-	 * @see ITestRunListener#testRunTerminated
-	 */
-	public void testRunTerminated() {
-		String msg= JUnitMessages.getString("TestRunnerViewPart.message.terminated"); //$NON-NLS-1$
-		showMessage(msg);
-	}
-
-	private void showMessage(String msg) {
-		showInformation(msg);
-		postError(msg);
-	}
-
-	/*
-	 * @see ITestRunListener#testStarted
-	 */
-	public void testStarted(String testName) {
-		// reveal the part when the first test starts
-		if (!fShowOnErrorOnly && fExecutedTests == 1) 
-			postShowTestResultsView();
-			
-		postInfo(JUnitMessages.getFormattedString("TestRunnerViewPart.message.started", testName)); //$NON-NLS-1$
-		TestRunInfo testInfo= getTestInfo(testName);
-		if (testInfo == null) 
-			fTestInfos.put(testName, new TestRunInfo(testName));
-	}
-
-	/*
-	 * @see ITestRunListener#testEnded
-	 */
-	public void testEnded(String testName){
-		postEndTest(testName);
-		fExecutedTests++;
-	}
-
-	/*
-	 * @see ITestRunListener#testFailed
-	 */
-	public void testFailed(int status, String testName, String trace){
-		TestRunInfo testInfo= getTestInfo(testName);
-		if (testInfo == null) {
-			testInfo= new TestRunInfo(testName);
-			fTestInfos.put(testName, testInfo);
-		}
-		testInfo.fTrace= trace;
-		testInfo.fStatus= status;
-		if (status == ITestRunListener.STATUS_ERROR)
-			fErrors++;
-		else
-			fFailures++;
-		if (fFirstFailure == null)
-			fFirstFailure= testInfo;
-		// show the view on the first error only
-		if (fShowOnErrorOnly && (fErrors + fFailures == 1)) 
-			postShowTestResultsView();
-	}
-
-	/*
-	 * @see ITestRunListener#testReran
-	 */
-	public void testReran(String className, String testName, int status, String trace) {
-		if (status == ITestRunListener.STATUS_ERROR) {
-			String msg= JUnitMessages.getFormattedString("TestRunnerViewPart.message.error", new String[]{testName, className}); //$NON-NLS-1$
-			postError(msg); 
-		} else if (status == ITestRunListener.STATUS_FAILURE) {
-			String msg= JUnitMessages.getFormattedString("TestRunnerViewPart.message.failure", new String[]{testName, className}); //$NON-NLS-1$
-			postError(msg);
-		} else {
-			String msg= JUnitMessages.getFormattedString("TestRunnerViewPart.message.success", new String[]{testName, className}); //$NON-NLS-1$
-			postInfo(msg);
-		}
-		String test= testName+"("+className+")"; //$NON-NLS-1$ //$NON-NLS-2$
-		TestRunInfo info= getTestInfo(test);
-		updateTest(info, status);
-		if (info.fTrace == null || !info.fTrace.equals(trace)) {
-			info.fTrace= trace;
-			showFailure(info.fTrace);
-		}
-	}
-
-	private void updateTest(TestRunInfo info, final int status) {
-		if (status == info.fStatus)
-			return;
-		if (info.fStatus == ITestRunListener.STATUS_OK) {
-			if (status == ITestRunListener.STATUS_FAILURE) 
-				fFailures++;
-			else if (status == ITestRunListener.STATUS_ERROR)
-				fErrors++;
-		} else if (info.fStatus == ITestRunListener.STATUS_ERROR) {
-			if (status == ITestRunListener.STATUS_OK) 
-				fErrors--;
-			else if (status == ITestRunListener.STATUS_FAILURE) {
-				fErrors--;
-				fFailures++;
-			}
-		} else if (info.fStatus == ITestRunListener.STATUS_FAILURE) {
-			if (status == ITestRunListener.STATUS_OK) 
-				fFailures--;
-			else if (status == ITestRunListener.STATUS_ERROR) {
-				fFailures--;
-				fErrors++;
-			}
-		}			
-		info.fStatus= status;	
-		final TestRunInfo finalInfo= info;
-		postAsyncRunnable(new Runnable() {
-			public void run() {
-				refreshCounters();
-				for (Enumeration e= fTestRunViews.elements(); e.hasMoreElements();) {
-					ITestRunView v= (ITestRunView) e.nextElement();
-					v.testStatusChanged(finalInfo);
-				}
-			}
-		});
-		
-	}
-
-	/*
-	 * @see ITestRunListener#testTreeEntry
-	 */
-	public void testTreeEntry(final String treeEntry){
-		postSyncRunnable(new Runnable() {
-			public void run() {
-				if(isDisposed()) 
-					return;
-				for (Enumeration e= fTestRunViews.elements(); e.hasMoreElements();) {
-					ITestRunView v= (ITestRunView) e.nextElement();
-					v.newTreeEntry(treeEntry);
-				}
-			}
-		});	
-	}
-
-	public void startTestRunListening(IJavaElement type, int port, ILaunch launch) {
-		fTestProject= type.getJavaProject();
-		fLaunchMode= launch.getLaunchMode();
-		aboutToLaunch();
-		
-		if (fTestRunnerClient != null) {
-			stopTest();
-		}
-		fTestRunnerClient= new RemoteTestRunnerClient();
-		fTestRunnerClient.startListening(this, port);
-		fLastLaunch= launch;
-		String title= JUnitMessages.getFormattedString("TestRunnerViewPart.title", type.getElementName()); //$NON-NLS-1$
-		setTitle(title);
-		if (type instanceof IType)
-			setTitleToolTip(((IType)type).getFullyQualifiedName());
-		else
-			setTitleToolTip(type.getElementName());
-			
-	}
-
-	private void aboutToLaunch() {
-		String msg= JUnitMessages.getString("TestRunnerViewPart.message.launching"); //$NON-NLS-1$
-		showInformation(msg);
-		postInfo(msg);
-		fViewImage= fOriginalViewImage;
-		firePropertyChange(IWorkbenchPart.PROP_TITLE);
-	}
-
-	public void rerunTest(String className, String testName) {
-		if (fTestRunnerClient != null && fTestRunnerClient.isRunning() && ILaunchManager.DEBUG_MODE.equals(fLaunchMode))
-			fTestRunnerClient.rerunTest(className, testName);
-		else {
-			MessageDialog.openInformation(getSite().getShell(), 
-				JUnitMessages.getString("TestRunnerViewPart.cannotrerun.title"),  //$NON-NLS-1$
-				JUnitMessages.getString("TestRunnerViewPart.cannotrerurn.message") //$NON-NLS-1$
- 			); 
-		}
-	}
-
-	public synchronized void dispose(){
-		fIsDisposed= true;
-		stopTest();
-		fProgressImages.dispose();
-		JUnitPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(this);
-		fTestRunOKIcon.dispose();
-		fTestRunFailIcon.dispose();
-		fStackViewIcon.dispose();
-		fTestRunOKDirtyIcon.dispose();
-		fTestRunFailDirtyIcon.dispose();
-	}
-
-	private void start(final int total) {
-		resetProgressBar(total);
-		fCounterPanel.setTotal(total);
-		fCounterPanel.setRunValue(0);	
-	}
-
-	private void resetProgressBar(final int total) {
-		fProgressBar.setMinimum(0);
-		fProgressBar.setSelection(0);
-		fProgressBar.setForeground(getDisplay().getSystemColor(SWT.COLOR_GREEN));
-		fProgressBar.setMaximum(total);
-	}
-
-	private void postSyncRunnable(Runnable r) {
-		if (!isDisposed())
-			getDisplay().syncExec(r);
-	}
-
-	private void postAsyncRunnable(Runnable r) {
-		if (!isDisposed())
-			getDisplay().syncExec(r);
-	}
-
-	private void aboutToStart() {
-		postSyncRunnable(new Runnable() {
-			public void run() {
-				if (!isDisposed()) {
-					for (Enumeration e= fTestRunViews.elements(); e.hasMoreElements();) {
-						ITestRunView v= (ITestRunView) e.nextElement();
-						v.aboutToStart();
-					}
-				}
-			}
-		});
-	}
-
-	private void postEndTest(final String testName) {
-		postSyncRunnable(new Runnable() {
-			public void run() {
-				if(isDisposed()) 
-					return;
-				handleEndTest();
-				for (Enumeration e= fTestRunViews.elements(); e.hasMoreElements();) {
-					ITestRunView v= (ITestRunView) e.nextElement();
-					v.endTest(testName);
-				}
-			}
-		});	
-	}
-
-	private void handleEndTest() {
-		refreshCounters();
-		updateProgressColor(fFailures+fErrors);
-		fProgressBar.setSelection(fProgressBar.getSelection() + 1);
-		if (fShowOnErrorOnly) {
-			Image progress= fProgressImages.getImage(fExecutedTests, fTestCount, fErrors, fFailures);
-			if (progress != fViewImage) {
-				fViewImage= progress;
-				firePropertyChange(IWorkbenchPart.PROP_TITLE);
-			}
-		}
-	}
-
-	private void updateProgressColor(int failures) {
-		if (failures > 0)
-			fProgressBar.setForeground(getDisplay().getSystemColor(SWT.COLOR_RED));
-		else 
-			fProgressBar.setForeground(getDisplay().getSystemColor(SWT.COLOR_GREEN));
-	}
-
-	private void refreshCounters() {
-		fCounterPanel.setErrorValue(fErrors);
-		fCounterPanel.setFailureValue(fFailures);
-		fCounterPanel.setRunValue(fExecutedTests);
-		updateProgressColor(fErrors + fFailures);
-	}
-
-	protected void postShowTestResultsView() {
-		postAsyncRunnable(new Runnable() {
-			public void run() {
-				if (isDisposed()) 
-					return;
-				showTestResultsView();
-			}
-		});
-	}
-
-	public void showTestResultsView() {
-		IWorkbenchWindow window= getSite().getWorkbenchWindow();
-		IWorkbenchPage page= window.getActivePage();
-		TestRunnerViewPart testRunner= null;
-		
-		if (page != null) {
-			try { // show the result view
-				testRunner= (TestRunnerViewPart)page.findView(TestRunnerViewPart.NAME);
-				if(testRunner == null) {
-					IWorkbenchPart activePart= page.getActivePart();
-					testRunner= (TestRunnerViewPart)page.showView(TestRunnerViewPart.NAME);
-					//restore focus stolen by the creation of the console
-					page.activate(activePart);
-				} else {
-					page.bringToTop(testRunner);
-				}
-			} catch (PartInitException pie) {
-				JUnitPlugin.log(pie);
-			}
-		}
-	}
-
-	protected void postInfo(final String message) {
-		postAsyncRunnable(new Runnable() {
-			public void run() {
-				if (isDisposed()) 
-					return;
-				getStatusLine().setErrorMessage(null);
-				getStatusLine().setMessage(message);
-			}
-		});
-	}
-
-	protected void postError(final String message) {
-		postAsyncRunnable(new Runnable() {
-			public void run() {
-				if (isDisposed()) 
-					return;
-				getStatusLine().setMessage(null);
-				getStatusLine().setErrorMessage(message);
-			}
-		});
-	}
-
-	protected void showInformation(final String info){
-		postSyncRunnable(new Runnable() {
-			public void run() {
-				if (!isDisposed())
-					fFailureView.setInformation(info);
-			}
-		});
-	}
-
-	private CTabFolder createTestRunViews(Composite parent) {
-		CTabFolder tabFolder= new CTabFolder(parent, SWT.TOP);
-		tabFolder.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_VERTICAL));
-
-		ITestRunView failureRunView= new FailureRunView(tabFolder, this); 
-		ITestRunView testHierarchyRunView= new HierarchyRunView(tabFolder, this);
-		
-		fTestRunViews.addElement(failureRunView);
-		fTestRunViews.addElement(testHierarchyRunView);
-		
-		tabFolder.setSelection(0);				
-		fActiveRunView= (ITestRunView)fTestRunViews.firstElement();		
-				
-		tabFolder.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent event) {
-				testViewChanged(event);
-			}
-		});
-		return tabFolder;
-	}
-
-	private void testViewChanged(SelectionEvent event) {
-		for (Enumeration e= fTestRunViews.elements(); e.hasMoreElements();) {
-			ITestRunView v= (ITestRunView) e.nextElement();
-			if (((CTabFolder) event.widget).getSelection().getText() == v.getName()){
-				v.setSelectedTest(fActiveRunView.getTestName());
-				fActiveRunView= v;
-				fActiveRunView.activate();
-			}
-		}
-	}
-
-	private SashForm createSashForm(Composite parent) {
-		SashForm sashForm= new SashForm(parent, SWT.VERTICAL);		
-		ViewForm top= new ViewForm(sashForm, SWT.NONE);
-		CTabFolder tabFolder= createTestRunViews(top);
-		tabFolder.setLayoutData(new TabFolderLayout());
-		top.setContent(tabFolder);
-		
-		ViewForm bottom= new ViewForm(sashForm, SWT.NONE);
-		ToolBar failureToolBar= new ToolBar(bottom, SWT.FLAT | SWT.WRAP);
-		bottom.setTopCenter(failureToolBar);
-		
-		fFailureView= new FailureTraceView(bottom, this);
-		bottom.setContent(fFailureView.getComposite()); 
-		CLabel label= new CLabel(bottom, SWT.NONE);
-		label.setText(JUnitMessages.getString("TestRunnerViewPart.label.failure")); //$NON-NLS-1$
-		label.setImage(fStackViewIcon);
-		bottom.setTopLeft(label);
-
-		// fill the failure trace viewer toolbar
-		ToolBarManager failureToolBarmanager= new ToolBarManager(failureToolBar);
-		failureToolBarmanager.add(new EnableStackFilterAction(fFailureView));			
-		failureToolBarmanager.update(true);
-		
-		sashForm.setWeights(new int[]{50, 50});
-		return sashForm;
-	}
-
-	private void reset(final int testCount) {
-		postAsyncRunnable(new Runnable() {
-			public void run() {
-				if (isDisposed()) 
-					return;
-				fCounterPanel.reset();
-				fFailureView.clear();
-				clearStatus();
-				start(testCount);
-			}
-		});
-		fExecutedTests= 0;
-		fFailures= 0;
-		fErrors= 0;
-		fTestCount= testCount;
-		aboutToStart();
-		fTestInfos.clear();
-		fFirstFailure= null;
-	}
-
-	private void clearStatus() {
-		getStatusLine().setMessage(null);
-		getStatusLine().setErrorMessage(null);
-	}
-
-    public void setFocus() {
-    	if (fActiveRunView != null)
-    		fActiveRunView.setFocus();
-    }
-
-    public void createPartControl(Composite parent) {		
-		GridLayout gridLayout= new GridLayout();
-		gridLayout.marginWidth= 0;
-		parent.setLayout(gridLayout);
-
-		IActionBars actionBars= getViewSite().getActionBars();
-		IToolBarManager toolBar= actionBars.getToolBarManager();
-		toolBar.add(new StopAction());
-		toolBar.add(new RerunAction());
-
-		actionBars.updateActionBars();
-		
-		Composite counterPanel= createProgressCountPanel(parent);
-		counterPanel.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
-		SashForm sashForm= createSashForm(parent);
-		sashForm.setLayoutData(new GridData(GridData.FILL_BOTH));
-		actionBars.setGlobalActionHandler(
-			IWorkbenchActionConstants.COPY,
-			new CopyTraceAction(fFailureView));
-
-		JUnitPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(this);
-		fOriginalViewImage= getTitleImage();
-		fProgressImages= new ProgressImages();
-		WorkbenchHelp.setHelp(parent, IJUnitHelpContextIds.RESULTS_VIEW);
-	}
-
-	private IStatusLineManager getStatusLine() {
-		// we want to show messages globally hence we
-		// have to go throgh the active part
-		IViewSite site= getViewSite();
-		IWorkbenchPage page= site.getPage();
-		IWorkbenchPart activePart= page.getActivePart();
-	
-		if (activePart instanceof IViewPart) {
-			IViewPart activeViewPart= (IViewPart)activePart;
-			IViewSite activeViewSite= activeViewPart.getViewSite();
-			return activeViewSite.getActionBars().getStatusLineManager();
-		}
-		
-		if (activePart instanceof IEditorPart) {
-			IEditorPart activeEditorPart= (IEditorPart)activePart;
-			IEditorActionBarContributor contributor= activeEditorPart.getEditorSite().getActionBarContributor();
-			if (contributor instanceof EditorActionBarContributor) 
-				return ((EditorActionBarContributor) contributor).getActionBars().getStatusLineManager();
-		}
-		// no active part
-		return getViewSite().getActionBars().getStatusLineManager();
-	}
-
-	private Composite createProgressCountPanel(Composite parent) {
-		Composite composite= new Composite(parent, SWT.NONE);
-		composite.setLayout(new GridLayout());
-		fProgressBar = new ProgressBar(composite, SWT.HORIZONTAL);
-		fProgressBar.setLayoutData(
-			new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
-		fCounterPanel = new CounterPanel(composite);
-		fCounterPanel.setLayoutData(
-			new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
-		return composite;
-	}
-
-	public TestRunInfo getTestInfo(String testName) {
-		return (TestRunInfo) fTestInfos.get(testName);
-	}
-
-	public void handleTestSelected(String testName) {
-		TestRunInfo testInfo= getTestInfo(testName);
-
-		if (testInfo == null) {
-			showFailure(""); //$NON-NLS-1$
-		} else {
-			showFailure(testInfo.fTrace);
-		}
-	}
-
-	private void showFailure(final String failure) {
-		postSyncRunnable(new Runnable() {
-			public void run() {
-				if (!isDisposed())
-					fFailureView.showFailure(failure);
-			}
-		});		
-	}
-
-	public IJavaProject getLaunchedProject() {
-		return fTestProject;
-	}
-
-	protected static Image createImage(String path) {
-		try {
-			ImageDescriptor id= ImageDescriptor.createFromURL(JUnitPlugin.makeIconFileURL(path));
-			return id.createImage();
-		} catch (MalformedURLException e) {
-			// fall through
-		}  
-		return null;
-	}
-
-	private boolean isDisposed() {
-		return fIsDisposed || fCounterPanel.isDisposed();
-	}
-
-	private Display getDisplay() {
-		return fCounterPanel.getDisplay();
-	}
-	/**
-	 * @see IWorkbenchPart#getTitleImage()
-	 */
-	public Image getTitleImage() {
-		if (fOriginalViewImage == null)
-			fOriginalViewImage= super.getTitleImage();
-			
-		if (fViewImage == null)
-			return super.getTitleImage();
-		return fViewImage;
-	}
-
-	public void propertyChange(PropertyChangeEvent event) {
-		if (isDisposed())
-			return;
-
-		if (JUnitPreferencePage.SHOW_ON_ERROR_ONLY.equals(event.getProperty())) {
-			if (!JUnitPreferencePage.getShowOnErrorOnly()) {
-				fViewImage= fOriginalViewImage;
-				firePropertyChange(IWorkbenchPart.PROP_TITLE);
-			}
-		}
-	}
-
-	void codeHasChanged() {
-		postAsyncRunnable(new Runnable() {
-			public void run() {
-				if (isDisposed())
-					return;
-				if (fDirtyListener != null) {
-					JavaCore.removeElementChangedListener(fDirtyListener);
-					fDirtyListener= null;
-				}
-				if (fViewImage == fTestRunOKIcon) 
-					fViewImage= fTestRunOKDirtyIcon;
-				else if (fViewImage == fTestRunFailIcon)
-					fViewImage= fTestRunFailDirtyIcon;
-				firePropertyChange(IWorkbenchPart.PROP_TITLE);
-			}
-		});
-	}
-	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/CheckedTableSelectionDialog.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/CheckedTableSelectionDialog.java
deleted file mode 100644
index f4b872e..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/CheckedTableSelectionDialog.java
+++ /dev/null
@@ -1,290 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.util;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jdt.internal.junit.wizards.WizardMessages;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.viewers.CheckStateChangedEvent;
-import org.eclipse.jface.viewers.CheckboxTableViewer;
-import org.eclipse.jface.viewers.ICheckStateListener;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.ViewerFilter;
-import org.eclipse.jface.viewers.ViewerSorter;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.BusyIndicator;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.ui.dialogs.ISelectionStatusValidator;
-import org.eclipse.ui.dialogs.SelectionStatusDialog;
-
-/**
- * A dialog with checked table viewer.
- * 
- * TO DO: this class is duplicated from org.eclipse.jdt.ui
- */
-public class CheckedTableSelectionDialog extends SelectionStatusDialog {
-	
-	private CheckboxTableViewer fViewer;
-	
-	private ILabelProvider fLabelProvider;
-	private IStructuredContentProvider fContentProvider;
-	
-	private ISelectionStatusValidator fValidator= null; 
-	private ViewerSorter fSorter;
-	private String fEmptyListMessage= WizardMessages.getString("CheckedTableSelectionDialog.emptyListMessage"); //$NON-NLS-1$
-	
-	private IStatus fCurrStatus= new JUnitStatus();
-	private List fFilters;
-	private Object fInput;		
-	private boolean fIsEmpty;
-	
-	private int fWidth= 40;
-	private int fHeight= 18;
-	
-	/**
-	 * Constructs an instance of <code>ElementTreeSelectionDialog</code>.
-	 * @param labelProvider   the label provider to render the entries
-	 * @param contentProvider the content provider to evaluate the tree structure
-	 */	
-	public CheckedTableSelectionDialog(Shell parent, ILabelProvider labelProvider,
-		IStructuredContentProvider contentProvider) {
-		super(parent);
-		
-		fLabelProvider= labelProvider;
-		fContentProvider= contentProvider;
-
-		setResult(new ArrayList(0));
-		setStatusLineAboveButtons(true);
-	}
-
-	/**
-	 * Sets the initial selection.
-	 * Convenience method.
-	 * @param selection the initial selection.
-	 */
-	public void setInitialSelection(Object selection) {
-		setInitialSelections(new Object[] {selection});
-	}
-
-	/**
-	 * Sets the message to be displayed if the list is empty.
-	 * @param message the message to be displayed.
-	 */	
-	public void setEmptyListMessage(String message) {
-		fEmptyListMessage= message;
-	}	
-	
-	/**
-	 * Sets the sorter used by the tree viewer.
-	 */
-	public void setSorter(ViewerSorter sorter) {
-		fSorter= sorter;
-	}		
-	
-	/**
-	 * Adds a filter to the tree viewer.
-	 * @param filter a filter.
-	 */
-	public void addFilter(ViewerFilter filter) {
-		if (fFilters == null)
-			fFilters= new ArrayList(4);
-			
-		fFilters.add(filter);
-	}
-	
-	/**
-	 * Sets an optional validator to check if the selection is valid.
-	 * The validator is invoked whenever the selection changes.
-	 * @param validator the validator to validate the selection.
-	 */
-	public void setValidator(ISelectionStatusValidator validator) {
-		fValidator= validator;
-	}			
-	
-	/**
-	 * Sets the tree input.
-	 * @param input the tree input.
-	 */
-	public void setInput(Object input) {
-		fInput= input;
-	}
-
-	/**
-	 * Sets the size of the tree in unit of characters.
-	 * @param width  the width of the tree.
-	 * @param height the height of the tree.
-	 */
-	public void setSize(int width, int height) {
-		fWidth= width;
-		fHeight= height;
-	}
-
-	protected void updateOKStatus() {
-		if (!fIsEmpty) {
-			if (fValidator != null) {
-				fCurrStatus= fValidator.validate(fViewer.getCheckedElements());
-				updateStatus(fCurrStatus);
-			} else if (!fCurrStatus.isOK()) {
-				fCurrStatus= new JUnitStatus();
-			}
-		} else {
-			fCurrStatus= new JUnitStatus(IStatus.ERROR, fEmptyListMessage);
-		}
-		updateStatus(fCurrStatus);
-	}
-	
-	/*
-	 * @see Window#open()
-	 */	 
-	public int open() {
-		fIsEmpty= evaluateIfTableEmpty(fInput);
-		BusyIndicator.showWhile(null, new Runnable() {
-			public void run() {
-				access$superOpen();
-			}
-		});
-		return getReturnCode();
-	}
-
-	private void access$superOpen() {
-		super.open();
-	}	
-	 		
-	/**
-	 * Handles cancel button pressed event.
-	 */	 
-	protected void cancelPressed() {
-		setResult(null);
-		super.cancelPressed();
-	} 
-
-	/*
-	 * @see SelectionStatusDialog#computeResult()
-	 */	 
-	protected void computeResult() {
-		setResult(Arrays.asList(fViewer.getCheckedElements()));
-	} 
-	 
-	/*
-	 * @see Window#create()
-	 */	 
-	public void create() {
-		super.create();
-
-		List initialSelections= getInitialElementSelections();
-		if (initialSelections.size() > 0) {
-			fViewer.setCheckedElements(initialSelections.toArray());			
-		}
-			
-		updateOKStatus();
-	}		
-	
-	/*
-	 * @see Dialog#createDialogArea(Composite)
-	 */	 
-	protected Control createDialogArea(Composite parent) {
-		Composite composite= (Composite) super.createDialogArea(parent);
-		
-		Label messageLabel= createMessageArea(composite);
-		Control treeWidget= createTableViewer(composite);
-		Control buttonComposite= createSelectionButtons(composite);
-
-		GridData data= new GridData(GridData.FILL_BOTH);
-		data.widthHint= convertWidthInCharsToPixels(fWidth);
-		data.heightHint= convertHeightInCharsToPixels(fHeight);
-		treeWidget.setLayoutData(data);
-		
-		if (fIsEmpty) {
-			messageLabel.setEnabled(false);
-			treeWidget.setEnabled(false);
-			buttonComposite.setEnabled(false);
-		}
-		return composite;
-	}
-	
-	private Table createTableViewer(Composite parent) {
-		fViewer= CheckboxTableViewer.newCheckList(parent, SWT.BORDER);
-			
-		fViewer.setContentProvider(fContentProvider);
-		fViewer.setLabelProvider(fLabelProvider);
-		fViewer.addCheckStateListener(new ICheckStateListener() {
-			public void checkStateChanged(CheckStateChangedEvent event) {
-				updateOKStatus();
-			}	
-		});
-		
-		fViewer.setSorter(fSorter);
-		if (fFilters != null) {
-			for (int i= 0; i != fFilters.size(); i++)
-				fViewer.addFilter((ViewerFilter) fFilters.get(i));
-		}
-				
-		fViewer.setInput(fInput);
-		return fViewer.getTable();	
-	}
-		
-	/**
-	 * Add the selection and deselection buttons to the dialog.
-	 * @param composite org.eclipse.swt.widgets.Composite
-	 */
-	private Composite createSelectionButtons(Composite composite) {
-		Composite buttonComposite= new Composite(composite, SWT.RIGHT);
-		GridLayout layout= new GridLayout();
-		layout.numColumns= 2;
-		buttonComposite.setLayout(layout);
-		GridData data= new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.GRAB_HORIZONTAL);
-		data.grabExcessHorizontalSpace= true;
-		composite.setData(data);
-
-		Button selectButton= createButton(buttonComposite, IDialogConstants.SELECT_ALL_ID, WizardMessages.getString("CheckedTableSelectionDialog.selectAll"), false); //$NON-NLS-1$
-
-		SelectionListener listener= new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				fViewer.setCheckedElements(fContentProvider.getElements(fInput));
-				updateOKStatus();
-			}
-		};
-		selectButton.addSelectionListener(listener);
-
-		Button deselectButton= createButton(buttonComposite, IDialogConstants.DESELECT_ALL_ID, WizardMessages.getString("CheckedTableSelectionDialog.deselectAll"), false); //$NON-NLS-1$
-
-		listener= new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				fViewer.setCheckedElements(new Object[0]);
-				updateOKStatus();
-			}
-		};
-		deselectButton.addSelectionListener(listener);
-		return buttonComposite;
-	}
-	
-	private boolean evaluateIfTableEmpty(Object input) {
-		Object[] elements= fContentProvider.getElements(input);
-		if (elements.length > 0) {
-			if (fFilters != null) {
-				for (int i= 0; i < fFilters.size(); i++) {
-					ViewerFilter curr= (ViewerFilter)fFilters.get(i);
-					elements= curr.filter(fViewer, input, elements);
-				}
-			}
-		}
-		return elements.length == 0;
-	}
-}
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/ExceptionHandler.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/ExceptionHandler.java
deleted file mode 100644
index 81d1c73..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/ExceptionHandler.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.util;
-
-import java.io.StringWriter;
-import java.lang.reflect.InvocationTargetException;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jdt.internal.junit.ui.JUnitPlugin;
-import org.eclipse.jdt.internal.junit.wizards.WizardMessages;
-import org.eclipse.jface.dialogs.ErrorDialog;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.swt.widgets.Shell;
-
-/**
- * The default exception handler shows an error dialog when one of its handle methods
- * is called. If the passed exception is a <code>CoreException</code> an error dialog
- * pops up showing the exception's status information. For a <code>InvocationTargetException</code>
- * a normal message dialog pops up showing the exception's message. Additionally the exception
- * is written to the platform log.
- * 
- * TO DO: this class is duplicated from org.eclipse.jdt.ui
- */
-public class ExceptionHandler {
-
-	private static ExceptionHandler fgInstance= new ExceptionHandler();
-	
-	/**
-	 * Handles the given <code>CoreException</code>. 
-	 * 
-	 * @param e the <code>CoreException</code> to be handled
-	 * @param parent the dialog window's parent shell
-	 * @param title the dialog window's window title
-	 * @param message message to be displayed by the dialog window
-	 */
-	public static void handle(CoreException e, Shell parent, String title, String message) {
-		fgInstance.perform(e, parent, title, message);
-	}
-	
-	/**
-	 * Handles the given <code>InvocationTargetException</code>. 
-	 * 
-	 * @param e the <code>InvocationTargetException</code> to be handled
-	 * @param parent the dialog window's parent shell
-	 * @param title the dialog window's window title
-	 * @param message message to be displayed by the dialog window
-	 */
-	public static void handle(InvocationTargetException e, Shell parent, String title, String message) {
-		fgInstance.perform(e, parent, title, message);
-	}
-
-	//---- Hooks for subclasses to control exception handling ------------------------------------
-	
-	protected void perform(CoreException e, Shell shell, String title, String message) {
-		JUnitPlugin.log(e);
-		IStatus status= e.getStatus();
-		if (status != null) {
-			ErrorDialog.openError(shell, title, message, status);
-		} else {
-			displayMessageDialog(e, e.getMessage(), shell, title, message);
-		}
-	}
-
-	protected void perform(InvocationTargetException e, Shell shell, String title, String message) {
-		Throwable target= e.getTargetException();
-		if (target instanceof CoreException) {
-			perform((CoreException)target, shell, title, message);
-		} else {
-			JUnitPlugin.log(e);
-			if (e.getMessage() != null && e.getMessage().length() > 0) {
-				displayMessageDialog(e, e.getMessage(), shell, title, message);
-			} else {
-				displayMessageDialog(e, target.getMessage(), shell, title, message);
-			}
-		}
-	}
-	
-	private void displayMessageDialog(Throwable t, String exceptionMessage, Shell shell, String title, String message) {
-		StringWriter msg= new StringWriter();
-		if (message != null) {
-			msg.write(message);
-			msg.write("\n\n"); //$NON-NLS-1$
-		}
-		if (exceptionMessage == null || exceptionMessage.length() == 0)
-			msg.write(WizardMessages.getString("ExceptionDialog.seeErrorLogMessage")); //$NON-NLS-1$
-		else
-			msg.write(exceptionMessage);
-		MessageDialog.openError(shell, title, msg.toString());			
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/JUnitStatus.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/JUnitStatus.java
deleted file mode 100644
index 1e3d1dc..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/JUnitStatus.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Copyright (c) 2002 IBM Corp.  All rights reserved.
- * This file is made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- */
-
-package org.eclipse.jdt.internal.junit.util;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jdt.internal.junit.ui.JUnitPlugin;
-import org.eclipse.jface.util.Assert;
-
-/**
- * An implemention of IStatus. 
- * TO DO: Why is it duplicated, it should leverage the Status base class???
- */
-public class JUnitStatus implements IStatus {
-	private String fStatusMessage;
-	private int fSeverity;
-	
-	/**
-	 * Creates a status set to OK (no message)
-	 */
-	public JUnitStatus() {
-		this(OK, null);
-	}
-
-	/**
-	 * Creates a status .
-	 * @param severity The status severity: ERROR, WARNING, INFO and OK.
-	 * @param message The message of the status. Applies only for ERROR,
-	 * WARNING and INFO.
-	 */	
-	public JUnitStatus(int severity, String message) {
-		fStatusMessage= message;
-		fSeverity= severity;
-	}		
-	
-	/**
-	 *  Returns if the status' severity is OK.
-	 */
-	public boolean isOK() {
-		return fSeverity == IStatus.OK;
-	}
-
-	/**
-	 *  Returns if the status' severity is WARNING.
-	 */	
-	public boolean isWarning() {
-		return fSeverity == IStatus.WARNING;
-	}
-
-	/**
-	 *  Returns if the status' severity is INFO.
-	 */	
-	public boolean isInfo() {
-		return fSeverity == IStatus.INFO;
-	}	
-
-	/**
-	 *  Returns if the status' severity is ERROR.
-	 */	
-	public boolean isError() {
-		return fSeverity == IStatus.ERROR;
-	}
-	
-	/**
-	 * @see IStatus#getMessage
-	 */
-	public String getMessage() {
-		return fStatusMessage;
-	}
-	
-	/**
-	 * Sets the status to ERROR.
-	 * @param The error message (can be empty, but not null)
-	 */	
-	public void setError(String errorMessage) {
-		Assert.isNotNull(errorMessage);
-		fStatusMessage= errorMessage;
-		fSeverity= IStatus.ERROR;
-	}
-
-	/**
-	 * Sets the status to WARNING.
-	 * @param The warning message (can be empty, but not null)
-	 */		
-	public void setWarning(String warningMessage) {
-		Assert.isNotNull(warningMessage);
-		fStatusMessage= warningMessage;
-		fSeverity= IStatus.WARNING;
-	}
-
-	/**
-	 * Sets the status to INFO.
-	 * @param The info message (can be empty, but not null)
-	 */		
-	public void setInfo(String infoMessage) {
-		Assert.isNotNull(infoMessage);
-		fStatusMessage= infoMessage;
-		fSeverity= IStatus.INFO;
-	}	
-
-	/**
-	 * Sets the status to OK.
-	 */		
-	public void setOK() {
-		fStatusMessage= null;
-		fSeverity= IStatus.OK;
-	}
-	
-	/*
-	 * @see IStatus#matches(int)
-	 */
-	public boolean matches(int severityMask) {
-		return (fSeverity & severityMask) != 0;
-	}
-
-	/**
-	 * Returns always <code>false</code>.
-	 * @see IStatus#isMultiStatus()
-	 */
-	public boolean isMultiStatus() {
-		return false;
-	}
-
-	/*
-	 * @see IStatus#getSeverity()
-	 */
-	public int getSeverity() {
-		return fSeverity;
-	}
-
-	/*
-	 * @see IStatus#getPlugin()
-	 */
-	public String getPlugin() {
-		return JUnitPlugin.PLUGIN_ID;
-	}
-
-	/**
-	 * Returns always <code>null</code>.
-	 * @see IStatus#getException()
-	 */
-	public Throwable getException() {
-		return null;
-	}
-
-	/**
-	 * Returns always the error severity.
-	 * @see IStatus#getCode()
-	 */
-	public int getCode() {
-		return fSeverity;
-	}
-
-	/**
-	 * Returns always <code>null</code>.
-	 * @see IStatus#getChildren()
-	 */
-	public IStatus[] getChildren() {
-		return new IStatus[0];
-	}	
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/JUnitStubUtility.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/JUnitStubUtility.java
deleted file mode 100644
index 8195c29..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/JUnitStubUtility.java
+++ /dev/null
@@ -1,267 +0,0 @@
-/*
- * Copyright (c) 2002 IBM Corp.  All rights reserved.
- * This file is made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- */
-
-package org.eclipse.jdt.internal.junit.util;
-
-import org.eclipse.jdt.core.Flags;
-import org.eclipse.jdt.core.IBuffer;
-import org.eclipse.jdt.core.ICodeFormatter;
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IMethod;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.Signature;
-import org.eclipse.jdt.core.ToolFactory;
-import org.eclipse.jdt.internal.corext.codemanipulation.CodeGenerationSettings;
-import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
-import org.eclipse.jdt.ui.wizards.NewTypeWizardPage.ImportsManager;
-import org.eclipse.swt.SWT;
-
-/**
- * Utility methods for code generation.
- * TO DO: some methods are duplicated from org.eclipse.jdt.ui
- */
-public class JUnitStubUtility {
-
-	public static class GenStubSettings extends CodeGenerationSettings {
-	
-		public boolean fCallSuper;
-		public boolean fMethodOverwrites;
-		public boolean fNoBody;
-		
-		public GenStubSettings(CodeGenerationSettings settings) {
-			this.createComments= settings.createComments;
-			this.createNonJavadocComments= settings.createNonJavadocComments;		
-		}
-	}
-
-	/**
-	 * Examines a string and returns the first line delimiter found.
-	 */
-	public static String getLineDelimiterUsed(IJavaElement elem) throws JavaModelException {
-		ICompilationUnit cu= (ICompilationUnit) elem.getAncestor(IJavaElement.COMPILATION_UNIT);
-		if (cu != null && cu.exists()) {
-			IBuffer buf= cu.getBuffer();
-			int length= buf.getLength();
-			for (int i= 0; i < length; i++) {
-				char ch= buf.getChar(i);
-				if (ch == SWT.CR) {
-					if (i + 1 < length) {
-						if (buf.getChar(i + 1) == SWT.LF) {
-							return "\r\n"; //$NON-NLS-1$
-						}
-					}
-					return "\r"; //$NON-NLS-1$
-				} else if (ch == SWT.LF) {
-					return "\n"; //$NON-NLS-1$
-				}
-			}
-		}
-		return System.getProperty("line.separator", "\n"); //$NON-NLS-1$ //$NON-NLS-2$
-	}
-	
-	public static String codeFormat(String sourceString, int initialIndentationLevel, String lineDelim) {
-		ICodeFormatter formatter= ToolFactory.createDefaultCodeFormatter(null);
-		return formatter.format(sourceString, initialIndentationLevel, null, lineDelim);
-	}
-
-	/**
-	 * Generates a stub. Given a template method, a stub with the same signature
-	 * will be constructed so it can be added to a type.
-	 * @param destTypeName The name of the type to which the method will be added to (Used for the constructor)
-	 * @param method A method template (method belongs to different type than the parent)
-	 * @param options Options as defined abouve (GENSTUB_*)
-	 * @param imports Imports required by the sub are added to the imports structure
-	 * @throws JavaModelException
-	 */
-	public static String genStub(String destTypeName, IMethod method, GenStubSettings settings, ImportsManager imports) throws JavaModelException {
-		IType declaringtype= method.getDeclaringType();	
-		StringBuffer buf= new StringBuffer();
-		String[] paramTypes= method.getParameterTypes();
-		String[] paramNames= method.getParameterNames();
-		String[] excTypes= method.getExceptionTypes();
-		String retTypeSig= method.getReturnType();
-		
-		int lastParam= paramTypes.length -1;		
-		
-		if (settings.createComments) {
-			if (method.isConstructor()) {
-				String desc= "Constructor for " + destTypeName; //$NON-NLS-1$
-				genJavaDocStub(desc, paramNames, Signature.SIG_VOID, excTypes, buf);
-			} else {			
-				// java doc
-				if (settings.fMethodOverwrites) {
-					boolean isDeprecated= Flags.isDeprecated(method.getFlags());
-					genJavaDocSeeTag(declaringtype.getElementName(), method.getElementName(), paramTypes, settings.createNonJavadocComments, isDeprecated, buf);
-				} else {
-					// generate a default java doc comment
-					String desc= "Method " + method.getElementName(); //$NON-NLS-1$
-					genJavaDocStub(desc, paramNames, retTypeSig, excTypes, buf);
-				}
-			}
-		}
-		int flags= method.getFlags();
-		if (Flags.isPublic(flags) || (declaringtype.isInterface() && !settings.fNoBody)) {
-			buf.append("public "); //$NON-NLS-1$
-		} else if (Flags.isProtected(flags)) {
-			buf.append("protected "); //$NON-NLS-1$
-		} else if (Flags.isPrivate(flags)) {
-			buf.append("private "); //$NON-NLS-1$
-		}
-		if (Flags.isSynchronized(flags)) {
-			buf.append("synchronized "); //$NON-NLS-1$
-		}		
-		if (Flags.isVolatile(flags)) {
-			buf.append("volatile "); //$NON-NLS-1$
-		}
-		if (Flags.isStrictfp(flags)) {
-			buf.append("strictfp "); //$NON-NLS-1$
-		}
-		if (Flags.isStatic(flags)) {
-			buf.append("static "); //$NON-NLS-1$
-		}		
-			
-		if (method.isConstructor()) {
-			buf.append(destTypeName);
-		} else {
-			String retTypeFrm= Signature.toString(retTypeSig);
-			if (!isBuiltInType(retTypeSig)) {
-				resolveAndAdd(retTypeSig, declaringtype, imports);
-			}
-			buf.append(Signature.getSimpleName(retTypeFrm));
-			buf.append(' ');
-			buf.append(method.getElementName());
-		}
-		buf.append('(');
-		for (int i= 0; i <= lastParam; i++) {
-			String paramTypeSig= paramTypes[i];
-			String paramTypeFrm= Signature.toString(paramTypeSig);
-			if (!isBuiltInType(paramTypeSig)) {
-				resolveAndAdd(paramTypeSig, declaringtype, imports);
-			}
-			buf.append(Signature.getSimpleName(paramTypeFrm));
-			buf.append(' ');
-			buf.append(paramNames[i]);
-			if (i < lastParam) {
-				buf.append(", "); //$NON-NLS-1$
-			}
-		}
-		buf.append(')');
-		
-		int lastExc= excTypes.length - 1;
-		if (lastExc >= 0) {
-			buf.append(" throws "); //$NON-NLS-1$
-			for (int i= 0; i <= lastExc; i++) {
-				String excTypeSig= excTypes[i];
-				String excTypeFrm= Signature.toString(excTypeSig);
-				resolveAndAdd(excTypeSig, declaringtype, imports);
-				buf.append(Signature.getSimpleName(excTypeFrm));
-				if (i < lastExc) {
-					buf.append(", "); //$NON-NLS-1$
-				}
-			}
-		}
-		if (settings.fNoBody) {
-			buf.append(";\n\n"); //$NON-NLS-1$
-		} else {
-			buf.append(" {\n\t"); //$NON-NLS-1$
-			if (!settings.fCallSuper) {
-				if (retTypeSig != null && !retTypeSig.equals(Signature.SIG_VOID)) {
-					buf.append('\t');
-					if (!isBuiltInType(retTypeSig) || Signature.getArrayCount(retTypeSig) > 0) {
-						buf.append("return null;\n\t"); //$NON-NLS-1$
-					} else if (retTypeSig.equals(Signature.SIG_BOOLEAN)) {
-						buf.append("return false;\n\t"); //$NON-NLS-1$
-					} else {
-						buf.append("return 0;\n\t"); //$NON-NLS-1$
-					}
-				}
-			} else {
-				buf.append('\t');
-				if (!method.isConstructor()) {
-					if (!Signature.SIG_VOID.equals(retTypeSig)) {
-						buf.append("return "); //$NON-NLS-1$
-					}
-					buf.append("super."); //$NON-NLS-1$
-					buf.append(method.getElementName());
-				} else {
-					buf.append("super"); //$NON-NLS-1$
-				}
-				buf.append('(');			
-				for (int i= 0; i <= lastParam; i++) {
-					buf.append(paramNames[i]);
-					if (i < lastParam) {
-						buf.append(", "); //$NON-NLS-1$
-					}
-				}
-				buf.append(");\n\t"); //$NON-NLS-1$
-			}
-			buf.append("}\n\n");			 //$NON-NLS-1$
-		}
-		return buf.toString();
-	}
-
-	/**
-	 * Generates a default JavaDoc comment stub for a method.
-	 */
-	private static void genJavaDocStub(String descr, String[] paramNames, String retTypeSig, String[] excTypeSigs, StringBuffer buf) {
-		buf.append("/**\n"); //$NON-NLS-1$
-		buf.append(" * "); buf.append(descr); buf.append(".\n"); //$NON-NLS-2$ //$NON-NLS-1$
-		for (int i= 0; i < paramNames.length; i++) {
-			buf.append(" * @param "); buf.append(paramNames[i]); buf.append('\n'); //$NON-NLS-1$
-		}
-		if (retTypeSig != null && !retTypeSig.equals(Signature.SIG_VOID)) {
-			String simpleName= Signature.getSimpleName(Signature.toString(retTypeSig));
-			buf.append(" * @return "); buf.append(simpleName); buf.append('\n'); //$NON-NLS-1$
-		}
-		for (int i= 0; i < excTypeSigs.length; i++) {
-			String simpleName= Signature.getSimpleName(Signature.toString(excTypeSigs[i]));
-			buf.append(" * @throws "); buf.append(simpleName); buf.append('\n'); //$NON-NLS-1$
-		}		
-		buf.append(" */\n"); //$NON-NLS-1$
-	}
-	
-	/**
-	 * Generates a '@see' tag to the defined method.
-	 */
-	public static void genJavaDocSeeTag(String declaringTypeName, String methodName, String[] paramTypes, boolean nonJavaDocComment, boolean isDeprecated, StringBuffer buf) {
-		// create a @see link
-		buf.append("/*"); //$NON-NLS-1$
-		if (!nonJavaDocComment) {
-			buf.append('*');
-		}
-		buf.append("\n * @see "); //$NON-NLS-1$
-		buf.append(declaringTypeName);
-		buf.append('#'); 
-		buf.append(methodName);
-		buf.append('(');
-		for (int i= 0; i < paramTypes.length; i++) {
-			if (i > 0) {
-				buf.append(", "); //$NON-NLS-1$
-			}
-			buf.append(Signature.getSimpleName(Signature.toString(paramTypes[i])));
-		}
-		buf.append(")\n"); //$NON-NLS-1$
-		if (isDeprecated) {
-			buf.append(" * @deprecated\n"); //$NON-NLS-1$
-		}
-		buf.append(" */\n"); //$NON-NLS-1$
-	}	
-
-	private static boolean isBuiltInType(String typeName) {
-		char first= Signature.getElementType(typeName).charAt(0);
-		return (first != Signature.C_RESOLVED && first != Signature.C_UNRESOLVED);
-	}
-
-	private static void resolveAndAdd(String refTypeSig, IType declaringType, ImportsManager imports) throws JavaModelException {
-		String resolvedTypeName= JavaModelUtil.getResolvedTypeName(refTypeSig, declaringType);
-		if (resolvedTypeName != null) {
-			imports.addImport(resolvedTypeName);		
-		}
-	}
-}
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/LayoutUtil.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/LayoutUtil.java
deleted file mode 100644
index 73d6d90..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/LayoutUtil.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2002.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.util;
-
-import org.eclipse.jdt.internal.junit.wizards.MethodStubsSelectionButtonGroup;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-
-public class LayoutUtil {
-	
-	/**
-	 * Calculates the number of columns needed by field editors
-	 */
-	public static int getNumberOfColumns(MethodStubsSelectionButtonGroup[] editors) {
-		int columnCount= 0;
-		for (int i= 0; i < editors.length; i++) {
-			columnCount= Math.max(editors[i].getNumberOfControls(), columnCount);
-		}
-		return columnCount;
-	}
-	
-	/**
-	 * Creates a composite and fills in the given editors.
-	 * @param labelOnTop Defines if the label of all fields should be on top of the fields
-	 */	
-	public static void doDefaultLayout(Composite parent, MethodStubsSelectionButtonGroup[] editors, boolean labelOnTop) {
-		doDefaultLayout(parent, editors, labelOnTop, 0, 0, 0, 0);
-	}
-
-	/**
-	 * Creates a composite and fills in the given editors.
-	 * @param labelOnTop Defines if the label of all fields should be on top of the fields
-	 * @param minWidth The minimal width of the composite
-	 * @param minHeight The minimal height of the composite 
-	 */
-	public static void doDefaultLayout(Composite parent, MethodStubsSelectionButtonGroup[] editors, boolean labelOnTop, int minWidth, int minHeight) {
-		doDefaultLayout(parent, editors, labelOnTop, minWidth, minHeight, 0, 0);
-	}
-
-	/**
-	 * Creates a composite and fills in the given editors.
-	 * @param labelOnTop Defines if the label of all fields should be on top of the fields
-	 * @param minWidth The minimal width of the composite
-	 * @param minHeight The minimal height of the composite
-	 * @param marginWidth The margin width to be used by the composite
-	 * @param marginHeight The margin height to be used by the composite
-	 */	
-	public static void doDefaultLayout(Composite parent, MethodStubsSelectionButtonGroup[] editors, boolean labelOnTop, int minWidth, int minHeight, int marginWidth, int marginHeight) {
-		int nCulumns= getNumberOfColumns(editors);
-		Control[][] controls= new Control[editors.length][];
-		for (int i= 0; i < editors.length; i++) {
-			controls[i]= editors[i].doFillIntoGrid(parent, nCulumns);
-		}
-		if (labelOnTop) {
-			nCulumns--;
-			modifyLabelSpans(controls, nCulumns);
-		}
-		GridLayout layout= new GridLayout();
-		if (marginWidth != SWT.DEFAULT) {
-			layout.marginWidth= marginWidth;
-		}
-		if (marginHeight != SWT.DEFAULT) {
-			layout.marginHeight= marginHeight;
-		}
-//		layout.minimumWidth= minWidth;
-//		layout.minimumHeight= minHeight;
-		layout.numColumns= nCulumns;		
-		parent.setLayout(layout);
-	}
-	
-	private static void modifyLabelSpans(Control[][] controls, int nCulumns) {
-		for (int i= 0; i < controls.length; i++) {
-			setHorizontalSpan(controls[i][0], nCulumns);
-		}
-	}
-	
-	/**
-	 * Sets the span of a control. Assumes that MGridData is used.
-	 */
-	public static void setHorizontalSpan(Control control, int span) {
-		Object ld= control.getLayoutData();
-		if (ld instanceof GridData) {
-			((GridData)ld).horizontalSpan= span;
-		} else if (span != 1) {
-			GridData gd= new GridData();
-			gd.horizontalSpan= span;
-			control.setLayoutData(gd);
-		}
-	}	
-
-	/**
-	 * Sets the width hint of a control. Assumes that MGridData is used.
-	 */
-	public static void setWidthHint(Control control, int widthHint) {
-		Object ld= control.getLayoutData();
-		if (ld instanceof GridData) {
-			((GridData)ld).widthHint= widthHint;
-		}
-	}
-	
-	/**
-	 * Sets the horizontal indent of a control. Assumes that MGridData is used.
-	 */
-	public static void setHorizontalIndent(Control control, int horizontalIndent) {
-		Object ld= control.getLayoutData();
-		if (ld instanceof GridData) {
-			((GridData)ld).horizontalIndent= horizontalIndent;
-		}
-	}
-
-	/**
-	 * Creates a spacer control with the given span.
-	 * The composite is assumed to have <code>MGridLayout</code> as
-	 * layout.
-	 * @param parent The parent composite
-	 */			
-	public static Control createEmptySpace(Composite parent, int span) {
-		Label label= new Label(parent, SWT.LEFT);
-		GridData gd= new GridData();
-		gd.horizontalAlignment= GridData.BEGINNING;
-		gd.grabExcessHorizontalSpace= false;
-		gd.horizontalSpan= span;
-		gd.horizontalIndent= 0;
-		gd.widthHint= 0;
-		gd.heightHint= 0;
-		label.setLayoutData(gd);
-		return label;
-	}
-	
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/PixelConverter.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/PixelConverter.java
deleted file mode 100644
index 82373f1..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/PixelConverter.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package org.eclipse.jdt.internal.junit.util;
-
-import org.eclipse.swt.graphics.FontMetrics;
-import org.eclipse.swt.graphics.GC;
-import org.eclipse.swt.widgets.Control;
-
-import org.eclipse.jface.dialogs.Dialog;
-
-/*
- * class copied from jdt ui
- */
-public class PixelConverter {
-	
-	private FontMetrics fFontMetrics;
-	
-	public PixelConverter(Control control) {
-		GC gc = new GC(control);
-		gc.setFont(control.getFont());
-		fFontMetrics= gc.getFontMetrics();
-		gc.dispose();
-	}
-	
-	private FontMetrics fgFontMetrics;
-		
-	/**
-	 * @see DialogPage#convertHeightInCharsToPixels
-	 */
-	public int convertHeightInCharsToPixels(int chars) {
-		return Dialog.convertHeightInCharsToPixels(fFontMetrics, chars);
-	}
-
-	/**
-	 * @see DialogPage#convertHorizontalDLUsToPixels
-	 */
-	public int convertHorizontalDLUsToPixels(int dlus) {
-		return Dialog.convertHorizontalDLUsToPixels(fFontMetrics, dlus);
-	}
-
-	/**
-	 * @see DialogPage#convertVerticalDLUsToPixels
-	 */
-	public int convertVerticalDLUsToPixels(int dlus) {
-		return Dialog.convertVerticalDLUsToPixels(fFontMetrics, dlus);
-	}
-	
-	/**
-	 * @see DialogPage#convertWidthInCharsToPixels
-	 */
-	public int convertWidthInCharsToPixels(int chars) {
-		return Dialog.convertWidthInCharsToPixels(fFontMetrics, chars);
-	}	
-
-}
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/SWTUtil.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/SWTUtil.java
deleted file mode 100644
index b5e44e6..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/SWTUtil.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.util;
-
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.dnd.DragSource;
-import org.eclipse.swt.dnd.DropTarget;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Caret;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.ScrollBar;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Widget;
-
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.util.Assert;
-
-/**
- * Utility class to simplify access to some SWT resources. 
- * (copied from jdt ui)
- */
-public class SWTUtil {
-	private SWTUtil(){}
-	/**
-	 * Returns the standard display to be used. The method first checks, if
-	 * the thread calling this method has an associated disaply. If so, this
-	 * display is returned. Otherwise the method returns the default display.
-	 */
-	public static Display getStandardDisplay() {
-		Display display;
-		display= Display.getCurrent();
-		if (display == null)
-			display= Display.getDefault();
-		return display;		
-	}
-	
-	/**
-	 * Returns the shell for the given widget. If the widget doesn't represent
-	 * a SWT object that manage a shell, <code>null</code> is returned.
-	 * 
-	 * @return the shell for the given widget
-	 */
-	public static Shell getShell(Widget widget) {
-		if (widget instanceof Control)
-			return ((Control)widget).getShell();
-		if (widget instanceof Caret)
-			return ((Caret)widget).getParent().getShell();
-		if (widget instanceof DragSource)
-			return ((DragSource)widget).getControl().getShell();
-		if (widget instanceof DropTarget)
-			return ((DropTarget)widget).getControl().getShell();
-		if (widget instanceof Menu)
-			return ((Menu)widget).getParent().getShell();
-		if (widget instanceof ScrollBar)
-			return ((ScrollBar)widget).getParent().getShell();
-							
-		return null;	
-	}
-
-
-	/**
-	 * Returns a width hint for a button control.
-	 */
-	public static int getButtonWidthHint(Button button) {
-		PixelConverter converter= new PixelConverter(button);
-		int widthHint= converter.convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH);
-		return Math.max(widthHint, button.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x);
-	}
-
-	/**
-	 * Returns a height hint for a button control.
-	 */		
-	public static int getButtonHeigthHint(Button button) {
-		PixelConverter converter= new PixelConverter(button);
-		return converter.convertVerticalDLUsToPixels(IDialogConstants.BUTTON_HEIGHT);
-	}	
-
-	
-	/**
-	 * Sets width and height hint for the button control.
-	 * <b>Note:</b> This is a NOP if the button's layout data is not
-	 * an instance of <code>GridData</code>.
-	 * 
-	 * @param	the button for which to set the dimension hint
-	 */		
-	public static void setButtonDimensionHint(Button button) {
-		Assert.isNotNull(button);
-		Object gd= button.getLayoutData();
-		if (gd instanceof GridData) {
-			((GridData)gd).heightHint= getButtonHeigthHint(button);
-			((GridData)gd).widthHint= getButtonWidthHint(button);		 
-		}
-	}		
-	
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/SocketUtil.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/SocketUtil.java
deleted file mode 100644
index 067c536..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/SocketUtil.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.util;
-
-import java.io.IOException;
-import java.net.Socket;
-import java.net.SocketException;
-import java.util.Random;
-
-/**
- * Socket utilities.
- */
-public class SocketUtil {
-
-	private static final Random fgRandom= new Random(System.currentTimeMillis());
-
-	/**
-	 * Method that looks for an unused local port
-	 * 
-	 * @param searchFrom lower limit of port range
-	 * @param searchTo upper limit of port range
-	 */
-	public static int findUnusedLocalPort(String host, int searchFrom, int searchTo) {
-		for (int i= 0; i < 10; i++) {
-			int port= getRandomPort(searchFrom, searchTo);
-			try {
-				new Socket(host, port);
-			} catch (SocketException e) {
-				return port;
-			} catch (IOException e) {
-			}
-		}
-		return -1;
-	}
-	
-	private static int getRandomPort(int low, int high) {
-		return (int)(fgRandom.nextFloat()*(high-low))+low;
-	}
-}
-
-
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/TestSearchEngine.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/TestSearchEngine.java
deleted file mode 100644
index 15fb676..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/TestSearchEngine.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.util;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.SubProgressMonitor;
-
-import org.eclipse.jface.operation.IRunnableContext;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-
-import org.eclipse.ui.IFileEditorInput;
-
-import org.eclipse.jdt.core.Flags;
-import org.eclipse.jdt.core.IClassFile;
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IMethod;
-import org.eclipse.jdt.core.ISourceReference;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.ITypeHierarchy;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.search.IJavaSearchConstants;
-import org.eclipse.jdt.core.search.IJavaSearchResultCollector;
-import org.eclipse.jdt.core.search.IJavaSearchScope;
-import org.eclipse.jdt.core.search.ISearchPattern;
-import org.eclipse.jdt.core.search.SearchEngine;
-
-import org.eclipse.jdt.internal.junit.ui.JUnitMessages;
-import org.eclipse.jdt.internal.junit.ui.JUnitPlugin;
-
-/**
- * Custom Search engine for suite() methods
- */
-public class TestSearchEngine {
-
-	private class JUnitSearchResultCollector implements IJavaSearchResultCollector {
-		IProgressMonitor fProgressMonitor;
-		List fList;
-		Set fFailed= new HashSet();
-		Set fMatches= new HashSet();
-		
-		public JUnitSearchResultCollector(List list, IProgressMonitor progressMonitor) {
-			fProgressMonitor= progressMonitor;
-			fList= list;
-		}
-		
-		public void accept(IResource resource, int start, int end, IJavaElement enclosingElement, int accuracy) throws JavaModelException{
-			if (!(enclosingElement instanceof IMethod)) 
-				return;
-			
-			IMethod method= (IMethod)enclosingElement;		
-			
-			IType declaringType= method.getDeclaringType();
-			if (fMatches.contains(declaringType) || fFailed.contains(declaringType))
-				return;
-			if (!hasSuiteMethod(declaringType) && !isTestType(declaringType)) {
-				fFailed.add(declaringType);
-				return;
-			}
-			fMatches.add(declaringType);
-		}
-		
-		public IProgressMonitor getProgressMonitor() {
-			return fProgressMonitor;
-		}
-				
-		public void aboutToStart() {
-		}
-		
-		public void done() {
-			fList.addAll(fMatches);
-		}
-	}
-	
-	private List searchMethod(IProgressMonitor pm, final IJavaSearchScope scope) throws JavaModelException {
-		final List typesFound= new ArrayList(200);	
-		searchMethod(typesFound, scope, pm);
-		return typesFound;	
-	}
-
-	private List searchMethod(final List v, IJavaSearchScope scope, final IProgressMonitor progressMonitor) throws JavaModelException {		
-		IJavaSearchResultCollector collector= new JUnitSearchResultCollector(v, progressMonitor);
-		ISearchPattern suitePattern= SearchEngine.createSearchPattern("suite() Test", IJavaSearchConstants.METHOD, IJavaSearchConstants.DECLARATIONS, true); //$NON-NLS-1$
-		ISearchPattern testPattern= SearchEngine.createSearchPattern("test*() void", IJavaSearchConstants.METHOD , IJavaSearchConstants.DECLARATIONS, true); //$NON-NLS-1$
-		SearchEngine engine= new SearchEngine();
-		engine.search(ResourcesPlugin.getWorkspace(), SearchEngine.createOrSearchPattern(suitePattern, testPattern), scope, collector); 
-		return v;
-	}
-	
-	public static IType[] findTests(IRunnableContext context, final Object[] elements) throws InvocationTargetException, InterruptedException{
-		final Set result= new HashSet();
-	
-		if (elements.length > 0) {
-			IRunnableWithProgress runnable= new IRunnableWithProgress() {
-				public void run(IProgressMonitor pm) throws InterruptedException {
-					doFindTests(elements, result, pm);
-				}
-			};
-			context.run(true, true, runnable);			
-		}
-		return (IType[]) result.toArray(new IType[result.size()]) ;
-	}
-
-	public static void doFindTests(Object[] elements, Set result, IProgressMonitor pm) throws InterruptedException {
-		int nElements= elements.length;
-		pm.beginTask(JUnitMessages.getString("TestSearchEngine.message.searching"), nElements);  //$NON-NLS-1$
-		try {
-			for (int i= 0; i < nElements; i++) {
-				try {
-					collectTypes(elements[i], new SubProgressMonitor(pm, 1), result);
-				} catch (JavaModelException e) {
-					JUnitPlugin.log(e.getStatus());
-				}
-				if (pm.isCanceled()) {
-					throw new InterruptedException();
-				}
-			}
-		} finally {
-			pm.done();
-		}
-	}
-
-	private static void collectTypes(Object element, IProgressMonitor pm, Set result) throws JavaModelException/*, InvocationTargetException*/ {
-		element= computeScope(element);
-		while((element instanceof IJavaElement) && !(element instanceof ICompilationUnit) && (element instanceof ISourceReference)) {
-			if(element instanceof IType) {
-				if (hasSuiteMethod((IType)element) || isTestType((IType)element)) {
-					result.add(element);
-					return;
-				}
-			}
-			element= ((IJavaElement)element).getParent();
-		}
-		if (element instanceof ICompilationUnit) {
-			ICompilationUnit cu= (ICompilationUnit)element;
-			IType[] types= cu.getAllTypes();
-			for (int i= 0; i < types.length; i++) {
-				if (hasSuiteMethod(types[i])  || isTestType(types[i]))
-					result.add(types[i]);
-			}
-		} 
-		else if (element instanceof IJavaElement) {
-			List found= searchSuiteMethods(pm, (IJavaElement)element);
-			result.addAll(found);
-		}
-	}
-
-	private static Object computeScope(Object element) throws JavaModelException {
-		if (element instanceof IFileEditorInput)
-			element= ((IFileEditorInput)element).getFile();
-		if (element instanceof IResource)
-			element= JavaCore.create((IResource)element);
-		if (element instanceof IClassFile) {
-			IClassFile cf= (IClassFile)element;
-			element= cf.getType();
-		}
-		return element;
-	}
-	
-	private static List searchSuiteMethods(IProgressMonitor pm, IJavaElement element) throws JavaModelException {	
-		IJavaSearchScope scope= SearchEngine.createJavaSearchScope(new IJavaElement[] { element });
-		TestSearchEngine searchEngine= new TestSearchEngine(); 
-		return searchEngine.searchMethod(pm, scope);
-	}
-		
-	private static boolean hasSuiteMethod(IType type) throws JavaModelException {
-		IMethod method= type.getMethod("suite", new String[0]); //$NON-NLS-1$
-		if (method == null || !method.exists()) 
-			return false;
-		
-		if (!Flags.isStatic(method.getFlags()) ||	
-			!Flags.isPublic(method.getFlags()) ||			
-			!Flags.isPublic(method.getDeclaringType().getFlags())) { 
-			return false;
-		}
-		return true;
-	}
-	
-	private static boolean isTestType(IType type) throws JavaModelException {
-		if (Flags.isAbstract(type.getFlags())) 
-			return false;
-		if (!Flags.isPublic(type.getFlags())) 
-			return false;
-		
-		IType[] interfaces= type.newSupertypeHierarchy(null).getAllSuperInterfaces(type);
-		for (int i= 0; i < interfaces.length; i++)
-			if(interfaces[i].getFullyQualifiedName().equals(JUnitPlugin.TEST_INTERFACE_NAME))
-				return true;
-		return false;
-	}
-
-	public static boolean isTestImplementor(IType type) throws JavaModelException {
-		ITypeHierarchy typeHier= type.newSupertypeHierarchy(null);
-		IType[] superInterfaces= typeHier.getAllInterfaces();
-		for (int i= 0; i < superInterfaces.length; i++) {
-			if (superInterfaces[i].getFullyQualifiedName().equals(JUnitPlugin.TEST_INTERFACE_NAME))
-				return true;
-		}
-		return false;
-	}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/JUnitWizard.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/JUnitWizard.java
deleted file mode 100644
index 4282692..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/JUnitWizard.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2002.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.wizards;
-
-import java.lang.reflect.InvocationTargetException;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.jdt.internal.junit.ui.JUnitPlugin;
-import org.eclipse.jdt.internal.junit.util.*;
-import org.eclipse.jface.dialogs.DialogSettings;
-import org.eclipse.jface.dialogs.IDialogSettings;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation;
-import org.eclipse.ui.wizards.newresource.BasicNewResourceWizard;
-
-/**
- * The wizard base class for JUnit creation wizards.
- */
-public abstract class JUnitWizard extends BasicNewResourceWizard {
-
-	protected static String DIALOG_SETTINGS_KEY= "JUnitWizards"; //$NON-NLS-1$
-
-	public JUnitWizard() {
-		setNeedsProgressMonitor(true);
-	}
-	
-	/*
-	 * @see IWizard#performFinish()
-	 */
-	public abstract boolean performFinish();
-
-	/**
-	 * Run a runnable
-	 */	
-	protected boolean finishPage(IRunnableWithProgress runnable) {
-		IRunnableWithProgress op= new WorkspaceModifyDelegatingOperation(runnable);
-		try {
-			getContainer().run(false, true, op);
-		} catch (InvocationTargetException e) {
-			Shell shell= getShell();
-			String title= WizardMessages.getString("NewJUnitWizard.op_error.title"); //$NON-NLS-1$
-			String message= WizardMessages.getString("NewJUnitWizard.op_error.message"); //$NON-NLS-1$
-			ExceptionHandler.handle(e, shell, title, message);
-			return false;
-		} catch  (InterruptedException e) {
-			return false;
-		}
-		return true;
-	}
-
-	protected void openResource(final IResource resource) {
-		if (resource.getType() == IResource.FILE) {
-			final IWorkbenchPage activePage= JUnitPlugin.getDefault().getActivePage();
-			if (activePage != null) {
-				final Display display= getShell().getDisplay();
-				if (display != null) {
-					display.asyncExec(new Runnable() {
-						public void run() {
-							try {
-								activePage.openEditor((IFile)resource);
-							} catch (PartInitException e) {
-								JUnitPlugin.log(e);
-							}
-						}
-					});
-				}
-			}
-		}
-	}
-
-	protected void initDialogSettings() {
-		IDialogSettings pluginSettings= JUnitPlugin.getDefault().getDialogSettings();
-		IDialogSettings wizardSettings= pluginSettings.getSection(DIALOG_SETTINGS_KEY);
-		if (wizardSettings == null) {
-			wizardSettings= new DialogSettings(DIALOG_SETTINGS_KEY);
-			pluginSettings.addSection(wizardSettings);
-		}
-		setDialogSettings(wizardSettings);
-	}
-
-}
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/MethodStubsSelectionButtonGroup.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/MethodStubsSelectionButtonGroup.java
deleted file mode 100644
index eb44f59..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/MethodStubsSelectionButtonGroup.java
+++ /dev/null
@@ -1,475 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2002.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.wizards;
-
-import org.eclipse.jdt.internal.junit.util.*;
-import org.eclipse.jface.util.Assert;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-
-/**
- * A group of controls used in the JUnit TestCase and TestSuite wizards
- * for selecting method stubs to create.
- */
-public class MethodStubsSelectionButtonGroup {
-
-	private Label fLabel;
-	protected String fLabelText;
-	
-	private SelectionButtonGroupListener fGroupListener;
-	
-	private boolean fEnabled;
-
-	private Composite fButtonComposite;
-	
-	private Button[] fButtons;
-	private String[] fButtonNames;
-	private boolean[] fButtonsSelected;
-	private boolean[] fButtonsEnabled;
-	private Combo fMainCombo;
-	private boolean fMainComboEnabled;
-	
-	private int fGroupBorderStyle;
-	private int fGroupNumberOfColumns;
-	private int fButtonsStyle;	
-
-	public interface SelectionButtonGroupListener {
-		/**
-		 * The dialog field has changed.
-		 */
-		void groupChanged(MethodStubsSelectionButtonGroup field);
-	}
-		
-	/**
-	 * Creates a group without border.
-	 */
-	public MethodStubsSelectionButtonGroup(int buttonsStyle, String[] buttonNames, int nColumns) {
-		this(buttonsStyle, buttonNames, nColumns, SWT.NONE);		
-	}	
-	
-	/**
-	 * Creates a group with border (label in border).
-	 * Accepted button styles are: SWT.RADIO, SWT.CHECK, SWT.TOGGLE
-	 * For border styles see <code>Group</code>
-	 */	
-	public MethodStubsSelectionButtonGroup(int buttonsStyle, String[] buttonNames, int nColumns, int borderStyle) {
-		fEnabled= true;
-		fLabel= null;
-		fLabelText= ""; //$NON-NLS-1$
-		
-		Assert.isTrue(buttonsStyle == SWT.RADIO || buttonsStyle == SWT.CHECK || buttonsStyle == SWT.TOGGLE);
-		fButtonNames= buttonNames;
-		
-		int nButtons= buttonNames.length;
-		fButtonsSelected= new boolean[nButtons];
-		fButtonsEnabled= new boolean[nButtons];
-		for (int i= 0; i < nButtons; i++) {
-			fButtonsSelected[i]= false;
-			fButtonsEnabled[i]= true;
-		}
-		fMainComboEnabled= true;
-		if (fButtonsStyle == SWT.RADIO) {
-			fButtonsSelected[0]= true;
-		}
-		
-		fGroupBorderStyle= borderStyle;
-		fGroupNumberOfColumns= (nColumns <= 0) ? nButtons : nColumns;
-		
-		fButtonsStyle= buttonsStyle;
-	}
-	
-	/*
-	 * @see DialogField#doFillIntoGrid
-	 */
-	public Control[] doFillIntoGrid(Composite parent, int nColumns) {
-		assertEnoughColumns(nColumns);
-				
-		if (fGroupBorderStyle == SWT.NONE) {
-			Label label= getLabelControl(parent);
-			label.setLayoutData(gridDataForLabel(1));
-		
-			Composite buttonsgroup= getSelectionButtonsGroup(parent);
-			GridData gd= new GridData();
-			gd.horizontalSpan= nColumns - 1;
-			buttonsgroup.setLayoutData(gd);
-			return new Control[] { label, buttonsgroup };
-		} else {
-			Composite buttonsgroup= getSelectionButtonsGroup(parent);
-			GridData gd= new GridData();
-			gd.horizontalSpan= nColumns;
-			buttonsgroup.setLayoutData(gd);
-			return new Control[] { buttonsgroup };
-		}
-	}	
-
-	/*
-	 * @see DialogField#doFillIntoGrid
-	 */	
-	public int getNumberOfControls() {
-		return (fGroupBorderStyle == SWT.NONE) ? 2 : 1;
-	}
-	
-	private Button createSelectionButton(int index, Composite group, SelectionListener listener) {
-		Button button= new Button(group, fButtonsStyle | SWT.LEFT);
-		button.setFont(group.getFont());			
-		button.setText(fButtonNames[index]);
-		button.setEnabled(isEnabled() && fButtonsEnabled[index]);
-		button.setSelection(fButtonsSelected[index]);
-		button.addSelectionListener(listener);
-		button.setLayoutData(new GridData());
-		return button;
-	}
-	
-	private Button createMainCombo(int index, Composite group, SelectionListener listener) {
-		Composite buttonComboGroup= new Composite(group, 0);
-
-		GridLayout layout= new GridLayout();
-		layout.marginHeight= 0;
-		layout.marginWidth= 20;
-		layout.numColumns= 2;
-		buttonComboGroup.setLayout(layout);
-		
-		Button button= new Button(buttonComboGroup, fButtonsStyle | SWT.LEFT);
-		button.setFont(group.getFont());			
-		button.setText(fButtonNames[index]);
-		button.setEnabled(isEnabled() && fButtonsEnabled[index]);
-		button.setSelection(fButtonsSelected[index]);
-		button.addSelectionListener(listener);
-		button.setLayoutData(new GridData());
-
-
-		fMainCombo= new Combo(buttonComboGroup, SWT.READ_ONLY);
-		fMainCombo.setItems(new String[] {"text ui","swing ui","awt ui"}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		fMainCombo.select(0);
-		fMainCombo.setEnabled(isEnabled() && fMainComboEnabled);
-		fMainCombo.setFont(group.getFont());
-		fMainCombo.setLayoutData(new GridData());
-		return button;
-	}
-
-	public String getMainMethod(String typeName) {
-		StringBuffer main= new StringBuffer("public static void main(String[] args) {"); //$NON-NLS-1$
-		if (isSelected(1)) {
-			main.append("junit."); //$NON-NLS-1$
-			switch (getComboSelection()) {
-				case 0:
-					main.append("textui"); //$NON-NLS-1$
-					break;
-				case 1:
-					main.append("swingui"); //$NON-NLS-1$
-					break;
-				case 2 :
-					main.append("awtui"); //$NON-NLS-1$
-					break;
-				default :
-					main.append("textui"); //$NON-NLS-1$
-					break;
-			}
-			main.append(".TestRunner.run(" + typeName + ".class);"); //$NON-NLS-1$ //$NON-NLS-2$
-		}
-		main.append("}\n\n"); //$NON-NLS-1$
-		return main.toString();
-	}
-
-	/**
-	 * Returns the group widget. When called the first time, the widget will be created.
-	 * @param The parent composite when called the first time, or <code>null</code>
-	 * after.
-	 */
-	public Composite getSelectionButtonsGroup(Composite parent) {
-		if (fButtonComposite == null) {
-			assertCompositeNotNull(parent);
-			
-			GridLayout layout= new GridLayout();
-			layout.makeColumnsEqualWidth= true;
-			layout.numColumns= fGroupNumberOfColumns;			
-			
-			if (fGroupBorderStyle != SWT.NONE) {
-				Group group= new Group(parent, fGroupBorderStyle);
-				if (fLabelText != null && fLabelText.length() > 0) {
-					group.setText(fLabelText);
-				}
-				fButtonComposite= group;
-			} else {
-				fButtonComposite= new Composite(parent, SWT.NULL);
-				layout.marginHeight= 0;
-				layout.marginWidth= 0;
-			}
-			fButtonComposite.setLayout(layout);
-			
-			SelectionListener listener= new SelectionListener() {
-				public void widgetDefaultSelected(SelectionEvent e) {
-					doWidgetSelected(e);
-				}
-				public void widgetSelected(SelectionEvent e) {
-					doWidgetSelected(e);
-				}
-			};
-			int nButtons= fButtonNames.length;
-			fButtons= new Button[nButtons];
-
-			fButtons[0]= createSelectionButton(0, fButtonComposite, listener);
-			fButtons[1]= createMainCombo(1, fButtonComposite, listener);
-			for (int i= 2; i < nButtons; i++) {
-				fButtons[i]= createSelectionButton(i, fButtonComposite, listener);
-			}
-			int nRows= nButtons / fGroupNumberOfColumns;
-			int nFillElements= nRows * fGroupNumberOfColumns - nButtons;
-			for (int i= 0; i < nFillElements; i++) {
-				createEmptySpace(fButtonComposite);
-			}
-			setSelectionGroupListener(new SelectionButtonGroupListener() {
-				public void groupChanged(MethodStubsSelectionButtonGroup field) {
-					field.setEnabled(1, isEnabled() && field.isSelected(0));
-				}
-			});			
-		}
-		return fButtonComposite;
-	}
-
-	/**
-	 * Returns a button from the group or <code>null</code> if not yet created.
-	 */	
-	public Button getSelectionButton(int index) {
-		if (index >= 0 && index < fButtons.length) {
-			return fButtons[index];
-		}
-		return null;
-	}
-	
-	private void doWidgetSelected(SelectionEvent e) {
-		Button button= (Button)e.widget;
-		for (int i= 0; i < fButtons.length; i++) {
-			if (fButtons[i] == button) {
-				fButtonsSelected[i]= button.getSelection();
-				dialogFieldChanged();
-				return;
-			}
-		}
-	}	
-	
-	/**
-	 * Returns the selection state of a button contained in the group.
-	 * @param The index of the button
-	 */
-	public boolean isSelected(int index) {
-		if (index >= 0 && index < fButtonsSelected.length) {
-			return fButtonsSelected[index];
-		}
-		return false;
-	}
-	
-	/**
-	 * Sets the selection state of a button contained in the group.
-	 */
-	public void setSelection(int index, boolean selected) {
-		if (index >= 0 && index < fButtonsSelected.length) {
-			if (fButtonsSelected[index] != selected) {
-				fButtonsSelected[index]= selected;
-				if (fButtons != null) {
-					Button button= fButtons[index];
-					if (isOkToUse(button)) {
-						button.setSelection(selected);
-					}
-				}
-			}
-		}
-	}
-
-	/**
-	 * Returns the enabled state of a button contained in the group.
-	 * @param The index of the button
-	 */
-	public boolean isEnabled(int index) {
-		if (index >= 0 && index < fButtonsEnabled.length) {
-			return fButtonsEnabled[index];
-		}
-		return false;
-	}
-	
-	/**
-	 * Sets the selection state of a button contained in the group.
-	 */
-	public void setEnabled(int index, boolean enabled) {
-		if (index >= 0 && index < fButtonsEnabled.length) {
-			if (fButtonsEnabled[index] != enabled) {
-				fButtonsEnabled[index]= enabled;
-				if (index == 1)
-					fMainComboEnabled= enabled;
-				if (fButtons != null) {
-					Button button= fButtons[index];
-					if (isOkToUse(button)) {
-						button.setEnabled(enabled);
-						if (index == 1)
-							fMainCombo.setEnabled(isEnabled() && enabled);
-					}
-				}
-			}
-		}
-	}
-
-	protected void updateEnableState() {
-		if (fLabel != null) {
-			fLabel.setEnabled(fEnabled);
-		}
-		if (fButtons != null) {
-			boolean enabled= isEnabled();
-			for (int i= 0; i < fButtons.length; i++) {
-				Button button= fButtons[i];
-				if (isOkToUse(button)) {
-					button.setEnabled(enabled && fButtonsEnabled[i]);
-				}
-			}
-			fMainCombo.setEnabled(enabled && fMainComboEnabled);
-		}
-	}
-	
-	public int getComboSelection() {
-		return fMainCombo.getSelectionIndex();
-	}
-	
-	public void setComboSelection(int index) {
-		fMainCombo.select(index);
-	}
-
-
-	/**
-	 * Sets the label of the dialog field.
-	 */
-	public void setLabelText(String labeltext) {
-		fLabelText= labeltext;
-	}
-		
-	/**
-	 * Defines the listener for this dialog field.
-	 */	
-	public final void setSelectionGroupListener(SelectionButtonGroupListener listener) {
-		fGroupListener= listener;
-	}
-
-	/**
-	 * Programatical invocation of a dialog field change.
-	 */		
-	public void dialogFieldChanged() {
-		if (fGroupListener != null) {
-			fGroupListener.groupChanged(this);
-		}
-	}	
-	
-	/**
-	 * Tries to set the focus to the dialog field.
-	 * Returns <code>true</code> if the dialog field can take focus.
-	 * 	To be reimplemented by dialog field implementors.
-	 */
-	public boolean setFocus() {
-		return false;
-	}
-
-	/**
-	 * Posts <code>setFocus</code> to the display event queue.
-	 */	
-	public void postSetFocusOnDialogField(Display display) {
-		if (display != null) {
-			display.asyncExec(
-				new Runnable() {
-					public void run() {
-						setFocus();
-					}
-				}
-			);
-		}
-	}		
-	
-	protected static GridData gridDataForLabel(int span) {
-		GridData gd= new GridData();
-		gd.horizontalSpan= span;
-		return gd;
-	}
-	
-	/**
-	 * Creates or returns the created label widget.
-	 * @param parent The parent composite or <code>null</code> if the widget has
-	 * already been created.
-	 */			
-	public Label getLabelControl(Composite parent) {
-		if (fLabel == null) {
-			assertCompositeNotNull(parent);
-			
-			fLabel= new Label(parent, SWT.LEFT | SWT.WRAP);
-			fLabel.setFont(parent.getFont());
-			fLabel.setEnabled(fEnabled);		
-			if (fLabelText != null && !"".equals(fLabelText)) { //$NON-NLS-1$
-				fLabel.setText(fLabelText);
-			} else {
-				// XXX: to avoid a 16 pixel wide empty label - revisit
-				fLabel.setText("."); //$NON-NLS-1$
-				fLabel.setVisible(false);
-			}			
-		}
-		return fLabel;
-	}
-
-	/**
-	 * Creates a spacer control.
-	 * @param parent The parent composite
-	 */		
-	public static Control createEmptySpace(Composite parent) {
-		return createEmptySpace(parent, 1);
-	}
-
-	/**
-	 * Creates a spacer control with the given span.
-	 * The composite is assumed to have <code>MGridLayout</code> as
-	 * layout.
-	 * @param parent The parent composite
-	 */			
-	public static Control createEmptySpace(Composite parent, int span) {
-		return LayoutUtil.createEmptySpace(parent, span);
-	}
-	
-	/**
-	 * Tests is the control is not <code>null</code> and not disposed.
-	*/
-	protected final boolean isOkToUse(Control control) {
-		return (control != null) && !(control.isDisposed());
-	}
-	
-	// --------- enable / disable management
-	
-	/**
-	 * Sets the enable state of the dialog field.
-	 */
-	public final void setEnabled(boolean enabled) {
-		if (enabled != fEnabled) {
-			fEnabled= enabled;
-			updateEnableState();
-		}
-	}
-	
-	/**
-	 * Gets the enable state of the dialog field.
-	 */	
-	public final boolean isEnabled() {
-		return fEnabled;
-	}
-
-	protected final void assertCompositeNotNull(Composite comp) {
-		Assert.isNotNull(comp, "uncreated control requested with composite null"); //$NON-NLS-1$
-	}
-	
-	protected final void assertEnoughColumns(int nColumns) {
-		Assert.isTrue(nColumns >= getNumberOfControls(), "given number of columns is too small"); //$NON-NLS-1$
-	}
-}
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/NewTestCaseCreationWizard.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/NewTestCaseCreationWizard.java
deleted file mode 100644
index e6b2040..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/NewTestCaseCreationWizard.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2002.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.wizards;
-
-import java.net.MalformedURLException;
-
-import org.eclipse.core.resources.IResource;
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.internal.junit.ui.JUnitPlugin;
-import org.eclipse.jface.resource.ImageDescriptor;
-
-/**
- * A wizard for creating test cases.
- */
-public class NewTestCaseCreationWizard extends JUnitWizard {
-
-	private NewTestCaseCreationWizardPage fPage;
-	private NewTestCaseCreationWizardPage2 fPage2;
-
-	public NewTestCaseCreationWizard() {
-		super();
-		setWindowTitle(WizardMessages.getString("Wizard.title.new")); //$NON-NLS-1$
-		initDialogSettings();
-	}
-
-	protected void initializeDefaultPageImageDescriptor() {
-		try {
-			ImageDescriptor id= ImageDescriptor.createFromURL(JUnitPlugin.makeIconFileURL("wizban/newtest_wiz.gif")); //$NON-NLS-1$
-			setDefaultPageImageDescriptor(id);
-	} catch (MalformedURLException e) {
-			// Should not happen.  Ignore.
-		}
-	}
-
-
-	/*
-	 * @see Wizard#createPages
-	 */	
-	public void addPages() {
-		super.addPages();
-		fPage= new NewTestCaseCreationWizardPage();
-		fPage2= new NewTestCaseCreationWizardPage2(fPage);
-		addPage(fPage);
-		fPage.init(getSelection(),fPage2);
-		addPage(fPage2);
-	}	
-	
-/*
-	 * @see Wizard#performFinish
-	 */		
-	public boolean performFinish() {
-		if (finishPage(fPage.getRunnable())) {
-			IType newClass= fPage.getCreatedType();
-
-			ICompilationUnit cu= newClass.getCompilationUnit();				
-
-			if (cu.isWorkingCopy()) {
-				cu= (ICompilationUnit)cu.getOriginalElement();
-			}	
-			try {
-				IResource resource= cu.getUnderlyingResource();
-				selectAndReveal(resource);
-				openResource(resource);
-			} catch (JavaModelException e) {
-				JUnitPlugin.log(e);
-				// let pass, only reveal and open will fail
-			}
-			fPage.saveWidgetValues();
-			fPage2.saveWidgetValues();
-			
-			return true;
-		}
-		return false;		
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/NewTestCaseCreationWizardPage.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/NewTestCaseCreationWizardPage.java
deleted file mode 100644
index 9fe5cdf..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/NewTestCaseCreationWizardPage.java
+++ /dev/null
@@ -1,907 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2002.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.wizards;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.ListIterator;
-
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jdt.core.Flags;
-import org.eclipse.jdt.core.IClassFile;
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IMethod;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.ISourceRange;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.ITypeHierarchy;
-import org.eclipse.jdt.core.JavaConventions;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.Signature;
-import org.eclipse.jdt.core.search.IJavaSearchScope;
-import org.eclipse.jdt.core.search.SearchEngine;
-import org.eclipse.jdt.internal.corext.codemanipulation.CodeGenerationSettings;
-import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
-import org.eclipse.jdt.internal.junit.ui.IJUnitHelpContextIds;
-import org.eclipse.jdt.internal.junit.ui.JUnitPlugin;
-import org.eclipse.jdt.internal.junit.util.JUnitStatus;
-import org.eclipse.jdt.internal.junit.util.JUnitStubUtility;
-import org.eclipse.jdt.internal.junit.util.LayoutUtil;
-import org.eclipse.jdt.internal.junit.util.TestSearchEngine;
-import org.eclipse.jdt.internal.junit.util.JUnitStubUtility.GenStubSettings;
-import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
-import org.eclipse.jdt.internal.ui.util.SWTUtil;
-import org.eclipse.jdt.ui.IJavaElementSearchConstants;
-import org.eclipse.jdt.ui.JavaUI;
-import org.eclipse.jdt.ui.wizards.NewTypeWizardPage;
-import org.eclipse.jface.dialogs.IDialogSettings;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.dialogs.SelectionDialog;
-import org.eclipse.ui.help.WorkbenchHelp;
-
-/**
- * The first page of the TestCase creation wizard. 
- */
-public class NewTestCaseCreationWizardPage extends NewTypeWizardPage {
-
-	protected final static String PAGE_NAME= "NewTestCaseCreationWizardPage"; //$NON-NLS-1$
-	protected final static String CLASS_TO_TEST= PAGE_NAME + ".classtotest"; //$NON-NLS-1$
-	protected final static String TEST_CLASS= PAGE_NAME + ".testclass"; //$NON-NLS-1$
-	protected final static String TEST_SUFFIX= "Test"; //$NON-NLS-1$
-	protected final static String SETUP= "setUp"; //$NON-NLS-1$
-	protected final static String TEARDOWN= "tearDown"; //$NON-NLS-1$
-
-	protected final static String STORE_GENERATE_MAIN= PAGE_NAME + ".GENERATE_MAIN"; //$NON-NLS-1$
-	protected final static String STORE_USE_TESTRUNNER= PAGE_NAME + ".USE_TESTRUNNER";	//$NON-NLS-1$
-	protected final static String STORE_TESTRUNNER_TYPE= PAGE_NAME + ".TESTRUNNER_TYPE"; //$NON-NLS-1$
-
-	
-	private String fDefaultClassToTest;
-	private NewTestCaseCreationWizardPage2 fPage2;
-	private MethodStubsSelectionButtonGroup fMethodStubsButtons;
-
-	private IType fClassToTest;
-	protected IStatus fClassToTestStatus;
-	protected IStatus fTestClassStatus;
-
-	private int fIndexOfFirstTestMethod;
-
-	private Label fClassToTestLabel;
-	private Text fClassToTestText;
-	private Button fClassToTestButton;
-	
-	private Label fTestClassLabel;
-	private Text fTestClassText;
-	private String fTestClassTextInitialValue;
-
-	private IMethod[] fTestMethods;
-	private IType fCreatedType;
-
-	private boolean fFirstTime;  
-
-	public NewTestCaseCreationWizardPage() {
-		super(true, PAGE_NAME);
-		fFirstTime= true;
-		fTestClassTextInitialValue= ""; //$NON-NLS-1$
-		
-		setTitle(WizardMessages.getString("NewTestClassWizPage.title")); //$NON-NLS-1$
-		setDescription(WizardMessages.getString("NewTestClassWizPage.description")); //$NON-NLS-1$
-		
-		String[] buttonNames= new String[] {
-			"public static void main(Strin&g[] args)", //$NON-NLS-1$
-			/* Add testrunner statement to main Method */
-			WizardMessages.getString("NewTestClassWizPage.methodStub.testRunner"), //$NON-NLS-1$
-			WizardMessages.getString("NewTestClassWizPage.methodStub.setUp"), //$NON-NLS-1$
-			WizardMessages.getString("NewTestClassWizPage.methodStub.tearDown") //$NON-NLS-1$
-		};
-		
-		fMethodStubsButtons= new MethodStubsSelectionButtonGroup(SWT.CHECK, buttonNames, 1);
-		fMethodStubsButtons.setLabelText(WizardMessages.getString("NewTestClassWizPage.method.Stub.label")); //$NON-NLS-1$
-
-		fClassToTestStatus= new JUnitStatus();
-		fTestClassStatus= new JUnitStatus();
-		
-		fDefaultClassToTest= ""; //$NON-NLS-1$
-	}
-
-	// -------- Initialization ---------
-
-	/**
-	 * Should be called from the wizard with the initial selection and the 2nd page of the wizard..
-	 */
-	public void init(IStructuredSelection selection, NewTestCaseCreationWizardPage2 page2) {
-		fPage2= page2;
-		IJavaElement element= getInitialJavaElement(selection);
-
-		initContainerPage(element);
-		initTypePage(element);
-		doStatusUpdate();		
-		// put default class to test		
-		if (element != null) {
-			IType classToTest= null;
-			// evaluate the enclosing type
-			IType typeInCompUnit= (IType) element.getAncestor(IJavaElement.TYPE);
-			if (typeInCompUnit != null) {
-				if (typeInCompUnit.getCompilationUnit() != null) {
-					classToTest= typeInCompUnit;
-				}
-			} else {
-				ICompilationUnit cu= (ICompilationUnit) element.getAncestor(IJavaElement.COMPILATION_UNIT);
-				if (cu != null) 
-					classToTest= cu.findPrimaryType();
-				else {
-					if (element instanceof IClassFile) {
-						try {
-							IClassFile cf= (IClassFile) element;
-							if (cf.isStructureKnown())
-								classToTest= cf.getType();
-						} catch(JavaModelException e) {
-							JUnitPlugin.log(e);
-						}
-					}					
-				}
-			}
-			if (classToTest != null) {
-				try {
-					if (!TestSearchEngine.isTestImplementor(classToTest)) {
-						fDefaultClassToTest= classToTest.getFullyQualifiedName();
-					}
-				} catch (JavaModelException e) {
-					JUnitPlugin.log(e);
-				}
-			}
-		}
-		fMethodStubsButtons.setSelection(0, false); //main
-		fMethodStubsButtons.setSelection(1, false); //add textrunner
-		fMethodStubsButtons.setEnabled(1, false); //add text
-		fMethodStubsButtons.setSelection(2, false); //setUp
-		fMethodStubsButtons.setSelection(3, false); //tearDown
-	}
-	
-	/**
-	 * @see NewContainerWizardPage#handleFieldChanged
-	 */
-	protected void handleFieldChanged(String fieldName) {
-		super.handleFieldChanged(fieldName);
-		if (fieldName.equals(CLASS_TO_TEST)) {
-			fClassToTestStatus= classToTestClassChanged();
-			updateDefaultName();
-		} else if (fieldName.equals(SUPER)) {
-			validateSuperClass();
-		} else if (fieldName.equals(TEST_CLASS)) {
-			fTestClassStatus= testClassChanged();
-		} else if (fieldName.equals(PACKAGE) || fieldName.equals(CONTAINER)) {
-			if (fieldName.equals(PACKAGE))
-				fPackageStatus= packageChanged();
-			if (!fFirstTime) {
-				validateSuperClass();
-				fClassToTestStatus= classToTestClassChanged();			
-				fTestClassStatus= testClassChanged();
-			}
-			if (fieldName.equals(CONTAINER)) {
-				validateJUnitOnBuildPath(); 
-			}
-		}
-		doStatusUpdate();
-	}
-
-	// ------ validation --------
-	private void doStatusUpdate() {
-		// status of all used components
-		IStatus[] status= new IStatus[] {
-			fContainerStatus,
-			fPackageStatus,
-			fTestClassStatus,
-			fClassToTestStatus,
-			fModifierStatus,
-			fSuperClassStatus
-		};
-		
-		// the mode severe status will be displayed and the ok button enabled/disabled.
-		updateStatus(status);
-	}
-
-	protected void updateDefaultName() {
-		String s= fClassToTestText.getText();
-		if (s.lastIndexOf('.') > -1)
-			s= s.substring(s.lastIndexOf('.') + 1);
-		if (s.length() > 0)
-			setTypeName(s + TEST_SUFFIX, true);
-	}
-	
-	/*
-	 * @see IDialogPage#createControl(Composite)
-	 */
-	public void createControl(Composite parent) {
-		initializeDialogUnits(parent);
-		
-		Composite composite= new Composite(parent, SWT.NONE);
-		
-		int nColumns= 4;
-		
-		GridLayout layout= new GridLayout();
-		layout.numColumns= nColumns;		
-		composite.setLayout(layout);
-
-		createContainerControls(composite, nColumns);	
-		createPackageControls(composite, nColumns);		
-		createSeparator(composite, nColumns);
-		createTestClassControls(composite, nColumns);		
-		createClassToTestControls(composite, nColumns);
-		createSuperClassControls(composite, nColumns);
-		createMethodStubSelectionControls(composite, nColumns);
-		setSuperClass(JUnitPlugin.TEST_SUPERCLASS_NAME, true);
-		
-		setControl(composite);
-			
-		//set default and focus
-		fClassToTestText.setText(fDefaultClassToTest);
-		restoreWidgetValues();
-		WorkbenchHelp.setHelp(composite, IJUnitHelpContextIds.NEW_TESTCASE_WIZARD_PAGE);	
-
-	}
-
-	protected void createMethodStubSelectionControls(Composite composite, int nColumns) {
-		LayoutUtil.setHorizontalSpan(fMethodStubsButtons.getLabelControl(composite), nColumns);
-		LayoutUtil.createEmptySpace(composite,1);
-		LayoutUtil.setHorizontalSpan(fMethodStubsButtons.getSelectionButtonsGroup(composite), nColumns - 1);	
-	}	
-
-	protected void createClassToTestControls(Composite composite, int nColumns) {
-		fClassToTestLabel= new Label(composite, SWT.LEFT | SWT.WRAP);
-		fClassToTestLabel.setFont(composite.getFont());
-
-		fClassToTestLabel.setText(WizardMessages.getString("NewTestClassWizPage.class_to_test.label")); //$NON-NLS-1$
-		GridData gd= new GridData();
-		gd.horizontalSpan= 1;
-		fClassToTestLabel.setLayoutData(gd);
-
-		fClassToTestText= new Text(composite, SWT.SINGLE | SWT.BORDER);
-		fClassToTestText.setEnabled(true);
-		fClassToTestText.setFont(composite.getFont());
-		fClassToTestText.addModifyListener(new ModifyListener() {
-			public void modifyText(ModifyEvent e) {
-				handleFieldChanged(CLASS_TO_TEST);
-			}
-		});
-		gd= new GridData();
-		gd.horizontalAlignment= GridData.FILL;
-		gd.grabExcessHorizontalSpace= true;
-		gd.horizontalSpan= nColumns - 2;
-		fClassToTestText.setLayoutData(gd);
-		
-		fClassToTestButton= new Button(composite, SWT.PUSH);
-		fClassToTestButton.setText(WizardMessages.getString("NewTestClassWizPage.class_to_test.browse")); //$NON-NLS-1$
-		fClassToTestButton.setEnabled(true);
-		fClassToTestButton.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-				classToTestButtonPressed();
-			}
-			public void widgetSelected(SelectionEvent e) {
-				classToTestButtonPressed();
-			}
-		});	
-		gd= new GridData();
-		gd.horizontalAlignment= GridData.FILL;
-		gd.grabExcessHorizontalSpace= false;
-		gd.horizontalSpan= 1;
-		gd.heightHint = SWTUtil.getButtonHeigthHint(fClassToTestButton);
-		gd.widthHint = SWTUtil.getButtonWidthHint(fClassToTestButton);		
-		fClassToTestButton.setLayoutData(gd);
-
-	}
-
-	private void classToTestButtonPressed() {
-		IType type= chooseClassToTestType();
-		if (type != null) {
-			fClassToTestText.setText(JavaModelUtil.getFullyQualifiedName(type));
-			handleFieldChanged(CLASS_TO_TEST);
-		}
-	}
-
-	private IType chooseClassToTestType() {
-		IPackageFragmentRoot root= getPackageFragmentRoot();
-		if (root == null) 
-			return null;
-
-		IJavaElement[] elements= new IJavaElement[] { root.getJavaProject() };
-		IJavaSearchScope scope= SearchEngine.createJavaSearchScope(elements);
-		
-		IType type= null;
-		try {
-			SelectionDialog dialog= JavaUI.createTypeDialog(getShell(), getWizard().getContainer(), scope, IJavaElementSearchConstants.CONSIDER_CLASSES, false, null);
-			dialog.setTitle(WizardMessages.getString("NewTestClassWizPage.class_to_test.dialog.title")); //$NON-NLS-1$
-			dialog.setMessage(WizardMessages.getString("NewTestClassWizPage.class_to_test.dialog.message")); //$NON-NLS-1$
-			dialog.open();
-			if (dialog.getReturnCode() != SelectionDialog.OK)
-				return type;
-			else {
-				Object[] resultArray= dialog.getResult();
-				if (resultArray != null && resultArray.length > 0)
-					type= (IType) resultArray[0];
-			}
-		} catch (JavaModelException e) {
-			JUnitPlugin.log(e);
-		}
-		return type;
-	}
-
-	protected IStatus classToTestClassChanged() {
-		fClassToTestButton.setEnabled(getPackageFragmentRoot() != null);
-		IStatus status= validateClassToTest();
-		return status;
-	}
-
-	/**
-	 * Returns the content of the class to test text field.
-	 */
-	public String getClassToTestText() {
-		return fClassToTestText.getText();
-	}
-	
-	/**
-	 * Returns the class to be tested.
-	 */
-	public IType getClassToTest() {
-		return fClassToTest;
-	}
-
-	/**
-	 * Sets the name of the class to test.
-	 */		
-	public void setClassToTest(String name) {
-		fClassToTestText.setText(name);
-	}	
-
-	/**
-	 * @see NewTypeWizardPage#createTypeMembers
-	 */
-	protected void createTypeMembers(IType type, ImportsManager imports, IProgressMonitor monitor) throws CoreException {
-		fIndexOfFirstTestMethod= 0;
-
-		createConstructor(type, imports); 
-
-		if (fMethodStubsButtons.isSelected(0)) 
-			createMain(type);
-		
-		if (fMethodStubsButtons.isSelected(2)) {
-			createSetUp(type, imports);
-		}
-		
-		if (fMethodStubsButtons.isSelected(3)) {
-			createTearDown(type, imports);
-		}
-		
-		if (isNextPageValid()) {
-			createTestMethodStubs(type);
-		}
-	}
-
-	protected void createConstructor(IType type, ImportsManager imports) throws JavaModelException {
-		ITypeHierarchy typeHierarchy= null;
-		IType[] superTypes= null;
-		String constr= ""; //$NON-NLS-1$
-		IMethod methodTemplate= null;
-		if (type.exists()) {
-			typeHierarchy= type.newSupertypeHierarchy(null);
-			superTypes= typeHierarchy.getAllSuperclasses(type);
-			for (int i= 0; i < superTypes.length; i++) {
-				if (superTypes[i].exists()) {
-					IMethod constrMethod= superTypes[i].getMethod(superTypes[i].getElementName(), new String[] {"Ljava.lang.String;"}); //$NON-NLS-1$
-					if (constrMethod.exists() && constrMethod.isConstructor()) {
-						methodTemplate= constrMethod;
-						break;
-					}
-				}
-			}
-		}
-		CodeGenerationSettings settings= JavaPreferencesSettings.getCodeGenerationSettings();
-		if (methodTemplate != null) {
-			GenStubSettings genStubSettings= new GenStubSettings(settings);
-			genStubSettings.fCallSuper= true;				
-			genStubSettings.fMethodOverwrites= true;
-			constr= JUnitStubUtility.genStub(getTypeName(), methodTemplate, genStubSettings, imports);
-		} else {
-			constr += "public "+getTypeName()+"(String name) {\nsuper(name);\n}\n\n"; //$NON-NLS-1$ //$NON-NLS-2$
-		}
-		type.createMethod(constr, null, true, null);	
-		fIndexOfFirstTestMethod++;
-	}
-
-	protected void createMain(IType type) throws JavaModelException {
-		type.createMethod(fMethodStubsButtons.getMainMethod(getTypeName()), null, false, null);	
-		fIndexOfFirstTestMethod++;		
-	}
-
-	protected void createSetUp(IType type, ImportsManager imports) throws JavaModelException {
-		ITypeHierarchy typeHierarchy= null;
-		IType[] superTypes= null;
-		String setUp= ""; //$NON-NLS-1$
-		IMethod methodTemplate= null;
-		if (type.exists()) {
-			typeHierarchy= type.newSupertypeHierarchy(null);
-			superTypes= typeHierarchy.getAllSuperclasses(type);
-			for (int i= 0; i < superTypes.length; i++) {
-				if (superTypes[i].exists()) {
-					IMethod testMethod= superTypes[i].getMethod(SETUP, new String[] {});
-					if (testMethod.exists()) {
-						methodTemplate= testMethod;
-						break;
-					}
-				}
-			}
-		}
-		CodeGenerationSettings settings= JavaPreferencesSettings.getCodeGenerationSettings();
-		if (methodTemplate != null) {
-			GenStubSettings genStubSettings= new GenStubSettings(settings);
-			genStubSettings.fCallSuper= true;				
-			genStubSettings.fMethodOverwrites= true;
-			setUp= JUnitStubUtility.genStub(getTypeName(), methodTemplate, genStubSettings, imports);
-		} else {
-			if (settings.createComments)
-				setUp= "/**\n * Sets up the fixture, for example, open a network connection.\n * This method is called before a test is executed.\n * @throws Exception\n */\n"; //$NON-NLS-1$
-			setUp+= "protected void "+SETUP+"() throws Exception {}\n\n"; //$NON-NLS-1$ //$NON-NLS-2$
-		}
-		type.createMethod(setUp, null, false, null);	
-		fIndexOfFirstTestMethod++;
-	}
-	
-	protected void createTearDown(IType type, ImportsManager imports) throws JavaModelException {
-		ITypeHierarchy typeHierarchy= null;
-		IType[] superTypes= null;
-		String tearDown= ""; //$NON-NLS-1$
-		IMethod methodTemplate= null;
-		if (type.exists()) {
-			if (typeHierarchy == null) {
-				typeHierarchy= type.newSupertypeHierarchy(null);
-				superTypes= typeHierarchy.getAllSuperclasses(type);
-			}
-			for (int i= 0; i < superTypes.length; i++) {
-				if (superTypes[i].exists()) {
-					IMethod testM= superTypes[i].getMethod(TEARDOWN, new String[] {});
-					if (testM.exists()) {
-						methodTemplate= testM;
-						break;
-					}
-				}
-			}
-		}
-		CodeGenerationSettings settings= JavaPreferencesSettings.getCodeGenerationSettings();
-		if (methodTemplate != null) {
-			GenStubSettings genStubSettings= new GenStubSettings(settings);				
-			genStubSettings.fCallSuper= true;
-			genStubSettings.fMethodOverwrites= true;
-			tearDown= JUnitStubUtility.genStub(getTypeName(), methodTemplate, genStubSettings, imports);
-			type.createMethod(tearDown, null, false, null);	
-			fIndexOfFirstTestMethod++;
-		}				
-	}
-
-	protected void createTestMethodStubs(IType type) throws JavaModelException {
-		IMethod[] methods= fPage2.getCheckedMethods();
-		if (methods.length > 0) {
-			/* find overloaded methods */
-			ArrayList allMethods= new ArrayList();
-			IMethod[] allMethodsArray= fPage2.getAllMethods();
-			for (int i= 0; i < allMethodsArray.length; i++) {
-				allMethods.add(allMethodsArray[i]);
-			}
-			ArrayList overloadedMethods= new ArrayList();
-			for (int i= 0; i < allMethods.size(); i++) {
-				IMethod current= (IMethod) allMethods.get(i);
-				String currentName= current.getElementName();
-				boolean currentAdded= false;
-				for (ListIterator iter= allMethods.listIterator(i+1); iter.hasNext(); ) {
-					IMethod iterMethod= (IMethod) iter.next();
-					if (iterMethod.getElementName().equals(currentName)) {
-						//method is overloaded
-						if (!currentAdded) {
-							overloadedMethods.add(current);
-							currentAdded= true;
-						}
-						overloadedMethods.add(iterMethod);
-						iter.remove();
-					}
-				}
-			}
-			
-			/* used when for example both sum and Sum methods are present. Then
-			 * sum -> testSum
-			 * Sum -> testSum1
-			 */
-			ArrayList newMethodsNames= new ArrayList();				
-			for (int i = 0; i < methods.length; i++) {
-				String elementName= methods[i].getElementName();
-				StringBuffer methodName= new StringBuffer(NewTestCaseCreationWizardPage2.PREFIX+Character.toUpperCase(elementName.charAt(0))+elementName.substring(1));
-				StringBuffer newMethod= new StringBuffer();
-	
-				if (overloadedMethods.contains(methods[i])) {
-					IMethod method= methods[i];
-					String returnType= Signature.toString(method.getReturnType());
-					String body= WizardMessages.getFormattedString("NewTestClassWizPage.comment.class_to_test", new String[]{returnType, method.getElementName()}); //$NON-NLS-1$
-					newMethod.append("/*\n * "+body+"(");  //$NON-NLS-1$ //$NON-NLS-2$
-					String[] paramTypes= method.getParameterTypes();
-					if (paramTypes.length > 0) {
-						if (paramTypes.length > 1) {
-							for (int j= 0; j < paramTypes.length-1; j++) {
-								newMethod.append(Signature.toString(paramTypes[j])+", "); //$NON-NLS-1$
-							}
-						}
-						newMethod.append(Signature.toString(paramTypes[paramTypes.length-1]));
-					}
-					newMethod.append(")\n */\n"); //$NON-NLS-1$
-					String[] params= methods[i].getParameterTypes();
-					for (int j= 0; j < params.length; j++) {
-						String param= params[j];
-						int start= 0, end= param.length();
-						//using JDK 1.4:
-						// (new Character(Signature.C_ARRAY)).toString() --> Character.toString(Signature.C_ARRAY)
-						if (param.startsWith( (new Character(Signature.C_ARRAY)).toString() ))
-							start= 1;
-						
-						if (param.endsWith((new Character(Signature.C_NAME_END)).toString() ))
-							end--;
-						
-						if (param.startsWith((new Character(Signature.C_UNRESOLVED)).toString() ,start)
-							|| param.startsWith((new Character(Signature.C_RESOLVED)).toString() ,start))
-							start++;
-						String paramName= param.substring(start, end);
-						/* if parameter is qualified name, extract simple name */
-						if (paramName.indexOf('.') != -1) {
-							start += paramName.lastIndexOf('.')+1;
-						}
-						methodName.append(param.substring(start, end));
-						if (param.startsWith( (new Character(Signature.C_ARRAY)).toString() ))
-							methodName.append("Array"); //$NON-NLS-1$
-					}
-				}
-				/* Should I for examples have methods
-				 * 	void foo(java.lang.StringBuffer sb) {}
-				 *  void foo(mypackage1.StringBuffer sb) {}
-				 *  void foo(mypackage2.StringBuffer sb) {}
-				 * I will get in the test class:
-				 *  testFooStringBuffer()
-				 *  testFooStringBuffer1()
-				 *  testFooStringBuffer2()
-				 */
-				if (newMethodsNames.contains(methodName.toString())) {
-					int suffix= 1;
-					while (newMethodsNames.contains(methodName.toString() + Integer.toString(suffix)))
-						suffix++;
-					methodName.append(Integer.toString(suffix));
-				}
-				newMethodsNames.add(new String(methodName));
-				newMethod.append("public void "+methodName.toString()+"() {}\n\n"); //$NON-NLS-1$ //$NON-NLS-2$
-				type.createMethod(newMethod.toString(), null, false, null);	
-			}
-		}
-	}
-
-	/**
-	 * @see DialogPage#setVisible(boolean)
-	 */
-	public void setVisible(boolean visible) {
-		super.setVisible(visible);
-
-		if (visible && fFirstTime) {
-			handleFieldChanged(CLASS_TO_TEST); //creates error message when wizard is opened if TestCase already exists
-			if (getClassToTestText().equals("")) //$NON-NLS-1$
-				setPageComplete(false);
-			fFirstTime= false;
-		}
-		
-		if (visible) setFocus();
-	}
-
-	private void validateJUnitOnBuildPath() {
-		IPackageFragmentRoot root= getPackageFragmentRoot();
-		if (root == null)
-			return;
-		IJavaProject jp= root.getJavaProject();
-		
-		try {
-			if (jp.findType(JUnitPlugin.TEST_SUPERCLASS_NAME) != null)
-				return;
-		} catch (JavaModelException e) {
-		}
-		JUnitStatus status= new JUnitStatus();				
-		status.setError(WizardMessages.getString("NewTestClassWizPage.error.junitNotOnbuildpath")); //$NON-NLS-1$
-		fContainerStatus= status;
-	}
-	
-	/**
-	 * Returns the index of the first method that is a test method, i.e. excluding main, setUp() and tearDown().
-	 * If none of the aforementioned method stubs is created, then 0 is returned. As such method stubs are created,
-	 * this counter is incremented.
-	 */
-	public int getIndexOfFirstMethod() {
-		return fIndexOfFirstTestMethod;
-	}
-
-	/**
-	 * @see IDialogPage#createControl(Composite)
-	 */
-	public void createType(IProgressMonitor monitor) throws CoreException, InterruptedException {		
-		super.createType(monitor);
-
-		if (fPage2.getCreateTasksButtonSelection()) {
-			createTaskMarkers();
-		}
-	}	
-
-	private void createTaskMarkers() throws CoreException {
-		IType createdType= getCreatedType();
-		fTestMethods= createdType.getMethods();
-		ICompilationUnit cu= createdType.getCompilationUnit();
-		cu.save(null, false);
-		IResource res= createdType.getCompilationUnit().getUnderlyingResource();
-		for (int i= getIndexOfFirstMethod(); i < fTestMethods.length; i++) {
-			IMethod method= fTestMethods[i];
-			IMarker marker= res.createMarker("org.eclipse.jdt.junit.junit_task"); //$NON-NLS-1$
-			HashMap attributes= new HashMap(10);
-			attributes.put(IMarker.PRIORITY, new Integer(IMarker.PRIORITY_NORMAL));
-			attributes.put(IMarker.MESSAGE, WizardMessages.getFormattedString("NewTestClassWizPage.marker.message",method.getElementName())); //$NON-NLS-1$
-			ISourceRange markerRange= method.getSourceRange();
-			attributes.put(IMarker.CHAR_START, new Integer(markerRange.getOffset()));
-			attributes.put(IMarker.CHAR_END, new Integer(markerRange.getOffset()+markerRange.getLength()));
-			marker.setAttributes(attributes);
-		}
-	}
-	
-	private void validateSuperClass() {
-		fMethodStubsButtons.setEnabled(2, true);//enable setUp() checkbox
-		fMethodStubsButtons.setEnabled(3, true);//enable tearDown() checkbox
-		String superClassName= getSuperClass();
-		
-		if (superClassName != null && !superClassName.equals("") && getPackageFragmentRoot() != null) { //$NON-NLS-1$
-			try {
-				IType type= resolveClassNameToType(getPackageFragmentRoot().getJavaProject(), getPackageFragment(), superClassName);
-				JUnitStatus status = new JUnitStatus();				
-				if (type == null) {
-					status.setError(WizardMessages.getString("NewTestClassWizPage.error.superclass.not_exist")); //$NON-NLS-1$
-					fSuperClassStatus= status;
-				} else {
-					if (type.isInterface()) {
-						status.setError(WizardMessages.getString("NewTestClassWizPage.error.superclass.is_interface")); //$NON-NLS-1$
-						fSuperClassStatus= status;
-					}
-					if (!TestSearchEngine.isTestImplementor(type)) {
-						status.setError(WizardMessages.getFormattedString("NewTestClassWizPage.error.superclass.not_implementing_test_interface", JUnitPlugin.TEST_INTERFACE_NAME)); //$NON-NLS-1$
-						fSuperClassStatus= status;
-					} else {
-						IMethod setupMethod= type.getMethod(SETUP, new String[] {});
-						IMethod teardownMethod= type.getMethod(TEARDOWN, new String[] {});
-						if (setupMethod.exists())
-							fMethodStubsButtons.setEnabled(2, !Flags.isFinal(setupMethod.getFlags()));
-						if (teardownMethod.exists())
-							fMethodStubsButtons.setEnabled(3, !Flags.isFinal(teardownMethod.getFlags()));
-					}
-				}
-			} catch (JavaModelException e) {
-				JUnitPlugin.log(e);
-			}
-		}
-	}
-	
-	protected void createTestClassControls(Composite composite, int nColumns) {
-		fTestClassLabel= new Label(composite, SWT.LEFT | SWT.WRAP);
-		fTestClassLabel.setFont(composite.getFont());
-		fTestClassLabel.setText(WizardMessages.getString("NewTestClassWizPage.testcase.label")); //$NON-NLS-1$
-		GridData gd= new GridData();
-		gd.horizontalSpan= 1;
-		fTestClassLabel.setLayoutData(gd);
-
-		fTestClassText= new Text(composite, SWT.SINGLE | SWT.BORDER);
-		fTestClassText.setEnabled(true);
-		fTestClassText.setFont(composite.getFont());
-		fTestClassText.addModifyListener(new ModifyListener() {
-			public void modifyText(ModifyEvent e) {
-				handleFieldChanged(TEST_CLASS);
-			}
-		});
-		gd= new GridData();
-		gd.horizontalAlignment= GridData.FILL;
-		gd.grabExcessHorizontalSpace= true;
-		gd.horizontalSpan= nColumns - 2;
-		fTestClassText.setLayoutData(gd);
-		
-		Label space= new Label(composite, SWT.LEFT);
-		space.setText(" "); //$NON-NLS-1$
-		gd= new GridData();
-		gd.horizontalSpan= 1;
-		space.setLayoutData(gd);
-	}
-
-	/**
-	 * Gets the type name.
-	 */
-	public String getTypeName() {
-		return (fTestClassText==null)?fTestClassTextInitialValue:fTestClassText.getText();
-	}
-	
-	/**
-	 * Sets the type name.
-	 */	
-	public void setTypeName(String name, boolean canBeModified) {
-		if (fTestClassText == null) {
-			fTestClassTextInitialValue= name;
-		} 
-		else {
-			fTestClassText.setText(name);
-			fTestClassText.setEnabled(canBeModified);
-		}
-	}	
-
-	/**
-	 * Called when the type name has changed.
-	 * The method validates the type name and returns the status of the validation.
-	 * Can be extended to add more validation
-	 */
-	protected IStatus testClassChanged() {
-		JUnitStatus status= new JUnitStatus();
-		String typeName= getTypeName();
-		// must not be empty
-		if (typeName.length() == 0) {
-			status.setError(WizardMessages.getString("NewTestClassWizPage.error.testcase.name_empty")); //$NON-NLS-1$
-			return status;
-		}
-		if (typeName.indexOf('.') != -1) {
-			status.setError(WizardMessages.getString("NewTestClassWizPage.error.testcase.name_qualified")); //$NON-NLS-1$
-			return status;
-		}
-		IStatus val= JavaConventions.validateJavaTypeName(typeName);
-
-		if (val.getSeverity() == IStatus.ERROR) {
-			status.setError(WizardMessages.getString("NewTestClassWizPage.error.testcase.name_not_valid")+val.getMessage()); //$NON-NLS-1$
-			return status;
-		} else if (val.getSeverity() == IStatus.WARNING) {
-			status.setWarning(WizardMessages.getString("NewTestClassWizPage.error.testcase.name_discouraged")+val.getMessage()); //$NON-NLS-1$
-			// continue checking
-		}		
-
-		IPackageFragment pack= getPackageFragment();
-		if (pack != null) {
-			ICompilationUnit cu= pack.getCompilationUnit(typeName + ".java"); //$NON-NLS-1$
-			if (cu.exists()) {
-					status.setError(WizardMessages.getString("NewTestClassWizPage.error.testcase.already_exists")); //$NON-NLS-1$
-				return status;
-			}
-		}
-		return status;
-	}
-
-	
-	/**
-	 * @see IWizardPage#canFlipToNextPage
-	 */
-	public boolean canFlipToNextPage() {
-		return isPageComplete() && getNextPage() != null && isNextPageValid();
-	}
-
-	protected boolean isNextPageValid() {
-		return !getClassToTestText().equals(""); //$NON-NLS-1$
-	}
-
-	protected JUnitStatus validateClassToTest() {
-		IPackageFragmentRoot root= getPackageFragmentRoot();
-		IPackageFragment pack= getPackageFragment();
-		String classToTestName= fClassToTestText.getText();
-		JUnitStatus status= new JUnitStatus();
-		
-		fClassToTest= null;
-		if (classToTestName.length() == 0) {
-			return status;
-		}
-		IStatus val= JavaConventions.validateJavaTypeName(classToTestName);
-//		if (!val.isOK()) {
-		if (val.getSeverity() == IStatus.ERROR) {
-			status.setError(WizardMessages.getString("NewTestClassWizPage.error.class_to_test.not_valid")); //$NON-NLS-1$
-			return status;
-		}
-		
-		if (root != null) {
-			try {		
-				IType type= NewTestCaseCreationWizardPage.resolveClassNameToType(root.getJavaProject(), pack, classToTestName);
-				//IType type= wizpage.resolveClassToTestName();
-				if (type == null) {
-					//status.setWarning("Warning: "+typeLabel+" does not exist in current project.");
-					status.setError(WizardMessages.getString("NewTestClassWizPage.error.class_to_test.not_exist")); //$NON-NLS-1$
-					return status;
-				} else {
-					if (type.isInterface()) {
-						status.setWarning(WizardMessages.getFormattedString("NewTestClassWizPage.warning.class_to_test.is_interface",classToTestName)); //$NON-NLS-1$
-					}
-					if (pack != null && !JavaModelUtil.isVisible(type, pack)) {
-						status.setWarning(WizardMessages.getFormattedString("NewTestClassWizPage.warning.class_to_test.not_visible", new String[] {(type.isInterface())?WizardMessages.getString("Interface"):WizardMessages.getString("Class") , classToTestName})); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-					}
-				}
-				fClassToTest= type;
-			} catch (JavaModelException e) {
-				status.setError(WizardMessages.getString("NewTestClassWizPage.error.class_to_test.not_valid")); //$NON-NLS-1$
-			}							
-		} else {
-			status.setError(""); //$NON-NLS-1$
-		}
-		return status;
-	}
-
-	static public IType resolveClassNameToType(IJavaProject jproject, IPackageFragment pack, String classToTestName) throws JavaModelException {
-		IType type= null;
-		if (type == null && pack != null) {
-			String packName= pack.getElementName();
-			// search in own package
-			if (!pack.isDefaultPackage()) {
-				type= jproject.findType(packName, classToTestName);
-			}
-			// search in java.lang
-			if (type == null && !"java.lang".equals(packName)) { //$NON-NLS-1$
-				type= jproject.findType("java.lang", classToTestName); //$NON-NLS-1$
-			}
-		}
-		// search fully qualified
-		if (type == null) {
-			type= jproject.findType(classToTestName);
-		}
-		return type;
-	}
-
-	/**
-	 * Sets the focus on the type name.
-	 */		
-	protected void setFocus() {
-		fTestClassText.setFocus();
-		fTestClassText.setSelection(fTestClassText.getText().length(), fTestClassText.getText().length());
-	}
-	
-	/**
-	 *	Use the dialog store to restore widget values to the values that they held
-	 *	last time this wizard was used to completion
-	 */
-	private void restoreWidgetValues() {
-		
-		IDialogSettings settings= getDialogSettings();
-		if (settings != null) {
-			boolean generateMain= settings.getBoolean(STORE_GENERATE_MAIN);
-			fMethodStubsButtons.setSelection(0, generateMain);
-			fMethodStubsButtons.setEnabled(1, generateMain);
-			fMethodStubsButtons.setSelection(1,settings.getBoolean(STORE_USE_TESTRUNNER));
-			try {
-				fMethodStubsButtons.setComboSelection(settings.getInt(STORE_TESTRUNNER_TYPE));
-			} catch(NumberFormatException e) {}
-		}		
-	}	
-
-	/**
-	 * 	Since Finish was pressed, write widget values to the dialog store so that they
-	 *	will persist into the next invocation of this wizard page
-	 */
-	void saveWidgetValues() {
-		IDialogSettings settings= getDialogSettings();
-		if (settings != null) {
-			settings.put(STORE_GENERATE_MAIN, fMethodStubsButtons.isSelected(0));
-			settings.put(STORE_USE_TESTRUNNER, fMethodStubsButtons.isSelected(1));
-			settings.put(STORE_TESTRUNNER_TYPE, fMethodStubsButtons.getComboSelection());
-		}
-	}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/NewTestCaseCreationWizardPage2.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/NewTestCaseCreationWizardPage2.java
deleted file mode 100644
index bc361d3..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/NewTestCaseCreationWizardPage2.java
+++ /dev/null
@@ -1,403 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2002.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.wizards;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Vector;
-
-import org.eclipse.jdt.core.Flags;
-import org.eclipse.jdt.core.IMethod;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.ITypeHierarchy;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.internal.junit.ui.IJUnitHelpContextIds;
-import org.eclipse.jdt.internal.junit.ui.JUnitPlugin;
-import org.eclipse.jdt.ui.JavaElementLabelProvider;
-import org.eclipse.jface.dialogs.IDialogSettings;
-import org.eclipse.jface.viewers.CheckStateChangedEvent;
-import org.eclipse.jface.viewers.ICheckStateListener;
-import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerFilter;
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.ui.help.WorkbenchHelp;
-import org.eclipse.ui.internal.dialogs.ContainerCheckedTreeViewer;
-
-/**
- * Wizard page to select the methods from a class under test.
- */
-public class NewTestCaseCreationWizardPage2 extends WizardPage {
-
-	private final static String PAGE_NAME= "NewTestCaseCreationWizardPage2"; //$NON-NLS-1$
-	private final static String STORE_USE_TASKMARKER= PAGE_NAME + ".USE_TASKMARKER"; //$NON-NLS-1$
-
-	public final static String PREFIX= "test"; //$NON-NLS-1$
-
-	private NewTestCaseCreationWizardPage fFirstPage;	
-	private IType fClassToTest;
-
-	private Button fCreateTasksButton;
-	private ContainerCheckedTreeViewer fMethodsTree;
-	private Button fSelectAllButton;
-	private Button fDeselectAllButton;
-	private Label fSelectedMethodsLabel;
- 
-	/**
-	 * Constructor for NewTestCaseCreationWizardPage2.
-	 */
-	protected NewTestCaseCreationWizardPage2(NewTestCaseCreationWizardPage firstPage) {
-		super(PAGE_NAME);
-		fFirstPage= firstPage;
-		setTitle(WizardMessages.getString("NewTestClassWizPage2.title")); //$NON-NLS-1$
-		setDescription(WizardMessages.getString("NewTestClassWizPage2.description")); //$NON-NLS-1$
-	}
-
-	/**
-	 * @see IDialogPage#createControl(Composite)
-	 */
-	public void createControl(Composite parent) {
-		Composite container= new Composite(parent, SWT.NONE);
-		GridLayout layout= new GridLayout();
-		layout.numColumns= 2;
-		container.setLayout(layout);
-
-		createMethodsTreeControls(container);
-		createSpacer(container);
-		createTasksControls(container);
-		setControl(container);
-		restoreWidgetValues();
-		WorkbenchHelp.setHelp(container, IJUnitHelpContextIds.NEW_TESTCASE_WIZARD_PAGE2);	
-	}
-
-	protected void createTasksControls(Composite container) {
-		GridLayout layout;
-		GridData gd;
-		Composite prefixContainer= new Composite(container, SWT.NONE);
-		gd= new GridData();
-		gd.horizontalAlignment = GridData.FILL;
-		gd.horizontalSpan = 2;
-		prefixContainer.setLayoutData(gd);
-		
-		layout = new GridLayout();
-		layout.numColumns = 2;
-		layout.marginWidth = 0;
-		layout.marginHeight = 0;
-		prefixContainer.setLayout(layout);
-		
-		fCreateTasksButton= new Button(prefixContainer, SWT.CHECK | SWT.LEFT);
-		fCreateTasksButton.setText(WizardMessages.getString("NewTestClassWizPage2.create_tasks.text")); //$NON-NLS-1$
-		fCreateTasksButton.setEnabled(true);
-		fCreateTasksButton.setSelection(true);
-		gd= new GridData();
-		gd.horizontalAlignment= GridData.FILL;
-		gd.horizontalSpan= 2;
-		fCreateTasksButton.setLayoutData(gd);
-	}
-
-	protected void createMethodsTreeControls(Composite container) {
-		Label label= new Label(container, SWT.LEFT | SWT.WRAP);
-		label.setFont(container.getFont());
-		label.setText(WizardMessages.getString("NewTestClassWizPage2.methods_tree.label")); //$NON-NLS-1$
-		GridData gd = new GridData();
-		gd.horizontalSpan = 2;
-		label.setLayoutData(gd);
-
-		fMethodsTree= new ContainerCheckedTreeViewer(container, SWT.BORDER);
-		gd= new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL);
-		gd.heightHint= 180;
-		fMethodsTree.getTree().setLayoutData(gd);
-
-		fMethodsTree.setLabelProvider(new JavaElementLabelProvider());
-		fMethodsTree.setAutoExpandLevel(2);			
-		fMethodsTree.addCheckStateListener(new ICheckStateListener() {
-			public void checkStateChanged(CheckStateChangedEvent event) {
-				updateSelectedMethodsLabel();
-			}	
-		});
-		fMethodsTree.addFilter(new ViewerFilter() {
-			public boolean select(Viewer viewer, Object parentElement, Object element) {
-				if (element instanceof IMethod) {
-					IMethod method = (IMethod) element;
-					return !method.getElementName().equals("<clinit>"); //$NON-NLS-1$
-				}
-				return true;
-			}
-		});
-
-		Composite buttonContainer= new Composite(container, SWT.NONE);
-		gd= new GridData(GridData.FILL_VERTICAL);
-		buttonContainer.setLayoutData(gd);
-		GridLayout buttonLayout= new GridLayout();
-		buttonLayout.marginWidth= 0;
-		buttonLayout.marginHeight= 0;
-		buttonContainer.setLayout(buttonLayout);
-
-		fSelectAllButton= new Button(buttonContainer, SWT.PUSH);
-		fSelectAllButton.setText(WizardMessages.getString("NewTestClassWizPage2.selectAll")); //$NON-NLS-1$
-		gd= new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
-		fSelectAllButton.setLayoutData(gd);
-		fSelectAllButton.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				fMethodsTree.setCheckedElements((Object[]) fMethodsTree.getInput());
-				updateSelectedMethodsLabel();
-			}
-		});
-
-		fDeselectAllButton= new Button(buttonContainer, SWT.PUSH);
-		fDeselectAllButton.setText(WizardMessages.getString("NewTestClassWizPage2.deselectAll")); //$NON-NLS-1$
-		gd= new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
-		fDeselectAllButton.setLayoutData(gd);
-		fDeselectAllButton.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				fMethodsTree.setCheckedElements(new Object[0]);
-				updateSelectedMethodsLabel();
-			}
-		});
-
-		/* No of selected methods label */
-		fSelectedMethodsLabel= new Label(container, SWT.LEFT);
-		fSelectedMethodsLabel.setFont(container.getFont());
-		updateSelectedMethodsLabel();
-		gd= new GridData(GridData.FILL_HORIZONTAL);
-		gd.horizontalSpan= 1;
-		fSelectedMethodsLabel.setLayoutData(gd);
-		
-		Label emptyLabel= new Label(container, SWT.LEFT);
-		gd= new GridData();
-		gd.horizontalSpan= 1;
-		emptyLabel.setLayoutData(gd);
-	}
-
-	protected void createSpacer(Composite container) {
-		Label spacer= new Label(container, SWT.NONE);
-		GridData data= new GridData();
-		data.horizontalSpan= 2;
-		data.horizontalAlignment= GridData.FILL;
-		data.verticalAlignment= GridData.BEGINNING;
-		data.heightHint= 4;
-		spacer.setLayoutData(data);
-	}
-
-	/**
-	 * @see DialogPage#setVisible(boolean)
-	 */
-	public void setVisible(boolean visible) {
-		super.setVisible(visible);
-		if (visible) {
-			fClassToTest= fFirstPage.getClassToTest();
-			IType currType= fClassToTest;
-			ArrayList types= null;
-			try {
-				ITypeHierarchy hierarchy= currType.newSupertypeHierarchy(null);
-				IType[] superTypes;
-				if (currType.isClass())
-					superTypes= hierarchy.getAllSuperclasses(currType);
-				else if (currType.isInterface())
-					superTypes= hierarchy.getAllSuperInterfaces(currType);
-				else
-					superTypes= new IType[0];
-				types= new ArrayList(superTypes.length+1);
-				types.add(currType);
-				types.addAll(Arrays.asList(superTypes));
-			} catch(JavaModelException e) {
-				JUnitPlugin.log(e);
-			}
-			fMethodsTree.setContentProvider(new MethodsTreeContentProvider(types.toArray()));
-			if (types == null)
-				types= new ArrayList();
-			fMethodsTree.setInput(types.toArray());
-			fMethodsTree.setSelection(new StructuredSelection(currType), true);
-			updateSelectedMethodsLabel();
-			setFocus();
-		}
-	}
-
-	/**
-	 * Returns all checked methods in the Methods tree.
-	 */
-	public IMethod[] getCheckedMethods() {
-		Object[] checkedObjects= fMethodsTree.getCheckedElements();
-		int methodCount= 0;
-		for (int i = 0; i < checkedObjects.length; i++) {
-			if (checkedObjects[i] instanceof IMethod)
-				methodCount++;
-		}
-		IMethod[] checkedMethods= new IMethod[methodCount];
-		int j= 0;
-		for (int i = 0; i < checkedObjects.length; i++) {
-			if (checkedObjects[i] instanceof IMethod) {
-				checkedMethods[j]= (IMethod)checkedObjects[i];
-				j++;
-			}
-		}
-		return checkedMethods;
-	}
-	
-	private static class MethodsTreeContentProvider implements ITreeContentProvider {
-		private Object[] fTypes;
-		private IMethod[] fMethods;
-		private final Object[] fEmpty= new Object[0];
-
-		public MethodsTreeContentProvider(Object[] types) {
-			fTypes= types;
-			Vector methods= new Vector();
-			for (int i = types.length-1; i > -1; i--) {
-				Object object = types[i];
-				if (object instanceof IType) {
-					IType type = (IType) object;
-					try {
-						IMethod[] currMethods= type.getMethods();
-						for_currMethods:
-						for (int j = 0; j < currMethods.length; j++) {
-							IMethod currMethod = currMethods[j];
-							int flags= currMethod.getFlags();
-							if (!Flags.isPrivate(flags)) {
-								for (int k = 0; k < methods.size(); k++) {
-									IMethod m= ((IMethod)methods.get(k));
-									if (m.getElementName().equals(currMethod.getElementName())
-										&& m.getSignature().equals(currMethod.getSignature())) {
-										methods.set(k,currMethod);
-										continue for_currMethods;
-									}
-								}
-								methods.add(currMethod);
-							}
-						}
-					} catch (JavaModelException e) {
-						JUnitPlugin.log(e);
-					}
-				}
-			}
-			fMethods= new IMethod[methods.size()];
-			methods.copyInto(fMethods);
-		}
-		
-		/*
-		 * @see ITreeContentProvider#getChildren(Object)
-		 */
-		public Object[] getChildren(Object parentElement) {
-			if (parentElement instanceof IType) {
-				IType parentType= (IType)parentElement;
-				ArrayList result= new ArrayList(fMethods.length);
-				for (int i= 0; i < fMethods.length; i++) {
-					if (fMethods[i].getDeclaringType().equals(parentType)) {
-						result.add(fMethods[i]);
-					}
-				}
-				return result.toArray();
-			}
-			return fEmpty;
-		}
-
-		/*
-		 * @see ITreeContentProvider#getParent(Object)
-		 */
-		public Object getParent(Object element) {
-			if (element instanceof IMethod) 
-				return ((IMethod)element).getDeclaringType();
-			return null;
-		}
-
-		/*
-		 * @see ITreeContentProvider#hasChildren(Object)
-		 */
-		public boolean hasChildren(Object element) {
-			return getChildren(element).length > 0;
-		}
-
-		/*
-		 * @see IStructuredContentProvider#getElements(Object)
-		 */
-		public Object[] getElements(Object inputElement) {
-			return fTypes;
-		}
-
-		/*
-		 * @see IContentProvider#dispose()
-		 */
-		public void dispose() {
-		}
-
-		/*
-		 * @see IContentProvider#inputChanged(Viewer, Object, Object)
-		 */
-		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-		}
-		
-		public IMethod[] getAllMethods() {
-			return fMethods;
-		}
-	}
-
-	/**
-	 * Returns true iff the checkbox for creating tasks is checked.
-	 */
-	public boolean getCreateTasksButtonSelection() {
-		return fCreateTasksButton.getSelection();
-	}
-	
-	private void updateSelectedMethodsLabel() {
-		Object[] checked= fMethodsTree.getCheckedElements();
-		int checkedMethodCount= 0;
-		for (int i= 0; i < checked.length; i++) {
-			if (checked[i] instanceof IMethod)
-				checkedMethodCount++;
-		}
-		String label= ""; //$NON-NLS-1$
-		if (checkedMethodCount == 1)
-			label= WizardMessages.getFormattedString("NewTestClassWizPage2.selected_methods.label_one", new Integer(checkedMethodCount)); //$NON-NLS-1$
-		else
-			label= WizardMessages.getFormattedString("NewTestClassWizPage2.selected_methods.label_many", new Integer(checkedMethodCount)); //$NON-NLS-1$
-		fSelectedMethodsLabel.setText(label);
-	}
-	
-	/**
-	 * Returns all the methods in the Methods tree.
-	 */
-	public IMethod[] getAllMethods() {
-		return ((MethodsTreeContentProvider)fMethodsTree.getContentProvider()).getAllMethods();
-	}
-
-	/**
-	 * Sets the focus on the type name.
-	 */		
-	protected void setFocus() {
-		fMethodsTree.getControl().setFocus();
-	}
-		
-	/**
-	 *	Use the dialog store to restore widget values to the values that they held
-	 *	last time this wizard was used to completion
-	 */
-	private void restoreWidgetValues() {
-		
-		IDialogSettings settings= getDialogSettings();
-		if (settings != null) {
-			fCreateTasksButton.setSelection(settings.getBoolean(STORE_USE_TASKMARKER));
-		}		
-	}	
-
-	/**
-	 * 	Since Finish was pressed, write widget values to the dialog store so that they
-	 *	will persist into the next invocation of this wizard page
-	 */
-	void saveWidgetValues() {
-		IDialogSettings settings= getDialogSettings();
-		if (settings != null) {
-			settings.put(STORE_USE_TASKMARKER, fCreateTasksButton.getSelection());
-		}
-	}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/NewTestSuiteCreationWizard.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/NewTestSuiteCreationWizard.java
deleted file mode 100644
index c53763f..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/NewTestSuiteCreationWizard.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2002.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.wizards;
-
-import java.lang.reflect.InvocationTargetException;
-import java.net.MalformedURLException;
-
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.jdt.core.IBuffer;
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IMethod;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.ISourceRange;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.internal.junit.ui.JUnitPlugin;
-import org.eclipse.jdt.internal.ui.javaeditor.EditorUtility;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.dialogs.ProgressMonitorDialog;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.ui.IEditorPart;
-
-/**
- * A wizard for creating test suites.
- */
-public class NewTestSuiteCreationWizard extends JUnitWizard {
-
-	private NewTestSuiteCreationWizardPage fPage;
-	
-	public NewTestSuiteCreationWizard() {
-		super();
-		setWindowTitle(WizardMessages.getString("Wizard.title.new")); //$NON-NLS-1$
-		initDialogSettings();
-	}
-
-	/*
-	 * @see Wizard#createPages
-	 */	
-	public void addPages() {
-		super.addPages();
-		fPage= new NewTestSuiteCreationWizardPage();
-		addPage(fPage);
-		fPage.init(getSelection());
-	}	
-
-	/*
-	 * @see Wizard#performFinish
-	 */		
-	public boolean performFinish() {
-		IPackageFragment pack= fPage.getPackageFragment();
-		String filename= fPage.getTypeName() + ".java"; //$NON-NLS-1$
-		ICompilationUnit cu= pack.getCompilationUnit(filename);
-		if (cu.exists()) {
-			IEditorPart cu_ep= EditorUtility.isOpenInEditor(cu);
-			if (cu_ep != null && cu_ep.isDirty()) {
-				boolean saveUnsavedChanges= 
-					MessageDialog.openQuestion(fPage.getShell(), 
-						WizardMessages.getString("NewTestSuiteWiz.unsavedchangesDialog.title"), //$NON-NLS-1$
-						WizardMessages.getFormattedString("NewTestSuiteWiz.unsavedchangesDialog.message", //$NON-NLS-1$
-						filename));  
-				if (saveUnsavedChanges) {
-					ProgressMonitorDialog progressDialog= new ProgressMonitorDialog(fPage.getShell());
-					try {
-						progressDialog.run(false, false, getRunnableSave(cu_ep));
-					} catch (Exception e) {
-						JUnitPlugin.log(e);
-					}
-				}
-			}
-			IType suiteType= cu.getType(fPage.getTypeName());
-			IMethod suiteMethod= suiteType.getMethod("suite", new String[] {}); //$NON-NLS-1$
-			if (suiteMethod.exists()) {
-				try {
-				ISourceRange range= suiteMethod.getSourceRange();
-				IBuffer buf= cu.getBuffer();
-				String originalContent= buf.getText(range.getOffset(), range.getLength());
-				int start= originalContent.indexOf(NewTestSuiteCreationWizardPage.START_MARKER);
-				if (start > -1) {
-					int end= originalContent.indexOf(NewTestSuiteCreationWizardPage.END_MARKER, start);
-					if (end < 0) {
-						fPage.cannotUpdateSuiteError();
-						return false;
-					}
-				} else {
-					fPage.cannotUpdateSuiteError();
-					return false;
-				}
-				} catch (JavaModelException e) {
-					JUnitPlugin.log(e);
-					return false;
-				}
-			}
-		}
-		
-		if (finishPage(fPage.getRunnable())) {
-			if (!fPage.hasUpdatedExistingClass())
-				postCreatingType();
-			fPage.saveWidgetValues();				
-			return true;
-		}
-
-		return false;		
-	}
-
-	protected void postCreatingType() {
-		IType newClass= fPage.getCreatedType();
-		
-		ICompilationUnit cu= newClass.getCompilationUnit();
-		if (cu.isWorkingCopy()) {
-			cu= (ICompilationUnit) cu.getOriginalElement();
-			//added here
-		}
-		try {
-			IResource resource= cu.getUnderlyingResource();
-			selectAndReveal(resource);
-			openResource(resource);
-		} catch (JavaModelException e) {
-			JUnitPlugin.log(e);
-		}
-	}
-
-	public NewTestSuiteCreationWizardPage getPage() {
-		return fPage;
-	}
-	
-	protected void initializeDefaultPageImageDescriptor() {
-		try {
-			ImageDescriptor id= ImageDescriptor.createFromURL(JUnitPlugin.makeIconFileURL("wizban/newtest_wiz.gif")); //$NON-NLS-1$
-			setDefaultPageImageDescriptor(id);
-	} catch (MalformedURLException e) {
-			// Should not happen.  Ignore.
-		}
-	}
-
-	public IRunnableWithProgress getRunnableSave(final IEditorPart cu_ep) {
-		return new IRunnableWithProgress() {
-			public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
-					if (monitor == null) {
-						monitor= new NullProgressMonitor();
-					}
-					cu_ep.doSave(monitor);
-			}
-		};
-	}
-}
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/NewTestSuiteCreationWizardPage.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/NewTestSuiteCreationWizardPage.java
deleted file mode 100644
index e5264d9..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/NewTestSuiteCreationWizardPage.java
+++ /dev/null
@@ -1,632 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2002.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.wizards;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.SubProgressMonitor;
-import org.eclipse.jdt.core.IBuffer;
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IMethod;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.ISourceRange;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.JavaConventions;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.internal.junit.ui.IJUnitHelpContextIds;
-import org.eclipse.jdt.internal.junit.ui.JUnitPlugin;
-import org.eclipse.jdt.internal.junit.util.JUnitStatus;
-import org.eclipse.jdt.internal.junit.util.JUnitStubUtility;
-import org.eclipse.jdt.internal.junit.util.LayoutUtil;
-import org.eclipse.jdt.internal.junit.util.SWTUtil;
-import org.eclipse.jdt.internal.junit.util.TestSearchEngine;
-import org.eclipse.jdt.ui.JavaElementLabelProvider;
-import org.eclipse.jdt.ui.wizards.NewTypeWizardPage;
-import org.eclipse.jface.dialogs.IDialogSettings;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.jface.viewers.CheckStateChangedEvent;
-import org.eclipse.jface.viewers.CheckboxTableViewer;
-import org.eclipse.jface.viewers.ICheckStateListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.Viewer;
-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.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.help.WorkbenchHelp;
-
-/**
- * Wizard page to select the test classes to include
- * in the test suite.
- */
-public class NewTestSuiteCreationWizardPage extends NewTypeWizardPage {
-
-	private final static String PAGE_NAME= "NewTestSuiteCreationWizardPage"; //$NON-NLS-1$
-	private final static String CLASSES_IN_SUITE= PAGE_NAME + ".classesinsuite"; //$NON-NLS-1$
-	private final static String SUITE_NAME= PAGE_NAME + ".suitename"; //$NON-NLS-1$
-
-	protected final static String STORE_GENERATE_MAIN= PAGE_NAME + ".GENERATE_MAIN"; //$NON-NLS-1$
-	protected final static String STORE_USE_TESTRUNNER= PAGE_NAME + ".USE_TESTRUNNER";	//$NON-NLS-1$
-	protected final static String STORE_TESTRUNNER_TYPE= PAGE_NAME + ".TESTRUNNER_TYPE"; //$NON-NLS-1$
-
-
-	public static final String START_MARKER= "//$JUnit-BEGIN$"; //$NON-NLS-1$
-	public static final String END_MARKER= "//$JUnit-END$"; //$NON-NLS-1$
-	
-	private IPackageFragment fCurrentPackage;
-	private CheckboxTableViewer fClassesInSuiteTable;	
-	private Button fSelectAllButton;
-	private Button fDeselectAllButton;
-	private Label fSelectedClassesLabel;
-
-	private Label fSuiteNameLabel;
-	private Text fSuiteNameText;
-	private String fSuiteNameTextInitialValue;
-	private MethodStubsSelectionButtonGroup fMethodStubsButtons;
-	
-	private boolean fUpdatedExistingClassButton;
-
-	protected IStatus fClassesInSuiteStatus;
-	protected IStatus fSuiteNameStatus;
-	
-	public NewTestSuiteCreationWizardPage() {
-		super(true, PAGE_NAME);
-
-		fSuiteNameStatus= new JUnitStatus();
-		fSuiteNameTextInitialValue= ""; //$NON-NLS-1$
-		setTitle(WizardMessages.getString("NewTestSuiteWizPage.title")); //$NON-NLS-1$
-		setDescription(WizardMessages.getString("NewTestSuiteWizPage.description")); //$NON-NLS-1$
-		
-		String[] buttonNames= new String[] {
-			"public static void main(Strin&g[] args)", //$NON-NLS-1$
-			/* Add testrunner statement to main Method */
-			WizardMessages.getString("NewTestClassWizPage.methodStub.testRunner"), //$NON-NLS-1$
-		};
-		
-		fMethodStubsButtons= new MethodStubsSelectionButtonGroup(SWT.CHECK, buttonNames, 1);
-		fMethodStubsButtons.setLabelText(WizardMessages.getString("NewTestClassWizPage2.method.Stub.label")); //$NON-NLS-1$
-		
-		fClassesInSuiteStatus= new JUnitStatus();
-	}
-
-	/**
-	 * @see IDialogPage#createControl(Composite)
-	 */
-	public void createControl(Composite parent) {
-		initializeDialogUnits(parent);
-		
-		Composite composite= new Composite(parent, SWT.NONE);
-		int nColumns= 4;
-		
-		GridLayout layout= new GridLayout();
-		layout.numColumns= nColumns;		
-		composite.setLayout(layout);
-	
-		createContainerControls(composite, nColumns);	
-		createPackageControls(composite, nColumns);	
-		createSeparator(composite, nColumns);
-		createSuiteNameControl(composite, nColumns);
-		setTypeName("AllTests", true); //$NON-NLS-1$
-		createSeparator(composite, nColumns);
-		createClassesInSuiteControl(composite, nColumns);
-		createMethodStubSelectionControls(composite, nColumns);
-		setControl(composite);
-		restoreWidgetValues();	
-		WorkbenchHelp.setHelp(composite, IJUnitHelpContextIds.NEW_TESTSUITE_WIZARD_PAGE);			
-	}
-
-	protected void createMethodStubSelectionControls(Composite composite, int nColumns) {
-		LayoutUtil.setHorizontalSpan(fMethodStubsButtons.getLabelControl(composite), nColumns);
-		LayoutUtil.createEmptySpace(composite,1);
-		LayoutUtil.setHorizontalSpan(fMethodStubsButtons.getSelectionButtonsGroup(composite), nColumns - 1);	
-	}	
-
-	/**
-	 * Should be called from the wizard with the initial selection.
-	 */
-	public void init(IStructuredSelection selection) {
-		IJavaElement jelem= getInitialJavaElement(selection);
-		initContainerPage(jelem);
-		initTypePage(jelem);
-		doStatusUpdate();
-
-		fMethodStubsButtons.setSelection(0, false); //main
-		fMethodStubsButtons.setSelection(1, false); //add textrunner
-		fMethodStubsButtons.setEnabled(1, false); //add text
-	}
-	
-	/**
-	 * @see NewContainerWizardPage#handleFieldChanged
-	 */
-	protected void handleFieldChanged(String fieldName) {
-		super.handleFieldChanged(fieldName);
-		if (fieldName.equals(PACKAGE) || fieldName.equals(CONTAINER)) {
-			if (fieldName.equals(PACKAGE))
-				fPackageStatus= packageChanged();
-			updateClassesInSuiteTable();
-		} else if (fieldName.equals(CLASSES_IN_SUITE)) {
-			fClassesInSuiteStatus= classesInSuiteChanged();
-			updateSelectedClassesLabel();
-		} else if (fieldName.equals(SUITE_NAME)) {
-			fSuiteNameStatus= testSuiteChanged();
-		}
-
-		doStatusUpdate();
-	}
-
-	// ------ validation --------
-	private void doStatusUpdate() {
-		// status of all used components
-		IStatus[] status= new IStatus[] {
-			fContainerStatus,
-			fPackageStatus,
-			fSuiteNameStatus,
-			fClassesInSuiteStatus			
-		};
-		
-		// the mode severe status will be displayed and the ok button enabled/disabled.
-		updateStatus(status);
-	}
-
-	/**
-	 * @see DialogPage#setVisible(boolean)
-	 */
-	public void setVisible(boolean visible) {
-		super.setVisible(visible);
-		if (visible) {
-			setFocus();		
-			updateClassesInSuiteTable();
-		}
-	}
-
-	protected void updateClassesInSuiteTable() {
-		if (fClassesInSuiteTable != null) {
-			IPackageFragment pack= getPackageFragment();
-			if (pack == null) {
-				IPackageFragmentRoot root= getPackageFragmentRoot();
-				if (root != null)
-					pack= root.getPackageFragment(""); //$NON-NLS-1$
-				else
-					return;
-			}
-			fCurrentPackage= pack;			
-			fClassesInSuiteTable.setInput(pack);
-			fClassesInSuiteTable.setAllChecked(true);
-			updateSelectedClassesLabel();	
-		}
-	}
-	
-	protected void createClassesInSuiteControl(Composite parent, int nColumns) {
-		if (fClassesInSuiteTable == null) {
-
-			Label label = new Label(parent, SWT.LEFT);
-			label.setText(WizardMessages.getString("NewTestSuiteWizPage.classes_in_suite.label")); //$NON-NLS-1$
-			GridData gd= new GridData();
-			gd.horizontalAlignment = GridData.FILL;
-			gd.horizontalSpan= nColumns;
-			label.setLayoutData(gd);
-
-			fClassesInSuiteTable= CheckboxTableViewer.newCheckList(parent, SWT.BORDER);
-			gd= new GridData(GridData.FILL_BOTH);
-			gd.heightHint= 80;
-			gd.horizontalSpan= nColumns-1;
-
-			fClassesInSuiteTable.getTable().setLayoutData(gd);
-			fClassesInSuiteTable.setContentProvider(new ClassesInSuitContentProvider());
-			fClassesInSuiteTable.setLabelProvider(new JavaElementLabelProvider());
-			fClassesInSuiteTable.addCheckStateListener(new ICheckStateListener() {
-				public void checkStateChanged(CheckStateChangedEvent event) {
-					handleFieldChanged(CLASSES_IN_SUITE);
-				}
-			});
-
-			Composite buttonContainer= new Composite(parent, SWT.NONE);
-			gd= new GridData(GridData.FILL_VERTICAL);
-			buttonContainer.setLayoutData(gd);
-			GridLayout buttonLayout= new GridLayout();
-			buttonLayout.marginWidth= 0;
-			buttonLayout.marginHeight= 0;
-			buttonContainer.setLayout(buttonLayout);
-	
-			fSelectAllButton= new Button(buttonContainer, SWT.PUSH);
-			fSelectAllButton.setText(WizardMessages.getString("NewTestSuiteWizPage.selectAll")); //$NON-NLS-1$
-			GridData bgd= new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
-			bgd.heightHint = SWTUtil.getButtonHeigthHint(fSelectAllButton);
-			bgd.widthHint = SWTUtil.getButtonWidthHint(fSelectAllButton);
-			fSelectAllButton.setLayoutData(bgd);
-			fSelectAllButton.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
-					fClassesInSuiteTable.setAllChecked(true);
-					handleFieldChanged(CLASSES_IN_SUITE);
-				}
-			});
-	
-			fDeselectAllButton= new Button(buttonContainer, SWT.PUSH);
-			fDeselectAllButton.setText(WizardMessages.getString("NewTestSuiteWizPage.deselectAll")); //$NON-NLS-1$
-			bgd= new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
-			bgd.heightHint = SWTUtil.getButtonHeigthHint(fDeselectAllButton);
-			bgd.widthHint = SWTUtil.getButtonWidthHint(fDeselectAllButton);
-			fDeselectAllButton.setLayoutData(bgd);
-			fDeselectAllButton.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
-					fClassesInSuiteTable.setAllChecked(false);
-					handleFieldChanged(CLASSES_IN_SUITE);
-				}
-			});
-
-			// No of selected classes label
-			fSelectedClassesLabel= new Label(parent, SWT.LEFT | SWT.WRAP);
-			fSelectedClassesLabel.setFont(parent.getFont());
-			updateSelectedClassesLabel();
-			gd = new GridData();
-			gd.horizontalSpan = 2;
-			fSelectedClassesLabel.setLayoutData(gd);
-		}
-	}
-
-	public static class ClassesInSuitContentProvider implements IStructuredContentProvider {
-			
-		private Object[] fTypes;
-			
-		public ClassesInSuitContentProvider() {
-			super();
-		}
-		
-		public Object[] getElements(Object parent) {
-			try {
-				if (parent instanceof IPackageFragment) {
-					IPackageFragment pack= (IPackageFragment) parent;
-					if (pack.exists()) { 
-						ICompilationUnit[] cuArray= pack.getCompilationUnits();
-						ArrayList typesArrayList= new ArrayList();
-						for (int i= 0; i < cuArray.length; i++) {
-							ICompilationUnit cu= cuArray[i];
-							IType[] types= cu.getTypes();
-							for (int j= 0; j < types.length; j++) {
-								if (TestSearchEngine.isTestImplementor(types[j]))	
-									typesArrayList.add(types[j]);
-							}
-						}
-						return typesArrayList.toArray();
-					}
-				}
-			} catch (JavaModelException e) {
-				JUnitPlugin.log(e);
-			}
-			return new Object[0];
-		}
-		
-		public void dispose() {
-		}
-		
-		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-		}
-	}
-
-	/*
-	 * @see TypePage#evalMethods
-	 */
-	protected void createTypeMembers(IType type, ImportsManager imports, IProgressMonitor monitor) throws CoreException {
-		writeImports(imports);
-		if (fMethodStubsButtons.isEnabled() && fMethodStubsButtons.isSelected(0)) 
-			createMain(type);
-		type.createMethod(getSuiteMethodString(), null, false, null);	
-	}
-
-	protected void createMain(IType type) throws JavaModelException {
-		type.createMethod(fMethodStubsButtons.getMainMethod(getTypeName()), null, false, null);	
-	}
-
-	/**
-	 * Returns the string content for creating a new suite() method.
-	 */
-	public String getSuiteMethodString() throws JavaModelException {
-		IPackageFragment pack= getPackageFragment();
-		String packName= pack.getElementName();
-		StringBuffer suite= new StringBuffer("public static Test suite () {TestSuite suite= new TestSuite(\"Test for "+((packName.equals(""))?"default package":packName)+"\");\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-		suite.append(getUpdatableString());
-		suite.append("\nreturn suite;}"); //$NON-NLS-1$
-		return suite.toString();
-	}
-	
-	/**
-	 * Returns the new code to be included in a new suite() or which replaces old code in an existing suite().
-	 */
-	public static String getUpdatableString(Object[] selectedClasses) throws JavaModelException {
-		StringBuffer suite= new StringBuffer();
-		suite.append(START_MARKER+"\n"); //$NON-NLS-1$
-		for (int i= 0; i < selectedClasses.length; i++) {
-			if (selectedClasses[i] instanceof IType) {
-				IType testType= (IType) selectedClasses[i];
-				IMethod suiteMethod= testType.getMethod("suite", new String[] {}); //$NON-NLS-1$
-				if (!suiteMethod.exists()) {
-					suite.append("suite.addTest(new TestSuite("+testType.getElementName()+".class));"); //$NON-NLS-1$ //$NON-NLS-2$
-				} else {
-					suite.append("suite.addTest("+testType.getElementName()+".suite());"); //$NON-NLS-1$ //$NON-NLS-2$
-				}
-			}
-		}
-		suite.append("\n"+END_MARKER); //$NON-NLS-1$
-		return suite.toString();
-	}
-	
-	private String getUpdatableString() throws JavaModelException {
-		return getUpdatableString(fClassesInSuiteTable.getCheckedElements());
-	}
-
-	/**
-	 * Runnable for replacing an existing suite() method.
-	 */
-	public IRunnableWithProgress getRunnable() {
-		return new IRunnableWithProgress() {
-			public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
-				try {
-					if (monitor == null) {
-						monitor= new NullProgressMonitor();
-					}
-					updateExistingClass(monitor);
-				} catch (CoreException e) {
-					throw new InvocationTargetException(e);
-				} 				
-			}
-		};
-	}
-	
-	protected void updateExistingClass(IProgressMonitor monitor) throws CoreException, InterruptedException {
-		try {
-			IPackageFragment pack= getPackageFragment();
-			ICompilationUnit cu= pack.getCompilationUnit(getTypeName() + ".java"); //$NON-NLS-1$
-	
-			if (!cu.exists()) {
-				createType(monitor);
-				fUpdatedExistingClassButton= false;
-				return;
-			}
-			
-			IType suiteType= cu.getType(getTypeName());
-			monitor.beginTask(WizardMessages.getString("NewTestSuiteWizPage.createType.beginTask"), 10); //$NON-NLS-1$
-			IMethod suiteMethod= suiteType.getMethod("suite", new String[] {}); //$NON-NLS-1$
-			monitor.worked(1);
-			
-			String lineDelimiter= JUnitStubUtility.getLineDelimiterUsed(cu);
-			if (suiteMethod.exists()) {
-				ISourceRange range= suiteMethod.getSourceRange();
-				if (range != null) {
-					IBuffer buf= cu.getBuffer();
-					String originalContent= buf.getText(range.getOffset(), range.getLength());
-					StringBuffer source= new StringBuffer(originalContent);
-					//using JDK 1.4
-					//int start= source.toString().indexOf(START_MARKER) --> int start= source.indexOf(START_MARKER);
-					int start= source.toString().indexOf(START_MARKER);
-					if (start > -1) {
-						//using JDK 1.4
-						//int end= source.toString().indexOf(END_MARKER, start) --> int end= source.indexOf(END_MARKER, start)
-						int end= source.toString().indexOf(END_MARKER, start);
-						if (end > -1) {
-							monitor.subTask(WizardMessages.getString("NewTestSuiteWizPage.createType.updating.suite_method")); //$NON-NLS-1$
-							monitor.worked(1);
-							end += END_MARKER.length();
-							source.replace(start, end, getUpdatableString());
-							buf.replace(range.getOffset(), range.getLength(), source.toString());
-							cu.reconcile();  
-							originalContent= buf.getText(0, buf.getLength());
-							monitor.worked(1);
-							String formattedContent=
-								JUnitStubUtility.codeFormat(originalContent, 0, lineDelimiter);
-							buf.replace(0, buf.getLength(), formattedContent);
-							monitor.worked(1);
-							cu.save(new SubProgressMonitor(monitor, 1), false);
-						} else {
-							cannotUpdateSuiteError();
-						}
-					} else {
-						cannotUpdateSuiteError();
-					}
-				} else {
-					MessageDialog.openError(getShell(), WizardMessages.getString("NewTestSuiteWizPage.createType.updateErrorDialog.title"), WizardMessages.getString("NewTestSuiteWizPage.createType.updateErrorDialog.message")); //$NON-NLS-1$ //$NON-NLS-2$
-				}
-			} else {
-				suiteType.createMethod(getSuiteMethodString(), null, true, monitor);
-				ISourceRange range= cu.getSourceRange();
-				IBuffer buf= cu.getBuffer();
-				String originalContent= buf.getText(range.getOffset(), range.getLength());
-				monitor.worked(2);
-				String formattedContent=
-					JUnitStubUtility.codeFormat(originalContent, 0, lineDelimiter);
-				buf.replace(range.getOffset(), range.getLength(), formattedContent);
-				monitor.worked(1);
-				cu.save(new SubProgressMonitor(monitor, 1), false);
-			}
-			monitor.done();
-			fUpdatedExistingClassButton= true;
-		} catch (JavaModelException e) {
-			JUnitPlugin.log(e);
-		}
-	}
-
-	/**
-	 * Returns true iff an existing suite() method has been replaced.
-	 */
-	public boolean hasUpdatedExistingClass() {
-		return fUpdatedExistingClassButton;
-	}
-	
-	private IStatus classesInSuiteChanged() {
-		JUnitStatus status= new JUnitStatus();
-		if (fClassesInSuiteTable.getCheckedElements().length <= 0)
-			status.setWarning(WizardMessages.getString("NewTestSuiteWizPage.classes_in_suite.error.no_testclasses_selected")); //$NON-NLS-1$
-		return status;
-	}
-	
-	private void updateSelectedClassesLabel() {
-		int noOfClassesChecked= fClassesInSuiteTable.getCheckedElements().length;
-		String key= (noOfClassesChecked==1) ? "NewTestClassWizPage.treeCaption.classSelected" : "NewTestClassWizPage.treeCaption.classesSelected"; //$NON-NLS-1$ //$NON-NLS-2$
-		fSelectedClassesLabel.setText(WizardMessages.getFormattedString(key, new Integer(noOfClassesChecked)));
-	}
-
-	protected void createSuiteNameControl(Composite composite, int nColumns) {
-		fSuiteNameLabel= new Label(composite, SWT.LEFT | SWT.WRAP);
-		fSuiteNameLabel.setFont(composite.getFont());
-		fSuiteNameLabel.setText(WizardMessages.getString("NewTestSuiteWizPage.suiteName.text")); //$NON-NLS-1$
-		GridData gd= new GridData();
-		gd.horizontalSpan= 1;
-		fSuiteNameLabel.setLayoutData(gd);
-
-		fSuiteNameText= new Text(composite, SWT.SINGLE | SWT.BORDER);
-		// moved up due to 1GEUNW2
-		fSuiteNameText.setEnabled(true);
-		fSuiteNameText.setFont(composite.getFont());
-		fSuiteNameText.addModifyListener(new ModifyListener() {
-			public void modifyText(ModifyEvent e) {
-				handleFieldChanged(SUITE_NAME);
-			}
-		});
-		gd= new GridData();
-		gd.horizontalAlignment= GridData.FILL;
-		gd.grabExcessHorizontalSpace= true;
-		gd.horizontalSpan= nColumns - 2;
-		fSuiteNameText.setLayoutData(gd);
-		
-		Label space= new Label(composite, SWT.LEFT);
-		space.setText(" "); //$NON-NLS-1$
-		gd= new GridData();
-		gd.horizontalSpan= 1;
-		space.setLayoutData(gd);		
-	}
-	
-	/**
-	 * Gets the type name.
-	 */
-	public String getTypeName() {
-		return (fSuiteNameText==null)?fSuiteNameTextInitialValue:fSuiteNameText.getText();
-	}
-	
-	/**
-	 * Sets the type name.
-	 * @param canBeModified Selects if the type name can be changed by the user
-	 */	
-	public void setTypeName(String name, boolean canBeModified) {
-		if (fSuiteNameText == null) {
-			fSuiteNameTextInitialValue= name;
-		} else {
-			fSuiteNameText.setText(name);
-			fSuiteNameText.setEnabled(canBeModified);
-		}
-	}	
-
-	/**
-	 * Called when the type name has changed.
-	 * The method validates the type name and returns the status of the validation.
-	 * Can be extended to add more validation
-	 */
-	protected IStatus testSuiteChanged() {
-		JUnitStatus status= new JUnitStatus();
-		String typeName= getTypeName();
-		// must not be empty
-		if (typeName.length() == 0) {
-			status.setError(WizardMessages.getString("NewTestSuiteWizPage.typeName.error.name_empty")); //$NON-NLS-1$
-			return status;
-		}
-		if (typeName.indexOf('.') != -1) {
-			status.setError(WizardMessages.getString("NewTestSuiteWizPage.typeName.error.name_qualified")); //$NON-NLS-1$
-			return status;
-		}
-		IStatus val= JavaConventions.validateJavaTypeName(typeName);
-		if (val.getSeverity() == IStatus.ERROR) {
-			status.setError(WizardMessages.getString("NewTestSuiteWizPage.typeName.error.name_not_valid")+val.getMessage()); //$NON-NLS-1$
-			return status;
-		} else if (val.getSeverity() == IStatus.WARNING) {
-			status.setWarning(WizardMessages.getString("NewTestSuiteWizPage.typeName.error.name.name_discouraged")+val.getMessage()); //$NON-NLS-1$
-			// continue checking
-		}		
-
-		IPackageFragment pack= getPackageFragment();
-		if (pack != null) {
-			ICompilationUnit cu= pack.getCompilationUnit(typeName + ".java"); //$NON-NLS-1$
-			if (cu.exists()) {
-				status.setWarning(WizardMessages.getString("NewTestSuiteWizPage.typeName.warning.already_exists")); //$NON-NLS-1$
-				fMethodStubsButtons.setEnabled(false);
-				return status;
-			}
-		}
-		fMethodStubsButtons.setEnabled(true);
-		return status;
-	}
-
-	/**
-	 * Sets the focus.
-	 */		
-	protected void setFocus() {
-		fSuiteNameText.setFocus();
-	}
-
-	/**
-	 * Sets the classes in <code>elements</code> as checked.
-	 */	
-	public void setCheckedElements(Object[] elements) {
-		fClassesInSuiteTable.setCheckedElements(elements);
-	}
-	
-	protected void cannotUpdateSuiteError() {
-		MessageDialog.openError(getShell(), WizardMessages.getString("NewTestSuiteWizPage.cannotUpdateDialog.title"), //$NON-NLS-1$
-			WizardMessages.getFormattedString("NewTestSuiteWizPage.cannotUpdateDialog.message", new String[] {START_MARKER, END_MARKER})); //$NON-NLS-1$
-
-	}
-
-	private void writeImports(ImportsManager imports) {
-		imports.addImport("junit.framework.Test"); //$NON-NLS-1$
-		imports.addImport("junit.framework.TestSuite");		 //$NON-NLS-1$
-	}
-
-	/**
-	 *	Use the dialog store to restore widget values to the values that they held
-	 *	last time this wizard was used to completion
-	 */
-	private void restoreWidgetValues() {
-		IDialogSettings settings= getDialogSettings();
-		if (settings != null) {
-			boolean generateMain= settings.getBoolean(STORE_GENERATE_MAIN);
-			fMethodStubsButtons.setSelection(0, generateMain);
-			fMethodStubsButtons.setEnabled(1, generateMain);
-			fMethodStubsButtons.setSelection(1,settings.getBoolean(STORE_USE_TESTRUNNER));
-			//The next 2 lines are necessary. Otherwise, if fMethodsStubsButtons is disabled, and USE_TESTRUNNER gets enabled,
-			//then the checkbox for USE_TESTRUNNER will be the only enabled component of fMethodsStubsButton
-			fMethodStubsButtons.setEnabled(!fMethodStubsButtons.isEnabled());
-			fMethodStubsButtons.setEnabled(!fMethodStubsButtons.isEnabled());
-			try {
-				fMethodStubsButtons.setComboSelection(settings.getInt(STORE_TESTRUNNER_TYPE));
-			} catch(NumberFormatException e) {}
-		}		
-	}	
-
-	/**
-	 * 	Since Finish was pressed, write widget values to the dialog store so that they
-	 *	will persist into the next invocation of this wizard page
-	 */
-	void saveWidgetValues() {
-		IDialogSettings settings= getDialogSettings();
-		if (settings != null) {
-			settings.put(STORE_GENERATE_MAIN, fMethodStubsButtons.isSelected(0));
-			settings.put(STORE_USE_TESTRUNNER, fMethodStubsButtons.isSelected(1));
-			settings.put(STORE_TESTRUNNER_TYPE, fMethodStubsButtons.getComboSelection());
-		}
-	}	
-}
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/UpdateTestSuite.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/UpdateTestSuite.java
deleted file mode 100644
index cfb20ba..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/UpdateTestSuite.java
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2002.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.wizards;
-
-import java.lang.reflect.InvocationTargetException;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.SubProgressMonitor;
-import org.eclipse.jdt.core.IBuffer;
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IMethod;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.ISourceRange;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.internal.junit.ui.JUnitPlugin;
-import org.eclipse.jdt.internal.junit.util.*;
-import org.eclipse.jdt.ui.JavaElementLabelProvider;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.dialogs.ProgressMonitorDialog;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IObjectActionDelegate;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.dialogs.ISelectionStatusValidator;
-
-/**
- * An object contribution action that updates existing AllTests classes.
- */
-public class UpdateTestSuite implements IObjectActionDelegate {
-	private Shell fShell;
-	private IPackageFragment fPack;
-	private ICompilationUnit fTestSuite;
-	private IMethod fSuiteMethod;
-	private static boolean fEmptySelectionAllowed= false;
-	private Object[] fSelectedTestCases;
-
-	private class UpdateAllTestsValidator implements ISelectionStatusValidator {	
-		/*
-		 * @see ISelectionValidator#validate(Object[])
-		 */
-		public IStatus validate(Object[] selection) {
-			int count= 0;
-			for (int i= 0; i < selection.length; i++) {
-				if (selection[i] instanceof IType) {
-					count++;
-				}
-			}
-			if (count == 0 && !fEmptySelectionAllowed) {
-				return new JUnitStatus(IStatus.ERROR, ""); //$NON-NLS-1$
-			}
-			String message;
-			if (count == 1) {
-				message= WizardMessages.getFormattedString("UpdateAllTests.selected_methods.label_one", new Integer(count)); //$NON-NLS-1$
-			} else {
-				message= WizardMessages.getFormattedString("UpdateAllTests.selected_methods.label_many", new Integer(count)); //$NON-NLS-1$
-			}
-			return new JUnitStatus(IStatus.INFO, message);
-		}
-	}
-
-	public UpdateTestSuite() {
-		super();
-	}
-
-	/*
-	 * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
-	 */
-	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
-	}
-
-	/*
-	 * @see IActionDelegate#run(IAction)
-	 */
-	public void run(IAction action) {
-		ILabelProvider lprovider= new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT);
-		IStructuredContentProvider cprovider= new NewTestSuiteCreationWizardPage.ClassesInSuitContentProvider();
-
-		/* find TestClasses already in Test Suite */
-		IType testSuiteType= fTestSuite.findPrimaryType();
-		fSuiteMethod= testSuiteType.getMethod("suite", new String[] {}); //$NON-NLS-1$
-		if (fSuiteMethod.exists()) {
-			try {
-			ISourceRange range= fSuiteMethod.getSourceRange();
-			IBuffer buf= fTestSuite.getBuffer();
-			String originalContent= buf.getText(range.getOffset(), range.getLength());
-			buf.close();
-			int start= originalContent.indexOf(NewTestSuiteCreationWizardPage.START_MARKER);
-			if (start > -1) {
-				if (originalContent.indexOf(NewTestSuiteCreationWizardPage.END_MARKER, start) > -1) {
-					CheckedTableSelectionDialog dialog= new CheckedTableSelectionDialog(fShell, lprovider, cprovider);
-					dialog.setValidator(new UpdateAllTestsValidator());
-					dialog.setTitle(WizardMessages.getString("UpdateAllTests.title")); //$NON-NLS-1$
-					dialog.setMessage(WizardMessages.getString("UpdateAllTests.message")); //$NON-NLS-1$
-					dialog.setInitialSelections(cprovider.getElements(fPack));
-					dialog.setSize(60, 25);
-					dialog.setInput(fPack);
-					if (dialog.open() == CheckedTableSelectionDialog.OK) {
-						fSelectedTestCases= dialog.getResult();
-						ProgressMonitorDialog progressDialog= new ProgressMonitorDialog(fShell);
-						try {
-							progressDialog.run(false, false, getRunnable());
-						} catch (Exception e) {
-							JUnitPlugin.log(e);
-						}
-					}
-				} else {
-					cannotUpdateSuiteError();
-				}
-			} else {
-				cannotUpdateSuiteError();
-			}
-			} catch (JavaModelException e) {
-				JUnitPlugin.log(e);
-			}
-		} else {
-			noSuiteError();
-		}
-	}
-
-	/*
-	 * @see IActionDelegate#selectionChanged(IAction, ISelection)
-	 */
-	public void selectionChanged(IAction action, ISelection selection) {
-		fShell= JUnitPlugin.getActiveWorkbenchShell();		
-		if (selection instanceof IStructuredSelection) {
-			Object testSuiteObj= ((IStructuredSelection) selection).getFirstElement();
-			if (testSuiteObj != null && testSuiteObj instanceof ICompilationUnit) {
-				fTestSuite= (ICompilationUnit) testSuiteObj;
-				IJavaElement packIJE= fTestSuite.getParent();
-				if (packIJE instanceof IPackageFragment) {
-					fPack= (IPackageFragment) packIJE;
-				}
-			}
-		}
-	}
-	
-	private void updateTestCasesInSuite(IProgressMonitor monitor) {
-		try {
-			monitor.beginTask(WizardMessages.getString("UpdateAllTests.beginTask"), 5); //$NON-NLS-1$
-			ISourceRange range= fSuiteMethod.getSourceRange();
-			IBuffer buf= fTestSuite.getBuffer();
-			String originalContent= buf.getText(range.getOffset(), range.getLength());
-			StringBuffer source= new StringBuffer(originalContent);
-			//using JDK 1.4
-			//int start= source.toString().indexOf(NewTestSuiteCreationWizardPage.startMarker) --> int start= source.indexOf(NewTestSuiteCreationWizardPage.startMarker)
-			int start= source.toString().indexOf(NewTestSuiteCreationWizardPage.START_MARKER);
-			if (start > -1) {
-				//using JDK 1.4
-				//int end= source.toString().indexOf(NewTestSuiteCreationWizardPage.endMarker, start) --> int end= source.indexOf(NewTestSuiteCreationWizardPage.endMarker, start)
-				int end= source.toString().indexOf(NewTestSuiteCreationWizardPage.END_MARKER, start);
-				if (end > -1) {
-					monitor.worked(1);
-					end += NewTestSuiteCreationWizardPage.END_MARKER.length();
-					//					String updatableCode= source.substring(start,end+NewTestSuiteCreationWizardPage.endMarker.length());
-					source.replace(start, end, NewTestSuiteCreationWizardPage.getUpdatableString(fSelectedTestCases));
-					buf.replace(range.getOffset(), range.getLength(), source.toString());
-					monitor.worked(1);
-					fTestSuite.reconcile();
-					originalContent= buf.getText(0, buf.getLength());
-					monitor.worked(1);
-					String formattedContent=
-						JUnitStubUtility.codeFormat(
-							originalContent,
-							0,
-							JUnitStubUtility.getLineDelimiterUsed(fTestSuite));
-					//buf.replace(range.getOffset(), range.getLength(), formattedContent);
-					buf.replace(0, buf.getLength(), formattedContent);
-					monitor.worked(1);
-					fTestSuite.save(new SubProgressMonitor(monitor, 1), true);
-				}
-			}
-		} catch (JavaModelException e) {
-			JUnitPlugin.log(e);
-		}
-	}
-
-	public IRunnableWithProgress getRunnable() {
-		return new IRunnableWithProgress() {
-			public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
-				if (monitor == null) {
-					monitor= new NullProgressMonitor();
-				}
-				updateTestCasesInSuite(monitor);
-			}
-		};
-	}
-
-	private void cannotUpdateSuiteError() {
-		MessageDialog.openError(fShell, WizardMessages.getString("UpdateAllTests.cannotUpdate.errorDialog.title"), //$NON-NLS-1$
-			WizardMessages.getFormattedString("UpdateAllTests.cannotUpdate.errorDialog.message", new String[] {NewTestSuiteCreationWizardPage.START_MARKER, NewTestSuiteCreationWizardPage.END_MARKER})); //$NON-NLS-1$
-
-	}
-
-	private void noSuiteError() {
-		MessageDialog.openError(fShell, WizardMessages.getString("UpdateAllTests.cannotFind.errorDialog.title"), WizardMessages.getString("UpdateAllTests.cannotFind.errorDialog.message")); //$NON-NLS-1$ //$NON-NLS-2$
-	}
-}
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/WizardMessages.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/WizardMessages.java
deleted file mode 100644
index 22e66bf..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/WizardMessages.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2002.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.junit.wizards;
-
-import java.text.MessageFormat;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-public class WizardMessages {
-
-	private static final String BUNDLE_NAME = "org.eclipse.jdt.internal.junit.wizards.WizardMessages"; //$NON-NLS-1$
-
-	private static final ResourceBundle RESOURCE_BUNDLE= ResourceBundle.getBundle(BUNDLE_NAME);
-
-	private WizardMessages() {
-	}
-
-	public static String getString(String key) {
-		try {
-			return RESOURCE_BUNDLE.getString(key);
-		} catch (MissingResourceException e) {
-			return '!' + key + '!';
-		}
-	}
-	
-	/**
-	 * Gets a string from the resource bundle and formats it with the argument
-	 * 
-	 * @param key	the string used to get the bundle value, must not be null
-	 */
-	public static String getFormattedString(String key, Object arg) {
-		return MessageFormat.format(getString(key), new Object[] { arg });
-	}
-
-	/**
-	 * Gets a string from the resource bundle and formats it with arguments
-	 */	
-	public static String getFormattedString(String key, Object[] args) {
-		return MessageFormat.format(getString(key), args);
-	}
-	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/WizardMessages.properties b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/WizardMessages.properties
deleted file mode 100644
index 383d53a..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/WizardMessages.properties
+++ /dev/null
@@ -1,117 +0,0 @@
-#
-# Miscellaneous
-#
-Wizard.title.new=New 
-
-#
-# CheckedTableSelectionDialog
-#
-CheckedTableSelectionDialog.emptyListMessage=No entries available.
-CheckedTableSelectionDialog.selectAll=&Select All
-CheckedTableSelectionDialog.deselectAll=&Deselect All
-
-#
-# NewTestCaseCreationWizard Page 1
-#
-NewTestClassWizPage.title=JUnit TestCase
-NewTestClassWizPage.description=Create a new JUnit TestCase
-NewTestClassWizPage.methodStub.testRunner=&Add TestRunner statement for:
-NewTestClassWizPage.methodStub.constructor=Constructor &from superclass
-NewTestClassWizPage.methodStub.setUp=setUp&()
-NewTestClassWizPage.methodStub.tearDown=tearDown(&)
-NewTestClassWizPage.method.Stub.label=Which method stubs would you like to create?
-NewTestClassWizPage.class_to_test.label=&Test class:
-NewTestClassWizPage.class_to_test.browse=B&rowse...
-NewTestClassWizPage.class_to_test.dialog.title=Class To Test
-NewTestClassWizPage.class_to_test.dialog.message=Class for which tests shall be written:
-NewTestClassWizPage.class_to_test.validate_name=Test class
-NewTestClassWizPage.createType.beginTask=Creating type....
-NewTestClassWizPage.marker.message=Implement {0}().
-NewTestClassWizPage.error.superclass.not_exist=Superclass does not exist.
-NewTestClassWizPage.error.superclass.is_interface=Superclass is an interface.
-NewTestClassWizPage.error.superclass.not_implementing_test_interface=Superclass does not implement the ''{0}'' interface.
-NewTestClassWizPage.testcase.label=Test &case:
-NewTestClassWizPage.error.testcase.name_empty=Test case name is empty.
-NewTestClassWizPage.error.testcase.name_qualified=Test case name must not be qualified.
-NewTestClassWizPage.error.testcase.name_not_valid=Test case name is not valid. 
-NewTestClassWizPage.error.testcase.name_discouraged=Test case name is discouraged. 
-NewTestClassWizPage.error.testcase.already_exists=Test case already exists.
-NewTestClassWizPage.error.testcase.already_exists_first_time=Default Test case already exists.
-NewTestClassWizPage.error.class_to_test.not_valid=Test class name is not valid.
-NewTestClassWizPage.error.class_to_test.not_exist=Test class does not exist in current project.
-NewTestClassWizPage.warning.class_to_test.is_interface=Warning: Test class ''{0}'' is an interface.
-NewTestClassWizPage.warning.class_to_test.not_visible=Warning: {0} ''{1}'' is not visible.
-NewTestClassWizPage.comment.class_to_test=Test for {0} {1}
-NewTestClassWizPage.error.junitNotOnbuildpath=JUnit is not on the project\'s buildpath, add the junit.jar to the project\'s buildpath first.
-NewTestClassWizPage.error.junitNotOnbuildpath=JUnit is not on the project\'s buildpath, add the junit.jar to the project\'s buildpath first.
-NewTestClassWizPage.treeCaption.classSelected={0} class selected.
-NewTestClassWizPage.treeCaption.classesSelected={0} classes selected.
-
-Interface=Interface
-Class=Class
-
-#
-# NewTestCaseCreationWizard Page 2
-#
-NewTestClassWizPage2.selected_methods.label_one={0} method selected.
-NewTestClassWizPage2.selected_methods.label_many={0} methods selected.
-NewTestClassWizPage2.title=Test Methods
-NewTestClassWizPage2.description=Select methods for which test method stubs should be created
-NewTestClassWizPage2.create_tasks.text=Create &tasks for generated Test methods
-NewTestClassWizPage2.methods_tree.label=Available &Methods
-NewTestClassWizPage2.selectAll=&Select All
-NewTestClassWizPage2.deselectAll=&Deselect All
-NewTestClassWizPage2.method.Stub.label=Would you like to create a method stub for main?
-
-#
-# NewTestSuiteCreationWizard
-#
-NewTestSuiteWiz.unsavedchangesDialog.title=Unsaved changes
-NewTestSuiteWiz.unsavedchangesDialog.message={0} contains unsaved changes. Save before updating?
-
-#
-# NewTestSuiteCreationWizard Page
-#
-NewTestSuiteWizPage.title=JUnit TestSuite
-NewTestSuiteWizPage.description=Create a new JUnit TestSuite class for a package
-NewTestSuiteWizPage.classes_in_suite.label=Test &Classes to include in Suite:
-NewTestSuiteWizPage.selectAll=&Select All
-NewTestSuiteWizPage.deselectAll=D&eselect All
-NewTestSuiteWizPage.createType.beginTask=Creating test suite....
-NewTestSuiteWizPage.createType.updating.suite_method=Updating existing suite() method
-NewTestSuiteWizPage.createType.updateErrorDialog.title=Error updating class
-NewTestSuiteWizPage.createType.updateErrorDialog.message=There is no source associated with this class file
-NewTestSuiteWizPage.classes_in_suite.error.no_testclasses_selected=Warning: No Test Classes selected
-NewTestSuiteWizPage.suiteName.text=&Test suite:
-NewTestSuiteWizPage.typeName.error.name_empty=Test suite name is empty
-NewTestSuiteWizPage.typeName.error.name_qualified=Test suite name must not be qualified
-NewTestSuiteWizPage.typeName.error.name_not_valid=Test suite name is not valid. 
-NewTestSuiteWizPage.typeName.error.name.name_discouraged=Warning: Test suite name is discouraged. 
-NewTestSuiteWizPage.typeName.warning.already_exists=Warning: Test suite already exists. suite() method will be replaced.
-NewTestSuiteWizPage.cannotUpdateDialog.title=Cannot update suite() method
-NewTestSuiteWizPage.cannotUpdateDialog.message=The code in suite() that the wizard replaces must start with {0} and end with {1}
-
-#
-# UpdateTestSuite
-#
-UpdateAllTests.selected_methods.label_one={0} type selected.
-UpdateAllTests.selected_methods.label_many={0} types selected.
-UpdateAllTests.title=Recreate Test Suite
-UpdateAllTests.message=&Test Classes to be included
-UpdateAllTests.beginTask=Recreating suite() method....
-UpdateAllTests.cannotUpdate.errorDialog.title=Cannot recreate suite() method.
-UpdateAllTests.cannotUpdate.errorDialog.message=The code in suite() that the wizard replaces must start with {0} and end with {1}
-UpdateAllTests.cannotFind.errorDialog.title=Cannot find suite() method.
-UpdateAllTests.cannotFind.errorDialog.message=No suite() method could be found.
-
-#
-# JUnitWizard
-#
-NewJUnitWizard.op_error.title=New
-NewJUnitWizard.op_error.message=Creation of element failed.
-
-#
-# ExceptionHandler
-#
-ExceptionDialog.seeErrorLogMessage= See error log for more details.
-
diff --git a/org.eclipse.jdt.ui.examples.projects/.classpath b/org.eclipse.jdt.ui.examples.projects/.classpath
deleted file mode 100644
index 454743d..0000000
--- a/org.eclipse.jdt.ui.examples.projects/.classpath
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-    <classpathentry kind="src" path="examples"/>
-    <classpathentry kind="src" path="/org.eclipse.core.boot"/>
-    <classpathentry kind="src" path="/org.eclipse.core.runtime"/>
-    <classpathentry kind="src" path="/org.eclipse.core.resources"/>
-    <classpathentry kind="src" path="/org.eclipse.ui"/>
-    <classpathentry kind="src" path="/org.eclipse.jdt.core"/>
-    <classpathentry kind="src" path="/org.eclipse.jdt.ui"/>
-    <classpathentry kind="var" path="JRE_LIB" rootpath="JRE_SRCROOT" sourcepath="JRE_SRC"/>
-    <classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/org.eclipse.jdt.ui.examples.projects/.cvsignore b/org.eclipse.jdt.ui.examples.projects/.cvsignore
deleted file mode 100644
index fe99505..0000000
--- a/org.eclipse.jdt.ui.examples.projects/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-bin
-
diff --git a/org.eclipse.jdt.ui.examples.projects/.project b/org.eclipse.jdt.ui.examples.projects/.project
deleted file mode 100644
index 3763173..0000000
--- a/org.eclipse.jdt.ui.examples.projects/.project
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jdt.ui.examples.projects</name>
-	<comment></comment>
-	<projects>
-		<project>org.eclipse.jdt.core</project>
-		<project>org.eclipse.ui</project>
-		<project>org.eclipse.jdt.ui</project>
-		<project>org.eclipse.core.boot</project>
-		<project>org.eclipse.core.runtime</project>
-		<project>org.eclipse.core.resources</project>
-		<project>org.eclipse.swt</project>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/org.eclipse.jdt.ui.examples.projects/about.html b/org.eclipse.jdt.ui.examples.projects/about.html
deleted file mode 100644
index 6df85fe..0000000
--- a/org.eclipse.jdt.ui.examples.projects/about.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
-
-<p>20th June, 2002</p>	
-<h3>License</h3>
-<p>Eclipse.org makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
-Common Public License Version 1.0 (&quot;CPL&quot;).  A copy of the CPL is available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>.
-For purposes of the CPL, &quot;Program&quot; will mean the Content.</p>
-
-<h3>Third Party Content</h3>
-
-<p>The Content includes items that have been sourced from third parties as follows:</p>
-
-<p><b>JUnit 3.7</b></p>
-<p>The plug-in is based on software developed by JUnit.org.  Your use of JUnit 3.7 in both source and binary code
-form contained in the plug-in is subject to the terms and conditions of the IBM Public License 1.0 which is available at
-<a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>.
-The source code is located in archive/junit/junit37src.jar.</p>
-
-<p>i) IBM effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;</p>
-<p>ii) IBM effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;</p>
-<p>iii) IBM states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party.</p>
-
-<h3>Contributions</h3>
-
-<p>If this Content is licensed to you under the terms and conditions of the CPL, any Contributions, as defined in the CPL, uploaded, submitted, or otherwise
-made available to Eclipse.org, members of Eclipse.org and/or the host of Eclipse.org web site, by you that relate to such
-Content are provided under the terms and conditions of the CPL and can be made available to others under the terms of the CPL.</p>
-
-<p>If this Content is licensed to you under license terms and conditions other than the CPL (&quot;Other License&quot;), any modifications, enhancements and/or
-other code and/or documentation (&quot;Modifications&quot;) uploaded, submitted, or otherwise made available to Eclipse.org, members of Eclipse.org and/or the
-host of Eclipse.org, by you that relate to such Content are provided under terms and conditions of the Other License and can be made available
-to others under the terms of the Other License.  In addition, with regard to Modifications for which you are the copyright holder, you are also
-providing the Modifications under the terms and conditions of the CPL and such Modifications can be made available to others under the terms of
-the CPL.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.examples.projects/archive/junit/junit37src.jar b/org.eclipse.jdt.ui.examples.projects/archive/junit/junit37src.jar
deleted file mode 100644
index abde1e7..0000000
--- a/org.eclipse.jdt.ui.examples.projects/archive/junit/junit37src.jar
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.ui.examples.projects/build.properties b/org.eclipse.jdt.ui.examples.projects/build.properties
deleted file mode 100644
index 5f77933..0000000
--- a/org.eclipse.jdt.ui.examples.projects/build.properties
+++ /dev/null
@@ -1,8 +0,0 @@
-bin.includes = doc-html/,\
-               plugin.xml,\
-               about.html,\
-               icons/,\
-               plugin.properties,\
-               archive/,\
-               *.jar
-source.jdtexamples.jar = examples/
diff --git a/org.eclipse.jdt.ui.examples.projects/doc-html/hglegal.htm b/org.eclipse.jdt.ui.examples.projects/doc-html/hglegal.htm
deleted file mode 100644
index c598113..0000000
--- a/org.eclipse.jdt.ui.examples.projects/doc-html/hglegal.htm
+++ /dev/null
@@ -1,14 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="GENERATOR" content="Mozilla/4.73 [en] (Win98; U) [Netscape]">
-   <title>Legal Notices</title>
-</head>
-<body>
-
-<h3>
-<a NAME="Notices"></a>Notices</h3>
-(c) Copyright IBM Corp. 2000, 2001. All Rights Reserved.
-</body>
-</html>
diff --git a/org.eclipse.jdt.ui.examples.projects/doc-html/jdt_projects_ex.html b/org.eclipse.jdt.ui.examples.projects/doc-html/jdt_projects_ex.html
deleted file mode 100644
index 6b42f32..0000000
--- a/org.eclipse.jdt.ui.examples.projects/doc-html/jdt_projects_ex.html
+++ /dev/null
@@ -1,40 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-   <title>Desktop - Java Editor Example</title>
-</head>
-<body>
-
-<h2>
-<b>Java Example Projects</b></h2>
-
-<h3>
-Introduction</h3>
-The Java examples provide you with sample code for exploring the Eclipse Java
-tools.
-
-<h3>
-Loading the Samples</h3>
-
-<ol>
-<li>
-Open the New wizard.</li>
-
-<li>
-Select the Java Example Projects category.</li>
-
-<li>
-Select the project to be added to your workspace.</li>
-
-<li>
-Enter the new name of the project in your workspace.</li>
-
-</ol>
-
-<p>The wizard creates a new Java project for you and imports the sample code
-into this project.</p>
-<p><a href="hglegal.htm"><img SRC="ngibmcpy.gif" ALT="Copyright IBM Corp. 2000, 2001.  All Rights Reserved." BORDER=0 height=12 width=195></a>
-</body>
-</html>
diff --git a/org.eclipse.jdt.ui.examples.projects/doc-html/ngibmcpy.gif b/org.eclipse.jdt.ui.examples.projects/doc-html/ngibmcpy.gif
deleted file mode 100644
index 360f8e9..0000000
--- a/org.eclipse.jdt.ui.examples.projects/doc-html/ngibmcpy.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.ui.examples.projects/examples/org/eclipse/jdt/internal/ui/exampleprojects/ExampleProjectCreationOperation.java b/org.eclipse.jdt.ui.examples.projects/examples/org/eclipse/jdt/internal/ui/exampleprojects/ExampleProjectCreationOperation.java
deleted file mode 100644
index 0148404..0000000
--- a/org.eclipse.jdt.ui.examples.projects/examples/org/eclipse/jdt/internal/ui/exampleprojects/ExampleProjectCreationOperation.java
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.ui.examples.projects/examples/org/eclipse/jdt/internal/ui/exampleprojects/ExampleProjectCreationWizard.java b/org.eclipse.jdt.ui.examples.projects/examples/org/eclipse/jdt/internal/ui/exampleprojects/ExampleProjectCreationWizard.java
deleted file mode 100644
index 001bdc3..0000000
--- a/org.eclipse.jdt.ui.examples.projects/examples/org/eclipse/jdt/internal/ui/exampleprojects/ExampleProjectCreationWizard.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.ui.exampleprojects;
-
-import java.lang.reflect.InvocationTargetException;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExecutableExtension;
-import org.eclipse.core.runtime.IStatus;
-
-import org.eclipse.swt.widgets.Display;
-
-import org.eclipse.jface.dialogs.ErrorDialog;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.jface.resource.ImageDescriptor;
-
-import org.eclipse.ui.INewWizard;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation;
-import org.eclipse.ui.dialogs.IOverwriteQuery;
-import org.eclipse.ui.wizards.newresource.BasicNewProjectResourceWizard;
-import org.eclipse.ui.wizards.newresource.BasicNewResourceWizard;
-
-public class ExampleProjectCreationWizard extends BasicNewResourceWizard implements INewWizard, IExecutableExtension {
-
-	private ExampleProjectCreationWizardPage[] fPages;
-	private IConfigurationElement fConfigElement;
-
-	public ExampleProjectCreationWizard() {
-		super();
-		setDialogSettings(ExampleProjectsPlugin.getDefault().getDialogSettings());
-		setWindowTitle(ExampleProjectMessages.getString("ExampleProjectCreationWizard.title"));		 //$NON-NLS-1$
-		setNeedsProgressMonitor(true);
-	}
-	
-	/*
-	 * @see BasicNewResourceWizard#initializeDefaultPageImageDescriptor
-	 */
-	protected void initializeDefaultPageImageDescriptor() {
-		if (fConfigElement != null) {
-			String banner= fConfigElement.getAttribute("banner"); //$NON-NLS-1$
-			if (banner != null) {
-				ImageDescriptor desc= ExampleProjectsPlugin.getDefault().getImageDescriptor(banner);
-				setDefaultPageImageDescriptor(desc);
-			}
-		}
-	}
-
-	/*
-	 * @see Wizard#addPages
-	 */	
-	public void addPages() {
-		super.addPages();
-		
-		IConfigurationElement[] children = fConfigElement.getChildren("projectsetup"); //$NON-NLS-1$
-		if (children == null || children.length == 0) {
-			ExampleProjectsPlugin.log("descriptor must contain one ore more projectsetup tags"); //$NON-NLS-1$
-			return;
-		}
-		
-		fPages=  new ExampleProjectCreationWizardPage[children.length];
-		
-		for (int i= 0; i < children.length; i++) {
-			IConfigurationElement curr= children[i];
-			fPages[i]= new ExampleProjectCreationWizardPage(i, children[i]);
-			addPage(fPages[i]);
-		}
-	}
-	
-	/*
-	 * @see Wizard#performFinish
-	 */		
-	public boolean performFinish() {
-		ExampleProjectCreationOperation runnable= new ExampleProjectCreationOperation(fPages, new ImportOverwriteQuery());
-		
-		IRunnableWithProgress op= new WorkspaceModifyDelegatingOperation(runnable);
-		try {
-			getContainer().run(false, true, op);
-		} catch (InvocationTargetException e) {
-			handleException(e.getTargetException());
-			return false;
-		} catch  (InterruptedException e) {
-			return false;
-		}
-		BasicNewProjectResourceWizard.updatePerspective(fConfigElement);
-		IResource res= runnable.getElementToOpen();
-		if (res != null) {
-			openResource(res);
-		}
-		return true;
-	}
-	
-	private void handleException(Throwable target) {
-		String title= ExampleProjectMessages.getString("ExampleProjectCreationWizard.op_error.title"); //$NON-NLS-1$
-		String message= ExampleProjectMessages.getString("ExampleProjectCreationWizard.op_error.message"); //$NON-NLS-1$
-		if (target instanceof CoreException) {
-			IStatus status= ((CoreException)target).getStatus();
-			ErrorDialog.openError(getShell(), title, message, status);
-			ExampleProjectsPlugin.log(status);
-		} else {
-			MessageDialog.openError(getShell(), title, target.getMessage());
-			ExampleProjectsPlugin.log(target);
-		}
-	}
-	
-	private void openResource(final IResource resource) {
-		if (resource.getType() != IResource.FILE) {
-			return;
-		}
-		IWorkbenchWindow window= ExampleProjectsPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow();
-		if (window == null) {
-			return;
-		}
-		final IWorkbenchPage activePage= window.getActivePage();
-		if (activePage != null) {
-			final Display display= getShell().getDisplay();
-			display.asyncExec(new Runnable() {
-				public void run() {
-					try {
-						activePage.openEditor((IFile)resource);
-					} catch (PartInitException e) {
-						ExampleProjectsPlugin.log(e);
-					}
-				}
-			});
-			selectAndReveal(resource);
-		}
-	}	
-		
-	/**
-	 * Stores the configuration element for the wizard.  The config element will be used
-	 * in <code>performFinish</code> to set the result perspective.
-	 */
-	public void setInitializationData(IConfigurationElement cfig, String propertyName, Object data) {
-		fConfigElement= cfig;
-	}
-	
-	// overwrite dialog
-	
-	private class ImportOverwriteQuery implements IOverwriteQuery {
-		public String queryOverwrite(String file) {
-			String[] returnCodes= { YES, NO, ALL, CANCEL};
-			int returnVal= openDialog(file);
-			return returnVal < 0 ? CANCEL : returnCodes[returnVal];
-		}	
-		
-		private int openDialog(final String file) {
-			final int[] result= { IDialogConstants.CANCEL_ID };
-			getShell().getDisplay().syncExec(new Runnable() {
-				public void run() {
-					String title= ExampleProjectMessages.getString("ExampleProjectCreationWizard.overwritequery.title"); //$NON-NLS-1$
-					String msg= ExampleProjectMessages.getFormattedString("ExampleProjectCreationWizard.overwritequery.message", file); //$NON-NLS-1$
-					String[] options= {IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL, IDialogConstants.YES_TO_ALL_LABEL, IDialogConstants.CANCEL_LABEL};
-					MessageDialog dialog= new MessageDialog(getShell(), title, null, msg, MessageDialog.QUESTION, options, 0);
-					result[0]= dialog.open();
-				}
-			});
-			return result[0];
-		}
-	}		
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.examples.projects/examples/org/eclipse/jdt/internal/ui/exampleprojects/ExampleProjectCreationWizardPage.java b/org.eclipse.jdt.ui.examples.projects/examples/org/eclipse/jdt/internal/ui/exampleprojects/ExampleProjectCreationWizardPage.java
deleted file mode 100644
index 642f32d..0000000
--- a/org.eclipse.jdt.ui.examples.projects/examples/org/eclipse/jdt/internal/ui/exampleprojects/ExampleProjectCreationWizardPage.java
+++ /dev/null
@@ -1,162 +0,0 @@
-package org.eclipse.jdt.internal.ui.exampleprojects;
-
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
-
-import org.eclipse.jface.dialogs.DialogPage;
-import org.eclipse.jface.wizard.WizardPage;
-
-public class ExampleProjectCreationWizardPage extends WizardPage {
-
-	private IStatus fCurrStatus;
-	
-	private boolean fPageVisible;
-	
-	private IConfigurationElement fConfigurationElement;
-	
-	private String fNameLabel;
-	private String fProjectName;
-	
-	private Text fTextControl;
-	
-	public ExampleProjectCreationWizardPage(int pageNumber, IConfigurationElement elem) {
-		super("page" + pageNumber); //$NON-NLS-1$
-		fCurrStatus= createStatus(IStatus.OK, ""); //$NON-NLS-1$
-		
-		fConfigurationElement= elem;
-		
-		setTitle(getAttribute(elem, "pagetitle")); //$NON-NLS-1$
-		setDescription(getAttribute(elem, "pagedescription")); //$NON-NLS-1$
-		
-		fNameLabel= getAttribute(elem, "label"); //$NON-NLS-1$
-		fProjectName= getAttribute(elem, "name");		 //$NON-NLS-1$
-		
-	}
-	
-	private String getAttribute(IConfigurationElement elem, String tag) {
-		String res= elem.getAttribute(tag);
-		if (res == null) {
-			return '!' + tag + '!';
-		}
-		return res;
-	}
-	
-	/*
-	 * @see IDialogPage#createControl(Composite)
-	 */
-	public void createControl(Composite parent) {
-		Composite composite= new Composite(parent, SWT.NONE);
-		GridLayout gd= new GridLayout();
-		gd.numColumns= 2;
-		composite.setLayout(gd);
-		
-		Label label= new Label(composite, SWT.LEFT);
-		label.setText(fNameLabel);
-		label.setLayoutData(new GridData());
-		
-		fTextControl= new Text(composite, SWT.SINGLE | SWT.BORDER);
-		fTextControl.setText(fProjectName);
-		fTextControl.addModifyListener(new ModifyListener() {
-			public void modifyText(ModifyEvent e) {
-				if (!fTextControl.isDisposed()) {
-					validateText(fTextControl.getText());
-				}
-			}
-		});
-		fTextControl.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-		
-		setControl(composite);
-	}
-
-	private void validateText(String text) {
-		IWorkspace workspace= ResourcesPlugin.getWorkspace();
-		IStatus status= workspace.validateName(text, IResource.PROJECT);
-		if (status.isOK()) {
-			if (workspace.getRoot().getProject(text).exists()) {
-				status= createStatus(IStatus.ERROR, ExampleProjectMessages.getString("ExampleProjectCreationWizardPage.error.alreadyexists")); //$NON-NLS-1$
-			}
-		}	
-		updateStatus(status);
-		
-		fProjectName= text;
-	}	
-	
-	
-	/*
-	 * @see WizardPage#becomesVisible
-	 */
-	public void setVisible(boolean visible) {
-		super.setVisible(visible);
-		fPageVisible= visible;
-		// policy: wizards are not allowed to come up with an error message
-		if (visible && fCurrStatus.matches(IStatus.ERROR)) {
-			// keep the error state, but remove the message
-			fCurrStatus= createStatus(IStatus.ERROR, ""); //$NON-NLS-1$
-		} 
-		updateStatus(fCurrStatus);
-	}	
-
-	/**
-	 * Updates the status line and the ok button depending on the status
-	 */
-	private void updateStatus(IStatus status) {
-		fCurrStatus= status;
-		setPageComplete(!status.matches(IStatus.ERROR));
-		if (fPageVisible) {
-			applyToStatusLine(this, status);
-		}
-	}
-
-	/**
-	 * Applies the status to a dialog page
-	 */
-	private static void applyToStatusLine(DialogPage page, IStatus status) {
-		String errorMessage= null;
-		String warningMessage= null;
-		String statusMessage= status.getMessage();
-		if (statusMessage.length() > 0) {
-			if (status.matches(IStatus.ERROR)) {
-				errorMessage= statusMessage;
-			} else if (!status.isOK()) {
-				warningMessage= statusMessage;
-			}
-		}
-		page.setErrorMessage(errorMessage);
-		page.setMessage(warningMessage);
-	}
-	
-	
-	private static IStatus createStatus(int severity, String message) {
-		return new Status(severity, ExampleProjectsPlugin.getPluginId(), severity, message, null);
-	}
-	
-	/**
-	 * Returns the name entered by the user
-	 */
-	public String getName() {
-		return fProjectName;
-	}
-
-	/**
-	 * Returns the configuration element of this page.
-	 * @return Returns a IConfigurationElement
-	 */
-	public IConfigurationElement getConfigurationElement() {
-		return fConfigurationElement;
-	}
-
-}
-
diff --git a/org.eclipse.jdt.ui.examples.projects/examples/org/eclipse/jdt/internal/ui/exampleprojects/ExampleProjectMessages.java b/org.eclipse.jdt.ui.examples.projects/examples/org/eclipse/jdt/internal/ui/exampleprojects/ExampleProjectMessages.java
deleted file mode 100644
index 78a65e2..0000000
--- a/org.eclipse.jdt.ui.examples.projects/examples/org/eclipse/jdt/internal/ui/exampleprojects/ExampleProjectMessages.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.ui.exampleprojects;
-
-import java.text.MessageFormat;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-public class ExampleProjectMessages {
-
-	private static final String RESOURCE_BUNDLE= ExampleProjectMessages.class.getName();
-	private static ResourceBundle fgResourceBundle= ResourceBundle.getBundle(RESOURCE_BUNDLE);
-
-	private ExampleProjectMessages() {
-	}
-
-	public static String getString(String key) {
-		try {
-			return fgResourceBundle.getString(key);
-		} catch (MissingResourceException e) {
-			return '!' + key + '!';
-		}
-	}
-	
-	/**
-	 * Gets a string from the resource bundle and formats it with the argument
-	 * 
-	 * @param key	the string used to get the bundle value, must not be null
-	 */
-	public static String getFormattedString(String key, Object arg) {
-		return MessageFormat.format(getString(key), new Object[] { arg });
-	}
-
-
-	/**
-	 * Gets a string from the resource bundle and formats it with arguments
-	 */	
-	public static String getFormattedString(String key, Object[] args) {
-		return MessageFormat.format(getString(key), args);
-	}
-
-
-}
diff --git a/org.eclipse.jdt.ui.examples.projects/examples/org/eclipse/jdt/internal/ui/exampleprojects/ExampleProjectMessages.properties b/org.eclipse.jdt.ui.examples.projects/examples/org/eclipse/jdt/internal/ui/exampleprojects/ExampleProjectMessages.properties
deleted file mode 100644
index 02733fa..0000000
--- a/org.eclipse.jdt.ui.examples.projects/examples/org/eclipse/jdt/internal/ui/exampleprojects/ExampleProjectMessages.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-#########################################
-# (c) Copyright IBM Corp. 2000, 2001.
-# All Rights Reserved.
-#########################################
-
-ExampleProjectCreationWizard.title=New
-ExampleProjectCreationWizard.op_error.title=Project Creation Failed
-ExampleProjectCreationWizard.op_error.message=Project could not be created.
-
-ExampleProjectCreationWizard.overwritequery.title=Overwrite
-ExampleProjectCreationWizard.overwritequery.message=Do you want to overwrite {0}?
-
-
-ExampleProjectCreationOperation.op_desc=Creating example projects...
-ExampleProjectCreationOperation.op_desc_proj=Configuring project...
-
-ExampleProjectCreationWizardPage.error.alreadyexists=Project already exists.
diff --git a/org.eclipse.jdt.ui.examples.projects/examples/org/eclipse/jdt/internal/ui/exampleprojects/ExampleProjectsPlugin.java b/org.eclipse.jdt.ui.examples.projects/examples/org/eclipse/jdt/internal/ui/exampleprojects/ExampleProjectsPlugin.java
deleted file mode 100644
index d96b0f0..0000000
--- a/org.eclipse.jdt.ui.examples.projects/examples/org/eclipse/jdt/internal/ui/exampleprojects/ExampleProjectsPlugin.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.internal.ui.exampleprojects;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IPluginDescriptor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-
-/**
- * The main plugin class to be used in the desktop.
- */
-public class ExampleProjectsPlugin extends AbstractUIPlugin {
-
-	// The shared instance.
-	private static ExampleProjectsPlugin fgPlugin;
-	
-	/**
-	 * The constructor.
-	 */
-	public ExampleProjectsPlugin(IPluginDescriptor descriptor) {
-		super(descriptor);
-		fgPlugin= this;
-	}
-
-
-	/**
-	 * Returns the shared instance.
-	 */
-	public static ExampleProjectsPlugin getDefault() {
-		return fgPlugin;
-	}
-	
-	/**
-	 * Returns the workspace instance.
-	 */
-	public static IWorkspace getWorkspace() {
-		return ResourcesPlugin.getWorkspace();
-	}
-
-	public ImageDescriptor getImageDescriptor(String name) {
-		try {
-			URL url= new URL(getDescriptor().getInstallURL(), name);
-			return ImageDescriptor.createFromURL(url);
-		} catch (MalformedURLException e) {
-			return ImageDescriptor.getMissingImageDescriptor();
-		}
-	}	
-	
-	public static String getPluginId() {
-		return getDefault().getDescriptor().getUniqueIdentifier();
-	}	
-
-
-	public static void log(IStatus status) {
-		getDefault().getLog().log(status);
-	}
-
-
-	public static void log(String message) {
-		log(new Status(IStatus.ERROR, getPluginId(), IStatus.ERROR, message, null));
-	}
-
-
-	public static void log(Throwable e) {
-		log(new Status(IStatus.ERROR, getPluginId(), IStatus.ERROR, "Internal Error", e)); //$NON-NLS-1$
-	}
-
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.examples.projects/icons/full/ctool16/newjprjex_wiz.gif b/org.eclipse.jdt.ui.examples.projects/icons/full/ctool16/newjprjex_wiz.gif
deleted file mode 100644
index 60b2806..0000000
--- a/org.eclipse.jdt.ui.examples.projects/icons/full/ctool16/newjprjex_wiz.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.ui.examples.projects/icons/full/dtool16/newjprjex_wiz.gif b/org.eclipse.jdt.ui.examples.projects/icons/full/dtool16/newjprjex_wiz.gif
deleted file mode 100644
index bb7be20..0000000
--- a/org.eclipse.jdt.ui.examples.projects/icons/full/dtool16/newjprjex_wiz.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.ui.examples.projects/icons/full/etool16/newjprjex_wiz.gif b/org.eclipse.jdt.ui.examples.projects/icons/full/etool16/newjprjex_wiz.gif
deleted file mode 100644
index 2b41e51..0000000
--- a/org.eclipse.jdt.ui.examples.projects/icons/full/etool16/newjprjex_wiz.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.ui.examples.projects/icons/full/wizban/newjprjex_wiz.gif b/org.eclipse.jdt.ui.examples.projects/icons/full/wizban/newjprjex_wiz.gif
deleted file mode 100644
index b5dab66..0000000
--- a/org.eclipse.jdt.ui.examples.projects/icons/full/wizban/newjprjex_wiz.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.ui.examples.projects/plugin.properties b/org.eclipse.jdt.ui.examples.projects/plugin.properties
deleted file mode 100644
index 1cd5269..0000000
--- a/org.eclipse.jdt.ui.examples.projects/plugin.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-#########################################
-# (c) Copyright IBM Corp. 2000, 2001.
-# All Rights Reserved.
-#########################################
-
-# --- string from plugin.xml ----
-
-pluginName=Java Development Tools Example Projects
-providerName=Eclipse.org
-
-JUnitProjectExampleCreationWizard.title=Example Project - JUnit
-JUnitProjectExampleCreationWizard.description=Create a new JUnit project
-
-JUnitProjectExampleCreationWizard.pagetitle=JUnit
-JUnitProjectExampleCreationWizard.pagedescription=Create a Java project containing the JUnit source
-JUnitProjectExampleCreationWizard.label=&Project Name:
-
-JUnitProjectExampleCreationWizard.categoryName=Java
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.examples.projects/plugin.xml b/org.eclipse.jdt.ui.examples.projects/plugin.xml
deleted file mode 100644
index d5d8245..0000000
--- a/org.eclipse.jdt.ui.examples.projects/plugin.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<plugin
-	name="%pluginName"
-	id = "org.eclipse.jdt.ui.examples.projects"
-	version = "2.1.0"
-	provider-name = "%providerName"
-	class="org.eclipse.jdt.internal.ui.exampleprojects.ExampleProjectsPlugin">
-
-   <requires>
-       <import plugin="org.eclipse.core.runtime"/>
-       <import plugin="org.eclipse.core.resources"/>
-       <import plugin="org.eclipse.ui"/>
-   </requires>
-
-   <runtime>
-      <library name="jdtexamples.jar"/>
-   </runtime>
-  
- <extension 
-	point="org.eclipse.ui.newWizards">
-	<category
-	   id = "org.eclipse.jdt.ui.java"
-	   parentCategory="org.eclipse.ui.Examples"
-	   name="%JUnitProjectExampleCreationWizard.categoryName">
-	</category>
-
-	<wizard 
-		id="org.eclipse.jdt.examples.projects.JUnitProjectExampleCreationWizard"
-		name="%JUnitProjectExampleCreationWizard.title"
-		class="org.eclipse.jdt.internal.ui.exampleprojects.ExampleProjectCreationWizard"
-		category="org.eclipse.ui.Examples/org.eclipse.jdt.ui.java"
-		project="true"
-		finalPerspective="org.eclipse.jdt.ui.JavaPerspective"
-		icon="icons/full/ctool16/newjprjex_wiz.gif"
-		banner="icons/full/wizban/newjprjex_wiz.gif">
-		<description>%JUnitProjectExampleCreationWizard.description</description>
-	    <projectsetup
-        	pagetitle="%JUnitProjectExampleCreationWizard.pagetitle"
-        	pagedescription="%JUnitProjectExampleCreationWizard.pagedescription"
-         	label="%JUnitProjectExampleCreationWizard.label"
-        	name="JUnit">
-           <nature id="org.eclipse.jdt.core.javanature"/>
-           <import dest="" src="archive/junit/junit37src.jar"/>
-        </projectsetup>
-      </wizard>	
-</extension>  
-</plugin>
diff --git a/org.eclipse.jdt.ui.examples.projects/scripts/exportplugin.xml b/org.eclipse.jdt.ui.examples.projects/scripts/exportplugin.xml
deleted file mode 100644
index 0df1312..0000000
--- a/org.eclipse.jdt.ui.examples.projects/scripts/exportplugin.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<project name="org.eclipse.search" default="export" basedir="..">
-	<target name="init">
-		<tstamp/>
-		<property name="destdir" value="../../plugin-export" />
-		<property name="plugin"  value="org.eclipse.jdt.ui.examples.projects" />
-		<property name="version"  value="_2.1.0" />
-		<property name="dest"  value="${destdir}/${plugin}${version}" />
-	</target>
-
-	<target name="build" depends="init">
-    	<eclipse.incrementalBuild project="${plugin}" kind="incr"/>
-	</target>
-
-	<target name="export" depends="build">
-		<mkdir dir="${destdir}" />
-		<delete dir="${dest}" />
-		<mkdir dir="${dest}" />
-		<jar 
-			jarfile="${dest}/jdtexamples.jar"
-			basedir="bin"
-		/>
-		<copy file="plugin.xml" todir="${dest}"/>
-		<copy file="plugin.properties" todir="${dest}"/>
-		<copy todir="${dest}/icons">
-			<fileset dir="icons" />
-		</copy>
-			<copy todir="${dest}/archive">
-			<fileset dir="archive" />
-		</copy>
-			<copy todir="${dest}/doc-html">
-			<fileset dir="doc-html" />
-		</copy>
-		<zip zipfile="${dest}/jdtexamplessrc.zip">
-		    <fileset dir="examples" />
-  		</zip>				
-	</target>
-</project>
diff --git a/org.eclipse.jdt.ui.tests.refactoring/.classpath b/org.eclipse.jdt.ui.tests.refactoring/.classpath
deleted file mode 100644
index 7d0d5fc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/.classpath
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-    <classpathentry kind="var" path="JRE_LIB" rootpath="JRE_SRCROOT" sourcepath="JRE_SRC"/>
-    <classpathentry kind="src" path="test cases"/>
-    <classpathentry kind="src" path="/org.eclipse.jdt.ui.tests"/>
-    <classpathentry kind="src" path="/org.junit"/>
-    <classpathentry kind="src" path="/org.eclipse.jdt.ui"/>
-    <classpathentry kind="src" path="/org.eclipse.jdt.core"/>
-    <classpathentry kind="src" path="/org.eclipse.core.resources"/>
-    <classpathentry kind="src" path="/org.eclipse.core.runtime"/>
-    <classpathentry kind="src" path="/org.eclipse.ui"/>
-    <classpathentry kind="src" path="/org.eclipse.core.boot"/>
-    <classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/org.eclipse.jdt.ui.tests.refactoring/.cvsignore b/org.eclipse.jdt.ui.tests.refactoring/.cvsignore
deleted file mode 100644
index c5e82d7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-bin
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/.project b/org.eclipse.jdt.ui.tests.refactoring/.project
deleted file mode 100644
index 1b70574..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/.project
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jdt.ui.tests.refactoring</name>
-	<comment></comment>
-	<projects>
-		<project>org.eclipse.jdt.core</project>
-		<project>org.eclipse.swt</project>
-		<project>org.eclipse.core.runtime</project>
-		<project>org.junit</project>
-		<project>org.eclipse.ui</project>
-		<project>org.eclipse.core.resources</project>
-		<project>org.eclipse.jdt.ui</project>
-		<project>org.eclipse.jdt.ui.tests</project>
-		<project>org.eclipse.core.boot</project>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/org.eclipse.jdt.ui.tests.refactoring/about.html b/org.eclipse.jdt.ui.tests.refactoring/about.html
deleted file mode 100644
index 9db411a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/about.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>20th June, 2002</p>	
-<h3>License</h3>
-<p>Eclipse.org makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
-Common Public License Version 1.0 (&quot;CPL&quot;).  A copy of the CPL is available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>.
-For purposes of the CPL, &quot;Program&quot; will mean the Content.</p>
-
-<h3>Contributions</h3>
-
-<p>If this Content is licensed to you under the terms and conditions of the CPL, any Contributions, as defined in the CPL, uploaded, submitted, or otherwise
-made available to Eclipse.org, members of Eclipse.org and/or the host of Eclipse.org web site, by you that relate to such
-Content are provided under the terms and conditions of the CPL and can be made available to others under the terms of the CPL.</p>
-
-<p>If this Content is licensed to you under license terms and conditions other than the CPL (&quot;Other License&quot;), any modifications, enhancements and/or
-other code and/or documentation (&quot;Modifications&quot;) uploaded, submitted, or otherwise made available to Eclipse.org, members of Eclipse.org and/or the
-host of Eclipse.org, by you that relate to such Content are provided under terms and conditions of the Other License and can be made available
-to others under the terms of the Other License.  In addition, with regard to Modifications for which you are the copyright holder, you are also
-providing the Modifications under the terms and conditions of the CPL and such Modifications can be made available to others under the terms of
-the CPL.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/build.properties b/org.eclipse.jdt.ui.tests.refactoring/build.properties
deleted file mode 100644
index cbc7dcb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/build.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-bin.includes = plugin.xml,\
-               test.xml,\
-               about.html,\
-               resources/,\
-               *.jar
-source.refactoringtests.jar = test cases/
diff --git a/org.eclipse.jdt.ui.tests.refactoring/plugin.xml b/org.eclipse.jdt.ui.tests.refactoring/plugin.xml
deleted file mode 100644
index 4007c8e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/plugin.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<plugin
-   name="Refactoring Tests Pluging"
-   id="org.eclipse.jdt.ui.tests.refactoring"
-   version="2.1.0"
-   provider-name = "Eclipse.org"
-   class="org.eclipse.jdt.ui.tests.refactoring.infra.RefactoringTestPlugin">
-   
-   <requires>
-	  <import plugin="org.junit"/>   
-      <import plugin="org.apache.xerces"/>
-      <import plugin="org.eclipse.core.resources"/>
-      <import plugin="org.eclipse.ui"/>
-      <import plugin="org.eclipse.jdt.core"/>
-      <import plugin="org.eclipse.jdt.ui"/>
-	  <import plugin="org.eclipse.jdt.ui.tests"/>
-   </requires>
-
-  <runtime>
-    <library name="refactoringtests.jar" >
-       <export name = "*"/>
-    </library> 
-  </runtime>
-
-</plugin>
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test0_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test0_in.java
deleted file mode 100644
index 0a37955..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test0_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	private int f;
-	void m(){
-		int g= f;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test0_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test0_out.java
deleted file mode 100644
index 2c46008..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test0_out.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class A{
-	private int f;
-	void m(){
-		int g= getF();
-	}
-	private int getF(){
-		return f;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test1_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test1_in.java
deleted file mode 100644
index b00dd07..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test1_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	private int f;
-	void m(){
-		f= 3;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test1_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test1_out.java
deleted file mode 100644
index f166768..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test1_out.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class A{
-	private int f;
-	void m(){
-		setF(3);
-	}
-	private void setF(int f){
-		this.f= f;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test2_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test2_in.java
deleted file mode 100644
index a0f3096..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test2_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//abstract and make private
-package p;
-class A{
-	public int f;
-	void m(){
-		int g= f;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test2_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test2_out.java
deleted file mode 100644
index 3ec4bc3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test2_out.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//abstract and make private
-package p;
-class A{
-	private int f;
-	void m(){
-		int g= f;
-	}
-	public int getF(){
-		return f;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test3_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test3_in.java
deleted file mode 100644
index 08a9cad..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test3_in.java
+++ /dev/null
@@ -1,14 +0,0 @@
-//abstract and make private
-package p;
-class A{
-	public int f;
-	void m(){
-		int g= f;
-	}
-}
-class B{
-	int m(){
-		A a= new A();
-		return a.f;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test3_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test3_out.java
deleted file mode 100644
index ce9a78a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test3_out.java
+++ /dev/null
@@ -1,17 +0,0 @@
-//abstract and make private
-package p;
-class A{
-	private int f;
-	void m(){
-		int g= getF();
-	}
-	public int getF(){
-		return f;
-	}
-}
-class B{
-	int m(){
-		A a= new A();
-		return a.getF();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test4_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test4_in.java
deleted file mode 100644
index af410b1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test4_in.java
+++ /dev/null
@@ -1,14 +0,0 @@
-//abstract and make private (do not abstract private accesses)
-package p;
-class A{
-	public int f;
-	void m(){
-		int g= f;
-	}
-}
-class B{
-	int m(){
-		A a= new A();
-		return a.f;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test4_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test4_out.java
deleted file mode 100644
index 8ccdfa3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test4_out.java
+++ /dev/null
@@ -1,17 +0,0 @@
-//abstract and make private (do not abstract private accesses)
-package p;
-class A{
-	private int f;
-	void m(){
-		int g= f;
-	}
-	public int getF(){
-		return f;
-	}
-}
-class B{
-	int m(){
-		A a= new A();
-		return a.getF();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test5_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test5_in.java
deleted file mode 100644
index 603871f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test5_in.java
+++ /dev/null
@@ -1,15 +0,0 @@
-//abstract and make private
-package p;
-class A{
-	public int f;
-	void m(){
-		f= f;
-	}
-}
-class B{
-	int m(){
-		A a= new A();
-		a.f= a.f;
-		return a.f;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test5_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test5_out.java
deleted file mode 100644
index 65c7709..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/can/A_test5_out.java
+++ /dev/null
@@ -1,21 +0,0 @@
-//abstract and make private
-package p;
-class A{
-	private int f;
-	void m(){
-		setF(getF());
-	}
-	public int getF(){
-		return f;
-	}
-	public void setF(int f){
-		this.f= f;
-	}
-}
-class B{
-	int m(){
-		A a= new A();
-		a.setF(a.getF());
-		return a.getF();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/cannot/A_testFail0.java b/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/cannot/A_testFail0.java
deleted file mode 100644
index 308c8bd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/AbstractField/cannot/A_testFail0.java
+++ /dev/null
@@ -1,15 +0,0 @@
-//abstract and make private, only getter
-package p;
-class A{
-	public int f;
-	void m(){
-		f= f;
-	}
-}
-class B{
-	int m(){
-		A a= new A();
-		a.f= a.f;
-		return a.f;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test0_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test0_in.java
deleted file mode 100644
index 95a0fe5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test0_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	private void m(int i, int j){
-	}
-	private void foo(){
-		m(1, 2);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test0_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test0_out.java
deleted file mode 100644
index 6b86b75..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test0_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	private void m(int j, int i){
-	}
-	private void foo(){
-		m(2, 1);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test10_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test10_in.java
deleted file mode 100644
index 996a053..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test10_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//change to j k i
-package p;
-class A{
-	private void m(int i, int j, int k){
-	}
-	private void foo(){
-		m(1, 2, 3);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test10_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test10_out.java
deleted file mode 100644
index d050502..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test10_out.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//change to j k i
-package p;
-class A{
-	private void m(int j, int k, int i){
-	}
-	private void foo(){
-		m(2, 3, 1);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test11_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test11_in.java
deleted file mode 100644
index 361a676..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test11_in.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//change to j k i
-package p;
-class A{
-	private void m(int i, int j, int k){
-	}
-	private void foo(){
-		m(3+ 1, 
-			2, 
-				3);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test11_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test11_out.java
deleted file mode 100644
index 6abf7f6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test11_out.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//change to j k i
-package p;
-class A{
-	private void m(int j, int k, int i){
-	}
-	private void foo(){
-		m(2, 
-			3, 
-				3+ 1);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test12_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test12_in.java
deleted file mode 100644
index f1d6726..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test12_in.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//change to j k i
-package p;
-class A{
-	private void m(int i, int j, int k){
-	}
-	private void foo(){
-		m(19, 
-			/*comment*/2000, 
-				3);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test12_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test12_out.java
deleted file mode 100644
index d35e62a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test12_out.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//change to j k i
-package p;
-class A{
-	private void m(int j, int k, int i){
-	}
-	private void foo(){
-		m(2000, 
-			/*comment*/3, 
-				19);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test13_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test13_in.java
deleted file mode 100644
index 963f2ea..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test13_in.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//change to j k i
-package p;
-class A{
-	private void m(int i, int j, int k){
-	}
-	private void foo(){
-		m(19, 
-			/*comment*/2000, 
-				3/*comment2*/);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test13_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test13_out.java
deleted file mode 100644
index ccb3565..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test13_out.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//change to j k i
-package p;
-class A{
-	private void m(int j, int k, int i){
-	}
-	private void foo(){
-		m(2000, 
-			/*comment*/3, 
-				19/*comment2*/);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test14_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test14_in.java
deleted file mode 100644
index b3beea3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test14_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	private int m(int i, int j){
-		return m(m(1, 2), 3);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test14_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test14_out.java
deleted file mode 100644
index 1d856cc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test14_out.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	private int m(int j, int i){
-		return m(3, m(2, 1));
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test15_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test15_in.java
deleted file mode 100644
index 6c68ffb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test15_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	private void m(int i, boolean b){
-	}
-	private void foo(){
-		m(2, true);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test15_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test15_out.java
deleted file mode 100644
index a1aee28..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test15_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	private void m(boolean b, int i){
-	}
-	private void foo(){
-		m(true, 2);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test16_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test16_in.java
deleted file mode 100644
index bd03d2f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test16_in.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-class A{
-	protected void m(int i, boolean b){
-	}
-	private void foo(){
-		m(2, true);
-	}
-}
-class B extends A{
-	protected void m(int j, boolean b){
-		m(6, false);
-		super.m(4, true);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test16_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test16_out.java
deleted file mode 100644
index ca0a136..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test16_out.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-class A{
-	protected void m(boolean b, int i){
-	}
-	private void foo(){
-		m(true, 2);
-	}
-}
-class B extends A{
-	protected void m(boolean b, int j){
-		m(false, 6);
-		super.m(true, 4);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test17_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test17_in.java
deleted file mode 100644
index 8515e6c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test17_in.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package p;
-
-class A1 implements A{
-	public void m(int i, boolean b){
-	}
-	private void foo(){
-		m(2, true);
-	}
-}
-class B extends A1{
-	public void m(int j, boolean b){
-		m(6, false);
-		super.m(4, true);
-	}
-}
-interface A {
-	public void m(int i, boolean b);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test17_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test17_out.java
deleted file mode 100644
index f86e232..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test17_out.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package p;
-
-class A1 implements A{
-	public void m(boolean b, int i){
-	}
-	private void foo(){
-		m(true, 2);
-	}
-}
-class B extends A1{
-	public void m(boolean b, int j){
-		m(false, 6);
-		super.m(true, 4);
-	}
-}
-interface A {
-	public void m(boolean b, int i);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test18_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test18_in.java
deleted file mode 100644
index 38c7930..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test18_in.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package p;
-
-class A1 implements A{
-	public void m(int i, boolean b){
-	}
-	private void foo(){
-		m(2, true);
-	}
-}
-class B extends A1 implements AA{
-	public void m(int j, boolean b){
-		m(6, false);
-		super.m(4, true);
-	}
-}
-interface A {
-	public void m(int i, boolean b);
-}
-interface AA {
-	public void m(int xxx, boolean yyy);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test18_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test18_out.java
deleted file mode 100644
index 5118484..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test18_out.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package p;
-
-class A1 implements A{
-	public void m(boolean b, int i){
-	}
-	private void foo(){
-		m(true, 2);
-	}
-}
-class B extends A1 implements AA{
-	public void m(boolean b, int j){
-		m(false, 6);
-		super.m(true, 4);
-	}
-}
-interface A {
-	public void m(boolean b, int i);
-}
-interface AA {
-	public void m(boolean yyy, int xxx);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test19_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test19_in.java
deleted file mode 100644
index 204f3ef..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test19_in.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-
-class A {
-	public void m(int i, final boolean b){}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test19_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test19_out.java
deleted file mode 100644
index 1db9fb4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test19_out.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-
-class A {
-	public void m(final boolean b, int i){}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test1_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test1_in.java
deleted file mode 100644
index 014a77c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test1_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-	private void m(int i, int j){
-	}
-	private void foo(){
-		m(1,
-		2);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test1_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test1_out.java
deleted file mode 100644
index a94f00c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test1_out.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-	private void m(int j, int i){
-	}
-	private void foo(){
-		m(2,
-		1);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test20_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test20_in.java
deleted file mode 100644
index 73a860d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test20_in.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-
-class A {
-	void m(int a, int b[]){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test20_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test20_out.java
deleted file mode 100644
index 7966618..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test20_out.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-
-class A {
-	void m(int b[], int a){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test21_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test21_in.java
deleted file mode 100644
index 57f3cf7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test21_in.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-
-class A {
-	A(int a, int b){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test21_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test21_out.java
deleted file mode 100644
index 8e163ed..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test21_out.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-
-class A {
-	A(int b, int a){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test22_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test22_in.java
deleted file mode 100644
index 5973c82..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test22_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class A {
-	A(int a, int b){}
-	A(){
-		this(3, 2);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test22_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test22_out.java
deleted file mode 100644
index 27b8cd4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test22_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class A {
-	A(int b, int a){}
-	A(){
-		this(2, 3);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test23_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test23_in.java
deleted file mode 100644
index 9f19fe6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test23_in.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A {
-	A(int a, int b){}
-}
-class B extends A{
-	B(){
-		super(4, 6);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test23_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test23_out.java
deleted file mode 100644
index 0238f01..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test23_out.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A {
-	A(int b, int a){}
-}
-class B extends A{
-	B(){
-		super(6, 4);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test24_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test24_in.java
deleted file mode 100644
index 60bcb15..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test24_in.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A {
-	A(int a, int b){}
-	
-	void f(){
-		new A(1, 4){
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test24_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test24_out.java
deleted file mode 100644
index c1f8b6e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test24_out.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A {
-	A(int b, int a){}
-	
-	void f(){
-		new A(4, 1){
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test25_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test25_in.java
deleted file mode 100644
index b55e8ad..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test25_in.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class Outer{
-	class A {
-		A(int a, int b){}
-	}
-}	
-class Outer2 extends Outer.A{
-	Outer2(){
-		new Outer().super(4, 1);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test25_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test25_out.java
deleted file mode 100644
index f0db900..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test25_out.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class Outer{
-	class A {
-		A(int b, int a){}
-	}
-}	
-class Outer2 extends Outer.A{
-	Outer2(){
-		new Outer().super(1, 4);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test26_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test26_in.java
deleted file mode 100644
index a3467df..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test26_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A {
-	A(int a, int b){}
-	
-	void f(){
-		new A(1, 4);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test26_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test26_out.java
deleted file mode 100644
index 14b9c22..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test26_out.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A {
-	A(int b, int a){}
-	
-	void f(){
-		new A(4, 1);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test2_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test2_in.java
deleted file mode 100644
index fe19e39..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test2_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	private void m(int i, int j){
-		m(i, j);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test2_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test2_out.java
deleted file mode 100644
index 083b2b8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test2_out.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	private void m(int j, int i){
-		m(j, i);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test3_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test3_in.java
deleted file mode 100644
index 4d7f0c1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test3_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	private void m(
-	 int i,
-	 int j){
-		m(i, j);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test3_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test3_out.java
deleted file mode 100644
index 9822034..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test3_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	private void m(
-	 int j,
-	 int i){
-		m(j, i);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test4_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test4_in.java
deleted file mode 100644
index 50b1283..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test4_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	private int m(
-	 int i,
-	 int j){
-		return m(m(i, j), 1);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test4_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test4_out.java
deleted file mode 100644
index e37883a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test4_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	private int m(
-	 int j,
-	 int i){
-		return m(1, m(j, i));
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test5_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test5_in.java
deleted file mode 100644
index 891cabe..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test5_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	private void m(
-	 int i,
-	 int j){
-		m(i, 1 + 2);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test5_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test5_out.java
deleted file mode 100644
index 5d1b0bc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test5_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	private void m(
-	 int j,
-	 int i){
-		m(1 + 2, i);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test6_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test6_in.java
deleted file mode 100644
index 02bf8cd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test6_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//change to k i j
-package p;
-class A{
-	private void m(int i, int j, int k){
-	}
-	private void foo(){
-		m(1, 2, 3);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test6_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test6_out.java
deleted file mode 100644
index 14f2b69..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test6_out.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//change to k i j
-package p;
-class A{
-	private void m(int k, int i, int j){
-	}
-	private void foo(){
-		m(3, 1, 2);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test7_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test7_in.java
deleted file mode 100644
index 35017b4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test7_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//change to i k j 
-package p;
-class A{
-	private void m(int i, int j, int k){
-	}
-	private void foo(){
-		m(1, 2, 3);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test7_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test7_out.java
deleted file mode 100644
index 76e96b6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test7_out.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//change to i k j 
-package p;
-class A{
-	private void m(int i, int k, int j){
-	}
-	private void foo(){
-		m(1, 3, 2);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test8_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test8_in.java
deleted file mode 100644
index 4038ea3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test8_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//change to k j i 
-package p;
-class A{
-	private void m(int i, int j, int k){
-	}
-	private void foo(){
-		m(1, 2, 3);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test8_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test8_out.java
deleted file mode 100644
index 2bf338b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test8_out.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//change to k j i 
-package p;
-class A{
-	private void m(int k, int j, int i){
-	}
-	private void foo(){
-		m(3, 2, 1);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test9_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test9_in.java
deleted file mode 100644
index 2234f30..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test9_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//change to j i k
-package p;
-class A{
-	private void m(int i, int j, int k){
-	}
-	private void foo(){
-		m(1, 2, 3);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test9_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test9_out.java
deleted file mode 100644
index 20fac3e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_test9_out.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//change to j i k
-package p;
-class A{
-	private void m(int j, int i, int k){
-	}
-	private void foo(){
-		m(2, 1, 3);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd28_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd28_in.java
deleted file mode 100644
index dbda6a7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd28_in.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	private void m(int i){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd28_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd28_out.java
deleted file mode 100644
index 888d1b5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd28_out.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	private void m(int i, int x){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd29_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd29_in.java
deleted file mode 100644
index dbda6a7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd29_in.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	private void m(int i){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd29_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd29_out.java
deleted file mode 100644
index ed5f756..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd29_out.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	private void m(int x, int i){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd30_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd30_in.java
deleted file mode 100644
index ab989d8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd30_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	private void m(int i){
-		m(i);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd30_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd30_out.java
deleted file mode 100644
index 7311e87..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd30_out.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	private void m(int i, int x){
-		m(i, 0);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd31_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd31_in.java
deleted file mode 100644
index 203fe15..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd31_in.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-class A{
-	void m(int i){
-		m(i);
-	}
-}
-class B extends A{
-	void m(int j){
-		super.m(j);
-		this.m(j);
-		m(j);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd31_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd31_out.java
deleted file mode 100644
index a6e778c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd31_out.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-class A{
-	void m(int i, int x){
-		m(i, 0);
-	}
-}
-class B extends A{
-	void m(int j, int x){
-		super.m(j, 0);
-		this.m(j, 0);
-		m(j, 0);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd32_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd32_in.java
deleted file mode 100644
index ab989d8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd32_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	private void m(int i){
-		m(i);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd32_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd32_out.java
deleted file mode 100644
index e03fab8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd32_out.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	private void m(int x, int i){
-		m(0, i);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd33_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd33_in.java
deleted file mode 100644
index ca119d5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd33_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	private void m(){
-		m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd33_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd33_out.java
deleted file mode 100644
index eb3b1dc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAdd33_out.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	private void m(int x){
-		m(0);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAddReorderRename34_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAddReorderRename34_in.java
deleted file mode 100644
index dd3f8c2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAddReorderRename34_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	private int m(int iii, boolean j){
-		return m(m(iii, j), false);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAddReorderRename34_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAddReorderRename34_out.java
deleted file mode 100644
index 7c82efc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAddReorderRename34_out.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	private int m(boolean jj, Object x, int i){
-		return m(false, null, m(jj, null, i));
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll35_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll35_in.java
deleted file mode 100644
index 2a9c8b4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll35_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//only visibility change - to public
-class A{
-	private int m(int iii, boolean j){
-		return m(m(iii, j), false);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll35_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll35_out.java
deleted file mode 100644
index cc2fa7b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll35_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//only visibility change - to public
-class A{
-	public int m(int iii, boolean j){
-		return m(m(iii, j), false);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll36_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll36_in.java
deleted file mode 100644
index 7ee41c8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll36_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//only visibility change - to private
-class A{
-	public int m(int iii, boolean j){
-		return m(m(iii, j), false);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll36_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll36_out.java
deleted file mode 100644
index 2ef5a29..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll36_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//only visibility change - to private
-class A{
-	private int m(int iii, boolean j){
-		return m(m(iii, j), false);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll37_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll37_in.java
deleted file mode 100644
index a847439..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll37_in.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-//to protected
-class A{
-	public int m(int iii, boolean j){
-		return m(m(iii, j), false);
-	}
-}
-class B extends A{
-	public int m(int iii, boolean j){
-		return m(m(iii, j), false);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll37_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll37_out.java
deleted file mode 100644
index df49d85..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll37_out.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-//to protected
-class A{
-	protected int m(int iii, boolean j){
-		return m(m(iii, j), false);
-	}
-}
-class B extends A{
-	protected int m(int iii, boolean j){
-		return m(m(iii, j), false);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll38_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll38_in.java
deleted file mode 100644
index 1fb09e8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll38_in.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-//to protected
-class A{
-	int m(int iii, boolean j){
-		return m(m(iii, j), false);
-	}
-}
-class B extends A{
-	public int m(int iii, boolean j){
-		return m(m(iii, j), false);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll38_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll38_out.java
deleted file mode 100644
index 00f60b6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll38_out.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-//to protected
-class A{
-	protected int m(int iii, boolean j){
-		return m(m(iii, j), false);
-	}
-}
-class B extends A{
-	public int m(int iii, boolean j){
-		return m(m(iii, j), false);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll39_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll39_in.java
deleted file mode 100644
index f4e0509..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll39_in.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-//to public
-class A{
-	protected int m(int iii, boolean j){
-		return m(m(iii, j), false);
-	}
-}
-class B extends A{
-	protected int m(int iii, boolean j){
-		return m(m(iii, j), false);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll39_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll39_out.java
deleted file mode 100644
index 6b70308..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll39_out.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-//to public
-class A{
-	public int m(boolean jj, Object x, int i){
-		return m(false, null, m(jj, null, i));
-	}
-}
-class B extends A{
-	public int m(boolean j, Object x, int iii){
-		return m(false, null, m(j, null, iii));
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testRenameReorder26_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testRenameReorder26_in.java
deleted file mode 100644
index 592b8fc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testRenameReorder26_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-class A{
-	private void m(boolean y, int a){
-        m(y, a);
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testRenameReorder26_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testRenameReorder26_out.java
deleted file mode 100644
index c3db1fa..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testRenameReorder26_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-class A{
-	private void m(int bb, boolean zzz){
-        m(bb, zzz);
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testRenameReorder27_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testRenameReorder27_in.java
deleted file mode 100644
index 592b8fc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testRenameReorder27_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-class A{
-	private void m(boolean y, int a){
-        m(y, a);
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testRenameReorder27_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testRenameReorder27_out.java
deleted file mode 100644
index e6204fc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testRenameReorder27_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-class A{
-	private void m(int a, boolean yyy){
-        m(a, yyy);
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/cannotModify/A_testFail0.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/cannotModify/A_testFail0.java
deleted file mode 100644
index 4d043c4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/cannotModify/A_testFail0.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-	private native int m(int i, int j);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/cannotModify/A_testFail1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/cannotModify/A_testFail1.java
deleted file mode 100644
index 4d043c4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/cannotModify/A_testFail1.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-	private native int m(int i, int j);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/cannotModify/A_testFailAdd2.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/cannotModify/A_testFailAdd2.java
deleted file mode 100644
index abf6cbf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/cannotModify/A_testFailAdd2.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-//name clash in subclass
-class A{
-	int m(int i){
-	}
-}
-class B extends A{
-	int m(int x){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/cannotModify/A_testFailAdd3.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/cannotModify/A_testFailAdd3.java
deleted file mode 100644
index 0b79feb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/cannotModify/A_testFailAdd3.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-	int m(int i){
-	}
-}
-class B extends A{
-	int m(int i){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/cannotModify/A_testFailAdd4.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/cannotModify/A_testFailAdd4.java
deleted file mode 100644
index 49def5e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/cannotModify/A_testFailAdd4.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-//name clash in subclass
-class A{
-	int m(int i){
-	}
-}
-class B extends A{
-	int m(int i){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/CopyPackageChange/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/CopyPackageChange/A.java
deleted file mode 100644
index e69de29..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/CopyPackageChange/A.java
+++ /dev/null
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test0/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test0/in/A.java
deleted file mode 100644
index 58ca9a2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test0/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-	int i, j;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test0/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test0/out/A.java
deleted file mode 100644
index 4609058..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test0/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-	int j;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test1/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test1/in/A.java
deleted file mode 100644
index 62dc967..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test1/in/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test1/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test1/out/A.java
deleted file mode 100644
index 8d6eb57..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test1/out/A.java
+++ /dev/null
@@ -1 +0,0 @@
-package p;
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test10/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test10/in/A.java
deleted file mode 100644
index 0a6562d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test10/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	static {
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test10/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test10/out/A.java
deleted file mode 100644
index 62dc967..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test10/out/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test11/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test11/in/A.java
deleted file mode 100644
index 4fa6605..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test11/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-import java.util.List;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test11/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test11/out/A.java
deleted file mode 100644
index 62dc967..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test11/out/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test12/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test12/in/A.java
deleted file mode 100644
index 3b2b214..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test12/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	class B{
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test12/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test12/out/A.java
deleted file mode 100644
index 62dc967..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test12/out/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test13/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test13/in/A.java
deleted file mode 100644
index 3b2b214..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test13/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	class B{
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test13/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test13/out/A.java
deleted file mode 100644
index 8d6eb57..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test13/out/A.java
+++ /dev/null
@@ -1 +0,0 @@
-package p;
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test14/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test14/in/A.java
deleted file mode 100644
index 3b2b214..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test14/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	class B{
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test14/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test14/out/A.java
deleted file mode 100644
index e69de29..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test14/out/A.java
+++ /dev/null
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test15/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test15/in/A.java
deleted file mode 100644
index 4be6d7b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test15/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-class A{
-	int field;
-	public int getField(){
-		return field;
-	}
-
-	public void setField(int field){
-		this.field= field;
-	}
-	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test15/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test15/out/A.java
deleted file mode 100644
index 6291b80..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test15/out/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test16/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test16/in/A.java
deleted file mode 100644
index 4b4ee0d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test16/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-/**
- */
-class Test{
-}/**
- */
-class Test1{
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test16/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test16/out/A.java
deleted file mode 100644
index f6c2f03..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test16/out/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/**
- */
-class Test1{
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test17/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test17/in/A.java
deleted file mode 100644
index bb37e19..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test17/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A {
-
-	void f(){}
-	
-	/**
-	 * 
-	 */
-	void fs(){}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test17/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test17/out/A.java
deleted file mode 100644
index 48f86a9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test17/out/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A {
-
-	/**
-	 * 
-	 */
-	void fs(){}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test18/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test18/in/A.java
deleted file mode 100644
index 7d18eda..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test18/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A {
-	/**
-	 */
-	void fs(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test18/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test18/out/A.java
deleted file mode 100644
index 688a6d9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test18/out/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A {
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test2/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test2/in/A.java
deleted file mode 100644
index 8a5e8de..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test2/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-	int i;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test2/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test2/out/A.java
deleted file mode 100644
index 62dc967..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test2/out/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test3/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test3/in/A.java
deleted file mode 100644
index 58ca9a2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test3/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-	int i, j;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test3/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test3/out/A.java
deleted file mode 100644
index 62dc967..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test3/out/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test4/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test4/in/A.java
deleted file mode 100644
index 343c51a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test4/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-	int i, j, k;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test4/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test4/out/A.java
deleted file mode 100644
index 4609058..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test4/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-	int j;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test5/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test5/in/A.java
deleted file mode 100644
index 58ca9a2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test5/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-	int i, j;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test5/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test5/out/A.java
deleted file mode 100644
index 8a5e8de..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test5/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-	int i;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test6/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test6/in/A.java
deleted file mode 100644
index 3ada0ea..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test6/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-	int i= 0, j= 1;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test6/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test6/out/A.java
deleted file mode 100644
index c445aed..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test6/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-	int i= 0;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test7/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test7/in/A.java
deleted file mode 100644
index 62dc967..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test7/in/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test7/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test7/out/A.java
deleted file mode 100644
index bd45174..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test7/out/A.java
+++ /dev/null
@@ -1,2 +0,0 @@
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test8/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test8/in/A.java
deleted file mode 100644
index 1bebe9c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test8/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-	void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test8/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test8/out/A.java
deleted file mode 100644
index 62dc967..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test8/out/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test9/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test9/in/A.java
deleted file mode 100644
index 1193f4c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test9/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	{
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test9/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test9/out/A.java
deleted file mode 100644
index 62dc967..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReference/test9/out/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_test0_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_test0_in.java
deleted file mode 100644
index 1bebe9c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_test0_in.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-	void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_test0_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_test0_out.java
deleted file mode 100644
index 62dc967..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_test0_out.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_test1_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_test1_in.java
deleted file mode 100644
index 5390df5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_test1_in.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	void m(){}
-	void n(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_test1_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_test1_out.java
deleted file mode 100644
index da8429d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_test1_out.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-	void n(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_test2_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_test2_in.java
deleted file mode 100644
index 5390df5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_test2_in.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	void m(){}
-	void n(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_test2_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_test2_out.java
deleted file mode 100644
index 62dc967..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_test2_out.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_test3_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_test3_in.java
deleted file mode 100644
index c8704de..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_test3_in.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	void m(){};
-	void n(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_test3_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_test3_out.java
deleted file mode 100644
index da8429d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_test3_out.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-	void n(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_test4_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_test4_in.java
deleted file mode 100644
index 9426c65..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_test4_in.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	void m(){}; //comment
-	void n(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_test4_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_test4_out.java
deleted file mode 100644
index da8429d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_test4_out.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-	void n(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_testField0_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_testField0_in.java
deleted file mode 100644
index ed3e890..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_testField0_in.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-	int f;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_testField0_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_testField0_out.java
deleted file mode 100644
index 62dc967..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_testField0_out.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_testField1_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_testField1_in.java
deleted file mode 100644
index 82b7597..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_testField1_in.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	int f;
-	int g;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_testField1_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_testField1_out.java
deleted file mode 100644
index 4a8aea4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_testField1_out.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-	int g;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_testField2_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_testField2_in.java
deleted file mode 100644
index 21b6e54..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_testField2_in.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	int f;
-	int ff;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_testField2_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_testField2_out.java
deleted file mode 100644
index 62dc967..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_testField2_out.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_testField3_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_testField3_in.java
deleted file mode 100644
index 339fc4c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_testField3_in.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	int f;
-	void n(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_testField3_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_testField3_out.java
deleted file mode 100644
index da8429d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_testField3_out.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-	void n(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_testField4_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_testField4_in.java
deleted file mode 100644
index 7e1f076..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_testField4_in.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	int f; //comment
-	void n(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_testField4_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_testField4_out.java
deleted file mode 100644
index da8429d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/DeleteSourceReferenceEdit/A_testField4_out.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-	void n(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test0_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test0_in.java
deleted file mode 100644
index 34e6051..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test0_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-//5, 16 -> 5, 17   AllowLoadtime == false
-package p;
-class A {
-	void f() {
-		int i= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test0_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test0_out.java
deleted file mode 100644
index 942e111..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test0_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//5, 16 -> 5, 17   AllowLoadtime == false
-package p;
-class A {
-	private static final int CONSTANT= 0;
-	void f() {
-		int i= CONSTANT;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test1_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test1_in.java
deleted file mode 100644
index a9eea96..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test1_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-//5, 16 -> 5, 21   AllowLoadtime == false
-package p;
-class A {
-	void f() {
-		int i= 1 + 2;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test1_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test1_out.java
deleted file mode 100644
index 235a882..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test1_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//5, 16 -> 5, 21   AllowLoadtime == false
-package p;
-class A {
-	private static final int CONSTANT= 1 + 2;
-	void f() {
-		int i= CONSTANT;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test2_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test2_in.java
deleted file mode 100644
index 66ad43a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test2_in.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//8, 16 -> 8, 27   AllowLoadtime == false
-package p;
-class A {
-	static final int foo= 1;
-	static final int bar= 2;
-	static final int baz= 3;
-	void f() {
-		int i= 1 + 3 * bar;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test2_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test2_out.java
deleted file mode 100644
index 87cffcf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test2_out.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//8, 16 -> 8, 27   AllowLoadtime == false
-package p;
-class A {
-	static final int foo= 1;
-	static final int bar= 2;
-	private static final int CONSTANT= 1 + 3 * bar;
-	static final int baz= 3;
-	void f() {
-		int i= CONSTANT;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test3_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test3_in.java
deleted file mode 100644
index d049fb1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test3_in.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//8, 16 -> 8, 27   AllowLoadtime == false
-package p;
-class A {
-	static final int foo= 1;
-	static final int bar= 2;
-	static final int baz= foo * (1+3*bar);
-	void f() {
-		int i= 1 + 3 * bar;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test3_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test3_out.java
deleted file mode 100644
index 62aeeb6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test3_out.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//8, 16 -> 8, 27   AllowLoadtime == false
-package p;
-class A {
-	static final int foo= 1;
-	static final int bar= 2;
-	private static final int CONSTANT= 1 + 3 * bar;
-	static final int baz= foo * (CONSTANT);
-	void f() {
-		int i= CONSTANT;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test4_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test4_in.java
deleted file mode 100644
index 9eb2244..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test4_in.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//5, 23 -> 5, 34   AllowLoadtime == false
-package p;
-class A {
-	static void f() {
-		int i= 2*(1 + 2 * b() * 5);
-		System.out.println(i);
-		System.out.println(2*b     ()*5  +1);
-	}
-	static int b() {
-		return 4;	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test4_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test4_out.java
deleted file mode 100644
index bf3031a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test4_out.java
+++ /dev/null
@@ -1,13 +0,0 @@
-//5, 23 -> 5, 34   AllowLoadtime == false
-package p;
-class A {
-	private static final int CONSTANT= 2 * b() * 5;
-	static void f() {
-		int i= 2*(1 + CONSTANT);
-		System.out.println(i);
-		System.out.println(CONSTANT  +1);
-	}
-	static int b() {
-		return 4;	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test5_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test5_in.java
deleted file mode 100644
index b871560..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test5_in.java
+++ /dev/null
@@ -1,15 +0,0 @@
-//11, 20 -> 11, 26   AllowLoadtime == true
-package p;
-
-class R {
-	static int rG() {
-		return 2;
-	}
-
-	static class S extends R {
-		int f(){
-			int d= R.rG();
-			return d;
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test5_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test5_out.java
deleted file mode 100644
index cc45ec7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test5_out.java
+++ /dev/null
@@ -1,16 +0,0 @@
-//11, 20 -> 11, 26   AllowLoadtime == true
-package p;
-
-class R {
-	static int rG() {
-		return 2;
-	}
-
-	static class S extends R {
-		private static final int CONSTANT= R.rG();
-		int f(){
-			int d= CONSTANT;
-			return d;
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test6_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test6_in.java
deleted file mode 100644
index 4d28bf7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test6_in.java
+++ /dev/null
@@ -1,17 +0,0 @@
-//13, 20 -> 13, 35   AllowLoadtime == true
-package p;
-
-class R {
-	public static R instance= new R();
-	
-	int rF() {
-		return 1;
-	}
-	
-	static class S extends R {
-		int f(){
-			int d= R.instance.rF();		
-			return 0;	
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test6_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test6_out.java
deleted file mode 100644
index 931e69e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test6_out.java
+++ /dev/null
@@ -1,18 +0,0 @@
-//13, 20 -> 13, 35   AllowLoadtime == true
-package p;
-
-class R {
-	public static R instance= new R();
-	
-	int rF() {
-		return 1;
-	}
-	
-	static class S extends R {
-		private static final int CONSTANT= R.instance.rF();
-		int f(){
-			int d= CONSTANT;		
-			return 0;	
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test7_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test7_in.java
deleted file mode 100644
index 001007d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test7_in.java
+++ /dev/null
@@ -1,15 +0,0 @@
-//12, 20 -> 12, 28   AllowLoadtime == true
-package p;
-
-
-class R {
-	static int rG() {
-		return 2;	
-	}
-	
-	static class S extends R {
-		void f(){
-			int d= p.R.rG();	
-		}
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test7_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test7_out.java
deleted file mode 100644
index 82d01e1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test7_out.java
+++ /dev/null
@@ -1,16 +0,0 @@
-//12, 20 -> 12, 28   AllowLoadtime == true
-package p;
-
-
-class R {
-	static int rG() {
-		return 2;	
-	}
-	
-	static class S extends R {
-		private static final int CONSTANT= p.R.rG();
-		void f(){
-			int d= CONSTANT;	
-		}
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test8_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test8_in.java
deleted file mode 100644
index 59610d6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test8_in.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//8, 16 -> 8, 22   AllowLoadtime == true
-package p;
-
-class S {
-	static int s;
-
-	int f() {
-		return 23 * s;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test8_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test8_out.java
deleted file mode 100644
index 186eeb7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test8_out.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//8, 16 -> 8, 22   AllowLoadtime == true
-package p;
-
-class S {
-	static int s;
-	private static final int CONSTANT= 23 * s;
-
-	int f() {
-		return CONSTANT;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail0.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail0.java
deleted file mode 100644
index eaa2233..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail0.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//8, 16 -> 8, 21   AllowLoadtime == true
-package p;
-
-static class S {
-	int s;
-	
-	void f(){
-		int l= s + 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail1.java
deleted file mode 100644
index bc91ca4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail1.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//8, 16 -> 8, 26   AllowLoadtime == true
-package p;
-
-class S {
-	int s;
-		
-	int f() {
-		return 23 *this.s;	
-	}
-}	
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail10.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail10.java
deleted file mode 100644
index ae366f7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail10.java
+++ /dev/null
@@ -1,19 +0,0 @@
-//15, 20 -> 15, 37   AllowLoadtime == false
-package p;
-
-class R {
-	static R instance() {
-		return null;
-	}
-	
-	int rF() {
-		return 1;	
-	}
-	
-	static class S extends R {
-		int f(){
-			int d= R.instance().rF();		
-			return 0;	
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail11.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail11.java
deleted file mode 100644
index 77096bd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail11.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//8, 16 -> 8, 22   AllowLoadtime == false
-package p;
-
-class S {
-	static int s;
-		
-	int f() {
-		return 23 * s;	
-	}
-}	
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail12.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail12.java
deleted file mode 100644
index 1ffe9d8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail12.java
+++ /dev/null
@@ -1,5 +0,0 @@
-//4, 7 -> 4, 8   AllowLoadtime == true
-package p;
-
-class S {
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail13.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail13.java
deleted file mode 100644
index af9a246..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail13.java
+++ /dev/null
@@ -1,5 +0,0 @@
-//2, 9 -> 2, 10   AllowLoadtime == true
-package p;
-
-class S {
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail14.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail14.java
deleted file mode 100644
index 2d28a7a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail14.java
+++ /dev/null
@@ -1,6 +0,0 @@
-//5, 9 -> 5, 11   AllowLoadtime == true
-package p;
-
-class S {
-	int i= 1;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail15.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail15.java
deleted file mode 100644
index 062140a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail15.java
+++ /dev/null
@@ -1,6 +0,0 @@
-//5, 10 -> 5, 13   AllowLoadtime == true
-package p;
-
-class S {
-	int i= 1;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail2.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail2.java
deleted file mode 100644
index 01cc4e1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail2.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//9, 20 -> 9, 21   AllowLoadtime == true
-package p;
-
-class R {
-	int r;
-	
-	static class S extends R {
-		void f(){
-			int n= r;
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail3.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail3.java
deleted file mode 100644
index 778b26d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail3.java
+++ /dev/null
@@ -1,15 +0,0 @@
-//9, 18 -> 9, 25   AllowLoadtime == true
-package p;
-
-class R {
-	int r;
-
-	static class S extends R {
-		String f() {
-			fish(super.r);
-			return null;	
-		}
-		static void fish(int parm) {
-		}
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail4.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail4.java
deleted file mode 100644
index 08045d7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail4.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//6, 16 -> 6, 20   AllowLoadtime == true
-package p;
-
-class S {
-	int f(){
-		return f2();	
-	}
-	int f2() {
-		return 0;
-	}
-}	
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail5.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail5.java
deleted file mode 100644
index d55f27e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail5.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//9, 16 -> 9, 25   AllowLoadtime == true
-package p;
-
-class S {
-	public int f2() {
-		return 1;	
-	}
-	void f(){
-		int i= this.f2();	
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail6.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail6.java
deleted file mode 100644
index 0e12a9c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail6.java
+++ /dev/null
@@ -1,15 +0,0 @@
-//11, 20 -> 11, 24   AllowLoadtime == true
-package p;
-class R {
-	int rF() {
-		return 1;
-	}
-	
-	
-	static class S extends R {
-		int f(){
-			int t= rF();
-			return t * t;
-		}	
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail7.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail7.java
deleted file mode 100644
index 836f07d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail7.java
+++ /dev/null
@@ -1,14 +0,0 @@
-//11, 20 -> 11, 34   AllowLoadtime == true
-package p;
-
-class R {
-	int rF() {
-		return 1;
-	}
-	
-	static class S extends R {
-		void foo() {
-			int u= super.rF() + 1;	
-		}
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail8.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail8.java
deleted file mode 100644
index de7abcc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail8.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//9, 16 -> 9, 28   AllowLoadtime == true
-package p;
-
-class S {
-	public static S instance= new S();
-	
-	int f(){
-
-		int v= instance.f();
-		return 0;	
-	}
-}	
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail9.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail9.java
deleted file mode 100644
index 667ed37..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/cannotExtract/A_testFail9.java
+++ /dev/null
@@ -1,13 +0,0 @@
-//10, 28 -> 10, 44   AllowLoadtime == true
-package p;
-
-class S {
-	public static S instance= new S();
-	
-	int s;
-	
-	int f() {
-		System.out.println(S.instance.s + 1);
-		return 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test/in/A.java
deleted file mode 100644
index e69de29..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test/in/A.java
+++ /dev/null
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test/out/A.java
deleted file mode 100644
index e69de29..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test/out/A.java
+++ /dev/null
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test0/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test0/in/A.java
deleted file mode 100644
index 6291b80..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test0/in/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test0/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test0/out/A.java
deleted file mode 100644
index e773ba6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test0/out/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A implements I{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test0/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test0/out/I.java
deleted file mode 100644
index 6bf3b7a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test0/out/I.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test1/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test1/in/A.java
deleted file mode 100644
index dd87960..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test1/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-	public void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test1/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test1/out/A.java
deleted file mode 100644
index 8a36a2b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test1/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A implements I{
-	public void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test1/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test1/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test1/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test10/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test10/in/A.java
deleted file mode 100644
index 6641992..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test10/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-	public final void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test10/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test10/out/A.java
deleted file mode 100644
index eb1b77e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test10/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A implements I{
-	public final void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test10/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test10/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test10/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test11/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test11/in/A.java
deleted file mode 100644
index 2b34eb5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test11/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-abstract class A{
-	abstract public void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test11/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test11/out/A.java
deleted file mode 100644
index b29a790..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test11/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-abstract class A implements I{
-	abstract public void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test11/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test11/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test11/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test12/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test12/in/A.java
deleted file mode 100644
index 5e21e43..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test12/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	public void m(){}
-	private void f(){
-		A a= new A();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test12/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test12/out/A.java
deleted file mode 100644
index 41cb3cd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test12/out/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A implements I{
-	public void m(){}
-	private void f(){
-		I a= new A();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test12/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test12/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test12/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test13/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test13/in/A.java
deleted file mode 100644
index 12e1ef3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test13/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A extends Object implements Cloneable{
-	public void m(){
-	}
-	protected Object clone() throws CloneNotSupportedException {
-		return super.clone();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test13/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test13/out/A.java
deleted file mode 100644
index be2224a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test13/out/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A extends Object implements Cloneable, I{
-	public void m(){
-	}
-	protected Object clone() throws CloneNotSupportedException {
-		return super.clone();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test13/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test13/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test13/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test14/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test14/in/A.java
deleted file mode 100644
index 5a5dfce..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test14/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A {
-	public void m(){}
-	void f(){
-		A a= new A();
-		a.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test14/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test14/out/A.java
deleted file mode 100644
index a4a2709..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test14/out/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A implements I {
-	public void m(){}
-	void f(){
-		I a= new A();
-		a.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test14/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test14/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test14/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test15/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test15/in/A.java
deleted file mode 100644
index 5a5e889..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test15/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A {
-	public void m(){}
-	public void m1(){}
-	void f(){
-		A a= new A();
-		a.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test15/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test15/out/A.java
deleted file mode 100644
index 857dece..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test15/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	public void m(){}
-	public void m1(){}
-	void f(){
-		I a= new A();
-		a.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test15/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test15/out/I.java
deleted file mode 100644
index c9ea053..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test15/out/I.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-	void m1();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test16/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test16/in/A.java
deleted file mode 100644
index 25c6492..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test16/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A {
-	public void m(){}
-	public void m1(){}
-	void f(){
-		A a= new A();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test16/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test16/out/A.java
deleted file mode 100644
index 2a08fb9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test16/out/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A implements I {
-	public void m(){}
-	public void m1(){}
-	void f(){
-		I a= new A();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test16/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test16/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test16/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test17/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test17/in/A.java
deleted file mode 100644
index f8b6018..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test17/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A {
-	public void m(){}
-	public void m1(){}
-	void f(){
-		A a= new A();
-		a.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test17/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test17/out/A.java
deleted file mode 100644
index 1e3a413..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test17/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	public void m(){}
-	public void m1(){}
-	void f(){
-		A a= new A();
-		a.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test17/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test17/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test17/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test18/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test18/in/A.java
deleted file mode 100644
index ef848e1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test18/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A {
-	public void m(){}
-	public void m1(){}
-	void f(){
-		A a= new A();
-		a.m();
-
-		A a1= new A();
-		a1.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test18/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test18/out/A.java
deleted file mode 100644
index f175b95..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test18/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A implements I {
-	public void m(){}
-	public void m1(){}
-	void f(){
-		I a= new A();
-		a.m();
-
-		A a1= new A();
-		a1.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test18/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test18/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test18/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test19/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test19/in/A.java
deleted file mode 100644
index 465ce7d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test19/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A {
-	public void m(){}
-	public void m1(){}
-	void f(){
-		A a= new A(), a1 = new A();
-		a.m();
-
-		a1.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test19/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test19/out/A.java
deleted file mode 100644
index 66eebc6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test19/out/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A implements I {
-	public void m(){}
-	public void m1(){}
-	void f(){
-		A a= new A(), a1 = new A();
-		a.m();
-
-		a1.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test19/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test19/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test19/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test2/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test2/in/A.java
deleted file mode 100644
index 8cde1c8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test2/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-import java.util.List;
-
-class A{
-	public List m(){return null;}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test2/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test2/out/A.java
deleted file mode 100644
index b0e0bdf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test2/out/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-import java.util.List;
-
-class A implements I{
-	public List m(){return null;}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test2/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test2/out/I.java
deleted file mode 100644
index 5273f15..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test2/out/I.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-import java.util.List;
-/** typecomment template*/
-interface I {
-	List m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test20/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test20/in/A.java
deleted file mode 100644
index 465ce7d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test20/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A {
-	public void m(){}
-	public void m1(){}
-	void f(){
-		A a= new A(), a1 = new A();
-		a.m();
-
-		a1.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test20/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test20/out/A.java
deleted file mode 100644
index f92f6a6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test20/out/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A implements I {
-	public void m(){}
-	public void m1(){}
-	void f(){
-		I a= new A(), a1 = new A();
-		a.m();
-
-		a1.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test20/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test20/out/I.java
deleted file mode 100644
index c9ea053..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test20/out/I.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-	void m1();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test21/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test21/in/A.java
deleted file mode 100644
index 097d162..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test21/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A extends Exception {
-	public void m() {}
-	void e() throws A{}
-	void g() {
-		try{
-			e();
-		} catch (A a){
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test21/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test21/out/A.java
deleted file mode 100644
index e5b9c3f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test21/out/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A extends Exception implements I {
-	public void m() {}
-	void e() throws A{}
-	void g() {
-		try{
-			e();
-		} catch (A a){
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test21/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test21/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test21/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test22/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test22/in/A.java
deleted file mode 100644
index ccfb484..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test22/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	Class g() {
-		return A.class;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test22/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test22/out/A.java
deleted file mode 100644
index b0fcab7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test22/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	Class g() {
-		return A.class;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test22/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test22/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test22/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test23/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test23/in/A.java
deleted file mode 100644
index 6a11d58..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test23/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	void g() {
-		A a= (A)new A();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test23/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test23/out/A.java
deleted file mode 100644
index fe659e1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test23/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	void g() {
-		I a= (I)new A();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test23/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test23/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test23/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test24/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test24/in/A.java
deleted file mode 100644
index b62808f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test24/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	void g() {
-		A a= (A)new A();
-		((A)this).m1();
-		((A)this).m();
-		(((A)this)).m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test24/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test24/out/A.java
deleted file mode 100644
index 2af8159..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test24/out/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void g() {
-		I a= (I)new A();
-		((A)this).m1();
-		((I)this).m();
-		(((I)this)).m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test24/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test24/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test24/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test25/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test25/in/A.java
deleted file mode 100644
index e68557f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test25/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	protected A g() {
-		return this;	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test25/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test25/out/A.java
deleted file mode 100644
index 689cc1a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test25/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	protected I g() {
-		return this;	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test25/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test25/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test25/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test26/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test26/in/A.java
deleted file mode 100644
index b1a453c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test26/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	protected A g() {
-		g().m();
-		return this;	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test26/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test26/out/A.java
deleted file mode 100644
index 9bb324d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test26/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	protected I g() {
-		g().m();
-		return this;	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test26/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test26/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test26/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test27/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test27/in/A.java
deleted file mode 100644
index 5b3c42a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test27/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	protected A g() {
-		g().m1();
-		return this;	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test27/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test27/out/A.java
deleted file mode 100644
index 75151ac..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test27/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	protected A g() {
-		g().m1();
-		return this;	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test27/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test27/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test27/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test28/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test28/in/A.java
deleted file mode 100644
index 034048d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test28/in/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	protected A g() {
-		return this;	
-	}
-}
-class A1 extends A{
-	protected A g() {
-		return this;	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test28/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test28/out/A.java
deleted file mode 100644
index ea612d0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test28/out/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	protected I g() {
-		return this;	
-	}
-}
-class A1 extends A{
-	protected I g() {
-		return this;	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test28/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test28/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test28/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test29/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test29/in/A.java
deleted file mode 100644
index e35e769..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test29/in/A.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	protected A g() {
-		return this;	
-	}
-}
-class A1 extends A{
-	protected A g() {
-		g().m1();
-		return this;	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test29/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test29/out/A.java
deleted file mode 100644
index 2792500..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test29/out/A.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	protected A g() {
-		return this;	
-	}
-}
-class A1 extends A{
-	protected A g() {
-		g().m1();
-		return this;	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test29/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test29/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test29/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test3/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test3/in/A.java
deleted file mode 100644
index 8dc8224..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test3/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-import java.util.ArrayList;
-import java.util.List;
-
-class A{
-	public void m(){
-		List list= new ArrayList();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test3/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test3/out/A.java
deleted file mode 100644
index c598efa..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test3/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-import java.util.ArrayList;
-import java.util.List;
-
-class A implements I{
-	public void m(){
-		List list= new ArrayList();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test3/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test3/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test3/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test30/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test30/in/A.java
deleted file mode 100644
index bd95d6d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test30/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	void g() {
-		f((A)this);
-	}
-	A f(A a){
-		f(a).m1();
-		return a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test30/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test30/out/A.java
deleted file mode 100644
index 10362fa..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test30/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void g() {
-		f((A)this);
-	}
-	A f(A a){
-		f(a).m1();
-		return a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test30/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test30/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test30/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test31/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test31/in/A.java
deleted file mode 100644
index ac7516b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test31/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	void g() {
-		f((A)this);
-	}
-	A f(A a){
-		f(a).m();
-		return a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test31/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test31/out/A.java
deleted file mode 100644
index 0cfc234..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test31/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void g() {
-		f((I)this);
-	}
-	I f(I a){
-		f(a).m();
-		return a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test31/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test31/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test31/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test32/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test32/in/A.java
deleted file mode 100644
index 73697dc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test32/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a0= new A();
-		A a1= a0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test32/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test32/out/A.java
deleted file mode 100644
index 2424bbd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test32/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		I a0= new A();
-		I a1= a0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test32/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test32/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test32/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test33/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test33/in/A.java
deleted file mode 100644
index dafae2d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test33/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a0= new A();
-		A a1= a0;
-		a1.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test33/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test33/out/A.java
deleted file mode 100644
index a7373d0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test33/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a0= new A();
-		A a1= a0;
-		a1.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test33/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test33/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test33/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test34/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test34/in/A.java
deleted file mode 100644
index 77c79e4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test34/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a0= new A();
-		A a1= a0;
-		a1.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test34/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test34/out/A.java
deleted file mode 100644
index 32d25a1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test34/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		I a0= new A();
-		I a1= a0;
-		a1.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test34/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test34/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test34/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test35/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test35/in/A.java
deleted file mode 100644
index d20ef2c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test35/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-
-class A { //implements Fred
-	public void m() {}
-	public void m1() {}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test35/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test35/out/A.java
deleted file mode 100644
index b377467..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test35/out/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-
-class A implements I { //implements Fred
-	public void m() {}
-	public void m1() {}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test35/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test35/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test35/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test36/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test36/in/A.java
deleted file mode 100644
index c8eae54..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test36/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a0= new A();
-		f(a0);
-	}
-	void f(A a){
-		a.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test36/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test36/out/A.java
deleted file mode 100644
index 416a922..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test36/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a0= new A();
-		f(a0);
-	}
-	void f(A a){
-		a.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test36/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test36/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test36/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test37/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test37/in/A.java
deleted file mode 100644
index 7b8503c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test37/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a0= new A();
-		f(a0);
-	}
-	void f(A a){
-		a.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test37/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test37/out/A.java
deleted file mode 100644
index 1070412..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test37/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		I a0= new A();
-		f(a0);
-	}
-	void f(I a){
-		a.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test37/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test37/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test37/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test38/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test38/in/A.java
deleted file mode 100644
index 0577366..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test38/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a0= new A();
-		A a1;
-		a1= a0;
-		a1.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test38/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test38/out/A.java
deleted file mode 100644
index 93bff1c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test38/out/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		I a0= new A();
-		I a1;
-		a1= a0;
-		a1.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test38/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test38/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test38/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test39/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test39/in/A.java
deleted file mode 100644
index c59c6b6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test39/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a0= new A();
-		A a1;
-		a1= a0;
-		a1.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test39/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test39/out/A.java
deleted file mode 100644
index b9deeeb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test39/out/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a0= new A();
-		A a1;
-		a1= a0;
-		a1.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test39/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test39/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test39/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test4/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test4/in/A.java
deleted file mode 100644
index 8ba1965..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test4/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A implements Cloneable{
-	public void m(){
-	}
-	protected Object clone() throws CloneNotSupportedException {
-		return super.clone();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test4/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test4/out/A.java
deleted file mode 100644
index 9304981..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test4/out/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A implements Cloneable, I{
-	public void m(){
-	}
-	protected Object clone() throws CloneNotSupportedException {
-		return super.clone();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test4/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test4/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test4/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test40/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test40/in/A.java
deleted file mode 100644
index 5af74a3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test40/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a1;
-		a1= null;
-		a1.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test40/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test40/out/A.java
deleted file mode 100644
index 17596e0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test40/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a1;
-		a1= null;
-		a1.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test40/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test40/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test40/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test41/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test41/in/A.java
deleted file mode 100644
index d51ccac..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test41/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a0= new A();
-		A a1= a0;
-		A a2= a1;
-		a2.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test41/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test41/out/A.java
deleted file mode 100644
index 1af56bd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test41/out/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a0= new A();
-		A a1= a0;
-		A a2= a1;
-		a2.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test41/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test41/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test41/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test42/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test42/in/A.java
deleted file mode 100644
index 640bb01..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test42/in/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a0= new A();
-		A a1;
-		a1= a0;
-		A a2;
-		a2= a1;
-		a2.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test42/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test42/out/A.java
deleted file mode 100644
index 4172720..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test42/out/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a0= new A();
-		A a1;
-		a1= a0;
-		A a2;
-		a2= a1;
-		a2.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test42/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test42/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test42/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test43/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test43/in/A.java
deleted file mode 100644
index bd58ab2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test43/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a0= new A();
-		((A)a0).m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test43/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test43/out/A.java
deleted file mode 100644
index 4f1549d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test43/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		I a0= new A();
-		((I)a0).m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test43/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test43/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test43/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test44/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test44/in/A.java
deleted file mode 100644
index 6e991ab..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test44/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a0= new A();
-		((A)a0).m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test44/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test44/out/A.java
deleted file mode 100644
index e032247..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test44/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		I a0= new A();
-		((A)a0).m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test44/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test44/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test44/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test45/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test45/in/A.java
deleted file mode 100644
index 5638537..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test45/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	void f(A a){
-		a.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test45/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test45/out/A.java
deleted file mode 100644
index fb1dd55..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test45/out/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void f(A a){
-		a.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test45/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test45/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test45/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test46/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test46/in/A.java
deleted file mode 100644
index 4a13bcf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test46/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	void f(A a){
-		a.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test46/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test46/out/A.java
deleted file mode 100644
index 2a68a7c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test46/out/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void f(I a){
-		a.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test46/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test46/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test46/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test47/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test47/in/A.java
deleted file mode 100644
index 2795284..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test47/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	A g() {
-		A a= new A();
-		g().m1();
-		return a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test47/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test47/out/A.java
deleted file mode 100644
index 4b67e34..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test47/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	A g() {
-		A a= new A();
-		g().m1();
-		return a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test47/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test47/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test47/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test48/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test48/in/A.java
deleted file mode 100644
index 4691f69..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test48/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	A f(A a){
-		f(a).m1();
-		return a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test48/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test48/out/A.java
deleted file mode 100644
index 28a0e57..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test48/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	A f(A a){
-		f(a).m1();
-		return a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test48/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test48/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test48/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test49/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test49/in/A.java
deleted file mode 100644
index a11f579..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test49/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	void g() {
-		f((A)this);
-	}
-	void f(A a){
-		a.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test49/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test49/out/A.java
deleted file mode 100644
index dffad44..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test49/out/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void g() {
-		f((A)this);
-	}
-	void f(A a){
-		a.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test49/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test49/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test49/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test5/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test5/in/A.java
deleted file mode 100644
index d5feb01..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test5/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-class A{
-	public void m() throws IOException{
-		List list= new ArrayList();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test5/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test5/out/A.java
deleted file mode 100644
index 0be1335..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test5/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-class A implements I{
-	public void m() throws IOException{
-		List list= new ArrayList();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test5/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test5/out/I.java
deleted file mode 100644
index d3792de..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test5/out/I.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-import java.io.IOException;
-/** typecomment template*/
-interface I {
-	void m() throws IOException;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test50/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test50/in/A.java
deleted file mode 100644
index 1393e6a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test50/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A {
-	A a;
-	public void m() {}
-	public void m1() {}
-	void f(){
-		a.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test50/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test50/out/A.java
deleted file mode 100644
index 9e7aff4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test50/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	A a;
-	public void m() {}
-	public void m1() {}
-	void f(){
-		a.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test50/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test50/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test50/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test51/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test51/in/A.java
deleted file mode 100644
index b8d3883..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test51/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A {
-	A a;
-	public void m() {}
-	public void m1() {}
-	void f(){
-		a.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test51/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test51/out/A.java
deleted file mode 100644
index 5728437..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test51/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	I a;
-	public void m() {}
-	public void m1() {}
-	void f(){
-		a.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test51/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test51/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test51/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test52/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test52/in/A.java
deleted file mode 100644
index 07f76ef..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test52/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A {
-	A fA;
-	public void m() {}
-	public void m1() {}
-	void f(){
-		A a= fA;
-		a.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test52/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test52/out/A.java
deleted file mode 100644
index 4aaa2cf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test52/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A implements I {
-	A fA;
-	public void m() {}
-	public void m1() {}
-	void f(){
-		A a= fA;
-		a.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test52/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test52/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test52/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test53/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test53/in/A.java
deleted file mode 100644
index 0c285d8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test53/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A {
-	A fA;
-	public void m() {}
-	public void m1() {}
-	void f(){
-		A a= fA;
-		a.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test53/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test53/out/A.java
deleted file mode 100644
index f10dd01..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test53/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A implements I {
-	I fA;
-	public void m() {}
-	public void m1() {}
-	void f(){
-		I a= fA;
-		a.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test53/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test53/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test53/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test54/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test54/in/A.java
deleted file mode 100644
index e507851..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test54/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	protected void f(A a){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test54/in/A1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test54/in/A1.java
deleted file mode 100644
index 2d54186..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test54/in/A1.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-public class A1 extends A{
-	protected void f(A a){
-		a.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test54/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test54/out/A.java
deleted file mode 100644
index e68d749..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test54/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	protected void f(I a){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test54/out/A1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test54/out/A1.java
deleted file mode 100644
index 3eccac6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test54/out/A1.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-public class A1 extends A{
-	protected void f(I a){
-		a.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test54/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test54/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test54/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test55/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test55/in/A.java
deleted file mode 100644
index e507851..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test55/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	protected void f(A a){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test55/in/A1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test55/in/A1.java
deleted file mode 100644
index a4285b3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test55/in/A1.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-public class A1 extends A{
-	protected void f(A a){
-		a.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test55/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test55/out/A.java
deleted file mode 100644
index bed1d04..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test55/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	protected void f(A a){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test55/out/A1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test55/out/A1.java
deleted file mode 100644
index a4285b3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test55/out/A1.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-public class A1 extends A{
-	protected void f(A a){
-		a.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test55/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test55/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test55/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test56/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test56/in/A.java
deleted file mode 100644
index dfb823c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test56/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	protected A f(){
-		return this;
-	}
-	void test(){
-		f().m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test56/in/A1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test56/in/A1.java
deleted file mode 100644
index c6b716d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test56/in/A1.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-public class A1 extends A{
-	protected A f(){
-		return this;
-	}
-	void test(){
-		f().m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test56/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test56/out/A.java
deleted file mode 100644
index 2e5f384..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test56/out/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	protected A f(){
-		return this;
-	}
-	void test(){
-		f().m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test56/out/A1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test56/out/A1.java
deleted file mode 100644
index c6b716d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test56/out/A1.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-public class A1 extends A{
-	protected A f(){
-		return this;
-	}
-	void test(){
-		f().m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test56/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test56/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test56/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test57/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test57/in/A.java
deleted file mode 100644
index a63fcbd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test57/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	protected A f(){
-		return this;
-	}
-	void test(){
-		f().m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test57/in/A1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test57/in/A1.java
deleted file mode 100644
index d29e8f0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test57/in/A1.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-public class A1 extends A{
-	protected A f(){
-		return this;
-	}
-	void test(){
-		f().m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test57/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test57/out/A.java
deleted file mode 100644
index 1391097..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test57/out/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	protected I f(){
-		return this;
-	}
-	void test(){
-		f().m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test57/out/A1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test57/out/A1.java
deleted file mode 100644
index 2de0edc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test57/out/A1.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-public class A1 extends A{
-	protected I f(){
-		return this;
-	}
-	void test(){
-		f().m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test57/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test57/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test57/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test58/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test58/in/A.java
deleted file mode 100644
index 6529744..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test58/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A {
-	int f;
-	public void m() {}
-	public void m1() {}
-	protected A f(){
-		return this;
-	}
-	void test(){
-		f().f=0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test58/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test58/out/A.java
deleted file mode 100644
index 4dd4223..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test58/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A implements I {
-	int f;
-	public void m() {}
-	public void m1() {}
-	protected A f(){
-		return this;
-	}
-	void test(){
-		f().f=0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test58/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test58/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test58/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test59/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test59/in/A.java
deleted file mode 100644
index 71717be..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test59/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-import p.A;
-class A {
-	public void m() {}
-	public void m1() {}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test59/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test59/out/A.java
deleted file mode 100644
index 709538d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test59/out/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-import p.A;
-class A implements I {
-	public void m() {}
-	public void m1() {}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test59/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test59/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test59/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test6/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test6/in/A.java
deleted file mode 100644
index 075d6ae..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test6/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.Set;
-
-class A{
-	public List m(Set set) throws IOException{
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test6/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test6/out/A.java
deleted file mode 100644
index 7514b5e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test6/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.Set;
-
-class A implements I{
-	public List m(Set set) throws IOException{
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test6/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test6/out/I.java
deleted file mode 100644
index df6e9a1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test6/out/I.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-import java.io.IOException;
-import java.util.List;
-import java.util.Set;
-/** typecomment template*/
-interface I {
-	List m(Set set) throws IOException;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test60/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test60/in/A.java
deleted file mode 100644
index a45dd6c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test60/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	public static void s() {}
-	void t(){
-		A.s();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test60/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test60/out/A.java
deleted file mode 100644
index ba23032..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test60/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	public static void s() {}
-	void t(){
-		A.s();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test60/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test60/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test60/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test61/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test61/in/A.java
deleted file mode 100644
index 373a7ee..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test61/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	public static int s= 0;
-	void t(){
-		A.s= 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test61/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test61/out/A.java
deleted file mode 100644
index c16b697..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test61/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	public static int s= 0;
-	void t(){
-		A.s= 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test61/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test61/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test61/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test62/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test62/in/A.java
deleted file mode 100644
index 1b847e9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test62/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	void t(){
-		new A(){
-			void g(){
-				A.this.m1();
-			}
-		};	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test62/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test62/out/A.java
deleted file mode 100644
index d2a5048..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test62/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void t(){
-		new A(){
-			void g(){
-				A.this.m1();
-			}
-		};	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test62/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test62/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test62/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test63/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test63/in/A.java
deleted file mode 100644
index 55dffe9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test63/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	void t(){
-		new A(){
-			void g(){
-				A.super.wait();
-			}
-		};	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test63/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test63/out/A.java
deleted file mode 100644
index 6f9d635..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test63/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void t(){
-		new A(){
-			void g(){
-				A.super.wait();
-			}
-		};	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test63/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test63/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test63/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test64/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test64/in/A.java
deleted file mode 100644
index 227d1d5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test64/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	void f(Inter i){
-		A a= new A();
-		i.work(a);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test64/in/Inter.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test64/in/Inter.java
deleted file mode 100644
index 06fa9e7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test64/in/Inter.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-
-public interface Inter {
-	void work(A a);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test64/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test64/out/A.java
deleted file mode 100644
index e388da3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test64/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void f(Inter i){
-		A a= new A();
-		i.work(a);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test64/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test64/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test64/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test64/out/Inter.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test64/out/Inter.java
deleted file mode 100644
index 06fa9e7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test64/out/Inter.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-
-public interface Inter {
-	void work(A a);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test65/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test65/in/A.java
deleted file mode 100644
index ef34364..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test65/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	void f(){
-		A a= create();
-		a.m1();
-	}
-	A create(){
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test65/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test65/out/A.java
deleted file mode 100644
index 35d13b2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test65/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void f(){
-		A a= create();
-		a.m1();
-	}
-	A create(){
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test65/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test65/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test65/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test66/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test66/in/A.java
deleted file mode 100644
index 5be3103..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test66/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-	void f(){
-		A a= create();
-		a.m();
-	}
-	A create(){
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test66/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test66/out/A.java
deleted file mode 100644
index 5cc489b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test66/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void f(){
-		I a= create();
-		a.m();
-	}
-	I create(){
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test66/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test66/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test66/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test67/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test67/in/A.java
deleted file mode 100644
index a374646..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test67/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-
-class A {
-	public void m() {}
-	public void m1() {}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test67/in/Inter.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test67/in/Inter.java
deleted file mode 100644
index 147dd9a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test67/in/Inter.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public interface Inter {
-	void work(A a);
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test67/in/Outer.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test67/in/Outer.java
deleted file mode 100644
index e09d286..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test67/in/Outer.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-public class Outer{
-	public static class Implementor implements Inter{	
-		public void work(A a) {}
-	}
-	Implementor implementor;
-	void f(){
-		A a= new A();
-		implementor.work(a);
-	}
-}	
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test67/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test67/out/A.java
deleted file mode 100644
index 82243b4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test67/out/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test67/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test67/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test67/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test67/out/Inter.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test67/out/Inter.java
deleted file mode 100644
index 147dd9a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test67/out/Inter.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public interface Inter {
-	void work(A a);
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test67/out/Outer.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test67/out/Outer.java
deleted file mode 100644
index e09d286..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test67/out/Outer.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-public class Outer{
-	public static class Implementor implements Inter{	
-		public void work(A a) {}
-	}
-	Implementor implementor;
-	void f(){
-		A a= new A();
-		implementor.work(a);
-	}
-}	
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test68/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test68/in/A.java
deleted file mode 100644
index 4f1f8c4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test68/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A {
-	static A getA(){
-		return null;
-	}
-	public void m(){}
-	public void m1(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test68/in/As.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test68/in/As.java
deleted file mode 100644
index 5aa68d8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test68/in/As.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-/** typecomment template*/
-public class As {
-	void f(){
-		A a= A.getA();
-		a.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test68/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test68/out/A.java
deleted file mode 100644
index 61b7b47..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test68/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A implements I {
-	static A getA(){
-		return null;
-	}
-	public void m(){}
-	public void m1(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test68/out/As.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test68/out/As.java
deleted file mode 100644
index 5aa68d8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test68/out/As.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-/** typecomment template*/
-public class As {
-	void f(){
-		A a= A.getA();
-		a.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test68/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test68/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test68/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test69/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test69/in/A.java
deleted file mode 100644
index 4f1f8c4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test69/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A {
-	static A getA(){
-		return null;
-	}
-	public void m(){}
-	public void m1(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test69/in/As.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test69/in/As.java
deleted file mode 100644
index 156c195..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test69/in/As.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-/** typecomment template*/
-public class As {
-	void f(){
-		A a= A.getA();
-		a.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test69/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test69/out/A.java
deleted file mode 100644
index be71c7e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test69/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A implements I {
-	static I getA(){
-		return null;
-	}
-	public void m(){}
-	public void m1(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test69/out/As.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test69/out/As.java
deleted file mode 100644
index 5dfb4a2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test69/out/As.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-/** typecomment template*/
-public class As {
-	void f(){
-		I a= A.getA();
-		a.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test69/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test69/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test69/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test7/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test7/in/A.java
deleted file mode 100644
index 4120bb7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test7/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.Set;
-
-class A{
-	public List m(Set set, Set set1) throws IOException{
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test7/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test7/out/A.java
deleted file mode 100644
index ab8e79e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test7/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.Set;
-
-class A implements I{
-	public List m(Set set, Set set1) throws IOException{
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test7/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test7/out/I.java
deleted file mode 100644
index 6729aef..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test7/out/I.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-import java.io.IOException;
-import java.util.Set;
-import java.util.List;
-/** typecomment template*/
-interface I {
-	List m(Set set, Set set1) throws IOException;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test70/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test70/in/A.java
deleted file mode 100644
index 8dc037d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test70/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-
-public class A {
-	public void m() {}
-	public void m1() {}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test70/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test70/out/A.java
deleted file mode 100644
index 7795837..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test70/out/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-
-public class A implements I {
-	public void m() {}
-	public void m1() {}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test70/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test70/out/I.java
deleted file mode 100644
index 62cc2fa..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test70/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-public interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test71/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test71/in/A.java
deleted file mode 100644
index 8dc037d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test71/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-
-public class A {
-	public void m() {}
-	public void m1() {}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test71/in/As.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test71/in/As.java
deleted file mode 100644
index e0c24ef..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test71/in/As.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-/** typecomment template*/
-public class As {
-	void f(){
-		A a= new A();
-		if (a instanceof A){
-		} else {
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test71/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test71/out/A.java
deleted file mode 100644
index 7795837..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test71/out/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-
-public class A implements I {
-	public void m() {}
-	public void m1() {}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test71/out/As.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test71/out/As.java
deleted file mode 100644
index 2c3680f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test71/out/As.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-/** typecomment template*/
-public class As {
-	void f(){
-		I a= new A();
-		if (a instanceof I){
-		} else {
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test71/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test71/out/I.java
deleted file mode 100644
index 62cc2fa..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test71/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-public interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test72/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test72/in/A.java
deleted file mode 100644
index 90fe4bf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test72/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A {
-    public void m(A foo) {
-        foo.m(foo);
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test72/in/As.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test72/in/As.java
deleted file mode 100644
index b19dc18..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test72/in/As.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-public class As {
-    void r(A foo) {
-        A local= null;
-        foo.m(local);
-    }
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test72/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test72/out/A.java
deleted file mode 100644
index 77fc769..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test72/out/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A implements I {
-    public void m(I foo) {
-        foo.m(foo);
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test72/out/As.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test72/out/As.java
deleted file mode 100644
index a18bf9a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test72/out/As.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-public class As {
-    void r(I foo) {
-        I local= null;
-        foo.m(local);
-    }
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test72/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test72/out/I.java
deleted file mode 100644
index 90cc5ad..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test72/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-public interface I {
-	void m(I foo);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test73/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test73/in/A.java
deleted file mode 100644
index 4909214..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test73/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-
-public class A implements OldInterface{
-  public int amount(){ return 1;}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test73/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test73/in/B.java
deleted file mode 100644
index a04ba1d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test73/in/B.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-public class B implements OldInterface{
-	private void s(){
-		OldInterface i= find();
-	}
-	private A find(){
-		return new A();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test73/in/OldInterface.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test73/in/OldInterface.java
deleted file mode 100644
index f140f1b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test73/in/OldInterface.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-public interface OldInterface {
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test73/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test73/out/A.java
deleted file mode 100644
index fbd4aed..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test73/out/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-
-public class A implements OldInterface, I{
-  public int amount(){ return 1;}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test73/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test73/out/B.java
deleted file mode 100644
index a04ba1d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test73/out/B.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-public class B implements OldInterface{
-	private void s(){
-		OldInterface i= find();
-	}
-	private A find(){
-		return new A();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test73/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test73/out/I.java
deleted file mode 100644
index 22239a0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test73/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-public interface I {
-	int amount();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test73/out/OldInterface.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test73/out/OldInterface.java
deleted file mode 100644
index f140f1b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test73/out/OldInterface.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-public interface OldInterface {
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test74/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test74/in/A.java
deleted file mode 100644
index 4909214..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test74/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-
-public class A implements OldInterface{
-  public int amount(){ return 1;}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test74/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test74/in/B.java
deleted file mode 100644
index bdacf80..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test74/in/B.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-public class B implements OldInterface{
-	private void s(){
-		OldInterface i;
-		i= find();
-	}
-	private A find(){
-		return new A();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test74/in/OldInterface.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test74/in/OldInterface.java
deleted file mode 100644
index f140f1b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test74/in/OldInterface.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-public interface OldInterface {
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test74/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test74/out/A.java
deleted file mode 100644
index fbd4aed..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test74/out/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-
-public class A implements OldInterface, I{
-  public int amount(){ return 1;}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test74/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test74/out/B.java
deleted file mode 100644
index bdacf80..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test74/out/B.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-public class B implements OldInterface{
-	private void s(){
-		OldInterface i;
-		i= find();
-	}
-	private A find(){
-		return new A();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test74/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test74/out/I.java
deleted file mode 100644
index 22239a0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test74/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-public interface I {
-	int amount();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test74/out/OldInterface.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test74/out/OldInterface.java
deleted file mode 100644
index f140f1b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test74/out/OldInterface.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-public interface OldInterface {
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test75/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test75/in/A.java
deleted file mode 100644
index 535c1d9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test75/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-
-public class A {
-  public int amount(){ return 1;}
-  public void add(){}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test75/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test75/in/B.java
deleted file mode 100644
index cdad777..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test75/in/B.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-
-public class B {
-	B(int t, A a){
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test75/in/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test75/in/C.java
deleted file mode 100644
index 399856f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test75/in/C.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-public class C {
-	A fA;
-	void f(){
-		B b= new B(2, fA);
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test75/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test75/out/A.java
deleted file mode 100644
index 910b1ee..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test75/out/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-
-public class A implements I {
-  public int amount(){ return 1;}
-  public void add(){}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test75/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test75/out/B.java
deleted file mode 100644
index 53bece1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test75/out/B.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-
-public class B {
-	B(int t, I a){
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test75/out/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test75/out/C.java
deleted file mode 100644
index 623defa..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test75/out/C.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-public class C {
-	I fA;
-	void f(){
-		B b= new B(2, fA);
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test75/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test75/out/I.java
deleted file mode 100644
index 22239a0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test75/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-public interface I {
-	int amount();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test76/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test76/in/A.java
deleted file mode 100644
index 535c1d9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test76/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-
-public class A {
-  public int amount(){ return 1;}
-  public void add(){}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test76/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test76/in/B.java
deleted file mode 100644
index d07a15d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test76/in/B.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-public class B {
-	B(int t, A a){
-		a.add();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test76/in/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test76/in/C.java
deleted file mode 100644
index 399856f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test76/in/C.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-public class C {
-	A fA;
-	void f(){
-		B b= new B(2, fA);
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test76/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test76/out/A.java
deleted file mode 100644
index 910b1ee..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test76/out/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-
-public class A implements I {
-  public int amount(){ return 1;}
-  public void add(){}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test76/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test76/out/B.java
deleted file mode 100644
index d07a15d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test76/out/B.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-public class B {
-	B(int t, A a){
-		a.add();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test76/out/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test76/out/C.java
deleted file mode 100644
index 399856f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test76/out/C.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-public class C {
-	A fA;
-	void f(){
-		B b= new B(2, fA);
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test76/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test76/out/I.java
deleted file mode 100644
index 22239a0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test76/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-public interface I {
-	int amount();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test77/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test77/in/A.java
deleted file mode 100644
index 23ebd6d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test77/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-public class A {
-	class Inner {
-	  public int amount(){ return 1;}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test77/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test77/in/B.java
deleted file mode 100644
index 831a28b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test77/in/B.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-public class B {
-	B(int t, A.Inner a){
-		a.amount();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test77/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test77/out/A.java
deleted file mode 100644
index 1278dd9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test77/out/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-public class A {
-	class Inner implements I {
-	  public int amount(){ return 1;}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test77/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test77/out/B.java
deleted file mode 100644
index 7c02a24..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test77/out/B.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-public class B {
-	B(int t, I a){
-		a.amount();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test77/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test77/out/I.java
deleted file mode 100644
index 2a728f2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test77/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	int amount();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test8/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test8/in/A.java
deleted file mode 100644
index 391f87d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test8/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.Set;
-
-class A{
-	public List m(Set set, String string) throws IOException{
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test8/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test8/out/A.java
deleted file mode 100644
index f105f3a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test8/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.Set;
-
-class A implements I{
-	public List m(Set set, String string) throws IOException{
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test8/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test8/out/I.java
deleted file mode 100644
index 31f4af7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test8/out/I.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-import java.io.IOException;
-import java.util.List;
-import java.util.Set;
-/** typecomment template*/
-interface I {
-	List m(Set set, String string) throws IOException;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test9/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test9/in/A.java
deleted file mode 100644
index 8dd8734..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test9/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-	public void m(int i, boolean b, short s, char c, long l, double d){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test9/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test9/out/A.java
deleted file mode 100644
index 44f67ab..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test9/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A implements I{
-	public void m(int i, boolean b, short s, char c, long l, double d){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test9/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test9/out/I.java
deleted file mode 100644
index c2c8159..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test9/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m(int i, boolean b, short s, char c, long l, double d);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/testFail/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/testFail/in/A.java
deleted file mode 100644
index 6b249e3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/testFail/in/A.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package p;
-interface A{}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/testFail0/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/testFail0/in/A.java
deleted file mode 100644
index 6b249e3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/testFail0/in/A.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package p;
-interface A{}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/testFail1/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/testFail1/in/A.java
deleted file mode 100644
index af50958..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/testFail1/in/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A{}
-interface I{}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/.cvsignore b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/.cvsignore
deleted file mode 100644
index 9caf6f2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-.metadata
-bin
-*.class
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/.cvsignore b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/.cvsignore
deleted file mode 100644
index 4fdcfd7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-bin
-.classpath
-*.class
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/.project b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/.project
deleted file mode 100644
index c1e1775..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>ExtractMethodTests</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/A.java
deleted file mode 100644
index fcde1f3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-public class A{
-	public A() {
-		this(5 + 6);
-	}
-	public A(int i) {
-	}
-	
-	static class B extends A {
-		public B() {
-			super(5 + 7);
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/BBB.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/BBB.java
deleted file mode 100644
index 60e421a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/BBB.java
+++ /dev/null
@@ -1,46 +0,0 @@
-public class BBB {
-	public void foo() {
-		int i= 0;
-		BBB b= new BBB();
-		BBB[] bb= new BBB[10];
-		if (i == 0 && i == 10 && b instanceof BBB)
-			foo();
-		while(i++ == 10) {
-			foo();
-		}
-		i--;
-		
-		while(i++ == 10)
-			foo();
-		i--;
-		
-		do {
-		} while (i < 10);	
-		
-		for (int x= 0, o= 0; x < 10; x++, o++);
-		 {
-			foo();
-			int z;//= x;
-		}
-		
-		try {
-			foo();
-		} catch (Exception e) {
-		} finally {
-		}
-		
-		switch (i) {
-			case 10:
-				foo();
-			case 20:
-				foo();
-			default:
-				foo();
-		}
-	}
-	public int g() {
-		g();
-		return 1;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/Bug_5690.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/Bug_5690.java
deleted file mode 100644
index 559cf1b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/Bug_5690.java
+++ /dev/null
@@ -1,13 +0,0 @@
-public class Bug_5690 {
-	public void foo() {
-		Object runnable= null;
-		Object[] disposeList= null;
-		for (int i=0; i < disposeList.length; i++) {
-			if (disposeList [i] == null) {
-				disposeList [i] = runnable;
-				return;
-			}
-		}
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/C.java
deleted file mode 100644
index 5dbee96..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/C.java
+++ /dev/null
@@ -1,5 +0,0 @@
-public class C {
-	void f(){
-		C i= new /*[*/C/*]*/();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/D.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/D.java
deleted file mode 100644
index 35673b2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/D.java
+++ /dev/null
@@ -1,29 +0,0 @@
-import java.io.IOException;
-import java.net.MalformedURLException;
-
-public class D {
-	public static class MyException extends Exception {
-	}
-	
-	public volatile boolean flag;
-	
-	protected void foo() {
-		int i= 10;
-		try {
-			try {
-				if (flag)
-					throw new IOException();
-				if (!flag)
-					throw new MyException();
-			} catch (IOException e) {
-			}
-			i= 10;
-		} catch (MyException e) {
-		}
-		read(i);
-	}
-
-	private void read(int i) {
-	}	
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/E.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/E.java
deleted file mode 100644
index ad6960f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/E.java
+++ /dev/null
@@ -1,12 +0,0 @@
-public class E {
-	boolean flag;
-	public void foo() {
-		int i= 0;
-		if (flag) {
-			i= 1;
-		} else {
-			i= 2;
-		}
-		System.out.println(i);
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/L.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/L.java
deleted file mode 100644
index 91d302c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/L.java
+++ /dev/null
@@ -1,20 +0,0 @@
-public class L {
-
-	public void foo() {
-		int x= 0;
-		
-		x++;
-		
-		// x= 10;
-		int y= x;
-	}
-	
-	public void g(int x) {
-	}
-	
-	public int bar() {
-		bar();
-		return 10;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/MyTest.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/MyTest.java
deleted file mode 100644
index 949aaa9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/MyTest.java
+++ /dev/null
@@ -1,8 +0,0 @@
-public class MyTest {
-  public void test() {
-    Object object = new Object() {
-      public void name() {
-      }
-    };
-  }
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/Philippe.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/Philippe.java
deleted file mode 100644
index f7df895..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/Philippe.java
+++ /dev/null
@@ -1,13 +0,0 @@
-public class Philippe {
-	void foo(final int out){
-		String tab[] = /*START*/{"hello", "world" } /*END*/;       
-	}
-	
-	public void foo2(int i) {
-		String /*START*/str = "ggg"/*END*/;
-	}
-	
-	public void foo3() {
-		int i= 10, j= 30;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/T10031.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/T10031.java
deleted file mode 100644
index 5a65aed..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/T10031.java
+++ /dev/null
@@ -1,15 +0,0 @@
-public class T10031 {
-	private static Object fValue;
-	
-	public static void foo() {
-		setValue(null);
-	}
-
-	public static void setValue(Object value) {
-		fValue= value;
-	}
-
-	public static Object getValue() {
-		return fValue;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/T10245.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/T10245.java
deleted file mode 100644
index 9bd2ef6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/T10245.java
+++ /dev/null
@@ -1,12 +0,0 @@
-public class T10245 {
-	T10245 f;
-	public T10245 a() {
-		a().f= a();
-		
-		/*[*/
-		int y= 0;
-		a().f= a(); /*[*/
-		return null;
-	}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/T11337.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/T11337.java
deleted file mode 100644
index 8bbc782..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/T11337.java
+++ /dev/null
@@ -1,6 +0,0 @@
-public class T11337 {
-	void f(byte bytes) {
-		String s= "k";
-		/*[*/System.out.println(s + " " + bytes); /*]*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/T11337_1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/T11337_1.java
deleted file mode 100644
index 2b17b7f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/T11337_1.java
+++ /dev/null
@@ -1,5 +0,0 @@
-public class T11337_1 {
-	void f(byte bytes) {
-		/*[*/System.out.println(bytes); /*]*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/T4165.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/T4165.java
deleted file mode 100644
index c53aee0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/T4165.java
+++ /dev/null
@@ -1,13 +0,0 @@
-public class T4165 {
-	void m(int i) {
-		for (;;) {
-			//---
-			if (i == 0)
-				continue;	
-			if (i != 5)	
-				continue;	
-			//---	
-		}
-	}
-
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/T7368.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/T7368.java
deleted file mode 100644
index a506c77..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/T7368.java
+++ /dev/null
@@ -1,6 +0,0 @@
-public class T7368 {
-	public void foo() {
-		int f= (/*[*/2/*]*/);
-		// int u= new T7368[/*[*/1+ 3/*[*/].length;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/T9815.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/T9815.java
deleted file mode 100644
index c7e194e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/T9815.java
+++ /dev/null
@@ -1,10 +0,0 @@
-public class T9815 {
-	void f1() {
-		String j= ex();
-	}
-
-	String ex() {
-		return /*[*/"text"/*]*/;
-	}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/Test.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/Test.java
deleted file mode 100644
index 01c1179..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/Test.java
+++ /dev/null
@@ -1,9 +0,0 @@
-public class Test {
-	public void foo() {
-		foo();
-		/* comment */int i= 0;/*[*/
-		// comment
-		/** comment */
-		foo();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/Wcf.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/Wcf.java
deleted file mode 100644
index 651c238..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/Wcf.java
+++ /dev/null
@@ -1,13 +0,0 @@
-public class Wcf {
-	void hg(){
-		class A extends B {
-			void m(){
-				f();   //<<<<<<<<
-			}
-		}
-	}  
-}  
-
-class B {
-	void f(){}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/X.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/X.java
deleted file mode 100644
index c57bf9f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/X.java
+++ /dev/null
@@ -1,22 +0,0 @@
-public class X {
-	class Inner extends Exception {
-	}
-}
-class DD extends X.Inner {
-	DD() {
-		new X().super();
-	}
-	public final static boolean DEBUG= true;
-	public void foo0() {
-		try {
-			d();
-		} catch (X.Inner e) {
-		}
-	}
-
-	protected void d() throws X.Inner {
-		if (DEBUG)
-			throw new X().new Inner();//<<SELECT AND EXTRACT
-	}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/Z.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/Z.java
deleted file mode 100644
index 167588f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/Z.java
+++ /dev/null
@@ -1,26 +0,0 @@
-import java.io.IOException;
-import java.io.InputStreamReader;
-
-public abstract class Z {
-	public volatile boolean flag;
-	
-	public Object foo() throws NumberFormatException {
-		InputStreamReader in= null;
-		try {
-			bar();
-			return new Object();
-		} catch (IOException e) {
-			throw new NumberFormatException();
-		} finally {
-			if (in != null) {
-				try {
-					in.close();
-				} catch (IOException e) {
-				}
-			}
-		}
-	}
-	
-	public abstract void bar() throws IOException;
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_in/A_test750.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_in/A_test750.java
deleted file mode 100644
index 668ddd0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_in/A_test750.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package branch_in;
-
-public class A_test750 {
-	public volatile boolean flag;
-
-	public void foo() {
-		/*]*/for (int i= 0; i < 10; i++) {
-			if (flag)
-				continue;
-		}/*[*/
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_in/A_test751.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_in/A_test751.java
deleted file mode 100644
index 3b497cb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_in/A_test751.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package branch_in;
-
-public class A_test751 {
-	public volatile boolean flag;
-
-	public void foo() {
-		/*]*/for (int i= 0; i < 10; i++) {
-			if (flag)
-				break;
-		}/*[*/
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_in/A_test752.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_in/A_test752.java
deleted file mode 100644
index 49c6507..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_in/A_test752.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package branch_in;
-
-public class A_test752 {
-	public volatile boolean flag;
-
-	public void foo() {
-		/*]*/while (flag) {
-			if (flag)
-				continue;
-		}/*[*/
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_in/A_test753.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_in/A_test753.java
deleted file mode 100644
index 6c52537..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_in/A_test753.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package branch_in;
-
-public class A_test753 {
-	public volatile boolean flag;
-
-	public void foo() {
-		/*]*/while (flag) {
-			if (flag)
-				break;
-		}/*[*/
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_in/A_test754.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_in/A_test754.java
deleted file mode 100644
index 2821546..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_in/A_test754.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package branch_in;
-
-public class A_test754 {
-	public volatile boolean flag;
-
-	public void foo() {
-		/*]*/do {
-			if (flag)
-				continue;
-		} while (flag);/*[*/
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_in/A_test755.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_in/A_test755.java
deleted file mode 100644
index a4aa611..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_in/A_test755.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package branch_in;
-
-public class A_test755 {
-	public volatile boolean flag;
-
-	public void foo() {
-		/*]*/do {
-			if (flag)
-				break;
-		} while (flag);/*[*/
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_out/A_test750.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_out/A_test750.java
deleted file mode 100644
index c61e9bd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_out/A_test750.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package branch_out;
-
-public class A_test750 {
-	public volatile boolean flag;
-
-	public void foo() {
-		/*]*/extracted();/*[*/
-	}
-
-	protected void extracted() {
-		for (int i= 0; i < 10; i++) {
-			if (flag)
-				continue;
-		}
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_out/A_test751.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_out/A_test751.java
deleted file mode 100644
index 3e4d0a3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_out/A_test751.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package branch_out;
-
-public class A_test751 {
-	public volatile boolean flag;
-
-	public void foo() {
-		/*]*/extracted();/*[*/
-	}
-
-	protected void extracted() {
-		for (int i= 0; i < 10; i++) {
-			if (flag)
-				break;
-		}
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_out/A_test752.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_out/A_test752.java
deleted file mode 100644
index 7674078..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_out/A_test752.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package branch_out;
-
-public class A_test752 {
-	public volatile boolean flag;
-
-	public void foo() {
-		/*]*/extracted();/*[*/
-	}
-
-	protected void extracted() {
-		while (flag) {
-			if (flag)
-				continue;
-		}
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_out/A_test753.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_out/A_test753.java
deleted file mode 100644
index 7d58778..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_out/A_test753.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package branch_out;
-
-public class A_test753 {
-	public volatile boolean flag;
-
-	public void foo() {
-		/*]*/extracted();/*[*/
-	}
-
-	protected void extracted() {
-		while (flag) {
-			if (flag)
-				break;
-		}
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_out/A_test754.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_out/A_test754.java
deleted file mode 100644
index 1234a37..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_out/A_test754.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package branch_out;
-
-public class A_test754 {
-	public volatile boolean flag;
-
-	public void foo() {
-		/*]*/extracted();/*[*/
-	}
-
-	protected void extracted() {
-		do {
-			if (flag)
-				continue;
-		} while (flag);
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_out/A_test755.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_out/A_test755.java
deleted file mode 100644
index 42286c5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/branch_out/A_test755.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package branch_out;
-
-public class A_test755 {
-	public volatile boolean flag;
-
-	public void foo() {
-		/*]*/extracted();/*[*/
-	}
-
-	protected void extracted() {
-		do {
-			if (flag)
-				break;
-		} while (flag);
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/error_in/A_test800.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/error_in/A_test800.java
deleted file mode 100644
index d86f00d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/error_in/A_test800.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package error_in;
-
-public class A_test800 {
-	public void fails() {
-		foo()
-	}
-	public void foo() {
-		/*]*/foo();/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/error_in/A_test801.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/error_in/A_test801.java
deleted file mode 100644
index 72819f1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/error_in/A_test801.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package error_in;
-
-public class A_test801 {
-	public void foo() {
-		List l;
-		/*]*/g(l);/*[*/
-	}
-	
-	public void g(List l) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/error_in/A_test802.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/error_in/A_test802.java
deleted file mode 100644
index ce2ab46..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/error_in/A_test802.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package error_in;
-
-public class A_test802 {
-	public List g() {
-		return null;
-	}
-	public void foo() {
-		/*]*/g()/*[*/;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/error_out/A_test800.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/error_out/A_test800.java
deleted file mode 100644
index 109ed98..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/error_out/A_test800.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package error_out;
-
-public class A_test800 {
-	public void fails() {
-		foo()
-	}
-	public void foo() {
-		/*]*/extracted();/*[*/
-	}
-	protected void extracted() {
-		foo();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/error_out/A_test801.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/error_out/A_test801.java
deleted file mode 100644
index 68ef0f0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/error_out/A_test801.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package error_out;
-
-public class A_test801 {
-	public void foo() {
-		List l;
-		/*]*/extracted(l);/*[*/
-	}
-
-	protected void extracted(List l) {
-		g(l);
-	}
-	
-	public void g(List l) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/error_out/A_test802.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/error_out/A_test802.java
deleted file mode 100644
index db1e899..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/error_out/A_test802.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package error_out;
-
-public class A_test802 {
-	public List g() {
-		return null;
-	}
-	public void foo() {
-		/*]*/extracted()/*[*/;
-	}
-	protected void extracted() {
-		g();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A.java
deleted file mode 100644
index 1f00ac3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package expression_in;
-
-import java.io.File;
-
-class A {
-	public File getFile() {
-		return null;
-	}
-	public void useFile(File file) {
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test600.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test600.java
deleted file mode 100644
index 330e88a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test600.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package expression_in;
-
-public class A_test600 {
-
-	public void foo() {
-		int i= 10;
-		if (/*]*/i < 10/*[*/)
-			foo();
-	}	
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test601.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test601.java
deleted file mode 100644
index cb5f659..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test601.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package expression_in;
-
-public class A_test601 {
-
-	public void foo() {
-		int i= 10;
-		if (/*]*/i < 10 && i < 20/*[*/)
-			foo();
-	}	
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test602.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test602.java
deleted file mode 100644
index ce0ee5b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test602.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package expression_in;
-
-public class A_test602 {
-
-	public void foo() {
-		int i= 10;
-		if (/*]*/i < 10 || i < 20/*[*/)
-			foo();
-	}	
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test603.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test603.java
deleted file mode 100644
index 7abb91a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test603.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package expression_in;
-
-public class A_test603 {
-
-	public void foo() {
-		int i= 10;
-		if (/*]*/i == 10/*[*/)
-			foo();
-	}	
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test604.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test604.java
deleted file mode 100644
index f5da345..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test604.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package expression_in;
-
-public class A_test604 {
-
-	public void foo() {
-		Object o= null;
-		if (/*]*/o == o/*[*/)
-			foo();
-	}	
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test605.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test605.java
deleted file mode 100644
index 3a4bf0b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test605.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package expression_in;
-
-public class A_test605 {
-
-	public void foo() {
-		int i= 0;
-		while (/*]*/i <= 10/*[*/)
-			foo();
-		foo();	
-	}	
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test606.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test606.java
deleted file mode 100644
index 7fd7935..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test606.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package expression_in;
-
-public class A_test606 {
-
-	public void foo() {
-		int i= 0;
-		foo();
-		do {
-			foo();
-		} while (/*]*/i <= 10/*[*/);
-	}	
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test607.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test607.java
deleted file mode 100644
index 16bdd6c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test607.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package expression_in;
-
-public class A_test607 {
-
-	public void foo() {
-		for (int i= 0;/*[*/ i < 10/*]*/; i++)
-			foo();
-	}	
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test608.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test608.java
deleted file mode 100644
index 3a8165b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test608.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package expression_in;
-
-public class A_test608 {
-	
-	public static class Scanner {
-		public int x;
-		public int y;
-	}
-	public static class Selection {
-		public int start;
-		public int end;
-	}
-	
-	public void foo(Selection selection) {
-		Scanner scanner= new Scanner();
-		
-		if (/*]*/scanner.x < selection.start && selection.start < scanner.y/*[*/) {
-			g();
-		}
-	}
-	
-	public void g() {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test609.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test609.java
deleted file mode 100644
index 4d09b47..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test609.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package expression_in;
-
-public class A_test609 {
-	public void foo() {
-		boolean b;
-		b= 1 < 10 && /*]*/2 < 20/*[*/;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test610.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test610.java
deleted file mode 100644
index 586a084..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test610.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package expression_in;
-
-public class A_test610 {
-	public void foo() {
-		int i= /*]*/0/*[*/;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test611.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test611.java
deleted file mode 100644
index 1297b03..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test611.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package expression_in;
-
-public class A_test611 {
-	class Inner {
-	}
-	public void foo() {
-		Inner inner= /*]*/new Inner()/*]*/;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test612.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test612.java
deleted file mode 100644
index 83def82..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test612.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package expression_in;
-
-public class A_test612 {
-	class Inner {
-	}
-	public void foo() {
-		Inner[] inner= /*]*/new Inner[10]/*]*/;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test613.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test613.java
deleted file mode 100644
index 86a4726..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test613.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package expression_in;
-
-public class A_test613 {
-	public void foo() {
-		A a= null;
-		a.useFile(/*]*/a.getFile()/*[*/);
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test614.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test614.java
deleted file mode 100644
index a766660..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test614.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package expression_in;
-
-import java.io.File;
-
-public class A_test614 {
-	public void foo() {
-		A a= null;
-		a.useFile(/*]*/a.getFile()/*[*/);
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test615.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test615.java
deleted file mode 100644
index cc758b4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test615.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package expression_in;
-
-public class A_test615 {
-	class Inner {
-	}
-	public void foo() {
-		Inner inner= null;
-		boolean b;
-		b= /*]*/inner instanceof Inner/*[*/;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test616.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test616.java
deleted file mode 100644
index 82c6c8e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test616.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package expression_in;
-
-public class A_test616 {
-	public void foo() {
-		A a= null;
-		/*]*/a.getFile()/*[*/.getName();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test617.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test617.java
deleted file mode 100644
index 942bb08..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test617.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package expression_in;
-
-public class A_test617 {
-	public int foo() {
-		return 10 + /*]*/20 * 30/*[*/ + 10;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test618.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test618.java
deleted file mode 100644
index 8a14d12..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test618.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package expression_in;
-
-public class A_test618 {
-	public void foo() {
-		int i= 20 + /*]*/10 * 30/*[*/ + 10;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test619.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test619.java
deleted file mode 100644
index 190990a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test619.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package expression_in;
-
-public class A_test619 {
-	public void foo() {
-		int f= new A[/*]*/1 + 2/*[*/].length;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test620.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test620.java
deleted file mode 100644
index e8676c7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test620.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package expression_in;
-
-public class A_test620 {
-	public void foo() {
-		B b= new B();
-		Object o= /*]*/b.foo()/*[*/;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test621.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test621.java
deleted file mode 100644
index 369a8f3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test621.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package expression_in;
-
-public class A_test621 {
-	public A_test621() {
-		this(/*]*/5 + 6/*[*/);
-	}
-	public A_test621(int i) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test622.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test622.java
deleted file mode 100644
index ac3b8f5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/A_test622.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package expression_in;
-
-public class A_test622 {
-	public A_test622(int i) {
-	}
-	static class Inner extends A_test622 {
-		public Inner() {
-			super(/*]*/5 + 6/*[*/);
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/B.java
deleted file mode 100644
index 368e3d3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_in/B.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package expression_in;
-
-import java.util.List;
-
-public class B {
-	public List[] foo() {
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A.java
deleted file mode 100644
index 22a4113..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package expression_out;
-
-import java.io.File;
-
-class A {
-	public File getFile() {
-		return null;
-	}
-	public void useFile(File file) {
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test600.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test600.java
deleted file mode 100644
index f12dbc3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test600.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package expression_out;
-
-public class A_test600 {
-
-	public void foo() {
-		int i= 10;
-		if (/*]*/extracted(i)/*[*/)
-			foo();
-	}
-
-	protected boolean extracted(int i) {
-		return i < 10;
-	}	
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test601.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test601.java
deleted file mode 100644
index f52d165..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test601.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package expression_out;
-
-public class A_test601 {
-
-	public void foo() {
-		int i= 10;
-		if (/*]*/extracted(i)/*[*/)
-			foo();
-	}
-
-	protected boolean extracted(int i) {
-		return i < 10 && i < 20;
-	}	
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test602.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test602.java
deleted file mode 100644
index a876d53..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test602.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package expression_out;
-
-public class A_test602 {
-
-	public void foo() {
-		int i= 10;
-		if (/*]*/extracted(i)/*[*/)
-			foo();
-	}
-
-	protected boolean extracted(int i) {
-		return i < 10 || i < 20;
-	}	
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test603.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test603.java
deleted file mode 100644
index 6f60b4e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test603.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package expression_out;
-
-public class A_test603 {
-
-	public void foo() {
-		int i= 10;
-		if (/*]*/extracted(i)/*[*/)
-			foo();
-	}
-
-	protected boolean extracted(int i) {
-		return i == 10;
-	}	
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test604.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test604.java
deleted file mode 100644
index 981b5d6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test604.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package expression_out;
-
-public class A_test604 {
-
-	public void foo() {
-		Object o= null;
-		if (/*]*/extracted(o)/*[*/)
-			foo();
-	}
-
-	protected boolean extracted(Object o) {
-		return o == o;
-	}	
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test605.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test605.java
deleted file mode 100644
index 8f8f34a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test605.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package expression_out;
-
-public class A_test605 {
-
-	public void foo() {
-		int i= 0;
-		while (/*]*/extracted(i)/*[*/)
-			foo();
-		foo();	
-	}
-
-	protected boolean extracted(int i) {
-		return i <= 10;
-	}	
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test606.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test606.java
deleted file mode 100644
index ea4566a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test606.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package expression_out;
-
-public class A_test606 {
-
-	public void foo() {
-		int i= 0;
-		foo();
-		do {
-			foo();
-		} while (/*]*/extracted(i)/*[*/);
-	}
-
-	protected boolean extracted(int i) {
-		return i <= 10;
-	}	
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test607.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test607.java
deleted file mode 100644
index 765271b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test607.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package expression_out;
-
-public class A_test607 {
-
-	public void foo() {
-		for (int i= 0;extracted(i); i++)
-			foo();
-	}
-
-	protected boolean extracted(int i) {
-		return /*[*/ i < 10/*]*/;
-	}	
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test608.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test608.java
deleted file mode 100644
index a9906d0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test608.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package expression_out;
-
-public class A_test608 {
-	
-	public static class Scanner {
-		public int x;
-		public int y;
-	}
-	public static class Selection {
-		public int start;
-		public int end;
-	}
-	
-	public void foo(Selection selection) {
-		Scanner scanner= new Scanner();
-		
-		if (/*]*/extracted(selection, scanner)/*[*/) {
-			g();
-		}
-	}
-
-	protected boolean extracted(Selection selection, Scanner scanner) {
-		return scanner.x < selection.start && selection.start < scanner.y;
-	}
-	
-	public void g() {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test609.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test609.java
deleted file mode 100644
index e82cdb9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test609.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package expression_out;
-
-public class A_test609 {
-	public void foo() {
-		boolean b;
-		b= 1 < 10 && /*]*/extracted()/*[*/;
-	}
-	protected boolean extracted() {
-		return 2 < 20;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test610.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test610.java
deleted file mode 100644
index 2e3f62e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test610.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package expression_out;
-
-public class A_test610 {
-	public void foo() {
-		int i= /*]*/extracted()/*[*/;
-	}
-	protected int extracted() {
-		return 0;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test611.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test611.java
deleted file mode 100644
index 59b2cfe..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test611.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package expression_out;
-
-public class A_test611 {
-	class Inner {
-	}
-	public void foo() {
-		Inner inner= /*]*/extracted();
-	}
-	protected Inner extracted() {
-		return new Inner()/*]*/;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test612.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test612.java
deleted file mode 100644
index c4a560c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test612.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package expression_out;
-
-public class A_test612 {
-	class Inner {
-	}
-	public void foo() {
-		Inner[] inner= /*]*/extracted();
-	}
-	protected Inner[] extracted() {
-		return new Inner[10]/*]*/;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test613.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test613.java
deleted file mode 100644
index 070401b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test613.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package expression_out;
-
-import java.io.File;
-
-public class A_test613 {
-	public void foo() {
-		A a= null;
-		a.useFile(/*]*/extracted(a)/*[*/);
-	}
-	protected File extracted(A a) {
-		return a.getFile();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test614.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test614.java
deleted file mode 100644
index b132671..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test614.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package expression_out;
-
-import java.io.File;
-
-public class A_test614 {
-	public void foo() {
-		A a= null;
-		a.useFile(/*]*/extracted(a)/*[*/);
-	}
-	protected File extracted(A a) {
-		return a.getFile();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test615.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test615.java
deleted file mode 100644
index b656af5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test615.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package expression_out;
-
-public class A_test615 {
-	class Inner {
-	}
-	public void foo() {
-		Inner inner= null;
-		boolean b;
-		b= /*]*/extracted(inner)/*[*/;
-	}
-	protected boolean extracted(Inner inner) {
-		return inner instanceof Inner;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test616.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test616.java
deleted file mode 100644
index fce74df..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test616.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package expression_out;
-
-import java.io.File;
-
-public class A_test616 {
-	public void foo() {
-		A a= null;
-		/*]*/extracted(a)/*[*/.getName();
-	}
-	protected File extracted(A a) {
-		return a.getFile();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test617.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test617.java
deleted file mode 100644
index d58d6e9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test617.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package expression_out;
-
-public class A_test617 {
-	public int foo() {
-		return 10 + /*]*/extracted()/*[*/ + 10;
-	}
-	protected int extracted() {
-		return 20 * 30;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test618.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test618.java
deleted file mode 100644
index c629137..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test618.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package expression_out;
-
-public class A_test618 {
-	public void foo() {
-		int i= 20 + /*]*/extracted()/*[*/ + 10;
-	}
-	protected int extracted() {
-		return 10 * 30;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test619.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test619.java
deleted file mode 100644
index c3540b8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test619.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package expression_out;
-
-public class A_test619 {
-	public void foo() {
-		int f= new A[/*]*/extracted()/*[*/].length;
-	}
-	protected int extracted() {
-		return 1 + 2;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test620.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test620.java
deleted file mode 100644
index 827808b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test620.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package expression_out;
-
-import java.util.List;
-
-public class A_test620 {
-	public void foo() {
-		B b= new B();
-		Object o= /*]*/extracted(b)/*[*/;
-	}
-	protected List[] extracted(B b) {
-		return b.foo();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test621.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test621.java
deleted file mode 100644
index d6580d4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test621.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package expression_out;
-
-public class A_test621 {
-	public A_test621() {
-		this(/*]*/extracted()/*[*/);
-	}
-	protected static int extracted() {
-		return 5 + 6;
-	}
-	public A_test621(int i) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test622.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test622.java
deleted file mode 100644
index 701c800..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/A_test622.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package expression_out;
-
-public class A_test622 {
-	public A_test622(int i) {
-	}
-	static class Inner extends A_test622 {
-		public Inner() {
-			super(/*]*/extracted()/*[*/);
-		}
-		protected static int extracted() {
-			return 5 + 6;
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/B.java
deleted file mode 100644
index 2583a2a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/expression_out/B.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package expression_out;
-
-import java.util.List;
-
-public class B {
-	public List[] foo() {
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/handTests/Comments.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/handTests/Comments.java
deleted file mode 100644
index 8045ae2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/handTests/Comments.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package handTests;
-public class Comments {
-	/* comment */
-	public void foo() {
-		foo();
-		/* comment */
-		// comment
-		/** comment */
-		foo();
-	}
-	/* comment */
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test010.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test010.java
deleted file mode 100644
index 880e1b6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test010.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package invalidSelection;
-
-public class A_test010 {
-	public void /*]*/foo() {
-		foo();
-	}/*[*/
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test011.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test011.java
deleted file mode 100644
index 1adf115..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test011.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package invalidSelection;
-
-public class A_test011 {
-	public void foo() {
-		/*]*/foo(/*[*/);
-	}
-} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test012.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test012.java
deleted file mode 100644
index c89c75f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test012.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package invalidSelection;
-
-public class A_test012 {
-	public void foo() {
-		/*]*/f();
-		g(/*[*/);
-	}
-	
-	public void f() {
-	}
-	public void g() {
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test013.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test013.java
deleted file mode 100644
index b92d74d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test013.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package invalidSelection;
-
-public class A_test013 {
-	public void foo() {/*[*/
-		f();
-		g();
-	}/*[*/
-	
-	public void f() {
-	}
-	public void g() {
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test014.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test014.java
deleted file mode 100644
index de28005..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test014.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package invalidSelection;
-
-public class A_test014 {
-	public void foo() /*]*/{
-		foo();
-	}/*[*/
-	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test015.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test015.java
deleted file mode 100644
index 32e0e13..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test015.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package invalidSelection;
-
-public class A_test015 {
-	public void foo() /*]*/{
-		f();
-		g();
-	/*]*/}
-	
-	public void f() {
-	}
-	public void g() {
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test020.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test020.java
deleted file mode 100644
index d99ed0f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test020.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package invalidSelection;
-
-public class A_test020 {
-	public void foo(int x) {
-		switch(x) {
-			/*]*/case 10:
-				f();
-				break;/*[*/
-			case 11:
-				g();
-				break;
-			default:
-				f();
-				g();		
-		}
-	}
-	
-	public void f() {
-	}
-	public void g() {
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test021.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test021.java
deleted file mode 100644
index a104c30..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test021.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package invalidSelection;
-
-public class A_test021 {
-	public void foo(int x) {
-		/*]*/switch(x) {
-			case 10:
-				f();
-				break;/*[*/
-			case 11:
-				g();
-				break;
-			default:
-				f();
-				g();		
-		}
-	}
-	
-	public void f() {
-	}
-	public void g() {
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test022.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test022.java
deleted file mode 100644
index e256a20..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test022.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package invalidSelection;
-
-public class A_test022 {
-	public void foo(int x) {
-		switch(x) {
-			/*]*/case 10:
-				f();
-				break;
-			case 11:
-				g();
-				break;
-			default:
-				f();
-				g();		
-		/*]*/}
-	}
-	
-	public void f() {
-	}
-	public void g() {
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test030.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test030.java
deleted file mode 100644
index 79812d7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test030.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test030 {
-	public void foo(int x) {
-		{/*[*/
-			f();
-		}/*[*/
-	}	
-	public void f() {
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test031.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test031.java
deleted file mode 100644
index b8fc35b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test031.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test031 {
-	public void foo(int x) {
-		/*]*/{
-			f();
-		/*]*/}
-	}	
-	public void f() {
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test040.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test040.java
deleted file mode 100644
index f7a17c4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test040.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package invalidSelection;
-
-public class A_test040 {
-	public void foo() {
-		for (int i= 0; i /*]*/</*[*/ 10; i++)
-			foo();
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test041.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test041.java
deleted file mode 100644
index e3219e2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test041.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package invalidSelection;
-
-public class A_test041 {
-	public void foo() {
-		for (/*]*/int i= 0/*[*/; i < 10; i++)
-			foo();
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test042.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test042.java
deleted file mode 100644
index 87baa6f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test042.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package invalidSelection;
-
-public class A_test042 {
-	public void foo() {
-		for (int i= 0; i < 10; /*]*/i++/*[*/)
-			foo();
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test043.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test043.java
deleted file mode 100644
index 6782f44..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test043.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package invalidSelection;
-
-public class A_test043 {
-	public void foo() {
-		/*]*/for (int i= 0; i < 10; i++)/*[*/
-			foo();
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test044.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test044.java
deleted file mode 100644
index eba8d19..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test044.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package invalidSelection;
-
-public class A_test044 {
-	public void foo() {
-		/*]*/for (int i= 0; i < 10; i++)
-			foo(/*[*/);
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test045.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test045.java
deleted file mode 100644
index 8553338..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test045.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package invalidSelection;
-
-public class A_test045 {
-	public void foo() {
-		for /*]*/(int i= 0; i < 10; i++)
-			foo();/*[*/
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test046.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test046.java
deleted file mode 100644
index ad867fc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test046.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package invalidSelection;
-
-public class A_test046 {
-	public void foo() {
-		for (int i= 10; i < 10; i++)
-			for (int z= 10; z < 10; z++)
-				/*]*/foo();
-		foo()/*[*/;	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test047.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test047.java
deleted file mode 100644
index a84e445..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test047.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package invalidSelection;
-
-public class A_test047 {
-	public void foo() {
-		for (int i= 10; i < 10; i++)
-			/*]*/for (int z= 10; z < 10; z++)
-				foo();
-		foo()/*[*/;	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test048.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test048.java
deleted file mode 100644
index 69ae79b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test048.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package invalidSelection;
-
-import java.util.Enumeration;
-
-public class A_test048 {
-	public boolean flag;
-	public void foo() {
-		for (/*]*/Enumeration e= tests()/*[*/; e.hasMoreElements(); ) {
-			if (flag)
-				break;
-		}
-	}	
-	public Enumeration tests() {
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test050.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test050.java
deleted file mode 100644
index 1321a16..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test050.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package invalidSelection;
-
-public class A_test050 {
-	public void foo() {
-		while(1 /*]*/</*[*/ 10)
-			foo();
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test051.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test051.java
deleted file mode 100644
index e91b2d4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test051.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package invalidSelection;
-
-public class A_test051 {
-	public void foo() {
-		/*]*/while(1 < 10)/*[*/
-			foo();
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test052.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test052.java
deleted file mode 100644
index b374911..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test052.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package invalidSelection;
-
-public class A_test052 {
-	public boolean b() {
-		return true;
-	}
-	
-	public void foo() {
-		while(b())/*[*/
-			while(b())
-				foo();
-		foo()/*[*/;		
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test060.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test060.java
deleted file mode 100644
index e1b6bdd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test060.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package invalidSelection;
-
-public class A_test060 {
-	public void foo() {
-		do 
-			foo();
-		while(100 /*]*/>/*[*/  10);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test061.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test061.java
deleted file mode 100644
index a1e56d2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test061.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package invalidSelection;
-
-public class A_test061 {
-	public void foo() {
-		do 
-			/*]*/foo();
-		while(1 < 10);/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test062.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test062.java
deleted file mode 100644
index 4913526..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test062.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package invalidSelection;
-
-public class A_test062 {
-	public void foo() {
-		/*]*/do 
-			foo();/*[*/
-		while(1 < 10);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test063.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test063.java
deleted file mode 100644
index d834943..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test063.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package invalidSelection;
-
-public class A_test063 {
-	public void foo() {
-		do/*[*/
-			foo();
-		/*]*/while(1 < 10);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test070.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test070.java
deleted file mode 100644
index f2b6365..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test070.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package invalidSelection;
-
-public class A_test070 {
-	public int foo() {
-		int i= foo();
-		switch/*[*/ (i) {
-			case 1:
-				foo();
-			case 2:
-				foo();
-				foo();
-			case 3:
-				foo();
-			default:
-				foo();	
-		}/*[*/
-		return i;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test071.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test071.java
deleted file mode 100644
index 1e29c19..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test071.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package invalidSelection;
-
-public class A_test071 {
-	public int foo() {
-		int i= foo();
-		/*]*/switch (i) {
-			case 1:
-				foo();
-			case 2:
-				foo();
-				foo();
-			case 3:
-				foo();
-			default:
-				foo();	
-		/*]*/}
-		return i;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test072.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test072.java
deleted file mode 100644
index 786a188..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test072.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package invalidSelection;
-
-public class A_test072 {
-	public int foo() {
-		int i= foo();
-		switch (i) {
-			case 1/*]*/:
-				foo()/*[*/;
-			case 2:
-				foo();
-				foo();
-			case 3:
-				foo();
-			default:
-				foo();	
-		}
-		return i;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test073.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test073.java
deleted file mode 100644
index 921196e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test073.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package invalidSelection;
-
-public class A_test073 {
-	public int foo() {
-		int i= foo();
-		switch (i) {
-			case 1:/*[*/
-				foo();
-			case/*[*/2:
-				foo();
-				foo();
-			case 3:
-				foo();
-			default:
-				foo();	
-		}
-		return i;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test080.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test080.java
deleted file mode 100644
index 148661a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test080.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test080 {
-	public boolean fBoolean;
-	public void foo() {
-		if /*]*/(fBoolean/*[*/)
-			foo();
-		else
-			foo();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test081.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test081.java
deleted file mode 100644
index 088e444..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test081.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test081 {
-	public boolean fBoolean;
-	public void foo() {
-		/*]*/if (fBoolean)
-			foo();
-		else
-			/*]*/foo();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test082.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test082.java
deleted file mode 100644
index 8e1e3bc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test082.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test082 {
-	public boolean fBoolean;
-	public void foo() {
-		/*]*/if (fBoolean)
-			foo();/*[*/
-		else
-			foo();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test083.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test083.java
deleted file mode 100644
index 05af41d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test083.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test083 {
-	public boolean fBoolean;
-	public void foo() {
-		/*]*/if (fBoolean)
-			foo();
-		/*]*/else
-			foo();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test084.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test084.java
deleted file mode 100644
index 42cf868..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test084.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test084 {
-	public boolean fBoolean;
-	public void foo() {
-		/*]*/if (fBoolean)
-			foo();
-		else/*[*/
-			foo();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test085.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test085.java
deleted file mode 100644
index 7969c16..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test085.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test085 {
-	public boolean fBoolean;
-	public void foo() {
-		if (fBoolean)
-			foo();
-		/*]*/else
-			foo();/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test090.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test090.java
deleted file mode 100644
index 18c6c71..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test090.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package invalidSelection;
-
-public class A_test090 {
-	public void foo() {
-		for (int i= 0; i < 10; i++)
-			/*]*/break/*[*/;
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test091.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test091.java
deleted file mode 100644
index a2e5c4c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test091.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package invalidSelection;
-
-public class A_test091 {
-	public void foo() {
-		for (int i= 0; i < 10; i++)
-			/*]*/continue/*[*/;
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test092.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test092.java
deleted file mode 100644
index ccaed03..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test092.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package invalidSelection;
-
-public class A_test092 {
-	public void foo() {
-		while (true)
-			/*]*/break/*[*/;
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test093.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test093.java
deleted file mode 100644
index 165eb67..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test093.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package invalidSelection;
-
-public class A_test093 {
-	public void foo() {
-		while (true)
-			/*]*/continue/*[*/;
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test094.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test094.java
deleted file mode 100644
index d3c0b17..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test094.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package invalidSelection;
-
-public class A_test094 {
-	public void foo() {
-		do
-			/*]*/break/*[*/;
-		while(true);
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test095.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test095.java
deleted file mode 100644
index e330d16..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test095.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package invalidSelection;
-
-public class A_test095 {
-	public void foo() {
-		do
-			/*]*/continue/*[*/;
-		while(true);
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test096.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test096.java
deleted file mode 100644
index 4b0fe42..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test096.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package invalidSelection;
-
-public class A_test096 {
-	public void foo() {
-		int i= 10;
-		switch(i) {
-			case 10:
-				foo();
-				/*]*/break/*[*/;
-		}
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test100.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test100.java
deleted file mode 100644
index 8113e0b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test100.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test100 {
-	public void foo() {
-		try /*]*/{
-			foo();
-		}/*[*/ catch (Exception e) {
-			foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test101.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test101.java
deleted file mode 100644
index 26e171f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test101.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test101 {
-	public void foo() {
-		try /*]*/{
-			foo();
-		/*]*/} catch (Exception e) {
-			foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test102.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test102.java
deleted file mode 100644
index 39fd3ff..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test102.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test102 {
-	public void foo() {
-		try {/*[*/
-			foo();
-		}/*[*/ catch (Exception e) {
-			foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test103.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test103.java
deleted file mode 100644
index ffe0310..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test103.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test103 {
-	public void foo() {
-		try {
-			foo();
-		} catch (Exception e) /*]*/{
-			foo();
-		}/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test104.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test104.java
deleted file mode 100644
index 6bb367b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test104.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test104 {
-	public void foo() {
-		try {
-			foo();
-		} catch (Exception e) {/*[*/
-			foo();
-		}/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test105.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test105.java
deleted file mode 100644
index d8f6c1f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test105.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test105 {
-	public void foo() {
-		try {
-			foo();
-		} catch (Exception e) /*]*/{
-			foo();
-		/*]*/}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test106.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test106.java
deleted file mode 100644
index d5c166f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test106.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test106 {
-	public void foo() {
-		try {
-			foo();
-		} finally /*]*/{
-			foo();
-		}/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test107.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test107.java
deleted file mode 100644
index 4d8f1bd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test107.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test107 {
-	public void foo() {
-		try {
-			foo();
-		} finally {/*[*/
-			foo();
-		}/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test108.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test108.java
deleted file mode 100644
index 4c79c88..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test108.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test108 {
-	public void foo() {
-		try {
-			foo();
-		} finally /*]*/{
-			foo();
-		/*]*/}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test109.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test109.java
deleted file mode 100644
index fa68c05..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test109.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test109 {
-	public void foo() {
-		/*]*/try {
-			foo();
-		} finally {
-			foo();
-		/*]*/}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test110.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test110.java
deleted file mode 100644
index 6ecade3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test110.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test110 {
-	public void foo() {
-		try/*[*/{
-			foo();
-		} finally {
-			foo();
-		}/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test111.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test111.java
deleted file mode 100644
index c9903ff..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test111.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test111 {
-	public void foo() {
-		try {
-			foo();
-		} catch (/*]*/Exception e/*[*/) {
-			foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test112.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test112.java
deleted file mode 100644
index 689f857..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test112.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test112 {
-	public void foo() {
-		try {
-			foo();
-		} /*]*/catch (Exception e) {
-			foo();
-		}/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test113.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test113.java
deleted file mode 100644
index 2c2db9b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test113.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test113 {
-	public void foo() {
-		/*]*/try {
-			foo();
-		}/*[*/ catch (Exception e) {
-			foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test114.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test114.java
deleted file mode 100644
index 1cfce05..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test114.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test114 {
-	public void foo() {
-		try {
-			foo();
-		} /*]*/finally {
-			foo();
-		}/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test115.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test115.java
deleted file mode 100644
index 37a6af2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test115.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test115 {
-	public void foo() {
-		try {
-			foo();
-		} catch /*]*/(Exception e)/*[*/ {
-			foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test116.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test116.java
deleted file mode 100644
index 02f8ef4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test116.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package invalidSelection;
-
-public class A_test116 {
-	public void foo() {
-		try {
-			foo();
-		} catch (/*]*/Exception e/*[*/) {
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test120.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test120.java
deleted file mode 100644
index a5fad98..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test120.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package invalidSelection;
-
-public class A_test120 {
-	public boolean foo() {
-		/*]*/return/*[*/ false;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test121.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test121.java
deleted file mode 100644
index bd734f0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test121.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package invalidSelection;
-
-public class A_test121 {
-	public void foo() {
-		int x= 1;
-		int y= 2;
-		
-		/*]*/x= y + x;
-		y= x + y;/*[*/
-		
-		x++;
-		y++;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test122.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test122.java
deleted file mode 100644
index c322a8c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test122.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package invalidSelection;
-
-public class A_test122 {
-	public void foo() {
-		int x= 1;
-
-		/*]*/x= x + 2;
-		int y= 10;/*[*/
-		
-		x+= y + 20;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test123.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test123.java
deleted file mode 100644
index ace8f56..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test123.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package invalidSelection;
-
-public class A_test123 {
-	public void foo() {
-		Object /*]*/temp/*[*/= null;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test130.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test130.java
deleted file mode 100644
index b9b833d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test130.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test130 {
-	public void foo() {
-		class Inner {
-		}
-		
-		/*]*/Inner inner= new Inner();
-		foo();/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test131.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test131.java
deleted file mode 100644
index 4bcbf44..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test131.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package invalidSelection;
-
-public class A_test131 {
-	public void foo() {
-		
-		/*]*/foo();
-		class Inner {
-		}
-		foo();/*[*/
-		
-		Inner inner= new Inner();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test140.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test140.java
deleted file mode 100644
index 19a5f90..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test140.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package invalidSelection;
-
-public class A_test140 {
-	public boolean flag;
-	public int foo() {
-		int i= 10;
-		/*]*/switch(i) {
-			case 1:
-				if (flag)
-					break;
-				foo();	
-			case 2:
-				return 10;
-			default:
-				throw new NullPointerException();
-		}/*[*/
-			
-		return 10;	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test141.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test141.java
deleted file mode 100644
index c2d0f50..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test141.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package invalidSelection;
-
-public class A_test141 {
-	private boolean flag;
-	public int foo() {
-		/*]*/while(flag)
-			return 20;/*[*/
-		return 10;	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test142.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test142.java
deleted file mode 100644
index 127f394..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test142.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package invalidSelection;
-
-public class A_test142 {
-	private boolean flag;
-	public int foo() {
-		int i= 10;
-		/*]*/if (flag) {
-			i++;
-			return i;
-		}/*[*/
-		int y= i + 10;
-		return y;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test143.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test143.java
deleted file mode 100644
index b5719da..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test143.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test143 {
-	public boolean foo() {
-		/*]*/try {
-			return true;
-		} catch (Exception e) {
-		}/*[*/
-		return false;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test144.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test144.java
deleted file mode 100644
index a53244b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test144.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test144 {
-	public boolean foo() {
-		/*]*/try {
-		} catch (Exception e) {
-			return true;
-		}/*[*/
-		return false;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test145.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test145.java
deleted file mode 100644
index effe0d6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test145.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package invalidSelection;
-
-public class A_test145 {
-	boolean flag;
-	public boolean foo() {
-		/*]*/do {
-			if (flag)
-				break;
-			return false;
-		} while (flag);/*[*/
-		return true;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test146.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test146.java
deleted file mode 100644
index d1076db..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test146.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package invalidSelection;
-
-public class A_test146 {
-	boolean flag;
-	public boolean foo() {
-		while (flag) {
-			/*]*/for (int i= 0; i < 10; i++) {
-				if (flag)
-					break;
-			}
-			if (flag)
-				break;
-			return false;/*[*/
-		}
-		return true;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test147.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test147.java
deleted file mode 100644
index 43470ce..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test147.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package invalidSelection;
-
-public class A_test147 {
-	boolean flag;
-	public boolean foo() {
-		/*]*/target: {
-			for (int i= 0; i < 10; i++) {
-				if (flag)
-					break;
-				else
-					break target;
-			}
-			return false;
-		}/*[*/
-		return true;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test148.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test148.java
deleted file mode 100644
index f030140..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test148.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package invalidSelection;
-
-public class A_test148 {
-	boolean flag;
-	public boolean foo() {
-		int i= 0;
-		/*]*/switch (i) {
-			case 1:
-				return false;
-			case 2:
-				return true;
-		}/*[*/
-		return false;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test149.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test149.java
deleted file mode 100644
index adfbf99..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test149.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package invalidSelection;
-
-public class A_test149 {
-	boolean flag;
-	public boolean foo() {
-		int i= 0;
-		/*]*/switch (i) {
-			case 1:
-				break;
-			case 2:
-				return true;
-			default:
-				return false;
-		}/*[*/
-		return false;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test150.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test150.java
deleted file mode 100644
index e469082..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test150.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package invalidSelection;
-
-public class A_test150 {
-
-	public void foo() {
-		/*]*/synchronized (this) {
-			foo();
-		/*]*/}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test151.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test151.java
deleted file mode 100644
index b175d5e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test151.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package invalidSelection;
-
-public class A_test151 {
-
-	public void foo() {
-		synchronized/*[*/ (this) {
-			foo();
-		}/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test152.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test152.java
deleted file mode 100644
index 9a29fd8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test152.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package invalidSelection;
-
-public class A_test152 {
-
-	public void foo() {
-		synchronized (this) /*]*/{
-			foo();
-		/*]*/}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test153.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test153.java
deleted file mode 100644
index 477b5d2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test153.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package invalidSelection;
-
-public class A_test153 {
-
-	public void foo() {
-		synchronized(this) {/*[*/
-			foo();
-		}/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test160.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test160.java
deleted file mode 100644
index 965967c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test160.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package invalidSelection;
-
-public class A_test160 {
-	/*]*/public static class Inner {
-	}/*[*/
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test161.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test161.java
deleted file mode 100644
index ee94548..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test161.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package invalidSelection;
-
-public class A_test161 {
-	public void foo() {
-		class /*]*/Inner {
-		}/*]*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test170.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test170.java
deleted file mode 100644
index bda6db9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test170.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package invalidSelection;
-
-public class A_test170 {
-	public void foo() {
-		String tab[] = /*]*/{"hello", "world" } /*[*/;       
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test171.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test171.java
deleted file mode 100644
index cac9b44..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test171.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package invalidSelection;
-
-public class A_test171 {
-	public void foo() {
-		String /*]*/str = "ggg"/*[*/;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test172.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test172.java
deleted file mode 100644
index eca6057..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test172.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package invalidSelection;
-
-public class A_test172 {
-	public void foo() {
-		/*]*/int i= 10/*[*/, j= 20;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test173.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test173.java
deleted file mode 100644
index e9364fc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test173.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test173 {
-	public void foo() {
-		/*]*/int i= 10, j= 20;/*[*/
-		g(j);
-		g(i);
-	}
-	public void g(int i) {
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test180.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test180.java
deleted file mode 100644
index 6998bd8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test180.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package invalidSelection;
-
-public class A_test180 {
-	public A_test180() {
-		/*]*/this(10);
-		foo();/*[*/
-	}
-	public A_test180(int i) {
-		super();
-	}
-	public void foo() {
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test181.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test181.java
deleted file mode 100644
index e2ba0ee..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test181.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package invalidSelection;
-
-public class A_test181 {
-	public A_test181() {
-		/*]*/super();
-		foo();/*[*/
-	}
-	public void foo() {
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test190.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test190.java
deleted file mode 100644
index a3972fe..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test190.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package invalidSelection;
-
-public class A_test190 {
-	public int foo() {
-		int i= 10;
-		/*]*/switch(i) {
-			case 1:
-				foo();
-				break;
-			case 2:
-				foo();
-			default:
-				return 10;
-		}/*[*/
-		
-		return 20;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test191.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test191.java
deleted file mode 100644
index 8bdbd9d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test191.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package invalidSelection;
-
-public class A_test191 {
-	private boolean foo(){
-		A_test191 m= new A_test191();
-		/*[*/if (m == null)
-			return true;
-		A_test191 d= m;/*]*/
-		if (d == null)
-			return true;	
-		return true;
-	}
-
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test192.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test192.java
deleted file mode 100644
index 9fb7cea..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/invalidSelection/A_test192.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package invalidSelection;
-
-public class A_test192 {
-	public void foo() {
-		Object runnable= null;
-		Object[] disposeList= null;
-		/*]*/for (int i=0; i < disposeList.length; i++) {
-			if (disposeList [i] == null) {
-				disposeList [i] = runnable;
-				return;
-			}
-		}/*[*/
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test500.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test500.java
deleted file mode 100644
index efa573b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test500.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package locals_in;
-
-public class A_test500 {
-	public void foo() {
-		int x= 10;
-		
-		/*]*/int y= x;/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test501.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test501.java
deleted file mode 100644
index cceadbe..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test501.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package locals_in;
-
-public class A_test501 {
-	public void foo() {
-		int x= 10;
-		
-		/*]*/x= 20;
-		int y= x;/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test502.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test502.java
deleted file mode 100644
index 3343ae9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test502.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package locals_in;
-
-public class A_test502 {
-	public void foo() {
-		int x= 0;
-		int y= 0;
-
-		/*]*/x= 10;
-		y= x;
-		x= y;/*[*/		
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test503.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test503.java
deleted file mode 100644
index 55c1505..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test503.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package locals_in;
-
-public class A_test503 {
-	public void foo() {
-		int x= 10;
-		
-		/*]*/x++;/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test504.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test504.java
deleted file mode 100644
index 9a9797b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test504.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package locals_in;
-
-public class A_test504 {
-	public void foo() {
-		int x= 10;
-		
-		/*]*/--x;/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test505.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test505.java
deleted file mode 100644
index bbbe8d1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test505.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package locals_in;
-
-public class A_test505 {
-	public void foo() {
-		int x= 0;
-		
-		/*]*/x+= 1;/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test506.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test506.java
deleted file mode 100644
index b56cfec..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test506.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package locals_in;
-
-public class A_test506 {
-	public void foo() {
-		int x= 0;
-		
-		/*]*/bar(x);/*[*/
-	}
-	
-	public void bar(int i) {
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test507.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test507.java
deleted file mode 100644
index d09d70a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test507.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package locals_in;
-
-public class A_test507 {
-	public void foo() {
-		int x= 0;
-		
-		/*]*/x= 10;/*[*/
-		
-		int y= x;
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test508.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test508.java
deleted file mode 100644
index cd22028..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test508.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package locals_in;
-
-public class A_test508 {
-	public void foo() {
-		int x= 0;
-		int y= 0;
-		
-		/*]*/x= 10;
-		y= 20;/*[*/
-		
-		y= x;
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test509.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test509.java
deleted file mode 100644
index 865c81e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test509.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package locals_in;
-
-public class A_test509 {
-	public void foo() {
-		int x= 0;
-		int y= 0;
-
-		/*]*/y= x;
-		x= 0;/*[*/		
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test510.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test510.java
deleted file mode 100644
index 18c99d9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test510.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package locals_in;
-
-public class A_test510 {
-	public void foo() {
-		/*]*/int x= 0;/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test511.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test511.java
deleted file mode 100644
index f0409de..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test511.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package locals_in;
-
-public class A_test511 {
-	public void foo() {
-		/*]*/int x= 0;/*[*/
-		
-		x++;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test512.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test512.java
deleted file mode 100644
index f7bf8ed..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test512.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package locals_in;
-
-public class A_test512 {
-	public void foo() {
-		/*]*/int x= 0;
-		int y= x;/*[*/
-		
-		x++;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test513.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test513.java
deleted file mode 100644
index ed51088..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test513.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package locals_in;
-
-public class A_test513 {
-	public void foo() {
-		/*]*/int x= 0;
-		int y= 0;/*[*/
-		
-		x++;
-		y= 10;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test514.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test514.java
deleted file mode 100644
index d6834b3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test514.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package locals_in;
-
-public class A_test514 {
-	public void foo() {
-		/*]*/int x;/*[*/
-		
-		x= 10;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test515.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test515.java
deleted file mode 100644
index ae28f01..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test515.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package locals_in;
-
-public class A_test515 {
-	public void foo() {
-		int y= 10;
-		
-		/*]*/int x= y;/*[*/
-		
-		x++;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test516.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test516.java
deleted file mode 100644
index 5969c24..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test516.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package locals_in;
-
-public class A_test516 {
-	public void foo() {
-		/*]*/int i= 10, j= 20;/*[*/
-		
-		j++;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test517.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test517.java
deleted file mode 100644
index 7dcfb96..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test517.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package locals_in;
-
-public class A_test517 {
-	public void foo() {
-		/*]*/int i;
-		int j;
-		j= 20;/*[*/
-		
-		i= j + 10;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test518.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test518.java
deleted file mode 100644
index f05fa2c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test518.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package locals_in;
-
-public class A_test518 {
-	public void foo() {
-		int i;
-		
-		/*]*/i= 10;/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test519.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test519.java
deleted file mode 100644
index db301de..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test519.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package locals_in;
-
-public class A_test519 {
-	public void foo() {
-		int i;
-
-		/*]*/i= 10;/*[*/
-		
-		i= 20;		
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test520.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test520.java
deleted file mode 100644
index 21a0ebb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test520.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package locals_in;
-
-public class A_test520 {
-	public void foo() {
-		int i= 0;
-
-		/*]*/int y= i;/*[*/
-		
-		i= 20;		
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test521.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test521.java
deleted file mode 100644
index ee3501b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test521.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package locals_in;
-
-public class A_test521 {
-	public volatile boolean flag;
-	
-	public void foo() {
-		int i= 5;
-		/*]*/if (flag)
-			i= 10;/*[*/
-		i--;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test522.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test522.java
deleted file mode 100644
index 3f3f38c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test522.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package locals_in;
-
-public class A_test522 {
-	public volatile boolean flag;
-	
-	public void foo() {
-		int i= 20;
-		/*]*/target: {
-			if (flag)
-				break target;
-			i= 10;
-		}/*[*/
-		i--;
-	}	
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test523.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test523.java
deleted file mode 100644
index 070ed9f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test523.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package locals_in;
-
-public class A_test523 {
-	public volatile boolean flag;
-	
-	protected void foo() {
-		int i= 0;
-		/*]*/try {
-			if (flag)
-				throw new Exception();
-			i= 10;
-		} catch (Exception e) {
-		}/*[*/
-		read(i);
-	}	
-
-	private void read(int i) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test524.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test524.java
deleted file mode 100644
index b69fbbe..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test524.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package locals_in;
-
-public class A_test524 {
-	public volatile boolean flag;
-	
-	protected void foo() {
-		int i= 0;
-		try {
-			/*]*/if (flag)
-				throw new Exception();
-			i= 10;/*[*/
-		} catch (Exception e) {
-		}
-		read(i);
-	}	
-
-	private void read(int i) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test525.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test525.java
deleted file mode 100644
index ef5a90d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test525.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package locals_in;
-
-public class A_test525 {
-	private static class Exception1 extends Exception {
-	}
-	private static class Exception2 extends Exception {
-	}
-	
-	public volatile boolean flag;
-	
-	protected void foo() {
-		int i= 10;
-		try {
-			/*]*/try {
-				if (flag)
-					throw new Exception1();
-				if (!flag)
-					throw new Exception2();
-			} catch (Exception1 e) {
-			}
-			i= 10;/*[*/
-		} catch (Exception2 e) {
-		}
-		read(i);
-	}
-
-	private void read(int i) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test526.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test526.java
deleted file mode 100644
index d619f79..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test526.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package locals_in;
-
-public class A_test526 {
-	private static class Exception1 extends Exception {
-	}
-	private static class Exception2 extends Exception {
-	}
-	
-	public volatile boolean flag;
-	
-	protected void foo() {
-		int i= 10;
-		/*]*/try {
-			try {
-				if (flag)
-					throw new Exception1();
-				if (!flag)
-					throw new Exception2();
-			} catch (Exception1 e) {
-			}
-			i= 10;
-		} catch (Exception2 e) {
-		}/*[*/
-		read(i);
-	}
-
-	private void read(int i) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test527.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test527.java
deleted file mode 100644
index ad45cea..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test527.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package locals_in;
-
-public class A_test527 {
-	public volatile boolean flag;
-	
-	protected void foo() {
-		int i= 0;
-		/*]*/try {
-			if (flag)
-				throwException();
-			i= 10;
-		} catch (Exception e) {
-		}/*[*/
-		read(i);
-	}	
-
-	private void read(int i) {
-	}
-	
-	private void throwException() throws Exception {
-		throw new Exception();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test528.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test528.java
deleted file mode 100644
index c603a43..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test528.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package locals_in;
-
-import java.io.IOException;
-
-public class A_test528 {
-	public void foo() throws IOException {
-	}
-	
-	static class B extends A_test528 {
-		public void bar() throws IOException {
-			/*]*/super.foo();/*[*/
-		}
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test530.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test530.java
deleted file mode 100644
index ac10aea..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test530.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package locals_in;
-
-public class A_test530 {
-	class Inner {
-		public int x;
-	}
-	
-	public void foo() {
-		Inner inner= null;
-		
-		/*]*/inner= new Inner();/*[*/
-		
-		inner.x= 10;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test531.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test531.java
deleted file mode 100644
index 672feaa..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test531.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package locals_in;
-
-public class A_test531 {
-	class Inner {
-		public int x;
-	}
-	
-	public void foo() {
-		Inner inner= new Inner();
-		
-		/*]*/inner.x= 10;/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test532.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test532.java
deleted file mode 100644
index d158b34..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test532.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package locals_in;
-
-public class A_test532 {
-	class Inner {
-		public int x;
-	}
-	
-	public void foo() {
-		Inner inner= new Inner();
-		
-		/*]*/inner.x= 10;/*[*/
-		
-		int y= inner.x;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test533.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test533.java
deleted file mode 100644
index 1d845fe..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test533.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package locals_in;
-
-public class A_test533 {
-	class Inner {
-		public int x;
-	}
-	
-	public void foo() {
-		/*]*/Inner inner= new Inner();/*[*/
-
-		Inner inner2= inner;		
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test534.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test534.java
deleted file mode 100644
index 55f057c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test534.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package locals_in;
-
-public class A_test534 {
-	class Inner {
-		public int x;
-	}
-	
-	public void foo() {
-		Inner inner= new Inner();
-		
-		/*]*/inner.x= 10;/*[*/
-		
-		int y= inner.x;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test535.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test535.java
deleted file mode 100644
index 8d3e0c1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test535.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package locals_in;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-public class A_test535 {
-
-	public void bar() {
-		List allElements= new ArrayList();
-		Iterator iter= allElements.iterator();		
-
-		/*]*/while (iter.hasNext()) {
-			allElements.add(iter.next());
-		}/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test536.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test536.java
deleted file mode 100644
index 9f7e00e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test536.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package locals_in;
-
-public class A_test536 {
-
-	public void bar() {
-		{ int k= 27; k++; }
-		int i= 37;
-		if (i == 0) {
-			int k= 17;
-			/*]*/k= k + 1;
-			k += 2;
-			i += 2;
-			k++;/*[*/
-		}
-		i++;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test537.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test537.java
deleted file mode 100644
index 9e454de..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test537.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package locals_in;
-
-public class A_test537 {
-	public void foo() {
-		final int i= 10;
-		
-		/*]*/Runnable run= new Runnable() {
-			public void run() {
-				System.out.println("" + i);
-			}
-		};/*[*/
-		
-		run.run();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test538.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test538.java
deleted file mode 100644
index f5a72ba..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test538.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package locals_in;
-
-public class A_test538 {
-	public void foo() {
-		int i= 0;
-		int[] array= new int[10];
-		
-		/*]*/array[i]= 10;/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test539.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test539.java
deleted file mode 100644
index 4d48953..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test539.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package locals_in;
-
-public class A_test539 {
-	public void foo() {
-		int i= 0;
-		int[] array= new int[10];
-		int[] index= new int[1];
-		
-		/*]*/array[index[i]]= 10;/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test540.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test540.java
deleted file mode 100644
index 1580f03..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test540.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package locals_in;
-
-public class A_test540 {
-	public void foo() {
-		int i= 0;
-		int[] array= new int[10];
-		int[] index= new int[1];
-		
-		/*]*/array[0]= index[0];/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test541.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test541.java
deleted file mode 100644
index 10da382..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test541.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package locals_in;
-
-public class A_test541 {
-	class Inner {
-		public int x;
-	}
-	public void foo() {
-		int[] array= new int[10];
-		Inner inner= new Inner();
-		
-		/*]*/array[inner.x]= 10;
-		inner.x= 20;/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test542.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test542.java
deleted file mode 100644
index 42090be..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test542.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package locals_in;
-
-public class A_test542 {
-	public void foo() {
-		int i= 0;
-		int[] array= new int[10];
-		
-		/*]*/array[i++]= 10;/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test543.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test543.java
deleted file mode 100644
index 6ee4051..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test543.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package locals_in;
-
-public class A_test543 {
-	public void foo() {
-		int i= 0;
-		int[] array= new int[10];
-		
-		/*]*/array[i++]= 10;/*[*/
-		
-		i++;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test550.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test550.java
deleted file mode 100644
index 6daf971..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test550.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package locals_in;
-
-public class A_test550 {
-
-	public void foo() {
-		int i= 0;
-		while(true) {
-			/*]*/i++;/*[*/
-		}
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test551.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test551.java
deleted file mode 100644
index 1b95dba..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test551.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package locals_in;
-
-public class A_test551 {
-
-	public void foo() {
-		int i= 0;
-		do {
-			/*]*/i++;/*[*/
-		} while (true);
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test552.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test552.java
deleted file mode 100644
index c0ccf9f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test552.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package locals_in;
-
-public class A_test552 {
-
-	public void foo() {
-		int i= 0;
-		for (;true;) {
-			/*]*/i++;/*[*/
-		}
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test553.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test553.java
deleted file mode 100644
index 78e5fbc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test553.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package locals_in;
-
-public class A_test553 {
-
-	public void foo() {
-		int i= 0;
-		for (int x= i++, y= x;true;) {
-			/*]*/x= i;/*[*/
-		}
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test554.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test554.java
deleted file mode 100644
index 388ec6d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test554.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package locals_in;
-
-public class A_test554 {
-	public boolean flag;
-	public void foo() {
-		int x;
-		/*]*/if (flag)
-			x= 10;/*[*/
-		x= 20;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test555.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test555.java
deleted file mode 100644
index d2fa879..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test555.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package locals_in;
-
-public class A_test555 {
-	public boolean flag;
-	public void foo() {
-		int x= 0;
-		while (true) {
-			for (int y= x; true; ) {
-				/*]*/x= 20;/*[*/
-			}
-		}
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test556.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test556.java
deleted file mode 100644
index 840cfa1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test556.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package locals_in;
-
-public class A_test556 {
-	public boolean flag;
-	public void foo() {
-		int x= 0;
-		while (true) {
-			for (int y= 0; true; y= x) {
-				/*]*/x= 20;/*[*/
-			}
-		}
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test557.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test557.java
deleted file mode 100644
index 5645e49..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test557.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package locals_in;
-
-public class A_test557 {
-	public boolean flag;
-	public void foo() {
-		int x= 0;
-		for (int y= x; true;) {
-			/*]*/x= 20;/*[*/
-		}
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test558.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test558.java
deleted file mode 100644
index df108b0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test558.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package locals_in;
-
-public class A_test558 {
-	public boolean flag;
-	public void foo() {
-		int x= 0;
-		for (int y= 0; (x= 20) < 10; y= x) {
-			/*]*/x= 20;/*[*/
-		}
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test559.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test559.java
deleted file mode 100644
index 6162b1e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test559.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package locals_in;
-
-public class A_test559 {
-	public boolean flag;
-	public void foo() {
-		int x= 0;
-		for (int y= 0; x < 10; x= 20) {
-			/*]*/x= 20;/*[*/
-		}
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test560.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test560.java
deleted file mode 100644
index 1cb9ca0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test560.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package locals_in;
-
-public class A_test560 {
-	public boolean flag;
-	public void foo() {
-		int x= 0;
-		while (x < 10) {
-			/*]*/x= 20;/*[*/
-		}
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test561.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test561.java
deleted file mode 100644
index 00be66c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test561.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package locals_in;
-
-public class A_test561 {
-	public boolean flag;
-	public void foo() {
-		int x= 0;
-		do {
-			/*]*/x= 20;/*[*/
-		} while (x < 10);
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test562.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test562.java
deleted file mode 100644
index 0b357e8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test562.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package locals_in;
-
-public class A_test562 {
-	public boolean flag;
-	public void foo() {
-		int x= 0;
-		do {
-			int y= x;
-			/*]*/x= 20;/*[*/
-		} while (true);
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test563.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test563.java
deleted file mode 100644
index 0daa366..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test563.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package locals_in;
-
-public class A_test563 {
-	public boolean flag;
-	public void foo() {
-		int x= 0;
-		do {
-			int y= x;
-			/*]*/x= 20;/*[*/
-		} while ((x= 20) < 10);
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test564.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test564.java
deleted file mode 100644
index b359641..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test564.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package locals_in;
-
-public class A_test564 {
-	void foo(final int out){
-		int i;
-		if (out > 5){
-			/*]*/i= 1;/*[*/
-		} else {
-			i= 2;
-		}
-		i++;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test565.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test565.java
deleted file mode 100644
index 250c46d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test565.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package locals_in;
-
-public class A_test565 {
-	void f(byte bytes) {
-		String s= "k";
-		/*[*/System.out.println(s + " " + bytes); /*]*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test566.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test566.java
deleted file mode 100644
index c9a35a7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test566.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package locals_in;
-
-public class A_test566 {
-	public void foo() {
-		String args[]= null;
-		/*]*/for (int i = 0; i < args.length; i++) {
-			args[i]= "";
-		}/*[*/
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test567.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test567.java
deleted file mode 100644
index e28408e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test567.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package locals_in;
-
-public class A_test567 {
-	public void foo() {
-		String args[]= null;
-		
-		/*]*/args= new String[4];/*[*/
-		
-		args[0]= args[1];
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test568.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test568.java
deleted file mode 100644
index ed1c8f1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test568.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package locals_in;
-
-public class A_test568 {
-	public void foo() {
-		String[] args[]= null;
-		/*]*/for (int i = 0; i < args.length; i++) {
-			args[i]= null;
-		}/*[*/
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test569.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test569.java
deleted file mode 100644
index 8a165e6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_in/A_test569.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package locals_in;
-
-public class A_test569 {
-	public void foo() {
-		String[] args[]= null;
-		
-		/*]*/args= new String[1][4];/*[*/
-		
-		args[0]= args[1];
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test500.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test500.java
deleted file mode 100644
index 70eeaf0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test500.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package locals_out;
-
-public class A_test500 {
-	public void foo() {
-		int x= 10;
-		
-		/*]*/extracted(x);/*[*/
-	}
-	protected void extracted(int x) {
-		int y= x;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test501.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test501.java
deleted file mode 100644
index 456ed7c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test501.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package locals_out;
-
-public class A_test501 {
-	public void foo() {
-		int x= 10;
-		
-		/*]*/extracted();/*[*/
-	}
-	protected void extracted() {
-		int x;
-		x= 20;
-		int y= x;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test502.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test502.java
deleted file mode 100644
index a033fe9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test502.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package locals_out;
-
-public class A_test502 {
-	public void foo() {
-		int x= 0;
-		int y= 0;
-
-		/*]*/extracted();/*[*/		
-	}
-	protected void extracted() {
-		int x;
-		int y;
-		x= 10;
-		y= x;
-		x= y;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test503.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test503.java
deleted file mode 100644
index e0d6595..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test503.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package locals_out;
-
-public class A_test503 {
-	public void foo() {
-		int x= 10;
-		
-		/*]*/extracted(x);/*[*/
-	}
-	protected void extracted(int x) {
-		x++;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test504.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test504.java
deleted file mode 100644
index f324222..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test504.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package locals_out;
-
-public class A_test504 {
-	public void foo() {
-		int x= 10;
-		
-		/*]*/extracted(x);/*[*/
-	}
-	protected void extracted(int x) {
-		--x;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test505.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test505.java
deleted file mode 100644
index f1ea723..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test505.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package locals_out;
-
-public class A_test505 {
-	public void foo() {
-		int x= 0;
-		
-		/*]*/extracted(x);/*[*/
-	}
-	protected void extracted(int x) {
-		x+= 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test506.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test506.java
deleted file mode 100644
index 89df838..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test506.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package locals_out;
-
-public class A_test506 {
-	public void foo() {
-		int x= 0;
-		
-		/*]*/extracted(x);/*[*/
-	}
-
-	protected void extracted(int x) {
-		bar(x);
-	}
-	
-	public void bar(int i) {
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test507.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test507.java
deleted file mode 100644
index ba429d5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test507.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package locals_out;
-
-public class A_test507 {
-	public void foo() {
-		int x= 0;
-		
-		/*]*/x = extracted();/*[*/
-		
-		int y= x;
-	}
-	protected int extracted() {
-		int x;
-		x= 10;
-		return x;
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test508.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test508.java
deleted file mode 100644
index 75b9ed1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test508.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package locals_out;
-
-public class A_test508 {
-	public void foo() {
-		int x= 0;
-		int y= 0;
-		
-		/*]*/x = extracted();/*[*/
-		
-		y= x;
-	}
-	protected int extracted() {
-		int x;
-		int y;
-		x= 10;
-		y= 20;
-		return x;
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test509.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test509.java
deleted file mode 100644
index 40c69ca..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test509.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package locals_out;
-
-public class A_test509 {
-	public void foo() {
-		int x= 0;
-		int y= 0;
-
-		/*]*/extracted(x);/*[*/		
-	}
-	protected void extracted(int x) {
-		int y;
-		y= x;
-		x= 0;
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test510.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test510.java
deleted file mode 100644
index 235d7d7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test510.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package locals_out;
-
-public class A_test510 {
-	public void foo() {
-		/*]*/extracted();/*[*/
-	}
-	protected void extracted() {
-		int x= 0;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test511.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test511.java
deleted file mode 100644
index 2e5c094..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test511.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package locals_out;
-
-public class A_test511 {
-	public void foo() {
-		/*]*/int x = extracted();/*[*/
-		
-		x++;
-	}
-	protected int extracted() {
-		int x= 0;
-		return x;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test512.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test512.java
deleted file mode 100644
index b9033d7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test512.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package locals_out;
-
-public class A_test512 {
-	public void foo() {
-		/*]*/int x = extracted();/*[*/
-		
-		x++;
-	}
-	protected int extracted() {
-		int x= 0;
-		int y= x;
-		return x;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test513.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test513.java
deleted file mode 100644
index 2b8b0c7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test513.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package locals_out;
-
-public class A_test513 {
-	public void foo() {
-		/*]*/int y;
-		int x = extracted();/*[*/
-		
-		x++;
-		y= 10;
-	}
-	protected int extracted() {
-		int x= 0;
-		int y= 0;
-		return x;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test514.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test514.java
deleted file mode 100644
index 230429b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test514.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package locals_out;
-
-public class A_test514 {
-	public void foo() {
-		/*]*/int x;
-		extracted();/*[*/
-		
-		x= 10;
-	}
-	protected void extracted() {
-		int x;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test515.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test515.java
deleted file mode 100644
index b4f803a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test515.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package locals_out;
-
-public class A_test515 {
-	public void foo() {
-		int y= 10;
-		
-		/*]*/int x = extracted(y);/*[*/
-		
-		x++;
-	}
-	protected int extracted(int y) {
-		int x= y;
-		return x;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test516.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test516.java
deleted file mode 100644
index 60d0f74..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test516.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package locals_out;
-
-public class A_test516 {
-	public void foo() {
-		/*]*/int j = extracted();/*[*/
-		
-		j++;
-	}
-	protected int extracted() {
-		int i= 10, j= 20;
-		return j;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test517.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test517.java
deleted file mode 100644
index e4ac027..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test517.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package locals_out;
-
-public class A_test517 {
-	public void foo() {
-		/*]*/int i;
-		int j = extracted();/*[*/
-		
-		i= j + 10;
-	}
-	protected int extracted() {
-		int i;
-		int j;
-		j= 20;
-		return j;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test518.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test518.java
deleted file mode 100644
index 1b19c83..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test518.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package locals_out;
-
-public class A_test518 {
-	public void foo() {
-		int i;
-		
-		/*]*/extracted();/*[*/
-	}
-	protected void extracted() {
-		int i;
-		i= 10;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test519.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test519.java
deleted file mode 100644
index 0fff76a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test519.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package locals_out;
-
-public class A_test519 {
-	public void foo() {
-		int i;
-
-		/*]*/extracted();/*[*/
-		
-		i= 20;		
-	}
-	protected void extracted() {
-		int i;
-		i= 10;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test520.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test520.java
deleted file mode 100644
index f9109ed..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test520.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package locals_out;
-
-public class A_test520 {
-	public void foo() {
-		int i= 0;
-
-		/*]*/extracted(i);/*[*/
-		
-		i= 20;		
-	}
-	protected void extracted(int i) {
-		int y= i;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test521.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test521.java
deleted file mode 100644
index 35390fa..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test521.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package locals_out;
-
-public class A_test521 {
-	public volatile boolean flag;
-	
-	public void foo() {
-		int i= 5;
-		/*]*/i = extracted(i);/*[*/
-		i--;
-	}
-
-	protected int extracted(int i) {
-		if (flag)
-			i= 10;
-		return i;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test522.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test522.java
deleted file mode 100644
index 5e7b7de..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test522.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package locals_out;
-
-public class A_test522 {
-	public volatile boolean flag;
-	
-	public void foo() {
-		int i= 20;
-		/*]*/i = extracted(i);/*[*/
-		i--;
-	}
-
-	protected int extracted(int i) {
-		target: {
-			if (flag)
-				break target;
-			i= 10;
-		}
-		return i;
-	}	
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test523.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test523.java
deleted file mode 100644
index d546e11..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test523.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package locals_out;
-
-public class A_test523 {
-	public volatile boolean flag;
-	
-	protected void foo() {
-		int i= 0;
-		/*]*/i = extracted(i);/*[*/
-		read(i);
-	}
-
-	protected int extracted(int i) {
-		try {
-			if (flag)
-				throw new Exception();
-			i= 10;
-		} catch (Exception e) {
-		}
-		return i;
-	}	
-
-	private void read(int i) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test524.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test524.java
deleted file mode 100644
index d8bc277..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test524.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package locals_out;
-
-public class A_test524 {
-	public volatile boolean flag;
-	
-	protected void foo() {
-		int i= 0;
-		try {
-			/*]*/i = extracted();/*[*/
-		} catch (Exception e) {
-		}
-		read(i);
-	}
-
-	protected int extracted() throws Exception {
-		int i;
-		if (flag)
-			throw new Exception();
-		i= 10;
-		return i;
-	}	
-
-	private void read(int i) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test525.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test525.java
deleted file mode 100644
index 0ebe04f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test525.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package locals_out;
-
-public class A_test525 {
-	private static class Exception1 extends Exception {
-	}
-	private static class Exception2 extends Exception {
-	}
-	
-	public volatile boolean flag;
-	
-	protected void foo() {
-		int i= 10;
-		try {
-			/*]*/i = extracted();/*[*/
-		} catch (Exception2 e) {
-		}
-		read(i);
-	}
-
-	protected int extracted() throws Exception2 {
-		int i;
-		try {
-			if (flag)
-				throw new Exception1();
-			if (!flag)
-				throw new Exception2();
-		} catch (Exception1 e) {
-		}
-		i= 10;
-		return i;
-	}
-
-	private void read(int i) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test526.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test526.java
deleted file mode 100644
index 904a285..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test526.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package locals_out;
-
-public class A_test526 {
-	private static class Exception1 extends Exception {
-	}
-	private static class Exception2 extends Exception {
-	}
-	
-	public volatile boolean flag;
-	
-	protected void foo() {
-		int i= 10;
-		/*]*/i = extracted(i);/*[*/
-		read(i);
-	}
-
-	protected int extracted(int i) {
-		try {
-			try {
-				if (flag)
-					throw new Exception1();
-				if (!flag)
-					throw new Exception2();
-			} catch (Exception1 e) {
-			}
-			i= 10;
-		} catch (Exception2 e) {
-		}
-		return i;
-	}
-
-	private void read(int i) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test527.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test527.java
deleted file mode 100644
index 89426a9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test527.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package locals_out;
-
-public class A_test527 {
-	public volatile boolean flag;
-	
-	protected void foo() {
-		int i= 0;
-		/*]*/i = extracted(i);/*[*/
-		read(i);
-	}
-
-	protected int extracted(int i) {
-		try {
-			if (flag)
-				throwException();
-			i= 10;
-		} catch (Exception e) {
-		}
-		return i;
-	}	
-
-	private void read(int i) {
-	}
-	
-	private void throwException() throws Exception {
-		throw new Exception();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test528.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test528.java
deleted file mode 100644
index 2f9aa0c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test528.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package locals_out;
-
-import java.io.IOException;
-
-public class A_test528 {
-	public void foo() throws IOException {
-	}
-	
-	static class B extends A_test528 {
-		public void bar() throws IOException {
-			/*]*/extracted();/*[*/
-		}
-		protected void extracted() throws IOException {
-			super.foo();
-		}
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test530.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test530.java
deleted file mode 100644
index d074ad1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test530.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package locals_out;
-
-public class A_test530 {
-	class Inner {
-		public int x;
-	}
-	
-	public void foo() {
-		Inner inner= null;
-		
-		/*]*/inner = extracted();/*[*/
-		
-		inner.x= 10;
-	}
-
-	protected Inner extracted() {
-		Inner inner;
-		inner= new Inner();
-		return inner;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test531.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test531.java
deleted file mode 100644
index 45a017e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test531.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package locals_out;
-
-public class A_test531 {
-	class Inner {
-		public int x;
-	}
-	
-	public void foo() {
-		Inner inner= new Inner();
-		
-		/*]*/extracted(inner);/*[*/
-	}
-
-	protected void extracted(Inner inner) {
-		inner.x= 10;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test532.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test532.java
deleted file mode 100644
index e6c0ab6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test532.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package locals_out;
-
-public class A_test532 {
-	class Inner {
-		public int x;
-	}
-	
-	public void foo() {
-		Inner inner= new Inner();
-		
-		/*]*/extracted(inner);/*[*/
-		
-		int y= inner.x;
-	}
-
-	protected void extracted(Inner inner) {
-		inner.x= 10;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test533.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test533.java
deleted file mode 100644
index 586710d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test533.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package locals_out;
-
-public class A_test533 {
-	class Inner {
-		public int x;
-	}
-	
-	public void foo() {
-		/*]*/Inner inner = extracted();/*[*/
-
-		Inner inner2= inner;		
-	}
-
-	protected Inner extracted() {
-		Inner inner= new Inner();
-		return inner;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test534.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test534.java
deleted file mode 100644
index db47339..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test534.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package locals_out;
-
-public class A_test534 {
-	class Inner {
-		public int x;
-	}
-	
-	public void foo() {
-		Inner inner= new Inner();
-		
-		/*]*/extracted(inner);/*[*/
-		
-		int y= inner.x;
-	}
-
-	protected void extracted(Inner inner) {
-		inner.x= 10;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test535.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test535.java
deleted file mode 100644
index fd75134..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test535.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package locals_out;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-public class A_test535 {
-
-	public void bar() {
-		List allElements= new ArrayList();
-		Iterator iter= allElements.iterator();		
-
-		/*]*/extracted(allElements, iter);/*[*/
-	}
-
-	protected void extracted(List allElements, Iterator iter) {
-		while (iter.hasNext()) {
-			allElements.add(iter.next());
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test536.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test536.java
deleted file mode 100644
index 1732c7b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test536.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package locals_out;
-
-public class A_test536 {
-
-	public void bar() {
-		{ int k= 27; k++; }
-		int i= 37;
-		if (i == 0) {
-			int k= 17;
-			/*]*/i = extracted(i, k);/*[*/
-		}
-		i++;
-	}
-
-	protected int extracted(int i, int k) {
-		k= k + 1;
-		k += 2;
-		i += 2;
-		k++;
-		return i;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test537.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test537.java
deleted file mode 100644
index b965924..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test537.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package locals_out;
-
-public class A_test537 {
-	public void foo() {
-		final int i= 10;
-		
-		/*]*/Runnable run = extracted(i);/*[*/
-		
-		run.run();
-	}
-	protected Runnable extracted(final int i) {
-		Runnable run= new Runnable() {
-			public void run() {
-				System.out.println("" + i);
-			}
-		};
-		return run;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test538.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test538.java
deleted file mode 100644
index 3db7e04..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test538.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package locals_out;
-
-public class A_test538 {
-	public void foo() {
-		int i= 0;
-		int[] array= new int[10];
-		
-		/*]*/extracted(i, array);/*[*/
-	}
-	protected void extracted(int i, int[] array) {
-		array[i]= 10;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test539.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test539.java
deleted file mode 100644
index df7ab1a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test539.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package locals_out;
-
-public class A_test539 {
-	public void foo() {
-		int i= 0;
-		int[] array= new int[10];
-		int[] index= new int[1];
-		
-		/*]*/extracted(i, array, index);/*[*/
-	}
-	protected void extracted(int i, int[] array, int[] index) {
-		array[index[i]]= 10;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test540.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test540.java
deleted file mode 100644
index e2ab5bb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test540.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package locals_out;
-
-public class A_test540 {
-	public void foo() {
-		int i= 0;
-		int[] array= new int[10];
-		int[] index= new int[1];
-		
-		/*]*/extracted(array, index);/*[*/
-	}
-	protected void extracted(int[] array, int[] index) {
-		array[0]= index[0];
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test541.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test541.java
deleted file mode 100644
index 455bf0f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test541.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package locals_out;
-
-public class A_test541 {
-	class Inner {
-		public int x;
-	}
-	public void foo() {
-		int[] array= new int[10];
-		Inner inner= new Inner();
-		
-		/*]*/extracted(array, inner);/*[*/
-	}
-	protected void extracted(int[] array, Inner inner) {
-		array[inner.x]= 10;
-		inner.x= 20;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test542.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test542.java
deleted file mode 100644
index 0775a9c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test542.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package locals_out;
-
-public class A_test542 {
-	public void foo() {
-		int i= 0;
-		int[] array= new int[10];
-		
-		/*]*/extracted(i, array);/*[*/
-	}
-	protected void extracted(int i, int[] array) {
-		array[i++]= 10;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test543.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test543.java
deleted file mode 100644
index 509a1ad..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test543.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package locals_out;
-
-public class A_test543 {
-	public void foo() {
-		int i= 0;
-		int[] array= new int[10];
-		
-		/*]*/i = extracted(i, array);/*[*/
-		
-		i++;
-	}
-	protected int extracted(int i, int[] array) {
-		array[i++]= 10;
-		return i;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test550.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test550.java
deleted file mode 100644
index b94eafa..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test550.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package locals_out;
-
-public class A_test550 {
-
-	public void foo() {
-		int i= 0;
-		while(true) {
-			/*]*/i = extracted(i);/*[*/
-		}
-	}
-
-	protected int extracted(int i) {
-		i++;
-		return i;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test551.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test551.java
deleted file mode 100644
index 8632aa0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test551.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package locals_out;
-
-public class A_test551 {
-
-	public void foo() {
-		int i= 0;
-		do {
-			/*]*/i = extracted(i);/*[*/
-		} while (true);
-	}
-
-	protected int extracted(int i) {
-		i++;
-		return i;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test552.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test552.java
deleted file mode 100644
index 4d893d0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test552.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package locals_out;
-
-public class A_test552 {
-
-	public void foo() {
-		int i= 0;
-		for (;true;) {
-			/*]*/i = extracted(i);/*[*/
-		}
-	}
-
-	protected int extracted(int i) {
-		i++;
-		return i;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test553.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test553.java
deleted file mode 100644
index 09f2f35..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test553.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package locals_out;
-
-public class A_test553 {
-
-	public void foo() {
-		int i= 0;
-		for (int x= i++, y= x;true;) {
-			/*]*/extracted(i);/*[*/
-		}
-	}
-
-	protected void extracted(int i) {
-		int x;
-		x= i;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test554.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test554.java
deleted file mode 100644
index d5c611b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test554.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package locals_out;
-
-public class A_test554 {
-	public boolean flag;
-	public void foo() {
-		int x;
-		/*]*/extracted();/*[*/
-		x= 20;
-	}
-	protected void extracted() {
-		int x;
-		if (flag)
-			x= 10;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test555.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test555.java
deleted file mode 100644
index 353ba06..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test555.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package locals_out;
-
-public class A_test555 {
-	public boolean flag;
-	public void foo() {
-		int x= 0;
-		while (true) {
-			for (int y= x; true; ) {
-				/*]*/x = extracted();/*[*/
-			}
-		}
-	}
-	protected int extracted() {
-		int x;
-		x= 20;
-		return x;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test556.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test556.java
deleted file mode 100644
index 1bd2f72..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test556.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package locals_out;
-
-public class A_test556 {
-	public boolean flag;
-	public void foo() {
-		int x= 0;
-		while (true) {
-			for (int y= 0; true; y= x) {
-				/*]*/x = extracted();/*[*/
-			}
-		}
-	}
-	protected int extracted() {
-		int x;
-		x= 20;
-		return x;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test557.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test557.java
deleted file mode 100644
index 0e6706d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test557.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package locals_out;
-
-public class A_test557 {
-	public boolean flag;
-	public void foo() {
-		int x= 0;
-		for (int y= x; true;) {
-			/*]*/extracted();/*[*/
-		}
-	}
-	protected void extracted() {
-		int x;
-		x= 20;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test558.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test558.java
deleted file mode 100644
index 41ce585..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test558.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package locals_out;
-
-public class A_test558 {
-	public boolean flag;
-	public void foo() {
-		int x= 0;
-		for (int y= 0; (x= 20) < 10; y= x) {
-			/*]*/x = extracted();/*[*/
-		}
-	}
-	protected int extracted() {
-		int x;
-		x= 20;
-		return x;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test559.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test559.java
deleted file mode 100644
index 99a84c2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test559.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package locals_out;
-
-public class A_test559 {
-	public boolean flag;
-	public void foo() {
-		int x= 0;
-		for (int y= 0; x < 10; x= 20) {
-			/*]*/x = extracted();/*[*/
-		}
-	}
-	protected int extracted() {
-		int x;
-		x= 20;
-		return x;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test560.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test560.java
deleted file mode 100644
index a3f81bc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test560.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package locals_out;
-
-public class A_test560 {
-	public boolean flag;
-	public void foo() {
-		int x= 0;
-		while (x < 10) {
-			/*]*/x = extracted();/*[*/
-		}
-	}
-	protected int extracted() {
-		int x;
-		x= 20;
-		return x;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test561.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test561.java
deleted file mode 100644
index ce60f27..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test561.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package locals_out;
-
-public class A_test561 {
-	public boolean flag;
-	public void foo() {
-		int x= 0;
-		do {
-			/*]*/x = extracted();/*[*/
-		} while (x < 10);
-	}
-	protected int extracted() {
-		int x;
-		x= 20;
-		return x;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test562.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test562.java
deleted file mode 100644
index d07760a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test562.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package locals_out;
-
-public class A_test562 {
-	public boolean flag;
-	public void foo() {
-		int x= 0;
-		do {
-			int y= x;
-			/*]*/x = extracted();/*[*/
-		} while (true);
-	}
-	protected int extracted() {
-		int x;
-		x= 20;
-		return x;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test563.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test563.java
deleted file mode 100644
index 235b7e1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test563.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package locals_out;
-
-public class A_test563 {
-	public boolean flag;
-	public void foo() {
-		int x= 0;
-		do {
-			int y= x;
-			/*]*/extracted();/*[*/
-		} while ((x= 20) < 10);
-	}
-	protected void extracted() {
-		int x;
-		x= 20;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test564.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test564.java
deleted file mode 100644
index f70a6b9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test564.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package locals_out;
-
-public class A_test564 {
-	void foo(final int out){
-		int i;
-		if (out > 5){
-			/*]*/i = extracted();/*[*/
-		} else {
-			i= 2;
-		}
-		i++;
-	}
-	protected int extracted() {
-		int i;
-		i= 1;
-		return i;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test565.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test565.java
deleted file mode 100644
index 286b8b8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test565.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package locals_out;
-
-public class A_test565 {
-	void f(byte bytes) {
-		String s= "k";
-		extracted(bytes, s);
-	}
-	protected void extracted(byte bytes, String s) {
-		/*[*/System.out.println(s + " " + bytes); /*]*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test566.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test566.java
deleted file mode 100644
index edfdbe3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test566.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package locals_out;
-
-public class A_test566 {
-	public void foo() {
-		String args[]= null;
-		/*]*/extracted(args);/*[*/
-	}
-	protected void extracted(String[] args) {
-		for (int i = 0; i < args.length; i++) {
-			args[i]= "";
-		}
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test567.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test567.java
deleted file mode 100644
index 33e6e8e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test567.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package locals_out;
-
-public class A_test567 {
-	public void foo() {
-		String args[]= null;
-		
-		/*]*/args = extracted();/*[*/
-		
-		args[0]= args[1];
-	}
-	protected String[] extracted() {
-		String[] args;
-		args= new String[4];
-		return args;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test568.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test568.java
deleted file mode 100644
index 7cd1a5c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test568.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package locals_out;
-
-public class A_test568 {
-	public void foo() {
-		String[] args[]= null;
-		/*]*/extracted(args);/*[*/
-	}
-	protected void extracted(String[][] args) {
-		for (int i = 0; i < args.length; i++) {
-			args[i]= null;
-		}
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test569.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test569.java
deleted file mode 100644
index 47960a5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/locals_out/A_test569.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package locals_out;
-
-public class A_test569 {
-	public void foo() {
-		String[] args[]= null;
-		
-		/*]*/args = extracted();/*[*/
-		
-		args[0]= args[1];
-	}
-	protected String[][] extracted() {
-		String[][] args;
-		args= new String[1][4];
-		return args;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/nested_in/A_test650.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/nested_in/A_test650.java
deleted file mode 100644
index a239a99..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/nested_in/A_test650.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package nested_in;
-
-public class A_test650 {
-	public class Inner {
-		public void foo() {
-			/*]*/foo();/*[*/
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/nested_in/A_test651.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/nested_in/A_test651.java
deleted file mode 100644
index 83ec9b5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/nested_in/A_test651.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package nested_in;
-
-public class A_test651 {
-	public void foo() {
-		Runnable run= new Runnable() {
-			public void run() {
-				/*]*/foo();/*[*/
-			}
-		};
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/nested_in/A_test652.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/nested_in/A_test652.java
deleted file mode 100644
index a48aa0f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/nested_in/A_test652.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package nested_in;
-
-public class A_test652 {
-	public void foo() {
-		Runnable run= new Runnable() {
-			public void run() {
-				foo();
-			}
-		};
-		
-		/*]*/foo();/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/nested_in/A_test653.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/nested_in/A_test653.java
deleted file mode 100644
index f414654..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/nested_in/A_test653.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package nested_in;
-
-public class A_test653 {
-	public A_test653() {
-		/*]*/foo();/*[*/
-	}
-	public void foo() {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/nested_in/A_test654.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/nested_in/A_test654.java
deleted file mode 100644
index 622f956..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/nested_in/A_test654.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package nested_in;
-
-public class A_test654 {
-	public void foo() {
-		class Inner {
-			public void foo() {
-				/*]*/foo();/*[*/
-			}
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/nested_out/A_test650.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/nested_out/A_test650.java
deleted file mode 100644
index d757d1d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/nested_out/A_test650.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package nested_out;
-
-public class A_test650 {
-	public class Inner {
-		public void foo() {
-			/*]*/extracted();/*[*/
-		}
-		protected void extracted() {
-			foo();
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/nested_out/A_test651.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/nested_out/A_test651.java
deleted file mode 100644
index b326262..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/nested_out/A_test651.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package nested_out;
-
-public class A_test651 {
-	public void foo() {
-		Runnable run= new Runnable() {
-			public void run() {
-				/*]*/extracted();/*[*/
-			}
-			protected void extracted() {
-				foo();
-			}
-		};
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/nested_out/A_test652.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/nested_out/A_test652.java
deleted file mode 100644
index 091abf7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/nested_out/A_test652.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package nested_out;
-
-public class A_test652 {
-	public void foo() {
-		Runnable run= new Runnable() {
-			public void run() {
-				foo();
-			}
-		};
-		
-		/*]*/extracted();/*[*/
-	}
-	protected void extracted() {
-		foo();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/nested_out/A_test653.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/nested_out/A_test653.java
deleted file mode 100644
index 88fef31..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/nested_out/A_test653.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package nested_out;
-
-public class A_test653 {
-	public A_test653() {
-		/*]*/extracted();/*[*/
-	}
-	protected void extracted() {
-		foo();
-	}
-	public void foo() {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/nested_out/A_test654.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/nested_out/A_test654.java
deleted file mode 100644
index a94daeb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/nested_out/A_test654.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package nested_out;
-
-public class A_test654 {
-	public void foo() {
-		class Inner {
-			public void foo() {
-				/*]*/extracted();/*[*/
-			}
-			protected void extracted() {
-				foo();
-			}
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test700.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test700.java
deleted file mode 100644
index ae7308f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test700.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package return_in;
-
-public class A_test700 {
-	public void foo() {
-		/*]*/return;/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test701.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test701.java
deleted file mode 100644
index dd3c417..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test701.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package return_in;
-
-public class A_test701 {
-	public boolean foo() {
-		/*]*/return true;/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test702.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test702.java
deleted file mode 100644
index 01eb47e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test702.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package return_in;
-
-public class A_test702 {
-	public boolean foo() {
-		/*]*/if (10 == 10)
-			return true;
-		else
-			return false;/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test703.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test703.java
deleted file mode 100644
index 347de66..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test703.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package return_in;
-
-public class A_test703 {
-	public boolean foo() {
-		/*]*/if (0 == 0) {
-			if (10 == 10)
-				return true;
-			else
-				return false;
-		}
-		foo();
-		return false;/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test704.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test704.java
deleted file mode 100644
index ba14730..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test704.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package return_in;
-
-public class A_test704 {
-	private boolean flag;
-	public boolean foo() {
-		/*]*/do {
-			return true;
-		} while (flag);/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test705.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test705.java
deleted file mode 100644
index 1d8747a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test705.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package return_in;
-
-public class A_test705 {
-	public boolean foo() {
-		/*]*/try {
-			foo();
-		} catch(Exception e) {
-		} finally {
-			return false;
-		}/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test706.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test706.java
deleted file mode 100644
index 7794409..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test706.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package return_in;
-
-public class A_test706 {
-	public boolean foo() {
-		/*]*/try {
-			foo();
-			return true;
-		} catch(Exception e) {
-			return false;
-		}/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test707.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test707.java
deleted file mode 100644
index df29c8d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test707.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package return_in;
-
-public class A_test707 {
-	boolean flag;
-	public boolean foo() {
-		/*]*/target: {
-			do {
-				if (flag)
-					break target;
-				return false;
-			} while (flag);
-		}
-		return true;/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test708.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test708.java
deleted file mode 100644
index 0107908..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test708.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package return_in;
-
-public class A_test708 {
-	boolean flag;
-	public boolean foo() {
-		/*]*/do {
-			if (flag)
-				foo();
-			return true;
-		} while(flag);/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test709.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test709.java
deleted file mode 100644
index 2a4ab6b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test709.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package return_in;
-
-public class A_test709 {
-	public boolean foo() {
-		int i= 0;
-		/*]*/switch (i) {
-			case 1:
-				return true;
-			default:
-				return false;
-		}/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test710.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test710.java
deleted file mode 100644
index 9ba7b45..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test710.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package return_in;
-
-public class A_test710 {
-	public boolean foo() {
-		int i= 0;
-		/*]*/switch (i) {
-			case 1:
-			case 2:
-				return true;
-			default:
-				return false;
-		}/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test711.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test711.java
deleted file mode 100644
index 86a9d03..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test711.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package return_in;
-
-public class A_test711 {
-	public boolean foo() {
-		int i= 0;
-		/*]*/switch (i) {
-			case 1:
-				foo();
-			case 2:
-				return true;
-			default:
-				return false;
-		}/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test712.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test712.java
deleted file mode 100644
index 8e4da5f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test712.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package return_in;
-
-import java.util.List;
-
-public class A_test712 {
-	public List foo() {
-		/*]*/return null;/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test713.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test713.java
deleted file mode 100644
index a91efc1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test713.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package return_in;
-
-public class A_test713 {
-	public java.util.List foo() {
-		/*]*/return null;/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test714.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test714.java
deleted file mode 100644
index 18d3a3ef..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test714.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package return_in;
-
-public class A_test714 {
-	public boolean foo() {
-		/*]*/boolean b= false;
-		foo();
-		return (b == true);/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test715.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test715.java
deleted file mode 100644
index 1044c27..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test715.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package return_in;
-
-public class A_test715 {
-	public interface I {
-		public boolean run();
-	}
-	public void foo() {
-		/*]*/bar (this, new I() {
-			public boolean run() {
-				return true;
-			}
-		});/*[*/
-	}
-	public void bar(A_test715 a, I i) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test716.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test716.java
deleted file mode 100644
index a4cfffc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test716.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package return_in;
-
-public class A_test716 {
-	public boolean flag;
-	public boolean foo() {
-		/*]*/if (flag)
-			return false;
-		else
-			throw new NullPointerException();/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test717.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test717.java
deleted file mode 100644
index 1ad76cf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test717.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package return_in;
-
-public class A_test717 {
-	public boolean foo() {
-		int i= 0;
-		/*]*/switch(i) {
-			case 10:
-				return false;
-			default:
-				throw new NullPointerException();	
-		}/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test718.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test718.java
deleted file mode 100644
index 17a1436..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test718.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package return_in;
-
-public class A_test718 {
-	public boolean foo() {
-		int i= 0;
-		/*]*/switch(i) {
-			case 10:
-				throw new NullPointerException();	
-			default:
-				return false;
-		}/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test719.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test719.java
deleted file mode 100644
index 9b0670e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test719.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package return_in;
-public class A_test719 {
-	public boolean foo() {
-		/*]*/if (foo())
-			return true;
-		if (foo())
-			return true;
-		else
-			return false;/*[*/
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test720.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test720.java
deleted file mode 100644
index 4716e0f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test720.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package return_in;
-
-public class A_test720 {
-	private boolean flag;
-	public boolean foo() {
-		if (flag) {
-			/*]*/try {
-				foo();
-			} catch(Exception e) {
-			}
-			return false;/*[*/
-		}
-		return true;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test721.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test721.java
deleted file mode 100644
index a00fda0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test721.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package return_in;
-
-public class A_test721 {
-	public volatile boolean flag;
-	
-	public void foo() {
-		int i;
-		/*]*/i= 10;/*[*/
-		if (flag)
-			i= 20;
-		i--;
-	}
-
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test722.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test722.java
deleted file mode 100644
index 8c05b86..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test722.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package return_in;
-
-public class A_test722 {
-	void f(){
-		for (int i = 0; i < 10; i++) {
-			/*]*/for (int j = 0; j < 10; j++) {
-			}/*[*/
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test723.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test723.java
deleted file mode 100644
index 5e4fb2e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test723.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package return_in;
-
-public class A_test723 {
-	public void foo() {
-		{
-			int i= 0;
-			/*]*/i--;/*[*/
-			i++;
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test724.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test724.java
deleted file mode 100644
index e2565c1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test724.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package return_in;
-
-public class A_test724 {
-	protected void foo() {
-		int i= 0;
-		int j= 1;
-		switch (j) {
-			case 1 :
-				/*[*/
-				i= 1;/*]*/
-				break;
-			default :
-				i= -1;
-				break;
-		}
-		System.out.println(i);
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test725.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test725.java
deleted file mode 100644
index b05c952..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test725.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package return_in;
-
-public class A_test725 {
-	private boolean flag;
-	protected void foo() {
-		int i= 0;
-		if (flag) {
-			/*]*/i= 10;/*[*/
-			i= 20;
-		} else {
-			read(i);
-		}
-		read(i);
-	}
-	private void read(int i) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test726.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test726.java
deleted file mode 100644
index 43cdf09..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_in/A_test726.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package return_in;
-
-public class A_test726 {
-
-	boolean flag;
-
-	protected void foo() {
-		int j= 0;
-		for(int i= 0; i < 10; i++) {
-			if (flag) {
-				/*]*/j= 10;/*[*/
-			} else {
-				read(j);
-			}
-		}
-	}
-	
-	private void read(int i) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test700.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test700.java
deleted file mode 100644
index 781669c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test700.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package return_out;
-
-public class A_test700 {
-	public void foo() {
-		/*]*/extracted();
-		return;/*[*/
-	}
-	protected void extracted() {
-		return;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test701.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test701.java
deleted file mode 100644
index 600524d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test701.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package return_out;
-
-public class A_test701 {
-	public boolean foo() {
-		/*]*/return extracted();/*[*/
-	}
-	protected boolean extracted() {
-		return true;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test702.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test702.java
deleted file mode 100644
index 4b5a37a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test702.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package return_out;
-
-public class A_test702 {
-	public boolean foo() {
-		/*]*/return extracted();/*[*/
-	}
-	protected boolean extracted() {
-		if (10 == 10)
-			return true;
-		else
-			return false;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test703.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test703.java
deleted file mode 100644
index 7a883c3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test703.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package return_out;
-
-public class A_test703 {
-	public boolean foo() {
-		/*]*/return extracted();/*[*/
-	}
-	protected boolean extracted() {
-		if (0 == 0) {
-			if (10 == 10)
-				return true;
-			else
-				return false;
-		}
-		foo();
-		return false;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test704.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test704.java
deleted file mode 100644
index fe09a38..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test704.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package return_out;
-
-public class A_test704 {
-	private boolean flag;
-	public boolean foo() {
-		/*]*/return extracted();/*[*/
-	}
-	protected boolean extracted() {
-		do {
-			return true;
-		} while (flag);
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test705.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test705.java
deleted file mode 100644
index 098d79d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test705.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package return_out;
-
-public class A_test705 {
-	public boolean foo() {
-		/*]*/return extracted();/*[*/
-	}
-	protected boolean extracted() {
-		try {
-			foo();
-		} catch(Exception e) {
-		} finally {
-			return false;
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test706.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test706.java
deleted file mode 100644
index 6e4f5b3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test706.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package return_out;
-
-public class A_test706 {
-	public boolean foo() {
-		/*]*/return extracted();/*[*/
-	}
-	protected boolean extracted() {
-		try {
-			foo();
-			return true;
-		} catch(Exception e) {
-			return false;
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test707.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test707.java
deleted file mode 100644
index 84e579b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test707.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package return_out;
-
-public class A_test707 {
-	boolean flag;
-	public boolean foo() {
-		/*]*/return extracted();/*[*/
-	}
-	protected boolean extracted() {
-		target: {
-			do {
-				if (flag)
-					break target;
-				return false;
-			} while (flag);
-		}
-		return true;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test708.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test708.java
deleted file mode 100644
index 368afbf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test708.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package return_out;
-
-public class A_test708 {
-	boolean flag;
-	public boolean foo() {
-		/*]*/return extracted();/*[*/
-	}
-	protected boolean extracted() {
-		do {
-			if (flag)
-				foo();
-			return true;
-		} while(flag);
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test709.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test709.java
deleted file mode 100644
index 1eff0d5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test709.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package return_out;
-
-public class A_test709 {
-	public boolean foo() {
-		int i= 0;
-		/*]*/return extracted(i);/*[*/
-	}
-	protected boolean extracted(int i) {
-		switch (i) {
-			case 1:
-				return true;
-			default:
-				return false;
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test710.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test710.java
deleted file mode 100644
index 3802e7b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test710.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package return_out;
-
-public class A_test710 {
-	public boolean foo() {
-		int i= 0;
-		/*]*/return extracted(i);/*[*/
-	}
-	protected boolean extracted(int i) {
-		switch (i) {
-			case 1:
-			case 2:
-				return true;
-			default:
-				return false;
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test711.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test711.java
deleted file mode 100644
index 37611d9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test711.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package return_out;
-
-public class A_test711 {
-	public boolean foo() {
-		int i= 0;
-		/*]*/return extracted(i);/*[*/
-	}
-	protected boolean extracted(int i) {
-		switch (i) {
-			case 1:
-				foo();
-			case 2:
-				return true;
-			default:
-				return false;
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test712.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test712.java
deleted file mode 100644
index 9844ea7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test712.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package return_out;
-
-import java.util.List;
-
-public class A_test712 {
-	public List foo() {
-		/*]*/return extracted();/*[*/
-	}
-	protected List extracted() {
-		return null;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test713.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test713.java
deleted file mode 100644
index 864bd29..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test713.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package return_out;
-
-public class A_test713 {
-	public java.util.List foo() {
-		/*]*/return extracted();/*[*/
-	}
-	protected java.util.List extracted() {
-		return null;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test714.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test714.java
deleted file mode 100644
index c6d861a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test714.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package return_out;
-
-public class A_test714 {
-	public boolean foo() {
-		/*]*/return extracted();/*[*/
-	}
-	protected boolean extracted() {
-		boolean b= false;
-		foo();
-		return (b == true);
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test715.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test715.java
deleted file mode 100644
index 9f2235a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test715.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package return_out;
-
-public class A_test715 {
-	public interface I {
-		public boolean run();
-	}
-	public void foo() {
-		/*]*/extracted();/*[*/
-	}
-	protected void extracted() {
-		bar (this, new I() {
-			public boolean run() {
-				return true;
-			}
-		});
-	}
-	public void bar(A_test715 a, I i) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test716.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test716.java
deleted file mode 100644
index 689d6a5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test716.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package return_out;
-
-public class A_test716 {
-	public boolean flag;
-	public boolean foo() {
-		/*]*/return extracted();/*[*/
-	}
-	protected boolean extracted() {
-		if (flag)
-			return false;
-		else
-			throw new NullPointerException();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test717.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test717.java
deleted file mode 100644
index 7c2d3cc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test717.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package return_out;
-
-public class A_test717 {
-	public boolean foo() {
-		int i= 0;
-		/*]*/return extracted(i);/*[*/
-	}
-	protected boolean extracted(int i) {
-		switch(i) {
-			case 10:
-				return false;
-			default:
-				throw new NullPointerException();	
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test718.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test718.java
deleted file mode 100644
index 93ec5c8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test718.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package return_out;
-
-public class A_test718 {
-	public boolean foo() {
-		int i= 0;
-		/*]*/return extracted(i);/*[*/
-	}
-	protected boolean extracted(int i) {
-		switch(i) {
-			case 10:
-				throw new NullPointerException();	
-			default:
-				return false;
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test719.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test719.java
deleted file mode 100644
index e4936ff..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test719.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package return_out;
-public class A_test719 {
-	public boolean foo() {
-		/*]*/return extracted();/*[*/
-	}
-	protected boolean extracted() {
-		if (foo())
-			return true;
-		if (foo())
-			return true;
-		else
-			return false;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test720.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test720.java
deleted file mode 100644
index 47b3f48..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test720.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package return_out;
-
-public class A_test720 {
-	private boolean flag;
-	public boolean foo() {
-		if (flag) {
-			/*]*/return extracted();/*[*/
-		}
-		return true;
-	}
-	protected boolean extracted() {
-		try {
-			foo();
-		} catch(Exception e) {
-		}
-		return false;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test721.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test721.java
deleted file mode 100644
index c19abea..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test721.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package return_out;
-
-public class A_test721 {
-	public volatile boolean flag;
-	
-	public void foo() {
-		int i;
-		/*]*/i = extracted();/*[*/
-		if (flag)
-			i= 20;
-		i--;
-	}
-
-	protected int extracted() {
-		int i;
-		i= 10;
-		return i;
-	}
-
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test722.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test722.java
deleted file mode 100644
index adc0dcf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test722.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package return_out;
-
-public class A_test722 {
-	void f(){
-		for (int i = 0; i < 10; i++) {
-			/*]*/extracted();/*[*/
-		}
-	}
-	protected void extracted() {
-		for (int j = 0; j < 10; j++) {
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test723.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test723.java
deleted file mode 100644
index 17f76fb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test723.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package return_out;
-
-public class A_test723 {
-	public void foo() {
-		{
-			int i= 0;
-			/*]*/i = extracted(i);/*[*/
-			i++;
-		}
-	}
-	protected int extracted(int i) {
-		i--;
-		return i;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test724.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test724.java
deleted file mode 100644
index d068968..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test724.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package return_out;
-
-public class A_test724 {
-	protected void foo() {
-		int i= 0;
-		int j= 1;
-		switch (j) {
-			case 1 :
-				i = extracted();
-				break;
-			default :
-				i= -1;
-				break;
-		}
-		System.out.println(i);
-	}
-	protected int extracted() {
-		int i;
-		/*[*/
-		i= 1;/*]*/
-		return i;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test725.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test725.java
deleted file mode 100644
index 3ee279b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test725.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package return_out;
-
-public class A_test725 {
-	private boolean flag;
-	protected void foo() {
-		int i= 0;
-		if (flag) {
-			/*]*/extracted();/*[*/
-			i= 20;
-		} else {
-			read(i);
-		}
-		read(i);
-	}
-	protected void extracted() {
-		int i;
-		i= 10;
-	}
-	private void read(int i) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test726.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test726.java
deleted file mode 100644
index 3f00f0d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/return_out/A_test726.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package return_out;
-
-public class A_test726 {
-
-	boolean flag;
-
-	protected void foo() {
-		int j= 0;
-		for(int i= 0; i < 10; i++) {
-			if (flag) {
-				/*]*/j = extracted();/*[*/
-			} else {
-				read(j);
-			}
-		}
-	}
-
-	protected int extracted() {
-		int j;
-		j= 10;
-		return j;
-	}
-	
-	private void read(int i) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/selection/A_test1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/selection/A_test1.java
deleted file mode 100644
index c12b372..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/selection/A_test1.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package selection;
-
-public class A_test1 {
-	public void foo() {
-		/*[*/foo()/*]*/;
-	}
-} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/selection/A_test2.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/selection/A_test2.java
deleted file mode 100644
index 06787fa..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/selection/A_test2.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package selection;
-
-public class A_test2 {
-	public void foo() {
-		/*[*/foo()/*[*/;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/selection/A_test3.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/selection/A_test3.java
deleted file mode 100644
index b8e0567..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/selection/A_test3.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package selection;
-
-public class A_test3 {
-	public void foo() {
-		/*]*/foo()/*]*/;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/selection/A_test4.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/selection/A_test4.java
deleted file mode 100644
index 5f984e7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/selection/A_test4.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package selection;
-
-public class A_test4 {
-	public void foo() {
-		/*]*/foo()/*[*/;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_in/A_test400.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_in/A_test400.java
deleted file mode 100644
index 55ea6f3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_in/A_test400.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package semicolon_in;
-
-public class A_test400 {
-	public void foo() {
-		/*]*/foo()/*[*/;
-	} 
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_in/A_test401.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_in/A_test401.java
deleted file mode 100644
index 341eb34..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_in/A_test401.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package semicolon_in;
-
-public class A_test401 {
-	public void foo() {
-		/*]*/foo();/*[*/
-	} 
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_in/A_test402.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_in/A_test402.java
deleted file mode 100644
index 473d8d4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_in/A_test402.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package semicolon_in;
-
-public class A_test402 {
-	public void foo() {
-		/*]*/{
-			foo();
-		}/*[*/
-	} 
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_in/A_test403.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_in/A_test403.java
deleted file mode 100644
index 495cf26..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_in/A_test403.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package semicolon_in;
-
-public class A_test403 {
-	public void foo() {
-		/*[*/try {
-			foo();
-		} catch (Exception e) {
-			foo();
-		}/*]*/
-	} 
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_in/A_test404.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_in/A_test404.java
deleted file mode 100644
index 230d01c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_in/A_test404.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package semicolon_in;
-
-public class A_test404 {
-	public void foo() {
-		/*]*/int x= 0;/*[*/
-		x= 10;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_in/A_test406.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_in/A_test406.java
deleted file mode 100644
index e0e60d3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_in/A_test406.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package semicolon_in;
-
-public class A_test406 {
-	public void foo() {
-		if (/*]*/1 == 10/*[*/)
-			foo();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_in/A_test407.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_in/A_test407.java
deleted file mode 100644
index e68cbe7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_in/A_test407.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package semicolon_in;
-
-public class A_test407 {
-	public void foo() {
-		boolean b;
-		b= /*]*/10 == 20/*[*/;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_in/A_test409.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_in/A_test409.java
deleted file mode 100644
index 6c98633..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_in/A_test409.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package semicolon_in;
-
-public class A_test409 {
-	public void foo() {
-		/*]*/synchronized (this) {
-			foo();
-		}/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_in/A_test410.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_in/A_test410.java
deleted file mode 100644
index d7c9bd8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_in/A_test410.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package semicolon_in;
-
-public class A_test410 {
-	public void foo() {
-		/*]*/switch (10) {
-			case 1:
-				foo();
-		}/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_out/A_test400.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_out/A_test400.java
deleted file mode 100644
index dde10e4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_out/A_test400.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package semicolon_out;
-
-public class A_test400 {
-	public void foo() {
-		/*]*/extracted()/*[*/;
-	}
-	protected void extracted() {
-		foo();
-	} 
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_out/A_test401.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_out/A_test401.java
deleted file mode 100644
index 3ba0007..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_out/A_test401.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package semicolon_out;
-
-public class A_test401 {
-	public void foo() {
-		/*]*/extracted();/*[*/
-	}
-	protected void extracted() {
-		foo();
-	} 
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_out/A_test402.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_out/A_test402.java
deleted file mode 100644
index 15a20c0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_out/A_test402.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package semicolon_out;
-
-public class A_test402 {
-	public void foo() {
-		/*]*/extracted();/*[*/
-	}
-	protected void extracted() {
-		{
-			foo();
-		}
-	} 
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_out/A_test403.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_out/A_test403.java
deleted file mode 100644
index e9c4005..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_out/A_test403.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package semicolon_out;
-
-public class A_test403 {
-	public void foo() {
-		extracted();
-	}
-	protected void extracted() {
-		/*[*/try {
-			foo();
-		} catch (Exception e) {
-			foo();
-		}/*]*/
-	} 
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_out/A_test404.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_out/A_test404.java
deleted file mode 100644
index 6641ad8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_out/A_test404.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package semicolon_out;
-
-public class A_test404 {
-	public void foo() {
-		/*]*/int x;
-		extracted();/*[*/
-		x= 10;
-	}
-	protected void extracted() {
-		int x= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_out/A_test406.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_out/A_test406.java
deleted file mode 100644
index 97547d7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_out/A_test406.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package semicolon_out;
-
-public class A_test406 {
-	public void foo() {
-		if (/*]*/extracted()/*[*/)
-			foo();
-	}
-	protected boolean extracted() {
-		return 1 == 10;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_out/A_test407.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_out/A_test407.java
deleted file mode 100644
index bb97d5a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_out/A_test407.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package semicolon_out;
-
-public class A_test407 {
-	public void foo() {
-		boolean b;
-		b= /*]*/extracted()/*[*/;
-	}
-	protected boolean extracted() {
-		return 10 == 20;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_out/A_test409.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_out/A_test409.java
deleted file mode 100644
index 30477b5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_out/A_test409.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package semicolon_out;
-
-public class A_test409 {
-	public void foo() {
-		/*]*/extracted();/*[*/
-	}
-	protected void extracted() {
-		synchronized (this) {
-			foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_out/A_test410.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_out/A_test410.java
deleted file mode 100644
index 33360b1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/semicolon_out/A_test410.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package semicolon_out;
-
-public class A_test410 {
-	public void foo() {
-		/*]*/extracted();/*[*/
-	}
-	protected void extracted() {
-		switch (10) {
-			case 1:
-				foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/testing/E.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/testing/E.java
deleted file mode 100644
index 4b3d789..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/testing/E.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package testing;
-
-import java.awt.peer.LabelPeer;
-
-public class E {
-	private F f;
-	public void foo() {
-		try {
-			f.fun();
-		} catch (Exception e) {
-		}
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/testing/F.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/testing/F.java
deleted file mode 100644
index e26e596..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/testing/F.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package testing;
-
-import java.lang.reflect.InvocationTargetException;
-
-public class F {
-	public void fun() throws InvocationTargetException {
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test450.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test450.java
deleted file mode 100644
index 4a17b21..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test450.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package try_in;
-
-public class A_test450 {
-	public void foo() {
-		try {
-			/*]*/g();/*[*/
-		} catch (java.io.IOException e) {
-		}
-	}
-	public void g() throws java.io.IOException {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test451.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test451.java
deleted file mode 100644
index 01f60ef..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test451.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package try_in;
-
-public class A_test451 {
-	public void foo() {
-		/*[*/try {
-			g();
-		} catch (java.io.IOException e) {
-		}/*]*/
-	}
-	
-	public void g() throws java.io.IOException {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test452.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test452.java
deleted file mode 100644
index fae9736..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test452.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package try_in;
-
-import java.io.IOException;
-
-public class A_test452 {
-	public void foo() {
-		try {
-			/*]*/g();/*[*/
-		} catch (IOException e) {
-		}
-	}
-	
-	public void g() throws IOException {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test453.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test453.java
deleted file mode 100644
index 35666f6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test453.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package try_in;
-
-import java.io.IOException;
-
-public class A_test453 {
-	
-	public void foo() {
-		/*]*/try {
-			g();
-		} catch (Exception e) {
-		}/*[*/
-	}
-	
-	public void g() throws IOException {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test454.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test454.java
deleted file mode 100644
index 64745a5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test454.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package try_in;
-
-import java.io.IOException;
-
-public class A_test454 {
-	
-	public void foo() {
-		try {
-			/*]*/throw new IOException("Message");/*[*/
-		} catch (Exception e) {
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test455.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test455.java
deleted file mode 100644
index 084be16..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test455.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package try_in;
-
-import java.io.IOException;
-
-public class A_test455 {
-	
-	public void foo() {
-		try {
-			/*]*/throw createException();/*[*/
-		} catch (Exception e) {
-		}
-	}
-	
-	public IOException createException() {
-		return new IOException("Message");
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test456.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test456.java
deleted file mode 100644
index 770aaf8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test456.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package try_in;
-
-import java.io.IOException;
-
-public class A_test456 {
-	
-	public void foo() {
-		Exception e= new IOException("Message");
-		try {
-			/*]*/throw e;/*[*/
-		} catch (Exception x) {
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test457.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test457.java
deleted file mode 100644
index 2aee783..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test457.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package try_in;
-
-import java.io.IOException;
-
-public class A_test457 {
-	
-	public void foo() {
-		Exception[] e= new Exception[] { new IOException("Message") };
-		try {
-			/*]*/throw e[0];/*[*/
-		} catch (Exception x) {
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test458.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test458.java
deleted file mode 100644
index 4b53aa4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test458.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package try_in;
-
-public class A_test458 {
-	public void foo() throws Throwable{
-		try{
-			new A_test458();
-		} catch (Throwable t){
-			/*]*/throw t;/*[*/
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test459.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test459.java
deleted file mode 100644
index 1ca2723..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test459.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package try_in;
-
-public class A_test459 {
-	public abstract class Protectable {
-		public abstract void protect() throws Exception;
-		public void setUp() throws Exception {
-		}
-	}
-	public void foo() {
-		/*]*/Protectable p= new Protectable() {
-			public void protect() throws Exception {
-				setUp();
-			}
-		};/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test460.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test460.java
deleted file mode 100644
index dc4108b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test460.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package try_in;
-
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.lang.reflect.InvocationTargetException;
-
-public abstract class A_test460 {
-	public void foo() throws InvocationTargetException {
-		/*]*/InputStreamReader in= null;
-		try {
-			bar();
-		} catch (IOException e) {
-			throw new InvocationTargetException(null);
-		} finally {
-			if (in != null) {
-				try {
-					in.close();
-				} catch (IOException e) {
-				}
-			}
-		}/*[*/
-	}
-	
-	public abstract void bar() throws IOException;
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test461.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test461.java
deleted file mode 100644
index 42a0cbe..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test461.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package try_in;
-
-import java.io.IOException;
-
-public class A_test461 {
-	void f() throws IOException{
-		/*[*/try{
-			f();
-		} catch (IOException e){
-			throw new IOException();
-		}/*]*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test462.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test462.java
deleted file mode 100644
index 6c61375..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_in/A_test462.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package try_in;
-
-import java.io.IOException;
-
-public class A_test462 {
-	void f() throws IOException{
-		/*[*/try{
-			f();
-		} catch (IOException e){
-		} finally {
-			throw new IOException();
-		}/*]*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test450.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test450.java
deleted file mode 100644
index cf1bd9d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test450.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package try_out;
-
-import java.io.IOException;
-
-public class A_test450 {
-	public void foo() {
-		try {
-			/*]*/extracted();/*[*/
-		} catch (java.io.IOException e) {
-		}
-	}
-	protected void extracted() throws IOException {
-		g();
-	}
-	public void g() throws java.io.IOException {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test451.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test451.java
deleted file mode 100644
index 56c0d78..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test451.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package try_out;
-
-public class A_test451 {
-	public void foo() {
-		extracted();
-	}
-
-	protected void extracted() {
-		/*[*/try {
-			g();
-		} catch (java.io.IOException e) {
-		}/*]*/
-	}
-	
-	public void g() throws java.io.IOException {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test452.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test452.java
deleted file mode 100644
index 5bdff96..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test452.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package try_out;
-
-import java.io.IOException;
-
-public class A_test452 {
-	public void foo() {
-		try {
-			/*]*/extracted();/*[*/
-		} catch (IOException e) {
-		}
-	}
-
-	protected void extracted() throws IOException {
-		g();
-	}
-	
-	public void g() throws IOException {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test453.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test453.java
deleted file mode 100644
index 7d309ed..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test453.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package try_out;
-
-import java.io.IOException;
-
-public class A_test453 {
-	
-	public void foo() {
-		/*]*/extracted();/*[*/
-	}
-
-	protected void extracted() {
-		try {
-			g();
-		} catch (Exception e) {
-		}
-	}
-	
-	public void g() throws IOException {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test454.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test454.java
deleted file mode 100644
index f0b4cf4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test454.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package try_out;
-
-import java.io.IOException;
-
-public class A_test454 {
-	
-	public void foo() {
-		try {
-			/*]*/extracted();/*[*/
-		} catch (Exception e) {
-		}
-	}
-
-	protected void extracted() throws IOException {
-		throw new IOException("Message");
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test455.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test455.java
deleted file mode 100644
index 1ddcf3f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test455.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package try_out;
-
-import java.io.IOException;
-
-public class A_test455 {
-	
-	public void foo() {
-		try {
-			/*]*/extracted();/*[*/
-		} catch (Exception e) {
-		}
-	}
-
-	protected void extracted() throws IOException {
-		throw createException();
-	}
-	
-	public IOException createException() {
-		return new IOException("Message");
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test456.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test456.java
deleted file mode 100644
index 5de1b1c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test456.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package try_out;
-
-import java.io.IOException;
-
-public class A_test456 {
-	
-	public void foo() {
-		Exception e= new IOException("Message");
-		try {
-			/*]*/extracted(e);/*[*/
-		} catch (Exception x) {
-		}
-	}
-
-	protected void extracted(Exception e) throws Exception {
-		throw e;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test457.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test457.java
deleted file mode 100644
index 721340e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test457.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package try_out;
-
-import java.io.IOException;
-
-public class A_test457 {
-	
-	public void foo() {
-		Exception[] e= new Exception[] { new IOException("Message") };
-		try {
-			/*]*/extracted(e);/*[*/
-		} catch (Exception x) {
-		}
-	}
-
-	protected void extracted(Exception[] e) throws Exception {
-		throw e[0];
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test458.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test458.java
deleted file mode 100644
index 52278a6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test458.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package try_out;
-
-public class A_test458 {
-	public void foo() throws Throwable{
-		try{
-			new A_test458();
-		} catch (Throwable t){
-			/*]*/extracted(t);/*[*/
-		}
-	}
-	protected void extracted(Throwable t) throws Throwable {
-		throw t;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test459.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test459.java
deleted file mode 100644
index baeb3e5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test459.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package try_out;
-
-public class A_test459 {
-	public abstract class Protectable {
-		public abstract void protect() throws Exception;
-		public void setUp() throws Exception {
-		}
-	}
-	public void foo() {
-		/*]*/extracted();/*[*/
-	}
-	protected void extracted() {
-		Protectable p= new Protectable() {
-			public void protect() throws Exception {
-				setUp();
-			}
-		};
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test460.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test460.java
deleted file mode 100644
index e9b2dff..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test460.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package try_out;
-
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.lang.reflect.InvocationTargetException;
-
-public abstract class A_test460 {
-	public void foo() throws InvocationTargetException {
-		/*]*/extracted();/*[*/
-	}
-
-	protected void extracted() throws InvocationTargetException {
-		InputStreamReader in= null;
-		try {
-			bar();
-		} catch (IOException e) {
-			throw new InvocationTargetException(null);
-		} finally {
-			if (in != null) {
-				try {
-					in.close();
-				} catch (IOException e) {
-				}
-			}
-		}
-	}
-	
-	public abstract void bar() throws IOException;
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test461.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test461.java
deleted file mode 100644
index 8311000..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test461.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package try_out;
-
-import java.io.IOException;
-
-public class A_test461 {
-	void f() throws IOException{
-		extracted();
-	}
-	protected void extracted() throws IOException {
-		/*[*/try{
-			f();
-		} catch (IOException e){
-			throw new IOException();
-		}/*]*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test462.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test462.java
deleted file mode 100644
index 73d4d49..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/try_out/A_test462.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package try_out;
-
-import java.io.IOException;
-
-public class A_test462 {
-	void f() throws IOException{
-		extracted();
-	}
-	protected void extracted() throws IOException {
-		/*[*/try{
-			f();
-		} catch (IOException e){
-		} finally {
-			throw new IOException();
-		}/*]*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test200.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test200.java
deleted file mode 100644
index 8d570be..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test200.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package validSelection;
-
-public class A_test200 {
-	public void foo() {
-		/*]*/foo();/*[*/
-	} 
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test201.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test201.java
deleted file mode 100644
index 62c304e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test201.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package validSelection;
-
-public class A_test201 {
-	public void foo() {/*[*/
-		foo();
-	/*]*/} 
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test202.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test202.java
deleted file mode 100644
index d8733ef..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test202.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package validSelection;
-
-public class A_test202 {
-	public void foo() {
-		/*]*/foo();
-		foo();/*[*/
-	} 
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test203.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test203.java
deleted file mode 100644
index 2edb220..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test203.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package validSelection;
-
-public class A_test203 {
-	public void foo() {
-		/*]*/for (int i= 0; i < 10; i++)
-			foo();
-		foo();/*[*/
-	} 
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test230.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test230.java
deleted file mode 100644
index 3035340..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test230.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package validSelection;
-
-public class A_test230 {
-	public void foo() {
-		{/*[*/
-			foo();
-		/*]*/}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test231.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test231.java
deleted file mode 100644
index 3d61594..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test231.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package validSelection;
-
-public class A_test231 {
-	public void foo() {
-		{
-			/*]*/foo()/*[*/;
-		}
-		{
-			foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test232.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test232.java
deleted file mode 100644
index a3b5456..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test232.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package validSelection;
-
-public class A_test232 {
-	public void foo() {
-		/*]*/{
-			foo();
-		}/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test233.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test233.java
deleted file mode 100644
index 75b3868..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test233.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package validSelection;
-
-public class A_test233 {
-	public void foo() {
-		{
-			foo();
-		}
-		{
-			/*]*/foo()/*[*/;
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test234.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test234.java
deleted file mode 100644
index 265b903..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test234.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package validSelection;
-
-public class A_test234 {
-	public void foo() {
-		{
-			foo();
-		}
-		{/*[*/
-			foo();
-		/*]*/}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test235.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test235.java
deleted file mode 100644
index 876b188..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test235.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package validSelection;
-
-public class A_test235 {
-	public void foo() {
-		{/*[*/
-			foo();
-		/*]*/}
-		{
-			foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test240.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test240.java
deleted file mode 100644
index 00c0091..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test240.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package validSelection;
-
-public class A_test240 {
-	public void foo() {/*[*/
-		for (int i= 0; i < 10; i++)
-			foo();
-	/*]*/}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test241.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test241.java
deleted file mode 100644
index b3bb0e2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test241.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package validSelection;
-
-public class A_test241 {
-	public void foo() {
-		/*]*/for (int i= 0; i < 10; i++)
-			foo();/*[*/
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test244.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test244.java
deleted file mode 100644
index 897ade3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test244.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package validSelection;
-
-public class A_test244 {
-	public void foo() {
-		for (int i= 0; i < 10; i++)
-			/*]*/foo()/*]*/;
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test245.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test245.java
deleted file mode 100644
index af752d2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test245.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package validSelection;
-
-public class A_test245 {
-	public void foo() {
-		for (int i= 0; i < 10; i++)
-			/*]*/foo();/*[*/
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test246.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test246.java
deleted file mode 100644
index 40a1cd1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test246.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package validSelection;
-
-public class A_test246 {
-	public void foo() {
-		for (int i= 0; i < 10; i++) {
-			/*]*/foo();/*[*/
-		}
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test247.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test247.java
deleted file mode 100644
index 4d5b6aa..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test247.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package validSelection;
-
-public class A_test247 {
-	public void foo() {
-		for (int i= 10; i < 10; i++)/*[*/
-			for (int z= 10; z < 10; z++)
-				foo();
-		/*]*/foo();	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test248.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test248.java
deleted file mode 100644
index 205fb31..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test248.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package validSelection;
-
-public class A_test248 {
-	public void foo() {
-		for (int i= 0; i < 10; i++)
-			foo();
-			
-		/*]*/foo();/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test249.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test249.java
deleted file mode 100644
index 2428f11..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test249.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package validSelection;
-
-public class A_test249 {
-	public void foo() {
-		/*]*/foo();/*[*/
-		
-		for (int i= 0; i < 10; i++)
-			foo();	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test250.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test250.java
deleted file mode 100644
index 18755cd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test250.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package validSelection;
-
-public class A_test250 {
-	public void foo() {
-		while(1 < 10)/*[*/
-			foo();
-	/*]*/}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test251.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test251.java
deleted file mode 100644
index 7a6d6e7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test251.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package validSelection;
-
-public class A_test251 {
-	public void foo() {
-		/*]*/while(1 < 10)
-			foo();/*]*/
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test252.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test252.java
deleted file mode 100644
index 7358876..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test252.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package validSelection;
-
-public class A_test252 {
-	public boolean b() {
-		return true;
-	}
-	
-	public void foo() {
-		while(b())
-			while(b())/*[*/
-				foo();
-		/*]*/foo();		
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test253.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test253.java
deleted file mode 100644
index dffc377..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test253.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package validSelection;
-
-public class A_test253 {
-	public boolean b() {
-		return true;
-	}
-	
-	public void foo() {
-		while(b())
-			/*]*/while(b())
-				foo();
-		/*]*/foo();		
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test254.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test254.java
deleted file mode 100644
index e22bdc9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test254.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package validSelection;
-
-public class A_test254 {
-	public boolean b() {
-		return true;
-	}
-	
-	public void foo() {
-		while(b())
-			foo();
-			
-		/*]*/foo();/*[*/		
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test255.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test255.java
deleted file mode 100644
index d7c8458..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test255.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package validSelection;
-
-public class A_test255 {
-	public boolean b() {
-		return true;
-	}
-	
-	public void foo() {
-		/*]*/foo();/*[*/
-		
-		while(b())
-			foo();	
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test260.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test260.java
deleted file mode 100644
index 31a00b7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test260.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package validSelection;
-
-public class A_test260 {
-	public void foo() {
-		/*]*/do
-			foo();
-		while(1 < 10);/*[*/	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test261.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test261.java
deleted file mode 100644
index 1ce96b2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test261.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package validSelection;
-
-public class A_test261 {
-	public void foo() {
-		do /*[*/
-			foo();
-		/*]*/while(1 < 10);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test262.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test262.java
deleted file mode 100644
index 0df5d91..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test262.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package validSelection;
-
-public class A_test262 {
-	public boolean fBoolean;
-	public void foo() {
-		do 
-			foo();
-		while(fBoolean);
-		
-		/*]*/foo()/*[*/;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test263.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test263.java
deleted file mode 100644
index 7af8e45..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test263.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package validSelection;
-
-public class A_test263 {
-	public boolean fBoolean;
-	public void foo() {
-		/*]*/foo()/*[*/;
-		
-		do 
-			foo();
-		while(fBoolean);		
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test270.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test270.java
deleted file mode 100644
index f9446bb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test270.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package validSelection;
-
-public class A_test270 {
-	public void foo() {
-		/*]*/switch(1) {
-			case 1:
-				foo();
-		}/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test271.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test271.java
deleted file mode 100644
index d99c995..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test271.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package validSelection;
-
-public class A_test271 {
-	public void foo() {
-		switch(1) {
-			case 1:/*[*/
-				foo();
-		/*]*/}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test272.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test272.java
deleted file mode 100644
index 0648fc5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test272.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package validSelection;
-
-public class A_test272 {
-	public void foo() {
-		switch(1) {
-			case 1:
-				foo();
-				/*]*/foo()/*[*/;
-				foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test273.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test273.java
deleted file mode 100644
index 191695b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test273.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package validSelection;
-
-public class A_test273 {
-	public void foo() {
-		switch(1) {
-			case 1:/*[*/
-				foo();
-			/*]*/case 2:
-				foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test274.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test274.java
deleted file mode 100644
index 2f916a8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test274.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package validSelection;
-
-public class A_test274 {
-	public void foo() {
-		switch(1) {
-			case 1:
-				foo();
-			case 2:
-				foo();
-		}
-		
-		/*]*/foo();/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test275.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test275.java
deleted file mode 100644
index 80511ef..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test275.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package validSelection;
-
-public class A_test275 {
-	public void foo() {
-		/*]*/foo();/*[*/
-		
-		switch(1) {
-			case 1:
-				foo();
-			case 2:
-				foo();
-		}		
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test280.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test280.java
deleted file mode 100644
index 33d1996..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test280.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package validSelection;
-
-public class A_test280 {
-	public boolean fBoolean;
-	public void foo() {
-		/*]*/if (fBoolean)
-			foo();
-		else
-			foo();/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test281.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test281.java
deleted file mode 100644
index 7048e9e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test281.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package validSelection;
-
-public class A_test281 {
-	public boolean fBoolean;
-	public void foo() {
-		if (fBoolean)
-			/*]*/foo()/*[*/;
-		else
-			foo();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test282.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test282.java
deleted file mode 100644
index 4bd8856..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test282.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package validSelection;
-
-public class A_test282 {
-	public boolean fBoolean;
-	public void foo() {
-		if (fBoolean)/*[*/
-			foo();
-		/*]*/else
-			foo();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test283.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test283.java
deleted file mode 100644
index e060d6d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test283.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package validSelection;
-
-public class A_test283 {
-	public boolean fBoolean;
-	public void foo() {
-		if (fBoolean) {
-		} else {
-			/*]*/foo();/*[*/
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test284.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test284.java
deleted file mode 100644
index 06eab56..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test284.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package validSelection;
-
-public class A_test284 {
-	public boolean fBoolean;
-	public void foo() {
-		if (fBoolean)
-			foo();
-			
-		if (fBoolean) {
-		} else {
-			/*]*/foo();/*[*/
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test285.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test285.java
deleted file mode 100644
index 89b939d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test285.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package validSelection;
-
-public class A_test285 {
-	public boolean fBoolean;
-	public void foo() {
-		if (fBoolean)
-			/*[*/foo();/*]*/
-			
-		if (fBoolean) {
-		} else {
-			foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test286.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test286.java
deleted file mode 100644
index dc0c3de..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test286.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package validSelection;
-
-public class A_test286 {
-	public boolean fBoolean;
-	public void foo() {
-		/*[*/foo();/*]*/	
-		if (fBoolean)
-			foo();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test287.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test287.java
deleted file mode 100644
index 45e4f08..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test287.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package validSelection;
-
-public class A_test287 {
-	public boolean fBoolean;
-	public void foo() {
-		if (fBoolean)
-			foo();
-		/*[*/foo();/*]*/	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test300.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test300.java
deleted file mode 100644
index e95eda5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test300.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package validSelection;
-
-public class A_test300 {
-	public void foo() {
-		try {/*[*/
-			foo();
-		/*]*/} catch (Exception e) {
-			foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test301.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test301.java
deleted file mode 100644
index 84b93a6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test301.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package validSelection;
-
-public class A_test301 {
-	public void foo() {
-		try {
-			/*]*/foo()/*[*/;
-		} catch (Exception e) {
-			foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test302.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test302.java
deleted file mode 100644
index 5e0f55f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test302.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package validSelection;
-
-public class A_test302 {
-	public void foo() {
-		try {
-			foo();
-		} catch (Exception e) {/*[*/
-			foo();
-		/*]*/}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test303.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test303.java
deleted file mode 100644
index 003b7b5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test303.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package validSelection;
-
-public class A_test303 {
-	public void foo() {
-		try {
-			foo();
-		} catch (Exception e) {
-			/*]*/foo()/*[*/;
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test304.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test304.java
deleted file mode 100644
index 23cc5fb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test304.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package validSelection;
-
-public class A_test304 {
-	public void foo() {
-		try {
-			foo();
-		} catch (Exception e) {
-			foo();
-		} catch (Throwable t) {
-			/*]*/foo();/*[*/
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test305.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test305.java
deleted file mode 100644
index aa531b2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test305.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package validSelection;
-
-public class A_test305 {
-	public void foo() {
-		try {
-			foo();
-		} catch (Exception e) {
-			/*]*/foo();/*[*/
-		} catch (Throwable t) {
-			foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test306.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test306.java
deleted file mode 100644
index 45338ad..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test306.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package validSelection;
-
-public class A_test306 {
-	public void foo() {
-		try {
-			foo();
-		} catch (Exception e) {
-			foo();
-		} catch (Error e) {
-			/*]*/foo();/*[*/
-		} catch (Throwable t) {
-			foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test307.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test307.java
deleted file mode 100644
index 141a152..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test307.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package validSelection;
-
-public class A_test307 {
-	public void foo() {
-		try {
-			foo();
-		} finally {/*[*/
-			foo();
-		/*]*/}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test308.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test308.java
deleted file mode 100644
index 5e598b3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test308.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package validSelection;
-
-public class A_test308 {
-	public void foo() {
-		try {
-			foo();
-		} finally {/*[*/
-			foo();
-		/*]*/}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test309.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test309.java
deleted file mode 100644
index f0dc5b0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test309.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package validSelection;
-
-public class A_test309 {
-	public void foo() {
-		/*]*/try {
-			foo();
-		} catch (Exception e) {
-			foo();
-		} finally {
-			foo();
-		}/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test310.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test310.java
deleted file mode 100644
index 3499da6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test310.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package validSelection;
-
-public class A_test310 {
-	public void foo() {
-		try {
-			foo();
-		} catch (Exception e) {
-			foo();
-		}
-		/*]*/foo();/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test311.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test311.java
deleted file mode 100644
index ce222e8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test311.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package validSelection;
-
-public class A_test311 {
-	public void foo() {
-		/*]*/foo();/*[*/
-		try {
-			foo();
-		} catch (Exception e) {
-			foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test350.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test350.java
deleted file mode 100644
index d358f5c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test350.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package validSelection;
-
-public class A_test350 {
-
-	public void foo() {
-		/*]*/synchronized (this) {
-			foo();
-		}/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test351.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test351.java
deleted file mode 100644
index 521eb6f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test351.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package validSelection;
-
-public class A_test351 {
-
-	public void foo() {
-		foo();/*[*/
-		synchronized (this) {
-			foo();
-		}
-		/*]*/foo();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test352.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test352.java
deleted file mode 100644
index 97540b7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test352.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package validSelection;
-
-public class A_test352 {
-
-	public void foo() {
-		synchronized (this) {/*[*/
-			foo();
-		/*]*/}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test353.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test353.java
deleted file mode 100644
index eee7d64..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection/A_test353.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package validSelection;
-
-public class A_test353 {
-
-	public void foo() {
-		synchronized (this) {
-			/*]*/foo();/*[*/
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_in/A_test360.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_in/A_test360.java
deleted file mode 100644
index 35d4adb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_in/A_test360.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package validSelection_in;
-
-public class A_test360 {
-	void f(){
-		/*[*/class AA extends A_test360 {
-		}/*]*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_in/A_test361.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_in/A_test361.java
deleted file mode 100644
index 7c8eeb9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_in/A_test361.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package validSelection_in;
-
-public class A_test361 {
-	void f(){
-		/*]*/class AA extends A_test361 {
-		};/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_in/A_test362.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_in/A_test362.java
deleted file mode 100644
index 0bdc0aa..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_in/A_test362.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package validSelection_in;
-
-public class A_test362 {
-	A_test362(int i){
-	}
-	void n(){
-		final int y= 0;
-		/*[*/new A_test362(y){
-			void f(){
-				int y= 9;
-			}
-		};/*]*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_in/A_test363.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_in/A_test363.java
deleted file mode 100644
index 1506cb6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_in/A_test363.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package validSelection_in;
-
-public class A_test363 {
-	public Object foo() {
-		return /*[*/A_test363.class/*]*/;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_in/A_test364.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_in/A_test364.java
deleted file mode 100644
index 5e46159..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_in/A_test364.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package validSelection_in;
-
-// http://dev.eclipse.org/bugs/show_bug.cgi?id=6680
-public class A_test364 {
-	public int i(){ 
-		return 0;
-	}
-	public void m(){
-		/*[*/i();
-		m();/*]*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_in/A_test365.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_in/A_test365.java
deleted file mode 100644
index 39975df..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_in/A_test365.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package validSelection_in;
-
-public class A_test365 {
-	public void bar() throws NullPointerException {
-	}
-	
-	protected void foo() {
-		/*]*/bar();/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_out/A_test360.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_out/A_test360.java
deleted file mode 100644
index 96285dd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_out/A_test360.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package validSelection_out;
-
-public class A_test360 {
-	void f(){
-		extracted();
-	}
-	protected void extracted() {
-		/*[*/class AA extends A_test360 {
-		}/*]*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_out/A_test361.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_out/A_test361.java
deleted file mode 100644
index 300170d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_out/A_test361.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package validSelection_out;
-
-public class A_test361 {
-	void f(){
-		/*]*/extracted();/*[*/
-	}
-	protected void extracted() {
-		class AA extends A_test361 {
-		};
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_out/A_test362.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_out/A_test362.java
deleted file mode 100644
index c598978..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_out/A_test362.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package validSelection_out;
-
-public class A_test362 {
-	A_test362(int i){
-	}
-	void n(){
-		final int y= 0;
-		extracted(y);
-	}
-	protected void extracted(final int y) {
-		/*[*/new A_test362(y){
-			void f(){
-				int y= 9;
-			}
-		};/*]*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_out/A_test363.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_out/A_test363.java
deleted file mode 100644
index f21cdf5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_out/A_test363.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package validSelection_out;
-
-public class A_test363 {
-	public Object foo() {
-		return extracted();
-	}
-	protected Class extracted() {
-		return /*[*/A_test363.class/*]*/;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_out/A_test364.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_out/A_test364.java
deleted file mode 100644
index 34e72a0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_out/A_test364.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package validSelection_out;
-
-// http://dev.eclipse.org/bugs/show_bug.cgi?id=6680
-public class A_test364 {
-	public int i(){ 
-		return 0;
-	}
-	public void m(){
-		extracted();
-	}
-	protected void extracted() {
-		/*[*/i();
-		m();/*]*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_out/A_test365.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_out/A_test365.java
deleted file mode 100644
index 1e72fbf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/validSelection_out/A_test365.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package validSelection_out;
-
-public class A_test365 {
-	public void bar() throws NullPointerException {
-	}
-	
-	protected void foo() {
-		/*]*/extracted();/*[*/
-	}
-
-	protected void extracted() {
-		bar();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/wiki_in/A_test2001.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/wiki_in/A_test2001.java
deleted file mode 100644
index 19f44a4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/wiki_in/A_test2001.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package wiki_in;
-
-public class A_test2001 {
-
-	int field= 0;
-
-	void fun() {
-		int i;
-		/*]*/
-		i= 0;
-		System.out.println("i, field == " + i++ +", " + field);
-		/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/wiki_in/A_test2002.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/wiki_in/A_test2002.java
deleted file mode 100644
index f05ca58..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/wiki_in/A_test2002.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package wiki_in;
-
-public class A_test2002 {
-
-	int field= 0;
-	void fun() {
-		int i= 0;
-		/*]*/
-		System.out.println("i, field == " + i++ +", " + field);
-		/*[*/
-		System.out.println("i == " + i);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/wiki_in/A_test2003.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/wiki_in/A_test2003.java
deleted file mode 100644
index 51ab4b3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/wiki_in/A_test2003.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package wiki_in;
-
-public class A_test2003 {
-
-	int field= 0;
-
-	void fun() {
-		int i= 0;
-		/*]*/
-		if (field == 1) {
-			i= 1;
-			System.out.println("i, field == " + i + ", " + field);
-		} else {
-			System.out.println("i, field == " + i + ", " + field);
-		}
-		/*[*/
-	}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/wiki_in/A_test2004.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/wiki_in/A_test2004.java
deleted file mode 100644
index 417cbfe..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/wiki_in/A_test2004.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package wiki_in;
-
-public class A_test2004 {
-
-	int field= 0;
-
-	void fun() {
-		int i= 0;
-		while (field < 2) {
-			field++;
-			/*]*/
-			System.out.println("i, field == " + i++ +", " + field);
-			/*[*/
-		}
-	}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/wiki_in/A_test2005.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/wiki_in/A_test2005.java
deleted file mode 100644
index 83b531f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/wiki_in/A_test2005.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package wiki_in;
-
-import java.io.IOException;
-
-public class A_test2005 {
-
-	static void fun() throws IOException {
-	}
-
-	public static void main(String args[]) {
-		try {
-			/*]*/
-			fun();
-			/*[*/
-		} catch (Exception e) {
-		}
-	}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/wiki_out/A_test2001.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/wiki_out/A_test2001.java
deleted file mode 100644
index cae57e4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/wiki_out/A_test2001.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package wiki_out;
-
-public class A_test2001 {
-
-	int field= 0;
-
-	void fun() {
-		int i;
-		/*]*/extracted();/*[*/
-	}
-
-	protected void extracted() {
-		int i;
-		
-		i= 0;
-		System.out.println("i, field == " + i++ +", " + field);
-		
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/wiki_out/A_test2002.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/wiki_out/A_test2002.java
deleted file mode 100644
index 3801797..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/wiki_out/A_test2002.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package wiki_out;
-
-public class A_test2002 {
-
-	int field= 0;
-	void fun() {
-		int i= 0;
-		/*]*/i = extracted(i);/*[*/
-		System.out.println("i == " + i);
-	}
-	protected int extracted(int i) {
-		
-		System.out.println("i, field == " + i++ +", " + field);
-		
-		return i;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/wiki_out/A_test2003.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/wiki_out/A_test2003.java
deleted file mode 100644
index 9de870b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/wiki_out/A_test2003.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package wiki_out;
-
-public class A_test2003 {
-
-	int field= 0;
-
-	void fun() {
-		int i= 0;
-		/*]*/extracted(i);/*[*/
-	}
-
-	protected void extracted(int i) {
-		
-		if (field == 1) {
-			i= 1;
-			System.out.println("i, field == " + i + ", " + field);
-		} else {
-			System.out.println("i, field == " + i + ", " + field);
-		}
-		
-	}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/wiki_out/A_test2004.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/wiki_out/A_test2004.java
deleted file mode 100644
index ea4e709..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/wiki_out/A_test2004.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package wiki_out;
-
-public class A_test2004 {
-
-	int field= 0;
-
-	void fun() {
-		int i= 0;
-		while (field < 2) {
-			field++;
-			/*]*/i = extracted(i);/*[*/
-		}
-	}
-
-	protected int extracted(int i) {
-		
-		System.out.println("i, field == " + i++ +", " + field);
-		
-		return i;
-	}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/wiki_out/A_test2005.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/wiki_out/A_test2005.java
deleted file mode 100644
index e0709f4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/wiki_out/A_test2005.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package wiki_out;
-
-import java.io.IOException;
-
-public class A_test2005 {
-
-	static void fun() throws IOException {
-	}
-
-	public static void main(String args[]) {
-		try {
-			/*]*/extracted();/*[*/
-		} catch (Exception e) {
-		}
-	}
-
-	protected static void extracted() throws IOException {
-		
-		fun();
-		
-	}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test0_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test0_in.java
deleted file mode 100644
index b49e010..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test0_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void m(int i){
-		int x= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test0_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test0_out.java
deleted file mode 100644
index 90eaa10..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test0_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	void m(int i){
-		int temp= 0;
-		int x= temp;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test10_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test10_in.java
deleted file mode 100644
index b4d0cbd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test10_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-	int m(int y){
-		while(y==0){
-			int x= 1 + 2;
-		}
-		return 1 + 2;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test10_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test10_out.java
deleted file mode 100644
index 8d610a0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test10_out.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class A{
-	int m(int y){
-		int temp= 1 + 2;
-		while(y==0){
-			int x= temp;
-		}
-		return temp;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test11_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test11_in.java
deleted file mode 100644
index a2ba64a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test11_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-	int m(int y){
-		do{
-			int x= 1 + 2;
-		} while(y==0);
-		return 1 + 2;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test11_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test11_out.java
deleted file mode 100644
index ef4264a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test11_out.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class A{
-	int m(int y){
-		int temp= 1 + 2;
-		do{
-			int x= temp;
-		} while(y==0);
-		return temp;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test12_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test12_in.java
deleted file mode 100644
index 2a1b58d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test12_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-	int m(int y){
-		{
-		 int x= 1 + 2;
-		}
-		return 1 + 2;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test12_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test12_out.java
deleted file mode 100644
index f2c09ff..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test12_out.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class A{
-	int m(int y){
-		int temp= 1 + 2;
-		{
-		 int x= temp;
-		}
-		return temp;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test13_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test13_in.java
deleted file mode 100644
index 06d276f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test13_in.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-import java.util.ArrayList;
-
-class A{
-	int m(int y){
-		int e= new ArrayList().iterator().hashCode();
-		return 1 + 2;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test13_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test13_out.java
deleted file mode 100644
index 6552bb2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test13_out.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-
-class A{
-	int m(int y){
-		Iterator temp= new ArrayList().iterator();
-		int e= temp.hashCode();
-		return 1 + 2;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test14_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test14_in.java
deleted file mode 100644
index 95e7fdb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test14_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A{
-	int m(int y){
-		while(y==0)
-			m(1 + 2);
-		return 1 + 2;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test14_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test14_out.java
deleted file mode 100644
index 26bcb60..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test14_out.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A{
-	int m(int y){
-		int temp= 1 + 2;
-		while(y==0)
-			m(temp);
-		return 1 + 2;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test15_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test15_in.java
deleted file mode 100644
index ad9a09e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test15_in.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class A{
-	int m(int y){
-		while(y==0)
-			while(y==0)
-				while(y==0) 
-					m(1 + 2);
-		return 1 + 2;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test15_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test15_out.java
deleted file mode 100644
index bfe96e1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test15_out.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A{
-	int m(int y){
-		int temp= 1 + 2;
-		while(y==0)
-			while(y==0)
-				while(y==0) 
-					m(temp);
-		return 1 + 2;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test16_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test16_in.java
deleted file mode 100644
index 24587e7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test16_in.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A{
-	int m(int y){
-		while(y==0){
-			while(y==0)
-				while(y==0)
-					m(1 + 2);
-		}
-		return 1 + 2;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test16_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test16_out.java
deleted file mode 100644
index d91c927..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test16_out.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-class A{
-	int m(int y){
-		while(y==0){
-			int temp= 1 + 2;
-			while(y==0)
-				while(y==0)
-					m(temp);
-		}
-		return 1 + 2;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test17_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test17_in.java
deleted file mode 100644
index 1031cf4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test17_in.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A{
-	void m(){
-		{
-			int i= 1 + 2;
-		}
-		{
-			int i= 1 + 2;
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test17_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test17_out.java
deleted file mode 100644
index 1f280d8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test17_out.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-class A{
-	void m(){
-		int temp= 1 + 2;
-		{
-			int i= temp;
-		}
-		{
-			int i= temp;
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test18_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test18_in.java
deleted file mode 100644
index 9fb2c98..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test18_in.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package p;
-class A{
-	int m(int y){
-		m(0);
-		{
-			int x= 1 + 2;
-		}
-		{
-			{
-				int x= 1 + 2;
-			}
-		}
-		return 1 + 2;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test18_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test18_out.java
deleted file mode 100644
index a1627c6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test18_out.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package p;
-class A{
-	int m(int y){
-		m(0);
-		int temp= 1 + 2;
-		{
-			int x= temp;
-		}
-		{
-			{
-				int x= temp;
-			}
-		}
-		return temp;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test19_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test19_in.java
deleted file mode 100644
index 87976fd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test19_in.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A{
-	void m(int i){
-		if (f() == 0){
-			int t= f();
-		}
-	}
-	int f(){
-		return 5;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test19_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test19_out.java
deleted file mode 100644
index 301d1ed..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test19_out.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-class A{
-	void m(int i){
-		int temp= f();
-		if (temp == 0){
-			int t= temp;
-		}
-	}
-	int f(){
-		return 5;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test1_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test1_in.java
deleted file mode 100644
index b49e010..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test1_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void m(int i){
-		int x= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test1_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test1_out.java
deleted file mode 100644
index 90eaa10..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test1_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	void m(int i){
-		int temp= 0;
-		int x= temp;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test20_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test20_in.java
deleted file mode 100644
index 45f1b71..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test20_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class T {
-	int r(){return 4;}
-	void f(){
-		r();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test20_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test20_out.java
deleted file mode 100644
index 233ae43..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test20_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class T {
-	int r(){return 4;}
-	void f(){
-		int temp= r();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test21_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test21_in.java
deleted file mode 100644
index 1a076d1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test21_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	int f;
-	void m(int i){
-		int x= f;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test21_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test21_out.java
deleted file mode 100644
index 8f7a8c0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test21_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	int f;
-	void m(int i){
-		int temp= f;
-		int x= temp;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test22_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test22_in.java
deleted file mode 100644
index ab4dc5b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test22_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class T {
-	int r(){return 4;}
-	void f(){
-		{
-			r();
-		}	
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test22_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test22_out.java
deleted file mode 100644
index 102b633..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test22_out.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class T {
-	int r(){return 4;}
-	void f(){
-		{
-			int temp= r();
-		}	
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test23_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test23_in.java
deleted file mode 100644
index d0d19e3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test23_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-	int r(){return 4;}
-	boolean b(){return true;}
-	void f(int fd){
-		do {
-		} while(b());
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test23_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test23_out.java
deleted file mode 100644
index c3af208..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test23_out.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class A{
-	int r(){return 4;}
-	boolean b(){return true;}
-	void f(int fd){
-		boolean temp= b();
-		do {
-		} while(temp);
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test24_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test24_in.java
deleted file mode 100644
index b49e010..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test24_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void m(int i){
-		int x= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test24_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test24_out.java
deleted file mode 100644
index 90eaa10..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test24_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	void m(int i){
-		int temp= 0;
-		int x= temp;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test25_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test25_in.java
deleted file mode 100644
index 2052c0a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test25_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	boolean f(){
-		return (1 + 1 == 1 + 1);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test25_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test25_out.java
deleted file mode 100644
index 1ea95d0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test25_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	boolean f(){
-		int temp= 1 + 1;
-		return (temp == temp);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test26_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test26_in.java
deleted file mode 100644
index 7b57dda..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test26_in.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class A {
-	void f(){
-		try{
-			int j=0 +0;
-		} finally {
-			int j=0 +0;
-		}
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test26_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test26_out.java
deleted file mode 100644
index 194f19e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test26_out.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A {
-	void f(){
-		int temp= 0 +0;
-		try{
-			int j=temp;
-		} finally {
-			int j=temp;
-		}
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test27_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test27_in.java
deleted file mode 100644
index 3d56e98..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test27_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void m(int i){
-		int x= 0+0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test27_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test27_out.java
deleted file mode 100644
index fb11151..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test27_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	void m(int i){
-		int temp= 0+0;
-		int x= temp;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test28_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test28_in.java
deleted file mode 100644
index 27ccd79..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test28_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-	boolean m(){
-		return a().length != 3;
-	}
-	int[] a(){
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test28_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test28_out.java
deleted file mode 100644
index 850bf40..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test28_out.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class A{
-	boolean m(){
-		boolean temp= a().length != 3;
-		return temp;
-	}
-	int[] a(){
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test29_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test29_in.java
deleted file mode 100644
index a579350..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test29_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A {
-	void f(){
-		String f= "k";
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test29_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test29_out.java
deleted file mode 100644
index 907f09e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test29_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A {
-	void f(){
-		String temp= "k";
-		String f= temp;
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test2_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test2_in.java
deleted file mode 100644
index b49e010..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test2_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void m(int i){
-		int x= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test2_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test2_out.java
deleted file mode 100644
index e047293..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test2_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	void m(int i){
-		final int temp= 0;
-		int x= temp;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test30_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test30_in.java
deleted file mode 100644
index 1f7cbd1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test30_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	static final int FF= 2;
-	void f(){
-		int t= A.FF;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test30_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test30_out.java
deleted file mode 100644
index fd329fe..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test30_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	static final int FF= 2;
-	void f(){
-		int temp= A.FF;
-		int t= temp;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test31_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test31_in.java
deleted file mode 100644
index e7dd7d6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test31_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	void f(){
-		int i;
-		int y= i =1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test31_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test31_out.java
deleted file mode 100644
index 5980b1a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test31_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	void f(){
-		int i;
-		int temp= i =1;
-		int y= temp;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test32_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test32_in.java
deleted file mode 100644
index cb4def5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test32_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void f(int i){
-		int y= (i= 1) + 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test32_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test32_out.java
deleted file mode 100644
index 4dd8ae4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test32_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	void f(int i){
-		int temp= (i= 1);
-		int y= temp + 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test33_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test33_in.java
deleted file mode 100644
index 5de9404..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test33_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A {
-	void m(){
-		Object u= new Object(){};
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test33_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test33_out.java
deleted file mode 100644
index 07de471..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test33_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A {
-	void m(){
-		Object temp= new Object(){};
-		Object u= temp;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test34_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test34_in.java
deleted file mode 100644
index 697251b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test34_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A {
-	void m(){
-		Object a= new java.util.ArrayList(){};
-	}
-} 
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test34_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test34_out.java
deleted file mode 100644
index db61fe2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test34_out.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-import java.util.ArrayList;
-
-class A {
-	void m(){
-		java.util.ArrayList temp= new java.util.ArrayList(){};
-		Object a= temp;
-	}
-} 
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test35_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test35_in.java
deleted file mode 100644
index 78cb2db..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test35_in.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package p;
-
-import java.util.List;
-
-class A {
-	void f(){
-		C b= new C();
-		Object x= b.lists();
-	}
-} 
-class C{
-	public List[] lists(){
-		return null;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test35_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test35_out.java
deleted file mode 100644
index 54ecb2b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test35_out.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package p;
-
-import java.util.List;
-
-class A {
-	void f(){
-		C b= new C();
-		List[] temp= b.lists();
-		Object x= temp;
-	}
-} 
-class C{
-	public List[] lists(){
-		return null;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test36_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test36_in.java
deleted file mode 100644
index 7be7a80..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test36_in.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-
-
-class Test {
-
-  public int[] foo() {
-    return null;
-  }  
-  
-  public void bar(Test test) {
-    int[] i = test.foo(); // refactor this
-  }
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test36_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test36_out.java
deleted file mode 100644
index 51c3017..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test36_out.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package p;
-
-
-class Test {
-
-  public int[] foo() {
-    return null;
-  }  
-  
-  public void bar(Test test) {
-    int[] temp= test.foo();
-	int[] i = temp; // refactor this
-  }
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test37_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test37_in.java
deleted file mode 100644
index 48441fc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test37_in.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A {
-	void f(int i) {
-		if (i == 0) {
-			int temp= 0;
-		}
-		if (i == 1) {
-			int x= 0 + 0;
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test37_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test37_out.java
deleted file mode 100644
index 70b064a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test37_out.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-class A {
-	void f(int i) {
-		if (i == 0) {
-			int temp= 0;
-		}
-		if (i == 1) {
-			int temp= 0 + 0;
-			int x= temp;
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test38_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test38_in.java
deleted file mode 100644
index b6325ac..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test38_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	private static void foo() {
-		int temp= 4;
-		System.out.println(temp);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test38_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test38_out.java
deleted file mode 100644
index 1ec04cb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test38_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	private static void foo() {
-		int temp= 4;
-		int temp1= temp;
-		System.out.println(temp1);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test39_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test39_in.java
deleted file mode 100644
index 6dc1bad..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test39_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-	public Object foo(String text) {
-		if (((Object)null).toString() == null) {
-			return (Object)null;
-		}
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test39_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test39_out.java
deleted file mode 100644
index 664a9ba..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test39_out.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class A{
-	public Object foo(String text) {
-		Object temp= (Object)null;
-		if ((temp).toString() == null) {
-			return temp;
-		}
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test3_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test3_in.java
deleted file mode 100644
index b49e010..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test3_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void m(int i){
-		int x= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test3_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test3_out.java
deleted file mode 100644
index e047293..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test3_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	void m(int i){
-		final int temp= 0;
-		int x= temp;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test40_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test40_in.java
deleted file mode 100644
index 875e180..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test40_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void f(){
-		new A();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test40_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test40_out.java
deleted file mode 100644
index 5067667..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test40_out.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void f(){
-		A temp= new A();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test41_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test41_in.java
deleted file mode 100644
index 411b0ec..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test41_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	int f(){
-		new String("fred").length();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test41_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test41_out.java
deleted file mode 100644
index 1e91d70..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test41_out.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	int f(){
-		int temp= new String("fred").length();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test42_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test42_in.java
deleted file mode 100644
index 1754f84..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test42_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	int getLength(){return 0;}
-	int f(){
-		int i= new A().getLength();
-		return 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test42_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test42_out.java
deleted file mode 100644
index f22f055..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test42_out.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-	int getLength(){return 0;}
-	int f(){
-		int temp= new A().getLength();
-		int i= temp;
-		return 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test43_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test43_in.java
deleted file mode 100644
index dace8a7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test43_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	boolean isFred(){return false;}
-	int f(){
-		boolean i= new A().isFred();
-		return 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test43_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test43_out.java
deleted file mode 100644
index aea56c5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test43_out.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-	boolean isFred(){return false;}
-	int f(){
-		boolean temp= new A().isFred();
-		boolean i= temp;
-		return 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test44_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test44_in.java
deleted file mode 100644
index 76b3b7c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test44_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-	boolean isFred(){return false;}
-	int f(){
-		boolean i= isFred();
-		isFred();
-		return 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test44_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test44_out.java
deleted file mode 100644
index 46707d0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test44_out.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class A{
-	boolean isFred(){return false;}
-	int f(){
-		boolean temp= isFred();
-		boolean i= temp;
-		isFred();
-		return 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test45_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test45_in.java
deleted file mode 100644
index 4ea20cd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test45_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A {
-	int f(){
-		int t= f();
-		f();
-		return 1;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test45_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test45_out.java
deleted file mode 100644
index 037d1e7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test45_out.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A {
-	int f(){
-		int temp= f();
-		int t= temp;
-		f();
-		return 1;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test46_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test46_in.java
deleted file mode 100644
index 479d52b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test46_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A {
-	int f(){
-		f();
-		int u= f();
-		return 0;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test46_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test46_out.java
deleted file mode 100644
index 27e827d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test46_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A {
-	int f(){
-		int temp= f();
-		int u= temp;
-		return 0;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test47_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test47_in.java
deleted file mode 100644
index 45f1b71..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test47_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class T {
-	int r(){return 4;}
-	void f(){
-		r();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test47_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test47_out.java
deleted file mode 100644
index b3d22d8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test47_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class T {
-	int r(){return 4;}
-	void f(){
-		int temp= r();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test48_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test48_in.java
deleted file mode 100644
index 352bdaa..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test48_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class T {
-	public String toString() {
-		return super.toString() + new Integer(1).toString();	
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test48_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test48_out.java
deleted file mode 100644
index 41ec83c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test48_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class T {
-	public String toString() {
-		String temp= super.toString();
-		return temp + new Integer(1).toString();	
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test49_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test49_in.java
deleted file mode 100644
index 2ca0166..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test49_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	void f(boolean flag){
-		for (int i= 0; i < 10; i++) {
-			f(i==1);
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test49_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test49_out.java
deleted file mode 100644
index cd01cd6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test49_out.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-	void f(boolean flag){
-		for (int i= 0; i < 10; i++) {
-			boolean temp= i==1;
-			f(temp);
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test4_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test4_in.java
deleted file mode 100644
index b6585d6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test4_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	int m(int i){
-		int x= 1 + 2;
-		return 1 + 2;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test4_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test4_out.java
deleted file mode 100644
index d2b9d84..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test4_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	int m(int i){
-		int temp= 1 + 2;
-		int x= temp;
-		return 1 + 2;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test50_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test50_in.java
deleted file mode 100644
index 0154887..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test50_in.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A{
-	void f(boolean flag){
-		for (int i= 0; i < 10; i++) {
-			f(i==1);
-		}
-		for (int i= 0; i < 10; i++) {
-			f(i==1);
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test50_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test50_out.java
deleted file mode 100644
index be22200..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test50_out.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-class A{
-	void f(boolean flag){
-		for (int i= 0; i < 10; i++) {
-			boolean temp= i==1;
-			f(temp);
-		}
-		for (int i= 0; i < 10; i++) {
-			f(i==1);
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test51_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test51_in.java
deleted file mode 100644
index cb1dd9b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test51_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-	void f(boolean flag){
-		if (flag){
-			f(3+5==8); 
-		} else 
-			f(3+5!=8); 
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test51_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test51_out.java
deleted file mode 100644
index cb15af2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test51_out.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class A{
-	void f(boolean flag){
-		int temp= 3+5;
-		if (flag){
-			f(temp==8); 
-		} else 
-			f(temp!=8); 
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test5_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test5_in.java
deleted file mode 100644
index b6585d6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test5_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	int m(int i){
-		int x= 1 + 2;
-		return 1 + 2;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test5_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test5_out.java
deleted file mode 100644
index 32e6cb1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test5_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	int m(int i){
-		int temp= 1 + 2;
-		int x= temp;
-		return temp;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test6_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test6_in.java
deleted file mode 100644
index b6585d6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test6_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	int m(int i){
-		int x= 1 + 2;
-		return 1 + 2;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test6_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test6_out.java
deleted file mode 100644
index 4d6f43d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test6_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	int m(int i){
-		final int temp= 1 + 2;
-		int x= temp;
-		return temp;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test7_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test7_in.java
deleted file mode 100644
index b6585d6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test7_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	int m(int i){
-		int x= 1 + 2;
-		return 1 + 2;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test7_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test7_out.java
deleted file mode 100644
index 4eb51944..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test7_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	int m(int i){
-		final int temp= 1 + 2;
-		int x= temp;
-		return 1 + 2;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test8_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test8_in.java
deleted file mode 100644
index 4ae9a41..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test8_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-	int m(){
-		for (int i= 0; i==0;){
-			int x= 1 + 2;
-		}
-		return 1 + 2;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test8_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test8_out.java
deleted file mode 100644
index ce86a2e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test8_out.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class A{
-	int m(){
-		int temp= 1 + 2;
-		for (int i= 0; i==0;){
-			int x= temp;
-		}
-		return temp;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test9_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test9_in.java
deleted file mode 100644
index 4ae9a41..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test9_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-	int m(){
-		for (int i= 0; i==0;){
-			int x= 1 + 2;
-		}
-		return 1 + 2;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test9_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test9_out.java
deleted file mode 100644
index 7557624..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test9_out.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class A{
-	int m(){
-		for (int i= 0; i==0;){
-			int temp= 1 + 2;
-			int x= temp;
-		}
-		return 1 + 2;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail0.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail0.java
deleted file mode 100644
index 35aed61..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail0.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	void m(){
-		int temp;
-		int i= 1;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail1.java
deleted file mode 100644
index ec66930..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail1.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	int m(int y){
-		m(y);
-		m(y);
-		return y;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail10.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail10.java
deleted file mode 100644
index de4ed23..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail10.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void f(){
-		Object[] i= new Object[]{this};
-	}
-}}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail11.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail11.java
deleted file mode 100644
index 306ebbd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail11.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void f(){
-		A i= new A();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail12.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail12.java
deleted file mode 100644
index 63cf080..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail12.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void f(int i){
-		int y= i == 3 ? 2: 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail13.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail13.java
deleted file mode 100644
index e7dd7d6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail13.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	void f(){
-		int i;
-		int y= i =1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail14.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail14.java
deleted file mode 100644
index cb4def5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail14.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void f(int i){
-		int y= (i= 1) + 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail15.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail15.java
deleted file mode 100644
index a579350..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail15.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A {
-	void f(){
-		String f= "k";
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail16.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail16.java
deleted file mode 100644
index 45f1b71..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail16.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class T {
-	int r(){return 4;}
-	void f(){
-		r();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail17.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail17.java
deleted file mode 100644
index ab4dc5b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail17.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class T {
-	int r(){return 4;}
-	void f(){
-		{
-			r();
-		}	
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail18.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail18.java
deleted file mode 100644
index 7ccf3cb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail18.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	void m(){
-		for (int k= 0, i= k; k< 10; k++){
-		}
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail19.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail19.java
deleted file mode 100644
index f70aa67..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail19.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A{
-	int temp;
-	void m(){
-		int i= 10;
-		temp= 0;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail2.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail2.java
deleted file mode 100644
index 682ef4b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail2.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	int m(int y){
-		int y= m(i);
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail20.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail20.java
deleted file mode 100644
index c4bc61a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail20.java
+++ /dev/null
@@ -1,5 +0,0 @@
-class A {
-	void f(){
-		throw new NullPointerException();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail21.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail21.java
deleted file mode 100644
index 4175a07..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail21.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-public class A {
-
-	protected void primExecute() {
-		this.toString();
-	}
-
-	if (image != null) {
-		Object loc = null;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail22.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail22.java
deleted file mode 100644
index 8493af5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail22.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-public class A {
-	void f(){
-		f();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail23.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail23.java
deleted file mode 100644
index 2907d4b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail23.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-    void f(){
-        int a= 0;
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail24.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail24.java
deleted file mode 100644
index a648eac..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail24.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-    void f(){
-        int a= 0;
-        a= 0;
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail25.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail25.java
deleted file mode 100644
index b49e010..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail25.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void m(int i){
-		int x= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail26.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail26.java
deleted file mode 100644
index 70bde9c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail26.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void m(int i){
-		class Local{}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail3.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail3.java
deleted file mode 100644
index 457fb89..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail3.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	int m(int y){
-		int y= m(y);
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail4.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail4.java
deleted file mode 100644
index e24b7a1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail4.java
+++ /dev/null
@@ -1,7 +0,0 @@
-//void expression
-package p;
-class A{
-	void m(){
-		m();
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail5.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail5.java
deleted file mode 100644
index f9c530d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail5.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	int y= 1+2;
-	int u= y;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail6.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail6.java
deleted file mode 100644
index 21773cc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail6.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	A(){
-		this(1 + 1);
-	}
-	A(int y){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail7.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail7.java
deleted file mode 100644
index fda6605..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail7.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A extends B{
-	A(){
-		super(1 + 1);
-	}
-}
-class B{
-	B(int y){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail8.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail8.java
deleted file mode 100644
index 1f7cbd1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail8.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	static final int FF= 2;
-	void f(){
-		int t= A.FF;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail9.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail9.java
deleted file mode 100644
index 1e55f44..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail9.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void f(){
-		Object i= null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/GoToNextPreviousMemberAction/A_testNext0.java b/org.eclipse.jdt.ui.tests.refactoring/resources/GoToNextPreviousMemberAction/A_testNext0.java
deleted file mode 100644
index 0e4f1bb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/GoToNextPreviousMemberAction/A_testNext0.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package p;
-
-
-class A {
-	class T{
-	
-	}
-	
-	void f(){
-	
-	}
-	
-	{
-		
-		
-	}
-	
-	int fg;
-
-	static {
-	
-	}
-	
-	/**
-	 * 
-	 */	
-	void f1(){
-	
-	}
-
-	void f2(){
-	
-	}
-}
-  
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/GoToNextPreviousMemberAction/A_testNext1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/GoToNextPreviousMemberAction/A_testNext1.java
deleted file mode 100644
index 0e4f1bb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/GoToNextPreviousMemberAction/A_testNext1.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package p;
-
-
-class A {
-	class T{
-	
-	}
-	
-	void f(){
-	
-	}
-	
-	{
-		
-		
-	}
-	
-	int fg;
-
-	static {
-	
-	}
-	
-	/**
-	 * 
-	 */	
-	void f1(){
-	
-	}
-
-	void f2(){
-	
-	}
-}
-  
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/GoToNextPreviousMemberAction/A_testNext2.java b/org.eclipse.jdt.ui.tests.refactoring/resources/GoToNextPreviousMemberAction/A_testNext2.java
deleted file mode 100644
index 0e4f1bb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/GoToNextPreviousMemberAction/A_testNext2.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package p;
-
-
-class A {
-	class T{
-	
-	}
-	
-	void f(){
-	
-	}
-	
-	{
-		
-		
-	}
-	
-	int fg;
-
-	static {
-	
-	}
-	
-	/**
-	 * 
-	 */	
-	void f1(){
-	
-	}
-
-	void f2(){
-	
-	}
-}
-  
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/GoToNextPreviousMemberAction/A_testNext3.java b/org.eclipse.jdt.ui.tests.refactoring/resources/GoToNextPreviousMemberAction/A_testNext3.java
deleted file mode 100644
index 220f149..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/GoToNextPreviousMemberAction/A_testNext3.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package p;
-
-
-class A {
-	class T{
-	
-	}
-	
-	void f(){
-	
-	}
-	
-	{
-		
-		
-	}
-	
-	int fg;
-
-	static {
-	
-	}
-	
-	/**
-	 * 
-	 */	
-	void f1(){
-	
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/GoToNextPreviousMemberAction/A_testPrevious0.java b/org.eclipse.jdt.ui.tests.refactoring/resources/GoToNextPreviousMemberAction/A_testPrevious0.java
deleted file mode 100644
index 220f149..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/GoToNextPreviousMemberAction/A_testPrevious0.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package p;
-
-
-class A {
-	class T{
-	
-	}
-	
-	void f(){
-	
-	}
-	
-	{
-		
-		
-	}
-	
-	int fg;
-
-	static {
-	
-	}
-	
-	/**
-	 * 
-	 */	
-	void f1(){
-	
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/GoToNextPreviousMemberAction/A_testPrevious1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/GoToNextPreviousMemberAction/A_testPrevious1.java
deleted file mode 100644
index 220f149..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/GoToNextPreviousMemberAction/A_testPrevious1.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package p;
-
-
-class A {
-	class T{
-	
-	}
-	
-	void f(){
-	
-	}
-	
-	{
-		
-		
-	}
-	
-	int fg;
-
-	static {
-	
-	}
-	
-	/**
-	 * 
-	 */	
-	void f1(){
-	
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/GoToNextPreviousMemberAction/A_testPrevious2.java b/org.eclipse.jdt.ui.tests.refactoring/resources/GoToNextPreviousMemberAction/A_testPrevious2.java
deleted file mode 100644
index 220f149..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/GoToNextPreviousMemberAction/A_testPrevious2.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package p;
-
-
-class A {
-	class T{
-	
-	}
-	
-	void f(){
-	
-	}
-	
-	{
-		
-		
-	}
-	
-	int fg;
-
-	static {
-	
-	}
-	
-	/**
-	 * 
-	 */	
-	void f1(){
-	
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/GoToNextPreviousMemberAction/A_testPrevious3.java b/org.eclipse.jdt.ui.tests.refactoring/resources/GoToNextPreviousMemberAction/A_testPrevious3.java
deleted file mode 100644
index 220f149..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/GoToNextPreviousMemberAction/A_testPrevious3.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package p;
-
-
-class A {
-	class T{
-	
-	}
-	
-	void f(){
-	
-	}
-	
-	{
-		
-		
-	}
-	
-	int fg;
-
-	static {
-	
-	}
-	
-	/**
-	 * 
-	 */	
-	void f1(){
-	
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/GoToNextPreviousMemberAction/A_testPrevious4.java b/org.eclipse.jdt.ui.tests.refactoring/resources/GoToNextPreviousMemberAction/A_testPrevious4.java
deleted file mode 100644
index 220f149..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/GoToNextPreviousMemberAction/A_testPrevious4.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package p;
-
-
-class A {
-	class T{
-	
-	}
-	
-	void f(){
-	
-	}
-	
-	{
-		
-		
-	}
-	
-	int fg;
-
-	static {
-	
-	}
-	
-	/**
-	 * 
-	 */	
-	void f1(){
-	
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/GoToNextPreviousMemberAction/A_testPrevious5.java b/org.eclipse.jdt.ui.tests.refactoring/resources/GoToNextPreviousMemberAction/A_testPrevious5.java
deleted file mode 100644
index a7b2e34..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/GoToNextPreviousMemberAction/A_testPrevious5.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package p;
-
-
-class A {
-	class T{
-	
-	}
-	
-	void f(){
-	
-	}
-	
-	{
-		
-		
-	}
-	
-	int fg;
-
-	static {
-	
-	}
-	
-	/**
-	 * 
-	 */	
-	void f1(){
-	
-	}
-
-	void f2(){
-	
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/GoToNextPreviousMemberAction/A_testPrevious6.java b/org.eclipse.jdt.ui.tests.refactoring/resources/GoToNextPreviousMemberAction/A_testPrevious6.java
deleted file mode 100644
index 0e4f1bb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/GoToNextPreviousMemberAction/A_testPrevious6.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package p;
-
-
-class A {
-	class T{
-	
-	}
-	
-	void f(){
-	
-	}
-	
-	{
-		
-		
-	}
-	
-	int fg;
-
-	static {
-	
-	}
-	
-	/**
-	 * 
-	 */	
-	void f1(){
-	
-	}
-
-	void f2(){
-	
-	}
-}
-  
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/.cvsignore b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/.cvsignore
deleted file mode 100644
index eddeac1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-.metadata
-bin
-*.class
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/.classpath b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/.classpath
deleted file mode 100644
index 6adfc41..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/.classpath
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-    <classpathentry kind="src" path=""/>
-    <classpathentry kind="var" path="JRE_LIB" rootpath="JRE_SRCROOT" sourcepath="JRE_SRC"/>
-    <classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/.cvsignore b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/.cvsignore
deleted file mode 100644
index 21a3013..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-bin
-*.class
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/.project b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/.project
deleted file mode 100644
index 86a5ef6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>TestCases</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/A.java
deleted file mode 100644
index e890546..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-public class A {
-	class Inner {
-		public void bar() {
-			foo();
-		}
-	}
-	public void foo() {
-		B b= new B();
-		b.foo();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/B.java
deleted file mode 100644
index ab4b58c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-public class B {
-	public void foo() {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/C.java
deleted file mode 100644
index 987c439..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/C.java
+++ /dev/null
@@ -1,8 +0,0 @@
-class C {
-    int m(){
-        return 6 + 6;
-    }
-    void f(C a){
-       m();
-    }
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestLiteralReferenceRead.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestLiteralReferenceRead.java
deleted file mode 100644
index 18158f5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestLiteralReferenceRead.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package argument_in;
-
-public class TestLiteralReferenceRead {
-	public void main() {
-		/*]*/foo(10);/*[*/
-	}
-	
-	public void foo(int x) {
-		int i= x;
-		bar(x);
-	}
-	
-	public void bar(int z) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestLiteralReferenceWrite.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestLiteralReferenceWrite.java
deleted file mode 100644
index 4095f2c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestLiteralReferenceWrite.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package argument_in;
-
-public class TestLiteralReferenceWrite {
-	public void main() {
-		/*]*/foo(10);/*[*/
-	}
-	
-	public void foo(int x) {
-		x= 20;
-		bar(x);
-	}
-	
-	public void bar(int z) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestLocalReferenceLoop.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestLocalReferenceLoop.java
deleted file mode 100644
index 84939e2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestLocalReferenceLoop.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package argument_in;
-
-public class TestLocalReferenceLoop {
-	public void main() {
-		int i= 10;
-		for (int z= 0; z < i; z++) {
-			/*]*/foo(i);/*[*/
-		}
-	}
-	
-	public void foo(int x) {
-		x= x + 10;
-		bar(x);
-	}
-	
-	public void bar(int z) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestLocalReferenceRead.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestLocalReferenceRead.java
deleted file mode 100644
index 5188f4a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestLocalReferenceRead.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package argument_in;
-
-public class TestLocalReferenceRead {
-	public void main() {
-		int i= 10;
-		/*]*/foo(i);/*[*/
-		System.out.println(i);
-	}
-	
-	public void foo(int x) {
-		x= x + 10;
-		bar(x);
-	}
-	
-	public void bar(int z) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestLocalReferenceUnused.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestLocalReferenceUnused.java
deleted file mode 100644
index e75d42e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestLocalReferenceUnused.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package argument_in;
-
-public class TestLocalReferenceUnused {
-	public void main() {
-		int i= 10;
-		/*]*/foo(i);/*[*/
-	}
-	
-	public void foo(int x) {
-		x= x + 10;
-		bar(x);
-	}
-	
-	public void bar(int z) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestLocalReferenceWrite.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestLocalReferenceWrite.java
deleted file mode 100644
index 4785a85..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestLocalReferenceWrite.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package argument_in;
-
-public class TestLocalReferenceWrite {
-	public void main() {
-		int i= 10;
-		/*]*/foo(i);/*[*/
-		i= 10;
-		System.out.println(i);
-	}
-	
-	public void foo(int x) {
-		x= x + 10;
-		bar(x);
-	}
-	
-	public void bar(int z) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestParameterNameUnused1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestParameterNameUnused1.java
deleted file mode 100644
index 04a288c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestParameterNameUnused1.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package argument_in;
-
-public class TestParameterNameUnused1 {
-	public void main() {
-		{
-			int x= 20;
-		}
-		/*]*/foo(10);/*[*/
-	}
-	
-	public void foo(int x) {
-		x= 20;
-		bar(x);
-	}
-	
-	public void bar(int z) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestParameterNameUnused2.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestParameterNameUnused2.java
deleted file mode 100644
index 3681e7e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestParameterNameUnused2.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package argument_in;
-
-public class TestParameterNameUnused2 {
-	public void main() {
-		for (int x= 10; x < 20; x++)
-			main();
-		/*]*/foo(10);/*[*/
-	}
-	
-	public void foo(int x) {
-		x= 20;
-		bar(x);
-	}
-	
-	public void bar(int z) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestParameterNameUnused3.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestParameterNameUnused3.java
deleted file mode 100644
index 035db19..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestParameterNameUnused3.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package argument_in;
-
-public class TestParameterNameUnused3 {
-	public void main() {
-		class T {
-			int x;
-		}
-		/*]*/foo(10);/*[*/
-	}
-	
-	public void foo(int x) {
-		x= 20;
-		bar(x);
-	}
-	
-	public void bar(int z) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestParameterNameUsed1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestParameterNameUsed1.java
deleted file mode 100644
index 4bd83e5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestParameterNameUsed1.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package argument_in;
-
-public class TestParameterNameUsed1 {
-	public void main() {
-		int x= 20;
-		/*]*/foo(10);/*[*/
-	}
-	
-	public void foo(int x) {
-		x= 20;
-		bar(x);
-	}
-	
-	public void bar(int z) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestParameterNameUsed2.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestParameterNameUsed2.java
deleted file mode 100644
index 273620b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestParameterNameUsed2.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package argument_in;
-
-public class TestParameterNameUsed2 {
-	public void main() {
-		/*]*/foo(10);/*[*/
-		int x= 20;
-	}
-	
-	public void foo(int x) {
-		x= 20;
-		bar(x);
-	}
-	
-	public void bar(int z) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestParameterNameUsed3.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestParameterNameUsed3.java
deleted file mode 100644
index 14c140e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestParameterNameUsed3.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package argument_in;
-
-public class TestParameterNameUsed3 {
-	public void main() {
-		/*]*/foo(10);/*[*/
-		{
-			int x= 20;
-		}
-	}
-	
-	public void foo(int x) {
-		x= 20;
-		bar(x);
-	}
-	
-	public void bar(int z) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestParameterNameUsed4.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestParameterNameUsed4.java
deleted file mode 100644
index 3462b5e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_in/TestParameterNameUsed4.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package argument_in;
-
-public class TestParameterNameUsed4 {
-	public void main() {
-		class x {}
-		/*]*/foo(10);/*[*/
-	}
-	
-	public void foo(int x) {
-		x= 20;
-		bar(x);
-	}
-	
-	public void bar(int z) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestLiteralReferenceRead.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestLiteralReferenceRead.java
deleted file mode 100644
index 3d2d283..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestLiteralReferenceRead.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package argument_out;
-
-public class TestLiteralReferenceRead {
-	public void main() {
-		/*]*/int i= 10;
-		bar(10);/*[*/
-	}
-	
-	public void foo(int x) {
-		int i= x;
-		bar(x);
-	}
-	
-	public void bar(int z) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestLiteralReferenceWrite.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestLiteralReferenceWrite.java
deleted file mode 100644
index 22378b8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestLiteralReferenceWrite.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package argument_out;
-
-public class TestLiteralReferenceWrite {
-	public void main() {
-		int x = 10;
-		/*]*/x= 20;
-		bar(x);/*[*/
-	}
-	
-	public void foo(int x) {
-		x= 20;
-		bar(x);
-	}
-	
-	public void bar(int z) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestLocalReferenceLoop.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestLocalReferenceLoop.java
deleted file mode 100644
index 17a93ca..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestLocalReferenceLoop.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package argument_out;
-
-public class TestLocalReferenceLoop {
-	public void main() {
-		int i= 10;
-		for (int z= 0; z < i; z++) {
-			int x = i;
-			/*]*/x= x + 10;
-			bar(x);/*[*/
-		}
-	}
-	
-	public void foo(int x) {
-		x= x + 10;
-		bar(x);
-	}
-	
-	public void bar(int z) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestLocalReferenceRead.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestLocalReferenceRead.java
deleted file mode 100644
index ffb43fe..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestLocalReferenceRead.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package argument_out;
-
-public class TestLocalReferenceRead {
-	public void main() {
-		int i= 10;
-		int x = i;
-		/*]*/x= x + 10;
-		bar(x);/*[*/
-		System.out.println(i);
-	}
-	
-	public void foo(int x) {
-		x= x + 10;
-		bar(x);
-	}
-	
-	public void bar(int z) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestLocalReferenceUnused.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestLocalReferenceUnused.java
deleted file mode 100644
index c2cf694..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestLocalReferenceUnused.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package argument_out;
-
-public class TestLocalReferenceUnused {
-	public void main() {
-		int i= 10;
-		/*]*/i= i + 10;
-		bar(i);/*[*/
-	}
-	
-	public void foo(int x) {
-		x= x + 10;
-		bar(x);
-	}
-	
-	public void bar(int z) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestLocalReferenceWrite.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestLocalReferenceWrite.java
deleted file mode 100644
index aff4463..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestLocalReferenceWrite.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package argument_out;
-
-public class TestLocalReferenceWrite {
-	public void main() {
-		int i= 10;
-		/*]*/i= i + 10;
-		bar(i);/*[*/
-		i= 10;
-		System.out.println(i);
-	}
-	
-	public void foo(int x) {
-		x= x + 10;
-		bar(x);
-	}
-	
-	public void bar(int z) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestParameterNameUnused1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestParameterNameUnused1.java
deleted file mode 100644
index 303e271..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestParameterNameUnused1.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package argument_out;
-
-public class TestParameterNameUnused1 {
-	public void main() {
-		{
-			int x= 20;
-		}
-		int x = 10;
-		/*]*/x= 20;
-		bar(x);/*[*/
-	}
-	
-	public void foo(int x) {
-		x= 20;
-		bar(x);
-	}
-	
-	public void bar(int z) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestParameterNameUnused2.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestParameterNameUnused2.java
deleted file mode 100644
index f6d81bb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestParameterNameUnused2.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package argument_out;
-
-public class TestParameterNameUnused2 {
-	public void main() {
-		for (int x= 10; x < 20; x++)
-			main();
-		int x = 10;
-		/*]*/x= 20;
-		bar(x);/*[*/
-	}
-	
-	public void foo(int x) {
-		x= 20;
-		bar(x);
-	}
-	
-	public void bar(int z) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestParameterNameUnused3.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestParameterNameUnused3.java
deleted file mode 100644
index cddd8a5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestParameterNameUnused3.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package argument_out;
-
-public class TestParameterNameUnused3 {
-	public void main() {
-		class T {
-			int x;
-		}
-		int x = 10;
-		/*]*/x= 20;
-		bar(x);/*[*/
-	}
-	
-	public void foo(int x) {
-		x= 20;
-		bar(x);
-	}
-	
-	public void bar(int z) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestParameterNameUsed1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestParameterNameUsed1.java
deleted file mode 100644
index 1c2d071..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestParameterNameUsed1.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package argument_out;
-
-public class TestParameterNameUsed1 {
-	public void main() {
-		int x= 20;
-		int x1 = 10;
-		/*]*/x1= 20;
-		bar(x1);/*[*/
-	}
-	
-	public void foo(int x) {
-		x= 20;
-		bar(x);
-	}
-	
-	public void bar(int z) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestParameterNameUsed2.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestParameterNameUsed2.java
deleted file mode 100644
index 2fdd7c2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestParameterNameUsed2.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package argument_out;
-
-public class TestParameterNameUsed2 {
-	public void main() {
-		int x1 = 10;
-		/*]*/x1= 20;
-		bar(x1);/*[*/
-		int x= 20;
-	}
-	
-	public void foo(int x) {
-		x= 20;
-		bar(x);
-	}
-	
-	public void bar(int z) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestParameterNameUsed3.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestParameterNameUsed3.java
deleted file mode 100644
index c93110b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestParameterNameUsed3.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package argument_out;
-
-public class TestParameterNameUsed3 {
-	public void main() {
-		int x1 = 10;
-		/*]*/x1= 20;
-		bar(x1);/*[*/
-		{
-			int x= 20;
-		}
-	}
-	
-	public void foo(int x) {
-		x= 20;
-		bar(x);
-	}
-	
-	public void bar(int z) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestParameterNameUsed4.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestParameterNameUsed4.java
deleted file mode 100644
index 97dd0ef..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/argument_out/TestParameterNameUsed4.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package argument_out;
-
-public class TestParameterNameUsed4 {
-	public void main() {
-		class x {}
-		int x1 = 10;
-		/*]*/x1= 20;
-		bar(x1);/*[*/
-	}
-	
-	public void foo(int x) {
-		x= 20;
-		bar(x);
-	}
-	
-	public void bar(int z) {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/call_in/TestExpressionStatement.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/call_in/TestExpressionStatement.java
deleted file mode 100644
index fdb6313..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/call_in/TestExpressionStatement.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package call_in;
-
-public class TestExpressionStatement {
-	public void main() {
-		/*]*/foo();/*[*/
-	}
-	
-	public void foo() {
-		System.out.println("Eclipse");
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/call_in/TestExpressionStatementWithReturn.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/call_in/TestExpressionStatementWithReturn.java
deleted file mode 100644
index 8ede88c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/call_in/TestExpressionStatementWithReturn.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package call_in;
-
-public class TestExpressionStatementWithReturn {
-	public void main() {
-		/*]*/foo();/*[*/
-	}
-	
-	public void foo() {
-		System.out.println("Eclipse");
-		return;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/call_in/TestParenthesis.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/call_in/TestParenthesis.java
deleted file mode 100644
index 08547eb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/call_in/TestParenthesis.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package call_in;
-
-import java.util.List;
-
-public class TestParenthesis {
-	Object list;
-	
-	public void main() {
-		Object element= /*]*/getList()/*[*/.get(0);
-	}
-	
-	public List getList() {
-		return (List)list;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/call_in/TestStatementWithFunction1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/call_in/TestStatementWithFunction1.java
deleted file mode 100644
index ecc346c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/call_in/TestStatementWithFunction1.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package call_in;
-
-class TestStatementWithFunction1 {
-    public void main(){
-       /*]*/foo();/*[*/
-    }
-    
-    public int foo(){
-        return 6;
-    }
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/call_in/TestStatementWithFunction2.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/call_in/TestStatementWithFunction2.java
deleted file mode 100644
index 2d80def..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/call_in/TestStatementWithFunction2.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package call_in;
-
-class TestStatementWithFunction2 {
-    public void main(){
-       /*]*/foo();/*[*/
-    }
-    
-    public int foo(){
-        return bar();
-    }
-    public int bar() {
-    	System.out.println("Bar called");
-    	return 10;
-    }
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/call_out/TestExpressionStatement.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/call_out/TestExpressionStatement.java
deleted file mode 100644
index 05956db..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/call_out/TestExpressionStatement.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package call_out;
-
-public class TestExpressionStatement {
-	public void main() {
-		/*]*/System.out.println("Eclipse");/*[*/
-	}
-	
-	public void foo() {
-		System.out.println("Eclipse");
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/call_out/TestExpressionStatementWithReturn.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/call_out/TestExpressionStatementWithReturn.java
deleted file mode 100644
index d39873e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/call_out/TestExpressionStatementWithReturn.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package call_out;
-
-public class TestExpressionStatementWithReturn {
-	public void main() {
-		/*]*/System.out.println("Eclipse");/*[*/
-	}
-	
-	public void foo() {
-		System.out.println("Eclipse");
-		return;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/call_out/TestParenthesis.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/call_out/TestParenthesis.java
deleted file mode 100644
index 641a37f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/call_out/TestParenthesis.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package call_out;
-
-import java.util.List;
-
-public class TestParenthesis {
-	Object list;
-	
-	public void main() {
-		Object element= /*]*/((List)list)/*[*/.get(0);
-	}
-	
-	public List getList() {
-		return (List)list;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/call_out/TestStatementWithFunction1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/call_out/TestStatementWithFunction1.java
deleted file mode 100644
index d0fe194..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/call_out/TestStatementWithFunction1.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package call_out;
-
-class TestStatementWithFunction1 {
-    public void main(){/*[*/
-    }
-    
-    public int foo(){
-        return 6;
-    }
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/call_out/TestStatementWithFunction2.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/call_out/TestStatementWithFunction2.java
deleted file mode 100644
index 7d33513..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/call_out/TestStatementWithFunction2.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package call_out;
-
-class TestStatementWithFunction2 {
-    public void main(){
-       /*]*/int foo = bar();/*[*/
-    }
-    
-    public int foo(){
-        return bar();
-    }
-    public int bar() {
-    	System.out.println("Bar called");
-    	return 10;
-    }
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_in/TestForAssignmentOne.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_in/TestForAssignmentOne.java
deleted file mode 100644
index 047a3da..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_in/TestForAssignmentOne.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package controlStatement_in;
-
-public class TestForAssignmentOne {
-	public void main() {
-		int x;
-		for (int i= 0; i < 10; i++)
-			x= /*]*/foo()/*[*/;
-	}
-	
-	public int foo() {
-		return 20;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_in/TestForAssignmentTwo.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_in/TestForAssignmentTwo.java
deleted file mode 100644
index 6b18aee..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_in/TestForAssignmentTwo.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package controlStatement_in;
-
-public class TestForAssignmentTwo {
-	public void main() {
-		int x;
-		for (int i= 0; i < 10; i++)
-			x= /*]*/foo()/*[*/;
-	}
-	
-	public int foo() {
-		int x;
-		return 20;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_in/TestForEmpty.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_in/TestForEmpty.java
deleted file mode 100644
index e8054e1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_in/TestForEmpty.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package controlStatement_in;
-
-public class TestForEmpty {
-	public void main() {
-		for (int i= 0; i < 10; i++)
-			/*]*/foo();/*[*/
-	}
-	
-	public void foo() {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_in/TestForOne.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_in/TestForOne.java
deleted file mode 100644
index 424a145..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_in/TestForOne.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package controlStatement_in;
-
-public class TestForOne {
-	public void main() {
-		for (int i= 0; i < 10; i++)
-			/*]*/foo();/*[*/
-	}
-	
-	public void foo() {
-		bar();
-	}
-	public void bar() {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_in/TestForTwo.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_in/TestForTwo.java
deleted file mode 100644
index 6969738..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_in/TestForTwo.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package controlStatement_in;
-
-public class TestForTwo {
-	public void main() {
-		for (int i= 0; i < 10; i++)
-			/*]*/foo();/*[*/
-	}
-	
-	public void foo() {
-		bar();
-		bar();
-	}
-	public void bar() {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_in/TestIfElseTwo.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_in/TestIfElseTwo.java
deleted file mode 100644
index 0401472..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_in/TestIfElseTwo.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package controlStatement_in;
-
-public class TestIfElseTwo {
-	public void main() {
-		if (true)
-			main();
-		else
-			/*]*/foo();/*[*/
-	}
-	
-	public void foo() {
-		bar();
-		bar();
-	}
-	public void bar() {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_in/TestIfThenTwo.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_in/TestIfThenTwo.java
deleted file mode 100644
index 4853ef0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_in/TestIfThenTwo.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package controlStatement_in;
-
-public class TestIfThenTwo {
-	public void main() {
-		if (true)
-			/*]*/foo();/*[*/
-		else
-			main();
-	}
-	
-	public void foo() {
-		bar();
-		bar();
-	}
-	public void bar() {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_out/TestForAssignmentOne.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_out/TestForAssignmentOne.java
deleted file mode 100644
index e0c9663..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_out/TestForAssignmentOne.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package controlStatement_out;
-
-public class TestForAssignmentOne {
-	public void main() {
-		int x;
-		for (int i= 0; i < 10; i++)
-			x= /*]*/20/*[*/;
-	}
-	
-	public int foo() {
-		return 20;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_out/TestForAssignmentTwo.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_out/TestForAssignmentTwo.java
deleted file mode 100644
index b304123..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_out/TestForAssignmentTwo.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package controlStatement_out;
-
-public class TestForAssignmentTwo {
-	public void main() {
-		int x;
-		for (int i= 0; i < 10; i++)
-			{
-				int x1;
-				x= /*]*/20/*[*/;
-			}
-	}
-	
-	public int foo() {
-		int x;
-		return 20;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_out/TestForEmpty.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_out/TestForEmpty.java
deleted file mode 100644
index 452aa32..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_out/TestForEmpty.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package controlStatement_out;
-
-public class TestForEmpty {
-	public void main() {
-		for (int i= 0; i < 10; i++)
-			/*]*/;/*[*/
-	}
-	
-	public void foo() {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_out/TestForOne.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_out/TestForOne.java
deleted file mode 100644
index 973a22e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_out/TestForOne.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package controlStatement_out;
-
-public class TestForOne {
-	public void main() {
-		for (int i= 0; i < 10; i++)
-			/*]*/bar();/*[*/
-	}
-	
-	public void foo() {
-		bar();
-	}
-	public void bar() {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_out/TestForTwo.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_out/TestForTwo.java
deleted file mode 100644
index 5cb642c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_out/TestForTwo.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package controlStatement_out;
-
-public class TestForTwo {
-	public void main() {
-		for (int i= 0; i < 10; i++)
-			/*]*/{
-				bar();
-				bar();
-			}/*[*/
-	}
-	
-	public void foo() {
-		bar();
-		bar();
-	}
-	public void bar() {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_out/TestIfElseTwo.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_out/TestIfElseTwo.java
deleted file mode 100644
index 2bc8ecd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_out/TestIfElseTwo.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package controlStatement_out;
-
-public class TestIfElseTwo {
-	public void main() {
-		if (true)
-			main();
-		else
-			/*]*/{
-				bar();
-				bar();
-			}/*[*/
-	}
-	
-	public void foo() {
-		bar();
-		bar();
-	}
-	public void bar() {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_out/TestIfThenTwo.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_out/TestIfThenTwo.java
deleted file mode 100644
index 69686bb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/controlStatement_out/TestIfThenTwo.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package controlStatement_out;
-
-public class TestIfThenTwo {
-	public void main() {
-		if (true)
-			/*]*/{
-				bar();
-				bar();
-			}/*[*/
-		else
-			main();
-	}
-	
-	public void foo() {
-		bar();
-		bar();
-	}
-	public void bar() {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/expression_in/TestAssignment.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/expression_in/TestAssignment.java
deleted file mode 100644
index 90b101e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/expression_in/TestAssignment.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package expression_in;
-
-public class TestAssignment {
-	public void main() {
-		int i= 0;
-		i= /*]*/foo()/*[*/;
-	}
-	public int foo() {
-		int x= 20;
-		return x++;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/expression_in/TestReturnStatement.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/expression_in/TestReturnStatement.java
deleted file mode 100644
index f128bb3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/expression_in/TestReturnStatement.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package expression_in;
-
-public class TestReturnStatement {
-	public int main() {
-		return /*]*/foo()/*[*/;
-	}
-	
-	public int foo() {
-		if (true) {
-			return 10;
-		}
-		return 20;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/expression_in/TestSimpleBody.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/expression_in/TestSimpleBody.java
deleted file mode 100644
index be20e2e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/expression_in/TestSimpleBody.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package expression_in;
-
-public class TestSimpleBody {
-	public void main() {
-		int i= 10 * /*]*/foo()/*[*/;
-	}
-	
-	public int foo() {
-		return 1 + 2;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/expression_in/TestSimpleExpression.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/expression_in/TestSimpleExpression.java
deleted file mode 100644
index e6a6c92..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/expression_in/TestSimpleExpression.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package expression_in;
-
-public class TestSimpleExpression {
-	public void main() {
-		int i= /*]*/foo()/*[*/;
-	}
-	
-	public int foo() {
-		return 1 + 1;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/expression_in/TestSimpleExpressionWithStatements.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/expression_in/TestSimpleExpressionWithStatements.java
deleted file mode 100644
index 3b4ca4c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/expression_in/TestSimpleExpressionWithStatements.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package expression_in;
-
-public class TestSimpleExpressionWithStatements {
-	public void main() {
-		int i= /*]*/foo()/*[*/;
-	}
-	
-	public int foo() {
-		int x= 20;
-		return x + 1;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/expression_out/TestAssignment.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/expression_out/TestAssignment.java
deleted file mode 100644
index f8687db..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/expression_out/TestAssignment.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package expression_out;
-
-public class TestAssignment {
-	public void main() {
-		int i= 0;
-		int x= 20;
-		i= /*]*/x++/*[*/;
-	}
-	public int foo() {
-		int x= 20;
-		return x++;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/expression_out/TestReturnStatement.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/expression_out/TestReturnStatement.java
deleted file mode 100644
index 4246899..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/expression_out/TestReturnStatement.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package expression_out;
-
-public class TestReturnStatement {
-	public int main() {
-		if (true) {
-			return 10;
-		}
-		return 20;
-	}
-	
-	public int foo() {
-		if (true) {
-			return 10;
-		}
-		return 20;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/expression_out/TestSimpleBody.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/expression_out/TestSimpleBody.java
deleted file mode 100644
index 67fb3f6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/expression_out/TestSimpleBody.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package expression_out;
-
-public class TestSimpleBody {
-	public void main() {
-		int i= 10 * /*]*/(1 + 2)/*[*/;
-	}
-	
-	public int foo() {
-		return 1 + 2;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/expression_out/TestSimpleExpression.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/expression_out/TestSimpleExpression.java
deleted file mode 100644
index 89f5ee8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/expression_out/TestSimpleExpression.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package expression_out;
-
-public class TestSimpleExpression {
-	public void main() {
-		int i= /*]*/1 + 1/*[*/;
-	}
-	
-	public int foo() {
-		return 1 + 1;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/expression_out/TestSimpleExpressionWithStatements.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/expression_out/TestSimpleExpressionWithStatements.java
deleted file mode 100644
index f0836a0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/expression_out/TestSimpleExpressionWithStatements.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package expression_out;
-
-public class TestSimpleExpressionWithStatements {
-	public void main() {
-		int x= 20;
-		int i= /*]*/x + 1/*[*/;
-	}
-	
-	public int foo() {
-		int x= 20;
-		return x + 1;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/invalid/TestCompileError1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/invalid/TestCompileError1.java
deleted file mode 100644
index ac7bd5a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/invalid/TestCompileError1.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalid;
-
-public class TestCompileError1 {
-	public void main() {
-		/*]*/foo();/*[*/
-	}
-	
-	public void foo() {
-		T t= null;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/invalid/TestCompileError2.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/invalid/TestCompileError2.java
deleted file mode 100644
index be0c861..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/invalid/TestCompileError2.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalid;
-
-public class TestCompileError2 {
-	public void main() {
-		/*]*/foo();/*[*/
-	}
-	
-	public void foo() {
-		main()
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/invalid/TestCompileError3.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/invalid/TestCompileError3.java
deleted file mode 100644
index b13e249..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/invalid/TestCompileError3.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalid;
-
-public class TestCompileError3 {
-	public void main() {
-		/*]*/foo();/*[*/
-	}
-	
-	public void foo() {
-		{
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/invalid/TestComplexBody.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/invalid/TestComplexBody.java
deleted file mode 100644
index ddf310b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/invalid/TestComplexBody.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package invalid;
-
-public class TestComplexBody {
-	public void main() {
-		int i= 10 + /*]*/foo()/*[*/;
-	}
-	
-	public int foo() {
-		int i= 20;
-		return i + 2;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/invalid/TestFieldInitializer.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/invalid/TestFieldInitializer.java
deleted file mode 100644
index b5ac9b5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/invalid/TestFieldInitializer.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package invalid;
-
-public class TestFieldInitializer {
-	
-	private int field= /*]*/foo()/*[*/;	
-	
-	public int foo() {
-		return 1;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/invalid/TestInterruptedStatement.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/invalid/TestInterruptedStatement.java
deleted file mode 100644
index 2bb989d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/invalid/TestInterruptedStatement.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package invalid;
-
-public class TestInterruptedStatement {
-	public void main() {
-		/*]*/foo();/*[*/
-	}
-	
-	public void foo() {
-		if (true) {
-			System.out.println("Eclipse");
-			return;
-		}	
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/invalid/TestRecursion.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/invalid/TestRecursion.java
deleted file mode 100644
index 015f407..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/invalid/TestRecursion.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalid;
-
-public class TestRecursion {
-	public void main() {
-		/*]*/foo();/*[*/
-	}
-	
-	public void foo() {
-		foo();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_in/TestFieldInType.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_in/TestFieldInType.java
deleted file mode 100644
index 5063a2c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_in/TestFieldInType.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package nameconflict_in;
-
-public class TestFieldInType {
-	public void main() {
-		/*]*/foo();/*[*/
-		class T {
-			int x;
-		}
-	}
-	
-	public void foo() {
-		int x= 10;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_in/TestLocalInType.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_in/TestLocalInType.java
deleted file mode 100644
index 9054cac..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_in/TestLocalInType.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package nameconflict_in;
-
-public class TestLocalInType {
-	public void main() {
-		/*]*/foo();/*[*/
-		class T {
-			void bar() {
-				int x;
-			}
-		}
-	}
-	
-	public void foo() {
-		int x= 10;
-		int bar= 20;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_in/TestSameLocal.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_in/TestSameLocal.java
deleted file mode 100644
index fa24585..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_in/TestSameLocal.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package nameconflict_in;
-
-public class TestSameLocal {
-	public void main() {
-		int i= 10;
-		/*]*/foo();/*[*/
-	}
-	
-	public void foo() {
-		int i= 20;
-		i++;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_in/TestSameType.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_in/TestSameType.java
deleted file mode 100644
index 2983de7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_in/TestSameType.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package nameconflict_in;
-
-public class TestSameType {
-	public void main() {
-		class T {
-			public T() {}
-		}
-		/*]*/foo();/*[*/
-	}
-	
-	public void foo() {
-		class T {
-			T t;
-			public T() {}
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_in/TestSameTypeAfter.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_in/TestSameTypeAfter.java
deleted file mode 100644
index 8e618b1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_in/TestSameTypeAfter.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package nameconflict_in;
-
-public class TestSameTypeAfter {
-	public void main() {
-		/*]*/foo();/*[*/
-		class T {
-			public T() {}
-		}
-	}
-	
-	public void foo() {
-		class T {
-			T t;
-			public T() {}
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_in/TestSameTypeInSibling.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_in/TestSameTypeInSibling.java
deleted file mode 100644
index 7c4bfce..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_in/TestSameTypeInSibling.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package nameconflict_in;
-
-public class TestSameTypeInSibling {
-	public void main() {
-		class T {
-			public T() {}
-		}
-		int x= 10;
-		/*]*/foo();/*[*/
-	}
-	
-	public void foo() {
-		class T {
-			T t;
-			public T() {}
-		}
-		class X {
-			T t;
-			void foo() {
-				int x;
-				T t;
-			}
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_in/TestSwitchStatement.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_in/TestSwitchStatement.java
deleted file mode 100644
index d244af1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_in/TestSwitchStatement.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package nameconflict_in;
-
-public class TestSwitchStatement {
-	public void main() {
-		int i= 10;
-		switch(i) {
-			case 0:
-				break;
-			case 10:
-				/*]*/foo();/*[*/
-				break;
-		}
-	}
-	
-	public void foo() {
-		int i= 20;
-		i++;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_out/TestFieldInType.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_out/TestFieldInType.java
deleted file mode 100644
index 84a4264..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_out/TestFieldInType.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package nameconflict_out;
-
-public class TestFieldInType {
-	public void main() {
-		/*]*/int x= 10;/*[*/
-		class T {
-			int x;
-		}
-	}
-	
-	public void foo() {
-		int x= 10;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_out/TestLocalInType.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_out/TestLocalInType.java
deleted file mode 100644
index f3099e4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_out/TestLocalInType.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package nameconflict_out;
-
-public class TestLocalInType {
-	public void main() {
-		/*]*/int x= 10;
-		int bar= 20;/*[*/
-		class T {
-			void bar() {
-				int x;
-			}
-		}
-	}
-	
-	public void foo() {
-		int x= 10;
-		int bar= 20;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_out/TestSameLocal.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_out/TestSameLocal.java
deleted file mode 100644
index 86ce110..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_out/TestSameLocal.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package nameconflict_out;
-
-public class TestSameLocal {
-	public void main() {
-		int i= 10;
-		/*]*/int i1= 20;
-		i1++;/*[*/
-	}
-	
-	public void foo() {
-		int i= 20;
-		i++;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_out/TestSameType.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_out/TestSameType.java
deleted file mode 100644
index 1b4a021..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_out/TestSameType.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package nameconflict_out;
-
-public class TestSameType {
-	public void main() {
-		class T {
-			public T() {}
-		}
-		/*]*/class T1 {
-			T1 t;
-			public T1() {}
-		}/*[*/
-	}
-	
-	public void foo() {
-		class T {
-			T t;
-			public T() {}
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_out/TestSameTypeAfter.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_out/TestSameTypeAfter.java
deleted file mode 100644
index 89e01e1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_out/TestSameTypeAfter.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package nameconflict_out;
-
-public class TestSameTypeAfter {
-	public void main() {
-		/*]*/class T1 {
-			T1 t;
-			public T1() {}
-		}/*[*/
-		class T {
-			public T() {}
-		}
-	}
-	
-	public void foo() {
-		class T {
-			T t;
-			public T() {}
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_out/TestSameTypeInSibling.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_out/TestSameTypeInSibling.java
deleted file mode 100644
index 644c21c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_out/TestSameTypeInSibling.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package nameconflict_out;
-
-public class TestSameTypeInSibling {
-	public void main() {
-		class T {
-			public T() {}
-		}
-		int x= 10;
-		/*]*/class T1 {
-			T1 t;
-			public T1() {}
-		}
-		class X {
-			T1 t;
-			void foo() {
-				int x;
-				T1 t;
-			}
-		}/*[*/
-	}
-	
-	public void foo() {
-		class T {
-			T t;
-			public T() {}
-		}
-		class X {
-			T t;
-			void foo() {
-				int x;
-				T t;
-			}
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_out/TestSwitchStatement.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_out/TestSwitchStatement.java
deleted file mode 100644
index 5ca8a7f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/nameconflict_out/TestSwitchStatement.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package nameconflict_out;
-
-public class TestSwitchStatement {
-	public void main() {
-		int i= 10;
-		switch(i) {
-			case 0:
-				break;
-			case 10:
-				/*]*/int i1= 20;
-				i1++;/*[*/
-				break;
-		}
-	}
-	
-	public void foo() {
-		int i= 20;
-		i++;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/simple_in/TestBasic1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/simple_in/TestBasic1.java
deleted file mode 100644
index 6a573d2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/simple_in/TestBasic1.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package simple_in;
-
-public class TestBasic1 {
-	public void main() {
-		/*]*/bar();/*[*/
-	}
-	
-	public void bar() {
-		baz();
-	}
-	public void baz() {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/simple_in/TestBasic2.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/simple_in/TestBasic2.java
deleted file mode 100644
index 275a1d8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/simple_in/TestBasic2.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package simple_in;
-
-public class TestBasic2 {
-	public void main() {
-		/*]*/bar();/*[*/
-	}
-	
-	public void bar() {
-		for (int i= 0; i < 10; i++) {
-			baz();
-		}
-		baz();
-	}
-	public void baz() {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/simple_in/TestEmptyBody.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/simple_in/TestEmptyBody.java
deleted file mode 100644
index ff04664..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/simple_in/TestEmptyBody.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package simple_in;
-
-public class TestEmptyBody {
-	public void main() {
-		/*]*/foo();/*[*/
-	}
-	
-	public void foo() {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/simple_in/TestPrimitiveArray.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/simple_in/TestPrimitiveArray.java
deleted file mode 100644
index 0ddaae3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/simple_in/TestPrimitiveArray.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package simple_in;
-
-public class TestPrimitiveArray {
-	public void main() {
-		/*]*/foo(null);/*[*/
-	}
-	
-	public void foo(int[][] x) {
-		x= new int[10][];
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/simple_in/TestTypeArray.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/simple_in/TestTypeArray.java
deleted file mode 100644
index 0299c06..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/simple_in/TestTypeArray.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package simple_in;
-
-public class TestTypeArray {
-	public void main() {
-		/*]*/foo(null);/*[*/
-	}
-	
-	public void foo(TestTypeArray[][] x) {
-		x= new TestTypeArray[10][];
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/simple_out/TestBasic1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/simple_out/TestBasic1.java
deleted file mode 100644
index aec8b2e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/simple_out/TestBasic1.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package simple_out;
-
-public class TestBasic1 {
-	public void main() {
-		/*]*/baz();/*[*/
-	}
-	
-	public void bar() {
-		baz();
-	}
-	public void baz() {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/simple_out/TestBasic2.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/simple_out/TestBasic2.java
deleted file mode 100644
index c00ddb5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/simple_out/TestBasic2.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package simple_out;
-
-public class TestBasic2 {
-	public void main() {
-		/*]*/for (int i= 0; i < 10; i++) {
-			baz();
-		}
-		baz();/*[*/
-	}
-	
-	public void bar() {
-		for (int i= 0; i < 10; i++) {
-			baz();
-		}
-		baz();
-	}
-	public void baz() {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/simple_out/TestEmptyBody.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/simple_out/TestEmptyBody.java
deleted file mode 100644
index 9444bc3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/simple_out/TestEmptyBody.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package simple_out;
-
-public class TestEmptyBody {
-	public void main() {/*[*/
-	}
-	
-	public void foo() {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/simple_out/TestPrimitiveArray.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/simple_out/TestPrimitiveArray.java
deleted file mode 100644
index ff2c1ec..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/simple_out/TestPrimitiveArray.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package simple_out;
-
-public class TestPrimitiveArray {
-	public void main() {
-		int[][] x = null;
-		/*]*/x= new int[10][];/*[*/
-	}
-	
-	public void foo(int[][] x) {
-		x= new int[10][];
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/simple_out/TestTypeArray.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/simple_out/TestTypeArray.java
deleted file mode 100644
index b33fe6e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/simple_out/TestTypeArray.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package simple_out;
-
-public class TestTypeArray {
-	public void main() {
-		TestTypeArray[][] x = null;
-		/*]*/x= new TestTypeArray[10][];/*[*/
-	}
-	
-	public void foo(TestTypeArray[][] x) {
-		x= new TestTypeArray[10][];
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_in.java
deleted file mode 100644
index 0519ecb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_in.java
+++ /dev/null
@@ -1 +0,0 @@
- 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_out.java
deleted file mode 100644
index 0519ecb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_out.java
+++ /dev/null
@@ -1 +0,0 @@
- 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test0_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test0_in.java
deleted file mode 100644
index f140296..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test0_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void m(int i){
-		/*[*/int x= 0;/*]*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test0_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test0_out.java
deleted file mode 100644
index 649a728..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test0_out.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void m(int i){
-		/*[*//*]*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test10_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test10_in.java
deleted file mode 100644
index 97e6029..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test10_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A {
-	public void testRLV() {
-			boolean test= true;
-	        boolean t= (test);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test10_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test10_out.java
deleted file mode 100644
index d13c7f4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test10_out.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A {
-	public void testRLV() {
-			boolean t= (true);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test11_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test11_in.java
deleted file mode 100644
index 2708490..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test11_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A {
-	boolean d;
-	public void test() {
-			boolean test= d;
-	        boolean t= (test);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test11_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test11_out.java
deleted file mode 100644
index 72e9efb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test11_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A {
-	boolean d;
-	public void test() {
-			boolean t= (d);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test12_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test12_in.java
deleted file mode 100644
index 0cec272..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test12_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A {
-	boolean d;
-	public void test() {
-			A test= this;
-	        A s1= test;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test12_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test12_out.java
deleted file mode 100644
index a9e0f11..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test12_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A {
-	boolean d;
-	public void test() {
-			A s1= this;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test13_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test13_in.java
deleted file mode 100644
index 455b2f4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test13_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A {
-	public void test() {
-			int i= 0;
-			int j= i=2;
-			int k= j + 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test13_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test13_out.java
deleted file mode 100644
index 054416b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test13_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A {
-	public void test() {
-			int i= 0;
-			int k= (i=2) + 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test14_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test14_in.java
deleted file mode 100644
index b390bb6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test14_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	int i(){
-		int i= 0, j= 1;
-		return 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test14_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test14_out.java
deleted file mode 100644
index ef2438b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test14_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	int i(){
-		int j= 1;
-		return 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test15_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test15_in.java
deleted file mode 100644
index b390bb6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test15_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	int i(){
-		int i= 0, j= 1;
-		return 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test15_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test15_out.java
deleted file mode 100644
index 1e78cd4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test15_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	int i(){
-		int i= 0;
-		return 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test16_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test16_in.java
deleted file mode 100644
index 1e48a39..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test16_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class Test {
-	void m(){
-		Object object = new Integer(2);
-		Integer integer = (Integer) object;
-		int i = integer.intValue();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test16_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test16_out.java
deleted file mode 100644
index 21e3afb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test16_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class Test {
-	void m(){
-		Object object = new Integer(2);
-		int i = ((Integer) object).intValue();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test17_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test17_in.java
deleted file mode 100644
index fd1a767..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test17_in.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class Test {
-  
-  public static final Test FOO = new Test() {
-    public void foo() {
-      int var = 1;
-      int var2 = var;
-    }
-  };
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test17_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test17_out.java
deleted file mode 100644
index fa0b55d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test17_out.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class Test {
-  
-  public static final Test FOO = new Test() {
-    public void foo() {
-      int var2 = 1;
-    }
-  };
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test18_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test18_in.java
deleted file mode 100644
index dd9cf55..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test18_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class Test {
-    public void foo() {
-      int var = 1;
-      int var2 = var;
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test18_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test18_out.java
deleted file mode 100644
index d29449a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test18_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-class Test {
-    public void foo() {
-      int var2 = 1;
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test19_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test19_in.java
deleted file mode 100644
index dd9cf55..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test19_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class Test {
-    public void foo() {
-      int var = 1;
-      int var2 = var;
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test19_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test19_out.java
deleted file mode 100644
index d29449a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test19_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-class Test {
-    public void foo() {
-      int var2 = 1;
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test1_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test1_in.java
deleted file mode 100644
index 1b2881e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test1_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	int m(int i){
-		/*[*/int x= 0;/*]*/
-		return x;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test1_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test1_out.java
deleted file mode 100644
index 2fb0954..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test1_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	int m(int i){
-		/*[*//*]*/
-		return 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test20_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test20_in.java
deleted file mode 100644
index 7caf0a5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test20_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A {
-	void f(boolean init){
-		boolean d= init;
-		if (! d);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test20_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test20_out.java
deleted file mode 100644
index 4ea16eb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test20_out.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A {
-	void f(boolean init){
-		if (! init);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test21_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test21_in.java
deleted file mode 100644
index 9e61a99..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test21_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A {
-	private static void foo(String[] parameters, int j) {
-		int temp1 = parameters.length + j;
-		int temp = temp1;
-		System.out.println(temp);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test21_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test21_out.java
deleted file mode 100644
index 6ac096b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test21_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class A {
-	private static void foo(String[] parameters, int j) {
-		int temp = parameters.length + j;
-		System.out.println(temp);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test22_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test22_in.java
deleted file mode 100644
index dac7ca5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test22_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A {
-	private static void foo(int i, int j) {
-		int temp = 1+2;
-		System.out.println(temp);
-		foo(temp*7, temp);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test22_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test22_out.java
deleted file mode 100644
index 6fec890..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test22_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class A {
-	private static void foo(int i, int j) {
-		System.out.println(1+2);
-		foo((1+2)*7, 1+2);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test23_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test23_in.java
deleted file mode 100644
index 9401d5f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test23_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class A {
-	void f(){
-		String xxxx= "xx";
-		String y= ( xxxx );
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test23_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test23_out.java
deleted file mode 100644
index 20e8527..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test23_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-class A {
-	void f(){
-		String y= ( "xx" );
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test2_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test2_in.java
deleted file mode 100644
index 1b2881e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test2_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	int m(int i){
-		/*[*/int x= 0;/*]*/
-		return x;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test2_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test2_out.java
deleted file mode 100644
index 2fb0954..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test2_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	int m(int i){
-		/*[*//*]*/
-		return 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test3_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test3_in.java
deleted file mode 100644
index 8ceacb6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test3_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	int m(int i){
-		/*[*/int x= 0 + 1;/*]*/
-		return x * x;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test3_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test3_out.java
deleted file mode 100644
index 90c7f83..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test3_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	int m(int i){
-		/*[*//*]*/
-		return (0 + 1) * (0 + 1);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test4_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test4_in.java
deleted file mode 100644
index 52dab3a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test4_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	int m(int i){
-		/*[*/int x= i + 1;/*]*/
-		return x * x + m(m(i));
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test4_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test4_out.java
deleted file mode 100644
index c109f4a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test4_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	int m(int i){
-		/*[*//*]*/
-		return (i + 1) * (i + 1) + m(m(i));
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test5_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test5_in.java
deleted file mode 100644
index 1d2fb80..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test5_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	int m(int i){
-		/*[*/int x= i + 1;/*]*/
-		return x * x + m(m(x));
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test5_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test5_out.java
deleted file mode 100644
index 79b3b85..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test5_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	int m(int i){
-		/*[*//*]*/
-		return (i + 1) * (i + 1) + m(m(i + 1));
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test6_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test6_in.java
deleted file mode 100644
index 99478d2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test6_in.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-class A{
-	int i(){
-		for (;false;){
-			//
-		}
-		//d
-		i();
-		int i= 0;
-		return i;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test6_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test6_out.java
deleted file mode 100644
index cd8a848..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test6_out.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A{
-	int i(){
-		for (;false;){
-			//
-		}
-		//d
-		i();
-		return 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test7_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test7_in.java
deleted file mode 100644
index 8402a2a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test7_in.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-class A{
-	int i(){
-		for (;false;){
-			//
-		}
-		//d
-		i();
-		/*[*/int i= 0;/*]*/
-		return i;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test7_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test7_out.java
deleted file mode 100644
index 9bad2db..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test7_out.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-class A{
-	int i(){
-		for (;false;){
-			//
-		}
-		//d
-		i();
-		/*[*//*]*/
-		return 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test8_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test8_in.java
deleted file mode 100644
index 2fa8abc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test8_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	int i(){
-		int[] a= new int[6];
-		int i= a[9];
-		return i;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test8_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test8_out.java
deleted file mode 100644
index 5766e80..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test8_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	int i(){
-		int[] a= new int[6];
-		return a[9];
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test9_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test9_in.java
deleted file mode 100644
index f2a7ae8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test9_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	int i(){
-		int[] a= new int[6];
-		/*[*/int i= a[9];/*]*/
-		return i;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test9_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test9_out.java
deleted file mode 100644
index 36fe7a4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/canInline/A_test9_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	int i(){
-		int[] a= new int[6];
-		/*[*//*]*/
-		return a[9];
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail0.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail0.java
deleted file mode 100644
index 24454b2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail0.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//compile errors
-package p;
-class A{
-	void m(){
-		/*[*/final int i= 0;/*]*/
-		List l;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail1.java
deleted file mode 100644
index 3d19010..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail1.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//syntax errors
-errorCulprit
-package p;
-class A{
-	void m(){
-		/*[*/final int i= 0;/*]*/
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail10.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail10.java
deleted file mode 100644
index be2d519..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail10.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-	int temp= 0;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail11.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail11.java
deleted file mode 100644
index ff45266..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail11.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package p;
-
-import java.io.File;
-import java.net.MalformedURLException;
-
-class F {
-	public void foo() { 
-		File file= null; 
-		 
-		try { 
-			file.toURL(); 
-		} catch (MalformedURLException e) { 
-		} 
-	} 
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail12.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail12.java
deleted file mode 100644
index 946e712..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail12.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//compile errors
-package p;
-class A{
-	int f;
-	protected void primExecute(int t) {
-		this.toString();
-	}
-
-	if (image != null) {
-		Object loc = null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail13.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail13.java
deleted file mode 100644
index e1b7340..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail13.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A {
-	void f() {
-		for (int i= 0; i < 4;);
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail14.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail14.java
deleted file mode 100644
index 2735618..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail14.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
- void f(A a){
-   A[] arr= {a};
-   arr[0]= null;
- }
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail2.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail2.java
deleted file mode 100644
index 02e5c19..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail2.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//incorrect selection
-package p;
-class A{
-	int m(){
-		/*[*/int i;
-		if (true)
-			i= 0;	/*]*/
-		return 9;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail3.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail3.java
deleted file mode 100644
index d151bdf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail3.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//not initialized
-package p;
-class A{
-	int m(){
-		/*[*/int i;/*]*/
-		if (true)
-			i= 0;
-		return 9;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail4.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail4.java
deleted file mode 100644
index 5b456cc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail4.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//assigned to more than once
-package p;
-class A{
-	int m(){
-		/*[*/int i= 0;/*]*/
-		if (true)
-			i= 0;
-		return 9;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail5.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail5.java
deleted file mode 100644
index bd6b682..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail5.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//assigned to more than once
-package p;
-class A{
-	int m(){
-		/*[*/int i= 0;/*]*/
-		return i++;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail6.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail6.java
deleted file mode 100644
index 4e71012..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail6.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//assigned to more than once
-package p;
-class A{
-	int m(int y){
-		/*[*/int i= 0;/*]*/
-		return y + (i--);
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail7.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail7.java
deleted file mode 100644
index 2c55d50..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail7.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	void m(/*[*/int i/*]*/){
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail8.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail8.java
deleted file mode 100644
index d6e2d82..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail8.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	void m(){
-		try{
-		} catch (/*[*/Exception e/*]*/){
-		}
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail9.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail9.java
deleted file mode 100644
index be2d519..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineTemp/cannotInline/A_testFail9.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-	int temp= 0;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test0/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test0/in/A.java
deleted file mode 100644
index 6873a21..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test0/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	static class Inner{
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test0/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test0/out/A.java
deleted file mode 100644
index 6291b80..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test0/out/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test0/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test0/out/Inner.java
deleted file mode 100644
index 21ee4d8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test0/out/Inner.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class Inner{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test1/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test1/in/A.java
deleted file mode 100644
index 4dedf74..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test1/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	public static class Inner{
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test1/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test1/out/A.java
deleted file mode 100644
index 6291b80..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test1/out/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test1/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test1/out/Inner.java
deleted file mode 100644
index 867d64b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test1/out/Inner.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-public class Inner{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test10/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test10/in/A.java
deleted file mode 100644
index 6c093e1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test10/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A {
-	static int F= 1;
-	static class Inner{
-		void foo() {
-			F= 2;
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test10/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test10/out/A.java
deleted file mode 100644
index c29dfbc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test10/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A {
-	static int F= 1;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test10/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test10/out/Inner.java
deleted file mode 100644
index 4b58e1c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test10/out/Inner.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class Inner{
-	void foo() {
-		A.F= 2;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test11/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test11/in/A.java
deleted file mode 100644
index 920903b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test11/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A {
-	static int F= 1;
-	static class Inner{
-		void foo() {
-			F= 1;
-			A.F= 2;
-			p.A.F= 3;
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test11/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test11/out/A.java
deleted file mode 100644
index c29dfbc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test11/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A {
-	static int F= 1;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test11/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test11/out/Inner.java
deleted file mode 100644
index 57fb3fe..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test11/out/Inner.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class Inner{
-	void foo() {
-		A.F= 1;
-		A.F= 2;
-		A.F= 3;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test12/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test12/in/A.java
deleted file mode 100644
index 9b1d176..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test12/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-class A {
-	static class Inner{
-		void foo() {
-			Inner2 a;
-		}
-	}
-	static class Inner2{
-		static class Inner2Inner{
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test12/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test12/out/A.java
deleted file mode 100644
index a3569f7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test12/out/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A {
-	static class Inner2{
-		static class Inner2Inner{
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test12/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test12/out/Inner.java
deleted file mode 100644
index 136af24..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test12/out/Inner.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class Inner{
-	void foo() {
-		A.Inner2 a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test13/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test13/in/A.java
deleted file mode 100644
index 0acd48f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test13/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-class A {
-	static class Inner{
-		void foo() {
-			Inner2.Inner2Inner a;
-		}
-	}
-	static class Inner2{
-		static class Inner2Inner{
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test13/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test13/out/A.java
deleted file mode 100644
index a3569f7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test13/out/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A {
-	static class Inner2{
-		static class Inner2Inner{
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test13/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test13/out/Inner.java
deleted file mode 100644
index 007df4f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test13/out/Inner.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class Inner{
-	void foo() {
-		A.Inner2.Inner2Inner a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test14/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test14/in/A.java
deleted file mode 100644
index eabae2b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test14/in/A.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package p;
-class A {
-	static class Inner{
-		static void foo() {
-		}
-		static int t= 1;
-	}
-	static void f(){
-		Inner i;
-		A.Inner i2;
-		Inner.foo();
-		Inner.t =  2;
-		A.Inner.foo();
-		A.Inner.t =  2;
-		p.A.Inner.foo();
-		p.A.Inner.t =  2;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test14/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test14/out/A.java
deleted file mode 100644
index 6a2228b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test14/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-class A {
-	static void f(){
-		Inner i;
-		Inner i2;
-		Inner.foo();
-		Inner.t =  2;
-		Inner.foo();
-		Inner.t =  2;
-		p.Inner.foo();
-		p.Inner.t =  2;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test14/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test14/out/Inner.java
deleted file mode 100644
index ce9c712..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test14/out/Inner.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class Inner{
-	static void foo() {
-	}
-	static int t= 1;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test15/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test15/in/A.java
deleted file mode 100644
index fff5b25..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test15/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-public class A {
-	public static class Inner{
-		public static void foo() {
-		}
-		public static int t= 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test15/in/A1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test15/in/A1.java
deleted file mode 100644
index c3994e6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test15/in/A1.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p1;
-import p.A;
-public class A1 {
-	static void f(){
-		A.Inner i;
-		A.Inner.foo();
-		A.Inner.t =  2;
-		p.A.Inner.foo();
-		p.A.Inner.t =  2;
-	}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test15/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test15/out/A.java
deleted file mode 100644
index f6125f6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test15/out/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-public class A {
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test15/out/A1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test15/out/A1.java
deleted file mode 100644
index 270c8dd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test15/out/A1.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p1;
-import p.A;
-import p.Inner;
-public class A1 {
-	static void f(){
-		Inner i;
-		Inner.foo();
-		Inner.t =  2;
-		p.Inner.foo();
-		p.Inner.t =  2;
-	}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test15/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test15/out/Inner.java
deleted file mode 100644
index 2c20149..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test15/out/Inner.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-public class Inner{
-	public static void foo() {
-	}
-	public static int t= 1;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test16/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test16/in/A.java
deleted file mode 100644
index fff5b25..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test16/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-public class A {
-	public static class Inner{
-		public static void foo() {
-		}
-		public static int t= 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test16/in/A1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test16/in/A1.java
deleted file mode 100644
index 15e07a3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test16/in/A1.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p1;
-import p.A;
-public class A1 {
-	static void f(){
-		A.Inner i;
-		A.Inner.foo();
-		A.Inner.t =  2;
-		p.A.Inner.foo();
-		p.A.Inner.t =  2;
-		A a;
-	}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test16/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test16/out/A.java
deleted file mode 100644
index f6125f6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test16/out/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-public class A {
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test16/out/A1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test16/out/A1.java
deleted file mode 100644
index bc06aef..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test16/out/A1.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p1;
-import p.A;
-import p.Inner;
-public class A1 {
-	static void f(){
-		Inner i;
-		Inner.foo();
-		Inner.t =  2;
-		p.Inner.foo();
-		p.Inner.t =  2;
-		A a;
-	}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test16/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test16/out/Inner.java
deleted file mode 100644
index 2c20149..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test16/out/Inner.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-public class Inner{
-	public static void foo() {
-	}
-	public static int t= 1;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test17/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test17/in/A.java
deleted file mode 100644
index 2a955dd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test17/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	static class Inner{
-		static void f(){}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test17/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test17/out/A.java
deleted file mode 100644
index 6291b80..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test17/out/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test17/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test17/out/Inner.java
deleted file mode 100644
index 3688b89..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test17/out/Inner.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class Inner{
-	static void f(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test18/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test18/in/A.java
deleted file mode 100644
index f0ec38f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test18/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-public class A{
-	public static class Inner{
-		public class InnerInner{}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test18/in/A1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test18/in/A1.java
deleted file mode 100644
index 09777cb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test18/in/A1.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p1;
-
-import p.A.Inner;
-import p.A.Inner.InnerInner;
-
-class A1{
-	p.A.Inner a;
-	p.A.Inner.InnerInner a1;
-	Inner a2;
-	Inner.InnerInner a3;
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test18/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test18/out/A.java
deleted file mode 100644
index 52c6073..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test18/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-
-public class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test18/out/A1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test18/out/A1.java
deleted file mode 100644
index 129af43..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test18/out/A1.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p1;
-
-import p.Inner;
-import p.Inner.InnerInner;
-
-class A1{
-	p.Inner a;
-	p.Inner.InnerInner a1;
-	Inner a2;
-	Inner.InnerInner a3;
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test18/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test18/out/Inner.java
deleted file mode 100644
index 12cfc64..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test18/out/Inner.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class Inner{
-	public class InnerInner{}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test19/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test19/in/A.java
deleted file mode 100644
index f0ec38f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test19/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-public class A{
-	public static class Inner{
-		public class InnerInner{}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test19/in/A1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test19/in/A1.java
deleted file mode 100644
index fa9bbd3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test19/in/A1.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p1;
-
-import p.A.*;
-
-class A1{
-	p.A.Inner a;
-	p.A.Inner.InnerInner a1;
-	Inner a2;
-	Inner.InnerInner a3;
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test19/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test19/out/A.java
deleted file mode 100644
index 52c6073..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test19/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-
-public class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test19/out/A1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test19/out/A1.java
deleted file mode 100644
index 0c1b22c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test19/out/A1.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p1;
-
-import p.A.*;
-import p.Inner;
-
-class A1{
-	p.Inner a;
-	p.Inner.InnerInner a1;
-	Inner a2;
-	Inner.InnerInner a3;
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test19/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test19/out/Inner.java
deleted file mode 100644
index 12cfc64..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test19/out/Inner.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class Inner{
-	public class InnerInner{}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test2/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test2/in/A.java
deleted file mode 100644
index f97b6d0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test2/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	private static class Inner{
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test2/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test2/out/A.java
deleted file mode 100644
index 6291b80..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test2/out/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test2/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test2/out/Inner.java
deleted file mode 100644
index 21ee4d8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test2/out/Inner.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class Inner{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test20/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test20/in/A.java
deleted file mode 100644
index f0ec38f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test20/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-public class A{
-	public static class Inner{
-		public class InnerInner{}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test20/in/A1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test20/in/A1.java
deleted file mode 100644
index 978ab54..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test20/in/A1.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p1;
-
-import p.A.*;
-import p.A.Inner.*;
-import p.A.Inner.InnerInner.*;
-
-class A1{
-	p.A.Inner a;
-	p.A.Inner.InnerInner a1;
-	Inner a2;
-	Inner.InnerInner a3;
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test20/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test20/out/A.java
deleted file mode 100644
index 52c6073..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test20/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-
-public class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test20/out/A1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test20/out/A1.java
deleted file mode 100644
index e92e1a4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test20/out/A1.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p1;
-
-import p.Inner;
-import p.A.*;
-import p.Inner.*;
-import p.Inner.InnerInner.*;
-
-class A1{
-	p.Inner a;
-	p.Inner.InnerInner a1;
-	Inner a2;
-	Inner.InnerInner a3;
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test20/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test20/out/Inner.java
deleted file mode 100644
index 12cfc64..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test20/out/Inner.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class Inner{
-	public class InnerInner{}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test21/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test21/in/A.java
deleted file mode 100644
index fb6b413..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test21/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-public class A {
-    static int i= 0;
-    interface Inner{
-        int I= i;
-    }
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test21/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test21/out/A.java
deleted file mode 100644
index 831e943..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test21/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class A {
-    static int i= 0;
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test21/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test21/out/Inner.java
deleted file mode 100644
index 2a485d2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test21/out/Inner.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-interface Inner{
-    int I= A.i;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test22/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test22/in/A.java
deleted file mode 100644
index b75ae8e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test22/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-public class A {
-    static int i= 0;
-    static interface Inner{
-        int I= i;
-    }
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test22/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test22/out/A.java
deleted file mode 100644
index 831e943..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test22/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class A {
-    static int i= 0;
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test22/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test22/out/Inner.java
deleted file mode 100644
index 2a485d2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test22/out/Inner.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-interface Inner{
-    int I= A.i;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test3/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test3/in/A.java
deleted file mode 100644
index 2706e60..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test3/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	static protected class Inner{
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test3/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test3/out/A.java
deleted file mode 100644
index 6291b80..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test3/out/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test3/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test3/out/Inner.java
deleted file mode 100644
index 21ee4d8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test3/out/Inner.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class Inner{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test4/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test4/in/A.java
deleted file mode 100644
index 61c05cb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test4/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	static protected final class Inner{
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test4/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test4/out/A.java
deleted file mode 100644
index 6291b80..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test4/out/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test4/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test4/out/Inner.java
deleted file mode 100644
index fea4077..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test4/out/Inner.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-final class Inner{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test5/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test5/in/A.java
deleted file mode 100644
index c9f122e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test5/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	static protected abstract class Inner{
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test5/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test5/out/A.java
deleted file mode 100644
index 6291b80..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test5/out/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test5/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test5/out/Inner.java
deleted file mode 100644
index 6aab93d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test5/out/Inner.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-abstract class Inner{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test6/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test6/in/A.java
deleted file mode 100644
index de26604..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test6/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	/**
-	 * Inner class javadoc
-	 */
-	static class Inner{
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test6/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test6/out/A.java
deleted file mode 100644
index 6291b80..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test6/out/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test6/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test6/out/Inner.java
deleted file mode 100644
index 2a08594..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test6/out/Inner.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-/**
- * Inner class javadoc
- */
-class Inner{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test7/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test7/in/A.java
deleted file mode 100644
index cf9f36d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test7/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A {
-	static void f(){}
-	static class Inner{
-		void foo(){
-			f();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test7/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test7/out/A.java
deleted file mode 100644
index f2d628f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test7/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A {
-	static void f(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test7/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test7/out/Inner.java
deleted file mode 100644
index 65ee93c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test7/out/Inner.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class Inner{
-	void foo(){
-		A.f();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test8/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test8/in/A.java
deleted file mode 100644
index fb37af6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test8/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A {
-	static void f(){}
-	static class Inner{
-		void f(){
-			f();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test8/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test8/out/A.java
deleted file mode 100644
index f2d628f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test8/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A {
-	static void f(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test8/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test8/out/Inner.java
deleted file mode 100644
index 5d15879..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test8/out/Inner.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class Inner{
-	void f(){
-		f();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test9/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test9/in/A.java
deleted file mode 100644
index 5ba341e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test9/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-import java.util.List;
-
-class A {
-	static class Inner{
-		void foo(List list) {}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test9/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test9/out/A.java
deleted file mode 100644
index 688a6d9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test9/out/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A {
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test9/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test9/out/Inner.java
deleted file mode 100644
index 756b5fd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test9/out/Inner.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-import java.util.List;
-
-class Inner{
-	void foo(List list) {}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/testFail_nonstatic_0/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/testFail_nonstatic_0/in/A.java
deleted file mode 100644
index 642bde8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/testFail_nonstatic_0/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	class Inner{
-		int a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/testFail_nonstatic_1/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/testFail_nonstatic_1/in/A.java
deleted file mode 100644
index b3d961c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/testFail_nonstatic_1/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	class Inner{
-		Inner(int a){
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_0/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_0/in/A.java
deleted file mode 100644
index 1a0b0eb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_0/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	class Inner{
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_0/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_0/out/A.java
deleted file mode 100644
index 6291b80..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_0/out/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_0/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_0/out/Inner.java
deleted file mode 100644
index ca33de5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_0/out/Inner.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class Inner{
-	private A a;
-	Inner(A a) {
-		this.a= a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_1/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_1/in/A.java
deleted file mode 100644
index 62c3edf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_1/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class A{
-	class Inner{
-		void f(){
-		}
-	}
-	void f(){
-		new Inner();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_1/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_1/out/A.java
deleted file mode 100644
index 19908f4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_1/out/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void f(){
-		new Inner(this);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_1/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_1/out/Inner.java
deleted file mode 100644
index 0acaec7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_1/out/Inner.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class Inner{
-	private A a;
-	Inner(A a) {
-		this.a= a;
-	}
-	void f(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_10/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_10/in/A.java
deleted file mode 100644
index e0b6d0f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_10/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A{
-	A a;
-	class Inner {
-	}
-	void f(A a){
-		a.a.a.new Inner();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_10/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_10/out/A.java
deleted file mode 100644
index eb1296d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_10/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class A{
-	A a;
-	void f(A a){
-		new Inner(a.a.a);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_10/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_10/out/Inner.java
deleted file mode 100644
index ed1da79..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_10/out/Inner.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class Inner {
-	private A a;
-	Inner(A a) {
-		this.a= a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_11/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_11/in/A.java
deleted file mode 100644
index dc4e7d8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_11/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A{
-	class Inner {
-		void f(){
-			new Inner();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_11/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_11/out/A.java
deleted file mode 100644
index db0b740..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_11/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_11/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_11/out/Inner.java
deleted file mode 100644
index fab6dcc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_11/out/Inner.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class Inner {
-	private A a;
-	Inner(A a) {
-		this.a= a;
-	}
-	void f(){
-		new Inner(this.a);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_12/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_12/in/A.java
deleted file mode 100644
index c0cba86..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_12/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A{
-	void foo(){
-	}
-	class Inner {
-		void f(){
-			foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_12/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_12/out/A.java
deleted file mode 100644
index 0a7570e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_12/out/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-
-class A{
-	void foo(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_12/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_12/out/Inner.java
deleted file mode 100644
index 0834d7d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_12/out/Inner.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class Inner {
-	private A a;
-	Inner(A a) {
-		this.a= a;
-	}
-	void f(){
-		this.a.foo();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_13/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_13/in/A.java
deleted file mode 100644
index 54b819f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_13/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A{
-	int i;
-	class Inner {
-		void f(){
-			i= 1;
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_13/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_13/out/A.java
deleted file mode 100644
index 0312fb1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_13/out/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-
-class A{
-	int i;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_13/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_13/out/Inner.java
deleted file mode 100644
index ad1504b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_13/out/Inner.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class Inner {
-	private A a;
-	Inner(A a) {
-		this.a= a;
-	}
-	void f(){
-		this.a.i= 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_14/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_14/in/A.java
deleted file mode 100644
index 05c1028..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_14/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A{
-	class X{}
-	class Inner {
-		void f(){
-			X x= new X();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_14/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_14/out/A.java
deleted file mode 100644
index d39ac4f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_14/out/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-
-class A{
-	class X{}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_14/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_14/out/Inner.java
deleted file mode 100644
index 0f4b194..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_14/out/Inner.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class Inner{
-	private A a;
-	Inner(A a) {
-		this.a= a;
-	}
-	void f(){
-		A.X x= this.a.new X();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_15/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_15/in/A.java
deleted file mode 100644
index 389caf8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_15/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A{
-	static void foo(){
-	}
-	class Inner {
-		void f(){
-			foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_15/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_15/out/A.java
deleted file mode 100644
index f1f9373..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_15/out/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-
-class A{
-	static void foo(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_15/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_15/out/Inner.java
deleted file mode 100644
index 5066870..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_15/out/Inner.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class Inner {
-	private A a;
-	Inner(A a) {
-		this.a= a;
-	}
-	void f(){
-		A.foo();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_16/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_16/in/A.java
deleted file mode 100644
index d007001..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_16/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A{
-	static int i;
-	class Inner {
-		void f(){
-			i= 1;
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_16/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_16/out/A.java
deleted file mode 100644
index 4d145ca..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_16/out/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-
-class A{
-	static int i;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_16/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_16/out/Inner.java
deleted file mode 100644
index 07f5233..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_16/out/Inner.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class Inner {
-	private A a;
-	Inner(A a) {
-		this.a= a;
-	}
-	void f(){
-		A.i= 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_17/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_17/in/A.java
deleted file mode 100644
index 472b58e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_17/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A{
-	static class X{}
-	class Inner {
-		void f(){
-			X x= new X();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_17/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_17/out/A.java
deleted file mode 100644
index ffe4df6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_17/out/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-
-class A{
-	static class X{}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_17/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_17/out/Inner.java
deleted file mode 100644
index 6a7c814..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_17/out/Inner.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class Inner{
-	private A a;
-	Inner(A a) {
-		this.a= a;
-	}
-	void f(){
-		A.X x= new A.X();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_18/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_18/in/A.java
deleted file mode 100644
index 653e337..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_18/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A{
-	class Inner {
-		Inner(){
-			this(0);
-		}
-		Inner(int i){
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_18/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_18/out/A.java
deleted file mode 100644
index db0b740..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_18/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_18/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_18/out/Inner.java
deleted file mode 100644
index 163f99b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_18/out/Inner.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class Inner {
-	private A a;
-	Inner(A a){
-		this(a, 0);
-	}
-	Inner(A a, int i){
-		this.a= a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_19/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_19/in/A.java
deleted file mode 100644
index 04e9446..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_19/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A{
-	class Inner{
-		Inner(){
-			this(0);
-		}
-		Inner(int i){
-			super();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_19/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_19/out/A.java
deleted file mode 100644
index db0b740..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_19/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_19/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_19/out/Inner.java
deleted file mode 100644
index 5792e75..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_19/out/Inner.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class Inner{
-	private A a;
-	Inner(A a){
-		this(a, 0);
-	}
-	Inner(A a, int i){
-		super();
-		this.a= a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_2/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_2/in/A.java
deleted file mode 100644
index f3e49b7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_2/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-class A{
-	class Inner{
-		void f(){
-		}
-	}
-	class Inner2{
-		void f(){
-			new Inner();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_2/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_2/out/A.java
deleted file mode 100644
index 472b149..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_2/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	class Inner2{
-		void f(){
-			new Inner(A.this);
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_2/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_2/out/Inner.java
deleted file mode 100644
index 0acaec7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_2/out/Inner.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class Inner{
-	private A a;
-	Inner(A a) {
-		this.a= a;
-	}
-	void f(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_20/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_20/in/A.java
deleted file mode 100644
index 77d3571..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_20/in/A.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package p;
-
-class A{
-	class Inner{
-		Inner(){
-			super();
-		}
-		Inner(int i){
-			this();
-		}
-		Inner(boolean b){
-			this(1);
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_20/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_20/out/A.java
deleted file mode 100644
index db0b740..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_20/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_20/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_20/out/Inner.java
deleted file mode 100644
index 794db48..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_20/out/Inner.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-class Inner{
-	private A a;
-	Inner(A a){
-		super();
-		this.a= a;
-	}
-	Inner(A a, int i){
-		this(a);
-	}
-	Inner(A a, boolean b){
-		this(a, 1);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_21/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_21/in/A.java
deleted file mode 100644
index 3ff800d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_21/in/A.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package p;
-
-class A{
-	class Inner{
-		Inner(){
-		}
-		Inner(int i){
-		}
-	}
-}
-class I2 extends A.Inner{
-	I2(){
-		new A().super();
-	}
-	I2(int i){
-		new A().super(i);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_21/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_21/out/A.java
deleted file mode 100644
index d4c2cb4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_21/out/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A{
-}
-class I2 extends Inner{
-	I2(){
-		super(new A());
-	}
-	I2(int i){
-		super(new A(), i);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_21/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_21/out/Inner.java
deleted file mode 100644
index 9c3ee68..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_21/out/Inner.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class Inner{
-	private A a;
-	Inner(A a){
-		this.a= a;
-	}
-	Inner(A a, int i){
-		this.a= a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_22/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_22/in/A.java
deleted file mode 100644
index 13f2db8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_22/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A{
-	class Inner{
-	}
-}
-class I2 extends A.Inner{
-	I2(){
-		new A().super();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_22/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_22/out/A.java
deleted file mode 100644
index d9e0855..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_22/out/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A{
-}
-class I2 extends Inner{
-	I2(){
-		super(new A());
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_22/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_22/out/Inner.java
deleted file mode 100644
index ca33de5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_22/out/Inner.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class Inner{
-	private A a;
-	Inner(A a) {
-		this.a= a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_23/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_23/in/A.java
deleted file mode 100644
index dd2e1e6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_23/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A{
-	class Inner{
-	}
-}
-class I2 extends A.Inner{
-	I2(){
-		new A().super();
-	}
-}
-class I3 extends I2{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_23/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_23/out/A.java
deleted file mode 100644
index c6275fa..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_23/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A{
-}
-class I2 extends Inner{
-	I2(){
-		super(new A());
-	}
-}
-class I3 extends I2{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_23/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_23/out/Inner.java
deleted file mode 100644
index ca33de5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_23/out/Inner.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class Inner{
-	private A a;
-	Inner(A a) {
-		this.a= a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_24/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_24/in/A.java
deleted file mode 100644
index 2fb8a75..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_24/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-class A{
-	class Inner{
-		Inner(){
-			f();
-		}
-		void f(){
-		}
-	}
-	void f(){
-		new Inner();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_24/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_24/out/A.java
deleted file mode 100644
index 19908f4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_24/out/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void f(){
-		new Inner(this);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_24/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_24/out/Inner.java
deleted file mode 100644
index 0d93aa3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_24/out/Inner.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class Inner{
-	private A a;
-	Inner(A a){
-		f();
-		this.a= a;
-	}
-	void f(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_25/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_25/in/A.java
deleted file mode 100644
index 28ed338..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_25/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A{
-	class Inner{
-		Inner(){
-			super();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_25/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_25/out/A.java
deleted file mode 100644
index db0b740..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_25/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_25/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_25/out/Inner.java
deleted file mode 100644
index 53018cf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_25/out/Inner.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class Inner{
-	private A a;
-	Inner(A a){
-		super();
-		this.a= a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_26/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_26/in/A.java
deleted file mode 100644
index 389caf8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_26/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A{
-	static void foo(){
-	}
-	class Inner {
-		void f(){
-			foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_26/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_26/out/A.java
deleted file mode 100644
index f1f9373..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_26/out/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-
-class A{
-	static void foo(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_26/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_26/out/Inner.java
deleted file mode 100644
index 5066870..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_26/out/Inner.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class Inner {
-	private A a;
-	Inner(A a) {
-		this.a= a;
-	}
-	void f(){
-		A.foo();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_27/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_27/in/A.java
deleted file mode 100644
index 389caf8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_27/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A{
-	static void foo(){
-	}
-	class Inner {
-		void f(){
-			foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_27/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_27/out/A.java
deleted file mode 100644
index f1f9373..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_27/out/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-
-class A{
-	static void foo(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_27/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_27/out/Inner.java
deleted file mode 100644
index 5066870..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_27/out/Inner.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class Inner {
-	private A a;
-	Inner(A a) {
-		this.a= a;
-	}
-	void f(){
-		A.foo();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_28/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_28/in/A.java
deleted file mode 100644
index 1840ce6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_28/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-public class A {
-    public static class OtherInner {}
-    public class Inner extends OtherInner {}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_28/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_28/out/A.java
deleted file mode 100644
index ea9b74c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_28/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class A {
-    public static class OtherInner {}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_28/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_28/out/Inner.java
deleted file mode 100644
index 221af06..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_28/out/Inner.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-public class Inner extends A.OtherInner {
-	private A a;
-	Inner(A a) {
-		this.a = a;
-	}}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_29/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_29/in/A.java
deleted file mode 100644
index ea7e1cf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_29/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-public class A {
-    public class OtherInner {}
-    public class Inner extends OtherInner {}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_29/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_29/out/A.java
deleted file mode 100644
index 3015e0c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_29/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class A {
-    public class OtherInner {}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_29/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_29/out/Inner.java
deleted file mode 100644
index 7d37e18..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_29/out/Inner.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-public class Inner extends A.OtherInner {
-	private A a;
-	Inner(A a) {
-		a.super();
-		this.a = a;
-	}}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_3/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_3/in/A.java
deleted file mode 100644
index 02c0905..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_3/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A{
-	class Inner{
-	}
-	
-	static class Inner2{
-		void f(){
-			new A().new Inner();
-		}	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_3/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_3/out/A.java
deleted file mode 100644
index 479c0de..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_3/out/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A{
-	static class Inner2{
-		void f(){
-			new Inner(new A());
-		}	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_3/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_3/out/Inner.java
deleted file mode 100644
index ca33de5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_3/out/Inner.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class Inner{
-	private A a;
-	Inner(A a) {
-		this.a= a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_30/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_30/in/A.java
deleted file mode 100644
index a03ceae..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_30/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-public class A {
-	class Inner{
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_30/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_30/out/A.java
deleted file mode 100644
index f6125f6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_30/out/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-public class A {
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_30/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_30/out/Inner.java
deleted file mode 100644
index 6165735..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_30/out/Inner.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class Inner{
-	private final A a;
-	Inner(A a) {
-		this.a= a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_4/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_4/in/A.java
deleted file mode 100644
index 7f679a6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_4/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A{
-	class Inner{
-	}
-}
-class B extends A{
-	void f(){
-		new Inner();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_4/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_4/out/A.java
deleted file mode 100644
index 9398780..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_4/out/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A{
-}
-class B extends A{
-	void f(){
-		new Inner(this);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_4/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_4/out/Inner.java
deleted file mode 100644
index ca33de5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_4/out/Inner.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class Inner{
-	private A a;
-	Inner(A a) {
-		this.a= a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_5/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_5/in/A.java
deleted file mode 100644
index c0704fc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_5/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A{
-	class Inner{
-	}
-}
-class B extends A.Inner{
-	B(){
-		new A().super();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_5/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_5/out/A.java
deleted file mode 100644
index b9043e6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_5/out/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A{
-}
-class B extends Inner{
-	B(){
-		super(new A());
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_5/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_5/out/Inner.java
deleted file mode 100644
index ca33de5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_5/out/Inner.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class Inner{
-	private A a;
-	Inner(A a) {
-		this.a= a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_6/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_6/in/A.java
deleted file mode 100644
index 0c91ef8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_6/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class A{
-	class Inner {
-		Inner(int t){
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_6/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_6/out/A.java
deleted file mode 100644
index db0b740..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_6/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_6/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_6/out/Inner.java
deleted file mode 100644
index f104282..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_6/out/Inner.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class Inner {
-	private A a;
-	Inner(A a, int t){
-		this.a= a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_7/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_7/in/A.java
deleted file mode 100644
index ec0d825..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_7/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A{
-	class Inner {
-	}
-	class X extends A{
-		void f(){
-			new Inner();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_7/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_7/out/A.java
deleted file mode 100644
index 43b5118..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_7/out/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A{
-	class X extends A{
-		void f(){
-			new Inner(this);
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_7/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_7/out/Inner.java
deleted file mode 100644
index ed1da79..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_7/out/Inner.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class Inner {
-	private A a;
-	Inner(A a) {
-		this.a= a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_8/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_8/in/A.java
deleted file mode 100644
index d862d48..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_8/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A{
-	class Inner {
-	}
-	void f(){
-		new Inner(){
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_8/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_8/out/A.java
deleted file mode 100644
index 74333cd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_8/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class A{
-	void f(){
-		new Inner(this){
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_8/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_8/out/Inner.java
deleted file mode 100644
index ed1da79..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_8/out/Inner.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class Inner {
-	private A a;
-	Inner(A a) {
-		this.a= a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_9/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_9/in/A.java
deleted file mode 100644
index cadbc90..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_9/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A{
-	class Inner {
-	}
-	void f(){
-		new Inner(){
-			void ft(){
-				new Inner();
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_9/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_9/out/A.java
deleted file mode 100644
index ff9d08b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_9/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A{
-	void f(){
-		new Inner(this){
-			void ft(){
-				new Inner(A.this);
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_9/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_9/out/Inner.java
deleted file mode 100644
index ed1da79..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test_nonstatic_9/out/Inner.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class Inner {
-	private A a;
-	Inner(A a) {
-		this.a= a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test0/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test0/in/A.java
deleted file mode 100644
index ae575ca..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test0/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class A{
-	public static void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test0/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test0/in/B.java
deleted file mode 100644
index fb99727..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test0/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test0/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test0/out/A.java
deleted file mode 100644
index 14904a4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test0/out/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-public class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test0/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test0/out/B.java
deleted file mode 100644
index 472d4e7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test0/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B{
-	public static void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test1/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test1/in/A.java
deleted file mode 100644
index 1f85889..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test1/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-import java.util.List;
-public class A{
-	public static void m(){
-		List l;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test1/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test1/in/B.java
deleted file mode 100644
index fb99727..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test1/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test1/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test1/out/A.java
deleted file mode 100644
index 6ee011b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test1/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-import java.util.List;
-public class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test1/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test1/out/B.java
deleted file mode 100644
index f47a846..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test1/out/B.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-import java.util.List;
-
-class B{
-	public static void m(){
-		List l;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test10/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test10/in/A.java
deleted file mode 100644
index ba9f5b3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test10/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-public class A{
-	public static void m(){
-		A.m1();
-	}
-	public static void m1(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test10/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test10/in/B.java
deleted file mode 100644
index fb99727..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test10/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test10/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test10/out/A.java
deleted file mode 100644
index a3b5f24..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test10/out/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-public class A{
-	public static void m1(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test10/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test10/out/B.java
deleted file mode 100644
index e01a246..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test10/out/B.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class B{
-	public static void m(){
-		A.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test11/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test11/in/A.java
deleted file mode 100644
index 1356107..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test11/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-public class A{
-	public static int F;
-	public static void m(){
-		A.F= 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test11/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test11/in/B.java
deleted file mode 100644
index fb99727..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test11/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test11/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test11/out/A.java
deleted file mode 100644
index 8c30fb6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test11/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class A{
-	public static int F;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test11/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test11/out/B.java
deleted file mode 100644
index 3f9bdf6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test11/out/B.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class B{
-	public static void m(){
-		A.F= 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test12/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test12/in/A.java
deleted file mode 100644
index e59ded1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test12/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-public class A{
-	public static int F;
-	public static void m(){
-		F= 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test12/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test12/in/B.java
deleted file mode 100644
index fb99727..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test12/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test12/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test12/out/A.java
deleted file mode 100644
index 8c30fb6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test12/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class A{
-	public static int F;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test12/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test12/out/B.java
deleted file mode 100644
index 3f9bdf6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test12/out/B.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class B{
-	public static void m(){
-		A.F= 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test13/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test13/in/A.java
deleted file mode 100644
index b2f4a07..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test13/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-public class A{
-	public static class Inner{}
-	public static void m(){
-		new A.Inner();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test13/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test13/in/B.java
deleted file mode 100644
index fb99727..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test13/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test13/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test13/out/A.java
deleted file mode 100644
index 14c9ee2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test13/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class A{
-	public static class Inner{}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test13/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test13/out/B.java
deleted file mode 100644
index 9d51adc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test13/out/B.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-import p.A.Inner;
-
-class B{
-	public static void m(){
-		new A.Inner();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test14/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test14/in/A.java
deleted file mode 100644
index ceaccc9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test14/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-public class A{
-	public static class Inner{}
-	public static void m(){
-		new Inner();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test14/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test14/in/B.java
deleted file mode 100644
index fb99727..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test14/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test14/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test14/out/A.java
deleted file mode 100644
index 14c9ee2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test14/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class A{
-	public static class Inner{}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test14/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test14/out/B.java
deleted file mode 100644
index 9d51adc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test14/out/B.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-import p.A.Inner;
-
-class B{
-	public static void m(){
-		new A.Inner();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test15/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test15/in/A.java
deleted file mode 100644
index 404ca2e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test15/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-public class A{
-	public static int F;
-	public static void m(){
-		F= 0;
-		new A().F= 0;
-		new A().i().F= 0;
-		new A().i().i().F= 0;
-	}
-	A i(){
-		return this;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test15/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test15/in/B.java
deleted file mode 100644
index fb99727..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test15/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test15/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test15/out/A.java
deleted file mode 100644
index 681c18a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test15/out/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-public class A{
-	public static int F;
-	A i(){
-		return this;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test15/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test15/out/B.java
deleted file mode 100644
index 52fa249..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test15/out/B.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class B{
-	public static void m(){
-		A.F= 0;
-		A.F= 0;
-		A.F= 0;
-		A.F= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test16/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test16/in/A.java
deleted file mode 100644
index 806a299..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test16/in/A.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package p;
-public class A{
-	public static A F;
-	public static void m(){
-		F= null;
-		new A().F= null;
-		new A().i().F= null;
-		new A().i().i().F= null;
-		F.F= null;
-		F.F.F= null;
-	}
-	A i(){
-		return this;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test16/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test16/in/B.java
deleted file mode 100644
index fb99727..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test16/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test16/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test16/out/A.java
deleted file mode 100644
index a58c4bd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test16/out/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-public class A{
-	public static A F;
-	A i(){
-		return this;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test16/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test16/out/B.java
deleted file mode 100644
index b39f164..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test16/out/B.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class B{
-	public static void m(){
-		A.F= null;
-		A.F= null;
-		A.F= null;
-		A.F= null;
-		A.F= null;
-		A.F= null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test17/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test17/in/A.java
deleted file mode 100644
index 26178a2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test17/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-public class A{
-	public static class Inner{}
-	public static void m(){
-		Inner[] i;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test17/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test17/in/B.java
deleted file mode 100644
index fb99727..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test17/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test17/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test17/out/A.java
deleted file mode 100644
index 14c9ee2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test17/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class A{
-	public static class Inner{}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test17/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test17/out/B.java
deleted file mode 100644
index b1e73e5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test17/out/B.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-import p.A.Inner;
-
-class B{
-	public static void m(){
-		A.Inner[] i;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test18/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test18/in/A.java
deleted file mode 100644
index cf3588b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test18/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-public class A{
-	public static class Inner{}
-	public static void m(){
-		A.Inner[] i;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test18/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test18/in/B.java
deleted file mode 100644
index fb99727..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test18/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test18/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test18/out/A.java
deleted file mode 100644
index 14c9ee2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test18/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class A{
-	public static class Inner{}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test18/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test18/out/B.java
deleted file mode 100644
index b1e73e5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test18/out/B.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-import p.A.Inner;
-
-class B{
-	public static void m(){
-		A.Inner[] i;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test19/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test19/in/A.java
deleted file mode 100644
index 919c883..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test19/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-public class A{
-	public static class Inner{}
-	public static void m(){
-		Inner[][] i;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test19/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test19/in/B.java
deleted file mode 100644
index fb99727..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test19/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test19/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test19/out/A.java
deleted file mode 100644
index 14c9ee2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test19/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class A{
-	public static class Inner{}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test19/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test19/out/B.java
deleted file mode 100644
index 7ccfeb6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test19/out/B.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-import p.A.Inner;
-
-class B{
-	public static void m(){
-		A.Inner[][] i;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test2/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test2/in/A.java
deleted file mode 100644
index f434210..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test2/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-public class A{
-	public static void m(){
-		B.n();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test2/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test2/in/B.java
deleted file mode 100644
index c543866..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test2/in/B.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class B{
-	public static void n(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test2/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test2/out/A.java
deleted file mode 100644
index 14904a4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test2/out/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-public class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test2/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test2/out/B.java
deleted file mode 100644
index bba8024..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test2/out/B.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class B{
-	public static void n(){
-	}
-
-	public static void m(){
-		B.n();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test20/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test20/in/A.java
deleted file mode 100644
index f803f54..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test20/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-public class A{
-	public static class F{};
-	public static void m(){
-		A.F[] y;
-		F[] ff;
-		F[ ] ff1;
-		F[][] fff;
-		A.F[][] fff1;
-		p.A.F[ ][ ] fff2;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test20/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test20/in/B.java
deleted file mode 100644
index fb99727..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test20/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test20/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test20/out/A.java
deleted file mode 100644
index 5351d39..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test20/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class A{
-	public static class F{};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test20/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test20/out/B.java
deleted file mode 100644
index f912a62..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test20/out/B.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-
-import p.A.F;
-
-class B{
-	public static void m(){
-		A.F[] y;
-		A.F[] ff;
-		A.F[ ] ff1;
-		A.F[][] fff;
-		A.F[][] fff1;
-		p.A.F[ ][ ] fff2;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test21/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test21/in/A.java
deleted file mode 100644
index 51b8561..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test21/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-public class A{
-	private static int F;
-	public static int i= F;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test21/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test21/in/B.java
deleted file mode 100644
index fb99727..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test21/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test21/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test21/out/A.java
deleted file mode 100644
index 14904a4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test21/out/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-public class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test21/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test21/out/B.java
deleted file mode 100644
index 75ff075..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test21/out/B.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class B{
-	private static int F;
-	public static int i= F;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test22/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test22/in/A.java
deleted file mode 100644
index e8c4c79..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test22/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-public class A{
-	public static A i;
-	public static A i2;
-	void f(){
-		A.i.i2= null;
-	}
-	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test22/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test22/in/B.java
deleted file mode 100644
index fb99727..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test22/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test22/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test22/out/A.java
deleted file mode 100644
index 0869e52..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test22/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-public class A{
-	public static A i2;
-	void f(){
-		B.i.i2= null;
-	}
-	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test22/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test22/out/B.java
deleted file mode 100644
index 6cd6fe2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test22/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class B{
-	public static A i;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test23/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test23/in/A.java
deleted file mode 100644
index 5f59bfb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test23/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public interface A{
-	public static final int FRED= 1;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test23/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test23/in/B.java
deleted file mode 100644
index 3b0ee3e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test23/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-interface B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test23/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test23/out/A.java
deleted file mode 100644
index 37ca4f1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test23/out/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-public interface A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test23/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test23/out/B.java
deleted file mode 100644
index e9f7524..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test23/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-interface B{
-	public static final int FRED= 1;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test24/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test24/in/A.java
deleted file mode 100644
index 446ea60..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test24/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public interface A{
-	public final int FRED= 1;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test24/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test24/in/B.java
deleted file mode 100644
index 3b0ee3e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test24/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-interface B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test24/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test24/out/A.java
deleted file mode 100644
index 37ca4f1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test24/out/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-public interface A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test24/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test24/out/B.java
deleted file mode 100644
index 0a3e101..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test24/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-interface B{
-	public final int FRED= 1;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test3/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test3/in/A.java
deleted file mode 100644
index e71937a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test3/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-public class A{
-	public static void m(){}
-	public static void n(){
-		A.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test3/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test3/in/B.java
deleted file mode 100644
index fb99727..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test3/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test3/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test3/out/A.java
deleted file mode 100644
index 54263d6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test3/out/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-public class A{
-	public static void n(){
-		B.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test3/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test3/out/B.java
deleted file mode 100644
index 472d4e7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test3/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B{
-	public static void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test4/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test4/in/A.java
deleted file mode 100644
index 69ed144..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test4/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-public class A{
-	public static void m(){}
-	public void n(){
-		A.m();
-		this.m();
-		p.A.m();
-		m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test4/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test4/in/B.java
deleted file mode 100644
index fb99727..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test4/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test4/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test4/out/A.java
deleted file mode 100644
index 3bac21c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test4/out/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-public class A{
-	public void n(){
-		B.m();
-		B.m();
-		B.m();
-		B.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test4/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test4/out/B.java
deleted file mode 100644
index 472d4e7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test4/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B{
-	public static void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test5/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test5/in/A.java
deleted file mode 100644
index dbefdc6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test5/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-public class A{
-	public static A f;
-	public void n(){
-		f= null;
-		this.f= null;
-		A.f= null;
-		p.A.f= null;
-		f.f= null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test5/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test5/in/B.java
deleted file mode 100644
index fb99727..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test5/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test5/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test5/out/A.java
deleted file mode 100644
index 3d51318..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test5/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-public class A{
-	public void n(){
-		B.f= null;
-		B.f= null;
-		B.f= null;
-		B.f= null;
-		B.f= null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test5/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test5/out/B.java
deleted file mode 100644
index a7e580d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test5/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B{
-	public static A f;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test6/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test6/in/A.java
deleted file mode 100644
index 86a2606..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test6/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-public class A{
-	public static int[] f;
-	public void n(){
-		f[0]= 0;
-		this.f[0]= 0;
-		A.f[0]= 0;
-		p.A.f[0]= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test6/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test6/in/B.java
deleted file mode 100644
index fb99727..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test6/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test6/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test6/out/A.java
deleted file mode 100644
index daf72f6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test6/out/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-public class A{
-	public void n(){
-		B.f[0]= 0;
-		B.f[0]= 0;
-		B.f[0]= 0;
-		B.f[0]= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test6/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test6/out/B.java
deleted file mode 100644
index f1cd917..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test6/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B{
-	public static int[] f;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test7/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test7/in/A.java
deleted file mode 100644
index 353fabb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test7/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-public class A{
-	public static int f;
-	public void n(){
-		f= 0;
-		this.f= 0;
-		A.f= 0;
-		p.A.f= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test7/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test7/in/B.java
deleted file mode 100644
index fb99727..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test7/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test7/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test7/out/A.java
deleted file mode 100644
index 7d6a323..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test7/out/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-public class A{
-	public void n(){
-		B.f= 0;
-		B.f= 0;
-		B.f= 0;
-		B.f= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test7/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test7/out/B.java
deleted file mode 100644
index 5d30342..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test7/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B{
-	public static int f;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test8/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test8/in/A.java
deleted file mode 100644
index 61c4dc0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test8/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-public class A{
-	public static int f;
-	public void n(){
-		f= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test8/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test8/in/B.java
deleted file mode 100644
index ce1c83c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test8/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package r;
-public class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test8/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test8/out/A.java
deleted file mode 100644
index beed3a9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test8/out/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-import r.B;
-
-public class A{
-	public void n(){
-		B.f= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test8/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test8/out/B.java
deleted file mode 100644
index 5423c83..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test8/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package r;
-public class B{
-	public static int f;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test9/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test9/in/A.java
deleted file mode 100644
index bc333f9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test9/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-public class A{
-	public static void m(){
-		m1();
-	}
-	public static void m1(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test9/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test9/in/B.java
deleted file mode 100644
index fb99727..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test9/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test9/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test9/out/A.java
deleted file mode 100644
index a3b5f24..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test9/out/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-public class A{
-	public static void m1(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test9/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test9/out/B.java
deleted file mode 100644
index e01a246..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/test9/out/B.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class B{
-	public static void m(){
-		A.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail0/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail0/in/A.java
deleted file mode 100644
index ae575ca..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail0/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class A{
-	public static void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail0/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail0/in/B.java
deleted file mode 100644
index 7f1fd4c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail0/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class X{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail1/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail1/in/A.java
deleted file mode 100644
index ae575ca..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail1/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class A{
-	public static void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail1/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail1/in/B.java
deleted file mode 100644
index e50e6fa..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail1/in/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B{
-	class X{}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail10/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail10/in/A.java
deleted file mode 100644
index e517b90..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail10/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-public class A{
-	public static void m(){
-		A.F= 0;
-	}
-	private static int F;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail10/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail10/in/B.java
deleted file mode 100644
index fb99727..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail10/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail11/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail11/in/A.java
deleted file mode 100644
index 51b8561..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail11/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-public class A{
-	private static int F;
-	public static int i= F;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail11/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail11/in/B.java
deleted file mode 100644
index fb99727..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail11/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail12/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail12/in/A.java
deleted file mode 100644
index 551ebad..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail12/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-public class A{
-	private static int m(){ return 1;};
-	public static int i= m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail12/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail12/in/B.java
deleted file mode 100644
index fb99727..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail12/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail13/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail13/in/A.java
deleted file mode 100644
index 551ebad..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail13/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-public class A{
-	private static int m(){ return 1;};
-	public static int i= m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail13/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail13/in/B.java
deleted file mode 100644
index fb99727..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail13/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail14/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail14/in/A.java
deleted file mode 100644
index 470a151..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail14/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-public class A{
-	private static int i;
-	public static int F= i;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail14/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail14/in/B.java
deleted file mode 100644
index fb99727..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail14/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail15/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail15/in/A.java
deleted file mode 100644
index 8dd646c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail15/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class A{
-	public static native void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail15/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail15/in/B.java
deleted file mode 100644
index fb99727..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail15/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail16/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail16/in/A.java
deleted file mode 100644
index 61c4dc0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail16/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-public class A{
-	public static int f;
-	public void n(){
-		f= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail16/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail16/in/B.java
deleted file mode 100644
index 8cedd36..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail16/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package r;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail17/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail17/in/A.java
deleted file mode 100644
index ae575ca..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail17/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class A{
-	public static void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail17/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail17/in/B.java
deleted file mode 100644
index 7f1fd4c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail17/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class X{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail18/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail18/in/A.java
deleted file mode 100644
index ae575ca..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail18/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class A{
-	public static void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail18/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail18/in/B.java
deleted file mode 100644
index 7f1fd4c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail18/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class X{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail19/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail19/in/A.java
deleted file mode 100644
index ae575ca..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail19/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class A{
-	public static void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail19/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail19/in/B.java
deleted file mode 100644
index 3b0ee3e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail19/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-interface B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail2/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail2/in/A.java
deleted file mode 100644
index ae575ca..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail2/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class A{
-	public static void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail2/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail2/in/B.java
deleted file mode 100644
index 472d4e7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail2/in/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B{
-	public static void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail20/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail20/in/A.java
deleted file mode 100644
index ae575ca..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail20/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class A{
-	public static void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail20/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail20/in/B.java
deleted file mode 100644
index 3b0ee3e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail20/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-interface B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail21/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail21/in/A.java
deleted file mode 100644
index 77a7078..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail21/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public interface A{
-	static void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail21/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail21/in/B.java
deleted file mode 100644
index fb99727..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail21/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail22/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail22/in/A.java
deleted file mode 100644
index 011eb4e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail22/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class A{
-	public static final int i= 0;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail22/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail22/in/B.java
deleted file mode 100644
index 3b0ee3e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail22/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-interface B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail23/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail23/in/A.java
deleted file mode 100644
index 40a114d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail23/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public interface A{
-	public static final int i= 0;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail23/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail23/in/B.java
deleted file mode 100644
index fb99727..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail23/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail24/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail24/in/A.java
deleted file mode 100644
index 80582ab..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail24/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public interface A{
-	public void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail24/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail24/in/B.java
deleted file mode 100644
index 3b0ee3e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail24/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-interface B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail3/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail3/in/A.java
deleted file mode 100644
index 8b596a5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail3/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class A{
-	public static void m(int i, int j){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail3/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail3/in/B.java
deleted file mode 100644
index a32ef23..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail3/in/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B{
-	void m(int i, int j){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail4/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail4/in/A.java
deleted file mode 100644
index 8b596a5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail4/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class A{
-	public static void m(int i, int j){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail4/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail4/in/B.java
deleted file mode 100644
index f5203f8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail4/in/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B{
-	void m(int i, boolean j){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail5/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail5/in/A.java
deleted file mode 100644
index 8b596a5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail5/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class A{
-	public static void m(int i, int j){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail5/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail5/in/B.java
deleted file mode 100644
index 5ad2158..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail5/in/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B{
-	int m(int i, boolean j){ return 0;}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail6/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail6/in/A.java
deleted file mode 100644
index e329962..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail6/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class A{
-	public static int i;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail6/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail6/in/B.java
deleted file mode 100644
index eb75024..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail6/in/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B{
-	public static int i;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail7/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail7/in/A.java
deleted file mode 100644
index e329962..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail7/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class A{
-	public static int i;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail7/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail7/in/B.java
deleted file mode 100644
index 6956889..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail7/in/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B{
-	int i;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail8/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail8/in/A.java
deleted file mode 100644
index e329962..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail8/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class A{
-	public static int i;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail8/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail8/in/B.java
deleted file mode 100644
index 4587b16..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail8/in/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B{
-	Object i;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail9/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail9/in/A.java
deleted file mode 100644
index c328d05..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail9/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-public class A{
-	public static void m(){
-		A.f();
-	}
-	private static void f(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail9/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail9/in/B.java
deleted file mode 100644
index fb99727..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail9/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test0/in/p1/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test0/in/p1/A.java
deleted file mode 100644
index c289c87..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test0/in/p1/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p1;
-import p2.C;
-public class A{
-	C c;
-	p2.C p2c;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test0/in/p1/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test0/in/p1/B.java
deleted file mode 100644
index deb429c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test0/in/p1/B.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p1;
-import p2.C;
-public class B{
-	C c;
-	p2.C m(C C, A A){
-		return C;
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test0/in/p2/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test0/in/p2/C.java
deleted file mode 100644
index 781f2ec..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test0/in/p2/C.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p2;
-import p1.A;
-import p1.*;
-import p1.B;
-public class C{
-	A a;
-	p1.A p1a;
-	B b;
-	p1.B p1B;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test0/out/p2/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test0/out/p2/A.java
deleted file mode 100644
index 6a6e418..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test0/out/p2/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p2;
-public class A{
-	C c;
-	p2.C p2c;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test0/out/p2/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test0/out/p2/B.java
deleted file mode 100644
index c2b9f89..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test0/out/p2/B.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p2;
-public class B{
-	C c;
-	p2.C m(C C, A A){
-		return C;
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test0/out/p2/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test0/out/p2/C.java
deleted file mode 100644
index 9254329..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test0/out/p2/C.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p2;
-import p1.*;
-public class C{
-	A a;
-	p2.A p1a;
-	B b;
-	p2.B p1B;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test1/in/p1/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test1/in/p1/A.java
deleted file mode 100644
index c289c87..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test1/in/p1/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p1;
-import p2.C;
-public class A{
-	C c;
-	p2.C p2c;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test1/in/p2/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test1/in/p2/C.java
deleted file mode 100644
index effed37..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test1/in/p2/C.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p2;
-import p1.A;
-import p1.*;
-import p3.B;
-public class C{
-	A a;
-	p1.A p1a;
-	B b;
-	p3.B p3B;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test1/in/p3/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test1/in/p3/B.java
deleted file mode 100644
index ae324cb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test1/in/p3/B.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p3;
-import p2.C;
-public class B{
-	C c;
-	p2.C m(C C, p1.A A){
-		return C;
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test1/out/p2/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test1/out/p2/A.java
deleted file mode 100644
index 6a6e418..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test1/out/p2/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p2;
-public class A{
-	C c;
-	p2.C p2c;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test1/out/p2/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test1/out/p2/B.java
deleted file mode 100644
index efb2fb9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test1/out/p2/B.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p2;
-public class B{
-	C c;
-	p2.C m(C C, p2.A A){
-		return C;
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test1/out/p2/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test1/out/p2/C.java
deleted file mode 100644
index 732913c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test1/out/p2/C.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p2;
-import p1.*;
-public class C{
-	A a;
-	p2.A p1a;
-	B b;
-	p2.B p3B;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test2/in/p1/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test2/in/p1/A.java
deleted file mode 100644
index 8203d86..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test2/in/p1/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p1;
-import p2.C;
-public class A{
-	C c;
-	B b;
-	p1.B p1B;
-	p2.C p2c;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test2/in/p1/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test2/in/p1/B.java
deleted file mode 100644
index 8bdc298..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test2/in/p1/B.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p1;
-import p2.C;
-public class B{
-	C c;
-	p1.A p1A;
-	p2.C m(C C, A A){
-		return C;
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test2/in/p2/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test2/in/p2/C.java
deleted file mode 100644
index 781f2ec..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test2/in/p2/C.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p2;
-import p1.A;
-import p1.*;
-import p1.B;
-public class C{
-	A a;
-	p1.A p1a;
-	B b;
-	p1.B p1B;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test2/out/p1/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test2/out/p1/B.java
deleted file mode 100644
index 789a50a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test2/out/p1/B.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p1;
-import p2.*;
-import p2.C;
-public class B{
-	C c;
-	p2.A p1A;
-	p2.C m(C C, A A){
-		return C;
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test2/out/p2/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test2/out/p2/A.java
deleted file mode 100644
index 02251d6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test2/out/p2/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p2;
-import p1.B;
-public class A{
-	C c;
-	B b;
-	p1.B p1B;
-	p2.C p2c;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test2/out/p2/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test2/out/p2/C.java
deleted file mode 100644
index 5df9c3c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test2/out/p2/C.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p2;
-import p1.*;
-import p1.B;
-public class C{
-	A a;
-	p2.A p1a;
-	B b;
-	p1.B p1B;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test0/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test0/in/A.java
deleted file mode 100644
index 62dc967..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test0/in/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test0/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test0/in/B.java
deleted file mode 100644
index fb99727..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test0/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test0/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test0/out/A.java
deleted file mode 100644
index 62dc967..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test0/out/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test0/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test0/out/B.java
deleted file mode 100644
index 4529df8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test0/out/B.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class B{
-	class A{
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test1/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test1/in/A.java
deleted file mode 100644
index 62dc967..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test1/in/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test1/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test1/in/B.java
deleted file mode 100644
index fb99727..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test1/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test1/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test1/out/A.java
deleted file mode 100644
index 8d6eb57..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test1/out/A.java
+++ /dev/null
@@ -1 +0,0 @@
-package p;
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test1/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test1/out/B.java
deleted file mode 100644
index 4529df8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test1/out/B.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class B{
-	class A{
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test2/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test2/in/A.java
deleted file mode 100644
index cace207..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test2/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-	int y;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test2/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test2/in/B.java
deleted file mode 100644
index fb99727..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test2/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test2/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test2/out/A.java
deleted file mode 100644
index 62dc967..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test2/out/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test2/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test2/out/B.java
deleted file mode 100644
index 533a05f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test2/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B{
-	int y;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test3/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test3/in/A.java
deleted file mode 100644
index e023a32..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test3/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-import java.lang.*;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test3/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test3/in/B.java
deleted file mode 100644
index 98313ef..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test3/in/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-import java.awt.*;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test3/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test3/out/A.java
deleted file mode 100644
index e023a32..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test3/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-import java.lang.*;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test3/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test3/out/B.java
deleted file mode 100644
index 2a952d3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test3/out/B.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-import java.awt.*;
-
-import java.lang.*;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test4/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test4/in/A.java
deleted file mode 100644
index 4bbce3a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test4/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	void f(){
-	}
-	
-	void f1(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test4/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test4/in/B.java
deleted file mode 100644
index 7a7c5ac..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test4/in/B.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-import java.awt.*;
-
-import java.lang.*;
-
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test4/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test4/out/A.java
deleted file mode 100644
index 7134157..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test4/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A{
-	void f(){
-	}
-	
-	void f1(){
-	}
-
-	void f(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test4/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test4/out/B.java
deleted file mode 100644
index 7a7c5ac..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PasteSourceReference/test4/out/B.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-import java.awt.*;
-
-import java.lang.*;
-
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test0/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test0/in/A.java
deleted file mode 100644
index 041a067..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test0/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{	
-}
-class B extends A{
-	void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test0/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test0/out/A.java
deleted file mode 100644
index ab7faeb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test0/out/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{	
-	protected void m(){}
-}
-class B extends A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test1/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test1/in/A.java
deleted file mode 100644
index a678d11..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test1/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{	
-	void x(){}
-}
-class B extends A{
-	protected void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test1/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test1/out/A.java
deleted file mode 100644
index 010dfce..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test1/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{	
-	void x(){}
-
-	protected void m(){}
-}
-class B extends A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test10/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test10/in/A.java
deleted file mode 100644
index 180cd5e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test10/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A {
-	protected int j;
-	void a(){}
-}
-
-class B extends A {
-	protected void m() { 
-		super.j++;
-		super.j= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test10/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test10/out/A.java
deleted file mode 100644
index 3f241d7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test10/out/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-
-class A {
-	protected int j;
-	void a(){}
-
-	protected void m() { 
-		this.j++;
-		this.j= 0;
-	}
-}
-
-class B extends A {
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test11/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test11/in/A.java
deleted file mode 100644
index 4a683ee..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test11/in/A.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package p;
-
-class A {
-	int x;
-}
-
-class B extends A {
-	protected void m() { 
-		class T extends A{
-			void t(){
-				super.x++;
-			}
-		};
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test11/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test11/out/A.java
deleted file mode 100644
index c2ea6da..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test11/out/A.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package p;
-
-class A {
-	int x;
-	protected void m() { 
-		class T extends A{
-			void t(){
-				super.x++;
-			}
-		};
-	}
-}
-
-class B extends A {
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test12/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test12/in/A.java
deleted file mode 100644
index 065bec9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test12/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{	
-	void x(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test12/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test12/in/B.java
deleted file mode 100644
index 4b081da..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test12/in/B.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-import java.io.IOException;
-class B extends A{
-	private void m() throws IOException{
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test12/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test12/out/A.java
deleted file mode 100644
index 3d4015a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test12/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-import java.io.IOException;
-
-class A{	
-	void x(){}
-
-	protected void m() throws IOException{
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test12/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test12/out/B.java
deleted file mode 100644
index 3a04ba7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test12/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-import java.io.IOException;
-class B extends A{
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test13/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test13/in/A.java
deleted file mode 100644
index ac22e50..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test13/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A {
-}
-
-class B extends A {
-	protected void m() { 
-		new B();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test13/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test13/out/A.java
deleted file mode 100644
index bb3698f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test13/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A {
-	protected void m() { 
-		new B();
-	}
-}
-
-class B extends A {
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test14/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test14/in/A.java
deleted file mode 100644
index d98c9e0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test14/in/A.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package p;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class A {
-void g(){
-	g();
-	}
-}
-class B extends A{
-	protected void m(){
-		List l= new ArrayList();
-		l.size();
-	}	
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test14/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test14/out/A.java
deleted file mode 100644
index 14b21b7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test14/out/A.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package p;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class A {
-void g(){
-	g();
-	}
-
-protected void m(){
-	List l= new ArrayList();
-	l.size();
-}	
-}
-class B extends A{
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test15/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test15/in/A.java
deleted file mode 100644
index 9ddf60c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test15/in/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class A {
-}
-class B extends A{
-	public void f(){}
-	void m(){
-		B b= new B();
-		b.f();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test15/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test15/out/A.java
deleted file mode 100644
index 82595fe..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test15/out/A.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package p;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class A {
-	protected void m(){
-		B b= new B();
-		b.f();
-	}
-
-}
-class B extends A{
-	public void f(){}
-	}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test16/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test16/in/A.java
deleted file mode 100644
index 571eeed..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test16/in/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class A {
-}
-class B extends A{
-	public int j= 0;
-	void m(){
-		B b= new B();
-		b.j= 0;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test16/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test16/out/A.java
deleted file mode 100644
index 4807b3b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test16/out/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class A {
-	void m(){
-		B b= new B();
-		b.j= 0;
-	}
-}
-class B extends A{
-	public int j= 0;
-	}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test17/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test17/in/A.java
deleted file mode 100644
index 1f2875c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test17/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A {
-}
-
-class B extends A {
-	void m() { 
-		int i= B.ss();
-	}	
-	public static int ss() { 
-		return 9;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test17/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test17/out/A.java
deleted file mode 100644
index 61cb3bd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test17/out/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-public class A {
-	protected void m() { 
-		int i= B.ss();
-	}	
-}
-class B extends A{
-	public static int ss() { 
-		return 9;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test18/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test18/in/A.java
deleted file mode 100644
index 35bf67f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test18/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A {
-}
-
-class B extends A {
-	void m() { 
-		int i= B.ss;
-	}	
-	public static int ss= 8;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test18/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test18/out/A.java
deleted file mode 100644
index f321e72..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test18/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-public class A {
-	protected void m() { 
-		int i= B.ss;
-	}	
-}
-class B extends A{
-	public static int ss= 8;
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test19/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test19/in/A.java
deleted file mode 100644
index 85e4c69..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test19/in/A.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package p;
-
-class A {
-    void m() {
-        //implementation
-    }
-}
-
-class C extends A {
-}
-
-class B extends C {
-	void m() {
-		super.m();
-		//further implementation
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test19/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test19/out/A.java
deleted file mode 100644
index e126b2f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test19/out/A.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package p;
-
-class A {
-    void m() {
-        //implementation
-    }
-}
-
-class C extends A {
-	protected void m() {
-		super.m();
-		//further implementation
-	}
-}
-
-class B extends C {
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test2/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test2/in/A.java
deleted file mode 100644
index 7c09b1f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test2/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{	
-	void x(){}
-}
-class B extends A{
-	protected void mmm(){}
-	protected void n(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test2/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test2/out/A.java
deleted file mode 100644
index 7d6aed5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test2/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class A{	
-	void x(){}
-
-	protected void mmm(){}
-
-	protected void n(){}
-}
-class B extends A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test3/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test3/in/A.java
deleted file mode 100644
index 6cce546..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test3/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-class A{	
-	void x(){}
-}
-class B extends A{
-	protected void mmm(){}
-	protected void n(){}
-}
-class C extends A{
-	protected void mmm(){}
-	protected void n(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test3/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test3/out/A.java
deleted file mode 100644
index eb21a6a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test3/out/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-class A{	
-	void x(){}
-
-	protected void mmm(){}
-
-	protected void n(){}
-}
-class B extends A{
-}
-class C extends A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test4/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test4/in/A.java
deleted file mode 100644
index 065bec9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test4/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{	
-	void x(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test4/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test4/in/B.java
deleted file mode 100644
index 6d9a716..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test4/in/B.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-import java.util.List;
-class B extends A{
-	protected void m(List l){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test4/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test4/out/A.java
deleted file mode 100644
index ddf7906..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test4/out/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-import java.util.List;
-
-class A{	
-	void x(){}
-
-	protected void m(List l){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test4/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test4/out/B.java
deleted file mode 100644
index 5e7bb11..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test4/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-import java.util.List;
-class B extends A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test5/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test5/in/A.java
deleted file mode 100644
index 065bec9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test5/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{	
-	void x(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test5/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test5/in/B.java
deleted file mode 100644
index 1124d96..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test5/in/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B extends A{
-	protected void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test5/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test5/out/A.java
deleted file mode 100644
index a3f8b38..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test5/out/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{	
-	void x(){}
-
-	protected void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test5/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test5/out/B.java
deleted file mode 100644
index ce146be..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test5/out/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B extends A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test6/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test6/in/A.java
deleted file mode 100644
index 4d88e03..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test6/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A {
-	int x;
-}
-
-class B extends A {
-	protected void m() { 
-		super.x++;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test6/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test6/out/A.java
deleted file mode 100644
index b60cbe5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test6/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A {
-	int x;
-	protected void m() { 
-		this.x++;
-	}
-}
-
-class B extends A {
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test7/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test7/in/A.java
deleted file mode 100644
index de2a82f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test7/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A {
-	void a(A a){}
-}
-
-class B extends A {
-	protected void m() { 
-		a(this);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test7/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test7/out/A.java
deleted file mode 100644
index 31d68e8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test7/out/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A {
-	void a(A a){}
-
-	protected void m() { 
-		a(this);
-	}
-}
-
-class B extends A {
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test8/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test8/in/A.java
deleted file mode 100644
index fde7237..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test8/in/A.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package p;
-
-class A {
-	int x;
-}
-
-class B extends A {
-	public void m() { 
-		new B(){
-			void f(){
-				super.x++;
-			}
-		};
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test8/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test8/out/A.java
deleted file mode 100644
index 5002b8e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test8/out/A.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package p;
-
-class A {
-	int x;
-	public void m() { 
-		new B(){
-			void f(){
-				super.x++;
-			}
-		};
-	}
-}
-
-class B extends A {
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test9/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test9/in/A.java
deleted file mode 100644
index 9d2963f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test9/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A {
-	void a(){}
-}
-
-class B extends A {
-	public void m() { 
-		super.a();
-		super.a();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test9/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test9/out/A.java
deleted file mode 100644
index 7ccfca4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/test9/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A {
-	void a(){}
-
-	public void m() { 
-		this.a();
-		this.a();
-	}
-}
-
-class B extends A {
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail0/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail0/in/A.java
deleted file mode 100644
index 23fadf3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail0/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A {
-	int x;
-}
-
-class B extends A{
-	int x;
-	void m() { x++; }
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail1/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail1/in/A.java
deleted file mode 100644
index b382d6f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail1/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A {
-	void a(A a){}
-	void a(B b){}
-}
-
-class B extends A {
-	void m() { 
-		a(this);
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail10/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail10/in/A.java
deleted file mode 100644
index 9e3b26c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail10/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class B extends A {
-	private int a;
-	void m() { 
-		a++;
-	}	
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail10/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail10/in/B.java
deleted file mode 100644
index df913df..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail10/in/B.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class B extends A {
-	int a;
-	void m() { 
-		a++;
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail11/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail11/in/A.java
deleted file mode 100644
index 8b7d8d5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail11/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-
-class A {
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail11/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail11/in/B.java
deleted file mode 100644
index 75a13a0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail11/in/B.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class B extends A {
-	class P{};
-	void m() { 
-		P p= new P();
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail12/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail12/in/A.java
deleted file mode 100644
index 33bf30b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail12/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-
-class A {
-	void a(A a){}
-	void a(B b){}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail12/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail12/in/B.java
deleted file mode 100644
index 9412a56..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail12/in/B.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-class B extends A {
-	void m() { 
-		a(this);
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail13/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail13/in/A.java
deleted file mode 100644
index 9d6c2c9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail13/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class A {
-}
-class B extends A{
-	public void f(){}
-	void m(){
-		f();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail14/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail14/in/A.java
deleted file mode 100644
index bdee4cc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail14/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class Bar {
-}
-
-public class A extends Bar {
-	private static class Quux {}
-	public void m() {}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail2/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail2/in/A.java
deleted file mode 100644
index 6a2f9f2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail2/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A {
-}
-
-class B extends A {
-	void m() { 
-		a();
-	}
-	private void a(){}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail3/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail3/in/A.java
deleted file mode 100644
index fbcea3a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail3/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A {
-}
-
-class B extends A {
-	private int a;
-	void m() { 
-		a++;
-	}	
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail4/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail4/in/A.java
deleted file mode 100644
index 56e7c9f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail4/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A {
-}
-
-class B extends A {
-	private class P{};
-	void m() { 
-		P p= new P();
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail5/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail5/in/A.java
deleted file mode 100644
index aed7a46..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail5/in/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-
-class A {
-}
-
-class B extends A {
-	void m() { 
-	}	
-}
-
-class C extends A {
-	void m() { 
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail6/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail6/in/A.java
deleted file mode 100644
index 8b7d8d5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail6/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-
-class A {
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail6/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail6/in/B.java
deleted file mode 100644
index 658755a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail6/in/B.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class B extends A {
-	void m() { 
-		a();
-	}
-	private void a(){}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail7/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail7/in/A.java
deleted file mode 100644
index 9e3b26c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail7/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class B extends A {
-	private int a;
-	void m() { 
-		a++;
-	}	
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail7/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail7/in/B.java
deleted file mode 100644
index c9cedc1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail7/in/B.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class B extends A {
-	private int a;
-	void m() { 
-		a++;
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail8/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail8/in/A.java
deleted file mode 100644
index 8b7d8d5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail8/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-
-class A {
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail8/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail8/in/B.java
deleted file mode 100644
index f2f83c4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail8/in/B.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class B extends A {
-	private class P{};
-	void m() { 
-		P p= new P();
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail9/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail9/in/A.java
deleted file mode 100644
index 8b7d8d5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail9/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-
-class A {
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail9/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail9/in/B.java
deleted file mode 100644
index 81440e6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFail9/in/B.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class B extends A {
-	void m() { 
-		a();
-	}
-	void a(){}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFailTemplate/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFailTemplate/in/A.java
deleted file mode 100644
index ff4381d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFailTemplate/in/A.java
+++ /dev/null
@@ -1 +0,0 @@
-package p;
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testField0/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testField0/in/A.java
deleted file mode 100644
index e5ad4e2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testField0/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{	
-}
-class B extends A{
-	int i;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testField0/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testField0/out/A.java
deleted file mode 100644
index 0ebb33e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testField0/out/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{	
-	protected int i;
-}
-class B extends A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldFail0/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldFail0/in/A.java
deleted file mode 100644
index 924c59a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldFail0/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A {
-	int x;	
-}
-
-class B extends A{
-	int x;
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldFail1/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldFail1/in/A.java
deleted file mode 100644
index f3a8c65..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldFail1/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A {
-}
-
-class B extends A{
-	int x;
-}
-class C extends A{
-	boolean x;
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod0/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod0/in/A.java
deleted file mode 100644
index eb9e709..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod0/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A {
-}
-
-class B extends A {
-	void m() { 
-		int i= f;
-	}	
-	int f;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod0/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod0/out/A.java
deleted file mode 100644
index ade0f1b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldMethod0/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A {
-	protected void m() { 
-		int i= f;
-	}	
-	protected int f;
-}
-
-class B extends A {
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testTemplate/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testTemplate/in/A.java
deleted file mode 100644
index b23b2d9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testTemplate/in/A.java
+++ /dev/null
@@ -1 +0,0 @@
-package p;
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testTemplate/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testTemplate/out/A.java
deleted file mode 100644
index b23b2d9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testTemplate/out/A.java
+++ /dev/null
@@ -1 +0,0 @@
-package p;
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RefactoringScanner/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RefactoringScanner/A.java
deleted file mode 100644
index 2fb8d0a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RefactoringScanner/A.java
+++ /dev/null
@@ -1,20 +0,0 @@
-class A{
-	/**
-	 * TestPattern
-	 * 	 TestPattern
-	 */
-	void f(){
-	}
-	
-	/*
-	 * TestPattern
-	 * 
-	 * 	TestPattern
-	 */
-	void f1(){
-		f1();//TestPattern //org.eclipse.TestPattern
-		String g= "TestPattern";
-		String g2= "org.eclipse.TestPattern";
-	}
-	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RefactoringScanner/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RefactoringScanner/B.java
deleted file mode 100644
index 5e79e3b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RefactoringScanner/B.java
+++ /dev/null
@@ -1,21 +0,0 @@
-class B{
-	/**
-	 * TestTestPattern
-	 * 	 TestPattern
-	 */
-	void f(){
-	}
-	
-	/*
-	 * TestTestPattern
-	 * 
-	 * 	TestPattern
-	 */
-	void f1(){
-		f1();//TestPattern //org.eclipse.TestPattern
-		String g= "TestPattern";//TestTestPattern
-		String g2= "org.eclipse.TestPattern";
-		String g3= "org.eclipse.TestPatternMatching";
-	}
-	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test0/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test0/in/A.java
deleted file mode 100644
index b350409..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test0/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//renaming I.m to k
-package p;
-class A{
-	public void m(){};
-} 
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test0/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test0/out/A.java
deleted file mode 100644
index fcfc86f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test0/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//renaming I.m to k
-package p;
-class A{
-	public void m(){};
-} 
-interface I {
-	void k();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test1/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test1/in/A.java
deleted file mode 100644
index 1ef6f4d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test1/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//renaming I.m to k
-package p;
-class A implements I{
-	public void m(){};
-} 
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test1/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test1/out/A.java
deleted file mode 100644
index e34858d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test1/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//renaming I.m to k
-package p;
-class A implements I{
-	public void k(){};
-} 
-interface I {
-	void k();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test10/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test10/in/A.java
deleted file mode 100644
index 4880ef7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test10/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-interface I{
-void m();
-}
-interface I2 extends I{
-}
-interface I3 extends I2{
-void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test10/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test10/out/A.java
deleted file mode 100644
index bdfa91e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test10/out/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-interface I{
-void k();
-}
-interface I2 extends I{
-}
-interface I3 extends I2{
-void k();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test11/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test11/in/A.java
deleted file mode 100644
index 275bd81..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test11/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//renaming I.m to k
-package p;
-interface I{
-void m();
-}
-interface I2{
-void m();
-}
-interface I3 extends I, I2{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test11/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test11/out/A.java
deleted file mode 100644
index 9c5c52b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test11/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//renaming I.m to k
-package p;
-interface I{
-void k();
-}
-interface I2{
-void k();
-}
-interface I3 extends I, I2{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test12/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test12/in/A.java
deleted file mode 100644
index fb2dbbf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test12/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//renaming I.m to k
-package p;
-interface I{
-void m();
-}
-interface I2{
-void m();
-}
-interface I3 extends I, I2{
-void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test12/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test12/out/A.java
deleted file mode 100644
index 70a291f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test12/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//renaming I.m to k
-package p;
-interface I{
-void k();
-}
-interface I2{
-void k();
-}
-interface I3 extends I, I2{
-void k();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test14/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test14/in/A.java
deleted file mode 100644
index 6440b68..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test14/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//renaming I.m to k
-package p;
-interface I{
-	void m();
-}
-interface I1 extends I{
-}
-interface I2 extends I1{
-	void m();
-
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test14/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test14/out/A.java
deleted file mode 100644
index 3cd2392..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test14/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//renaming I.m to k
-package p;
-interface I{
-	void k();
-}
-interface I1 extends I{
-}
-interface I2 extends I1{
-	void k();
-
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test15/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test15/in/A.java
deleted file mode 100644
index a32d285..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test15/in/A.java
+++ /dev/null
@@ -1,15 +0,0 @@
-//renaming I.m to k
-package p;
-interface I{
-	void m();
-}
-interface J{
-	void m();
-}
-interface I1 extends I{
-}
-interface J1 extends J{
-}
-interface I2 extends I1, J1{
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test15/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test15/out/A.java
deleted file mode 100644
index 25c1a19..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test15/out/A.java
+++ /dev/null
@@ -1,15 +0,0 @@
-//renaming I.m to k
-package p;
-interface I{
-	void k();
-}
-interface J{
-	void k();
-}
-interface I1 extends I{
-}
-interface J1 extends J{
-}
-interface I2 extends I1, J1{
-	void k();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test16/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test16/in/A.java
deleted file mode 100644
index 32d0d0d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test16/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//renaming I.m to k
-package p;
-interface I{
-	void m();
-}
-interface J{
-	void m();
-}
-class C implements I, J{
-	public void m(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test16/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test16/out/A.java
deleted file mode 100644
index a98d2fe..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test16/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//renaming I.m to k
-package p;
-interface I{
-	void k();
-}
-interface J{
-	void k();
-}
-class C implements I, J{
-	public void k(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test17/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test17/in/A.java
deleted file mode 100644
index d8b4757..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test17/in/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-//renaming I.m to k
-package p;
-interface I{
-	void m();
-}
-interface J{
-	void m();
-}
-class A{
-	public void m(){};
-}
-class C extends A implements I, J{
-	public void m(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test17/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test17/out/A.java
deleted file mode 100644
index dc8dc48..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test17/out/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-//renaming I.m to k
-package p;
-interface I{
-	void k();
-}
-interface J{
-	void k();
-}
-class A{
-	public void k(){};
-}
-class C extends A implements I, J{
-	public void k(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test18/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test18/in/A.java
deleted file mode 100644
index 75b5aa0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test18/in/A.java
+++ /dev/null
@@ -1,18 +0,0 @@
-//renaming I.m to k
-package p;
-interface I {
-	void m();
-}
-interface J{
-	void m();
-}
-interface J2 extends J{
-	void m();
-}
-
-class A{
-	public void m(){}
-}
-class C extends A implements I, J{
-	public void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test18/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test18/out/A.java
deleted file mode 100644
index 7f42185..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test18/out/A.java
+++ /dev/null
@@ -1,18 +0,0 @@
-//renaming I.m to k
-package p;
-interface I {
-	void k();
-}
-interface J{
-	void k();
-}
-interface J2 extends J{
-	void k();
-}
-
-class A{
-	public void k(){}
-}
-class C extends A implements I, J{
-	public void k(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test19/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test19/in/A.java
deleted file mode 100644
index 057ee69..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test19/in/A.java
+++ /dev/null
@@ -1,18 +0,0 @@
-//renaming I.m to k
-package p;
-interface I {
-	void m();
-}
-interface J{
-	void m();
-}
-interface J2 extends J{
-	void m();
-}
-
-class A{
-	private void m(){}
-}
-class C extends A implements I, J{
-	public void m(){}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test19/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test19/out/A.java
deleted file mode 100644
index fca3cb3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test19/out/A.java
+++ /dev/null
@@ -1,18 +0,0 @@
-//renaming I.m to k
-package p;
-interface I {
-	void k();
-}
-interface J{
-	void k();
-}
-interface J2 extends J{
-	void k();
-}
-
-class A{
-	private void m(){}
-}
-class C extends A implements I, J{
-	public void k(){}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test2/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test2/in/A.java
deleted file mode 100644
index 0211b7e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test2/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//renaming I.m to k
-package p;
-class A implements I{
-	public void m(){};
-	public void m(int y){};
-} 
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test2/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test2/out/A.java
deleted file mode 100644
index 806e8b1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test2/out/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//renaming I.m to k
-package p;
-class A implements I{
-	public void k(){};
-	public void m(int y){};
-} 
-interface I {
-	void k();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test20/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test20/in/A.java
deleted file mode 100644
index 4606b91..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test20/in/A.java
+++ /dev/null
@@ -1,17 +0,0 @@
-//renaming I.m to k
-package p;
-interface I {
-	void m();
-}
-interface J{
-	void m();
-}
-interface J2 extends J{
-	void m();
-}
-
-class A{
-	public void m(){}
-}
-class C extends A implements I, J{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test20/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test20/out/A.java
deleted file mode 100644
index 0179740..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test20/out/A.java
+++ /dev/null
@@ -1,17 +0,0 @@
-//renaming I.m to k
-package p;
-interface I {
-	void k();
-}
-interface J{
-	void k();
-}
-interface J2 extends J{
-	void k();
-}
-
-class A{
-	public void k(){}
-}
-class C extends A implements I, J{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test21/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test21/in/A.java
deleted file mode 100644
index 6637d92..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test21/in/A.java
+++ /dev/null
@@ -1,39 +0,0 @@
-//renaming I.m to k
-package p;
-interface I {
-	void m();
-}
-interface J{
-	void m();
-}
-interface J2 extends J{
-	void m();
-}
-
-class A{
-	public void m(){};
-}
-class C extends A implements I, J{
-	public void m(){};
-}
-class Test{
-	void k(){
-		I i= new C();
-		i.m();
-		I ii= new I(){
-			public void m(){}
-		};
-		ii.m();
-		J j= new C();
-		j.m();
-		J jj= new J(){
-			public void m(){}
-		};
-		jj.m();
-		A a= new C();
-		((I)a).m();
-		((J)a).m();
-		((C)a).m();
-		a.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test21/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test21/out/A.java
deleted file mode 100644
index d8ecabe..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test21/out/A.java
+++ /dev/null
@@ -1,39 +0,0 @@
-//renaming I.m to k
-package p;
-interface I {
-	void k();
-}
-interface J{
-	void k();
-}
-interface J2 extends J{
-	void k();
-}
-
-class A{
-	public void k(){};
-}
-class C extends A implements I, J{
-	public void k(){};
-}
-class Test{
-	void k(){
-		I i= new C();
-		i.k();
-		I ii= new I(){
-			public void k(){}
-		};
-		ii.k();
-		J j= new C();
-		j.k();
-		J jj= new J(){
-			public void k(){}
-		};
-		jj.k();
-		A a= new C();
-		((I)a).k();
-		((J)a).k();
-		((C)a).k();
-		a.k();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test22/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test22/in/A.java
deleted file mode 100644
index bb8601f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test22/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-interface I{
-void m();
-}
-interface I2{
-void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test22/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test22/out/A.java
deleted file mode 100644
index 9da5d69..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test22/out/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-interface I{
-void k();
-}
-interface I2{
-void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test24/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test24/in/A.java
deleted file mode 100644
index 27496f9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test24/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-interface J{
-}
-interface I extends J{
-void m();
-}
-interface I1 extends J{
-void m();
-}
-interface K extends I, I1{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test24/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test24/out/A.java
deleted file mode 100644
index 0a0a465..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test24/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-interface J{
-}
-interface I extends J{
-void k();
-}
-interface I1 extends J{
-void k();
-}
-interface K extends I, I1{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test25/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test25/in/A.java
deleted file mode 100644
index ccef3b0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test25/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-interface J{
-}
-interface I extends J{
-void m();
-}
-interface I1 extends J{
-void m();
-}
-class C implements I, I1{
-public void m(){}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test25/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test25/out/A.java
deleted file mode 100644
index a27964f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test25/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-interface J{
-}
-interface I extends J{
-void k();
-}
-interface I1 extends J{
-void k();
-}
-class C implements I, I1{
-public void k(){}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test26/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test26/in/A.java
deleted file mode 100644
index 6b63346..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test26/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-interface I{
-void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test26/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test26/out/A.java
deleted file mode 100644
index d3b3476..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test26/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-interface I{
-void k();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test27/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test27/in/A.java
deleted file mode 100644
index 9752fe0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test27/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-interface I{
-void m();
-}
-class A{
-public void m(){};
-}
-class B1 extends A{
-public void m(){};
-}
-class B2 extends A implements I{
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test27/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test27/out/A.java
deleted file mode 100644
index b3b2478..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test27/out/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-interface I{
-void k();
-}
-class A{
-public void k(){};
-}
-class B1 extends A{
-public void k(){};
-}
-class B2 extends A implements I{
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test28/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test28/in/A.java
deleted file mode 100644
index 82ab659..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test28/in/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-interface I{
-void m();
-}
-class A{
-public void m(){};
-}
-class B1 extends A implements J{
-}
-class B2 extends A implements I{
-}
-interface J{
-void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test28/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test28/out/A.java
deleted file mode 100644
index 9104fdc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test28/out/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-interface I{
-void k();
-}
-class A{
-public void k(){};
-}
-class B1 extends A implements J{
-}
-class B2 extends A implements I{
-}
-interface J{
-void k();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test29/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test29/in/A.java
deleted file mode 100644
index e1fd825..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test29/in/A.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package p;
-interface I{
-void m();
-}
-class A{
-public void m(){};
-}
-class B1 extends A implements J{
-}
-class B2 extends A implements I{
-}
-interface J{
-void m();
-}
-class C implements J{
-public void m(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test29/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test29/out/A.java
deleted file mode 100644
index c9b5575..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test29/out/A.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package p;
-interface I{
-void k();
-}
-class A{
-public void k(){};
-}
-class B1 extends A implements J{
-}
-class B2 extends A implements I{
-}
-interface J{
-void k();
-}
-class C implements J{
-public void k(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test3/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test3/in/A.java
deleted file mode 100644
index 4dcd03a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test3/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//renaming I.m to k
-package p;
-class B {
-	public void m(){};
-} 
-class A extends B implements I{
-} 
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test3/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test3/out/A.java
deleted file mode 100644
index 240933e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test3/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//renaming I.m to k
-package p;
-class B {
-	public void k(){};
-} 
-class A extends B implements I{
-} 
-interface I {
-	void k();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test30/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test30/in/A.java
deleted file mode 100644
index bfa4f7f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test30/in/A.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package p;
-interface I{
-void m();
-}
-class A implements I, J{
-public void m(){};
-}
-interface J{
-void m();
-}
-class B implements J, K{
-public void m(){};
-}
-interface K{
-void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test30/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test30/out/A.java
deleted file mode 100644
index 5f224c0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test30/out/A.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package p;
-interface I{
-void k();
-}
-class A implements I, J{
-public void k(){};
-}
-interface J{
-void k();
-}
-class B implements J, K{
-public void k(){};
-}
-interface K{
-void k();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test31/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test31/in/A.java
deleted file mode 100644
index 0786e6f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test31/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-interface I{
-void m();
-}
-class T{
-	void m(){
-		class X implements I{
-			public void m(){}
-		};
-		X x= new X();
-		x.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test31/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test31/out/A.java
deleted file mode 100644
index 6730892..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test31/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-interface I{
-void k();
-}
-class T{
-	void m(){
-		class X implements I{
-			public void k(){}
-		};
-		X x= new X();
-		x.k();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test32/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test32/in/A.java
deleted file mode 100644
index 4f67f9b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test32/in/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-interface I{
-void m();
-}
-class T implements I{
-	public void m(){
-		class X implements I{
-			public void m(){}
-		};
-		X x= new X();
-		x.m();
-		m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test32/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test32/out/A.java
deleted file mode 100644
index c1f58ed..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test32/out/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-interface I{
-void k();
-}
-class T implements I{
-	public void k(){
-		class X implements I{
-			public void k(){}
-		};
-		X x= new X();
-		x.k();
-		k();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test33/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test33/in/A.java
deleted file mode 100644
index 2aedcc3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test33/in/A.java
+++ /dev/null
@@ -1,23 +0,0 @@
-//renaming I.m to k
-package p;
-interface I{
-void m();
-}
-class A1 implements I, I1{
-public void m(){}
-}
-interface I1{
-void m();
-}
-class A2 implements I1, I2{
-public void m(){}
-}
-interface I2{
-void m();
-}
-class A3 implements I3, I2{
-public void m(){}
-}
-interface I3{
-void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test33/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test33/out/A.java
deleted file mode 100644
index 1facb63..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test33/out/A.java
+++ /dev/null
@@ -1,23 +0,0 @@
-//renaming I.m to k
-package p;
-interface I{
-void k();
-}
-class A1 implements I, I1{
-public void k(){}
-}
-interface I1{
-void k();
-}
-class A2 implements I1, I2{
-public void k(){}
-}
-interface I2{
-void k();
-}
-class A3 implements I3, I2{
-public void k(){}
-}
-interface I3{
-void k();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test34/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test34/in/A.java
deleted file mode 100644
index 255c6b9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test34/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//renaming I.m to k
-package p;
-interface I{
-void m();
-}
-
-class A1 implements I{
-public void m(){}
-}
-interface I1{
-void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test34/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test34/out/A.java
deleted file mode 100644
index 4b8563e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test34/out/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//renaming I.m to k
-package p;
-interface I{
-void k();
-}
-
-class A1 implements I{
-public void k(){}
-}
-interface I1{
-void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test35/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test35/in/A.java
deleted file mode 100644
index 0b18234..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test35/in/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-//renaming I.m to k
-package p;
-interface I{
-void m();
-}
-interface I2{
-void m();
-}
-interface I3 extends I, I2{
-}
-class A implements I3{
-public void m(){}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test35/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test35/out/A.java
deleted file mode 100644
index fcbe37b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test35/out/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-//renaming I.m to k
-package p;
-interface I{
-void k();
-}
-interface I2{
-void k();
-}
-interface I3 extends I, I2{
-}
-class A implements I3{
-public void k(){}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test36/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test36/in/A.java
deleted file mode 100644
index 70cb32c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test36/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//renaming I.m to k
-package p;
-interface I{
-void m();
-}
-interface I2{
-void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test36/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test36/out/A.java
deleted file mode 100644
index d8a8fe0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test36/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//renaming I.m to k
-package p;
-interface I{
-void k();
-}
-interface I2{
-void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test37/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test37/in/A.java
deleted file mode 100644
index 51f4eb7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test37/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//renaming I.m to k
-package p;
-interface I{
-void m();
-}
-interface I2{
-void m();
-}
-interface I3 extends I{
-}
-interface I4 extends I3, I2{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test37/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test37/out/A.java
deleted file mode 100644
index 1feeb67..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test37/out/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//renaming I.m to k
-package p;
-interface I{
-void k();
-}
-interface I2{
-void k();
-}
-interface I3 extends I{
-}
-interface I4 extends I3, I2{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test38/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test38/in/A.java
deleted file mode 100644
index 5f67be9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test38/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-//renaming I.m to k
-package p;
-interface I{
-void m();
-}
-class A{
-public void m(){}
-}
-class B1 extends A implements I{
-}
-class B2 extends A {
-public void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test38/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test38/out/A.java
deleted file mode 100644
index 7ab2e0d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test38/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-//renaming I.m to k
-package p;
-interface I{
-void k();
-}
-class A{
-public void k(){}
-}
-class B1 extends A implements I{
-}
-class B2 extends A {
-public void k(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test39/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test39/in/A.java
deleted file mode 100644
index 51f4eb7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test39/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//renaming I.m to k
-package p;
-interface I{
-void m();
-}
-interface I2{
-void m();
-}
-interface I3 extends I{
-}
-interface I4 extends I3, I2{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test39/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test39/out/A.java
deleted file mode 100644
index 1feeb67..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test39/out/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//renaming I.m to k
-package p;
-interface I{
-void k();
-}
-interface I2{
-void k();
-}
-interface I3 extends I{
-}
-interface I4 extends I3, I2{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test4/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test4/in/A.java
deleted file mode 100644
index 70d4d12..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test4/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//renaming I.m to k
-package p;
-class B {
-	public void m(){};
-} 
-class A extends B implements I{
-	public void m(){};
-}
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test4/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test4/out/A.java
deleted file mode 100644
index e6bd3c0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test4/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//renaming I.m to k
-package p;
-class B {
-	public void k(){};
-} 
-class A extends B implements I{
-	public void k(){};
-}
-interface I {
-	void k();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test40/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test40/in/A.java
deleted file mode 100644
index 6ac8b0e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test40/in/A.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package p;
-//renaming I.m to k
-interface I{
-	void m();
-}
-interface I2{
-	void m();
-}
-class A{
-}
-class B extends A implements I{
-public void m(){}
-}
-class C extends A implements I2{
-public void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test40/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test40/out/A.java
deleted file mode 100644
index 546a461..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test40/out/A.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package p;
-//renaming I.m to k
-interface I{
-	void k();
-}
-interface I2{
-	void m();
-}
-class A{
-}
-class B extends A implements I{
-public void k(){}
-}
-class C extends A implements I2{
-public void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test41/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test41/in/A.java
deleted file mode 100644
index 941088d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test41/in/A.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package p;
-//renaming I.m to k
-interface I{
-	void m();
-}
-interface I2{
-	void m();
-	void k();
-	
-}
-class A{
-}
-class B extends A implements I{
-public void m(){}
-}
-class C extends A implements I2{
-public void m(){}
-public void k(){}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test41/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test41/out/A.java
deleted file mode 100644
index 83eaff0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test41/out/A.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package p;
-//renaming I.m to k
-interface I{
-	void k();
-}
-interface I2{
-	void m();
-	void k();
-	
-}
-class A{
-}
-class B extends A implements I{
-public void k(){}
-}
-class C extends A implements I2{
-public void m(){}
-public void k(){}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test42/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test42/in/A.java
deleted file mode 100644
index 1215395..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test42/in/A.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package p;
-//renaming I.m to k
-interface I{
-	void m();
-}
-interface I2{
-	void m();
-}
-class A{
-public void m(){}
-}
-class B extends A implements I{
-public void m(){}
-}
-class C extends A implements I2{
-public void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test42/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test42/out/A.java
deleted file mode 100644
index c0a9e5b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test42/out/A.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package p;
-//renaming I.m to k
-interface I{
-	void k();
-}
-interface I2{
-	void k();
-}
-class A{
-public void k(){}
-}
-class B extends A implements I{
-public void k(){}
-}
-class C extends A implements I2{
-public void k(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test43/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test43/in/A.java
deleted file mode 100644
index c210562..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test43/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//renaming I.m to k
-package p;
-interface I {
-	void m();
-}
-class Test{
-	void k(){
-	}
-}
-class C implements I{
-	public void m(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test43/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test43/out/A.java
deleted file mode 100644
index 3945ff4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test43/out/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//renaming I.m to k
-package p;
-interface I {
-	void k();
-}
-class Test{
-	void k(){
-	}
-}
-class C implements I{
-	public void k(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test44/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test44/in/A.java
deleted file mode 100644
index df5f328..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test44/in/A.java
+++ /dev/null
@@ -1,23 +0,0 @@
-//renaming I.m to k
-package p;
-interface I {
-	void m();
-}
-interface J{
-	void m();
-}
-interface J2 extends J{
-	void m();
-}
-
-class A{
-	public void m(){};
-}
-class C extends A implements I, J{
-	public void m(){};
-}
-class Test{
-	void k(){
-	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test44/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test44/out/A.java
deleted file mode 100644
index 3032211..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test44/out/A.java
+++ /dev/null
@@ -1,23 +0,0 @@
-//renaming I.m to k
-package p;
-interface I {
-	void k();
-}
-interface J{
-	void k();
-}
-interface J2 extends J{
-	void k();
-}
-
-class A{
-	public void k(){};
-}
-class C extends A implements I, J{
-	public void k(){};
-}
-class Test{
-	void k(){
-	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test45/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test45/in/A.java
deleted file mode 100644
index 27ca176..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test45/in/A.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package p;
-//renaming I.m to k
-interface I {
-void m();
-}
-class C1 implements I{
-	public void m(){};
-}
-class D{
-	void h(){
-		I a= new C1();
-		a.m();
-	}
-}
-class NotRel{
-	public void m(){};
-	void f(){
-		m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test45/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test45/out/A.java
deleted file mode 100644
index af2fc07..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test45/out/A.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package p;
-//renaming I.m to k
-interface I {
-void k();
-}
-class C1 implements I{
-	public void k(){};
-}
-class D{
-	void h(){
-		I a= new C1();
-		a.k();
-	}
-}
-class NotRel{
-	public void m(){};
-	void f(){
-		m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test46/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test46/in/A.java
deleted file mode 100644
index c21e729..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test46/in/A.java
+++ /dev/null
@@ -1,21 +0,0 @@
-//nor ref update
-package p;
-//renaming I.m to k
-interface I {
-void m();
-}
-class C1 implements I{
-	public void m(){};
-}
-class D{
-	void h(){
-		I a= new C1();
-		a.m();
-	}
-}
-class NotRel{
-	public void m(){};
-	void f(){
-		m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test46/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test46/out/A.java
deleted file mode 100644
index a6285d0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test46/out/A.java
+++ /dev/null
@@ -1,21 +0,0 @@
-//nor ref update
-package p;
-//renaming I.m to k
-interface I {
-void k();
-}
-class C1 implements I{
-	public void m(){};
-}
-class D{
-	void h(){
-		I a= new C1();
-		a.m();
-	}
-}
-class NotRel{
-	public void m(){};
-	void f(){
-		m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test47/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test47/in/A.java
deleted file mode 100644
index 2c113e2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test47/in/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-//renaming I.m to k
-interface I {
-	void m();
-}
-class AQ implements I{
-	public void m(){}
-}
-
-class AQE extends AQ{
-	public void m(){
-		super.m();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test47/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test47/out/A.java
deleted file mode 100644
index 123757e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test47/out/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-//renaming I.m to k
-interface I {
-	void k();
-}
-class AQ implements I{
-	public void k(){}
-}
-
-class AQE extends AQ{
-	public void k(){
-		super.k();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test5/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test5/in/A.java
deleted file mode 100644
index b85dfa1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test5/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//renaming I.m to k
-package p;
-class B implements I{
-	public void m(){};
-} 
-class A extends B{
-	public void m(){};
-}
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test5/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test5/out/A.java
deleted file mode 100644
index 360aac9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test5/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//renaming I.m to k
-package p;
-class B implements I{
-	public void k(){};
-} 
-class A extends B{
-	public void k(){};
-}
-interface I {
-	void k();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test6/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test6/in/A.java
deleted file mode 100644
index 67da87a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test6/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//renaming I.m to k
-package p;
-class B implements I{
-	public void m(){};
-} 
-class A extends B implements I{
-	public void m(){};
-}
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test6/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test6/out/A.java
deleted file mode 100644
index a75f6bd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test6/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//renaming I.m to k
-package p;
-class B implements I{
-	public void k(){};
-} 
-class A extends B implements I{
-	public void k(){};
-}
-interface I {
-	void k();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test7/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test7/in/A.java
deleted file mode 100644
index 116b6bf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test7/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//renaming I.m to k
-package p;
-interface I {
-	void m();
-}
-interface I2 extends I{
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test7/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test7/out/A.java
deleted file mode 100644
index fb57224..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/test7/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//renaming I.m to k
-package p;
-interface I {
-	void k();
-}
-interface I2 extends I{
-	void k();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail0/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail0/in/A.java
deleted file mode 100644
index c3d2d6b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail0/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//can't rename I.m to k
-package p;
-interface I{
-	void m();
-}
-class C implements I{
-	public void m(){}
-	public void k(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail1/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail1/in/A.java
deleted file mode 100644
index 7d763a1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail1/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-//can't rename I.m to k
-package p;
-interface I{
-	void m();
-	void k();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail10/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail10/in/A.java
deleted file mode 100644
index 9c9d766..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail10/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-//renaming I.m would require renaming a native method
-class A implements I{
-	public void m(){}
-}
-class B extends A{
-	public native void m();
-}
-interface I{
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail11/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail11/in/A.java
deleted file mode 100644
index ae2f635..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail11/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-//can't rename I.m to k - defined in subclass
-class A implements I{
-	public void m(){}
-}
-class B extends A{
-	public private void k(){}
-}
-interface I{
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail12/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail12/in/A.java
deleted file mode 100644
index 824918a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail12/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-//can't rename m to k - defined in subclass
-class A implements I{
-	public void m(){}
-}
-class B extends A{
-	public void k(){}
-}
-interface I{
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail13/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail13/in/A.java
deleted file mode 100644
index 0ee357b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail13/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-//can't rename m to k - defined in subclass
-class A implements I{
-	public void m(){
-	}
-}
-class B extends A{
-	static void k(){
-	}
-}
-interface I{
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail14/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail14/in/A.java
deleted file mode 100644
index 3e0eeed..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail14/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-//can't rename m to k - defined in subclass
-class A implements I{
-	public void m(){
-	}
-}
-class B extends A{
-	private static void k(){
-	}
-}
-interface I{
-void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail15/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail15/in/A.java
deleted file mode 100644
index b921f19..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail15/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-//can't rename A.m to k - defined in superclass
-class B {
-	void k(){
-	}
-}
-class A extends B implements I{
-	public void m(){
-	}
-}
-interface I{
-void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail16/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail16/in/A.java
deleted file mode 100644
index 2ad70f1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail16/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-//can't rename A.m to k - defined in superclass
-class B {
-	static void k(){
-	}
-}
-class A extends B implements I{
-	public void m(){
-	}
-}
-interface I{
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail17/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail17/in/A.java
deleted file mode 100644
index c4a3e84..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail17/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-//can't rename A.m to k - defined in superclass
-class B {
-	void k(){
-	}
-}
-class A extends B implements I{
-	public void m(){
-	}
-}
-interface I{
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail18/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail18/in/A.java
deleted file mode 100644
index 1eddcad..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail18/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-//can't rename I.m to k - duplicate
-interface I {
-	void m();
-}
-class B implements I{
-	public void m(){}
-	private int k();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail19/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail19/in/A.java
deleted file mode 100644
index 3b7102c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail19/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-//can't rename A.m to k - duplicate
-class A implements I{
-	static void k(){}
-	public void m(){
-	}
-}
-interface I{
-void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail20/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail20/in/A.java
deleted file mode 100644
index e19b316..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail20/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-//can't rename A.m - declared in superclass
-class B {
-	public native void m();
-}
-class A extends B implements I{
-	public void m(){}
-}
-interface I{
-	void m();
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail21/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail21/in/A.java
deleted file mode 100644
index 3d78d9c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail21/in/A.java
+++ /dev/null
@@ -1,15 +0,0 @@
-//can't rename A.m to k
-package p;
-public class A implements I{
-	public void m(String m){
-		System.out.println("A");
-	}
-}
-class B extends A{
-	public void k(Object m){
-		System.out.println("B");
-	}
-}
-interface I{
-void m(String k);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail22/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail22/in/A.java
deleted file mode 100644
index f295f57..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail22/in/A.java
+++ /dev/null
@@ -1,15 +0,0 @@
-//can't rename A.m to k
-package p;
-public class A implements I{
-	public void m(Object m){
-		System.out.println("A");
-	}
-}
-class B extends A{
-	public void k(String m){
-		System.out.println("B");
-	}
-}
-interface I{
-void m(Object s);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail23/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail23/in/A.java
deleted file mode 100644
index 32b8728..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail23/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-interface I{
-	String toString();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail24/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail24/in/A.java
deleted file mode 100644
index 694796b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail24/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-//can't rename I.m to k
-class B{
-	public void k(){}
-}
-class A extends B implements I{
-	public void m(){}
-}
-interface I{
-	abstract void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail25/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail25/in/A.java
deleted file mode 100644
index 05bcab4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail25/in/A.java
+++ /dev/null
@@ -1,18 +0,0 @@
-//can't rename I.m to k
-package p;
-interface I{
-void m();
-}
-class A{
-public void m(){};
-}
-class B1 extends A implements J{
-		public void k(){}
-}
-class B2 extends A implements I{
-
-}
-interface J{
-void m();
-void k();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail26/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail26/in/A.java
deleted file mode 100644
index 0e4124e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail26/in/A.java
+++ /dev/null
@@ -1,19 +0,0 @@
-//can't rename I.m to k
-package p;
-interface I{
-void m();
-}
-class A{
-public void m(){};
-}
-class B1 extends A implements J{
-}
-class B2 extends A implements I{
-}
-interface J{
-void m();
-}
-class C implements J{
-public void m(){};
-public void k(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail27/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail27/in/A.java
deleted file mode 100644
index 7d8be81..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail27/in/A.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package p;
-interface I{
-void m();
-}
-class A implements I, J{
-public void m(){};
-}
-interface J{
-void m();
-}
-class B implements J, K{
-public void m(){};
-public void k(){};
-
-}
-interface K{
-void m();
-void k();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail28/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail28/in/A.java
deleted file mode 100644
index 4975fe7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail28/in/A.java
+++ /dev/null
@@ -1,25 +0,0 @@
-//can't rename I.m to k
-package p;
-interface I{
-void m();
-}
-class A1 implements I, I1{
-public void m(){}
-}
-interface I1{
-void m();
-}
-class A2 implements I1, I2{
-public void m(){}
-}
-interface I2{
-void m();
-}
-class A3 implements I3, I2{
-public void m(){}
-public void k(){}
-}
-interface I3{
-void m();
-void k();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail29/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail29/in/A.java
deleted file mode 100644
index 0832d75..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail29/in/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-//can't rename I.m to k
-package p;
-interface I{
-void m();
-}
-class A{
-public void m(){}
-}
-class B1 extends A implements I{
-}
-class B2 extends A {
-public void m(){}
-public void k(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail3/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail3/in/A.java
deleted file mode 100644
index 0dd7ffe..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail3/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//can't rename I.m to k
-package p;
-interface I{
-	void m();
-}
-class C implements I{
-	public void m();
-	public void k();
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail30/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail30/in/A.java
deleted file mode 100644
index 9be82b8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail30/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-//can't rename A.toString
-package p;
-interface I{
-	public java.lang.String toString();
-}
-class A implements I{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail31/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail31/in/A.java
deleted file mode 100644
index f77d7bd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail31/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//can't rename A.toString
-package p;
-interface I{
-	public String toString();
-}
-class A implements I{
-	public java.lang.String toString();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail32/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail32/in/A.java
deleted file mode 100644
index 266de81..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail32/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-//can't rename m to toString
-//see the spec: 9.2
-package p;
-interface I{
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail33/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail33/in/A.java
deleted file mode 100644
index 7f62c76..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail33/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-//can't rename m to toString
-//see the spec: 9.2
-package p;
-interface I{
-	String m() throws Exception;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail34/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail34/in/A.java
deleted file mode 100644
index acdbe6a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail34/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-//can't rename m to equals
-//see the lang spec: 9.2
-package p;
-interface I{
-	void m(Object o);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail35/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail35/in/A.java
deleted file mode 100644
index 49acc1a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail35/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-//can't rename m to equals
-//see the lang spec: 9.2
-package p;
-interface I{
-	void m(java.lang.Object o);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail36/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail36/in/A.java
deleted file mode 100644
index 66c4eb3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail36/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-//can't rename m to getClass
-//see the lang spec: 9.2
-package p;
-interface I{
-	int m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail37/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail37/in/A.java
deleted file mode 100644
index 85bfa66..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail37/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-//can't rename m to hashCode
-//see the lang spec: 9.2
-package p;
-interface I{
-	String m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail38/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail38/in/A.java
deleted file mode 100644
index 95dfb37..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail38/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-//can't rename m to notify
-//see the lang spec: 9.2
-package p;
-interface I{
-	String m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail39/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail39/in/A.java
deleted file mode 100644
index 41a77fa..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail39/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-//can't rename m to notifyAll
-//see the lang spec: 9.2
-package p;
-interface I{
-	String m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail4/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail4/in/A.java
deleted file mode 100644
index eaeb936..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail4/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//can't rename I.m to k
-package p;
-interface I{
-	void m();
-}
-class C1 {
-	public void k(){}
-}
-class C2 extends C1 implements I{
-	public void m(){}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail40/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail40/in/A.java
deleted file mode 100644
index 4a86f82..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail40/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-//can't rename m to wait
-//see the lang spec: 9.2
-package p;
-interface I{
-	String m(long timeout, int nanos);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail41/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail41/in/A.java
deleted file mode 100644
index 4a022be..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail41/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-//can't rename m to wait
-//see the lang spec: 9.2
-package p;
-interface I{
-	String m(long timeout) throws InterruptedException;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail42/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail42/in/A.java
deleted file mode 100644
index d9c9ece..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail42/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-//can't rename m to wait
-//see the lang spec: 9.2
-package p;
-interface I{
-	String m() throws InterruptedException;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail43/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail43/in/A.java
deleted file mode 100644
index 0b159e6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail43/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-//can't rename m to wait
-//see the lang spec: 9.2
-package p;
-interface I{
-	String m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail44/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail44/in/A.java
deleted file mode 100644
index 0a21f10..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail44/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//renaming I.m to k
-package p;
-interface I extends I2{
-void m();
-}
-interface I2{
-void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail45/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail45/in/A.java
deleted file mode 100644
index 57d503f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail45/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-interface J{
-void m();
-}
-interface I extends J{
-void m();
-}
-interface I1 extends J{
-void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail5/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail5/in/A.java
deleted file mode 100644
index ab81c78..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail5/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//can't rename I.m to k
-package p;
-interface I{
-	void m();
-}
-class C1 {
-	static void k(){}
-}
-class C2 extends C1 implements I{
-	public void m(){}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail6/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail6/in/A.java
deleted file mode 100644
index 5e1ee21..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail6/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//can't rename I.m to k
-package p;
-interface I{
-	void m();
-}
-class C1 {
-	static void k(){}
-}
-abstract class C2 extends C1 implements I{
-	abstract public void m();
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail7/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail7/in/A.java
deleted file mode 100644
index 623d316..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail7/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-//can't rename I.m to k
-abstract class B{
-	abstract void k();
-}
-class A extends B implements I{
-	public void m(){}
-}
-interface I{
-	public void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail8/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail8/in/A.java
deleted file mode 100644
index b0e2291..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail8/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-//can't rename I.m to k
-class B{
-	public void k(int x){}
-}
-class A extends B implements I{
-	public void m(int f){}
-}
-interface I{
-	public void m(int y);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail9/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail9/in/A.java
deleted file mode 100644
index 25017e0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameMethodInInterface/testFail9/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-//can't rename m to k
-class C {
-	public void k(){}
-}
-class B extends C{
-}
-class A extends B implements I{
-	public void m(){}
-}
-interface I{
-	public void m();
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test0/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test0/in/A.java
deleted file mode 100644
index ee6b737..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test0/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-	int f;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test0/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test0/out/A.java
deleted file mode 100644
index 539e442..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test0/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-	int g;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test1/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test1/in/A.java
deleted file mode 100644
index f31ed22..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test1/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	protected int f;
-	void m(){
-		f++;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test1/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test1/out/A.java
deleted file mode 100644
index b31f55f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test1/out/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	protected int g;
-	void m(){
-		g++;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test10/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test10/in/A.java
deleted file mode 100644
index 47d015c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test10/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A{
-	public A f;
-	public int k;
-	void m(){
-		for (int g= 0; g < 10; g++){
-		
-		}
-		f.k=0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test10/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test10/out/A.java
deleted file mode 100644
index 9701909..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test10/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A{
-	public A g;
-	public int k;
-	void m(){
-		for (int g= 0; g < 10; g++){
-		
-		}
-		g.k=0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test11/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test11/in/A.java
deleted file mode 100644
index 212d616..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test11/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class A{
-	int f;
-}
-class B extends A{
-	A a;
-	void m(){
-		int g= a.f;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test11/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test11/out/A.java
deleted file mode 100644
index 4c6d120..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test11/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class A{
-	int g;
-}
-class B extends A{
-	A a;
-	void m(){
-		int g= a.g;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test12/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test12/in/A.java
deleted file mode 100644
index cedb240..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test12/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-public class A {
-	static int f= 0;
-	void m(){
-		A.f= 0; /**/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test12/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test12/out/A.java
deleted file mode 100644
index b62dcc2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test12/out/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-public class A {
-	static int g= 0;
-	void m(){
-		A.g= 0; /**/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test13/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test13/in/A.java
deleted file mode 100644
index b2ef453..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test13/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-public class A {
-	static int f= 0;
-	void m(){
-		p.A.f= 0; /**/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test13/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test13/out/A.java
deleted file mode 100644
index 83bd4f7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test13/out/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-public class A {
-	static int g= 0;
-	void m(){
-		p.A.g= 0; /**/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test14/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test14/in/A.java
deleted file mode 100644
index 0fe2457..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test14/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//no ref update
-package p;
-public class A {
-	static int f= 0;
-	void m(){
-		p.A.f= 0; /**/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test14/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test14/out/A.java
deleted file mode 100644
index 309aa0e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test14/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//no ref update
-package p;
-public class A {
-	static int g= 0;
-	void m(){
-		p.A.f= 0; /**/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test15/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test15/in/A.java
deleted file mode 100644
index aa68794..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test15/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-//no ref update
-package p;
-public class A {
-	public int f= 0;
-	void m(){
-		f= 0; /**/
-	}
-}
-class B{
-	void m(){
-		new A().f= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test15/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test15/out/A.java
deleted file mode 100644
index 20f65e0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test15/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-//no ref update
-package p;
-public class A {
-	public int g= 0;
-	void m(){
-		f= 0; /**/
-	}
-}
-class B{
-	void m(){
-		new A().f= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test16/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test16/in/A.java
deleted file mode 100644
index 62fd9d5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test16/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	int f;
-	public int getF() {
-		return (this.f);
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test16/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test16/out/A.java
deleted file mode 100644
index 4e08471..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test16/out/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	int g;
-	public int getF() {
-		return (this.g);
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test2/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test2/in/A.java
deleted file mode 100644
index ff87d50..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test2/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-interface A{
-	int f= 0;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test2/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test2/out/A.java
deleted file mode 100644
index c083c1b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test2/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-interface A{
-	int g= 0;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test3/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test3/in/A.java
deleted file mode 100644
index d084396..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test3/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-class A{
-	protected int f;
-	void m(){
-		f++;
-	}
-}
-class B{
-	A a;
-	void m(){
-		a.f= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test3/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test3/out/A.java
deleted file mode 100644
index 2f10e94..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test3/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-class A{
-	protected int g;
-	void m(){
-		g++;
-	}
-}
-class B{
-	A a;
-	void m(){
-		a.g= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test4/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test4/in/A.java
deleted file mode 100644
index 96cfc37..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test4/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-class A{
-	protected int f;
-	void m(){
-		f++;
-	}
-}
-class B extends A{
-	void m(){
-		f= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test4/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test4/out/A.java
deleted file mode 100644
index 700b2f6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test4/out/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-class A{
-	protected int g;
-	void m(){
-		g++;
-	}
-}
-class B extends A{
-	void m(){
-		g= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test5/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test5/in/A.java
deleted file mode 100644
index f6469d5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test5/in/A.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package p;
-class A{
-	protected int f;
-	void m(){
-		f++;
-	}
-}
-
-class AA extends A{
-	protected int f;
-}
-
-class B{
-	A a;
-	void m(){
-		a.f= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test5/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test5/out/A.java
deleted file mode 100644
index 51818fd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test5/out/A.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package p;
-class A{
-	protected int g;
-	void m(){
-		g++;
-	}
-}
-
-class AA extends A{
-	protected int f;
-}
-
-class B{
-	A a;
-	void m(){
-		a.g= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test6/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test6/in/A.java
deleted file mode 100644
index 6e60f89..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test6/in/A.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package p;
-class A{
-	protected int f;
-	void m(){
-		f++;
-	}
-}
-
-class AA extends A{
-	protected int f;
-}
-
-class B{
-	A a;
-	AA b;
-	A ab= new AA();
-	void m(){
-		a.f= 0;
-		b.f= 0;
-		ab.f= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test6/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test6/out/A.java
deleted file mode 100644
index d730014..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test6/out/A.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package p;
-class A{
-	protected int g;
-	void m(){
-		g++;
-	}
-}
-
-class AA extends A{
-	protected int f;
-}
-
-class B{
-	A a;
-	AA b;
-	A ab= new AA();
-	void m(){
-		a.g= 0;
-		b.f= 0;
-		ab.g= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test7/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test7/in/A.java
deleted file mode 100644
index 7553eba..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test7/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A {
-	int f;
-	void m(int g){
-		this.f= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test7/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test7/out/A.java
deleted file mode 100644
index d332730..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test7/out/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A {
-	int g;
-	void m(int g){
-		this.g= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test8/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test8/in/A.java
deleted file mode 100644
index 97e3a36..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test8/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	public A f;
-	public int k;
-	void m(){
-		f.f.f.k=0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test8/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test8/out/A.java
deleted file mode 100644
index 83a958b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test8/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	public A g;
-	public int k;
-	void m(){
-		g.g.g.k=0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test9/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test9/in/A.java
deleted file mode 100644
index 5c15dcf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test9/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A{
-	public A f;
-	public int k;
-	void m(){
-		{
-			int g;
-		}
-		f.k=0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test9/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test9/out/A.java
deleted file mode 100644
index 92d20b8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/test9/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A{
-	public A g;
-	public int k;
-	void m(){
-		{
-			int g;
-		}
-		g.k=0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testBug5821/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testBug5821/in/A.java
deleted file mode 100644
index 90c971f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testBug5821/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-public class A {
-    public int test = 0;
-
-    public static void main(String[] args) {
-        A test = new A();
-
-        test.test = 1;
-    }
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testBug5821/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testBug5821/out/A.java
deleted file mode 100644
index 8f2706a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testBug5821/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-public class A {
-    public int test1 = 0;
-
-    public static void main(String[] args) {
-        A test = new A();
-
-        test.test1 = 1;
-    }
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail0/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail0/in/A.java
deleted file mode 100644
index 039339c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail0/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	int f;
-	private int g;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail1/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail1/in/A.java
deleted file mode 100644
index 282d63c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail1/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	public int f;
-	public String g;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail10/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail10/in/A.java
deleted file mode 100644
index b1131d3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail10/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class A{
-	public A f;
-	public int k;
-	void m(){
-		for (int g= 0; g < 10; g++){
-			f.k=0;
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail11/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail11/in/A.java
deleted file mode 100644
index b263907..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail11/in/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-class A{
-	int f;
-	void m(){
-		{
-				int g;
-			{
-				{
-					int y= f + 0;
-				}
-			}
-		}	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail12/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail12/in/A.java
deleted file mode 100644
index 36c9d0d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail12/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	int f;
-	void m(){
-		int g= f;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail13/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail13/in/A.java
deleted file mode 100644
index b2eb79d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail13/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class A{
-	int f;
-}
-class B extends A{
-	A a;
-	void m(){
-		int g= f;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail14/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail14/in/A.java
deleted file mode 100644
index e09468d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail14/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A{
-	int f;
-}
-class B extends A{
-	A a;
-	int m(){
-		int g;
-		return f;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail2/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail2/in/A.java
deleted file mode 100644
index 42161ad..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail2/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	int f;
-	public static int g;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail3/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail3/in/A.java
deleted file mode 100644
index a887ae1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail3/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	protected int f;
-	private static int g;	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail4/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail4/in/A.java
deleted file mode 100644
index e2e3c00..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail4/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	public static int f;
-	public Object g;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail5/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail5/in/A.java
deleted file mode 100644
index 731bb0e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail5/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class B {
-	int g;
-	class A {
-		final int f= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail6/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail6/in/A.java
deleted file mode 100644
index 2efe7c7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail6/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A {
-	private int f;
-	class B {
-		public int g;
-	}
-}	
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail7/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail7/in/A.java
deleted file mode 100644
index 0ebc1c6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail7/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A {
-	int f;
-	void m(int g){
-		f= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail8/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail8/in/A.java
deleted file mode 100644
index f841ee0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail8/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	int f;
-	void m(){
-		Object g;
-		f++;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail9/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail9/in/A.java
deleted file mode 100644
index 58b9cd4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameNonPrivateField/testFail9/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-	public A f;
-	public int k;
-	void m(){
-		A g;
-		f.f.f.k=0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test0/in/r/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test0/in/r/A.java
deleted file mode 100644
index 96dae97..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test0/in/r/A.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package r;
-class A{}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test0/out/p1/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test0/out/p1/A.java
deleted file mode 100644
index e8654fd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test0/out/p1/A.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package p1;
-class A{}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test1/in/r/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test1/in/r/A.java
deleted file mode 100644
index 362ea30..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test1/in/r/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package r;
-class A{
-	r.A a;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test1/out/p1/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test1/out/p1/A.java
deleted file mode 100644
index b0933c0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test1/out/p1/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p1;
-class A{
-	p1.A a;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test2/in/fred/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test2/in/fred/A.java
deleted file mode 100644
index 4e91e5a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test2/in/fred/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package fred;
-import r.*;
-class A{
-	r.A a;
-	A a1;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test2/in/r/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test2/in/r/A.java
deleted file mode 100644
index 5833a58..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test2/in/r/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package r;
-public class A{
-	r.A a;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test2/out/fred/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test2/out/fred/A.java
deleted file mode 100644
index 2fbde2b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test2/out/fred/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package fred;
-import p1.*;
-class A{
-	p1.A a;
-	A a1;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test2/out/p1/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test2/out/p1/A.java
deleted file mode 100644
index e4cf018..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test2/out/p1/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p1;
-public class A{
-	p1.A a;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test3/in/fred/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test3/in/fred/A.java
deleted file mode 100644
index bb332c0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test3/in/fred/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package fred;
-import r.r.*;
-class A{
-	r.r.B a;
-	A a1;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test3/in/r/r/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test3/in/r/r/B.java
deleted file mode 100644
index 8620e84..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test3/in/r/r/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package r.r;
-public class B{
-	r.r.B a;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test3/out/r/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test3/out/r/A.java
deleted file mode 100644
index bbc81b5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test3/out/r/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package r;
-import r.r.*;
-class A{
-	r.r.B a;
-	A a1;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test3/out/r/r/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test3/out/r/r/B.java
deleted file mode 100644
index 8620e84..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test3/out/r/r/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package r.r;
-public class B{
-	r.r.B a;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test4/in/r/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test4/in/r/A.java
deleted file mode 100644
index ebb7363..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test4/in/r/A.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package r;
-class C{}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test4/in/r/p1/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test4/in/r/p1/A.java
deleted file mode 100644
index 2878942..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test4/in/r/p1/A.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package r.p1;
-class A{}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test4/out/q/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test4/out/q/A.java
deleted file mode 100644
index 5fbbe5c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test4/out/q/A.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package q;
-class A{}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test4/out/r/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test4/out/r/A.java
deleted file mode 100644
index ebb7363..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test4/out/r/A.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package r;
-class C{}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test5/in/r/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test5/in/r/A.java
deleted file mode 100644
index 9307b7e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test5/in/r/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-//no ref update
-package r;
-class A{
-	r.A d;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test5/out/p1/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test5/out/p1/A.java
deleted file mode 100644
index 4860a3f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/test5/out/p1/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-//no ref update
-package p1;
-class A{
-	r.A d;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail0/in/r/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail0/in/r/A.java
deleted file mode 100644
index 96dae97..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail0/in/r/A.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package r;
-class A{}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail1/in/r/p1/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail1/in/r/p1/A.java
deleted file mode 100644
index 2878942..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail1/in/r/p1/A.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package r.p1;
-class A{}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail10/in/r/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail10/in/r/A.java
deleted file mode 100644
index ebb7363..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail10/in/r/A.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package r;
-class C{}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail10/in/r/p1/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail10/in/r/p1/A.java
deleted file mode 100644
index 2878942..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail10/in/r/p1/A.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package r.p1;
-class A{}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail11/in/q/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail11/in/q/A.java
deleted file mode 100644
index ebb7363..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail11/in/q/A.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package r;
-class C{}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail11/in/q/p1/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail11/in/q/p1/A.java
deleted file mode 100644
index 2878942..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail11/in/q/p1/A.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package r.p1;
-class A{}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail2/in/r/p1/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail2/in/r/p1/A.java
deleted file mode 100644
index 2878942..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail2/in/r/p1/A.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package r.p1;
-class A{}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail3/in/r/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail3/in/r/A.java
deleted file mode 100644
index 2cf2cac..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail3/in/r/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package r;
-class A{
-	native void f();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail4/in/r/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail4/in/r/A.java
deleted file mode 100644
index ac8b4bb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail4/in/r/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package r;
-class A{
-	class B{
-		native void f();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail5/in/r/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail5/in/r/A.java
deleted file mode 100644
index e2601f0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail5/in/r/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package r;
-public class A{
-	public class B{
-		public static void main(String[] args){
-		}	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail6/in/r/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail6/in/r/A.java
deleted file mode 100644
index 09f2187..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail6/in/r/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package r;
-class A{
-	public static void main(String[] args){
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail7/in/p1/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail7/in/p1/A.java
deleted file mode 100644
index b6a96e7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail7/in/p1/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p1;
-class B{
-	void m(AA fred){
-		r.A.length();
-	}
-}
-class AA{
-	static String A;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail7/in/r/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail7/in/r/A.java
deleted file mode 100644
index 323bb3f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail7/in/r/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package r;
-public class A{
-	public static int length(){return 42;};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail8/in/p1/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail8/in/p1/A.java
deleted file mode 100644
index e561724..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail8/in/p1/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p1;
-import r.*;
-class B{
-	void m(){
-		r.A a;
-	}
-}
-class fred{
-	class A{};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail8/in/r/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail8/in/r/A.java
deleted file mode 100644
index 5ce5e47..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail8/in/r/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package r;
-public class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail9/in/p1/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail9/in/p1/A.java
deleted file mode 100644
index 2c4fd17..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail9/in/p1/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p1;
-class B{
-	native void m(p.A a);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail9/in/r/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail9/in/r/A.java
deleted file mode 100644
index 5ce5e47..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testFail9/in/r/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package r;
-public class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testReadOnly/in/r/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testReadOnly/in/r/A.java
deleted file mode 100644
index 9307b7e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testReadOnly/in/r/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-//no ref update
-package r;
-class A{
-	r.A d;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testReadOnly/out/p1/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testReadOnly/out/p1/A.java
deleted file mode 100644
index 4860a3f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePackage/testReadOnly/out/p1/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-//no ref update
-package p1;
-class A{
-	r.A d;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_in.java
deleted file mode 100644
index 0519ecb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_in.java
+++ /dev/null
@@ -1 +0,0 @@
- 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_out.java
deleted file mode 100644
index 0519ecb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_out.java
+++ /dev/null
@@ -1 +0,0 @@
- 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test0_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test0_in.java
deleted file mode 100644
index f99f456..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test0_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-//rename to: j
-package p;
-class A{
-	void m(int i){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test0_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test0_out.java
deleted file mode 100644
index a595b24..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test0_out.java
+++ /dev/null
@@ -1,6 +0,0 @@
-//rename to: j
-package p;
-class A{
-	void m(int j){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test10_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test10_in.java
deleted file mode 100644
index 35d3439..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test10_in.java
+++ /dev/null
@@ -1,5 +0,0 @@
-//rename to j
-package p;
-class A{
-	native void m(int i);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test10_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test10_out.java
deleted file mode 100644
index 58f2f20..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test10_out.java
+++ /dev/null
@@ -1,5 +0,0 @@
-//rename to j
-package p;
-class A{
-	native void m(int j);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test11_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test11_in.java
deleted file mode 100644
index eab99a3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test11_in.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//rename to j
-package p;
-class A{
-	int k;
-	void m(int i){
-		A a= new A(){
-			void m(int i){
-				i++;
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test11_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test11_out.java
deleted file mode 100644
index 4dc6467..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test11_out.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//rename to j
-package p;
-class A{
-	int k;
-	void m(int j){
-		A a= new A(){
-			void m(int i){
-				i++;
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test12_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test12_in.java
deleted file mode 100644
index ea84baf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test12_in.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//rename to j
-package p;
-class A{
-	void m(final int i){
-		A a= new A(){
-			void m(int k){
-				k= i;
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test12_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test12_out.java
deleted file mode 100644
index f2afa2b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test12_out.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//rename to j
-package p;
-class A{
-	void m(final int j){
-		A a= new A(){
-			void m(int k){
-				k= j;
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test13_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test13_in.java
deleted file mode 100644
index 8682f8a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test13_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//rename to: j
-package p;
-class A{
-	void m(int i){
-	}
-	void n(int i){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test13_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test13_out.java
deleted file mode 100644
index a706f40..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test13_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//rename to: j
-package p;
-class A{
-	void m(int j){
-	}
-	void n(int i){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test14_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test14_in.java
deleted file mode 100644
index 7ee39c6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test14_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//rename to: j
-package p;
-class A{
-	A i;
-	A m(A i){
-		return i.m(i.m(this.i));
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test14_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test14_out.java
deleted file mode 100644
index f9d9ef3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test14_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//rename to: j
-package p;
-class A{
-	A i;
-	A m(A j){
-		return j.m(j.m(this.i));
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test15_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test15_in.java
deleted file mode 100644
index 4f56552..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test15_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-//rename to: j, i
-package p;
-class A{
-	int m(int i, int j){
-		return i + j;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test15_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test15_out.java
deleted file mode 100644
index 14f918d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test15_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-//rename to: j, i
-package p;
-class A{
-	int m(int j, int i){
-		return j + i;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test16_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test16_in.java
deleted file mode 100644
index b3a0098..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test16_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	void m(int i){
-		class X{
-			int j;
-		}
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test16_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test16_out.java
deleted file mode 100644
index f14f73b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test16_out.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	void m(int j){
-		class X{
-			int j;
-		}
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test17_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test17_in.java
deleted file mode 100644
index ed8c347..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test17_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//renaming to: j, i, k
-package p;
-class A{
-	int l;
-	int m(int i, int j, int k){
-		int m= 0;
-		return i + j + k + l + m;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test17_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test17_out.java
deleted file mode 100644
index 93d3e70..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test17_out.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//renaming to: j, i, k
-package p;
-class A{
-	int l;
-	int m(int j, int i, int k){
-		int m= 0;
-		return j + i + k + l + m;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test18_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test18_in.java
deleted file mode 100644
index 3e13887..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test18_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	void m(Object i){
-		class j{}
-		i= new j();
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test18_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test18_out.java
deleted file mode 100644
index ffd9994..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test18_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	void m(Object j){
-		class j{}
-		j= new j();
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test19_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test19_in.java
deleted file mode 100644
index 657fe9e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test19_in.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	A i;
-	void m(A i){
-		i.toString();
-		i.equals(i.toString());
-		i.i.i= i;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test19_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test19_out.java
deleted file mode 100644
index 263cd01..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test19_out.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	A i;
-	void m(A j){
-		j.toString();
-		j.equals(j.toString());
-		j.i.i= j;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test1_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test1_in.java
deleted file mode 100644
index 10079c6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test1_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-//rename to: j
-package p;
-class A{
-	void m(int i){
-		i++;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test1_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test1_out.java
deleted file mode 100644
index dedcb99..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test1_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-//rename to: j
-package p;
-class A{
-	void m(int j){
-		j++;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test20_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test20_in.java
deleted file mode 100644
index 10d3162..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test20_in.java
+++ /dev/null
@@ -1,16 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	Object m(i i){
-		i.i.i= i.i;
-		i:{
-			while(true){
-				break i;
-			}
-		}
-		return i;
-	};
-}
-class i{
-	i i;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test20_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test20_out.java
deleted file mode 100644
index d12c537..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test20_out.java
+++ /dev/null
@@ -1,16 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	Object m(i j){
-		j.i.i= j.i;
-		i:{
-			while(true){
-				break i;
-			}
-		}
-		return j;
-	};
-}
-class i{
-	i i;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test21_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test21_in.java
deleted file mode 100644
index 7ed06f6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test21_in.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	void m(int i){
-		A[] o= new A[8];
-		int[] ii= new int[i];
-		for (; i == i;){
-			i++;
-			ii[++i]= i ==7 ? i: i + i;
-		}
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test21_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test21_out.java
deleted file mode 100644
index 378d1d5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test21_out.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	void m(int j){
-		A[] o= new A[8];
-		int[] ii= new int[j];
-		for (; j == j;){
-			j++;
-			ii[++j]= j ==7 ? j: j + j;
-		}
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test22_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test22_in.java
deleted file mode 100644
index 3358054..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test22_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	int i;
-	void m(int i){
-		int u= i + this.i;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test22_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test22_out.java
deleted file mode 100644
index b6bb716..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test22_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	int i;
-	void m(int j){
-		int u= j + this.i;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test23_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test23_in.java
deleted file mode 100644
index 8a8dec2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test23_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//renaming to: j, i
-package p;
-class A{
-	int j;
-	int m(final int i, int j){
-		return i + j;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test23_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test23_out.java
deleted file mode 100644
index b6a9dd0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test23_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//renaming to: j, i
-package p;
-class A{
-	int j;
-	int m(final int j, int i){
-		return j + i;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test24_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test24_in.java
deleted file mode 100644
index 1fa6d29..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test24_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	int i;
-	void m(int i){
-		this.i= i;
-	};
-} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test24_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test24_out.java
deleted file mode 100644
index a2134c9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test24_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	int i;
-	void m(int j){
-		this.i= j;
-	};
-} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test25_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test25_in.java
deleted file mode 100644
index 368e29e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test25_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	int j;
-	int m(int i){
-		return i + m(m(i));
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test25_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test25_out.java
deleted file mode 100644
index 4ade063..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test25_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	int j;
-	int m(int j){
-		return j + m(m(j));
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test26_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test26_in.java
deleted file mode 100644
index 415fcdd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test26_in.java
+++ /dev/null
@@ -1,13 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	int j;
-	int m(int i){
-		new A(){
-			int m(int i){
-				return i;
-			}
-		};
-		return i + m(m(i));
-	};
-}   
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test26_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test26_out.java
deleted file mode 100644
index 7ca75e0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test26_out.java
+++ /dev/null
@@ -1,13 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	int j;
-	int m(int j){
-		new A(){
-			int m(int i){
-				return i;
-			}
-		};
-		return j + m(m(j));
-	};
-}   
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test27_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test27_in.java
deleted file mode 100644
index bece931..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test27_in.java
+++ /dev/null
@@ -1,13 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	int j;
-	int m(final int i){
-		new A(){
-			int m(int o){
-				return i;
-			}
-		};
-		return i + m(m(i));
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test27_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test27_out.java
deleted file mode 100644
index c25cf40..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test27_out.java
+++ /dev/null
@@ -1,13 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	int j;
-	int m(final int j){
-		new A(){
-			int m(int o){
-				return j;
-			}
-		};
-		return j + m(m(j));
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test28_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test28_in.java
deleted file mode 100644
index 5e4af90..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test28_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	int m(int[] i){
-		i[0]= 0;
-		return 1;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test28_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test28_out.java
deleted file mode 100644
index 3f4716c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test28_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	int m(int[] j){
-		j[0]= 0;
-		return 1;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test29_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test29_in.java
deleted file mode 100644
index 69716a4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test29_in.java
+++ /dev/null
@@ -1,13 +0,0 @@
-//renaming to b
-package p;
-class A{
-   A A;
-   A m(A A){
-     A:
-        for (;;){
-          if (A.m(A)==A)
-             break A;
-        }
-      return A;
-   };
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test29_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test29_out.java
deleted file mode 100644
index bcd70c1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test29_out.java
+++ /dev/null
@@ -1,13 +0,0 @@
-//renaming to b
-package p;
-class A{
-   A A;
-   A m(A b){
-     A:
-        for (;;){
-          if (b.m(b)==b)
-             break A;
-        }
-      return b;
-   };
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test2_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test2_in.java
deleted file mode 100644
index 3ce000b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test2_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-//rename to: j, k
-package p;
-class A{
-	void m(int i, int k){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test2_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test2_out.java
deleted file mode 100644
index 2e49b16..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test2_out.java
+++ /dev/null
@@ -1,6 +0,0 @@
-//rename to: j, k
-package p;
-class A{
-	void m(int j, int k){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test30_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test30_in.java
deleted file mode 100644
index e4ad09f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test30_in.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//renaming to i, k
-package p;
-class A{
-	private void m(final int i, int j){
-		class J{
-			int k;
-			void k(){
-				k= k;
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test30_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test30_out.java
deleted file mode 100644
index 9ee3399..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test30_out.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//renaming to i, k
-package p;
-class A{
-	private void m(final int i, int k){
-		class J{
-			int k;
-			void k(){
-				k= k;
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test31_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test31_in.java
deleted file mode 100644
index a4e0e9e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test31_in.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//renaming to kk, j
-package p;
-class A{
-	private void m(final int i, int j){
-		new Object(){
-			int kk;
-			void fred(){
-				kk= 0;
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test31_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test31_out.java
deleted file mode 100644
index 8f95274..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test31_out.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//renaming to kk, j
-package p;
-class A{
-	private void m(final int kk, int j){
-		new Object(){
-			int kk;
-			void fred(){
-				kk= 0;
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test32_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test32_in.java
deleted file mode 100644
index 275aaf9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test32_in.java
+++ /dev/null
@@ -1,5 +0,0 @@
-//rename to j
-package p;
-class A{
-	A(int i){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test32_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test32_out.java
deleted file mode 100644
index 5516e0b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test32_out.java
+++ /dev/null
@@ -1,5 +0,0 @@
-//rename to j
-package p;
-class A{
-	A(int j){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test33_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test33_in.java
deleted file mode 100644
index 9fffecf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test33_in.java
+++ /dev/null
@@ -1,13 +0,0 @@
-//renaming to b, no ref update
-package p;
-class A{
-   A A;
-   A m(A A){
-     A:
-        for (;;){
-          if (A.m(A)==A)
-             break A;
-        }
-      return A;
-   };
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test33_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test33_out.java
deleted file mode 100644
index 33fdb83..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test33_out.java
+++ /dev/null
@@ -1,13 +0,0 @@
-//renaming to b, no ref update
-package p;
-class A{
-   A A;
-   A m(A b){
-     A:
-        for (;;){
-          if (A.m(A)==A)
-             break A;
-        }
-      return A;
-   };
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test34_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test34_in.java
deleted file mode 100644
index bf71a37..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test34_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	public void m(boolean test) {
-        boolean t= (test);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test34_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test34_out.java
deleted file mode 100644
index 87bf3d8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test34_out.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	public void m(boolean test2) {
-        boolean t= (test2);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test35_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test35_in.java
deleted file mode 100644
index b9b24c6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test35_in.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package p;
-class A{
-	/**
-	 * @param i
-	 */
-	void m(int i){
-	}
-	
-	/**
-	 * @param i
-	 */
-	void m1(int i){
-	}
-	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test35_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test35_out.java
deleted file mode 100644
index 6ae1707..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test35_out.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package p;
-class A{
-	/**
-	 * @param j
-	 */
-	void m(int j){
-	}
-	
-	/**
-	 * @param i
-	 */
-	void m1(int i){
-	}
-	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test36_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test36_in.java
deleted file mode 100644
index fbabcd3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test36_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	//
-	void m(int i){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test36_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test36_out.java
deleted file mode 100644
index a6dc3d2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test36_out.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	//
-	void m(int j){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test3_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test3_in.java
deleted file mode 100644
index 7676ba8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test3_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//rename to: j, j1
-package p;
-class A{
-	int m(int i, int k){
-		{
-			return i + k;
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test3_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test3_out.java
deleted file mode 100644
index d1f6340..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test3_out.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//rename to: j, j1
-package p;
-class A{
-	int m(int j, int j1){
-		{
-			return j + j1;
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test4_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test4_in.java
deleted file mode 100644
index f607274..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test4_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//rename to: k
-package p;
-class A{
-	int k;
-	void m(A i){
-		i.k= i.k;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test4_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test4_out.java
deleted file mode 100644
index 4e4b4c4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test4_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//rename to: k
-package p;
-class A{
-	int k;
-	void m(A k){
-		k.k= k.k;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test5_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test5_in.java
deleted file mode 100644
index 99ea05e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test5_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//rename to: k
-package p;
-class A{
-	int i;
-	void m(int i){
-		this.i= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test5_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test5_out.java
deleted file mode 100644
index b4d2054..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test5_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//rename to: k
-package p;
-class A{
-	int i;
-	void m(int k){
-		this.i= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test6_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test6_in.java
deleted file mode 100644
index efa9a84..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test6_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-//rename to k
-package p;
-class A{
-	void m(int i){
-		m(i);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test6_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test6_out.java
deleted file mode 100644
index 4dc489d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test6_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-//rename to k
-package p;
-class A{
-	void m(int k){
-		m(k);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test7_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test7_in.java
deleted file mode 100644
index 66d473e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test7_in.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//rename to k
-package p;
-class B{
-	int i;
-}
-class A extends B{
-	void m(A i){
-		super.i= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test7_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test7_out.java
deleted file mode 100644
index 22e4796..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test7_out.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//rename to k
-package p;
-class B{
-	int i;
-}
-class A extends B{
-	void m(A k){
-		super.i= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test8_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test8_in.java
deleted file mode 100644
index e458281..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test8_in.java
+++ /dev/null
@@ -1,5 +0,0 @@
-//rename to j
-package p;
-abstract class A{
-	abstract void m(int i);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test8_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test8_out.java
deleted file mode 100644
index c7cc090..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test8_out.java
+++ /dev/null
@@ -1,5 +0,0 @@
-//rename to j
-package p;
-abstract class A{
-	abstract void m(int j);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test9_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test9_in.java
deleted file mode 100644
index 181663e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test9_in.java
+++ /dev/null
@@ -1,5 +0,0 @@
-//rename to j
-package p;
-interface A{
-	void m(int i);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test9_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test9_out.java
deleted file mode 100644
index 39e113f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/canRename/A_test9_out.java
+++ /dev/null
@@ -1,5 +0,0 @@
-//rename to j
-package p;
-interface A{
-	void m(int j);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail0.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail0.java
deleted file mode 100644
index 65d173b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail0.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//cannot rename to: j
-package p;
-class A{
-	void m(final int i){
-		class X{
-			int j;
-			void m(){
-				j= i;
-			}
-		}
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail1.java
deleted file mode 100644
index 4347583..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail1.java
+++ /dev/null
@@ -1,6 +0,0 @@
-//nothing to rename
-package p;
-class A{
-	void m(){
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail10.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail10.java
deleted file mode 100644
index 536d555..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail10.java
+++ /dev/null
@@ -1,5 +0,0 @@
-//cannot rename to: j, j
-package p;
-abstract class A{
-	abstract void m(int i, int j);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail11.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail11.java
deleted file mode 100644
index 275aadd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail11.java
+++ /dev/null
@@ -1,5 +0,0 @@
-//cannot rename to: j, j
-package p;
-interface A{
-	 void m(int i, int j);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail12.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail12.java
deleted file mode 100644
index 6327219..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail12.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//cannot rename to j
-package p;
-class A{
-	void m(final int i){
-		A a= new A(){
-			void m(int j){
-				i++;
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail13.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail13.java
deleted file mode 100644
index 14ecb4c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail13.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//cannot rename to j
-package p;
-class A{
-	int j;
-	void m(int i){
-		j= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail14.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail14.java
deleted file mode 100644
index 78a687f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail14.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//cannot rename to j
-package p;
-class A{
-	int k;
-	static class j{
-		static int k;
-	}
-	void m(A i){
-		j.k= 0;
-	}
-}	
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail15.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail15.java
deleted file mode 100644
index 259c6a7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail15.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//cannot rename to: j
-package p;
-class A{
-	void m(int i){
-		for (int j= 0; j < 10; j++){
-		}
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail16.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail16.java
deleted file mode 100644
index dc723dc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail16.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//cannot rename to: j
-package p;
-class A{
-	void m(int i){
-		for (int k= 0, j= 0;;) {
-		}
-		
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail17.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail17.java
deleted file mode 100644
index 7b7cb27..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail17.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//cannot rename to: j
-package p;
-class A{
-	void m(int i){
-		try{
-			m(1);
-		}
-		catch (Throwable j){
-		}
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail18.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail18.java
deleted file mode 100644
index 64c7495..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail18.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//cannot rename to: j
-package p;
-class A{
-	String j;
-	void m(int i){
-		j.toString();	
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail19.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail19.java
deleted file mode 100644
index ea734b3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail19.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//cannot rename to: j
-package p;
-class B{
-	int j;
-}
-class A extends B{
-	void m(int i){
-		j= 0;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail2.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail2.java
deleted file mode 100644
index 258a47d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail2.java
+++ /dev/null
@@ -1,7 +0,0 @@
-//cannot rename to i, i
-package p;
-class A{
-	int m(int i, int j){
-		return 0;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail20.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail20.java
deleted file mode 100644
index 9022b40..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail20.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//cannot rename to: j
-package p;
-interface B{
-	int j= 0;
-}
-class A implements B{
-	void m(int i){
-		int y= j;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail21.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail21.java
deleted file mode 100644
index 98aa351..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail21.java
+++ /dev/null
@@ -1,13 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	int j;
-	int m(final int i){
-		new A(){
-			int m(int o){
-				return i;
-			}
-		};
-		return i + m(m(i));
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail3.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail3.java
deleted file mode 100644
index 549fe00..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail3.java
+++ /dev/null
@@ -1,7 +0,0 @@
-//cannot rename to: i, 9
-package p;
-class A{
-	int m(int i, int j){
-			return 0;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail4.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail4.java
deleted file mode 100644
index ce47b19..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail4.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//cannot rename to: j
-package p;
-class A{
-	int m(int i){
-		int j;
-		return 0;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail5.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail5.java
deleted file mode 100644
index a0397a7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail5.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//cannot rename to: j
-package p;
-class A{
-	int m(int i){
-		{
-			int j;
-		}
-				return 0;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail6.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail6.java
deleted file mode 100644
index fe77c6b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail6.java
+++ /dev/null
@@ -1,13 +0,0 @@
-//cannot rename to: j
-package p;
-class A{
-	int m(final int i){
-		class X{
-			int j;
-			void m(){
-				j= i;
-			}
-		}
-		return 0;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail7.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail7.java
deleted file mode 100644
index 752c308..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail7.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//cannot rename to: j
-package p;
-class B{
-	int j;
-}
-class A extends B{
-	int m(int i){
-		j= 0;
-		return 0;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail8.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail8.java
deleted file mode 100644
index dd61295..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail8.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//cannot rename to: j
-package p;
-interface B{
-	int j= 0;
-}
-class A implements B{
-	int m(int i){
-		i= j;
-		return 0;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail9.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail9.java
deleted file mode 100644
index 0cb5868..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/A_testFail9.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//cannot rename to: j
-package p;
-
-class B{
-	int j;
-	class A {
-		int m(int i){
-			i= j;
-			return 0;
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/a.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/a.java
deleted file mode 100644
index e69de29..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameParameters/cannotRename/a.java
+++ /dev/null
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test0/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test0/in/A.java
deleted file mode 100644
index 09d7beb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test0/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-	private int f;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test0/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test0/out/A.java
deleted file mode 100644
index 54638c7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test0/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-	private int g;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test1/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test1/in/A.java
deleted file mode 100644
index e7b1fae..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test1/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	private int f;
-	void m(){
-		f++;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test1/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test1/out/A.java
deleted file mode 100644
index 62565c0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test1/out/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	private int g;
-	void m(){
-		g++;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test2/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test2/in/A.java
deleted file mode 100644
index 9b8f37b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test2/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//no ref update
-package p;
-class A{
-	private int f;
-	void m(){
-		f++;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test2/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test2/out/A.java
deleted file mode 100644
index e243fcd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test2/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//no ref update
-package p;
-class A{
-	private int g;
-	void m(){
-		f++;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test3/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test3/in/A.java
deleted file mode 100644
index 08b2e77..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test3/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-class A{
-	private int f;
-	void m(){
-		/**
-		 * f f
-		 * fgd 
-		 */
-		f++;//inc f
-		String g= "f";
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test3/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test3/out/A.java
deleted file mode 100644
index 0c6b84f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test3/out/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-class A{
-	private int gg;
-	void m(){
-		/**
-		 * gg gg
-		 * fgd 
-		 */
-		gg++;//inc gg
-		String g= "gg";
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test4/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test4/in/A.java
deleted file mode 100644
index e39ac60..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test4/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-class A{
-	private int fMe;
-	
-	public int getMe() {
-		return fMe;
-	}
-
-	public void setMe(int me) {
-		fMe= me;
-	}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test4/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test4/out/A.java
deleted file mode 100644
index 317cbeb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test4/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-class A{
-	private int fYou;
-	
-	public int getYou() {
-		return fYou;
-	}
-
-	public void setYou(int me) {
-		fYou= me;
-	}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test5/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test5/in/A.java
deleted file mode 100644
index 4bf4b08..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test5/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-	private int fMe;
-	
-	public int getMe() {
-		return fMe;
-	}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test5/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test5/out/A.java
deleted file mode 100644
index 852acc2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test5/out/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-	private int fYou;
-	
-	public int getYou() {
-		return fYou;
-	}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test6/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test6/in/A.java
deleted file mode 100644
index 947a233..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test6/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-	private int fMe;
-	
-	public void setMe(int me) {
-		fMe= me;
-	}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test6/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test6/out/A.java
deleted file mode 100644
index 00f75d4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test6/out/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-	private int fYou;
-	
-	public void setYou(int me) {
-		fYou= me;
-	}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test7/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test7/in/A.java
deleted file mode 100644
index ddb5e06..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test7/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-class A{
-	private boolean fBig;
-	
-	public void setBig(boolean big) {
-		fBig= big;
-	}
-
-	public boolean isBig() {
-		return fBig;
-	}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test7/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test7/out/A.java
deleted file mode 100644
index ce85b2d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/test7/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-class A{
-	private boolean fSmall;
-	
-	public void setSmall(boolean big) {
-		fSmall= big;
-	}
-
-	public boolean isSmall() {
-		return fSmall;
-	}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/testFail0/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/testFail0/in/A.java
deleted file mode 100644
index 331b5e7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/testFail0/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	private int f;
-	private int g;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/testFail1/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/testFail1/in/A.java
deleted file mode 100644
index 4400551..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/testFail1/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	private int f;
-	private String g;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/testFail10/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/testFail10/in/A.java
deleted file mode 100644
index 186e8f5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/testFail10/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class setE{
-	int y;
-	public int getY() {
-		return y;
-	}
-	public void setY(int y) {
-		this.y = y;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/testFail2/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/testFail2/in/A.java
deleted file mode 100644
index 0797e05..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/testFail2/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	private int f;
-	private static int g;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/testFail3/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/testFail3/in/A.java
deleted file mode 100644
index e1abbc3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/testFail3/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	private int f;
-	public static int g;	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/testFail4/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/testFail4/in/A.java
deleted file mode 100644
index 86f7550..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/testFail4/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	private int f;
-	public Object g;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/testFail5/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/testFail5/in/A.java
deleted file mode 100644
index 96e2633..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/testFail5/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class B {
-	int g;
-	class A {
-		private int f;
-	}
-}	
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/testFail6/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/testFail6/in/A.java
deleted file mode 100644
index d688226..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/testFail6/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A {
-	private int f;
-	class B {
-		private int g;
-	}
-}	
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/testFail7/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/testFail7/in/A.java
deleted file mode 100644
index a09bd64..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/testFail7/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A{
-	private int f;
-	void m(){
-		try{
-			f++;
-		} catch (Exception g){
-			f++;
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/testFail8/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/testFail8/in/A.java
deleted file mode 100644
index dc2e17d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/testFail8/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A{
-	int gg;
-	class C{
-		int f;
-		void m(){
-			gg++;
-		}	
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/testFail9/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/testFail9/in/A.java
deleted file mode 100644
index d1005b0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateField/testFail9/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class getE{
-	int y;
-	public int getY() {
-		return y;
-	}
-	public void setY(int y) {
-		this.y = y;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test0/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test0/in/A.java
deleted file mode 100644
index bbcc717..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test0/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-//renaming A.m to k
-class A {
-	private void m(){}
-	class B{
-		void f(){
-			m();
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test0/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test0/out/A.java
deleted file mode 100644
index c4e4056..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test0/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-//renaming A.m to k
-class A {
-	private void k(){}
-	class B{
-		void f(){
-			k();
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test10/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test10/in/A.java
deleted file mode 100644
index 855db73..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test10/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-//renaming A.m to k
-class A {
-	private void m(){}
-}
-class B {
-	void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test10/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test10/out/A.java
deleted file mode 100644
index 8040304..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test10/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-//renaming A.m to k
-class A {
-	private void k(){}
-}
-class B {
-	void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test11/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test11/in/A.java
deleted file mode 100644
index 41938b9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test11/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-//renaming A.m to k
-class A {
-	private void m(){}
-}
-class B extends A{
-	void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test11/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test11/out/A.java
deleted file mode 100644
index 4fb51dd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test11/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-//renaming A.m to k
-class A {
-	private void k(){}
-}
-class B extends A{
-	void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test12/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test12/in/A.java
deleted file mode 100644
index 1bfd88f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test12/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-//renaming A.m to k
-class A {
-	private void m(){}
-}
-class B extends A{
-	public void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test12/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test12/out/A.java
deleted file mode 100644
index ae12fdb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test12/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-//renaming A.m to k
-class A {
-	private void k(){}
-}
-class B extends A{
-	public void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test13/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test13/in/A.java
deleted file mode 100644
index 2b3e68b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test13/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-//renaming A.m to k
-class B{
-	private void m(){
-	}
-	void f(){
-		m();
-	}
-}
-class A extends B{
-	private void m(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test13/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test13/out/A.java
deleted file mode 100644
index 900894d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test13/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-//renaming A.m to k
-class B{
-	private void m(){
-	}
-	void f(){
-		m();
-	}
-}
-class A extends B{
-	private void k(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test14/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test14/in/A.java
deleted file mode 100644
index d189f8a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test14/in/A.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package p;
-//renaming A.m to k
-class B{
-	private void k(){
-	}
-	void f(){
-		k();
-	}
-}
-class A extends B{
-	private void m(){
-	}
-	void f(){
-		m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test14/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test14/out/A.java
deleted file mode 100644
index 2919161..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test14/out/A.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package p;
-//renaming A.m to k
-class B{
-	private void k(){
-	}
-	void f(){
-		k();
-	}
-}
-class A extends B{
-	private void k(){
-	}
-	void f(){
-		k();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test15/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test15/in/A.java
deleted file mode 100644
index 489be30..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test15/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//renaming A.m to k
-class A{
-	private int m(int m){
-		return m(m(m));
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test15/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test15/out/A.java
deleted file mode 100644
index 1eb3f1e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test15/out/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//renaming A.m to k
-class A{
-	private int k(int m){
-		return k(k(m));
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test16/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test16/in/A.java
deleted file mode 100644
index 130501a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test16/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//renaming A.m to fred
-class A{
-	private int m(int m){
-		return m(m(m));
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test16/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test16/out/A.java
deleted file mode 100644
index 03bab78..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test16/out/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//renaming A.m to fred
-class A{
-	private int fred(int m){
-		return fred(fred(m));
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test17/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test17/in/A.java
deleted file mode 100644
index 7ddf22d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test17/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//renaming A.m to kk
-package p;
-public class A {
-	private void m(int m){}
-}
-class B extends A{
-	void m(boolean m){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test17/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test17/out/A.java
deleted file mode 100644
index 6d4f71c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test17/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//renaming A.m to kk
-package p;
-public class A {
-	private void kk(int m){}
-}
-class B extends A{
-	void m(boolean m){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test18/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test18/in/A.java
deleted file mode 100644
index 588b82d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test18/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//renaming B.m to kk
-package p;
-class B {
-	private void m(int m) {
-	}
-
-}
-public class A extends B {
-	void m(int m) {
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test18/in/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test18/in/C.java
deleted file mode 100644
index 4794cc8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test18/in/C.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class C{
-	void k(){
-		new A().m(4);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test18/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test18/out/A.java
deleted file mode 100644
index af4db05..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test18/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//renaming B.m to kk
-package p;
-class B {
-	private void kk(int m) {
-	}
-
-}
-public class A extends B {
-	void m(int m) {
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test18/out/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test18/out/C.java
deleted file mode 100644
index 4794cc8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test18/out/C.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class C{
-	void k(){
-		new A().m(4);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test2/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test2/in/A.java
deleted file mode 100644
index 36ded4c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test2/in/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-//renaming A.m to fred
-package p;
-public class A{
-	private void m() {
-	}
-	void k(){
-		A a= new A();
-		a
-		.
-		m ();
-	}
-	
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test2/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test2/out/A.java
deleted file mode 100644
index a8cd235..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test2/out/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-//renaming A.m to fred
-package p;
-public class A{
-	private void fred() {
-	}
-	void k(){
-		A a= new A();
-		a
-		.
-		fred ();
-	}
-	
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test20/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test20/in/A.java
deleted file mode 100644
index 357e768..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test20/in/A.java
+++ /dev/null
@@ -1,23 +0,0 @@
-//renaming A.m to fred
-package p;
-public class A{
-	private int m(int m) {
-		return m	(	m	)	;
-	}
-		void k(){
-		A a= new A();
-		a
-	.
-		m 
-			(
-			a
-				.
-	m	
-				(
-					6
-			)	
-			
-		);
-	}
-	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test20/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test20/out/A.java
deleted file mode 100644
index 47a8800..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test20/out/A.java
+++ /dev/null
@@ -1,23 +0,0 @@
-//renaming A.m to fred
-package p;
-public class A{
-	private int fred(int m) {
-		return fred	(	m	)	;
-	}
-		void k(){
-		A a= new A();
-		a
-	.
-		fred 
-			(
-			a
-				.
-	fred	
-				(
-					6
-			)	
-			
-		);
-	}
-	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test23/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test23/in/A.java
deleted file mode 100644
index e19f4ef..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test23/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-//renaming A.m to k
-class A{
-	private void m(){
-	}
-}
-class test{
-	void m(){
-		class X extends A{
-			void m(){
-		}
-	}
-}}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test23/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test23/out/A.java
deleted file mode 100644
index 572f93c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test23/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-//renaming A.m to k
-class A{
-	private void k(){
-	}
-}
-class test{
-	void m(){
-		class X extends A{
-			void m(){
-		}
-	}
-}}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test24/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test24/in/A.java
deleted file mode 100644
index eb9c053..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test24/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-//renaming A.m to k
-class A{
-	private void m(String s){
-	}
-}
-class B extends A{
-	void m(java.lang.String s){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test24/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test24/out/A.java
deleted file mode 100644
index cf5dc6f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test24/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-//renaming A.m to k
-class A{
-	private void k(String s){
-	}
-}
-class B extends A{
-	void m(java.lang.String s){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test25/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test25/in/A.java
deleted file mode 100644
index 433c5a7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test25/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-//renaming A.m to k
-class A{
-	private void m(String[] s){
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test25/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test25/out/A.java
deleted file mode 100644
index 1e65a26..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test25/out/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-//renaming A.m to k
-class A{
-	private void k(String[] s){
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test26/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test26/in/A.java
deleted file mode 100644
index 913e471..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test26/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//renaming A.m to k 
-package p;
-
-class A{
-	private void m(){
-		this.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test26/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test26/out/A.java
deleted file mode 100644
index 950b977..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test26/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//renaming A.m to k 
-package p;
-
-class A{
-	private void k(){
-		this.k();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test27/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test27/in/A.java
deleted file mode 100644
index bb7ad49..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test27/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//no ref update
-//renaming A.m to k 
-package p;
-
-class A{
-	private void m(){
-		this.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test27/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test27/out/A.java
deleted file mode 100644
index f4deb45..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/test27/out/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//no ref update
-//renaming A.m to k 
-package p;
-
-class A{
-	private void k(){
-		this.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/testAnon0/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/testAnon0/in/A.java
deleted file mode 100644
index 2526bba..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/testAnon0/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-//renaming A.m to k
-public class A {
-	private void m(){}
-}
-class B{
-	void f(){
-		A a= new A(){
-			void m(){
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/testAnon0/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/testAnon0/out/A.java
deleted file mode 100644
index 730610f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/testAnon0/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-//renaming A.m to k
-public class A {
-	private void k(){}
-}
-class B{
-	void f(){
-		A a= new A(){
-			void m(){
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/testFail0/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/testFail0/in/A.java
deleted file mode 100644
index 946d84c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/testFail0/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-//can't rename native methods
-class A{
- 	private native void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/testFail1/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/testFail1/in/A.java
deleted file mode 100644
index ef9f460..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/testFail1/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-//can't rename m to k
-class A{
- 	private void m(){}
- 	private void k(){}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/testFail2/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/testFail2/in/A.java
deleted file mode 100644
index 8ad56a9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/testFail2/in/A.java
+++ /dev/null
@@ -1,17 +0,0 @@
-//can't rename A.m to k
-package p;
-
-class X {
-	void k(){
-	}
-}
-class A {
-	private void m(){
-		System.out.println("a");
-	}
-	class B extends X{
-		void f(){
-			m();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/testFail5/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/testFail5/in/A.java
deleted file mode 100644
index 36269e5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/testFail5/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-public class A {
-	private void m(){}
-	class B{
-		void k(){
-			m();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test0/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test0/in/A.java
deleted file mode 100644
index 408f8be..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test0/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-	static void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test0/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test0/out/A.java
deleted file mode 100644
index a8ca53b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test0/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-	static void k(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test1/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test1/in/A.java
deleted file mode 100644
index e48131f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test1/in/A.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package p;
-class A{
-	static void m(){
-	}
-	void f(){
-		m();
-	}
-	static int fred(){
-		m();
-		return 0;
-	}
-}
-class B{
-	static void m(){
-		A.m();
-		new A().m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test1/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test1/out/A.java
deleted file mode 100644
index e645c03..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test1/out/A.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package p;
-class A{
-	static void k(){
-	}
-	void f(){
-		k();
-	}
-	static int fred(){
-		k();
-		return 0;
-	}
-}
-class B{
-	static void m(){
-		A.k();
-		new A().k();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test2/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test2/in/A.java
deleted file mode 100644
index 9f1d3b6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test2/in/A.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package p;
-class A{
-	static void m(){
-	}
-	void f(){
-		m();
-	}
-	static int fred(){
-		m();
-		return 1;
-	}
-	{
-		A.m();
-		m();
-		new A().m();
-	}
-	static {
-		A.m();
-		m();
-		new A().m();
-	}
-}
-class D{
-	static void m(){
-		A.m();
-		new A().m();
-		m();
-	}
-	static {
-		A.m();
-		new A().m();
-		m();
-	}
-	{
-		A.m();
-		new A().m();
-		m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test2/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test2/out/A.java
deleted file mode 100644
index 81351b6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test2/out/A.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package p;
-class A{
-	static void k(){
-	}
-	void f(){
-		k();
-	}
-	static int fred(){
-		k();
-		return 1;
-	}
-	{
-		A.k();
-		k();
-		new A().k();
-	}
-	static {
-		A.k();
-		k();
-		new A().k();
-	}
-}
-class D{
-	static void m(){
-		A.k();
-		new A().k();
-		m();
-	}
-	static {
-		A.k();
-		new A().k();
-		m();
-	}
-	{
-		A.k();
-		new A().k();
-		m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test3/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test3/in/A.java
deleted file mode 100644
index ede5a5c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test3/in/A.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package p;
-class A{
-static void m(){}
-}
-class B extends A{
-
-}
-class Test{
-void f(){
-	new A().m();
-	A.m();
-	new B().m();
-	B.m();
-}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test3/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test3/out/A.java
deleted file mode 100644
index d010dcb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test3/out/A.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package p;
-class A{
-static void k(){}
-}
-class B extends A{
-
-}
-class Test{
-void f(){
-	new A().k();
-	A.k();
-	new B().k();
-	B.k();
-}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test4/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test4/in/A.java
deleted file mode 100644
index 9284825..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test4/in/A.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package p;
-class A{
-static void m(){}
-}
-class B extends A{
-static void m(){};
-}
-class Test{
-void f(){
-	new A().m();
-	A.m();
-	new B().m();
-	B.m();
-}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test4/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test4/out/A.java
deleted file mode 100644
index c86867f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test4/out/A.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package p;
-class A{
-static void k(){}
-}
-class B extends A{
-static void m(){};
-}
-class Test{
-void f(){
-	new A().k();
-	A.k();
-	new B().m();
-	B.m();
-}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test5/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test5/in/A.java
deleted file mode 100644
index 676e688..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test5/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-//renaming A.m to k
-class A {
-	static void m(){}
-	class B{
-		void f(){
-			m();
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test5/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test5/out/A.java
deleted file mode 100644
index d961d76..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test5/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-//renaming A.m to k
-class A {
-	static void k(){}
-	class B{
-		void f(){
-			k();
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test6/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test6/in/A.java
deleted file mode 100644
index d1cea87..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test6/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-//renaming A.m to k
-class A{
-	static void m(){
-	}
-}
-class test1{
-	void m(){
-		class X extends A{
-			void mm(){
-		}
-	}
-}}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test6/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test6/out/A.java
deleted file mode 100644
index f1bbca3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test6/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-//renaming A.m to k
-class A{
-	static void k(){
-	}
-}
-class test1{
-	void m(){
-		class X extends A{
-			void mm(){
-		}
-	}
-}}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test7/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test7/in/A.java
deleted file mode 100644
index 13de2de..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test7/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//renaming A.m to k
-class A{
-	static int m(int m){
-		return m(m(m));
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test7/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test7/out/A.java
deleted file mode 100644
index f8d3899..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test7/out/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//renaming A.m to k
-class A{
-	static int k(int m){
-		return k(k(m));
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test8/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test8/in/A.java
deleted file mode 100644
index b1f304f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test8/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-//renaming A.m to k
-class A{
-	static int m(int m){
-		return m(m(m));
-	}
-}
-
-class B extends A{
-	static int m(int m){
-		return m(m(m));
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test8/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test8/out/A.java
deleted file mode 100644
index 3dd2377..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test8/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-//renaming A.m to k
-class A{
-	static int k(int m){
-		return k(k(m));
-	}
-}
-
-class B extends A{
-	static int m(int m){
-		return m(m(m));
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test9/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test9/in/A.java
deleted file mode 100644
index 3e09fbc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test9/in/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-//no ref update
-package p;
-//renaming A.m to k
-class A{
-	static int m(int m){
-		return m(m(m));
-	}
-}
-
-class B extends A{
-	static int m(int m){
-		return m(m(m));
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test9/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test9/out/A.java
deleted file mode 100644
index 4f11385..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/test9/out/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-//no ref update
-package p;
-//renaming A.m to k
-class A{
-	static int k(int m){
-		return m(m(m));
-	}
-}
-
-class B extends A{
-	static int m(int m){
-		return m(m(m));
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/testFail0/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/testFail0/in/A.java
deleted file mode 100644
index 515cf69..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/testFail0/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-//can't rename native methods
-class A{
- 	static private native void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/testFail1/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/testFail1/in/A.java
deleted file mode 100644
index 64520ec..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/testFail1/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-//can't rename m to k
-class A{
- 	static private void m(){}
- 	static private void k(){}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/testFail2/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/testFail2/in/A.java
deleted file mode 100644
index 2560341..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/testFail2/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-//can't rename m to k
-class B{
- 	void k(){}	
-}
-class A extends B{
- 	static public void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/testFail4/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/testFail4/in/A.java
deleted file mode 100644
index 32fda7c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/testFail4/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-//can't rename m to k
-class A{
- 	static public void m(){}
- 	void k(){}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/testFail5/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/testFail5/in/A.java
deleted file mode 100644
index 43d650a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/testFail5/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-//can't rename native methods
-class A{
- 	static native void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/testFail6/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/testFail6/in/A.java
deleted file mode 100644
index 2cedaae..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/testFail6/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-//can't rename m to k
-class A{
- 	static public void m(){}
- 	static public void k(){}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/testFail7/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/testFail7/in/A.java
deleted file mode 100644
index 9bacef7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/testFail7/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-//can't rename m to k
-class A{
- 	static public void m(){}
- 	static private void k(){}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/testFail8/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/testFail8/in/A.java
deleted file mode 100644
index d0d9225..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameStaticMethod/testFail8/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-//can't rename m to k
-class A{
- 	static public void m(){}
- 	private void k(){}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_in.java
deleted file mode 100644
index 0519ecb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_in.java
+++ /dev/null
@@ -1 +0,0 @@
- 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_out.java
deleted file mode 100644
index 0519ecb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_out.java
+++ /dev/null
@@ -1 +0,0 @@
- 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test0_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test0_in.java
deleted file mode 100644
index f71f3f2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test0_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-//rename to: j
-package p;
-class A{
-	void m(int i){
-		/*[*/int x;/*]*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test0_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test0_out.java
deleted file mode 100644
index bf34341..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test0_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-//rename to: j
-package p;
-class A{
-	void m(int i){
-		/*[*/int j;/*]*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test11_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test11_in.java
deleted file mode 100644
index 67a8cd6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test11_in.java
+++ /dev/null
@@ -1,13 +0,0 @@
-//rename to j
-package p;
-class A{
-	int k;
-	void m(){
-		/*[*/int i= 0;/*]*/
-		A a= new A(){
-			void m(int i){
-				i++;
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test11_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test11_out.java
deleted file mode 100644
index 4978fef..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test11_out.java
+++ /dev/null
@@ -1,13 +0,0 @@
-//rename to j
-package p;
-class A{
-	int k;
-	void m(){
-		/*[*/int j= 0;/*]*/
-		A a= new A(){
-			void m(int i){
-				i++;
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test12_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test12_in.java
deleted file mode 100644
index c16fcfb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test12_in.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//rename to j
-package p;
-class A{
-	void m(){
-		/*[*/final int i= 0;/*]*/
-		A a= new A(){
-			void m(int k){
-				k= i;
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test12_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test12_out.java
deleted file mode 100644
index e4695ef..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test12_out.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//rename to j
-package p;
-class A{
-	void m(){
-		/*[*/final int j= 0;/*]*/
-		A a= new A(){
-			void m(int k){
-				k= j;
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test13_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test13_in.java
deleted file mode 100644
index 4e72d66..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test13_in.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//rename to: j
-package p;
-class A{
-	void m(){
-		/*[*/int i= 0;/*]*/
-	}
-	void n(){
-		int i= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test13_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test13_out.java
deleted file mode 100644
index 584acd5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test13_out.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//rename to: j
-package p;
-class A{
-	void m(){
-		/*[*/int j= 0;/*]*/
-	}
-	void n(){
-		int i= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test14_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test14_in.java
deleted file mode 100644
index 116a06b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test14_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//rename to: j
-package p;
-class A{
-	A i;
-	A m(A k){
-		/*[*/A i= k;/*]*/
-		return i.m(i.m(this.i));
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test14_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test14_out.java
deleted file mode 100644
index a3aa71f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test14_out.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//rename to: j
-package p;
-class A{
-	A i;
-	A m(A k){
-		/*[*/A j= k;/*]*/
-		return j.m(j.m(this.i));
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test15_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test15_in.java
deleted file mode 100644
index 0f40090..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test15_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//rename to: j, i
-package p;
-class A{
-	int m(){
-		int i= 0;
-		int j= 0;
-		return i + j;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test15_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test15_out.java
deleted file mode 100644
index 8e32cee..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test15_out.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//rename to: j, i
-package p;
-class A{
-	int m(){
-		int j= 0;
-		int i= 0;
-		return j + i;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test16_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test16_in.java
deleted file mode 100644
index 9b7f390..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test16_in.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	void m(){
-		/*[*/int i= 0;/*]*/
-		class X{
-			int j;
-		}
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test16_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test16_out.java
deleted file mode 100644
index 191ba70..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test16_out.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	void m(){
-		/*[*/int j= 0;/*]*/
-		class X{
-			int j;
-		}
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test17_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test17_in.java
deleted file mode 100644
index fd51317..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test17_in.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//renaming to: j, i, k
-package p;
-class A{
-	int l;
-	int m(){
-		int i= 0; int j= 0; int k= 0;
-		int m= 0;
-		return i + j + k + l + m;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test17_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test17_out.java
deleted file mode 100644
index 5f45c44..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test17_out.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//renaming to: j, i, k
-package p;
-class A{
-	int l;
-	int m(){
-		int j= 0; int i= 0; int k= 0;
-		int m= 0;
-		return j + i + k + l + m;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test18_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test18_in.java
deleted file mode 100644
index 9e77ec5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test18_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	void m(){
-		/*[*/Object i= null;/*]*/
-		class j{}
-		i= new j();
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test18_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test18_out.java
deleted file mode 100644
index 64d3656..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test18_out.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	void m(){
-		/*[*/Object j= null;/*]*/
-		class j{}
-		j= new j();
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test19_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test19_in.java
deleted file mode 100644
index 4c3e81b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test19_in.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	A i;
-	void m(){
-		/*[*/A i= null;/*]*/
-		i.toString();
-		i.equals(i.toString());
-		i.i.i= i;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test19_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test19_out.java
deleted file mode 100644
index f17c07e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test19_out.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	A i;
-	void m(){
-		/*[*/A j= null;/*]*/
-		j.toString();
-		j.equals(j.toString());
-		j.i.i= j;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test1_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test1_in.java
deleted file mode 100644
index 4b9b7f5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test1_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//rename to: j
-package p;
-class A{
-	void m(int i){
-		/*[*/int x= 0;/*]*/
-		x++;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test1_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test1_out.java
deleted file mode 100644
index 9ccc2fd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test1_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//rename to: j
-package p;
-class A{
-	void m(int i){
-		/*[*/int j= 0;/*]*/
-		j++;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test20_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test20_in.java
deleted file mode 100644
index 93cfd79..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test20_in.java
+++ /dev/null
@@ -1,17 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	Object m(){
-		/*[*/i i= new i();/*]*/
-		i.i.i= i.i;
-		i:{
-			while(true){
-				break i;
-				return i;
-			}
-		}
-	};
-}
-class i{
-	i i;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test20_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test20_out.java
deleted file mode 100644
index f25454f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test20_out.java
+++ /dev/null
@@ -1,17 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	Object m(){
-		/*[*/i j= new i();/*]*/
-		j.i.i= j.i;
-		i:{
-			while(true){
-				break i;
-				return j;
-			}
-		}
-	};
-}
-class i{
-	i i;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test21_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test21_in.java
deleted file mode 100644
index 92bbaa8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test21_in.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	void m(){
-		/*[*/int i= 0;/*]*/
-		int[] o= new int[8];
-		for (; i == i;){
-			i++;
-			o[++i]= i ==7 ? i: i + i;
-		}
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test21_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test21_out.java
deleted file mode 100644
index b71303d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test21_out.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	void m(){
-		/*[*/int j= 0;/*]*/
-		int[] o= new int[8];
-		for (; j == j;){
-			j++;
-			o[++j]= j ==7 ? j: j + j;
-		}
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test22_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test22_in.java
deleted file mode 100644
index 1fb8ffb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test22_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	int i;
-	void m(){
-		/*[*/int i=0;/*]*/
-		int u= i + this.i;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test22_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test22_out.java
deleted file mode 100644
index d48a637..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test22_out.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	int i;
-	void m(){
-		/*[*/int j=0;/*]*/
-		int u= j + this.i;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test23_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test23_in.java
deleted file mode 100644
index 52db869..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test23_in.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//renaming to: j, i
-package p;
-class A{
-	int j;
-	int m(){
-		final int i= 0;
-		int j=0;
-		return i + j;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test23_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test23_out.java
deleted file mode 100644
index fcd2d7c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test23_out.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//renaming to: j, i
-package p;
-class A{
-	int j;
-	int m(){
-		final int j= 0;
-		int i=0;
-		return j + i;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test24_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test24_in.java
deleted file mode 100644
index 2d12d0e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test24_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	int i;
-	void m(){
-		/*[*/int i= 0;/*]*/
-		this.i= i;
-	};
-} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test24_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test24_out.java
deleted file mode 100644
index fe8bce5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test24_out.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	int i;
-	void m(){
-		/*[*/int j= 0;/*]*/
-		this.i= j;
-	};
-} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test25_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test25_in.java
deleted file mode 100644
index e3b0e33..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test25_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	int j;
-	int m(int k){
-		/*[*/int i= 0;/*]*/
-		return i + m(m(i));
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test25_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test25_out.java
deleted file mode 100644
index 49876d7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test25_out.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	int j;
-	int m(int k){
-		/*[*/int j= 0;/*]*/
-		return j + m(m(j));
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test26_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test26_in.java
deleted file mode 100644
index 94012bf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test26_in.java
+++ /dev/null
@@ -1,14 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	int j;
-	int m(int k){
-		/*[*/int i= 0;/*]*/
-		new A(){
-			int m(int i){
-				return i;
-			}
-		};
-		return i + m(m(i));
-	};
-}   
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test26_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test26_out.java
deleted file mode 100644
index 74f7290..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test26_out.java
+++ /dev/null
@@ -1,14 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	int j;
-	int m(int k){
-		/*[*/int j= 0;/*]*/
-		new A(){
-			int m(int i){
-				return i;
-			}
-		};
-		return j + m(m(j));
-	};
-}   
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test27_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test27_in.java
deleted file mode 100644
index e6ab7b3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test27_in.java
+++ /dev/null
@@ -1,14 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	int j;
-	int m(final int k){
-		/*[*/final int i= 0;/*]*/
-		new A(){
-			int m(int o){
-				return i;
-			}
-		};
-		return i + m(m(i));
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test27_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test27_out.java
deleted file mode 100644
index d78371c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test27_out.java
+++ /dev/null
@@ -1,14 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	int j;
-	int m(final int k){
-		/*[*/final int j= 0;/*]*/
-		new A(){
-			int m(int o){
-				return j;
-			}
-		};
-		return j + m(m(j));
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test28_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test28_in.java
deleted file mode 100644
index 9feda86..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test28_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	int m(){
-		/*[*/int[] i= null;/*]*/
-		i[0]= 0;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test28_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test28_out.java
deleted file mode 100644
index f7165bd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test28_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	int m(){
-		/*[*/int[] j= null;/*]*/
-		j[0]= 0;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test29_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test29_in.java
deleted file mode 100644
index d41c025..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test29_in.java
+++ /dev/null
@@ -1,14 +0,0 @@
-//renaming to b
-package p;
-class A{
-   A A;
-   A m(A y){
-	/*[*/A A= new A();/*]*/
-     A:
-        for (;;){
-          if (A.m(A)==A)
-             break A;
-        }
-      return A;
-   };
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test29_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test29_out.java
deleted file mode 100644
index c444420..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test29_out.java
+++ /dev/null
@@ -1,14 +0,0 @@
-//renaming to b
-package p;
-class A{
-   A A;
-   A m(A y){
-	/*[*/A b= new A();/*]*/
-     A:
-        for (;;){
-          if (b.m(b)==b)
-             break A;
-        }
-      return b;
-   };
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test2_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test2_in.java
deleted file mode 100644
index 9c0a760..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test2_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//rename to: j, k
-package p;
-class A{
-	void m(){
-		int x;
-		int y;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test2_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test2_out.java
deleted file mode 100644
index 2c78ee7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test2_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//rename to: j, k
-package p;
-class A{
-	void m(){
-		int j;
-		int k;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test30_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test30_in.java
deleted file mode 100644
index 87c8411..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test30_in.java
+++ /dev/null
@@ -1,14 +0,0 @@
-//renaming to i, k
-package p;
-class A{
-	private void m(){
-		final int i= 0;
-		/*[*/int j= 0;/*]*/
-		class J{
-			int k;
-			void k(){
-				k= k;
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test30_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test30_out.java
deleted file mode 100644
index cdf72b3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test30_out.java
+++ /dev/null
@@ -1,14 +0,0 @@
-//renaming to i, k
-package p;
-class A{
-	private void m(){
-		final int i= 0;
-		/*[*/int k= 0;/*]*/
-		class J{
-			int k;
-			void k(){
-				k= k;
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test31_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test31_in.java
deleted file mode 100644
index a511df2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test31_in.java
+++ /dev/null
@@ -1,14 +0,0 @@
-//renaming to kk, j
-package p;
-class A{
-	private void m(){
-		/*[*/final int i= 0;/*]*/
-		int j= 0;
-		new Object(){
-			int kk;
-			void fred(){
-				kk= 0;
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test31_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test31_out.java
deleted file mode 100644
index 214ad2e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test31_out.java
+++ /dev/null
@@ -1,14 +0,0 @@
-//renaming to kk, j
-package p;
-class A{
-	private void m(){
-		/*[*/final int kk= 0;/*]*/
-		int j= 0;
-		new Object(){
-			int kk;
-			void fred(){
-				kk= 0;
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test32_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test32_in.java
deleted file mode 100644
index cae4075..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test32_in.java
+++ /dev/null
@@ -1,5 +0,0 @@
-//rename to j
-package p;
-class A{
-	A(){/*[*/int i= 0;/*]*/}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test32_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test32_out.java
deleted file mode 100644
index 9d6544f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test32_out.java
+++ /dev/null
@@ -1,5 +0,0 @@
-//rename to j
-package p;
-class A{
-	A(){/*[*/int j= 0;/*]*/}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test33_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test33_in.java
deleted file mode 100644
index 2b9907e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test33_in.java
+++ /dev/null
@@ -1,14 +0,0 @@
-//renaming to b, no ref update
-package p;
-class A{
-   A A;
-   A m(A a){
-   	/*[*/A A= null;/*]*/
-     A:
-        for (;;){
-          if (A.m(A)==A)
-             break A;
-        }
-      return A;
-   };
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test33_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test33_out.java
deleted file mode 100644
index efcb193..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test33_out.java
+++ /dev/null
@@ -1,14 +0,0 @@
-//renaming to b, no ref update
-package p;
-class A{
-   A A;
-   A m(A a){
-   	/*[*/A b= null;/*]*/
-     A:
-        for (;;){
-          if (A.m(A)==A)
-             break A;
-        }
-      return A;
-   };
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test34_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test34_in.java
deleted file mode 100644
index bbac062..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test34_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-	int j;
-   void m(){
-   	j= 0;
-   	/*[*/int i= 0;/*]*/
-   	i++;
-   };
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test34_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test34_out.java
deleted file mode 100644
index ddf5fb7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test34_out.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-	int j;
-   void m(){
-   	j= 0;
-   	/*[*/int j= 0;/*]*/
-   	j++;
-   };
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test35_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test35_in.java
deleted file mode 100644
index 6880fe7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test35_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	public void testRLV() {
-	        /*[*/boolean test = true;/*]*/
-	        boolean t= (test);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test35_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test35_out.java
deleted file mode 100644
index 0ca07bb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test35_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	public void testRLV() {
-	        /*[*/boolean test2 = true;/*]*/
-	        boolean t= (test2);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test36_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test36_in.java
deleted file mode 100644
index 61a3030..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test36_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-//rename to: j
-package p;
-class A{
-	void f(){
-		int y, i;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test36_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test36_out.java
deleted file mode 100644
index 02465d5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test36_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-//rename to: j
-package p;
-class A{
-	void f(){
-		int j, i;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test37_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test37_in.java
deleted file mode 100644
index 61a3030..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test37_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-//rename to: j
-package p;
-class A{
-	void f(){
-		int y, i;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test37_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test37_out.java
deleted file mode 100644
index de555ce..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test37_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-//rename to: j
-package p;
-class A{
-	void f(){
-		int y, j;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test38_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test38_in.java
deleted file mode 100644
index 594d3eb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test38_in.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//rename to: i
-package p;
-class A{
-void m(){
-   for(int i= 0; i < 1; i++){
-   }
-   for(int j= 0; j < 1; j++){
-   }
-}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test38_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test38_out.java
deleted file mode 100644
index 12f77ab..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test38_out.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//rename to: i
-package p;
-class A{
-void m(){
-   for(int i= 0; i < 1; i++){
-   }
-   for(int i= 0; i < 1; i++){
-   }
-}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test39_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test39_in.java
deleted file mode 100644
index 3f76b65..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test39_in.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class Test {
-	private static final String G= I.GR;
-	
-	public static void c(){
-		Object cp= null;
-	}
-}
-interface I {
-	String GR= "l";
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test39_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test39_out.java
deleted file mode 100644
index 684a8c4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test39_out.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class Test {
-	private static final String G= I.GR;
-	
-	public static void c(){
-		Object j= null;
-	}
-}
-interface I {
-	String GR= "l";
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test3_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test3_in.java
deleted file mode 100644
index 5bdf06c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test3_in.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//rename to: j1
-package p;
-class A{
-	int m(){
-		{
-				int i= 0;
-		 /*[*/int k= 0;/*]*/
-			
-			return i + k;
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test3_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test3_out.java
deleted file mode 100644
index 8322129..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test3_out.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//rename to: j1
-package p;
-class A{
-	int m(){
-		{
-				int i= 0;
-		 /*[*/int j1= 0;/*]*/
-			
-			return i + j1;
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test40_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test40_in.java
deleted file mode 100644
index add6925..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test40_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void m(int i, int i2){
-		int temp= i + i2;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test40_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test40_out.java
deleted file mode 100644
index 3056438..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test40_out.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void m(int j, int i2){
-		int temp= j + i2;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test41_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test41_in.java
deleted file mode 100644
index 1e4c907..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test41_in.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-interface A{
-	 void m(int i, int k);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test41_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test41_out.java
deleted file mode 100644
index ef61197..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test41_out.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-interface A{
-	 void m(int j, int k);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test42_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test42_in.java
deleted file mode 100644
index cb503c5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test42_in.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-abstract class A{
-	abstract void m(int i);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test42_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test42_out.java
deleted file mode 100644
index cae5db3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test42_out.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-abstract class A{
-	abstract void m(int j);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test43_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test43_in.java
deleted file mode 100644
index 35d3439..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test43_in.java
+++ /dev/null
@@ -1,5 +0,0 @@
-//rename to j
-package p;
-class A{
-	native void m(int i);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test43_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test43_out.java
deleted file mode 100644
index 58f2f20..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test43_out.java
+++ /dev/null
@@ -1,5 +0,0 @@
-//rename to j
-package p;
-class A{
-	native void m(int j);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test44_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test44_in.java
deleted file mode 100644
index d9a29f0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test44_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//rename var to: j
-package p;
-abstract class Test {
-  public static final Test FOO = new Test() {
-    public void foo() {
-      int var = 1;
-    }
-  };
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test44_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test44_out.java
deleted file mode 100644
index cf0ec5a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test44_out.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//rename var to: j
-package p;
-abstract class Test {
-  public static final Test FOO = new Test() {
-    public void foo() {
-      int j = 1;
-    }
-  };
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test45_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test45_in.java
deleted file mode 100644
index ae5e101..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test45_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void m(){
-		int xx;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test45_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test45_out.java
deleted file mode 100644
index 84a8dd0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test45_out.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void m(){
-		int j;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test46_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test46_in.java
deleted file mode 100644
index 652e982..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test46_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	void m(){
-		int xx= 1;
-		int yy= xx;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test46_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test46_out.java
deleted file mode 100644
index 5258afa..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test46_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	void m(){
-		int j= 1;
-		int yy= j;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test47_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test47_in.java
deleted file mode 100644
index 46d7a51..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test47_in.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-class A {
-	Bar.B[] field= new Bar.B[]{
-		new Bar.B()
-	};
-	void f(){
-		int temp;
-	}
-}
-
-class Bar{
-	static class B{}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test47_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test47_out.java
deleted file mode 100644
index 0293a22..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test47_out.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-class A {
-	Bar.B[] field= new Bar.B[]{
-		new Bar.B()
-	};
-	void f(){
-		int newname;
-	}
-}
-
-class Bar{
-	static class B{}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test48_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test48_in.java
deleted file mode 100644
index 39272a6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test48_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A {
-	void f(){
-		String xxxx= "xx";
-		String y= ( xxxx );
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test48_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test48_out.java
deleted file mode 100644
index 2815166..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test48_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A {
-	void f(){
-		String newname= "xx";
-		String y= ( newname );
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test4_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test4_in.java
deleted file mode 100644
index b61b8be..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test4_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//rename to: k
-package p;
-class A{
-	int k;
-	void m(){
-		/*[*/A i= new A();/*]*/
-		i.k= i.k;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test4_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test4_out.java
deleted file mode 100644
index 8498999..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test4_out.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//rename to: k
-package p;
-class A{
-	int k;
-	void m(){
-		/*[*/A k= new A();/*]*/
-		k.k= k.k;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test5_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test5_in.java
deleted file mode 100644
index c31e46e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test5_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//rename to: k
-package p;
-class A{
-	int i;
-	void m(){
-		/*[*/int i= 0;/*]*/
-		this.i= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test5_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test5_out.java
deleted file mode 100644
index 9d1eb2b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test5_out.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//rename to: k
-package p;
-class A{
-	int i;
-	void m(){
-		/*[*/int k= 0;/*]*/
-		this.i= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test6_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test6_in.java
deleted file mode 100644
index c8fd8a6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test6_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//rename to k
-package p;
-class A{
-	void m(int j){
-		/*[*/int i= 0;/*]*/
-		m(i);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test6_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test6_out.java
deleted file mode 100644
index 793677a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test6_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//rename to k
-package p;
-class A{
-	void m(int j){
-		/*[*/int k= 0;/*]*/
-		m(k);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test7_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test7_in.java
deleted file mode 100644
index 7dca340..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test7_in.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//rename to k
-package p;
-class B{
-	int i;
-}
-class A extends B{
-	void m(){
-		/*[*/A i= null;/*]*/
-		super.i= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test7_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test7_out.java
deleted file mode 100644
index 5053c50..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/canRename/A_test7_out.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//rename to k
-package p;
-class B{
-	int i;
-}
-class A extends B{
-	void m(){
-		/*[*/A k= null;/*]*/
-		super.i= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail0.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail0.java
deleted file mode 100644
index b2ff9fd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail0.java
+++ /dev/null
@@ -1,13 +0,0 @@
-//cannot rename to: j
-package p;
-class A{
-	void m(){
-		/*[*/final int i= 0;/*]*/
-		class X{
-			int j;
-			void m(){
-				j= i;
-			}
-		}
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail1.java
deleted file mode 100644
index 2ee470f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail1.java
+++ /dev/null
@@ -1,7 +0,0 @@
-//nothing to rename
-package p;
-class A{
-	void m(){
-		/*[*//*]*/
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail10.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail10.java
deleted file mode 100644
index 9926ebf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail10.java
+++ /dev/null
@@ -1,5 +0,0 @@
-//nothing to rename
-package p;
-abstract class A{
-	/*[*/abstract void m(int i, int j);/*]*/
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail11.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail11.java
deleted file mode 100644
index ded75c4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail11.java
+++ /dev/null
@@ -1,5 +0,0 @@
-//not on interfaces
-package p;
-interface A{
-	 void m(/*[*/int i/*]*/, int j);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail12.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail12.java
deleted file mode 100644
index 9bce703..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail12.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//cannot rename to j
-package p;
-class A{
-	void m(){
-		/*[*/final int i= 0;/*]*/
-		A a= new A(){
-			void m(int j){
-				int u= i;
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail13.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail13.java
deleted file mode 100644
index aa4a36d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail13.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//cannot rename to j
-package p;
-class A{
-	int j;
-	void m(){
-		/*[*/int i;/*]*/
-		j= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail14.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail14.java
deleted file mode 100644
index 90f9301..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail14.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//cannot rename to j
-package p;
-class A{
-	int k;
-	static class j{
-		static int k;
-	}
-	void m(){
-		/*[*/A i;/*]*/
-		j.k= 0;
-	}
-}	
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail15.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail15.java
deleted file mode 100644
index f803564..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail15.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//cannot rename to: j
-package p;
-class A{
-	void m(){
-		/*[*/int i;/*]*/
-		for (int j= 0; j < 10; j++){
-		}
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail16.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail16.java
deleted file mode 100644
index 5c2aab4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail16.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//cannot rename to: j
-package p;
-class A{
-	void m(){
-		/*[*/int i;/*]*/
-		for (int k= 0, j= 0;;) {
-		}
-		
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail17.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail17.java
deleted file mode 100644
index be33c50..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail17.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//cannot rename to: j
-package p;
-class A{
-	void m(){
-		/*[*/int i;/*]*/
-		try{
-			m(1);
-		}
-		catch (Throwable j){
-		}
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail18.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail18.java
deleted file mode 100644
index 3f3745d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail18.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//cannot rename to: j
-package p;
-class A{
-	String j;
-	void m(){
-		/*[*/int i=0;/*]*/
-		j.toString();	
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail19.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail19.java
deleted file mode 100644
index 93f39bd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail19.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//cannot rename to: j
-package p;
-class B{
-	int j;
-}
-class A extends B{
-	void m(){
-		/*[*/int i;/*]*/
-		j= 0;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail2.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail2.java
deleted file mode 100644
index cf88a29..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail2.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//cannot rename to i, i
-package p;
-class A{
-	int m(){
-		int i, /*[*/int j/*]*/;
-		return 0;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail20.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail20.java
deleted file mode 100644
index 8a21750..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail20.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//cannot rename to: j
-package p;
-interface B{
-	int j= 0;
-}
-class A implements B{
-	void m(){
-		/*[*/int i=0;/*]*/
-		int y= j;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail21.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail21.java
deleted file mode 100644
index f469912..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail21.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-abstract class A{
-	abstract void m(/*[*/int i/*]*/);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail22.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail22.java
deleted file mode 100644
index 82c2fed..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail22.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-interface A{
-	/*[*/void m(int i);/*]*/
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail23.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail23.java
deleted file mode 100644
index 8c1d23a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail23.java
+++ /dev/null
@@ -1,5 +0,0 @@
-//rename to j
-package p;
-class A{
-	native void m(/*[*/int i/*]*/);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail24.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail24.java
deleted file mode 100644
index b1310b7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail24.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//compile error
-package p;
-class A{
-	void m(int f){
-		/*[*/final int i= 0;/*]*/
-		m(t);
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail25.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail25.java
deleted file mode 100644
index 46baa16..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail25.java
+++ /dev/null
@@ -1,13 +0,0 @@
-//cannot rename i to j
-package p;
-class A{
-	void m(){
-		/*[*/final int i= 0;/*]*/
-		new A(){
-			void f(){
-				int j= 0;
-				int i2= i;
-			}
-		};
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail26.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail26.java
deleted file mode 100644
index a1fe88a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail26.java
+++ /dev/null
@@ -1,14 +0,0 @@
-//renaming to: j
-package p;
-class A{
-	int j;
-	int m(final int k){
-		/*[*/final int i= 0;/*]*/
-		new A(){
-			int m(int o){
-				return i;
-			}
-		};
-		return i + m(m(i));
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail27.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail27.java
deleted file mode 100644
index c0e6953..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail27.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	void m(/*[*/int i/*]*/, int j){
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail28.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail28.java
deleted file mode 100644
index 1b770bf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail28.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void m(/*[*/int i/*]*/){
-		int j;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail29.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail29.java
deleted file mode 100644
index 50fdd58..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail29.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	{
-		Object /*[*/a/*]*/= null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail3.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail3.java
deleted file mode 100644
index 9aeaa26..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail3.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//cannot rename to: i, 9
-package p;
-class A{
-	int m(){
-		int i;
-		/*[*/int j;/*]*/
-			return 0;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail30.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail30.java
deleted file mode 100644
index ea69d4d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail30.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A{
-	int f;
-	protected void primExecute(int t) {
-		this.toString();
-	}
-
-	if (image != null) {
-		Object /*[*/loc/*]*/ = null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail4.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail4.java
deleted file mode 100644
index 02dd74c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail4.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//cannot rename to: j
-package p;
-class A{
-	int m(int j){
-		/*[*/int i;/*]*/
-		return 0;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail5.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail5.java
deleted file mode 100644
index 42c82c0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail5.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//cannot rename to: j
-package p;
-class A{
-	int m(){
-		/*[*/int i;/*]*/
-		{
-			int j;
-		}
-				return 0;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail6.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail6.java
deleted file mode 100644
index 9c7e995..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail6.java
+++ /dev/null
@@ -1,14 +0,0 @@
-//cannot rename to: j
-package p;
-class A{
-	int m(){
-		/*[*/final int i=0;/*]*/
-		class X{
-			int j;
-			void m(){
-				j= i;
-			}
-		}
-		return 0;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail7.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail7.java
deleted file mode 100644
index fbe1711..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail7.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//cannot rename to: j
-package p;
-class B{
-	int j;
-}
-class A extends B{
-	int m(){
-		/*[*/int i=0;/*]*/
-		j= 0;
-		return 0;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail8.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail8.java
deleted file mode 100644
index 4dbd094..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail8.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//cannot rename to: j
-package p;
-interface B{
-	int j= 0;
-}
-class A implements B{
-	int m(){
-		/*[*/int i=0;/*]*/
-		i= j;
-		return 0;
-	};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail9.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail9.java
deleted file mode 100644
index fce6fd7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameTemp/cannotRename/A_testFail9.java
+++ /dev/null
@@ -1,13 +0,0 @@
-//cannot rename to: j
-package p;
-
-class B{
-	int j;
-	class A {
-		int m(){
-			/*[*/int i=0;/*]*/
-			i= j;
-			return 0;
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test0/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test0/in/A.java
deleted file mode 100644
index 6291b80..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test0/in/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test0/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test0/out/B.java
deleted file mode 100644
index d110d65..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test0/out/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test1/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test1/in/A.java
deleted file mode 100644
index bddabc6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test1/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-  A a;
-};
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test1/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test1/out/B.java
deleted file mode 100644
index 7cad311..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test1/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B{
-  B a;
-};
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test10/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test10/in/A.java
deleted file mode 100644
index 8d59977..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test10/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-class A{
-   A A;
-   A A(A A){
-     A:
-        for (;;){
-          if (A.A(A)==A)
-             break A;
-        }
-      return A;
-   };
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test10/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test10/out/B.java
deleted file mode 100644
index 2eafbb8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test10/out/B.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-class B{
-   B A;
-   B A(B A){
-     A:
-        for (;;){
-          if (A.A(A)==A)
-             break A;
-        }
-      return A;
-   };
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test11/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test11/in/A.java
deleted file mode 100644
index 6291b80..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test11/in/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test11/in/AA.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test11/in/AA.java
deleted file mode 100644
index 480ae03..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test11/in/AA.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class AA extends A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test11/out/AA.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test11/out/AA.java
deleted file mode 100644
index 20face0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test11/out/AA.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class AA extends B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test11/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test11/out/B.java
deleted file mode 100644
index d110d65..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test11/out/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test12/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test12/in/A.java
deleted file mode 100644
index 6c84ebf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test12/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-  void m(){
-    A a = (A)new Object();
-  };
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test12/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test12/out/B.java
deleted file mode 100644
index 1cb62a5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test12/out/B.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class B{
-  void m(){
-    B a = (B)new Object();
-  };
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test13/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test13/in/A.java
deleted file mode 100644
index cd57777..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test13/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-  void m(){
-    boolean b = (new A()) instanceof A;
-  };
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test13/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test13/out/B.java
deleted file mode 100644
index 5925007..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test13/out/B.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class B{
-  void m(){
-    boolean b = (new B()) instanceof B;
-  };
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test14/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test14/in/A.java
deleted file mode 100644
index 1a3912e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test14/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-  A a = new A();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test14/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test14/out/B.java
deleted file mode 100644
index 926aaed..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test14/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B{
-  B a = new B();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test15/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test15/in/A.java
deleted file mode 100644
index cd26dd8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test15/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-   static void s(){};
-}
-class AA{
-   AA(){ 
-     A.s();
-   };   
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test15/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test15/out/B.java
deleted file mode 100644
index 6fc6056..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test15/out/B.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class B{
-   static void s(){};
-}
-class AA{
-   AA(){ 
-     B.s();
-   };   
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test16/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test16/in/A.java
deleted file mode 100644
index 65fdbac..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test16/in/A.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package p;
-class A{
-   boolean A = new A() instanceof A;
-   A A(A A){
-     A:
-        for (;;){
-          if (A.A(A)==A)
-             break A;
-        }
-      return A;
-   };
-}
-class AA extends A{
-   A A = (A) new A();
-   A A(A A){
-     A:
-        for (;;){
-          if (A.A(A)==A)
-             break A;
-        }
-      return A;
-   };
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test16/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test16/out/B.java
deleted file mode 100644
index e2d8732..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test16/out/B.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package p;
-class B{
-   boolean A = new B() instanceof B;
-   B A(B A){
-     A:
-        for (;;){
-          if (A.A(A)==A)
-             break A;
-        }
-      return A;
-   };
-}
-class AA extends B{
-   B A = (B) new B();
-   B A(B A){
-     A:
-        for (;;){
-          if (A.A(A)==A)
-             break A;
-        }
-      return A;
-   };
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test17/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test17/in/A.java
deleted file mode 100644
index dd850ce..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test17/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-interface I{
-  int A = 0;
-}
-class A{
-  int A = I.A; 
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test17/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test17/out/B.java
deleted file mode 100644
index 77da929..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test17/out/B.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-interface I{
-  int A = 0;
-}
-class B{
-  int A = I.A; 
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test18/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test18/in/A.java
deleted file mode 100644
index 791c40d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test18/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A extends Exception{
-}
-class AA{
-  void m(){
-    try {
-      throw new A();
-    }
-    catch(A a){}
-  }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test18/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test18/out/B.java
deleted file mode 100644
index f7ee99a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test18/out/B.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class B extends Exception{
-}
-class AA{
-  void m(){
-    try {
-      throw new B();
-    }
-    catch(B a){}
-  }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test19/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test19/in/A.java
deleted file mode 100644
index e9efa72..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test19/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A extends Exception{
-  void m(){
-    try {
-      throw new A();
-    }
-    catch(A A){}
-  }
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test19/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test19/out/B.java
deleted file mode 100644
index 3d493fb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test19/out/B.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class B extends Exception{
-  void m(){
-    try {
-      throw new B();
-    }
-    catch(B A){}
-  }
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test2/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test2/in/A.java
deleted file mode 100644
index efd6ca8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test2/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-  int A;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test2/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test2/out/B.java
deleted file mode 100644
index 96d20fc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test2/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B{
-  int A;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test20/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test20/in/A.java
deleted file mode 100644
index 42c0104..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test20/in/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package A;
-class A{
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test20/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test20/out/B.java
deleted file mode 100644
index f585c27..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test20/out/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package A;
-class B{
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test21/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test21/in/A.java
deleted file mode 100644
index 9674a71..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test21/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-  void m(){
-    for (A A=new A();;) continue;
-  };
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test21/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test21/out/B.java
deleted file mode 100644
index e7079e7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test21/out/B.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class B{
-  void m(){
-    for (B A=new B();;) continue;
-  };
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test22/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test22/in/A.java
deleted file mode 100644
index efd0589..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test22/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-  A(){};
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test22/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test22/out/B.java
deleted file mode 100644
index 0154750..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test22/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B{
-  B(){};
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test23/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test23/in/A.java
deleted file mode 100644
index 200fbc9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test23/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-  A[] a = new A[5];
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test23/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test23/out/B.java
deleted file mode 100644
index e13f8d4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test23/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B{
-  B[] a = new B[5];
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test24/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test24/in/A.java
deleted file mode 100644
index b258bf2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test24/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A extends Exception{
-  void m() throws A
-  {};
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test24/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test24/out/B.java
deleted file mode 100644
index 6bb1219..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test24/out/B.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class B extends Exception{
-  void m() throws B
-  {};
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test25/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test25/in/A.java
deleted file mode 100644
index 91b863c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test25/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-  Class c = A.class;
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test25/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test25/out/B.java
deleted file mode 100644
index 5e58762..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test25/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B{
-  Class c = B.class;
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test26/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test26/in/A.java
deleted file mode 100644
index 36252a3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test26/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-  int x;
-  class Inner{
-    void m(){
-      A.this.x++;
-    }
-  }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test26/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test26/out/B.java
deleted file mode 100644
index 23e2e05..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test26/out/B.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class B{
-  int x;
-  class Inner{
-    void m(){
-      B.this.x++;
-    }
-  }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test27/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test27/in/A.java
deleted file mode 100644
index ea5823b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test27/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-class Super{
-  int x;
-}
-class A extends Super{
-  String x;
-  class Inner{
-    void m(){
-      A.super.x++;
-    }
-  }
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test27/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test27/out/B.java
deleted file mode 100644
index e65f694..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test27/out/B.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-class Super{
-  int x;
-}
-class B extends Super{
-  String x;
-  class Inner{
-    void m(){
-      B.super.x++;
-    }
-  }
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test28/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test28/in/A.java
deleted file mode 100644
index c56d8e4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test28/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class Super{
-  void m1(){};
-}
-class A extends Super{
-  class Inner{
-    void m(){
-      A.super.m1();
-    }
-  }
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test28/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test28/out/B.java
deleted file mode 100644
index fbb2b02..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test28/out/B.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class Super{
-  void m1(){};
-}
-class B extends Super{
-  class Inner{
-    void m(){
-      B.super.m1();
-    }
-  }
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test29/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test29/in/A.java
deleted file mode 100644
index b047e01..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test29/in/A.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package p;
-public class A{};
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test29/in/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test29/in/C.java
deleted file mode 100644
index ffcf8fd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test29/in/C.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p1;
-import p.A;
-class C{}; 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test29/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test29/out/B.java
deleted file mode 100644
index 9840770..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test29/out/B.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package p;
-public class B{};
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test29/out/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test29/out/C.java
deleted file mode 100644
index 3e07200..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test29/out/C.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p1;
-import p.B;
-class C{}; 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test3/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test3/in/A.java
deleted file mode 100644
index 6857903..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test3/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-}
-class AA extends A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test3/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test3/out/B.java
deleted file mode 100644
index 72a47fc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test3/out/B.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class B{
-}
-class AA extends B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test30/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test30/in/A.java
deleted file mode 100644
index 9bbb4ae..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test30/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-   static int f;
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test30/in/AA.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test30/in/AA.java
deleted file mode 100644
index 47f9fc0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test30/in/AA.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class AA{
-   AA(){ A.f=0; };   
-}
- 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test30/out/AA.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test30/out/AA.java
deleted file mode 100644
index aaf251b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test30/out/AA.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class AA{
-   AA(){ B.f=0; };   
-}
- 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test30/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test30/out/B.java
deleted file mode 100644
index ab72f87..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test30/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B{
-   static int f;
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test31/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test31/in/A.java
deleted file mode 100644
index 061be77..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test31/in/A.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package p;
-class A{};
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test31/in/AA.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test31/in/AA.java
deleted file mode 100644
index 0bd204c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test31/in/AA.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class AA{
-   Object a = new A(){
-              };
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test31/out/AA.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test31/out/AA.java
deleted file mode 100644
index 4cc1669..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test31/out/AA.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class AA{
-   Object a = new B(){
-              };
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test31/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test31/out/B.java
deleted file mode 100644
index 4c03080..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test31/out/B.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package p;
-class B{};
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test32/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test32/in/A.java
deleted file mode 100644
index 3486407..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test32/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-}
-class C{
-  C(A a){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test32/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test32/out/B.java
deleted file mode 100644
index a7c1128..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test32/out/B.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class B{
-}
-class C{
-  C(B a){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test33/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test33/in/A.java
deleted file mode 100644
index de8a1e1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test33/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A extends Exception{
-}
-class C{
-  C() throws A {};
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test33/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test33/out/B.java
deleted file mode 100644
index 730a0ef..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test33/out/B.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class B extends Exception{
-}
-class C{
-  C() throws B {};
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test34/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test34/in/A.java
deleted file mode 100644
index 7fe39a7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test34/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-// 2 occurences
-package p;
-public class A {
-	{A a;}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test34/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test34/out/B.java
deleted file mode 100644
index cedeb23..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test34/out/B.java
+++ /dev/null
@@ -1,5 +0,0 @@
-// 2 occurences
-package p;
-public class B {
-	{B a;}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test35/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test35/in/A.java
deleted file mode 100644
index d3969f2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test35/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-//2 occurences
-package p;
-public class A {
-	static {A a;}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test35/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test35/out/B.java
deleted file mode 100644
index 161b651..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test35/out/B.java
+++ /dev/null
@@ -1,5 +0,0 @@
-//2 occurences
-package p;
-public class B {
-	static {B a;}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test36/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test36/in/A.java
deleted file mode 100644
index 80671d0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test36/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-//3 occurences
-package p;
-public class A {
-	static {A a;}
-	static {A a;}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test36/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test36/out/B.java
deleted file mode 100644
index d99b282..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test36/out/B.java
+++ /dev/null
@@ -1,6 +0,0 @@
-//3 occurences
-package p;
-public class B {
-	static {B a;}
-	static {B a;}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test37/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test37/in/A.java
deleted file mode 100644
index a5cf5ba..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test37/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-//3 occurences
-package p;
-public class A {
-	static {A a;}
-	{A a;}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test37/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test37/out/B.java
deleted file mode 100644
index 0a55f97..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test37/out/B.java
+++ /dev/null
@@ -1,6 +0,0 @@
-//3 occurences
-package p;
-public class B {
-	static {B a;}
-	{B a;}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test38/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test38/in/A.java
deleted file mode 100644
index 9b76ec0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test38/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//2 occurences
-package p;
-public class A {
-}
-
-class C{
-	{A a;}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test38/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test38/out/B.java
deleted file mode 100644
index 9084847..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test38/out/B.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//2 occurences
-package p;
-public class B {
-}
-
-class C{
-	{B a;}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test39/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test39/in/A.java
deleted file mode 100644
index 806e5a6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test39/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//2 occurences
-package p;
-public class A {
-}
-
-class C{
-	static {A a;}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test39/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test39/out/B.java
deleted file mode 100644
index f7855ef..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test39/out/B.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//2 occurences
-package p;
-public class B {
-}
-
-class C{
-	static {B a;}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test4/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test4/in/A.java
deleted file mode 100644
index 1091280..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test4/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-   void A(){};
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test4/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test4/out/B.java
deleted file mode 100644
index 4f70464..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test4/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B{
-   void A(){};
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test40/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test40/in/A.java
deleted file mode 100644
index ad31dc6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test40/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-//1 occurence
-public class A {
-}
-
-class C {
-	void m() {
-		class A{
-		}
-		new A();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test40/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test40/out/B.java
deleted file mode 100644
index 3e19bb4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test40/out/B.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-//1 occurence
-public class B {
-}
-
-class C {
-	void m() {
-		class A{
-		}
-		new A();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test41/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test41/in/A.java
deleted file mode 100644
index 04f17fd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test41/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-public class A {
-	A(A A){}
-	A A(A A){
-		A= new A(new A(A));
-		return A;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test41/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test41/out/B.java
deleted file mode 100644
index dddd152..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test41/out/B.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-public class B {
-	B(B A){}
-	B A(B A){
-		A= new B(new B(A));
-		return A;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test42/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test42/in/A.java
deleted file mode 100644
index 5418dd9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test42/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A {
-	A(A A){}
-	A A(A A){
-		A= new A(new A(A));
-		return A;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test42/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test42/out/B.java
deleted file mode 100644
index 744edb4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test42/out/B.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class B {
-	B(B A){}
-	B A(B A){
-		A= new B(new B(A));
-		return A;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test43/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test43/in/A.java
deleted file mode 100644
index d187f54..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test43/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//renaming A to B
-package p;
-public class A {
-	static A A;
-}
-class X extends p.A{
-	void x(){
-		p.A.A= A.A;//fields come first
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test43/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test43/out/B.java
deleted file mode 100644
index 20e2727..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test43/out/B.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//renaming A to B
-package p;
-public class B {
-	static B A;
-}
-class X extends p.B{
-	void x(){
-		p.B.A= A.A;//fields come first
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test44/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test44/in/A.java
deleted file mode 100644
index 04c067d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test44/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-//renaming A to B
-package p;
-interface A {
-}
-class K implements A{
-}
-interface C extends A{}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test44/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test44/out/B.java
deleted file mode 100644
index f9d3d92..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test44/out/B.java
+++ /dev/null
@@ -1,7 +0,0 @@
-//renaming A to B
-package p;
-interface B {
-}
-class K implements B{
-}
-interface C extends B{}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test45/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test45/in/A.java
deleted file mode 100644
index 18d05b7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test45/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//renaming A to B
-package p;
- class A {
-	static A A;
-}
-class X extends p.A{
-	void x(){
-		p.A.A= A.A;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test45/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test45/out/B.java
deleted file mode 100644
index 61d6943..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test45/out/B.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//renaming A to B
-package p;
- class B {
-	static B A;
-}
-class X extends p.B{
-	void x(){
-		p.B.A= A.A;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test46/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test46/in/A.java
deleted file mode 100644
index b047e01..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test46/in/A.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package p;
-public class A{};
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test46/in/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test46/in/C.java
deleted file mode 100644
index ffcf8fd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test46/in/C.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p1;
-import p.A;
-class C{}; 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test46/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test46/out/B.java
deleted file mode 100644
index 9840770..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test46/out/B.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package p;
-public class B{};
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test46/out/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test46/out/C.java
deleted file mode 100644
index 3e07200..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test46/out/C.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p1;
-import p.B;
-class C{}; 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test47/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test47/in/A.java
deleted file mode 100644
index 6ae44a0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test47/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//renaming A to B
-package p;
-class A{
-	A	( ){};
-};
-class C{
-	void s(){
-	new A ( );
-	}
-};
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test47/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test47/out/B.java
deleted file mode 100644
index 6d95d4f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test47/out/B.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//renaming A to B
-package p;
-class B{
-	B	( ){};
-};
-class C{
-	void s(){
-	new B ( );
-	}
-};
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test48/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test48/in/A.java
deleted file mode 100644
index 92da31a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test48/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//renaming A to B
-package p;
-class A{
-	A	( ){};
-};
-class C{
-	void s(){
-	new p . A ( );
-	}
-};
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test48/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test48/out/B.java
deleted file mode 100644
index 6fc2e7c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test48/out/B.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//renaming A to B
-package p;
-class B{
-	B	( ){};
-};
-class C{
-	void s(){
-	new p . B ( );
-	}
-};
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test49/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test49/in/A.java
deleted file mode 100644
index dc7c33d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test49/in/A.java
+++ /dev/null
@@ -1,18 +0,0 @@
-//renaming A to B
-package p;
-class A{
-	A	( ){};
-	static int fgT;
-};
-class C{
-	void s(){
-	new p . A ( );
-	p
-	.
-	A
-	.
-	fgT
-	=
-	6;
-	}
-};
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test49/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test49/out/B.java
deleted file mode 100644
index 9c92c70..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test49/out/B.java
+++ /dev/null
@@ -1,18 +0,0 @@
-//renaming A to B
-package p;
-class B{
-	B	( ){};
-	static int fgT;
-};
-class C{
-	void s(){
-	new p . B ( );
-	p
-	.
-	B
-	.
-	fgT
-	=
-	6;
-	}
-};
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test5/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test5/in/A.java
deleted file mode 100644
index efce98d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test5/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-   void m(A a){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test5/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test5/out/B.java
deleted file mode 100644
index bfca111..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test5/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B{
-   void m(B a){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test50/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test50/in/A.java
deleted file mode 100644
index 4c07c67..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test50/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//renaming A to B
-package p;
-class A{
-	A( ){};
-};
-class C extends A{
-	C(){
-		super();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test50/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test50/out/B.java
deleted file mode 100644
index 6e53cb1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test50/out/B.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//renaming A to B
-package p;
-class B{
-	B( ){};
-};
-class C extends B{
-	C(){
-		super();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test51/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test51/in/A.java
deleted file mode 100644
index c57bddf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test51/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class A{
- public class X{}
-};
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test51/in/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test51/in/C.java
deleted file mode 100644
index a10bebd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test51/in/C.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p1;
-import p.A.*;
-class C{}; 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test51/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test51/out/B.java
deleted file mode 100644
index dfa16de..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test51/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class B{
- public class X{}
-};
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test51/out/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test51/out/C.java
deleted file mode 100644
index 149a043..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test51/out/C.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p1;
-import p.B.*;
-class C{}; 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test52/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test52/in/A.java
deleted file mode 100644
index 5e98305..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test52/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-public class A{
-	A[] m(){
-		return (A[])new A[3];
-	}
-};
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test52/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test52/out/B.java
deleted file mode 100644
index 28cefd2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test52/out/B.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-public class B{
-	B[] m(){
-		return (B[])new B[3];
-	}
-};
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test53/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test53/in/A.java
deleted file mode 100644
index 8237dbe..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test53/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//no ref update
-package p;
-public class A{
-	A(){}
-	A(A A){}
-	A m(){
-		return (A)new A();
-	}
-};
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test53/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test53/out/B.java
deleted file mode 100644
index 9afa2e5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test53/out/B.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//no ref update
-package p;
-public class B{
-	B(){}
-	B(A A){}
-	A m(){
-		return (A)new A();
-	}
-};
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test54/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test54/in/A.java
deleted file mode 100644
index 67a5e75..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test54/in/A.java
+++ /dev/null
@@ -1,16 +0,0 @@
-//rename X to XYZ
-package p;
-public class A{
-	class X{
-		X(X X){new X(null);}
-	}
-	A(){}
-	A(A A){}
-	A m(){
-		new X(null);
-		return (A)new A();
-	}
-};
-class B{
-	A.X ax= new A().new X(null);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test54/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test54/out/A.java
deleted file mode 100644
index efea233..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test54/out/A.java
+++ /dev/null
@@ -1,16 +0,0 @@
-//rename X to XYZ
-package p;
-public class A{
-	class XYZ{
-		XYZ(XYZ X){new XYZ(null);}
-	}
-	A(){}
-	A(A A){}
-	A m(){
-		new XYZ(null);
-		return (A)new A();
-	}
-};
-class B{
-	A.XYZ ax= new A().new XYZ(null);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test55/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test55/in/A.java
deleted file mode 100644
index 5abee52..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test55/in/A.java
+++ /dev/null
@@ -1,16 +0,0 @@
-//rename X to XYZ - no ref update
-package p;
-public class A{
-	class X{
-		X(X X){new X(null);}
-	}
-	A(){}
-	A(A A){}
-	A m(){
-		new X(null);
-		return (A)new A();
-	}
-};
-class B{
-	A.X ax= new A().new X(null);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test55/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test55/out/A.java
deleted file mode 100644
index 3a6a288..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test55/out/A.java
+++ /dev/null
@@ -1,16 +0,0 @@
-//rename X to XYZ - no ref update
-package p;
-public class A{
-	class XYZ{
-		XYZ(X X){new X(null);}
-	}
-	A(){}
-	A(A A){}
-	A m(){
-		new X(null);
-		return (A)new A();
-	}
-};
-class B{
-	A.X ax= new A().new X(null);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test56/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test56/in/A.java
deleted file mode 100644
index 92da053..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test56/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package a.a;
-class A {
-    A() {}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test56/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test56/in/B.java
deleted file mode 100644
index 66b8fb2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test56/in/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package a.a;
-class B {
-public A theA;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test56/in/default/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test56/in/default/A.java
deleted file mode 100644
index c3f152c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test56/in/default/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-class A {
-    A() {}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test56/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test56/out/A.java
deleted file mode 100644
index 92da053..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test56/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package a.a;
-class A {
-    A() {}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test56/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test56/out/B.java
deleted file mode 100644
index 66b8fb2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test56/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package a.a;
-class B {
-public A theA;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test56/out/default/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test56/out/default/B.java
deleted file mode 100644
index c21ade7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test56/out/default/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-class B {
-    B() {}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test57/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test57/in/A.java
deleted file mode 100644
index d540e4e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test57/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-/**
- * p.A 
- * AA A
- */
-public class A{
-	A a;//A
-	String aa= "A";
-};
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test57/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test57/out/B.java
deleted file mode 100644
index 3a6a99a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test57/out/B.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-/**
- * p.B 
- * AA B
- */
-public class B{
-	B a;//B
-	String aa= "B";
-};
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test58/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test58/in/A.java
deleted file mode 100644
index 0b139ce..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test58/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-class Sup{
-	static int CONSTANT= 0;
-}
-class A extends Sup {
-}
-
-class Test {
-  public static void main(String[] arguments) {
-    System.out.println(A.CONSTANT);
-  }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test58/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test58/out/B.java
deleted file mode 100644
index d6da1b0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test58/out/B.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-class Sup{
-	static int CONSTANT= 0;
-}
-class B extends Sup {
-}
-
-class Test {
-  public static void main(String[] arguments) {
-    System.out.println(B.CONSTANT);
-  }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test59/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test59/in/A.java
deleted file mode 100644
index 3faabb5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test59/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A {
-	void f(){
-		A a= ( A )this;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test59/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test59/out/B.java
deleted file mode 100644
index f8e4430..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test59/out/B.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class B {
-	void f(){
-		B a= ( B )this;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test6/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test6/in/A.java
deleted file mode 100644
index c96f5c8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test6/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-   void m(A A){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test6/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test6/out/B.java
deleted file mode 100644
index e32d1a0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test6/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B{
-   void m(B A){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test7/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test7/in/A.java
deleted file mode 100644
index ff50450..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test7/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-   A m(){return null;};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test7/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test7/out/B.java
deleted file mode 100644
index 38e8cf2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test7/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B{
-   B m(){return null;};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test8/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test8/in/A.java
deleted file mode 100644
index 8d3c292..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test8/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-   void m(){
-     A: return;
-   };
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test8/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test8/out/B.java
deleted file mode 100644
index 62858b8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test8/out/B.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class B{
-   void m(){
-     A: return;
-   };
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test9/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test9/in/A.java
deleted file mode 100644
index 5d48bdf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test9/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-   void m(){
-     A A; 
-   };
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test9/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test9/out/B.java
deleted file mode 100644
index 3f6c10b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test9/out/B.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class B{
-   void m(){
-     B A; 
-   };
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail0/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail0/in/A.java
deleted file mode 100644
index 6f63ab9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail0/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A {
-}
-class B extends A{
-} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail00/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail00/in/A.java
deleted file mode 100644
index 6f63ab9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail00/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A {
-}
-class B extends A{
-} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail01/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail01/in/A.java
deleted file mode 100644
index f6daf1d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail01/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A {
-}
-class C extends A{
-}
-class B extends C{
-}
- 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail02/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail02/in/A.java
deleted file mode 100644
index 6f63ab9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail02/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A {
-}
-class B extends A{
-} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail03/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail03/in/A.java
deleted file mode 100644
index f6daf1d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail03/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A {
-}
-class C extends A{
-}
-class B extends C{
-}
- 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail04/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail04/in/A.java
deleted file mode 100644
index f6daf1d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail04/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A {
-}
-class C extends A{
-}
-class B extends C{
-}
- 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail1/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail1/in/A.java
deleted file mode 100644
index f6daf1d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail1/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A {
-}
-class C extends A{
-}
-class B extends C{
-}
- 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail10/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail10/in/A.java
deleted file mode 100644
index a7cbe67..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail10/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-  class AA{
-     class AAA{
-        class B{
-        }
-     }
-  }
-} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail11/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail11/in/A.java
deleted file mode 100644
index b376073..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail11/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B{
-  class A{}
-} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail12/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail12/in/A.java
deleted file mode 100644
index 179edb2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail12/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-  interface B{}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail16/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail16/in/A.java
deleted file mode 100644
index e325f6a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail16/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class Outer{
-  class A{}
-  class B{}
-} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail17/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail17/in/A.java
deleted file mode 100644
index ae12ea2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail17/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class Outer{
-  class A{}
-  interface B{}
-} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail18/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail18/in/A.java
deleted file mode 100644
index ad30f07..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail18/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class Outer{
-  class Inner{
-    class A{}
-    class B{}
-  }
-} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail19/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail19/in/A.java
deleted file mode 100644
index ad30f07..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail19/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class Outer{
-  class Inner{
-    class A{}
-    class B{}
-  }
-} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail2/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail2/in/A.java
deleted file mode 100644
index 304ff48..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail2/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A extends B{
-}
-class B{
-}
- 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail20/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail20/in/A.java
deleted file mode 100644
index 7ca9bbb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail20/in/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p1;
-public class A{
-} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail20/in/AA.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail20/in/AA.java
deleted file mode 100644
index 74916a6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail20/in/AA.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p2;
-import p1.*;
-class AA extends A{}
-class B extends AA{} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail21/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail21/in/A.java
deleted file mode 100644
index 77c8e44..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail21/in/A.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package p1;
-class A{} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail21/in/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail21/in/C.java
deleted file mode 100644
index 3681e46..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail21/in/C.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package p1.B;
-class C{} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail22/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail22/in/A.java
deleted file mode 100644
index 32ba7d3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail22/in/A.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package p;
-class A{} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail22/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail22/in/B.java
deleted file mode 100644
index 7c55812..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail22/in/B.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package p;
-interface B{} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail23/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail23/in/A.java
deleted file mode 100644
index 25ac9bf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail23/in/A.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package p1;
-public class A{} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail23/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail23/in/B.java
deleted file mode 100644
index 1e8902b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail23/in/B.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package p3;
-public class B{} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail23/in/Bogus.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail23/in/Bogus.java
deleted file mode 100644
index c10e59b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail23/in/Bogus.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p2;
-import p1.A;
-import p3.B;
-class Bogus{} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail24/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail24/in/A.java
deleted file mode 100644
index 25ac9bf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail24/in/A.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package p1;
-public class A{} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail24/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail24/in/B.java
deleted file mode 100644
index 3945a49..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail24/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p2;
-import p1.A;
-class B{} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail25/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail25/in/A.java
deleted file mode 100644
index 25ac9bf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail25/in/A.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package p1;
-public class A{} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail25/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail25/in/B.java
deleted file mode 100644
index 042c455..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail25/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p2;
-import p1.A;
-interface B{} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail26/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail26/in/A.java
deleted file mode 100644
index 61b6e6f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail26/in/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p1;
-import p2.B;
-public class A{} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail26/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail26/in/B.java
deleted file mode 100644
index 8a3f9bf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail26/in/B.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package p2;
-public interface B{}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail27/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail27/in/A.java
deleted file mode 100644
index 8071f64..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail27/in/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p1;
-import p2.B;
-public class A{}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail27/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail27/in/B.java
deleted file mode 100644
index 16d5100..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail27/in/B.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package p2;
-public class B{}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail28/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail28/in/A.java
deleted file mode 100644
index 056876b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail28/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-   static int length = 17;
-   int m(){
-     int[] B = new int[1];
-     return A.length;
-   }
-}
- 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail29/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail29/in/A.java
deleted file mode 100644
index 61d3566..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail29/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-   static int length = 17;
-   int m(int[] B){
-     return A.length;
-   }
-}
- 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail3/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail3/in/A.java
deleted file mode 100644
index ad40c78..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail3/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A extends C{
-}
-class B{
-}
-class C extends B{
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail30/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail30/in/A.java
deleted file mode 100644
index 4ab0bf3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail30/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-   static int length = 17;
-   int[] B = new int[1];
-   int m(){
-     return A.length;
-   }
-}
- 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail31/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail31/in/A.java
deleted file mode 100644
index 4edb6e1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail31/in/A.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package p1;
-public class A{}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail31/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail31/in/B.java
deleted file mode 100644
index c16f798..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail31/in/B.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package p2;
-public class B{}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail31/in/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail31/in/C.java
deleted file mode 100644
index 1b13cad..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail31/in/C.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p3;
-import p1.*;
-import p2.B;
-class C{
-   Object o = new A();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail32/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail32/in/A.java
deleted file mode 100644
index 7b5d176..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail32/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-import p1.*;
-public class A{
-   Object o = new B();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail32/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail32/in/B.java
deleted file mode 100644
index 568eb40..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail32/in/B.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package p1;
-public class B{}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail33/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail33/in/A.java
deleted file mode 100644
index cc55de5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail33/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-//2 occurences
-//disallow - shadowing
-public class A {
-}
-
-class C {
-	void m() {
-		class B {
-		}
-		new A();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail34/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail34/in/A.java
deleted file mode 100644
index 6462581..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail34/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-//2 occurences
-//disallow - obscuring
-public class A {
-	static int length= 1;
-}
-
-class C {
-	void m() {
-		int[] B= {42};
-		A.length= 0;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail35/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail35/in/A.java
deleted file mode 100644
index 7dad132..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail35/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-//2 occurences
-//disallow - obscuring
-public class A {
-	static int length= 1;
-}
-
-class C {
-	void m(int[] B) {
-		A.length= 0;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail36/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail36/in/A.java
deleted file mode 100644
index 00a75d1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail36/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-//2 occurences
-//disallow - obscuring
-public class A {
-	static int length= 1;
-}
-
-class C {
-	int[] B= {4};
-	void m() {
-		A.length= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail37/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail37/in/A.java
deleted file mode 100644
index 71df552..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail37/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class A{
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail37/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail37/in/B.java
deleted file mode 100644
index 6cb383e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail37/in/B.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package p;
-class B{}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail38/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail38/in/A.java
deleted file mode 100644
index b7438c3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail38/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-public class A{
-	private static interface I{
-		class C{
-		native void j();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail39/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail39/in/A.java
deleted file mode 100644
index 94de0d7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail39/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class A{
-	native void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail4/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail4/in/A.java
deleted file mode 100644
index 6291b80..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail4/in/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail4/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail4/in/B.java
deleted file mode 100644
index 3613892..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail4/in/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B extends A{
-}
- 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail40/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail40/in/A.java
deleted file mode 100644
index 71e4836..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail40/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-public class A{
-	class C{
-		native void m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail41/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail41/in/A.java
deleted file mode 100644
index 1172b81..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail41/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-public class A{
-	public static int length(){ return 0;};
-}
-class F{
-	int m(){
-		String B= null;
-		return A.length();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail42/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail42/in/A.java
deleted file mode 100644
index 81eaf64..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail42/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-public class A{
-	public static int length(){ return 0;};
-}
-class F{
-	int m(String B){
-		return A.length();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail43/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail43/in/A.java
deleted file mode 100644
index 65fb284..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail43/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-public class A{
-	public static int length(){ return 0;};
-}
-class F{
-	String B;
-	int m(){
-		return A.length();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail44/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail44/in/A.java
deleted file mode 100644
index f65c292..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail44/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-public class A{
-	public static int length(){ return 0;};
-}
-class F{
-	String B;
-}
-class FF extends F{
-	int m(){
-		return A.length();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail45/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail45/in/A.java
deleted file mode 100644
index 5554553..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail45/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-public class A{
-	public static int length(){ return 0;};
-}
-interface I{
-	String B= "fred";
-}
-class FF implements I{
-	int m(){
-		return A.length();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail46/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail46/in/A.java
deleted file mode 100644
index 2c0539c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail46/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-public class A{
-	static int MAX_VALUE = 2;
-}
-class S{
-	int m(){
-		Integer B= null;
-		return A.MAX_VALUE;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail47/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail47/in/A.java
deleted file mode 100644
index a6af04d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail47/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-public class A{
-	static int MAX_VALUE = 2;
-}
-class S{
-	int m(Integer B){
-		return A.MAX_VALUE;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail48/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail48/in/A.java
deleted file mode 100644
index 730681c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail48/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-}
-class X{
-	class B{
-	}
-	A a;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail49/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail49/in/A.java
deleted file mode 100644
index 6e5046d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail49/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class A{
-}
-class X{
-	class B{
-	}
-	A m(){
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail5/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail5/in/A.java
deleted file mode 100644
index 6291b80..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail5/in/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail5/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail5/in/B.java
deleted file mode 100644
index 3d18e87..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail5/in/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B extends C{
-}
- 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail5/in/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail5/in/C.java
deleted file mode 100644
index 293a290..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail5/in/C.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class C extends A{
-} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail50/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail50/in/A.java
deleted file mode 100644
index ce74207..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail50/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-}
-class X{
-	class B{
-	}
-	void m(A a){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail51/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail51/in/A.java
deleted file mode 100644
index 223883f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail51/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-}
-class X{
-	class B{
-	}
-	X(A a){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail52/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail52/in/A.java
deleted file mode 100644
index 7129fc6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail52/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A extends Exception{
-}
-class X{
-	class B extends Exception{
-	}
-	void m() throws A{
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail53/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail53/in/A.java
deleted file mode 100644
index 917fe91..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail53/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A extends Exception{
-}
-class X{
-	class B extends Exception{
-	}
-	X() throws A{
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail54/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail54/in/A.java
deleted file mode 100644
index de4ae47..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail54/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class A{
-}
-class X{
-	class B{
-	}
-	void m(){
-		A a;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail55/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail55/in/A.java
deleted file mode 100644
index 45a7007..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail55/in/A.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package p;
-class A extends Exception{
-}
-class X{
-	class B extends Exception{
-	}
-	void m() throws A{
-	}
-	void k(){
-		try {
-			m();
-		} catch (A a){
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail56/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail56/in/A.java
deleted file mode 100644
index 927609b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail56/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A extends Exception{
-}
-class X{
-	class B extends Exception{
-	}
-	Object o= A.class;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail57/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail57/in/A.java
deleted file mode 100644
index 222d305..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail57/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-}
-class X{
-	class B{
-	}
-	Object o= new A();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail58/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail58/in/A.java
deleted file mode 100644
index eaab62a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail58/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-}
-class X{
-	class B{
-	}
-	Object o= new A(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail59/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail59/in/A.java
deleted file mode 100644
index 5b3be05..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail59/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-}
-class X{
-	class B{
-	}
-	Object o= new A[0];
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail6/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail6/in/A.java
deleted file mode 100644
index 07a2149..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail6/in/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A extends C{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail6/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail6/in/B.java
deleted file mode 100644
index d110d65..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail6/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail6/in/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail6/in/C.java
deleted file mode 100644
index b2c3c43..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail6/in/C.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class C extends B{
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail60/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail60/in/A.java
deleted file mode 100644
index 2b19f3b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail60/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class A{
-}
-class X{
-	class B{
-	}
-	Object m(Object o){
-		return (A)o;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail61/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail61/in/A.java
deleted file mode 100644
index 33ee468..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail61/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class A{
-}
-class X{
-	class B{
-	}
-	boolean m(Object o){
-		return o instanceof A;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail62/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail62/in/A.java
deleted file mode 100644
index d6c2750..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail62/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-class A{
-	static int x;
-}
-class X{
-	static class B{
-		static int x;
-	}
-	int m(Object o){
-		return A.x;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail63/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail63/in/A.java
deleted file mode 100644
index 78f81e0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail63/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-class A{
-	static int x(){return 42;};
-}
-class X{
-	static class B{
-		static int x(){return 42;};
-	}
-	int m(Object o){
-		return A.x();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail64/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail64/in/A.java
deleted file mode 100644
index aca1914..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail64/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-}
-class X{
-	class B{
-	}
-	class Fred extends A{
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail65/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail65/in/A.java
deleted file mode 100644
index 773ea1e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail65/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-}
-class X{
-	void m(){
-		class B{}
-		A a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail66/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail66/in/A.java
deleted file mode 100644
index cbd2947..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail66/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-class A{
-}
-class X{
-	void m(){
-		class B{};
-		class C{
-			A m(){
-				return null;
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail67/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail67/in/A.java
deleted file mode 100644
index 1bd4502..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail67/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-class A{
-}
-class X{
-	void m(){
-		class B{};
-		class C{
-			void m(A b){
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail68/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail68/in/A.java
deleted file mode 100644
index 9f6c653..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail68/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-class A{
-}
-class X{
-	void m(){
-		class B{
-		};
-		class C{
-			C(A b){
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail69/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail69/in/A.java
deleted file mode 100644
index 4109948..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail69/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-class A extends Exception{
-}
-class X{
-	void m(){
-		class B extends Exception{}
-		class C{
-			void m() throws A{
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail7/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail7/in/A.java
deleted file mode 100644
index dd7b3a0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail7/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-}
-class B{}
-
- 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail70/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail70/in/A.java
deleted file mode 100644
index 0f3f1b4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail70/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-class A extends Exception{
-}
-class X{
-	void m(){
-		class B extends Exception{}
-		class C{
-			C() throws A{
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail71/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail71/in/A.java
deleted file mode 100644
index f26e1b2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail71/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A {
-}
-class X{
-	void m(){
-		class B{}
-		class C{
-			A a;
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail72/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail72/in/A.java
deleted file mode 100644
index 3e9e83e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail72/in/A.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package p;
-class A extends Exception {
-}
-class X {
-	void f() {
-		class B extends Exception {
-		};
-		class C {
-			void m() throws A {
-			}
-			void k() {
-				try {
-					m();
-				} catch (A a) {
-				}
-			}
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail73/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail73/in/A.java
deleted file mode 100644
index 98430b0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail73/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A {}
-class X{
-	void m(){
-		class B	{}
-		Object o= A.class;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail74/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail74/in/A.java
deleted file mode 100644
index 10d8bfe..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail74/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-}
-class X{
-	void m(){
-		class B{}
-		Object o= new A();
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail75/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail75/in/A.java
deleted file mode 100644
index f6cdea7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail75/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-}
-class X{
-	void m(){
-		class B{}
-		Object o= new A(){};
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail76/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail76/in/A.java
deleted file mode 100644
index 48f65c6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail76/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-}
-class X{
-	void m(){
-		class B{}
-		Object o= new A[0];
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail77/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail77/in/A.java
deleted file mode 100644
index a4d5354..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail77/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-class A{
-}
-class X{
-	void m(){
-		class B{}
-		class C{
-			Object m(Object o){
-				return (A)o;
-			}
-		}	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail78/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail78/in/A.java
deleted file mode 100644
index b2d42cb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail78/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-class A{
-}
-class X{
-	void m(){
-		class B{	}
-		class C{
-			boolean m(Object o){
-				return o instanceof A;
-			}
-		}	
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail79/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail79/in/A.java
deleted file mode 100644
index 8eb9ad9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail79/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class A{
-}
-class X{
-	void m(){
-		class B{}
-		class Fred extends A{
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail8/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail8/in/A.java
deleted file mode 100644
index 4a3f223..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail8/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A{
-}
- 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail8/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail8/in/B.java
deleted file mode 100644
index d5d34df..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail8/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B{}
- 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail80/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail80/in/A.java
deleted file mode 100644
index 8e56da5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail80/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void m(){
-		class B{}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail81/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail81/in/A.java
deleted file mode 100644
index d2dc781..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail81/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	class C{
-		void m(){
-			class B{}
-		}
-	}	
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail82/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail82/in/A.java
deleted file mode 100644
index 96d072c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail82/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{}
-class X{
-	class B extends A{}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail83/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail83/in/A.java
deleted file mode 100644
index ffe08d4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail83/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//can't rename A to Cloneable
-package p;
-interface A{}
-class X{
-	void m(){
-		class C implements A, Cloneable{}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail84/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail84/in/A.java
deleted file mode 100644
index 236e5c2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail84/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-//can't rename A to List
-package p;
-import java.util.List;
-class A{}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail85/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail85/in/A.java
deleted file mode 100644
index 7e9bfb1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail85/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	class C{
-		class D{
-			native void n();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail86/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail86/in/A.java
deleted file mode 100644
index fef1289..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail86/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{}
-class C{
-	native void n(A a);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail87/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail87/in/A.java
deleted file mode 100644
index 9c0c81c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail87/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{}
-class C{
-	class D{
-		native void n(A a);
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail88/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail88/in/A.java
deleted file mode 100644
index 2c1bc51..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail88/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	void m(){
-		class C{
-			native void m();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail89/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail89/in/A.java
deleted file mode 100644
index da0e6dd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail89/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class A{
-	class Inner{
-		void m(){
-			class C{
-				native void m();
-			}
-		}
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail9/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail9/in/A.java
deleted file mode 100644
index 8c0da8d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail9/in/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-class A{
-  class B{}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail90/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail90/in/A.java
deleted file mode 100644
index 51cffbb6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail90/in/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-public class A{
-	public static int length(){ return 0;};
-}
-class F{
-	static class B{
-		public static int length(){ return 42;};
-	};
-}
-class FF extends F{
-	int m(){
-		return A.length();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail91/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail91/in/A.java
deleted file mode 100644
index a830c1a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail91/in/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-public class A{
-	public static int length(){ return 0;};
-}
-interface I{
-	static class B{
-		public static int length(){ return 0;};
-	}
-}
-class FF implements I{
-	int m(){
-		return A.length();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail92/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail92/in/A.java
deleted file mode 100644
index 639b145..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail92/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-public class A{
-	void f(){
-		class X{
-			class B{}
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail93/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail93/in/A.java
deleted file mode 100644
index 40039ab..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail93/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-public class A{
-	void f(){
-		class X{
-			class B{
-				native void m();
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail94/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail94/in/A.java
deleted file mode 100644
index ff0cb15..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail94/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{}
-class B{
-	native void m(A a);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail95/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail95/in/A.java
deleted file mode 100644
index ac49ce4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFail95/in/A.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package p;
-class A {
-	class Z {
-		void o() {
-			{
-				class F {
-					{
-						class B {
-							void hj() {
-							}
-						}
-					}
-				}
-			}
-		}
-	}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFailRegression1GCRKMQ/in/Blinky.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFailRegression1GCRKMQ/in/Blinky.java
deleted file mode 100644
index 4140567..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testFailRegression1GCRKMQ/in/Blinky.java
+++ /dev/null
@@ -1,9 +0,0 @@
-import java.util.*; 
-import java.io.File;
-
-public class Blinky{
-
-	public static void main(String[] args) {
-	}
-	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testIllegalInnerClass/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testIllegalInnerClass/in/A.java
deleted file mode 100644
index b376073..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testIllegalInnerClass/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B{
-  class A{}
-} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testIllegalTypeName1/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testIllegalTypeName1/in/A.java
deleted file mode 100644
index 6f63ab9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testIllegalTypeName1/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A {
-}
-class B extends A{
-} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testIllegalTypeName2/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testIllegalTypeName2/in/A.java
deleted file mode 100644
index 6f63ab9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testIllegalTypeName2/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A {
-}
-class B extends A{
-} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testIllegalTypeName3/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testIllegalTypeName3/in/A.java
deleted file mode 100644
index 6f63ab9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testIllegalTypeName3/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A {
-}
-class B extends A{
-} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testIllegalTypeName4/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testIllegalTypeName4/in/A.java
deleted file mode 100644
index 6f63ab9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testIllegalTypeName4/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A {
-}
-class B extends A{
-} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testIllegalTypeName5/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testIllegalTypeName5/in/A.java
deleted file mode 100644
index 6f63ab9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testIllegalTypeName5/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A {
-}
-class B extends A{
-} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testIllegalTypeName6/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testIllegalTypeName6/in/A.java
deleted file mode 100644
index 6f63ab9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testIllegalTypeName6/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A {
-}
-class B extends A{
-} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testIllegalTypeName7/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testIllegalTypeName7/in/A.java
deleted file mode 100644
index 6f63ab9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testIllegalTypeName7/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A {
-}
-class B extends A{
-} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testIllegalTypeName8/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testIllegalTypeName8/in/A.java
deleted file mode 100644
index 6f63ab9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testIllegalTypeName8/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A {
-}
-class B extends A{
-} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testIllegalTypeName9/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testIllegalTypeName9/in/A.java
deleted file mode 100644
index 2ffd296..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testIllegalTypeName9/in/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A {
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testNoOp/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testNoOp/in/A.java
deleted file mode 100644
index 6f63ab9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testNoOp/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A {
-}
-class B extends A{
-} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testWrongArg1/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testWrongArg1/in/A.java
deleted file mode 100644
index 6f63ab9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testWrongArg1/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A {
-}
-class B extends A{
-} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testWrongArg2/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testWrongArg2/in/A.java
deleted file mode 100644
index 6f63ab9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testWrongArg2/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A {
-}
-class B extends A{
-} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testWrongArg3/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testWrongArg3/in/A.java
deleted file mode 100644
index 6f63ab9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testWrongArg3/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A {
-}
-class B extends A{
-} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testWrongArg4/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testWrongArg4/in/A.java
deleted file mode 100644
index 6f63ab9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/testWrongArg4/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A {
-}
-class B extends A{
-} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test1/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test1/in/A.java
deleted file mode 100644
index b390b33..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test1/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-//renaming A.m to k
-abstract class A {
-	abstract void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test1/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test1/out/A.java
deleted file mode 100644
index 1c62c61..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test1/out/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-//renaming A.m to k
-abstract class A {
-	abstract void k();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test10/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test10/in/A.java
deleted file mode 100644
index 189c1ee..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test10/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-//renaming A.m to k
-class A {
-	void m(){}
-}
-class B {
-	void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test10/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test10/out/A.java
deleted file mode 100644
index 39cbee9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test10/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-//renaming A.m to k
-class A {
-	void k(){}
-}
-class B {
-	void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test11/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test11/in/A.java
deleted file mode 100644
index 73b0420f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test11/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-//renaming A.m to k
-class A {
-	void m(){}
-}
-class B extends A{
-	void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test11/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test11/out/A.java
deleted file mode 100644
index 43cb647..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test11/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-//renaming A.m to k
-class A {
-	void k(){}
-}
-class B extends A{
-	void k(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test12/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test12/in/A.java
deleted file mode 100644
index eba14d9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test12/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-//renaming A.m to k
-class A {
-	void m(){}
-}
-class B extends A{
-	public void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test12/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test12/out/A.java
deleted file mode 100644
index dff6414..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test12/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-//renaming A.m to k
-class A {
-	void k(){}
-}
-class B extends A{
-	public void k(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test13/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test13/in/A.java
deleted file mode 100644
index 0e114b1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test13/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-//renaming A.m to k
-class B{
-	private void m(){
-	}
-	void f(){
-		m();
-	}
-}
-class A extends B{
-	void m(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test13/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test13/out/A.java
deleted file mode 100644
index aa8b9db..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test13/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-//renaming A.m to k
-class B{
-	private void m(){
-	}
-	void f(){
-		m();
-	}
-}
-class A extends B{
-	void k(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test14/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test14/in/A.java
deleted file mode 100644
index 962ae44..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test14/in/A.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package p;
-//renaming A.m to k
-class B{
-	private void k(){
-	}
-	void f(){
-		k();
-	}
-}
-class A extends B{
-	void m(){
-	}
-	void f(){
-		m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test14/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test14/out/A.java
deleted file mode 100644
index 978ee42..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test14/out/A.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package p;
-//renaming A.m to k
-class B{
-	private void k(){
-	}
-	void f(){
-		k();
-	}
-}
-class A extends B{
-	void k(){
-	}
-	void f(){
-		k();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test15/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test15/in/A.java
deleted file mode 100644
index 0dc48af..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test15/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//renaming A.m to k
-class A{
-	int m(int m){
-		return m(m(m));
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test15/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test15/out/A.java
deleted file mode 100644
index 1459a9a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test15/out/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//renaming A.m to k
-class A{
-	int k(int m){
-		return k(k(m));
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test16/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test16/in/A.java
deleted file mode 100644
index ab6d0b5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test16/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//renaming A.m to fred
-class A{
-	int m(int m){
-		return m(m(m));
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test16/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test16/out/A.java
deleted file mode 100644
index f701b63..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test16/out/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//renaming A.m to fred
-class A{
-	int fred(int m){
-		return fred(fred(m));
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test17/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test17/in/A.java
deleted file mode 100644
index 9e7294f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test17/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//renaming A.m to kk
-package p;
-public class A {
-	void m(int m){}
-}
-class B extends A{
-	void m(boolean m){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test17/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test17/out/A.java
deleted file mode 100644
index 4c21116..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test17/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//renaming A.m to kk
-package p;
-public class A {
-	void kk(int m){}
-}
-class B extends A{
-	void m(boolean m){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test18/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test18/in/A.java
deleted file mode 100644
index 6208aa1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test18/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//renaming B.m to kk
-package p;
-class B {
-	void m(int m) {
-	}
-
-}
-public class A extends B {
-	void m(int m) {
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test18/in/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test18/in/C.java
deleted file mode 100644
index 4794cc8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test18/in/C.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class C{
-	void k(){
-		new A().m(4);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test18/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test18/out/A.java
deleted file mode 100644
index 763c416..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test18/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//renaming B.m to kk
-package p;
-class B {
-	void kk(int m) {
-	}
-
-}
-public class A extends B {
-	void kk(int m) {
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test18/out/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test18/out/C.java
deleted file mode 100644
index 493535e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test18/out/C.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class C{
-	void k(){
-		new A().kk(4);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test19/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test19/in/A.java
deleted file mode 100644
index 00408da..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test19/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-//renaming A.m to fred
-package p;
-public class A{
-	void m() {
-	}
-}
-
-class B{
-	void k(){
-		A a= new A();
-		a.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test19/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test19/out/A.java
deleted file mode 100644
index ce31818..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test19/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-//renaming A.m to fred
-package p;
-public class A{
-	void fred() {
-	}
-}
-
-class B{
-	void k(){
-		A a= new A();
-		a.fred();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test2/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test2/in/A.java
deleted file mode 100644
index 34ca89c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test2/in/A.java
+++ /dev/null
@@ -1,15 +0,0 @@
-//renaming A.m to fred
-package p;
-public class A{
-	void m() {
-	}
-}
-
-class B{
-	void k(){
-		A a= new A();
-		a
-		.
-		m ();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test2/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test2/out/A.java
deleted file mode 100644
index d7ddb59..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test2/out/A.java
+++ /dev/null
@@ -1,15 +0,0 @@
-//renaming A.m to fred
-package p;
-public class A{
-	void fred() {
-	}
-}
-
-class B{
-	void k(){
-		A a= new A();
-		a
-		.
-		fred ();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test20/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test20/in/A.java
deleted file mode 100644
index 726d3fb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test20/in/A.java
+++ /dev/null
@@ -1,25 +0,0 @@
-//renaming A.m to fred
-package p;
-public class A{
-	int m(int m) {
-		return m	(	m	)	;
-	}
-}
-
-class B{
-	void k(){
-		A a= new A();
-		a
-	.
-		m 
-			(
-			a
-				.
-	m	
-				(
-					6
-			)	
-			
-		);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test20/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test20/out/A.java
deleted file mode 100644
index 0750d28..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test20/out/A.java
+++ /dev/null
@@ -1,25 +0,0 @@
-//renaming A.m to fred
-package p;
-public class A{
-	int fred(int m) {
-		return fred	(	m	)	;
-	}
-}
-
-class B{
-	void k(){
-		A a= new A();
-		a
-	.
-		fred 
-			(
-			a
-				.
-	fred	
-				(
-					6
-			)	
-			
-		);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test21/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test21/in/A.java
deleted file mode 100644
index 4d69649..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test21/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-//renaming A.m to fred
-package p;
-public class A{
-	int m(int m) {
-		return m	(	m	)	;
-	}
-}
-class B extends A{
-	void f(){
-		super .
-		m (4);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test21/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test21/out/A.java
deleted file mode 100644
index e16a39c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test21/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-//renaming A.m to fred
-package p;
-public class A{
-	int fred(int m) {
-		return fred	(	m	)	;
-	}
-}
-class B extends A{
-	void f(){
-		super .
-		fred (4);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test22/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test22/in/A.java
deleted file mode 100644
index 56d0efa..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test22/in/A.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package p;
-//renaming A.m to k
-class B{
-	private void m(){
-		System.out.println("B.m");	
-	}
-	void fred(){
-		m();
-		B b= new B();
-		b.m();	
-		B b1= new A();
-		b1.m();
-		B bc= new C();
-		bc.m();
-		
-		A ba= new A();
-		ba.m();
-		A ac= new C();
-		ac.m();
-		C c= new C();
-		c.m();
-		
-	}
-}
-class A extends B{
-	void m(){
-		System.out.println("A.m");	
-	}
-}
-class C extends A{
-	void m(){
-		System.out.println("C.m");	
-	}
-}
-
-class test{
-	public static void main(String[] args){
-		new B().fred();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test22/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test22/out/A.java
deleted file mode 100644
index c09b947..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test22/out/A.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package p;
-//renaming A.m to k
-class B{
-	private void m(){
-		System.out.println("B.m");	
-	}
-	void fred(){
-		m();
-		B b= new B();
-		b.m();	
-		B b1= new A();
-		b1.m();
-		B bc= new C();
-		bc.m();
-		
-		A ba= new A();
-		ba.k();
-		A ac= new C();
-		ac.k();
-		C c= new C();
-		c.k();
-		
-	}
-}
-class A extends B{
-	void k(){
-		System.out.println("A.m");	
-	}
-}
-class C extends A{
-	void k(){
-		System.out.println("C.m");	
-	}
-}
-
-class test{
-	public static void main(String[] args){
-		new B().fred();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test23/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test23/in/A.java
deleted file mode 100644
index 34da048..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test23/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-//renaming A.m to k
-class A{
-	void m(){
-	}
-}
-class test{
-	void m(){
-		class X extends A{
-			void m(){}
-		}
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test23/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test23/out/A.java
deleted file mode 100644
index ad18f1a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test23/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-//renaming A.m to k
-class A{
-	void k(){
-	}
-}
-class test{
-	void k(){
-		class X extends A{
-			void k(){}
-		}
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test24/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test24/in/A.java
deleted file mode 100644
index 751eff5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test24/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-//renaming A.m to k
-class A{
-	void m(String s){
-	}
-}
-class B extends A{
-	void m(java.lang.String s){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test24/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test24/out/A.java
deleted file mode 100644
index 692f888..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test24/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-//renaming A.m to k
-class A{
-	void k(String s){
-	}
-}
-class B extends A{
-	void k(java.lang.String s){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test25/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test25/in/A.java
deleted file mode 100644
index b7498e1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test25/in/A.java
+++ /dev/null
@@ -1,15 +0,0 @@
-//renaming A.m to k 
-package p;
-
-class A{
-	void m(){
-		System.out.println("a");
-	}
-	class B{
-		class C {
-			void f(){
-				m();
-			}
-		}	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test25/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test25/out/A.java
deleted file mode 100644
index a0ccb4d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test25/out/A.java
+++ /dev/null
@@ -1,15 +0,0 @@
-//renaming A.m to k 
-package p;
-
-class A{
-	void k(){
-		System.out.println("a");
-	}
-	class B{
-		class C {
-			void f(){
-				k();
-			}
-		}	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test26/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test26/in/A.java
deleted file mode 100644
index a89eb28..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test26/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//renaming A.m to k 
-package p;
-
-class A{
-	void m(){}
-}
-class B{
-	static {
-		new A().m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test26/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test26/out/A.java
deleted file mode 100644
index 0f715d6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test26/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//renaming A.m to k 
-package p;
-
-class A{
-	void k(){}
-}
-class B{
-	static {
-		new A().k();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test27/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test27/in/A.java
deleted file mode 100644
index 23de065..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test27/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//renaming A.m to k 
-package p;
-
-class A{
-	void m(){}
-}
-class B{
-	{
-		new A().m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test27/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test27/out/A.java
deleted file mode 100644
index 6b618dc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test27/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//renaming A.m to k 
-package p;
-
-class A{
-	void k(){}
-}
-class B{
-	{
-		new A().k();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test28/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test28/in/A.java
deleted file mode 100644
index 4a44acd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test28/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//renaming A.m to k 
-package p;
-
-class A{
-	void m(){}
-	{
-		new A().m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test28/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test28/out/A.java
deleted file mode 100644
index 73719a3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test28/out/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//renaming A.m to k 
-package p;
-
-class A{
-	void k(){}
-	{
-		new A().k();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test29/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test29/in/A.java
deleted file mode 100644
index d3cb7ef..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test29/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//renaming A.m to k 
-package p;
-
-class A{
-	void m(){}
-	static {
-		new A().m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test29/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test29/out/A.java
deleted file mode 100644
index 833cebf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test29/out/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//renaming A.m to k 
-package p;
-
-class A{
-	void k(){}
-	static {
-		new A().k();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test30/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test30/in/A.java
deleted file mode 100644
index 1fdbd9b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test30/in/A.java
+++ /dev/null
@@ -1,20 +0,0 @@
-//renaming A.m to k 
-package p;
-
-class B{
-	A f(){
-		return null;
-	}
-}
-
-class A{
-	B m(){
-		return null;
-	}
-}
-
-class C{
-	void f(B b){
-		b.f().m().f().m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test30/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test30/out/A.java
deleted file mode 100644
index cf5f404..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test30/out/A.java
+++ /dev/null
@@ -1,20 +0,0 @@
-//renaming A.m to k 
-package p;
-
-class B{
-	A f(){
-		return null;
-	}
-}
-
-class A{
-	B k(){
-		return null;
-	}
-}
-
-class C{
-	void f(B b){
-		b.f().k().f().k();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test31/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test31/in/A.java
deleted file mode 100644
index 60f4b48..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test31/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//renaming A.m to k 
-package p;
-
-class A{
-	void m(){
-		this.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test31/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test31/out/A.java
deleted file mode 100644
index 5325623..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test31/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-//renaming A.m to k 
-package p;
-
-class A{
-	void k(){
-		this.k();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test32/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test32/in/A.java
deleted file mode 100644
index db159df..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test32/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//no ref update
-//renaming A.m to k 
-package p;
-
-class A{
-	void m(){
-		this.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test32/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test32/out/A.java
deleted file mode 100644
index d129128..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test32/out/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-//no ref update
-//renaming A.m to k 
-package p;
-
-class A{
-	void k(){
-		this.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test33/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test33/in/A.java
deleted file mode 100644
index e955c8b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test33/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//renaming A.m to k 
-package p;
-class A{
-	public void m(){}
-}
-
-class AQE extends A{
-	public void m(){
-		super.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test33/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test33/out/A.java
deleted file mode 100644
index 7eafaed..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test33/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//renaming A.m to k 
-package p;
-class A{
-	public void k(){}
-}
-
-class AQE extends A{
-	public void k(){
-		super.k();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test34/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test34/in/A.java
deleted file mode 100644
index 3a6c8d4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test34/in/A.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package p;
-class A {
-/**
-*  Comment section
-*
-**/
-  public A() {
-  }
-
-  protected void A() {
-  }
-}
-
-class B extends A {
-  public B() {
-     super(); 
-  }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test34/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test34/out/A.java
deleted file mode 100644
index 3a6c8d4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/test34/out/A.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package p;
-class A {
-/**
-*  Comment section
-*
-**/
-  public A() {
-  }
-
-  protected void A() {
-  }
-}
-
-class B extends A {
-  public B() {
-     super(); 
-  }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testAnon0/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testAnon0/in/A.java
deleted file mode 100644
index 09ece35..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testAnon0/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-//renaming A.m to k
-public class A {
-	void m(){}
-}
-class B{
-	void f(){
-		A a= new A(){
-			void m(){
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testAnon0/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testAnon0/out/A.java
deleted file mode 100644
index 3ebde2a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testAnon0/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-//renaming A.m to k
-public class A {
-	void k(){}
-}
-class B{
-	void f(){
-		A a= new A(){
-			void k(){
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail0/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail0/in/A.java
deleted file mode 100644
index e6c4867..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail0/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-//can't rename native methods
-class A{
- 	native m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail1/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail1/in/A.java
deleted file mode 100644
index 630221d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail1/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//toString can't be renamed - it's a special case (it's called implicitly)
- class A{
-	public String toString(){
-		return null;
-	}; 	
- }
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail10/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail10/in/A.java
deleted file mode 100644
index f7b9bb4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail10/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-//can't rename m to k
-class B{
-	void k(){}
-}
-class A extends B{
-	void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail11/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail11/in/A.java
deleted file mode 100644
index 5f055ac..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail11/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-//can't rename m to k
-class B{
-	static void k(){}
-}
-class A extends B{
-	void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail12/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail12/in/A.java
deleted file mode 100644
index 9c02f0c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail12/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-//can't rename m to k
-class B{
-	void k(){}
-}
-abstract class A extends B{
-	abstract void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail13/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail13/in/A.java
deleted file mode 100644
index 4333b65..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail13/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-//can't rename m to k
-abstract class B{
-	abstract void k();
-}
-class A extends B{
-	void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail14/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail14/in/A.java
deleted file mode 100644
index e835268..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail14/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-//can't rename m to k
-class B{
-	void k(int x){}
-}
-class A extends B{
-	void m(int f){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail15/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail15/in/A.java
deleted file mode 100644
index c1f7d7b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail15/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-//can't rename m to k
-class C {
-	void k(){}
-}
-class B extends C{
-}
-class A extends B{
-	void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail17/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail17/in/A.java
deleted file mode 100644
index 9eb829a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail17/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-//renaming A.m would require renaming a native method
-class A {
-	void m(){}
-}
-class B extends A{
-	native void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail18/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail18/in/A.java
deleted file mode 100644
index a1da779..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail18/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-//can't rename m to k - defined in subclass
-class A {
-	void m(){}
-}
-class B extends A{
-	private void k(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail19/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail19/in/A.java
deleted file mode 100644
index 8b3a74e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail19/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-//can't rename m to k - defined in subclass
-class A {
-	void m(){}
-}
-class B extends A{
-	public void k(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail2/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail2/in/A.java
deleted file mode 100644
index 6ef68c1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail2/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-//can't rename m in A  - must do it in B
-class B{
-	void m(){}
-}
-class A extends B{
-	void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail20/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail20/in/A.java
deleted file mode 100644
index 90c07d1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail20/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-//can't rename m to k - defined in subclass
-class A {
-	void m(){
-	}
-}
-class B extends A{
-	public void k(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail21/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail21/in/A.java
deleted file mode 100644
index a16713b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail21/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-//can't rename m to k - defined in subclass
-class A {
-	void m(){
-	}
-}
-class B extends A{
-	static void k(){
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail22/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail22/in/A.java
deleted file mode 100644
index 5a15474..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail22/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-//can't rename m to k - defined in subclass
-class A {
-	void m(){
-	}
-}
-class B extends A{
-	private static void k(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail23/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail23/in/A.java
deleted file mode 100644
index 3d07a65..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail23/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-//can't rename A.m to k - defined in superclass
-class B {
-	void k(){
-	}
-}
-class A extends B{
-	void m(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail24/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail24/in/A.java
deleted file mode 100644
index a53fdd9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail24/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-//can't rename A.m to k - defined in superclass
-class B {
-	static void k(){
-	}
-}
-class A extends B{
-	void m(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail25/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail25/in/A.java
deleted file mode 100644
index 3d07a65..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail25/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-//can't rename A.m to k - defined in superclass
-class B {
-	void k(){
-	}
-}
-class A extends B{
-	void m(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail26/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail26/in/A.java
deleted file mode 100644
index 6b4353a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail26/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//can't rename A.m to k - duplicate
-class A {
-	void k(){}
-	void m(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail27/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail27/in/A.java
deleted file mode 100644
index aba458a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail27/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//can't rename A.m to k - duplicate
-class A {
-	private void k(){}
-	void m(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail28/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail28/in/A.java
deleted file mode 100644
index bf6ed6a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail28/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//can't rename A.m to k - duplicate
-class A {
-	static void k(){}
-	void m(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail29/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail29/in/A.java
deleted file mode 100644
index 3af831e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail29/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-//can't rename A.m - defined in superclass
-class B{
-	void m(){
-	}
-}
-class A extends B{
-	void m(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail3/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail3/in/A.java
deleted file mode 100644
index 102bf12..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail3/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-//can't rename m in A - must do it in B
-class B{
-	int m(){}
-}
-class C extends B{
-}
-class A extends C{
-	int m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail30/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail30/in/A.java
deleted file mode 100644
index d467ff8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail30/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-//can't rename A.m - declared in superclass
-class B {
-	native void m();
-}
-class A extends B{
-	void m(){}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail31/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail31/in/A.java
deleted file mode 100644
index d756bca..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail31/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//can't rename A.m to k
-package p;
-public class A {
-	void m(String m){
-		System.out.println("A");
-	}
-}
-class B extends A{
-	void k(Object m){
-		System.out.println("B");
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail32/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail32/in/A.java
deleted file mode 100644
index 8fcdbd8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail32/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-//can't rename A.m to k
-package p;
-public class A {
-	void m(Object m){
-		System.out.println("A");
-	}
-}
-class B extends A{
-	void k(String m){
-		System.out.println("B");
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail33/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail33/in/A.java
deleted file mode 100644
index c917be1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail33/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-//can't rename A.toString
-package p;
-class A{
-	public java.lang.String toString(){
-		return "fred";
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail34/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail34/in/A.java
deleted file mode 100644
index 1c72cc2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail34/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-//can't rename A.m to k
-class A{
-	void m(String s){
-	}
-}
-class B extends A{
-	void k(java.lang.String s){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail35/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail35/in/A.java
deleted file mode 100644
index 237d8d3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail35/in/A.java
+++ /dev/null
@@ -1,19 +0,0 @@
-//can't rename A.m to k
-package p;
-class A{
-	void m(){
-	}
-}
-class X{
-	void k(){
-	}
-	class B{
-		void k(){
-		}
-		class C extends A{
-			void f(){
-				m();
-			}
-		}	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail36/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail36/in/A.java
deleted file mode 100644
index 98e2eed..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail36/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-//can't rename A.m to k
-class B{
-	static void k(){}	
-}
-class A extends B{
- 	public void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail37/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail37/in/A.java
deleted file mode 100644
index d4c4e40..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail37/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-//can't rename A.m to k
-class A{
-	void m(){};
-}
-class B extends A{
- 	static public void k(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail38/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail38/in/A.java
deleted file mode 100644
index 524f740..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail38/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-//can't rename A.m to k
-class A{
-	void m(){};
-	class B {
-		void k(){
-			m();
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail4/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail4/in/A.java
deleted file mode 100644
index 3fc227b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail4/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-//renaming m in A would require renaming it in I
-class A{
- public void m(){}
-}
-
-class B extends A implements I{
-}
-
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail5/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail5/in/A.java
deleted file mode 100644
index ff8d75e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail5/in/A.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package p;
-//renaming m in A would require renaming it in I
-class A{
- 	public void m(){}
-}
-
-class B extends A implements I2{
-}
-
-
-interface I {
-	void m();
-}
-
-interface I2 extends I{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail6/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail6/in/A.java
deleted file mode 100644
index 7d0529c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail6/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-//renaming m in A would require renaming it in I
-class A implements I{
-	void m(){}
-}
-
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail7/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail7/in/A.java
deleted file mode 100644
index 64b78f3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail7/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-//can't rename m to k
-class A{
-	void m(){}
-	void k(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail8/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail8/in/A.java
deleted file mode 100644
index b3f4cac..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail8/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-//can't rename m to k
-class A{
-	void m(){}
-}
-class B extends A{
-	void k(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail9/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail9/in/A.java
deleted file mode 100644
index fe8816e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameVirtualMethodInClass/testFail9/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-//can't rename m to k
-class A{
-	int m(int i){}
-}
-class B extends A{
-	
-}
-class C extends B{
-	int k(int i){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ReorgTests/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ReorgTests/A.java
deleted file mode 100644
index 10b23af..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ReorgTests/A.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package p;
-class A{}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ReorgTests/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ReorgTests/B.java
deleted file mode 100644
index 8a349d2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ReorgTests/B.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package p;
-class B{}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ReorgTests/launcher.gif b/org.eclipse.jdt.ui.tests.refactoring/resources/ReorgTests/launcher.gif
deleted file mode 100644
index 961894a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ReorgTests/launcher.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ReorgTests/p1/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ReorgTests/p1/A.java
deleted file mode 100644
index fd8eb8c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ReorgTests/p1/A.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package p1;
-class A{}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail0/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail0/in/A.java
deleted file mode 100644
index 3b19265..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail0/in/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A{}
-class B extends A{}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail1/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail1/in/A.java
deleted file mode 100644
index 9d71109..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail1/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{}
-class B 
-{
-	void v(){
-	new A();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail10/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail10/in/A.java
deleted file mode 100644
index ecd28f7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail10/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-static int x(){
-	A.x();
-};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail11/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail11/in/A.java
deleted file mode 100644
index 4389790..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail11/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-class B{
-	void d(){
-		new A();
-	}
-}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail12/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail12/in/A.java
deleted file mode 100644
index c19b365..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail12/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{}
-class B{
-	void f(){
-		new A(){
-			void k(){}
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail13/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail13/in/A.java
deleted file mode 100644
index 1a3a47f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail13/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-}
-class B{
-	void x(){
-		class X extends A(){
-		}
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail14/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail14/in/A.java
deleted file mode 100644
index f13d2a4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail14/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class A{
-	class B{
-	}
-}
-class C{
-	void b(){
-		A.B g;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail15/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail15/in/A.java
deleted file mode 100644
index 6fdf183..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail15/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{}
-class B 
-{
-	void v(A a){
-	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail16/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail16/in/A.java
deleted file mode 100644
index 56fb44c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail16/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-}
-class B{
-	void f(){
-		Object d= A.class;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail17/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail17/in/A.java
deleted file mode 100644
index 15dc856..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail17/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-static int x(){};
-}
-class B{
-	void f(){
-		Object f= (A)new A();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail18/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail18/in/A.java
deleted file mode 100644
index 4092371..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail18/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-	class B{}
-}
-class C{
-	void f(){
-		new A().new B();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail19/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail19/in/A.java
deleted file mode 100644
index b9f3830..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail19/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-interface I{}
-class B implements A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail2/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail2/in/A.java
deleted file mode 100644
index eb9849f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail2/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-}
-class B{
-	A f(){
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail20/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail20/in/A.java
deleted file mode 100644
index 6f946e1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail20/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A extends Exception{
-}
-class B{
- void m() throws A{
- }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail21/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail21/in/A.java
deleted file mode 100644
index 75dbf31..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail21/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-class A extends Exception{
- void m() throws A{
- }
-	void j(){
- 	try{
- 		m();
- 	}
- 	catch (A a){
- 	}
- }
-	
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail3/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail3/in/A.java
deleted file mode 100644
index 85e031d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail3/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-static int x(){};
-}
-class B{
-	void g(){A.x();}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail4/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail4/in/A.java
deleted file mode 100644
index 1362380..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail4/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{}
-class B{
- {
-  new A();
- }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail5/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail5/in/A.java
deleted file mode 100644
index 780bc11..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail5/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{}
-class B{
- static {
-  new A();
- }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail6/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail6/in/A.java
deleted file mode 100644
index 47efdd0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail6/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A{
-static int x(){};
-}
-class B{
-	class C{
-		void f(){
-		new A();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail7/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail7/in/A.java
deleted file mode 100644
index 1c6765e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail7/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-static int x(){};
-}
-class B{
-	class C extends A{
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail8/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail8/in/A.java
deleted file mode 100644
index 08b5afd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail8/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void m(){
-		new A();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail9/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail9/in/A.java
deleted file mode 100644
index 4b7553a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SafeDeleteType/testFail9/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-static int x;
-	void a(){
-	A.x= A.x;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/.cvsignore b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/.cvsignore
deleted file mode 100644
index f59f514..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-.metadata
-bin
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/.cvsignore b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/.cvsignore
deleted file mode 100644
index 4fdcfd7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-bin
-.classpath
-*.class
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/.project b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/.project
deleted file mode 100644
index 3605d74..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>SefTests</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/A.java
deleted file mode 100644
index 287ef37..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-public class A {
-	public int field;
-	
-	public void foo() {
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/X.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/X.java
deleted file mode 100644
index 2f8058f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/X.java
+++ /dev/null
@@ -1,11 +0,0 @@
-public class X {
-	private String fField;
-
-	protected void setField(String field) {
-		fField = field;
-	}
-
-	protected String getField() {
-		return fField;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/Y.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/Y.java
deleted file mode 100644
index 5a675a8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/Y.java
+++ /dev/null
@@ -1,5 +0,0 @@
-public class Y extends X {
-	void foo() {
-		setField("d");
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/base_in/TestPostfixInt.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/base_in/TestPostfixInt.java
deleted file mode 100644
index ec1e90b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/base_in/TestPostfixInt.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package base_in;
-
-public class TestPostfixInt {
-	int field;
-	
-	public void foo() {
-		field++;
-		field--;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/base_in/TestPrefixBoolean.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/base_in/TestPrefixBoolean.java
deleted file mode 100644
index a4a6fd0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/base_in/TestPrefixBoolean.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package base_in;
-
-public class TestPrefixBoolean {
-	boolean field;
-	
-	public void foo() {
-		boolean b;
-		b= !field;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/base_in/TestPrefixInt.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/base_in/TestPrefixInt.java
deleted file mode 100644
index dadb237..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/base_in/TestPrefixInt.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package base_in;
-
-public class TestPrefixInt {
-	int field;
-	
-	public void foo() {
-		++field;
-		--field;
-		int i;
-		i= +field;
-		i= - field;
-		i= ~field;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/base_in/TestThisExpression.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/base_in/TestThisExpression.java
deleted file mode 100644
index 633d90f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/base_in/TestThisExpression.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package base_in;
-
-public class TestThisExpression {
-	int field;
-	
-	public void foo() {
-		this.field= 10;
-		new TestThisExpression().field= 11;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/base_in/TestThisExpressionInner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/base_in/TestThisExpressionInner.java
deleted file mode 100644
index 9e3c546..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/base_in/TestThisExpressionInner.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package base_in;
-
-public class TestThisExpressionInner {
-	int field;
-
-	class Inner {
-		int field;
-		public void foo() {
-			field= 10;
-			TestThisExpressionInner.this.field= 11;
-		}
-	}
-	
-	public void foo() {
-		field= 10;
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/base_out/TestPostfixInt.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/base_out/TestPostfixInt.java
deleted file mode 100644
index edeae91..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/base_out/TestPostfixInt.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package base_out;
-
-public class TestPostfixInt {
-	private int field;
-	
-	public void foo() {
-		setField(getField() + 1);
-		setField(getField() - 1);
-	}
-
-	void setField(int field) {
-		this.field = field;
-	}
-
-	int getField() {
-		return field;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/base_out/TestPrefixBoolean.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/base_out/TestPrefixBoolean.java
deleted file mode 100644
index d74d66f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/base_out/TestPrefixBoolean.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package base_out;
-
-public class TestPrefixBoolean {
-	private boolean field;
-	
-	public void foo() {
-		boolean b;
-		b= !getField();
-	}
-
-	void setField(boolean field) {
-		this.field = field;
-	}
-
-	boolean getField() {
-		return field;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/base_out/TestPrefixInt.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/base_out/TestPrefixInt.java
deleted file mode 100644
index 0423ebf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/base_out/TestPrefixInt.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package base_out;
-
-public class TestPrefixInt {
-	private int field;
-	
-	public void foo() {
-		setField(getField() + 1);
-		setField(getField() - 1);
-		int i;
-		i= +getField();
-		i= - getField();
-		i= ~getField();
-	}
-
-	void setField(int field) {
-		this.field = field;
-	}
-
-	int getField() {
-		return field;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/base_out/TestThisExpression.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/base_out/TestThisExpression.java
deleted file mode 100644
index 5a1d1bf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/base_out/TestThisExpression.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package base_out;
-
-public class TestThisExpression {
-	private int field;
-	
-	public void foo() {
-		setField(10);
-		new TestThisExpression().setField(11);
-	}
-
-	void setField(int field) {
-		this.field = field;
-	}
-
-	int getField() {
-		return field;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/base_out/TestThisExpressionInner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/base_out/TestThisExpressionInner.java
deleted file mode 100644
index ca4b78a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/base_out/TestThisExpressionInner.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package base_out;
-
-public class TestThisExpressionInner {
-	private int field;
-
-	class Inner {
-		int field;
-		public void foo() {
-			field= 10;
-			TestThisExpressionInner.this.setField(11);
-		}
-	}
-	
-	public void foo() {
-		setField(10);
-	}
-
-	void setField(int field) {
-		this.field = field;
-	}
-
-	int getField() {
-		return field;
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/bb.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/bb.java
deleted file mode 100644
index 9738665..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/bb.java
+++ /dev/null
@@ -1,3 +0,0 @@
-public class bb {
-	public static Object bb;
-}	
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/invalid/TestInvalidOverwrite.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/invalid/TestInvalidOverwrite.java
deleted file mode 100644
index e8bed86..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/invalid/TestInvalidOverwrite.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalid;
-
-public class TestInvalidOverwrite extends A {
-	public int field;
-}
-
-class A {
-	public Class getField() {
-		return null;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/invalid/TestPostfixExpression.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/invalid/TestPostfixExpression.java
deleted file mode 100644
index 196adc4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/invalid/TestPostfixExpression.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package invalid;
-
-public class TestPostfixExpression {
-	int field;
-	
-	public void foo() {
-		int i;
-		i= field++;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestArrayRead.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestArrayRead.java
deleted file mode 100644
index d34a01b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestArrayRead.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package object_in;
-
-public class TestArrayRead {
-	private Object[] field;
-
-	public TestArrayRead() {
-		field= new Object[0];
-	}
-	public void basicRun() {
-		System.err.println(field.length);
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestCompoundWrite.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestCompoundWrite.java
deleted file mode 100644
index 6c33a90..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestCompoundWrite.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package object_in;
-
-public class TestCompoundWrite {
-	String field;
-	
-	public void foo() {
-		field+= "d";
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestCompoundWrite2.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestCompoundWrite2.java
deleted file mode 100644
index a472092..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestCompoundWrite2.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package object_in;
-
-public class TestCompoundWrite2 {
-	String field;
-	
-	public void foo() {
-		field+= "d" + "e";
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestCompoundWrite3.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestCompoundWrite3.java
deleted file mode 100644
index 1705e30..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestCompoundWrite3.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package object_in;
-
-public class TestCompoundWrite3 {
-	TestCompoundWrite3 a;
-	String field;
-	
-	public void foo() {
-		a.a.field+= "d";
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestFinalField.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestFinalField.java
deleted file mode 100644
index df16e5d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestFinalField.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package object_in;
-
-public class TestFinalField {
-	private final Object field;
-	TestFinalField(Object y) {
-		field = y;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestNestedRead.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestNestedRead.java
deleted file mode 100644
index 4787ec9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestNestedRead.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package object_in;
-
-public class TestNestedRead {
-	public TestNestedRead field;
-	public int i;
-	
-	public int foo() {
-		return field.field.field.field.i;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestSetterAsReceiver.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestSetterAsReceiver.java
deleted file mode 100644
index 84a383e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestSetterAsReceiver.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package object_in;
-
-public class TestSetterAsReceiver {
-	String field;
-	
-	public void foo() {
-		TestSetterAsReceiver a= null;
-		(a.field= "d").length();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestSetterInAssignment.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestSetterInAssignment.java
deleted file mode 100644
index 3e49e76..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestSetterInAssignment.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package object_in;
-
-public class TestSetterInAssignment {
-	String field;
-	
-	public void foo() {
-		TestSetterInAssignment a= null;
-		String t= null;
-		t= a.field= "d";
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestSetterInExpression.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestSetterInExpression.java
deleted file mode 100644
index 9d21604..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestSetterInExpression.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package object_in;
-
-public class TestSetterInExpression {
-	String field;
-	
-	public void foo() {
-		TestSetterInExpression a= null;
-		if ((a.field= "d") == "d")
-			foo();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestSetterInInitialization.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestSetterInInitialization.java
deleted file mode 100644
index 26ca7ca..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestSetterInInitialization.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package object_in;
-
-public class TestSetterInInitialization {
-	String field;
-	
-	public void foo() {
-		TestSetterInInitialization a= null;
-		String t= a.field= "d";
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestSimpleRead.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestSimpleRead.java
deleted file mode 100644
index 88fd832..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestSimpleRead.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package object_in;
-
-public class TestSimpleRead {
-	public String field;
-	
-	public void foo() {
-		String s= field;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestSimpleReadWrite.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestSimpleReadWrite.java
deleted file mode 100644
index 32e4d92..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestSimpleReadWrite.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package object_in;
-
-public class TestSimpleReadWrite {
-	public String field;
-	
-	public void foo() {
-		field= field + "field";
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestSimpleWrite.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestSimpleWrite.java
deleted file mode 100644
index cda6ebc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_in/TestSimpleWrite.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package object_in;
-
-public class TestSimpleWrite {
-	public String field;
-	
-	public void foo() {
-		field= "field";
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestArrayRead.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestArrayRead.java
deleted file mode 100644
index fdb4868..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestArrayRead.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package object_out;
-
-public class TestArrayRead {
-	private Object[] field;
-
-	public TestArrayRead() {
-		setField(new Object[0]);
-	}
-
-	private void setField(Object[] field) {
-		this.field = field;
-	}
-
-	private Object[] getField() {
-		return field;
-	}
-	public void basicRun() {
-		System.err.println(getField().length);
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestCompoundWrite.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestCompoundWrite.java
deleted file mode 100644
index adea2cc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestCompoundWrite.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package object_out;
-
-public class TestCompoundWrite {
-	private String field;
-	
-	public void foo() {
-		setField(getField() + "d");
-	}
-
-	void setField(String field) {
-		this.field = field;
-	}
-
-	String getField() {
-		return field;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestCompoundWrite2.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestCompoundWrite2.java
deleted file mode 100644
index 3510e95..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestCompoundWrite2.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package object_out;
-
-public class TestCompoundWrite2 {
-	private String field;
-	
-	public void foo() {
-		setField(getField() + ("d" + "e"));
-	}
-
-	void setField(String field) {
-		this.field = field;
-	}
-
-	String getField() {
-		return field;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestCompoundWrite3.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestCompoundWrite3.java
deleted file mode 100644
index 0386cf4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestCompoundWrite3.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package object_out;
-
-public class TestCompoundWrite3 {
-	TestCompoundWrite3 a;
-	private String field;
-	
-	public void foo() {
-		a.a.setField(a.a.getField() + "d");
-	}
-
-	void setField(String field) {
-		this.field = field;
-	}
-
-	String getField() {
-		return field;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestFinalField.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestFinalField.java
deleted file mode 100644
index bc3373d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestFinalField.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package object_out;
-
-public class TestFinalField {
-	private final Object field;
-	TestFinalField(Object y) {
-		field = y;
-	}
-
-	private Object getField() {
-		return field;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestNestedRead.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestNestedRead.java
deleted file mode 100644
index 89d89b2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestNestedRead.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package object_out;
-
-public class TestNestedRead {
-	private TestNestedRead field;
-	public int i;
-	
-	public int foo() {
-		return getField().getField().getField().getField().i;
-	}
-
-	public void setField(TestNestedRead field) {
-		this.field = field;
-	}
-
-	public TestNestedRead getField() {
-		return field;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestSetterAsReceiver.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestSetterAsReceiver.java
deleted file mode 100644
index 73af17e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestSetterAsReceiver.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package object_out;
-
-public class TestSetterAsReceiver {
-	private String field;
-	
-	public void foo() {
-		TestSetterAsReceiver a= null;
-		(a.setField("d")).length();
-	}
-
-	String setField(String field) {
-		return this.field = field;
-	}
-
-	String getField() {
-		return field;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestSetterInAssignment.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestSetterInAssignment.java
deleted file mode 100644
index e2fc0ee..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestSetterInAssignment.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package object_out;
-
-public class TestSetterInAssignment {
-	private String field;
-	
-	public void foo() {
-		TestSetterInAssignment a= null;
-		String t= null;
-		t= a.setField("d");
-	}
-
-	String setField(String field) {
-		return this.field = field;
-	}
-
-	String getField() {
-		return field;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestSetterInExpression.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestSetterInExpression.java
deleted file mode 100644
index 4928121..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestSetterInExpression.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package object_out;
-
-public class TestSetterInExpression {
-	private String field;
-	
-	public void foo() {
-		TestSetterInExpression a= null;
-		if ((a.setField("d")) == "d")
-			foo();
-	}
-
-	String setField(String field) {
-		return this.field = field;
-	}
-
-	String getField() {
-		return field;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestSetterInInitialization.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestSetterInInitialization.java
deleted file mode 100644
index ad359ac..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestSetterInInitialization.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package object_out;
-
-public class TestSetterInInitialization {
-	private String field;
-	
-	public void foo() {
-		TestSetterInInitialization a= null;
-		String t= a.setField("d");
-	}
-
-	String setField(String field) {
-		return this.field = field;
-	}
-
-	String getField() {
-		return field;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestSimpleRead.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestSimpleRead.java
deleted file mode 100644
index 43d9fe4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestSimpleRead.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package object_out;
-
-public class TestSimpleRead {
-	private String field;
-	
-	public void foo() {
-		String s= getField();
-	}
-
-	public void setField(String field) {
-		this.field = field;
-	}
-
-	public String getField() {
-		return field;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestSimpleReadWrite.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestSimpleReadWrite.java
deleted file mode 100644
index 5a6a56a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestSimpleReadWrite.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package object_out;
-
-public class TestSimpleReadWrite {
-	private String field;
-	
-	public void foo() {
-		setField(getField() + "field");
-	}
-
-	public void setField(String field) {
-		this.field = field;
-	}
-
-	public String getField() {
-		return field;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestSimpleWrite.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestSimpleWrite.java
deleted file mode 100644
index e94c499..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SefWorkSpace/SefTests/object_out/TestSimpleWrite.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package object_out;
-
-public class TestSimpleWrite {
-	private String field;
-	
-	public void foo() {
-		setField("field");
-	}
-
-	public void setField(String field) {
-		this.field = field;
-	}
-
-	public String getField() {
-		return field;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/.cvsignore b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/.cvsignore
deleted file mode 100644
index 48dd041..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-.metadata
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/.cvsignore b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/.cvsignore
deleted file mode 100644
index 4fdcfd7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-bin
-.classpath
-*.class
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test010.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test010.java
deleted file mode 100644
index 880e1b6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test010.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package invalidSelection;
-
-public class A_test010 {
-	public void /*]*/foo() {
-		foo();
-	}/*[*/
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test011.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test011.java
deleted file mode 100644
index 1adf115..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test011.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package invalidSelection;
-
-public class A_test011 {
-	public void foo() {
-		/*]*/foo(/*[*/);
-	}
-} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test012.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test012.java
deleted file mode 100644
index c89c75f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test012.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package invalidSelection;
-
-public class A_test012 {
-	public void foo() {
-		/*]*/f();
-		g(/*[*/);
-	}
-	
-	public void f() {
-	}
-	public void g() {
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test013.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test013.java
deleted file mode 100644
index b92d74d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test013.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package invalidSelection;
-
-public class A_test013 {
-	public void foo() {/*[*/
-		f();
-		g();
-	}/*[*/
-	
-	public void f() {
-	}
-	public void g() {
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test014.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test014.java
deleted file mode 100644
index de28005..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test014.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package invalidSelection;
-
-public class A_test014 {
-	public void foo() /*]*/{
-		foo();
-	}/*[*/
-	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test015.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test015.java
deleted file mode 100644
index 32e0e13..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test015.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package invalidSelection;
-
-public class A_test015 {
-	public void foo() /*]*/{
-		f();
-		g();
-	/*]*/}
-	
-	public void f() {
-	}
-	public void g() {
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test020.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test020.java
deleted file mode 100644
index d99ed0f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test020.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package invalidSelection;
-
-public class A_test020 {
-	public void foo(int x) {
-		switch(x) {
-			/*]*/case 10:
-				f();
-				break;/*[*/
-			case 11:
-				g();
-				break;
-			default:
-				f();
-				g();		
-		}
-	}
-	
-	public void f() {
-	}
-	public void g() {
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test021.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test021.java
deleted file mode 100644
index a104c30..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test021.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package invalidSelection;
-
-public class A_test021 {
-	public void foo(int x) {
-		/*]*/switch(x) {
-			case 10:
-				f();
-				break;/*[*/
-			case 11:
-				g();
-				break;
-			default:
-				f();
-				g();		
-		}
-	}
-	
-	public void f() {
-	}
-	public void g() {
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test022.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test022.java
deleted file mode 100644
index e256a20..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test022.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package invalidSelection;
-
-public class A_test022 {
-	public void foo(int x) {
-		switch(x) {
-			/*]*/case 10:
-				f();
-				break;
-			case 11:
-				g();
-				break;
-			default:
-				f();
-				g();		
-		/*]*/}
-	}
-	
-	public void f() {
-	}
-	public void g() {
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test030.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test030.java
deleted file mode 100644
index 79812d7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test030.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test030 {
-	public void foo(int x) {
-		{/*[*/
-			f();
-		}/*[*/
-	}	
-	public void f() {
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test031.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test031.java
deleted file mode 100644
index b8fc35b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test031.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test031 {
-	public void foo(int x) {
-		/*]*/{
-			f();
-		/*]*/}
-	}	
-	public void f() {
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test040.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test040.java
deleted file mode 100644
index f7a17c4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test040.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package invalidSelection;
-
-public class A_test040 {
-	public void foo() {
-		for (int i= 0; i /*]*/</*[*/ 10; i++)
-			foo();
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test042.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test042.java
deleted file mode 100644
index 87baa6f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test042.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package invalidSelection;
-
-public class A_test042 {
-	public void foo() {
-		for (int i= 0; i < 10; /*]*/i++/*[*/)
-			foo();
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test043.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test043.java
deleted file mode 100644
index 6782f44..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test043.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package invalidSelection;
-
-public class A_test043 {
-	public void foo() {
-		/*]*/for (int i= 0; i < 10; i++)/*[*/
-			foo();
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test044.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test044.java
deleted file mode 100644
index eba8d19..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test044.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package invalidSelection;
-
-public class A_test044 {
-	public void foo() {
-		/*]*/for (int i= 0; i < 10; i++)
-			foo(/*[*/);
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test045.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test045.java
deleted file mode 100644
index 8553338..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test045.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package invalidSelection;
-
-public class A_test045 {
-	public void foo() {
-		for /*]*/(int i= 0; i < 10; i++)
-			foo();/*[*/
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test046.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test046.java
deleted file mode 100644
index ad867fc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test046.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package invalidSelection;
-
-public class A_test046 {
-	public void foo() {
-		for (int i= 10; i < 10; i++)
-			for (int z= 10; z < 10; z++)
-				/*]*/foo();
-		foo()/*[*/;	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test047.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test047.java
deleted file mode 100644
index a84e445..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test047.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package invalidSelection;
-
-public class A_test047 {
-	public void foo() {
-		for (int i= 10; i < 10; i++)
-			/*]*/for (int z= 10; z < 10; z++)
-				foo();
-		foo()/*[*/;	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test050.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test050.java
deleted file mode 100644
index 1321a16..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test050.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package invalidSelection;
-
-public class A_test050 {
-	public void foo() {
-		while(1 /*]*/</*[*/ 10)
-			foo();
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test051.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test051.java
deleted file mode 100644
index e91b2d4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test051.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package invalidSelection;
-
-public class A_test051 {
-	public void foo() {
-		/*]*/while(1 < 10)/*[*/
-			foo();
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test052.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test052.java
deleted file mode 100644
index b374911..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test052.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package invalidSelection;
-
-public class A_test052 {
-	public boolean b() {
-		return true;
-	}
-	
-	public void foo() {
-		while(b())/*[*/
-			while(b())
-				foo();
-		foo()/*[*/;		
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test060.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test060.java
deleted file mode 100644
index e1b6bdd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test060.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package invalidSelection;
-
-public class A_test060 {
-	public void foo() {
-		do 
-			foo();
-		while(100 /*]*/>/*[*/  10);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test061.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test061.java
deleted file mode 100644
index a1e56d2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test061.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package invalidSelection;
-
-public class A_test061 {
-	public void foo() {
-		do 
-			/*]*/foo();
-		while(1 < 10);/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test062.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test062.java
deleted file mode 100644
index 4913526..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test062.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package invalidSelection;
-
-public class A_test062 {
-	public void foo() {
-		/*]*/do 
-			foo();/*[*/
-		while(1 < 10);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test063.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test063.java
deleted file mode 100644
index f5105cd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test063.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-import invalidSelection.*;
-
-public class A_test063 {
-	public void foo() {
-		do/*[*/
-			foo();
-		/*]*/while(1 < 10);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test070.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test070.java
deleted file mode 100644
index f2b6365..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test070.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package invalidSelection;
-
-public class A_test070 {
-	public int foo() {
-		int i= foo();
-		switch/*[*/ (i) {
-			case 1:
-				foo();
-			case 2:
-				foo();
-				foo();
-			case 3:
-				foo();
-			default:
-				foo();	
-		}/*[*/
-		return i;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test071.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test071.java
deleted file mode 100644
index 1e29c19..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test071.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package invalidSelection;
-
-public class A_test071 {
-	public int foo() {
-		int i= foo();
-		/*]*/switch (i) {
-			case 1:
-				foo();
-			case 2:
-				foo();
-				foo();
-			case 3:
-				foo();
-			default:
-				foo();	
-		/*]*/}
-		return i;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test072.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test072.java
deleted file mode 100644
index 786a188..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test072.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package invalidSelection;
-
-public class A_test072 {
-	public int foo() {
-		int i= foo();
-		switch (i) {
-			case 1/*]*/:
-				foo()/*[*/;
-			case 2:
-				foo();
-				foo();
-			case 3:
-				foo();
-			default:
-				foo();	
-		}
-		return i;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test073.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test073.java
deleted file mode 100644
index 921196e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test073.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package invalidSelection;
-
-public class A_test073 {
-	public int foo() {
-		int i= foo();
-		switch (i) {
-			case 1:/*[*/
-				foo();
-			case/*[*/2:
-				foo();
-				foo();
-			case 3:
-				foo();
-			default:
-				foo();	
-		}
-		return i;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test081.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test081.java
deleted file mode 100644
index 088e444..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test081.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test081 {
-	public boolean fBoolean;
-	public void foo() {
-		/*]*/if (fBoolean)
-			foo();
-		else
-			/*]*/foo();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test082.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test082.java
deleted file mode 100644
index 8e1e3bc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test082.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test082 {
-	public boolean fBoolean;
-	public void foo() {
-		/*]*/if (fBoolean)
-			foo();/*[*/
-		else
-			foo();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test083.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test083.java
deleted file mode 100644
index 05af41d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test083.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test083 {
-	public boolean fBoolean;
-	public void foo() {
-		/*]*/if (fBoolean)
-			foo();
-		/*]*/else
-			foo();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test084.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test084.java
deleted file mode 100644
index 42cf868..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test084.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test084 {
-	public boolean fBoolean;
-	public void foo() {
-		/*]*/if (fBoolean)
-			foo();
-		else/*[*/
-			foo();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test085.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test085.java
deleted file mode 100644
index 7969c16..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test085.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test085 {
-	public boolean fBoolean;
-	public void foo() {
-		if (fBoolean)
-			foo();
-		/*]*/else
-			foo();/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test100.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test100.java
deleted file mode 100644
index 8113e0b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test100.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test100 {
-	public void foo() {
-		try /*]*/{
-			foo();
-		}/*[*/ catch (Exception e) {
-			foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test101.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test101.java
deleted file mode 100644
index 26e171f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test101.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test101 {
-	public void foo() {
-		try /*]*/{
-			foo();
-		/*]*/} catch (Exception e) {
-			foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test102.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test102.java
deleted file mode 100644
index 39fd3ff..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test102.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test102 {
-	public void foo() {
-		try {/*[*/
-			foo();
-		}/*[*/ catch (Exception e) {
-			foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test103.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test103.java
deleted file mode 100644
index ffe0310..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test103.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test103 {
-	public void foo() {
-		try {
-			foo();
-		} catch (Exception e) /*]*/{
-			foo();
-		}/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test104.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test104.java
deleted file mode 100644
index 6bb367b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test104.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test104 {
-	public void foo() {
-		try {
-			foo();
-		} catch (Exception e) {/*[*/
-			foo();
-		}/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test105.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test105.java
deleted file mode 100644
index d8f6c1f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test105.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test105 {
-	public void foo() {
-		try {
-			foo();
-		} catch (Exception e) /*]*/{
-			foo();
-		/*]*/}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test106.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test106.java
deleted file mode 100644
index d5c166f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test106.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test106 {
-	public void foo() {
-		try {
-			foo();
-		} finally /*]*/{
-			foo();
-		}/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test107.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test107.java
deleted file mode 100644
index 4d8f1bd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test107.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test107 {
-	public void foo() {
-		try {
-			foo();
-		} finally {/*[*/
-			foo();
-		}/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test108.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test108.java
deleted file mode 100644
index 4c79c88..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test108.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test108 {
-	public void foo() {
-		try {
-			foo();
-		} finally /*]*/{
-			foo();
-		/*]*/}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test109.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test109.java
deleted file mode 100644
index fa68c05..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test109.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test109 {
-	public void foo() {
-		/*]*/try {
-			foo();
-		} finally {
-			foo();
-		/*]*/}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test110.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test110.java
deleted file mode 100644
index 6ecade3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test110.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test110 {
-	public void foo() {
-		try/*[*/{
-			foo();
-		} finally {
-			foo();
-		}/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test111.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test111.java
deleted file mode 100644
index c9903ff..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test111.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test111 {
-	public void foo() {
-		try {
-			foo();
-		} catch (/*]*/Exception e/*[*/) {
-			foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test112.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test112.java
deleted file mode 100644
index 689f857..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test112.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test112 {
-	public void foo() {
-		try {
-			foo();
-		} /*]*/catch (Exception e) {
-			foo();
-		}/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test113.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test113.java
deleted file mode 100644
index 2c2db9b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test113.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test113 {
-	public void foo() {
-		/*]*/try {
-			foo();
-		}/*[*/ catch (Exception e) {
-			foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test114.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test114.java
deleted file mode 100644
index 1cfce05..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test114.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test114 {
-	public void foo() {
-		try {
-			foo();
-		} /*]*/finally {
-			foo();
-		}/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test115.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test115.java
deleted file mode 100644
index 37a6af2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test115.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test115 {
-	public void foo() {
-		try {
-			foo();
-		} catch /*]*/(Exception e)/*[*/ {
-			foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test120.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test120.java
deleted file mode 100644
index a5fad98..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test120.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package invalidSelection;
-
-public class A_test120 {
-	public boolean foo() {
-		/*]*/return/*[*/ false;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test131.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test131.java
deleted file mode 100644
index 81471a2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test131.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package invalidSelection;
-
-public class A_test131 {
-	public void foo() {
-		
-		/*]*/class Inner {
-		}
-		foo();/*[*/
-		
-		Inner inner= new Inner();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test150.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test150.java
deleted file mode 100644
index 942d696..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test150.java
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test151.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test151.java
deleted file mode 100644
index aa41b19..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test151.java
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test152.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test152.java
deleted file mode 100644
index 91d26c6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test152.java
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test153.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test153.java
deleted file mode 100644
index eedcc24..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test153.java
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test160.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test160.java
deleted file mode 100644
index 965967c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test160.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package invalidSelection;
-
-public class A_test160 {
-	/*]*/public static class Inner {
-	}/*[*/
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test161.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test161.java
deleted file mode 100644
index ee94548..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test161.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package invalidSelection;
-
-public class A_test161 {
-	public void foo() {
-		class /*]*/Inner {
-		}/*]*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test170.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test170.java
deleted file mode 100644
index bda6db9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test170.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package invalidSelection;
-
-public class A_test170 {
-	public void foo() {
-		String tab[] = /*]*/{"hello", "world" } /*[*/;       
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test171.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test171.java
deleted file mode 100644
index cac9b44..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test171.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package invalidSelection;
-
-public class A_test171 {
-	public void foo() {
-		String /*]*/str = "ggg"/*[*/;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test172.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test172.java
deleted file mode 100644
index eca6057..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test172.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package invalidSelection;
-
-public class A_test172 {
-	public void foo() {
-		/*]*/int i= 10/*[*/, j= 20;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test173.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test173.java
deleted file mode 100644
index e9364fc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/invalidSelection/A_test173.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package invalidSelection;
-
-public class A_test173 {
-	public void foo() {
-		/*]*/int i= 10, j= 20;/*[*/
-		g(j);
-		g(i);
-	}
-	public void g(int i) {
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/selection/A_test1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/selection/A_test1.java
deleted file mode 100644
index c12b372..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/selection/A_test1.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package selection;
-
-public class A_test1 {
-	public void foo() {
-		/*[*/foo()/*]*/;
-	}
-} 
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/selection/A_test2.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/selection/A_test2.java
deleted file mode 100644
index 06787fa..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/selection/A_test2.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package selection;
-
-public class A_test2 {
-	public void foo() {
-		/*[*/foo()/*[*/;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/selection/A_test3.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/selection/A_test3.java
deleted file mode 100644
index b8e0567..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/selection/A_test3.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package selection;
-
-public class A_test3 {
-	public void foo() {
-		/*]*/foo()/*]*/;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/selection/A_test4.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/selection/A_test4.java
deleted file mode 100644
index 5f984e7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/selection/A_test4.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package selection;
-
-public class A_test4 {
-	public void foo() {
-		/*]*/foo()/*[*/;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test041_.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test041_.java
deleted file mode 100644
index cf01258..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test041_.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package validSelection;
-
-public class A_test041_ {
-	public void foo() {
-		for (/*]*/int i= 0/*[*/; i < 10; i++)
-			foo();
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test048_.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test048_.java
deleted file mode 100644
index c5b966c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test048_.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package validSelection;
-
-import java.util.Enumeration;
-
-public class A_test048_ {
-	public boolean flag;
-	public void foo() {
-		for (/*]*/Enumeration e= tests()/*[*/; e.hasMoreElements(); ) {
-			if (flag)
-				break;
-		}
-	}	
-	public Enumeration tests() {
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test080_.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test080_.java
deleted file mode 100644
index 3e0390b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test080_.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package validSelection;
-
-public class A_test080_ {
-	public boolean fBoolean;
-	public void foo() {
-		if (/*]*/fBoolean/*[*/)
-			foo();
-		else
-			foo();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test090_.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test090_.java
deleted file mode 100644
index 57f8a41..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test090_.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package validSelection;
-
-public class A_test090_ {
-	public void foo() {
-		for (int i= 0; i < 10; i++)
-			/*]*/break/*[*/;
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test091_.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test091_.java
deleted file mode 100644
index b79bc12..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test091_.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package validSelection;
-
-public class A_test091_ {
-	public void foo() {
-		for (int i= 0; i < 10; i++)
-			/*]*/continue/*[*/;
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test092_.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test092_.java
deleted file mode 100644
index feddadd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test092_.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package validSelection;
-
-public class A_test092_ {
-	public void foo() {
-		while (true)
-			/*]*/break/*[*/;
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test093_.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test093_.java
deleted file mode 100644
index 62a2331..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test093_.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package validSelection;
-
-public class A_test093_ {
-	public void foo() {
-		while (true)
-			/*]*/continue/*[*/;
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test094_.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test094_.java
deleted file mode 100644
index 922cb1f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test094_.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package validSelection;
-
-public class A_test094_ {
-	public void foo() {
-		do
-			/*]*/break/*[*/;
-		while(true);
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test095_.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test095_.java
deleted file mode 100644
index fe52406..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test095_.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package validSelection;
-
-public class A_test095_ {
-	public void foo() {
-		do
-			/*]*/continue/*[*/;
-		while(true);
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test096_.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test096_.java
deleted file mode 100644
index 2b3bce0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test096_.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package validSelection;
-
-public class A_test096_ {
-	public void foo() {
-		int i= 10;
-		switch(i) {
-			case 10:
-				foo();
-				/*]*/break/*[*/;
-		}
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test121_.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test121_.java
deleted file mode 100644
index 3461ad9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test121_.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package validSelection;
-
-public class A_test121_ {
-	public void foo() {
-		int x= 1;
-		int y= 2;
-		
-		/*]*/x= y + x;
-		y= x + y;/*[*/
-		
-		x++;
-		y++;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test122_.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test122_.java
deleted file mode 100644
index 20e6fba..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test122_.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package validSelection;
-
-public class A_test122_ {
-	public void foo() {
-		int x= 1;
-
-		/*]*/x= x + 2;
-		int y= 10;/*[*/
-		
-		x+= y + 20;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test130_.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test130_.java
deleted file mode 100644
index b6c4fcf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test130_.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package validSelection;
-
-public class A_test130_ {
-	public void foo() {
-		class Inner {
-		}
-		
-		/*]*/Inner inner= new Inner();
-		foo();/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test140_.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test140_.java
deleted file mode 100644
index 988f958..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test140_.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package validSelection;
-
-public class A_test140_ {
-	public boolean flag;
-	public int foo() {
-		int i= 10;
-		/*]*/switch(i) {
-			case 1:
-				if (flag)
-					break;
-				foo();	
-			case 2:
-				return 10;
-			default:
-				throw new NullPointerException();
-		}/*[*/
-			
-		return 10;	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test141_.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test141_.java
deleted file mode 100644
index 9a3f1c7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test141_.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package validSelection;
-
-public class A_test141_ {
-	private boolean flag;
-	public int foo() {
-		/*]*/while(flag)
-			return 20;/*[*/
-		return 10;	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test142_.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test142_.java
deleted file mode 100644
index a7b870f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test142_.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package validSelection;
-
-public class A_test142_ {
-	private boolean flag;
-	public int foo() {
-		int i= 10;
-		/*]*/if (flag) {
-			i++;
-			return i;
-		}/*[*/
-		int y= i + 10;
-		return y;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test143_.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test143_.java
deleted file mode 100644
index a0e6c9c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test143_.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package validSelection;
-
-public class A_test143_ {
-	public boolean foo() {
-		/*]*/try {
-			return true;
-		} catch (Exception e) {
-		}/*[*/
-		return false;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test144_.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test144_.java
deleted file mode 100644
index 1b7c327..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test144_.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package validSelection;
-
-public class A_test144_ {
-	public boolean foo() {
-		/*]*/try {
-		} catch (Exception e) {
-			return true;
-		}/*[*/
-		return false;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test145_.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test145_.java
deleted file mode 100644
index 2dbb584..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test145_.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package validSelection;
-
-public class A_test145_ {
-	boolean flag;
-	public boolean foo() {
-		/*]*/do {
-			if (flag)
-				break;
-			return false;
-		} while (flag);/*[*/
-		return true;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test146_.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test146_.java
deleted file mode 100644
index b471104..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test146_.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package validSelection;
-
-public class A_test146_ {
-	boolean flag;
-	public boolean foo() {
-		while (flag) {
-			/*]*/for (int i= 0; i < 10; i++) {
-				if (flag)
-					break;
-			}
-			if (flag)
-				break;
-			return false;/*[*/
-		}
-		return true;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test147_.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test147_.java
deleted file mode 100644
index 5583b6d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test147_.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package validSelection;
-
-public class A_test147_ {
-	boolean flag;
-	public boolean foo() {
-		/*]*/target: {
-			for (int i= 0; i < 10; i++) {
-				if (flag)
-					break;
-				else
-					break target;
-			}
-			return false;
-		}/*[*/
-		return true;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test148_.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test148_.java
deleted file mode 100644
index 12f40f0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test148_.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package validSelection;
-
-public class A_test148_ {
-	boolean flag;
-	public boolean foo() {
-		int i= 0;
-		/*]*/switch (i) {
-			case 1:
-				return false;
-			case 2:
-				return true;
-		}/*[*/
-		return false;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test149_.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test149_.java
deleted file mode 100644
index 65fe830..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test149_.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package validSelection;
-
-public class A_test149_ {
-	boolean flag;
-	public boolean foo() {
-		int i= 0;
-		/*]*/switch (i) {
-			case 1:
-				break;
-			case 2:
-				return true;
-			default:
-				return false;
-		}/*[*/
-		return false;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test180_.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test180_.java
deleted file mode 100644
index 5bdc94c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test180_.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package validSelection;
-
-public class A_test180_ {
-	public A_test180_() {
-		/*]*/this(10);
-		foo();/*[*/
-	}
-	public A_test180_(int i) {
-		super();
-	}
-	public void foo() {
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test181_.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test181_.java
deleted file mode 100644
index 6fb4e50..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test181_.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package validSelection;
-
-public class A_test181_ {
-	public A_test181_() {
-		/*]*/super();
-		foo();/*[*/
-	}
-	public void foo() {
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test190_.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test190_.java
deleted file mode 100644
index 8c098d5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test190_.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package validSelection;
-
-public class A_test190_ {
-	public int foo() {
-		int i= 10;
-		/*]*/switch(i) {
-			case 1:
-				foo();
-				break;
-			case 2:
-				foo();
-			default:
-				return 10;
-		}/*[*/
-		
-		return 20;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test200.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test200.java
deleted file mode 100644
index 8d570be..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test200.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package validSelection;
-
-public class A_test200 {
-	public void foo() {
-		/*]*/foo();/*[*/
-	} 
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test201.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test201.java
deleted file mode 100644
index 62c304e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test201.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package validSelection;
-
-public class A_test201 {
-	public void foo() {/*[*/
-		foo();
-	/*]*/} 
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test202.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test202.java
deleted file mode 100644
index d8733ef..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test202.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package validSelection;
-
-public class A_test202 {
-	public void foo() {
-		/*]*/foo();
-		foo();/*[*/
-	} 
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test203.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test203.java
deleted file mode 100644
index 2edb220..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test203.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package validSelection;
-
-public class A_test203 {
-	public void foo() {
-		/*]*/for (int i= 0; i < 10; i++)
-			foo();
-		foo();/*[*/
-	} 
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test230.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test230.java
deleted file mode 100644
index 3035340..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test230.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package validSelection;
-
-public class A_test230 {
-	public void foo() {
-		{/*[*/
-			foo();
-		/*]*/}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test231.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test231.java
deleted file mode 100644
index 3d61594..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test231.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package validSelection;
-
-public class A_test231 {
-	public void foo() {
-		{
-			/*]*/foo()/*[*/;
-		}
-		{
-			foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test232.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test232.java
deleted file mode 100644
index a3b5456..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test232.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package validSelection;
-
-public class A_test232 {
-	public void foo() {
-		/*]*/{
-			foo();
-		}/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test233.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test233.java
deleted file mode 100644
index 75b3868..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test233.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package validSelection;
-
-public class A_test233 {
-	public void foo() {
-		{
-			foo();
-		}
-		{
-			/*]*/foo()/*[*/;
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test234.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test234.java
deleted file mode 100644
index 265b903..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test234.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package validSelection;
-
-public class A_test234 {
-	public void foo() {
-		{
-			foo();
-		}
-		{/*[*/
-			foo();
-		/*]*/}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test235.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test235.java
deleted file mode 100644
index 876b188..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test235.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package validSelection;
-
-public class A_test235 {
-	public void foo() {
-		{/*[*/
-			foo();
-		/*]*/}
-		{
-			foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test240.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test240.java
deleted file mode 100644
index 00c0091..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test240.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package validSelection;
-
-public class A_test240 {
-	public void foo() {/*[*/
-		for (int i= 0; i < 10; i++)
-			foo();
-	/*]*/}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test241.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test241.java
deleted file mode 100644
index b3bb0e2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test241.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package validSelection;
-
-public class A_test241 {
-	public void foo() {
-		/*]*/for (int i= 0; i < 10; i++)
-			foo();/*[*/
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test242.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test242.java
deleted file mode 100644
index 29518a4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test242.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package validSelection;
-
-public class A_test242 {
-	public void foo() {
-		/*]*/for (int i= 0; i < 10; i++)
-			foo()/*]*/;
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test243.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test243.java
deleted file mode 100644
index 082e61c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test243.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package validSelection;
-
-public class A_test243 {
-	public void foo() {
-		for (int i= 0; i < 10; i++)/*[*/
-			foo()/*]*/;
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test244.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test244.java
deleted file mode 100644
index 897ade3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test244.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package validSelection;
-
-public class A_test244 {
-	public void foo() {
-		for (int i= 0; i < 10; i++)
-			/*]*/foo()/*]*/;
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test245.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test245.java
deleted file mode 100644
index af752d2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test245.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package validSelection;
-
-public class A_test245 {
-	public void foo() {
-		for (int i= 0; i < 10; i++)
-			/*]*/foo();/*[*/
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test246.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test246.java
deleted file mode 100644
index 40a1cd1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test246.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package validSelection;
-
-public class A_test246 {
-	public void foo() {
-		for (int i= 0; i < 10; i++) {
-			/*]*/foo();/*[*/
-		}
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test247.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test247.java
deleted file mode 100644
index 4d5b6aa..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test247.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package validSelection;
-
-public class A_test247 {
-	public void foo() {
-		for (int i= 10; i < 10; i++)/*[*/
-			for (int z= 10; z < 10; z++)
-				foo();
-		/*]*/foo();	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test248.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test248.java
deleted file mode 100644
index 5509aa2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test248.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package validSelection;
-
-public class A_test248 {
-	public void foo() {
-		for (int i= 0; i < 10; i++)
-			foo();
-			
-		/*]*/foo();/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test249.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test249.java
deleted file mode 100644
index 9315dc8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test249.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package validSelection;
-
-public class A_test249 {
-	public void foo() {
-		/*]*/foo();/*[*/
-		
-		for (int i= 0; i < 10; i++)
-			foo();	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test250.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test250.java
deleted file mode 100644
index 18755cd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test250.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package validSelection;
-
-public class A_test250 {
-	public void foo() {
-		while(1 < 10)/*[*/
-			foo();
-	/*]*/}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test251.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test251.java
deleted file mode 100644
index c82df32..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test251.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package validSelection;
-
-public class A_test251 {
-	public void foo() {
-		/*]*/while(1 < 10)
-			foo()/*]*/;
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test252.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test252.java
deleted file mode 100644
index 7358876..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test252.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package validSelection;
-
-public class A_test252 {
-	public boolean b() {
-		return true;
-	}
-	
-	public void foo() {
-		while(b())
-			while(b())/*[*/
-				foo();
-		/*]*/foo();		
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test253.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test253.java
deleted file mode 100644
index dffc377..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test253.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package validSelection;
-
-public class A_test253 {
-	public boolean b() {
-		return true;
-	}
-	
-	public void foo() {
-		while(b())
-			/*]*/while(b())
-				foo();
-		/*]*/foo();		
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test254.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test254.java
deleted file mode 100644
index 5eb1cc7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test254.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package validSelection;
-
-public class A_test254 {
-	public boolean b() {
-		return true;
-	}
-	
-	public void foo() {
-		while(b())
-			foo();
-			
-		/*]*/foo();/*[*/		
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test255.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test255.java
deleted file mode 100644
index af3ef80..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test255.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package validSelection;
-
-public class A_test255 {
-	public boolean b() {
-		return true;
-	}
-	
-	public void foo() {
-		/*]*/foo();/*[*/
-		
-		while(b())
-			foo();	
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test260.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test260.java
deleted file mode 100644
index 31a00b7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test260.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package validSelection;
-
-public class A_test260 {
-	public void foo() {
-		/*]*/do
-			foo();
-		while(1 < 10);/*[*/	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test261.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test261.java
deleted file mode 100644
index 1ce96b2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test261.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package validSelection;
-
-public class A_test261 {
-	public void foo() {
-		do /*[*/
-			foo();
-		/*]*/while(1 < 10);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test262.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test262.java
deleted file mode 100644
index d6942a3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test262.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package validSelection;
-
-public class A_test262 {
-	public boolean fBoolean;
-	public void foo() {
-		do 
-			foo();
-		while(fBoolean);
-		
-		/*]*/foo()/*[*/;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test263.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test263.java
deleted file mode 100644
index b628328..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test263.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package validSelection;
-
-public class A_test263 {
-	public boolean fBoolean;
-	public void foo() {
-		/*]*/foo()/*[*/;
-		
-		do 
-			foo();
-		while(fBoolean);		
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test270.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test270.java
deleted file mode 100644
index f9446bb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test270.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package validSelection;
-
-public class A_test270 {
-	public void foo() {
-		/*]*/switch(1) {
-			case 1:
-				foo();
-		}/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test271.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test271.java
deleted file mode 100644
index d99c995..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test271.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package validSelection;
-
-public class A_test271 {
-	public void foo() {
-		switch(1) {
-			case 1:/*[*/
-				foo();
-		/*]*/}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test272.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test272.java
deleted file mode 100644
index 0648fc5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test272.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package validSelection;
-
-public class A_test272 {
-	public void foo() {
-		switch(1) {
-			case 1:
-				foo();
-				/*]*/foo()/*[*/;
-				foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test273.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test273.java
deleted file mode 100644
index 191695b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test273.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package validSelection;
-
-public class A_test273 {
-	public void foo() {
-		switch(1) {
-			case 1:/*[*/
-				foo();
-			/*]*/case 2:
-				foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test274.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test274.java
deleted file mode 100644
index 93749cf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test274.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package validSelection;
-
-public class A_test274 {
-	public void foo() {
-		switch(1) {
-			case 1:
-				foo();
-			case 2:
-				foo();
-		}
-		
-		/*]*/foo();/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test275.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test275.java
deleted file mode 100644
index 3e5c359..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test275.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package validSelection;
-
-public class A_test275 {
-	public void foo() {
-		/*]*/foo();/*[*/
-		
-		switch(1) {
-			case 1:
-				foo();
-			case 2:
-				foo();
-		}		
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test280.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test280.java
deleted file mode 100644
index 33d1996..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test280.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package validSelection;
-
-public class A_test280 {
-	public boolean fBoolean;
-	public void foo() {
-		/*]*/if (fBoolean)
-			foo();
-		else
-			foo();/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test281.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test281.java
deleted file mode 100644
index 7048e9e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test281.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package validSelection;
-
-public class A_test281 {
-	public boolean fBoolean;
-	public void foo() {
-		if (fBoolean)
-			/*]*/foo()/*[*/;
-		else
-			foo();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test282.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test282.java
deleted file mode 100644
index 4bd8856..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test282.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package validSelection;
-
-public class A_test282 {
-	public boolean fBoolean;
-	public void foo() {
-		if (fBoolean)/*[*/
-			foo();
-		/*]*/else
-			foo();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test283.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test283.java
deleted file mode 100644
index 262306e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test283.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package validSelection;
-
-public class A_test283 {
-	public boolean fBoolean;
-	public void foo() {
-		if (fBoolean) {
-		} else {
-			/*]*/foo();/*[*/
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test284.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test284.java
deleted file mode 100644
index ac651a6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test284.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package validSelection;
-
-public class A_test284 {
-	public boolean fBoolean;
-	public void foo() {
-		if (fBoolean)
-			foo();
-			
-		if (fBoolean) {
-		} else {
-			/*]*/foo();/*[*/
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test285.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test285.java
deleted file mode 100644
index 43fa03e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test285.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package validSelection;
-
-public class A_test285 {
-	public boolean fBoolean;
-	public void foo() {
-		if (fBoolean)
-			/*[*/foo();/*]*/
-			
-		if (fBoolean) {
-		} else {
-			foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test286.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test286.java
deleted file mode 100644
index 8de156e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test286.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package validSelection;
-
-public class A_test286 {
-	public boolean fBoolean;
-	public void foo() {
-		/*[*/foo();/*]*/	
-		if (fBoolean)
-			foo();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test287.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test287.java
deleted file mode 100644
index bc5a019..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test287.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package validSelection;
-
-public class A_test287 {
-	public boolean fBoolean;
-	public void foo() {
-		if (fBoolean)
-			foo();
-		/*[*/foo();/*]*/	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test300.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test300.java
deleted file mode 100644
index e95eda5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test300.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package validSelection;
-
-public class A_test300 {
-	public void foo() {
-		try {/*[*/
-			foo();
-		/*]*/} catch (Exception e) {
-			foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test301.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test301.java
deleted file mode 100644
index 84b93a6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test301.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package validSelection;
-
-public class A_test301 {
-	public void foo() {
-		try {
-			/*]*/foo()/*[*/;
-		} catch (Exception e) {
-			foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test302.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test302.java
deleted file mode 100644
index 5e0f55f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test302.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package validSelection;
-
-public class A_test302 {
-	public void foo() {
-		try {
-			foo();
-		} catch (Exception e) {/*[*/
-			foo();
-		/*]*/}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test303.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test303.java
deleted file mode 100644
index 003b7b5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test303.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package validSelection;
-
-public class A_test303 {
-	public void foo() {
-		try {
-			foo();
-		} catch (Exception e) {
-			/*]*/foo()/*[*/;
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test304.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test304.java
deleted file mode 100644
index 23cc5fb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test304.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package validSelection;
-
-public class A_test304 {
-	public void foo() {
-		try {
-			foo();
-		} catch (Exception e) {
-			foo();
-		} catch (Throwable t) {
-			/*]*/foo();/*[*/
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test305.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test305.java
deleted file mode 100644
index aa531b2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test305.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package validSelection;
-
-public class A_test305 {
-	public void foo() {
-		try {
-			foo();
-		} catch (Exception e) {
-			/*]*/foo();/*[*/
-		} catch (Throwable t) {
-			foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test306.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test306.java
deleted file mode 100644
index 45338ad..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test306.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package validSelection;
-
-public class A_test306 {
-	public void foo() {
-		try {
-			foo();
-		} catch (Exception e) {
-			foo();
-		} catch (Error e) {
-			/*]*/foo();/*[*/
-		} catch (Throwable t) {
-			foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test307.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test307.java
deleted file mode 100644
index 141a152..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test307.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package validSelection;
-
-public class A_test307 {
-	public void foo() {
-		try {
-			foo();
-		} finally {/*[*/
-			foo();
-		/*]*/}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test308.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test308.java
deleted file mode 100644
index 5e598b3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test308.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package validSelection;
-
-public class A_test308 {
-	public void foo() {
-		try {
-			foo();
-		} finally {/*[*/
-			foo();
-		/*]*/}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test309.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test309.java
deleted file mode 100644
index f0dc5b0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test309.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package validSelection;
-
-public class A_test309 {
-	public void foo() {
-		/*]*/try {
-			foo();
-		} catch (Exception e) {
-			foo();
-		} finally {
-			foo();
-		}/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test310.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test310.java
deleted file mode 100644
index cf121db..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test310.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package validSelection;
-
-public class A_test310 {
-	public void foo() {
-		try {
-			foo();
-		} catch (Exception e) {
-			foo();
-		}
-		/*]*/foo();/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test311.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test311.java
deleted file mode 100644
index 2a0c75c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test311.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package validSelection;
-
-public class A_test311 {
-	public void foo() {
-		/*]*/foo();/*[*/
-		try {
-			foo();
-		} catch (Exception e) {
-			foo();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test350.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test350.java
deleted file mode 100644
index 69940c1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test350.java
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test351.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test351.java
deleted file mode 100644
index 758accd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test351.java
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test352.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test352.java
deleted file mode 100644
index acfd893..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test352.java
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test353.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test353.java
deleted file mode 100644
index f92ec2f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SelectionAnalyzerWorkSpace/SelectionAnalyzerTests/validSelection/A_test353.java
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test0.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test0.java
deleted file mode 100644
index 83c7430..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test0.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void m(){
-		m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test0_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test0_out.txt
deleted file mode 100644
index 8bd85dc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test0_out.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-		m();
-	}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test1.java
deleted file mode 100644
index 69f22e1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test1.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void m(){
-		int i= 1 + /*[*/1/*]*/;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test10.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test10.java
deleted file mode 100644
index 5e6cf5c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test10.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A{
-	void m(){
-		int i= 1 + 1;
-		if (i < 0){
-			i += i;
-			return;
-		} else
-		 m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test10_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test10_out.txt
deleted file mode 100644
index 1a5a117..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test10_out.txt
+++ /dev/null
@@ -1 +0,0 @@
-1 + 1
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test11.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test11.java
deleted file mode 100644
index 5e6cf5c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test11.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A{
-	void m(){
-		int i= 1 + 1;
-		if (i < 0){
-			i += i;
-			return;
-		} else
-		 m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test11_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test11_out.txt
deleted file mode 100644
index 1a5a117..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test11_out.txt
+++ /dev/null
@@ -1 +0,0 @@
-1 + 1
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test12.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test12.java
deleted file mode 100644
index 5e6cf5c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test12.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A{
-	void m(){
-		int i= 1 + 1;
-		if (i < 0){
-			i += i;
-			return;
-		} else
-		 m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test12_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test12_out.txt
deleted file mode 100644
index 1a5a117..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test12_out.txt
+++ /dev/null
@@ -1 +0,0 @@
-1 + 1
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test13.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test13.java
deleted file mode 100644
index 5e6cf5c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test13.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A{
-	void m(){
-		int i= 1 + 1;
-		if (i < 0){
-			i += i;
-			return;
-		} else
-		 m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test13_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test13_out.txt
deleted file mode 100644
index a6d0770..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test13_out.txt
+++ /dev/null
@@ -1 +0,0 @@
-i= 1 + 1
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test14.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test14.java
deleted file mode 100644
index 5e6cf5c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test14.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A{
-	void m(){
-		int i= 1 + 1;
-		if (i < 0){
-			i += i;
-			return;
-		} else
-		 m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test14_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test14_out.txt
deleted file mode 100644
index a6d0770..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test14_out.txt
+++ /dev/null
@@ -1 +0,0 @@
-i= 1 + 1
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test15.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test15.java
deleted file mode 100644
index 519a5d6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test15.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	void m(int t){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test15_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test15_out.txt
deleted file mode 100644
index 523b42f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test15_out.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-void m(int t){
-	}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test16.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test16.java
deleted file mode 100644
index 81a7a66..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test16.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{       
-	void m(){m();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test16_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test16_out.txt
deleted file mode 100644
index 71df1f4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test16_out.txt
+++ /dev/null
@@ -1 +0,0 @@
-m()
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test17.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test17.java
deleted file mode 100644
index c81256b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test17.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{    
-	/**
-	 * method comment
-	 */   
-	void m(){
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test17_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test17_out.txt
deleted file mode 100644
index e97da26..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test17_out.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-class A{    
-	/**
-	 * method comment
-	 */   
-	void m(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test18.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test18.java
deleted file mode 100644
index 7ebd961..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test18.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{    
-	void m(){
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test18_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test18_out.txt
deleted file mode 100644
index 9705b03..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test18_out.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-class A{    
-	void m(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test19.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test19.java
deleted file mode 100644
index 5e6cf5c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test19.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A{
-	void m(){
-		int i= 1 + 1;
-		if (i < 0){
-			i += i;
-			return;
-		} else
-		 m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test19_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test19_out.txt
deleted file mode 100644
index 699755f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test19_out.txt
+++ /dev/null
@@ -1 +0,0 @@
-return;
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test1_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test1_out.txt
deleted file mode 100644
index e6c6dc0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test1_out.txt
+++ /dev/null
@@ -1 +0,0 @@
-1 + /*[*/1
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test2.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test2.java
deleted file mode 100644
index 3044647..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test2.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void m(){
-		int i= 1 + 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test20.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test20.java
deleted file mode 100644
index 3044647..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test20.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void m(){
-		int i= 1 + 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test20_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test20_out.txt
deleted file mode 100644
index 1a5a117..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test20_out.txt
+++ /dev/null
@@ -1 +0,0 @@
-1 + 1
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test21.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test21.java
deleted file mode 100644
index ae91c6e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test21.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-interface A{
-	public void foo(int arg);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test21_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test21_out.txt
deleted file mode 100644
index d7895bc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test21_out.txt
+++ /dev/null
@@ -1 +0,0 @@
-public void foo(int arg);
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test22.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test22.java
deleted file mode 100644
index ae91c6e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test22.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-interface A{
-	public void foo(int arg);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test22_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test22_out.txt
deleted file mode 100644
index d7895bc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test22_out.txt
+++ /dev/null
@@ -1 +0,0 @@
-public void foo(int arg);
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test23.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test23.java
deleted file mode 100644
index 52a8c3c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test23.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-	void m(){
-		try{
-		} catch (Exception e){
-			m();			
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test23_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test23_out.txt
deleted file mode 100644
index d5ae539..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test23_out.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-catch (Exception e){
-			m();			
-		}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test24.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test24.java
deleted file mode 100644
index ae74271..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test24.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A {
-	void f(){
-		f();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test24_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test24_out.txt
deleted file mode 100644
index 8741679..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test24_out.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-void f(){
-		f();
-	}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test25.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test25.java
deleted file mode 100644
index bcf2e69..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test25.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-	void m0(){
-	}
-	void m(){
-	}
-	void m1(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test25_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test25_out.txt
deleted file mode 100644
index 1a53499..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test25_out.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-void m(){
-	}
-	void m1(){
-	}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test26.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test26.java
deleted file mode 100644
index bcf2e69..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test26.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-	void m0(){
-	}
-	void m(){
-	}
-	void m1(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test26_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test26_out.txt
deleted file mode 100644
index f831328..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test26_out.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-void m0(){
-	}
-	void m(){
-	}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test27.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test27.java
deleted file mode 100644
index d2035f3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test27.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-}
-class B{}
-class C{}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test27_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test27_out.txt
deleted file mode 100644
index c9ffcde..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test27_out.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-class B{}
-class C{}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test28.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test28.java
deleted file mode 100644
index d2035f3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test28.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-}
-class B{}
-class C{}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test28_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test28_out.txt
deleted file mode 100644
index d6bbd7e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test28_out.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-class A{
-}
-class B{}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test29.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test29.java
deleted file mode 100644
index 779530a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test29.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A {
-	void f(){
-		if (true)
-			f();
-		f();	
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test29_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test29_out.txt
deleted file mode 100644
index 2f75758..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test29_out.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-if (true)
-			f();
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test2_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test2_out.txt
deleted file mode 100644
index a6d0770..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test2_out.txt
+++ /dev/null
@@ -1 +0,0 @@
-i= 1 + 1
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test3.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test3.java
deleted file mode 100644
index 3044647..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test3.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void m(){
-		int i= 1 + 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test30.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test30.java
deleted file mode 100644
index 0a2b8f4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test30.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	void m(int t){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test30_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test30_out.txt
deleted file mode 100644
index 7d6914b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test30_out.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-void m(int t){
-	}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test31.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test31.java
deleted file mode 100644
index 2249ad9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test31.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	void mm(int t){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test31_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test31_out.txt
deleted file mode 100644
index 3595034..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test31_out.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-void mm(int t){
-	}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test32.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test32.java
deleted file mode 100644
index 80a8c1d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test32.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class AA{
-	void mm(int t){
-		AA a= ( AA )this;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test32_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test32_out.txt
deleted file mode 100644
index 6c376d9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test32_out.txt
+++ /dev/null
@@ -1 +0,0 @@
-AA
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test33.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test33.java
deleted file mode 100644
index bb8528c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test33.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class AA{
-	void mm(int t){
-		String xx= "";
-		String yy= ( xx );
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test33_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test33_out.txt
deleted file mode 100644
index 59b66ba..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test33_out.txt
+++ /dev/null
@@ -1 +0,0 @@
-xx
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test34.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test34.java
deleted file mode 100644
index 2167c9f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test34.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class AA{
-	void mm(int t){
-		if (true){
-			break;
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test34_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test34_out.txt
deleted file mode 100644
index 8cb76cf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test34_out.txt
+++ /dev/null
@@ -1 +0,0 @@
-break;
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test35.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test35.java
deleted file mode 100644
index fcf46a3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test35.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class AA{
-	void mm(int t){
-		if (true){
-			continue;
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test35_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test35_out.txt
deleted file mode 100644
index 45127c0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test35_out.txt
+++ /dev/null
@@ -1 +0,0 @@
-continue;
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test36.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test36.java
deleted file mode 100644
index c8ac58c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test36.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A {
-	void f1(int i){
-		switch(i){
-			case 1:
-			 break;
-			default:
-	    	 break;
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test36_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test36_out.txt
deleted file mode 100644
index 1d69da7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test36_out.txt
+++ /dev/null
@@ -1 +0,0 @@
-case 1:
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test37.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test37.java
deleted file mode 100644
index c8ac58c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test37.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A {
-	void f1(int i){
-		switch(i){
-			case 1:
-			 break;
-			default:
-	    	 break;
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test37_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test37_out.txt
deleted file mode 100644
index 9aff9e3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test37_out.txt
+++ /dev/null
@@ -1 +0,0 @@
-default:
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test38.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test38.java
deleted file mode 100644
index 7aedaf6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test38.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A {
-	void f2(){}
-	/***/
-	void f1(){}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test38_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test38_out.txt
deleted file mode 100644
index 48b14b8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test38_out.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-void f2(){}
-	/***/
-	void f1(){}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test39.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test39.java
deleted file mode 100644
index 28ed338..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test39.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A{
-	class Inner{
-		Inner(){
-			super();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test39_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test39_out.txt
deleted file mode 100644
index 1cadcee..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test39_out.txt
+++ /dev/null
@@ -1 +0,0 @@
-super();
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test3_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test3_out.txt
deleted file mode 100644
index 2017592..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test3_out.txt
+++ /dev/null
@@ -1 +0,0 @@
-int i= 1 + 1;
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test4.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test4.java
deleted file mode 100644
index 6b73dac..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test4.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	/*[*/void m(){
-		int i= 1 + 1;
-	}/*]*/
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test40.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test40.java
deleted file mode 100644
index 6bcc76f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test40.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A{
-	class Inner{
-		Inner(int t){}
-		Inner(){
-			this(3);
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test40_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test40_out.txt
deleted file mode 100644
index b0bfbda..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test40_out.txt
+++ /dev/null
@@ -1 +0,0 @@
-this(3);
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test4_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test4_out.txt
deleted file mode 100644
index 1c454e7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test4_out.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-class A{
-	/*[*/void m(){
-		int i= 1 + 1;
-	}/*]*/
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test5.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test5.java
deleted file mode 100644
index 0ee5d2a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test5.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	void m(){
-		if (true){
-			/*[*/int i= 1 + 1;/*]*/
-		}	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test5_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test5_out.txt
deleted file mode 100644
index e6ba032..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test5_out.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-			/*[*/int i= 1 + 1;/*]*/
-		}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test6.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test6.java
deleted file mode 100644
index a4424c7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test6.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	void m(){
-		if (true)/*[*/{
-			int i= 1 + 1;
-		}/*]*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test6_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test6_out.txt
deleted file mode 100644
index d14356b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test6_out.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-if (true)/*[*/{
-			int i= 1 + 1;
-		}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test7.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test7.java
deleted file mode 100644
index ac09c77..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test7.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	void m(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test7_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test7_out.txt
deleted file mode 100644
index 1c2aa1f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test7_out.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-void m(){
-	}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test8.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test8.java
deleted file mode 100644
index 81a7a66..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test8.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{       
-	void m(){m();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test8_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test8_out.txt
deleted file mode 100644
index 968af3f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test8_out.txt
+++ /dev/null
@@ -1 +0,0 @@
-m();
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test9.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test9.java
deleted file mode 100644
index 519a5d6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test9.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	void m(int t){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test9_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test9_out.txt
deleted file mode 100644
index 523b42f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_test9_out.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-void m(int t){
-	}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_testWholeCu.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_testWholeCu.java
deleted file mode 100644
index 3044647..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_testWholeCu.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void m(){
-		int i= 1 + 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_testWholeCu_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_testWholeCu_out.txt
deleted file mode 100644
index 3044647..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_testWholeCu_out.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void m(){
-		int i= 1 + 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_testZeroLength0.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_testZeroLength0.java
deleted file mode 100644
index 3044647..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_testZeroLength0.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void m(){
-		int i= 1 + 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_testZeroLength0_out.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_testZeroLength0_out.txt
deleted file mode 100644
index 1a5a117..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/A_testZeroLength0_out.txt
+++ /dev/null
@@ -1 +0,0 @@
-1 + 1
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/OffsetTest.java b/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/OffsetTest.java
deleted file mode 100644
index 5e6cf5c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/StructureSelectionAction/OffsetTest.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A{
-	void m(){
-		int i= 1 + 1;
-		if (i < 0){
-			i += i;
-			return;
-		} else
-		 m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/.cvsignore b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/.cvsignore
deleted file mode 100644
index 9caf6f2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-.metadata
-bin
-*.class
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/.cvsignore b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/.cvsignore
deleted file mode 100644
index 4fdcfd7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-bin
-.classpath
-*.class
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/.project b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/.project
deleted file mode 100644
index 48a8e0a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>SurroundWithTests</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/A.java
deleted file mode 100644
index f73ea5b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/A.java
+++ /dev/null
@@ -1,16 +0,0 @@
-class A {
-
-void gd(){}
- 
-static String sfs(){
-		return "d";
-	}
-	int f(int dy){
-		return Integer.parseInt(this.ss());
-	}
-	
-	
-	private String ss() {
-		return "Hello";
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/D.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/D.java
deleted file mode 100644
index 583b741..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/D.java
+++ /dev/null
@@ -1,7 +0,0 @@
-import java.io.*;
-
-
-/* comment */
-public class D {
-    private InputStream input= new FileInputStream("myfile");
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestAlreadyCaught.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestAlreadyCaught.java
deleted file mode 100644
index 03bfd682..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestAlreadyCaught.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package trycatch_in;
-
-import java.io.File;
-import java.net.MalformedURLException;
-
-public class TestAlreadyCaught {
-	public void foo() {
-		File file= null;
-		try {
-			/*]*/file.toURL();/*[*/
-		} catch(MalformedURLException e) {
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestExceptionOrder.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestExceptionOrder.java
deleted file mode 100644
index fa3ce09..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestExceptionOrder.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package trycatch_in;
-
-public class TestExceptionOrder {
-	public static class Exception_1 extends Exception {
-	}
-	public static class Exception_2 extends Exception_1 {
-	}
-	
-	public void throw1() throws Exception_1 {
-	}
-	
-	public void throw2() throws Exception_2 {
-	}
-	
-	public void foo() {
-		/*]*/throw1();
-		throw2();/*[*/
-	}	
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestExpression.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestExpression.java
deleted file mode 100644
index dde45d6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestExpression.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package trycatch_in;
-import java.io.File;
-
-class TestExpression{	
-	void fg(){
-		File file= null;
-		
-		/*]*/int i= 3 * (2 + 1);
-		file.toURL();/*[*/
-		
-		i++;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestInitializer.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestInitializer.java
deleted file mode 100644
index ae517a6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestInitializer.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package trycatch_in;
-
-import java.io.FileInputStream;
-import java.io.InputStream;
-
-public class TestInitializer {
-    private static InputStream input;
-
-    static {
-		/*]*/input = new FileInputStream("myfile");/*[*/
-    }
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestInitializerThrowsException.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestInitializerThrowsException.java
deleted file mode 100644
index 7b81c80..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestInitializerThrowsException.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package trycatch_in;
-
-import java.io.File;
-import java.net.URL;
-
-public class TestInitializerThrowsException {
-
-	public void foo() {
-		File file= null;
-		
-		/*]*/URL url= file.toURL();/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestInvalidParent1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestInvalidParent1.java
deleted file mode 100644
index d9f3e50..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestInvalidParent1.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package trycatch_in;
-
-import java.io.File;
-
-public class TestInvalidParent1 {
-	public void foo() {
-		File file= null;
-		if (/*]*/file.toURL() == null/*[*/)
-			return;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestInvalidParent2.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestInvalidParent2.java
deleted file mode 100644
index 6cac896..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestInvalidParent2.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package trycatch_in;
-
-import java.io.File;
-import java.net.URL;
-
-public class TestInvalidParent2 {
-	public void foo() {
-		File file= null;
-		URL url= /*]*/file.toURL();/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestMultiLine.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestMultiLine.java
deleted file mode 100644
index 636fb2d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestMultiLine.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package trycatch_in;
-
-import java.io.File;
-
-public class TestMultiLine {
-	public void foo() {
-		File file= null;
-		foo();/*]*/file.toURL();
-		file.toURL();
-		file.toURL();/*[*/foo();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestNoException.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestNoException.java
deleted file mode 100644
index a06082c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestNoException.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package trycatch_in;
-
-public class TestNoException {
-	public void foo() {
-		/*]*/foo();/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestOneLine.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestOneLine.java
deleted file mode 100644
index dca9570..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestOneLine.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package trycatch_in;
-
-import java.io.File;
-
-public class TestOneLine {
-	public void foo() {
-		File file= null;
-		foo();/*]*/file.toURL();/*[*/foo();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestRuntimeException1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestRuntimeException1.java
deleted file mode 100644
index 6b4b63d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestRuntimeException1.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package trycatch_in;
-
-public class TestRuntimeException1 {
-	public void foo() {
-		Class clazz= null;
-		
-		/*]*/clazz.getConstructors();/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestRuntimeException2.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestRuntimeException2.java
deleted file mode 100644
index cff422d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestRuntimeException2.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package trycatch_in;
-
-public class TestRuntimeException2 {
-	public void foo() {
-		/*]*/throw new NullPointerException();/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestSimple.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestSimple.java
deleted file mode 100644
index f4bc6dc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestSimple.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package trycatch_in;
-
-import java.io.File;
-
-public class TestSimple {
-	public void foo() {
-		File file= null;
-		/*]*/file.toURL();/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestStaticField.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestStaticField.java
deleted file mode 100644
index af1c21e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestStaticField.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package trycatch_in;
-
-public class TestStaticField {
-	/*]*/private static InputStream input= new FileInputStream("myfile");/*[*/
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestSuperCall.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestSuperCall.java
deleted file mode 100644
index 9665d8b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestSuperCall.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package trycatch_in;
-
-import java.io.IOException;
-
-public class TestSuperCall {
-	public void foo() throws IOException {
-	}
-	
-	static class A extends TestSuperCall {
-		public void bar() {
-			/*]*/super.foo();/*[*/
-		}
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestSuperConstructorCall.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestSuperConstructorCall.java
deleted file mode 100644
index e123539..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestSuperConstructorCall.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package trycatch_in;
-
-import java.net.MalformedURLException;
-
-public class TestSuperConstructorCall {
-	static class A {
-		public A(int i) throws MalformedURLException {
-		}
-	}
-	
-	static class B extends A {
-		public B() {
-			super(10);
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestThisConstructorCall.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestThisConstructorCall.java
deleted file mode 100644
index 7b2645d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestThisConstructorCall.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package trycatch_in;
-
-import java.net.MalformedURLException;
-
-public class TestThisConstructorCall {
-	public TestThisConstructorCall(int i) throws MalformedURLException {
-	}
-	public TestThisConstructorCall() {
-		this(10);
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestThrowInCatch.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestThrowInCatch.java
deleted file mode 100644
index 823eece..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestThrowInCatch.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package trycatch_in;
-
-public class TestThrowInCatch {
-	void f() throws Exception{
-		/*]*/try{
-		} catch (Exception e){
-			throw new Exception();
-		}/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestWrappedLocal1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestWrappedLocal1.java
deleted file mode 100644
index d88bd69..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestWrappedLocal1.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package trycatch_in;
-
-import java.io.File;
-
-public class TestWrappedLocal1 {
-
-	public void foo() {
-		File file= null;
-		
-		/*]*/int i= 10; 
-		file.toURL();/*[*/
-		
-		i= 20;
-	}
-
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestWrappedLocal2.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestWrappedLocal2.java
deleted file mode 100644
index bd950ce..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestWrappedLocal2.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package trycatch_in;
-
-import java.io.File;
-
-public class TestWrappedLocal2 {
-
-	public void foo() {
-		File file= null;
-		
-		/*]*/int i= 10; int x; 
-		file.toURL();/*[*/
-		
-		i= 20;
-	}
-
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestWrappedLocal3.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestWrappedLocal3.java
deleted file mode 100644
index a2d83e5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestWrappedLocal3.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package trycatch_in;
-
-import java.io.File;
-
-public class TestWrappedLocal3 {
-
-	public void foo() {
-		File file= null;
-		
-		int i;
-		/*]*/int x; 
-		file.toURL();/*[*/
-		
-		i= 20;
-	}
-
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestWrappedLocal4.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestWrappedLocal4.java
deleted file mode 100644
index 280fbca..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestWrappedLocal4.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package trycatch_in;
-
-import java.io.File;
-
-public class TestWrappedLocal4 {
-
-	public void foo() {
-		File file= null;
-		
-		/*]*/int i= 10, x= 20; 
-		file.toURL();/*[*/
-		
-		i= 20;
-	}
-
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestWrappedLocal5.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestWrappedLocal5.java
deleted file mode 100644
index 62d1155..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestWrappedLocal5.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package trycatch_in;
-
-import java.io.File;
-
-public class TestWrappedLocal5 {
-
-	public void foo() {
-		File file= null;
-		
-		/*]*/int i, x; 
-		file.toURL();/*[*/
-		
-		i= 20;
-	}
-
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestWrappedLocal6.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestWrappedLocal6.java
deleted file mode 100644
index 945c14e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_in/TestWrappedLocal6.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package trycatch_in;
-
-import java.io.File;
-
-public class TestWrappedLocal6 {
-
-	public void foo() {
-		File file= null;
-		
-		/*]*/int a, i= 10, x; 
-		file.toURL();/*[*/
-		
-		i= 20;
-	}
-
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestExceptionOrder.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestExceptionOrder.java
deleted file mode 100644
index a274f8a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestExceptionOrder.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package trycatch_out;
-
-public class TestExceptionOrder {
-	public static class Exception_1 extends Exception {
-	}
-	public static class Exception_2 extends Exception_1 {
-	}
-	
-	public void throw1() throws Exception_1 {
-	}
-	
-	public void throw2() throws Exception_2 {
-	}
-	
-	public void foo() {
-		/*]*/try {
-			throw1();
-			throw2();
-		} catch (Exception_2 e) {
-		} catch (Exception_1 e) {
-		}/*[*/
-	}	
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestExpression.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestExpression.java
deleted file mode 100644
index 2ea9b9f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestExpression.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package trycatch_out;
-import java.io.File;
-import java.net.MalformedURLException;
-
-class TestExpression{	
-	void fg(){
-		File file= null;
-		
-		/*]*/int i;
-		try {
-			i = 3 * (2 + 1);
-			file.toURL();
-		} catch (MalformedURLException e) {
-		}/*[*/
-		
-		i++;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestInitializer.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestInitializer.java
deleted file mode 100644
index 317f949..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestInitializer.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package trycatch_out;
-
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
-public class TestInitializer {
-    private static InputStream input;
-
-    static {
-		/*]*/try {
-			input = new FileInputStream("myfile");
-		} catch (FileNotFoundException e) {
-		}/*[*/
-    }
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestInitializerThrowsException.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestInitializerThrowsException.java
deleted file mode 100644
index 7c0ee17..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestInitializerThrowsException.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package trycatch_out;
-
-import java.io.File;
-import java.net.MalformedURLException;
-import java.net.URL;
-
-public class TestInitializerThrowsException {
-
-	public void foo() {
-		File file= null;
-		
-		/*]*/try {
-			URL url= file.toURL();
-		} catch (MalformedURLException e) {
-		}/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestMultiLine.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestMultiLine.java
deleted file mode 100644
index 266e93e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestMultiLine.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package trycatch_out;
-
-import java.io.File;
-import java.net.MalformedURLException;
-
-public class TestMultiLine {
-	public void foo() {
-		File file= null;
-		foo();/*]*/try {
-			file.toURL();
-			file.toURL();
-			file.toURL();
-		} catch (MalformedURLException e) {
-		}/*[*/foo();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestOneLine.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestOneLine.java
deleted file mode 100644
index 07202a7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestOneLine.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package trycatch_out;
-
-import java.io.File;
-import java.net.MalformedURLException;
-
-public class TestOneLine {
-	public void foo() {
-		File file= null;
-		foo();/*]*/try {
-			file.toURL();
-		} catch (MalformedURLException e) {
-		}/*[*/foo();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestSimple.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestSimple.java
deleted file mode 100644
index 3d793c5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestSimple.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package trycatch_out;
-
-import java.io.File;
-import java.net.MalformedURLException;
-
-public class TestSimple {
-	public void foo() {
-		File file= null;
-		/*]*/try {
-			file.toURL();
-		} catch (MalformedURLException e) {
-		}/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestSuperCall.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestSuperCall.java
deleted file mode 100644
index 2a181e1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestSuperCall.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package trycatch_out;
-
-import java.io.IOException;
-
-public class TestSuperCall {
-	public void foo() throws IOException {
-	}
-	
-	static class A extends TestSuperCall {
-		public void bar() {
-			/*]*/try {
-				super.foo();
-			} catch (IOException e) {
-			}/*[*/
-		}
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestThrowInCatch.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestThrowInCatch.java
deleted file mode 100644
index 00c8d35..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestThrowInCatch.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package trycatch_out;
-
-public class TestThrowInCatch {
-	void f() throws Exception{
-		/*]*/try {
-			try{
-			} catch (Exception e){
-				throw new Exception();
-			}
-		} catch (Exception e) {
-		}/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestWrappedLocal1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestWrappedLocal1.java
deleted file mode 100644
index 377abf9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestWrappedLocal1.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package trycatch_out;
-
-import java.io.File;
-import java.net.MalformedURLException;
-
-public class TestWrappedLocal1 {
-
-	public void foo() {
-		File file= null;
-		
-		/*]*/int i;
-		try {
-			i = 10; 
-			file.toURL();
-		} catch (MalformedURLException e) {
-		}/*[*/
-		
-		i= 20;
-	}
-
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestWrappedLocal2.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestWrappedLocal2.java
deleted file mode 100644
index 46ad79e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestWrappedLocal2.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package trycatch_out;
-
-import java.io.File;
-import java.net.MalformedURLException;
-
-public class TestWrappedLocal2 {
-
-	public void foo() {
-		File file= null;
-		
-		/*]*/int i;
-		try {
-			i = 10; int x; 
-			file.toURL();
-		} catch (MalformedURLException e) {
-		}/*[*/
-		
-		i= 20;
-	}
-
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestWrappedLocal3.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestWrappedLocal3.java
deleted file mode 100644
index 0257379..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestWrappedLocal3.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package trycatch_out;
-
-import java.io.File;
-import java.net.MalformedURLException;
-
-public class TestWrappedLocal3 {
-
-	public void foo() {
-		File file= null;
-		
-		int i;
-		/*]*/try {
-			int x; 
-			file.toURL();
-		} catch (MalformedURLException e) {
-		}/*[*/
-		
-		i= 20;
-	}
-
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestWrappedLocal4.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestWrappedLocal4.java
deleted file mode 100644
index d5d71aa..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestWrappedLocal4.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package trycatch_out;
-
-import java.io.File;
-import java.net.MalformedURLException;
-
-public class TestWrappedLocal4 {
-
-	public void foo() {
-		File file= null;
-		
-		/*]*/int i, x;
-		try {
-			i = 10;
-			x = 20; 
-			file.toURL();
-		} catch (MalformedURLException e) {
-		}/*[*/
-		
-		i= 20;
-	}
-
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestWrappedLocal5.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestWrappedLocal5.java
deleted file mode 100644
index 7d58a68..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestWrappedLocal5.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package trycatch_out;
-
-import java.io.File;
-import java.net.MalformedURLException;
-
-public class TestWrappedLocal5 {
-
-	public void foo() {
-		File file= null;
-		
-		/*]*/int i, x;
-		try {
-			file.toURL();
-		} catch (MalformedURLException e) {
-		}/*[*/
-		
-		i= 20;
-	}
-
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestWrappedLocal6.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestWrappedLocal6.java
deleted file mode 100644
index 64343b3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/trycatch_out/TestWrappedLocal6.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package trycatch_out;
-
-import java.io.File;
-import java.net.MalformedURLException;
-
-public class TestWrappedLocal6 {
-
-	public void foo() {
-		File file= null;
-		
-		/*]*/int a, i, x;
-		try {
-			i = 10; 
-			file.toURL();
-		} catch (MalformedURLException e) {
-		}/*[*/
-		
-		i= 20;
-	}
-
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test0_/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test0_/in/A.java
deleted file mode 100644
index e773ba6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test0_/in/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A implements I{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test0_/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test0_/in/I.java
deleted file mode 100644
index 6bf3b7a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test0_/in/I.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test0_/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test0_/out/A.java
deleted file mode 100644
index e773ba6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test0_/out/A.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class A implements I{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test0_/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test0_/out/I.java
deleted file mode 100644
index 6bf3b7a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test0_/out/I.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test10_/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test10_/in/A.java
deleted file mode 100644
index eb1b77e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test10_/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A implements I{
-	public final void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test10_/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test10_/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test10_/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test10_/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test10_/out/A.java
deleted file mode 100644
index eb1b77e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test10_/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A implements I{
-	public final void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test10_/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test10_/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test10_/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test11_/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test11_/in/A.java
deleted file mode 100644
index b29a790..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test11_/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-abstract class A implements I{
-	abstract public void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test11_/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test11_/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test11_/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test11_/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test11_/out/A.java
deleted file mode 100644
index b29a790..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test11_/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-abstract class A implements I{
-	abstract public void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test11_/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test11_/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test11_/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test12_/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test12_/in/A.java
deleted file mode 100644
index 9e26007..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test12_/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A implements I{
-	public void m(){}
-	private void f(){
-		A a= new A();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test12_/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test12_/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test12_/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test12_/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test12_/out/A.java
deleted file mode 100644
index 41cb3cd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test12_/out/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A implements I{
-	public void m(){}
-	private void f(){
-		I a= new A();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test12_/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test12_/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test12_/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test13_/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test13_/in/A.java
deleted file mode 100644
index be2224a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test13_/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A extends Object implements Cloneable, I{
-	public void m(){
-	}
-	protected Object clone() throws CloneNotSupportedException {
-		return super.clone();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test13_/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test13_/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test13_/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test13_/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test13_/out/A.java
deleted file mode 100644
index be2224a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test13_/out/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A extends Object implements Cloneable, I{
-	public void m(){
-	}
-	protected Object clone() throws CloneNotSupportedException {
-		return super.clone();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test13_/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test13_/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test13_/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test14_/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test14_/in/A.java
deleted file mode 100644
index 6289367..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test14_/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A implements I {
-	public void m(){}
-	void f(){
-		A a= new A();
-		a.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test14_/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test14_/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test14_/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test14_/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test14_/out/A.java
deleted file mode 100644
index a4a2709..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test14_/out/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A implements I {
-	public void m(){}
-	void f(){
-		I a= new A();
-		a.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test14_/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test14_/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test14_/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test15_/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test15_/in/A.java
deleted file mode 100644
index 41579b4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test15_/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	public void m(){}
-	public void m1(){}
-	void f(){
-		A a= new A();
-		a.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test15_/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test15_/in/I.java
deleted file mode 100644
index c9ea053..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test15_/in/I.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-	void m1();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test15_/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test15_/out/A.java
deleted file mode 100644
index 857dece..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test15_/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	public void m(){}
-	public void m1(){}
-	void f(){
-		I a= new A();
-		a.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test15_/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test15_/out/I.java
deleted file mode 100644
index c9ea053..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test15_/out/I.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-	void m1();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test16/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test16/in/A.java
deleted file mode 100644
index 577598e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test16/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A implements I {
-	public void m(){}
-	public void m1(){}
-	void f(){
-		A a= new A();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test16/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test16/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test16/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test16/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test16/out/A.java
deleted file mode 100644
index 2a08fb9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test16/out/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A implements I {
-	public void m(){}
-	public void m1(){}
-	void f(){
-		I a= new A();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test16/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test16/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test16/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test17/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test17/in/A.java
deleted file mode 100644
index 1e3a413..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test17/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	public void m(){}
-	public void m1(){}
-	void f(){
-		A a= new A();
-		a.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test17/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test17/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test17/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test17/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test17/out/A.java
deleted file mode 100644
index 1e3a413..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test17/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	public void m(){}
-	public void m1(){}
-	void f(){
-		A a= new A();
-		a.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test17/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test17/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test17/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test18/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test18/in/A.java
deleted file mode 100644
index 2154631..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test18/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A implements I {
-	public void m(){}
-	public void m1(){}
-	void f(){
-		A a= new A();
-		a.m();
-
-		A a1= new A();
-		a1.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test18/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test18/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test18/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test18/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test18/out/A.java
deleted file mode 100644
index f175b95..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test18/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A implements I {
-	public void m(){}
-	public void m1(){}
-	void f(){
-		I a= new A();
-		a.m();
-
-		A a1= new A();
-		a1.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test18/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test18/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test18/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test19/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test19/in/A.java
deleted file mode 100644
index 66eebc6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test19/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A implements I {
-	public void m(){}
-	public void m1(){}
-	void f(){
-		A a= new A(), a1 = new A();
-		a.m();
-
-		a1.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test19/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test19/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test19/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test19/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test19/out/A.java
deleted file mode 100644
index 66eebc6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test19/out/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A implements I {
-	public void m(){}
-	public void m1(){}
-	void f(){
-		A a= new A(), a1 = new A();
-		a.m();
-
-		a1.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test19/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test19/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test19/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test1_/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test1_/in/A.java
deleted file mode 100644
index 8a36a2b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test1_/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A implements I{
-	public void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test1_/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test1_/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test1_/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test1_/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test1_/out/A.java
deleted file mode 100644
index 8a36a2b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test1_/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A implements I{
-	public void m(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test1_/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test1_/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test1_/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test20/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test20/in/A.java
deleted file mode 100644
index 66eebc6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test20/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A implements I {
-	public void m(){}
-	public void m1(){}
-	void f(){
-		A a= new A(), a1 = new A();
-		a.m();
-
-		a1.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test20/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test20/in/I.java
deleted file mode 100644
index c9ea053..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test20/in/I.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-	void m1();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test20/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test20/out/A.java
deleted file mode 100644
index f92f6a6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test20/out/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A implements I {
-	public void m(){}
-	public void m1(){}
-	void f(){
-		I a= new A(), a1 = new A();
-		a.m();
-
-		a1.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test20/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test20/out/I.java
deleted file mode 100644
index c9ea053..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test20/out/I.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-	void m1();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test21/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test21/in/A.java
deleted file mode 100644
index e5b9c3f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test21/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A extends Exception implements I {
-	public void m() {}
-	void e() throws A{}
-	void g() {
-		try{
-			e();
-		} catch (A a){
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test21/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test21/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test21/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test21/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test21/out/A.java
deleted file mode 100644
index e5b9c3f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test21/out/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A extends Exception implements I {
-	public void m() {}
-	void e() throws A{}
-	void g() {
-		try{
-			e();
-		} catch (A a){
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test21/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test21/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test21/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test22/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test22/in/A.java
deleted file mode 100644
index b0fcab7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test22/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	Class g() {
-		return A.class;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test22/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test22/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test22/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test22/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test22/out/A.java
deleted file mode 100644
index b0fcab7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test22/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	Class g() {
-		return A.class;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test22/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test22/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test22/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test23/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test23/in/A.java
deleted file mode 100644
index 747e26e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test23/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	void g() {
-		A a= (A)new A();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test23/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test23/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test23/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test23/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test23/out/A.java
deleted file mode 100644
index fe659e1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test23/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	void g() {
-		I a= (I)new A();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test23/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test23/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test23/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test24/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test24/in/A.java
deleted file mode 100644
index 377f835..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test24/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void g() {
-		A a= (A)new A();
-		((A)this).m1();
-		((A)this).m();
-		(((A)this)).m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test24/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test24/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test24/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test24/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test24/out/A.java
deleted file mode 100644
index 2af8159..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test24/out/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void g() {
-		I a= (I)new A();
-		((A)this).m1();
-		((I)this).m();
-		(((I)this)).m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test24/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test24/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test24/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test25/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test25/in/A.java
deleted file mode 100644
index eb1eb60..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test25/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	protected A g() {
-		return this;	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test25/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test25/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test25/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test25/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test25/out/A.java
deleted file mode 100644
index 689cc1a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test25/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	protected I g() {
-		return this;	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test25/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test25/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test25/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test26/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test26/in/A.java
deleted file mode 100644
index f8c4867..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test26/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	protected A g() {
-		g().m();
-		return this;	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test26/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test26/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test26/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test26/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test26/out/A.java
deleted file mode 100644
index 9bb324d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test26/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	protected I g() {
-		g().m();
-		return this;	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test26/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test26/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test26/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test27/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test27/in/A.java
deleted file mode 100644
index 75151ac..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test27/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	protected A g() {
-		g().m1();
-		return this;	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test27/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test27/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test27/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test27/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test27/out/A.java
deleted file mode 100644
index 75151ac..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test27/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	protected A g() {
-		g().m1();
-		return this;	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test27/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test27/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test27/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test28/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test28/in/A.java
deleted file mode 100644
index a6a4385..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test28/in/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	protected A g() {
-		return this;	
-	}
-}
-class A1 extends A{
-	protected A g() {
-		return this;	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test28/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test28/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test28/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test28/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test28/out/A.java
deleted file mode 100644
index ea612d0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test28/out/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	protected I g() {
-		return this;	
-	}
-}
-class A1 extends A{
-	protected I g() {
-		return this;	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test28/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test28/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test28/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test29/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test29/in/A.java
deleted file mode 100644
index 2792500..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test29/in/A.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	protected A g() {
-		return this;	
-	}
-}
-class A1 extends A{
-	protected A g() {
-		g().m1();
-		return this;	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test29/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test29/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test29/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test29/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test29/out/A.java
deleted file mode 100644
index 2792500..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test29/out/A.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	protected A g() {
-		return this;	
-	}
-}
-class A1 extends A{
-	protected A g() {
-		g().m1();
-		return this;	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test29/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test29/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test29/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test2_/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test2_/in/A.java
deleted file mode 100644
index b0e0bdf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test2_/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-import java.util.List;
-
-class A implements I{
-	public List m(){return null;}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test2_/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test2_/in/I.java
deleted file mode 100644
index 5273f15..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test2_/in/I.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-import java.util.List;
-/** typecomment template*/
-interface I {
-	List m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test2_/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test2_/out/A.java
deleted file mode 100644
index b0e0bdf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test2_/out/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-import java.util.List;
-
-class A implements I{
-	public List m(){return null;}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test2_/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test2_/out/I.java
deleted file mode 100644
index 5273f15..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test2_/out/I.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-import java.util.List;
-/** typecomment template*/
-interface I {
-	List m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test30/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test30/in/A.java
deleted file mode 100644
index 10362fa..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test30/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void g() {
-		f((A)this);
-	}
-	A f(A a){
-		f(a).m1();
-		return a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test30/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test30/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test30/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test30/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test30/out/A.java
deleted file mode 100644
index 10362fa..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test30/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void g() {
-		f((A)this);
-	}
-	A f(A a){
-		f(a).m1();
-		return a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test30/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test30/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test30/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test31/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test31/in/A.java
deleted file mode 100644
index eca9d5e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test31/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void g() {
-		f((A)this);
-	}
-	A f(A a){
-		f(a).m();
-		return a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test31/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test31/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test31/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test31/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test31/out/A.java
deleted file mode 100644
index 0cfc234..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test31/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void g() {
-		f((I)this);
-	}
-	I f(I a){
-		f(a).m();
-		return a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test31/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test31/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test31/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test32/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test32/in/A.java
deleted file mode 100644
index b8e34b3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test32/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a0= new A();
-		A a1= a0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test32/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test32/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test32/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test32/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test32/out/A.java
deleted file mode 100644
index 2424bbd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test32/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		I a0= new A();
-		I a1= a0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test32/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test32/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test32/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test33/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test33/in/A.java
deleted file mode 100644
index a7373d0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test33/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a0= new A();
-		A a1= a0;
-		a1.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test33/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test33/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test33/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test33/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test33/out/A.java
deleted file mode 100644
index a7373d0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test33/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a0= new A();
-		A a1= a0;
-		a1.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test33/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test33/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test33/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test34/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test34/in/A.java
deleted file mode 100644
index 0c46d3f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test34/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a0= new A();
-		A a1= a0;
-		a1.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test34/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test34/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test34/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test34/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test34/out/A.java
deleted file mode 100644
index 32d25a1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test34/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		I a0= new A();
-		I a1= a0;
-		a1.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test34/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test34/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test34/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test35/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test35/in/A.java
deleted file mode 100644
index b377467..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test35/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-
-class A implements I { //implements Fred
-	public void m() {}
-	public void m1() {}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test35/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test35/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test35/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test35/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test35/out/A.java
deleted file mode 100644
index b377467..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test35/out/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-
-class A implements I { //implements Fred
-	public void m() {}
-	public void m1() {}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test35/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test35/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test35/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test36/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test36/in/A.java
deleted file mode 100644
index 416a922..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test36/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a0= new A();
-		f(a0);
-	}
-	void f(A a){
-		a.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test36/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test36/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test36/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test36/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test36/out/A.java
deleted file mode 100644
index 416a922..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test36/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a0= new A();
-		f(a0);
-	}
-	void f(A a){
-		a.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test36/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test36/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test36/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test37/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test37/in/A.java
deleted file mode 100644
index 1b1ed7c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test37/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a0= new A();
-		f(a0);
-	}
-	void f(A a){
-		a.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test37/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test37/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test37/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test37/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test37/out/A.java
deleted file mode 100644
index 1070412..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test37/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		I a0= new A();
-		f(a0);
-	}
-	void f(I a){
-		a.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test37/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test37/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test37/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test38/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test38/in/A.java
deleted file mode 100644
index bfdcb70..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test38/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a0= new A();
-		A a1;
-		a1= a0;
-		a1.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test38/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test38/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test38/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test38/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test38/out/A.java
deleted file mode 100644
index 93bff1c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test38/out/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		I a0= new A();
-		I a1;
-		a1= a0;
-		a1.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test38/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test38/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test38/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test39/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test39/in/A.java
deleted file mode 100644
index b9deeeb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test39/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a0= new A();
-		A a1;
-		a1= a0;
-		a1.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test39/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test39/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test39/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test39/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test39/out/A.java
deleted file mode 100644
index b9deeeb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test39/out/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a0= new A();
-		A a1;
-		a1= a0;
-		a1.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test39/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test39/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test39/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test3_/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test3_/in/A.java
deleted file mode 100644
index c598efa..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test3_/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-import java.util.ArrayList;
-import java.util.List;
-
-class A implements I{
-	public void m(){
-		List list= new ArrayList();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test3_/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test3_/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test3_/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test3_/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test3_/out/A.java
deleted file mode 100644
index c598efa..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test3_/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-import java.util.ArrayList;
-import java.util.List;
-
-class A implements I{
-	public void m(){
-		List list= new ArrayList();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test3_/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test3_/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test3_/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test40/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test40/in/A.java
deleted file mode 100644
index 17596e0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test40/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a1;
-		a1= null;
-		a1.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test40/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test40/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test40/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test40/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test40/out/A.java
deleted file mode 100644
index 17596e0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test40/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a1;
-		a1= null;
-		a1.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test40/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test40/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test40/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test41/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test41/in/A.java
deleted file mode 100644
index 1af56bd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test41/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a0= new A();
-		A a1= a0;
-		A a2= a1;
-		a2.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test41/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test41/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test41/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test41/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test41/out/A.java
deleted file mode 100644
index 1af56bd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test41/out/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a0= new A();
-		A a1= a0;
-		A a2= a1;
-		a2.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test41/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test41/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test41/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test42/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test42/in/A.java
deleted file mode 100644
index 4172720..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test42/in/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a0= new A();
-		A a1;
-		a1= a0;
-		A a2;
-		a2= a1;
-		a2.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test42/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test42/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test42/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test42/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test42/out/A.java
deleted file mode 100644
index 4172720..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test42/out/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a0= new A();
-		A a1;
-		a1= a0;
-		A a2;
-		a2= a1;
-		a2.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test42/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test42/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test42/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test43/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test43/in/A.java
deleted file mode 100644
index b25eedd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test43/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a0= new A();
-		((A)a0).m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test43/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test43/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test43/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test43/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test43/out/A.java
deleted file mode 100644
index 4f1549d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test43/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		I a0= new A();
-		((I)a0).m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test43/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test43/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test43/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test44/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test44/in/A.java
deleted file mode 100644
index e747555..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test44/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		A a0= new A();
-		((A)a0).m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test44/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test44/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test44/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test44/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test44/out/A.java
deleted file mode 100644
index e032247..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test44/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void test(){
-		I a0= new A();
-		((A)a0).m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test44/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test44/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test44/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test45/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test45/in/A.java
deleted file mode 100644
index fb1dd55..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test45/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void f(A a){
-		a.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test45/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test45/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test45/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test45/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test45/out/A.java
deleted file mode 100644
index fb1dd55..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test45/out/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void f(A a){
-		a.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test45/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test45/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test45/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test46/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test46/in/A.java
deleted file mode 100644
index a301d27..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test46/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void f(A a){
-		a.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test46/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test46/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test46/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test46/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test46/out/A.java
deleted file mode 100644
index 2a68a7c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test46/out/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void f(I a){
-		a.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test46/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test46/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test46/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test47/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test47/in/A.java
deleted file mode 100644
index 4b67e34..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test47/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	A g() {
-		A a= new A();
-		g().m1();
-		return a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test47/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test47/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test47/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test47/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test47/out/A.java
deleted file mode 100644
index 4b67e34..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test47/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	A g() {
-		A a= new A();
-		g().m1();
-		return a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test47/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test47/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test47/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test48/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test48/in/A.java
deleted file mode 100644
index 28a0e57..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test48/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	A f(A a){
-		f(a).m1();
-		return a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test48/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test48/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test48/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test48/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test48/out/A.java
deleted file mode 100644
index 28a0e57..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test48/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	A f(A a){
-		f(a).m1();
-		return a;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test48/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test48/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test48/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test49/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test49/in/A.java
deleted file mode 100644
index dffad44..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test49/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void g() {
-		f((A)this);
-	}
-	void f(A a){
-		a.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test49/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test49/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test49/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test49/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test49/out/A.java
deleted file mode 100644
index dffad44..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test49/out/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void g() {
-		f((A)this);
-	}
-	void f(A a){
-		a.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test49/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test49/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test49/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test4_/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test4_/in/A.java
deleted file mode 100644
index 9304981..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test4_/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A implements Cloneable, I{
-	public void m(){
-	}
-	protected Object clone() throws CloneNotSupportedException {
-		return super.clone();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test4_/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test4_/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test4_/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test4_/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test4_/out/A.java
deleted file mode 100644
index 9304981..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test4_/out/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-
-class A implements Cloneable, I{
-	public void m(){
-	}
-	protected Object clone() throws CloneNotSupportedException {
-		return super.clone();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test4_/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test4_/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test4_/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test50/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test50/in/A.java
deleted file mode 100644
index 9e7aff4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test50/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	A a;
-	public void m() {}
-	public void m1() {}
-	void f(){
-		a.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test50/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test50/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test50/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test50/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test50/out/A.java
deleted file mode 100644
index 9e7aff4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test50/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	A a;
-	public void m() {}
-	public void m1() {}
-	void f(){
-		a.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test50/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test50/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test50/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test51/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test51/in/A.java
deleted file mode 100644
index 3c1c5c5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test51/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	A a;
-	public void m() {}
-	public void m1() {}
-	void f(){
-		a.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test51/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test51/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test51/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test51/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test51/out/A.java
deleted file mode 100644
index 5728437..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test51/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	I a;
-	public void m() {}
-	public void m1() {}
-	void f(){
-		a.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test51/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test51/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test51/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test52/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test52/in/A.java
deleted file mode 100644
index 4aaa2cf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test52/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A implements I {
-	A fA;
-	public void m() {}
-	public void m1() {}
-	void f(){
-		A a= fA;
-		a.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test52/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test52/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test52/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test52/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test52/out/A.java
deleted file mode 100644
index 4aaa2cf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test52/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A implements I {
-	A fA;
-	public void m() {}
-	public void m1() {}
-	void f(){
-		A a= fA;
-		a.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test52/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test52/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test52/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test53/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test53/in/A.java
deleted file mode 100644
index 1c5ff48..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test53/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A implements I {
-	A fA;
-	public void m() {}
-	public void m1() {}
-	void f(){
-		A a= fA;
-		a.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test53/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test53/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test53/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test53/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test53/out/A.java
deleted file mode 100644
index f10dd01..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test53/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class A implements I {
-	I fA;
-	public void m() {}
-	public void m1() {}
-	void f(){
-		I a= fA;
-		a.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test53/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test53/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test53/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test54/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test54/in/A.java
deleted file mode 100644
index bed1d04..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test54/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	protected void f(A a){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test54/in/A1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test54/in/A1.java
deleted file mode 100644
index 2d54186..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test54/in/A1.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-public class A1 extends A{
-	protected void f(A a){
-		a.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test54/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test54/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test54/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test54/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test54/out/A.java
deleted file mode 100644
index e68d749..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test54/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	protected void f(I a){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test54/out/A1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test54/out/A1.java
deleted file mode 100644
index 3eccac6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test54/out/A1.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-public class A1 extends A{
-	protected void f(I a){
-		a.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test54/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test54/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test54/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test55/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test55/in/A.java
deleted file mode 100644
index bed1d04..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test55/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	protected void f(A a){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test55/in/A1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test55/in/A1.java
deleted file mode 100644
index a4285b3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test55/in/A1.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-public class A1 extends A{
-	protected void f(A a){
-		a.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test55/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test55/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test55/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test55/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test55/out/A.java
deleted file mode 100644
index bed1d04..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test55/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	protected void f(A a){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test55/out/A1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test55/out/A1.java
deleted file mode 100644
index a4285b3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test55/out/A1.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-public class A1 extends A{
-	protected void f(A a){
-		a.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test55/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test55/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test55/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test56/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test56/in/A.java
deleted file mode 100644
index 2e5f384..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test56/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	protected A f(){
-		return this;
-	}
-	void test(){
-		f().m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test56/in/A1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test56/in/A1.java
deleted file mode 100644
index c6b716d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test56/in/A1.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-public class A1 extends A{
-	protected A f(){
-		return this;
-	}
-	void test(){
-		f().m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test56/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test56/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test56/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test56/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test56/out/A.java
deleted file mode 100644
index 2e5f384..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test56/out/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	protected A f(){
-		return this;
-	}
-	void test(){
-		f().m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test56/out/A1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test56/out/A1.java
deleted file mode 100644
index c6b716d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test56/out/A1.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-public class A1 extends A{
-	protected A f(){
-		return this;
-	}
-	void test(){
-		f().m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test56/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test56/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test56/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test57/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test57/in/A.java
deleted file mode 100644
index f8e8cef..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test57/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	protected A f(){
-		return this;
-	}
-	void test(){
-		f().m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test57/in/A1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test57/in/A1.java
deleted file mode 100644
index d29e8f0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test57/in/A1.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-public class A1 extends A{
-	protected A f(){
-		return this;
-	}
-	void test(){
-		f().m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test57/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test57/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test57/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test57/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test57/out/A.java
deleted file mode 100644
index 1391097..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test57/out/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	protected I f(){
-		return this;
-	}
-	void test(){
-		f().m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test57/out/A1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test57/out/A1.java
deleted file mode 100644
index 2de0edc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test57/out/A1.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-public class A1 extends A{
-	protected I f(){
-		return this;
-	}
-	void test(){
-		f().m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test57/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test57/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test57/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test58/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test58/in/A.java
deleted file mode 100644
index 4dd4223..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test58/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A implements I {
-	int f;
-	public void m() {}
-	public void m1() {}
-	protected A f(){
-		return this;
-	}
-	void test(){
-		f().f=0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test58/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test58/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test58/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test58/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test58/out/A.java
deleted file mode 100644
index 4dd4223..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test58/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A implements I {
-	int f;
-	public void m() {}
-	public void m1() {}
-	protected A f(){
-		return this;
-	}
-	void test(){
-		f().f=0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test58/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test58/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test58/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test59/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test59/in/A.java
deleted file mode 100644
index 709538d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test59/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-import p.A;
-class A implements I {
-	public void m() {}
-	public void m1() {}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test59/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test59/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test59/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test59/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test59/out/A.java
deleted file mode 100644
index 709538d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test59/out/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-
-import p.A;
-class A implements I {
-	public void m() {}
-	public void m1() {}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test59/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test59/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test59/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test5_/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test5_/in/A.java
deleted file mode 100644
index 0be1335..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test5_/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-class A implements I{
-	public void m() throws IOException{
-		List list= new ArrayList();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test5_/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test5_/in/I.java
deleted file mode 100644
index d3792de..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test5_/in/I.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-import java.io.IOException;
-/** typecomment template*/
-interface I {
-	void m() throws IOException;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test5_/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test5_/out/A.java
deleted file mode 100644
index 0be1335..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test5_/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-class A implements I{
-	public void m() throws IOException{
-		List list= new ArrayList();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test5_/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test5_/out/I.java
deleted file mode 100644
index d3792de..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test5_/out/I.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-import java.io.IOException;
-/** typecomment template*/
-interface I {
-	void m() throws IOException;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test60/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test60/in/A.java
deleted file mode 100644
index ba23032..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test60/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	public static void s() {}
-	void t(){
-		A.s();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test60/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test60/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test60/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test60/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test60/out/A.java
deleted file mode 100644
index ba23032..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test60/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	public static void s() {}
-	void t(){
-		A.s();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test60/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test60/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test60/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test61/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test61/in/A.java
deleted file mode 100644
index c16b697..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test61/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	public static int s= 0;
-	void t(){
-		A.s= 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test61/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test61/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test61/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test61/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test61/out/A.java
deleted file mode 100644
index c16b697..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test61/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	public static int s= 0;
-	void t(){
-		A.s= 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test61/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test61/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test61/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test62/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test62/in/A.java
deleted file mode 100644
index d2a5048..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test62/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void t(){
-		new A(){
-			void g(){
-				A.this.m1();
-			}
-		};	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test62/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test62/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test62/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test62/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test62/out/A.java
deleted file mode 100644
index d2a5048..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test62/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void t(){
-		new A(){
-			void g(){
-				A.this.m1();
-			}
-		};	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test62/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test62/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test62/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test63/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test63/in/A.java
deleted file mode 100644
index 6f9d635..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test63/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void t(){
-		new A(){
-			void g(){
-				A.super.wait();
-			}
-		};	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test63/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test63/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test63/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test63/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test63/out/A.java
deleted file mode 100644
index 6f9d635..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test63/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void t(){
-		new A(){
-			void g(){
-				A.super.wait();
-			}
-		};	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test63/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test63/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test63/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test64/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test64/in/A.java
deleted file mode 100644
index e388da3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test64/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void f(Inter i){
-		A a= new A();
-		i.work(a);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test64/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test64/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test64/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test64/in/Inter.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test64/in/Inter.java
deleted file mode 100644
index 06fa9e7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test64/in/Inter.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-
-public interface Inter {
-	void work(A a);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test64/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test64/out/A.java
deleted file mode 100644
index e388da3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test64/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void f(Inter i){
-		A a= new A();
-		i.work(a);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test64/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test64/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test64/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test64/out/Inter.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test64/out/Inter.java
deleted file mode 100644
index 06fa9e7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test64/out/Inter.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-
-public interface Inter {
-	void work(A a);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test65/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test65/in/A.java
deleted file mode 100644
index 35d13b2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test65/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void f(){
-		A a= create();
-		a.m1();
-	}
-	A create(){
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test65/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test65/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test65/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test65/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test65/out/A.java
deleted file mode 100644
index 35d13b2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test65/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void f(){
-		A a= create();
-		a.m1();
-	}
-	A create(){
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test65/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test65/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test65/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test66/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test66/in/A.java
deleted file mode 100644
index ccba566..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test66/in/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void f(){
-		A a= create();
-		a.m();
-	}
-	A create(){
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test66/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test66/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test66/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test66/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test66/out/A.java
deleted file mode 100644
index 5cc489b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test66/out/A.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-	void f(){
-		I a= create();
-		a.m();
-	}
-	I create(){
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test66/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test66/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test66/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test67/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test67/in/A.java
deleted file mode 100644
index 82243b4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test67/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test67/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test67/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test67/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test67/in/Inter.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test67/in/Inter.java
deleted file mode 100644
index 147dd9a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test67/in/Inter.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public interface Inter {
-	void work(A a);
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test67/in/Outer.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test67/in/Outer.java
deleted file mode 100644
index e09d286..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test67/in/Outer.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-public class Outer{
-	public static class Implementor implements Inter{	
-		public void work(A a) {}
-	}
-	Implementor implementor;
-	void f(){
-		A a= new A();
-		implementor.work(a);
-	}
-}	
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test67/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test67/out/A.java
deleted file mode 100644
index 82243b4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test67/out/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-
-class A implements I {
-	public void m() {}
-	public void m1() {}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test67/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test67/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test67/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test67/out/Inter.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test67/out/Inter.java
deleted file mode 100644
index 147dd9a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test67/out/Inter.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public interface Inter {
-	void work(A a);
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test67/out/Outer.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test67/out/Outer.java
deleted file mode 100644
index e09d286..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test67/out/Outer.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-public class Outer{
-	public static class Implementor implements Inter{	
-		public void work(A a) {}
-	}
-	Implementor implementor;
-	void f(){
-		A a= new A();
-		implementor.work(a);
-	}
-}	
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test68/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test68/in/A.java
deleted file mode 100644
index 61b7b47..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test68/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A implements I {
-	static A getA(){
-		return null;
-	}
-	public void m(){}
-	public void m1(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test68/in/As.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test68/in/As.java
deleted file mode 100644
index 5aa68d8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test68/in/As.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-/** typecomment template*/
-public class As {
-	void f(){
-		A a= A.getA();
-		a.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test68/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test68/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test68/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test68/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test68/out/A.java
deleted file mode 100644
index 61b7b47..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test68/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A implements I {
-	static A getA(){
-		return null;
-	}
-	public void m(){}
-	public void m1(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test68/out/As.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test68/out/As.java
deleted file mode 100644
index 5aa68d8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test68/out/As.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-/** typecomment template*/
-public class As {
-	void f(){
-		A a= A.getA();
-		a.m1();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test68/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test68/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test68/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test69/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test69/in/A.java
deleted file mode 100644
index 61b7b47..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test69/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A implements I {
-	static A getA(){
-		return null;
-	}
-	public void m(){}
-	public void m1(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test69/in/As.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test69/in/As.java
deleted file mode 100644
index 156c195..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test69/in/As.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-/** typecomment template*/
-public class As {
-	void f(){
-		A a= A.getA();
-		a.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test69/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test69/in/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test69/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test69/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test69/out/A.java
deleted file mode 100644
index be71c7e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test69/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A implements I {
-	static I getA(){
-		return null;
-	}
-	public void m(){}
-	public void m1(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test69/out/As.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test69/out/As.java
deleted file mode 100644
index 5dfb4a2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test69/out/As.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-/** typecomment template*/
-public class As {
-	void f(){
-		I a= A.getA();
-		a.m();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test69/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test69/out/I.java
deleted file mode 100644
index aa33e93..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test69/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test6_/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test6_/in/A.java
deleted file mode 100644
index 7514b5e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test6_/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.Set;
-
-class A implements I{
-	public List m(Set set) throws IOException{
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test6_/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test6_/in/I.java
deleted file mode 100644
index df6e9a1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test6_/in/I.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-import java.io.IOException;
-import java.util.List;
-import java.util.Set;
-/** typecomment template*/
-interface I {
-	List m(Set set) throws IOException;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test6_/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test6_/out/A.java
deleted file mode 100644
index 7514b5e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test6_/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.Set;
-
-class A implements I{
-	public List m(Set set) throws IOException{
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test6_/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test6_/out/I.java
deleted file mode 100644
index df6e9a1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test6_/out/I.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-import java.io.IOException;
-import java.util.List;
-import java.util.Set;
-/** typecomment template*/
-interface I {
-	List m(Set set) throws IOException;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test70/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test70/in/A.java
deleted file mode 100644
index 7795837..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test70/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-
-public class A implements I {
-	public void m() {}
-	public void m1() {}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test70/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test70/in/I.java
deleted file mode 100644
index 62cc2fa..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test70/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-public interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test70/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test70/out/A.java
deleted file mode 100644
index 7795837..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test70/out/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-
-public class A implements I {
-	public void m() {}
-	public void m1() {}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test70/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test70/out/I.java
deleted file mode 100644
index 62cc2fa..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test70/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-public interface I {
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test7_/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test7_/in/A.java
deleted file mode 100644
index ab8e79e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test7_/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.Set;
-
-class A implements I{
-	public List m(Set set, Set set1) throws IOException{
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test7_/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test7_/in/I.java
deleted file mode 100644
index 6729aef..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test7_/in/I.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-import java.io.IOException;
-import java.util.Set;
-import java.util.List;
-/** typecomment template*/
-interface I {
-	List m(Set set, Set set1) throws IOException;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test7_/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test7_/out/A.java
deleted file mode 100644
index ab8e79e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test7_/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.Set;
-
-class A implements I{
-	public List m(Set set, Set set1) throws IOException{
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test7_/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test7_/out/I.java
deleted file mode 100644
index 6729aef..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test7_/out/I.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-import java.io.IOException;
-import java.util.Set;
-import java.util.List;
-/** typecomment template*/
-interface I {
-	List m(Set set, Set set1) throws IOException;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test8_/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test8_/in/A.java
deleted file mode 100644
index f105f3a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test8_/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.Set;
-
-class A implements I{
-	public List m(Set set, String string) throws IOException{
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test8_/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test8_/in/I.java
deleted file mode 100644
index 31f4af7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test8_/in/I.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-import java.io.IOException;
-import java.util.List;
-import java.util.Set;
-/** typecomment template*/
-interface I {
-	List m(Set set, String string) throws IOException;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test8_/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test8_/out/A.java
deleted file mode 100644
index f105f3a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test8_/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.Set;
-
-class A implements I{
-	public List m(Set set, String string) throws IOException{
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test8_/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test8_/out/I.java
deleted file mode 100644
index 31f4af7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test8_/out/I.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-import java.io.IOException;
-import java.util.List;
-import java.util.Set;
-/** typecomment template*/
-interface I {
-	List m(Set set, String string) throws IOException;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test9_/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test9_/in/A.java
deleted file mode 100644
index 44f67ab..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test9_/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A implements I{
-	public void m(int i, boolean b, short s, char c, long l, double d){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test9_/in/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test9_/in/I.java
deleted file mode 100644
index c2c8159..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test9_/in/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m(int i, boolean b, short s, char c, long l, double d);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test9_/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test9_/out/A.java
deleted file mode 100644
index 44f67ab..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test9_/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class A implements I{
-	public void m(int i, boolean b, short s, char c, long l, double d){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test9_/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test9_/out/I.java
deleted file mode 100644
index c2c8159..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/test9_/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	void m(int i, boolean b, short s, char c, long l, double d);
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew0/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew0/in/A.java
deleted file mode 100644
index 68e951a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew0/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-//use Object
-class A{
-}
-class Test{
-	void test(){
-		A a= new A();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew0/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew0/out/A.java
deleted file mode 100644
index f33ec7f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew0/out/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-//use Object
-class A{
-}
-class Test{
-	void test(){
-		Object a= new A();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew1/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew1/in/A.java
deleted file mode 100644
index 2d03008..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew1/in/A.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package p;
-//use Object
-class A{
-	public void foo(){};
-}
-class Test{
-	void test() throws CloneNotSupportedException{
-		A a= new A();
-		a.getClass();
-		a.clone();
-		a.equals(null);
-		a.hashCode();
-		a.notify();
-		a.notifyAll();
-		a.toString();
-		a.wait();
-		a.wait(0);
-		a.wait(0, 0);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew1/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew1/out/A.java
deleted file mode 100644
index 5f363cb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew1/out/A.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package p;
-//use Object
-class A{
-	public void foo(){};
-}
-class Test{
-	void test() throws CloneNotSupportedException{
-		Object a= new A();
-		a.getClass();
-		a.clone();
-		a.equals(null);
-		a.hashCode();
-		a.notify();
-		a.notifyAll();
-		a.toString();
-		a.wait();
-		a.wait(0);
-		a.wait(0, 0);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew10/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew10/in/A.java
deleted file mode 100644
index f2da52e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew10/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-//use B
-class A  extends B{
-	public void foo(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew10/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew10/in/B.java
deleted file mode 100644
index b4d16e4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew10/in/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B{
-	public int f;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew10/in/Test.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew10/in/Test.java
deleted file mode 100644
index 686a1f3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew10/in/Test.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class Test{
-	void test(){
-		A a= new A();
-		test(a);
-	}
-	void test(B b){
-		b.f= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew10/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew10/out/A.java
deleted file mode 100644
index f2da52e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew10/out/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-//use B
-class A  extends B{
-	public void foo(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew10/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew10/out/B.java
deleted file mode 100644
index b4d16e4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew10/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B{
-	public int f;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew10/out/Test.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew10/out/Test.java
deleted file mode 100644
index 57aa14f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew10/out/Test.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class Test{
-	void test(){
-		B a= new A();
-		test(a);
-	}
-	void test(B b){
-		b.f= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew11/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew11/in/A.java
deleted file mode 100644
index 610201d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew11/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-//use B
-class A implements B{
-	public void foo(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew11/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew11/in/B.java
deleted file mode 100644
index 1176786..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew11/in/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-interface B{
-	public static final int f = 0;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew11/in/Test.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew11/in/Test.java
deleted file mode 100644
index 668a1ad..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew11/in/Test.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class Test{
-	void test(){
-		A a= new A();
-		test(a);
-	}
-	void test(B b){
-		int y= b.f;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew11/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew11/out/A.java
deleted file mode 100644
index 610201d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew11/out/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-//use B
-class A implements B{
-	public void foo(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew11/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew11/out/B.java
deleted file mode 100644
index 1176786..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew11/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-interface B{
-	public static final int f = 0;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew11/out/Test.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew11/out/Test.java
deleted file mode 100644
index 2903684..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew11/out/Test.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class Test{
-	void test(){
-		B a= new A();
-		test(a);
-	}
-	void test(B b){
-		int y= b.f;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew12/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew12/in/A.java
deleted file mode 100644
index 610201d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew12/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-//use B
-class A implements B{
-	public void foo(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew12/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew12/in/B.java
deleted file mode 100644
index 1176786..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew12/in/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-interface B{
-	public static final int f = 0;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew12/in/Test.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew12/in/Test.java
deleted file mode 100644
index fae09f5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew12/in/Test.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class Test{
-	void test(){
-		A a= new A();
-		test(a);
-	}
-	void test(A b){
-		int y= b.f;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew12/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew12/out/A.java
deleted file mode 100644
index 610201d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew12/out/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-//use B
-class A implements B{
-	public void foo(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew12/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew12/out/B.java
deleted file mode 100644
index 1176786..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew12/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-interface B{
-	public static final int f = 0;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew12/out/Test.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew12/out/Test.java
deleted file mode 100644
index 2903684..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew12/out/Test.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class Test{
-	void test(){
-		B a= new A();
-		test(a);
-	}
-	void test(B b){
-		int y= b.f;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew13/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew13/in/A.java
deleted file mode 100644
index 610201d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew13/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-//use B
-class A implements B{
-	public void foo(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew13/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew13/in/B.java
deleted file mode 100644
index 8e54291..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew13/in/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-interface B{
-	void foo(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew13/in/Test.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew13/in/Test.java
deleted file mode 100644
index 485f4bc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew13/in/Test.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class Test{
-	void test(){
-		A a= new A();
-		test(a);
-	}
-	void test(A b){
-		a.foo();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew13/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew13/out/A.java
deleted file mode 100644
index 610201d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew13/out/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-//use B
-class A implements B{
-	public void foo(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew13/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew13/out/B.java
deleted file mode 100644
index 8e54291..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew13/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-interface B{
-	void foo(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew13/out/Test.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew13/out/Test.java
deleted file mode 100644
index fba2c02..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew13/out/Test.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class Test{
-	void test(){
-		B a= new A();
-		test(a);
-	}
-	void test(B b){
-		a.foo();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew14/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew14/in/A.java
deleted file mode 100644
index b7caa13..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew14/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-//use B
-abstract class A implements B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew14/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew14/in/B.java
deleted file mode 100644
index 8e54291..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew14/in/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-interface B{
-	void foo(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew14/in/Test.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew14/in/Test.java
deleted file mode 100644
index b5f8ae9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew14/in/Test.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class Test{
-	void test(){
-		A a= null;
-		test(a);
-	}
-	void test(A b){
-		a.foo();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew14/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew14/out/A.java
deleted file mode 100644
index b7caa13..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew14/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-//use B
-abstract class A implements B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew14/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew14/out/B.java
deleted file mode 100644
index 8e54291..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew14/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-interface B{
-	void foo(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew14/out/Test.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew14/out/Test.java
deleted file mode 100644
index ee5412d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew14/out/Test.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class Test{
-	void test(){
-		B a= null;
-		test(a);
-	}
-	void test(B b){
-		a.foo();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew15/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew15/in/A.java
deleted file mode 100644
index 3169101..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew15/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-//use B
-class A implements B{
-	public static final int f = 0;
-	public void foo(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew15/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew15/in/B.java
deleted file mode 100644
index 93910c8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew15/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-interface B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew15/in/Test.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew15/in/Test.java
deleted file mode 100644
index fae09f5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew15/in/Test.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class Test{
-	void test(){
-		A a= new A();
-		test(a);
-	}
-	void test(A b){
-		int y= b.f;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew15/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew15/out/A.java
deleted file mode 100644
index 3169101..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew15/out/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-//use B
-class A implements B{
-	public static final int f = 0;
-	public void foo(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew15/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew15/out/B.java
deleted file mode 100644
index 93910c8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew15/out/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-interface B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew15/out/Test.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew15/out/Test.java
deleted file mode 100644
index fae09f5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew15/out/Test.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class Test{
-	void test(){
-		A a= new A();
-		test(a);
-	}
-	void test(A b){
-		int y= b.f;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew16/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew16/in/A.java
deleted file mode 100644
index 3169101..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew16/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-//use B
-class A implements B{
-	public static final int f = 0;
-	public void foo(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew16/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew16/in/B.java
deleted file mode 100644
index 93910c8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew16/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-interface B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew16/in/Test.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew16/in/Test.java
deleted file mode 100644
index 9f63b12..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew16/in/Test.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class Test{
-	void test(){
-		B b= new A();
-		if (b instanceof A){
-		} else{
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew16/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew16/out/A.java
deleted file mode 100644
index 3169101..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew16/out/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-//use B
-class A implements B{
-	public static final int f = 0;
-	public void foo(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew16/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew16/out/B.java
deleted file mode 100644
index 93910c8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew16/out/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-interface B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew16/out/Test.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew16/out/Test.java
deleted file mode 100644
index 9f63b12..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew16/out/Test.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class Test{
-	void test(){
-		B b= new A();
-		if (b instanceof A){
-		} else{
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew17/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew17/in/A.java
deleted file mode 100644
index 02be956..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew17/in/A.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package p;
-//use C
-interface I{}
-class C implements I{
-}
-
-class B extends C{
-}
-class A extends B{
-}
-
-class Test{
-	void f(){
-		A c= new A();
-		c.toString();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew17/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew17/out/A.java
deleted file mode 100644
index 6ac86ac..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew17/out/A.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package p;
-//use C
-interface I{}
-class C implements I{
-}
-
-class B extends C{
-}
-class A extends B{
-}
-
-class Test{
-	void f(){
-		C c= new A();
-		c.toString();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew18/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew18/in/A.java
deleted file mode 100644
index 333bb11..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew18/in/A.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package p;
-//use B
-interface I{}
-class C implements I{
-}
-
-class B extends C{
-}
-class A extends B{
-}
-
-class Test{
-	void f(){
-		A c= new A();
-		c.toString();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew18/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew18/out/A.java
deleted file mode 100644
index c82a790..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew18/out/A.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package p;
-//use B
-interface I{}
-class C implements I{
-}
-
-class B extends C{
-}
-class A extends B{
-}
-
-class Test{
-	void f(){
-		B c= new A();
-		c.toString();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew19/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew19/in/A.java
deleted file mode 100644
index d3c964b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew19/in/A.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package p;
-//use I
-interface I{}
-class C implements I{
-}
-
-class B extends C{
-}
-class A extends B{
-}
-
-class Test{
-	void f(){
-		A c= new A();
-		c.toString();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew19/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew19/out/A.java
deleted file mode 100644
index e0e3df6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew19/out/A.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package p;
-//use I
-interface I{}
-class C implements I{
-}
-
-class B extends C{
-}
-class A extends B{
-}
-
-class Test{
-	void f(){
-		I c= new A();
-		c.toString();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew2/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew2/in/A.java
deleted file mode 100644
index d48a194..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew2/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-//use Object
-class A{
-	public void foo(){};
-}
-class Test{
-	void test(){
-		A a= new A();
-		a.foo();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew2/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew2/out/A.java
deleted file mode 100644
index d48a194..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew2/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-//use Object
-class A{
-	public void foo(){};
-}
-class Test{
-	void test(){
-		A a= new A();
-		a.foo();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew20/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew20/in/A.java
deleted file mode 100644
index 24f6984..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew20/in/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-//change to B
-class B{}
-class A extends B{
-}
-
-class Test{
-	void f(){
-		A a= new A();
-		f(a);
-	}
-	void f(B b){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew20/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew20/out/A.java
deleted file mode 100644
index 51fb3ba..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew20/out/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-//change to B
-class B{}
-class A extends B{
-}
-
-class Test{
-	void f(){
-		B a= new A();
-		f(a);
-	}
-	void f(B b){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew21/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew21/in/A.java
deleted file mode 100644
index ad7b1a4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew21/in/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-//change to Object
-class B{}
-class A extends B{
-}
-
-class Test{
-	void f(){
-		A a= new A();
-		f(a);
-	}
-	void f(B b){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew21/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew21/out/A.java
deleted file mode 100644
index ad7b1a4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew21/out/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-//change to Object
-class B{}
-class A extends B{
-}
-
-class Test{
-	void f(){
-		A a= new A();
-		f(a);
-	}
-	void f(B b){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew22/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew22/in/A.java
deleted file mode 100644
index c301b57..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew22/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-//change to B
-class A extends B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew22/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew22/in/B.java
deleted file mode 100644
index f0b30e1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew22/in/B.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package p;
-class B{}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew22/in/Test.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew22/in/Test.java
deleted file mode 100644
index daaaf59..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew22/in/Test.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class Test{
-	A a;
-	void f(){
-		f(a);
-	}
-	void f(B b){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew22/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew22/out/A.java
deleted file mode 100644
index c301b57..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew22/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-//change to B
-class A extends B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew22/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew22/out/B.java
deleted file mode 100644
index f0b30e1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew22/out/B.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package p;
-class B{}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew22/out/Test.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew22/out/Test.java
deleted file mode 100644
index 931ad74..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew22/out/Test.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class Test{
-	B a;
-	void f(){
-		f(a);
-	}
-	void f(B b){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew23/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew23/in/A.java
deleted file mode 100644
index 4002c75..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew23/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-//change to Object
-class A extends B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew23/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew23/in/B.java
deleted file mode 100644
index f0b30e1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew23/in/B.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package p;
-class B{}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew23/in/Test.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew23/in/Test.java
deleted file mode 100644
index daaaf59..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew23/in/Test.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class Test{
-	A a;
-	void f(){
-		f(a);
-	}
-	void f(B b){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew23/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew23/out/A.java
deleted file mode 100644
index 4002c75..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew23/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-//change to Object
-class A extends B{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew23/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew23/out/B.java
deleted file mode 100644
index f0b30e1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew23/out/B.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package p;
-class B{}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew23/out/Test.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew23/out/Test.java
deleted file mode 100644
index daaaf59..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew23/out/Test.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-class Test{
-	A a;
-	void f(){
-		f(a);
-	}
-	void f(B b){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew24/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew24/in/A.java
deleted file mode 100644
index aef777f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew24/in/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-//change to Object
-interface A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew24/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew24/in/B.java
deleted file mode 100644
index 1a09cbc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew24/in/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B implements A{
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew24/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew24/out/A.java
deleted file mode 100644
index aef777f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew24/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-//change to Object
-interface A{
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew24/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew24/out/B.java
deleted file mode 100644
index 1a09cbc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew24/out/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package p;
-class B implements A{
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew25/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew25/in/A.java
deleted file mode 100644
index cfe710f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew25/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-//use Object
-interface A{
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew25/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew25/in/B.java
deleted file mode 100644
index 8beb399..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew25/in/B.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-public class B {
-	public B(A a){
-		a.m();
-	}
-	public void m() {	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew25/in/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew25/in/C.java
deleted file mode 100644
index f2c103d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew25/in/C.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-public class C extends B{
-	public C(A a, int i) {
-		super(a);
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew25/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew25/out/A.java
deleted file mode 100644
index cfe710f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew25/out/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-//use Object
-interface A{
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew25/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew25/out/B.java
deleted file mode 100644
index 8beb399..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew25/out/B.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-public class B {
-	public B(A a){
-		a.m();
-	}
-	public void m() {	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew25/out/C.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew25/out/C.java
deleted file mode 100644
index f2c103d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew25/out/C.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-public class C extends B{
-	public C(A a, int i) {
-		super(a);
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew26/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew26/in/A.java
deleted file mode 100644
index cfe710f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew26/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-//use Object
-interface A{
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew26/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew26/in/B.java
deleted file mode 100644
index 2d2d084..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew26/in/B.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-public class B {
-	public B(A a){
-		a.m();
-	}
-	public B(int y, A a){
-		this(a);
-	}
-	public void m() {	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew26/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew26/out/A.java
deleted file mode 100644
index cfe710f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew26/out/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-//use Object
-interface A{
-	void m();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew26/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew26/out/B.java
deleted file mode 100644
index 2d2d084..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew26/out/B.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-public class B {
-	public B(A a){
-		a.m();
-	}
-	public B(int y, A a){
-		this(a);
-	}
-	public void m() {	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew27/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew27/in/A.java
deleted file mode 100644
index 2d596b7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew27/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//use B
-class A extends B{
-	void f(A a){
-		a.field= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew27/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew27/in/B.java
deleted file mode 100644
index 890f6c5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew27/in/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class B {
-	int field= 0;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew27/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew27/out/A.java
deleted file mode 100644
index 8652ee4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew27/out/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//use B
-class A extends B{
-	void f(B a){
-		a.field= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew27/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew27/out/B.java
deleted file mode 100644
index 890f6c5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew27/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class B {
-	int field= 0;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew28/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew28/in/A.java
deleted file mode 100644
index 11af736..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew28/in/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-//use B
-class A extends B{
-	int field;
-	void f(A a){
-		a.field= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew28/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew28/in/B.java
deleted file mode 100644
index 890f6c5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew28/in/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class B {
-	int field= 0;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew28/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew28/out/A.java
deleted file mode 100644
index 11af736..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew28/out/A.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-//use B
-class A extends B{
-	int field;
-	void f(A a){
-		a.field= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew28/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew28/out/B.java
deleted file mode 100644
index 890f6c5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew28/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class B {
-	int field= 0;
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew29/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew29/in/A.java
deleted file mode 100644
index a96448c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew29/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-//change to B
-class B {
-} 
-class A extends B{
-    void f(A a){
-        A[] as= {a};
-        as[0].f(null);
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew29/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew29/out/A.java
deleted file mode 100644
index a96448c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew29/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-//change to B
-class B {
-} 
-class A extends B{
-    void f(A a){
-        A[] as= {a};
-        as[0].f(null);
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew3/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew3/in/A.java
deleted file mode 100644
index c956936..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew3/in/A.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package p;
-//use Object
-class A{
-	public void foo(){};
-}
-class Test{
-	void test() {
-		A a= new A();
-		a.getClass();
-		a.equals(null);
-		a.hashCode();
-		a.notify();
-		a.notifyAll();
-		a.toString();
-		a.wait();
-		a.wait(0);
-		a.wait(0, 0);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew3/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew3/out/A.java
deleted file mode 100644
index 56a70d6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew3/out/A.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package p;
-//use Object
-class A{
-	public void foo(){};
-}
-class Test{
-	void test() {
-		Object a= new A();
-		a.getClass();
-		a.equals(null);
-		a.hashCode();
-		a.notify();
-		a.notifyAll();
-		a.toString();
-		a.wait();
-		a.wait(0);
-		a.wait(0, 0);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew30/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew30/in/A.java
deleted file mode 100644
index 70e2962..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew30/in/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-//change to B
-class B {
-} 
-class A extends B{
-    void f(A a){
-        A[] as= new A[]{a};
-        as[0].f(null);
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew30/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew30/out/A.java
deleted file mode 100644
index 70e2962..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew30/out/A.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-//change to B
-class B {
-} 
-class A extends B{
-    void f(A a){
-        A[] as= new A[]{a};
-        as[0].f(null);
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew4/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew4/in/A.java
deleted file mode 100644
index 03608f1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew4/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-//use Object
-class A{
-	public void foo(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew4/in/Test.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew4/in/Test.java
deleted file mode 100644
index 88c9b35..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew4/in/Test.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class Test{
-	void test(){
-		A a= new A();
-		f(a);
-	}
-	void f(A a){
-		a.foo();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew4/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew4/out/A.java
deleted file mode 100644
index 03608f1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew4/out/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-//use Object
-class A{
-	public void foo(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew4/out/Test.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew4/out/Test.java
deleted file mode 100644
index 88c9b35..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew4/out/Test.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class Test{
-	void test(){
-		A a= new A();
-		f(a);
-	}
-	void f(A a){
-		a.foo();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew5/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew5/in/A.java
deleted file mode 100644
index 03608f1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew5/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-//use Object
-class A{
-	public void foo(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew5/in/Test.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew5/in/Test.java
deleted file mode 100644
index dc51ed0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew5/in/Test.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class Test{
-	void test(){
-		A a= new A();
-		f(a);
-	}
-	void f(A a){
-		a.getClass();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew5/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew5/out/A.java
deleted file mode 100644
index 03608f1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew5/out/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-//use Object
-class A{
-	public void foo(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew5/out/Test.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew5/out/Test.java
deleted file mode 100644
index 6a28786..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew5/out/Test.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class Test{
-	void test(){
-		Object a= new A();
-		f(a);
-	}
-	void f(Object a){
-		a.getClass();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew6/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew6/in/A.java
deleted file mode 100644
index 03608f1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew6/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-//use Object
-class A{
-	public void foo(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew6/in/Test.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew6/in/Test.java
deleted file mode 100644
index f9a6139..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew6/in/Test.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-import java.util.ArrayList;
-import java.util.List;
-
-class Test{
-	void test(){
-		A a= new A();
-		List list= new ArrayList(1);
-		list.add(a);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew6/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew6/out/A.java
deleted file mode 100644
index 03608f1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew6/out/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-//use Object
-class A{
-	public void foo(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew6/out/Test.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew6/out/Test.java
deleted file mode 100644
index 6920e3c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew6/out/Test.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-import java.util.ArrayList;
-import java.util.List;
-
-class Test{
-	void test(){
-		Object a= new A();
-		List list= new ArrayList(1);
-		list.add(a);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew7/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew7/in/A.java
deleted file mode 100644
index 314eeed..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew7/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-//use B
-class A extends B{
-	public void foo(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew7/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew7/in/B.java
deleted file mode 100644
index e099b0e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew7/in/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B{
-	public void fooB(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew7/in/Test.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew7/in/Test.java
deleted file mode 100644
index af5a97e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew7/in/Test.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class Test{
-	void test(){
-		A a= new A();
-		test(a);
-	}
-	void test(A a){
-		a.fooB();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew7/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew7/out/A.java
deleted file mode 100644
index 314eeed..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew7/out/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-//use B
-class A extends B{
-	public void foo(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew7/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew7/out/B.java
deleted file mode 100644
index e099b0e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew7/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B{
-	public void fooB(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew7/out/Test.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew7/out/Test.java
deleted file mode 100644
index 92b9cda..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew7/out/Test.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class Test{
-	void test(){
-		B a= new A();
-		test(a);
-	}
-	void test(B a){
-		a.fooB();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew8/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew8/in/A.java
deleted file mode 100644
index 314eeed..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew8/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-//use B
-class A extends B{
-	public void foo(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew8/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew8/in/B.java
deleted file mode 100644
index 421cf56..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew8/in/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B{
-	public void foo(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew8/in/Test.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew8/in/Test.java
deleted file mode 100644
index 3e9cbf6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew8/in/Test.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class Test{
-	void test(){
-		A a= new A();
-		test(a);
-	}
-	void test(A a){
-		a.foo();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew8/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew8/out/A.java
deleted file mode 100644
index 314eeed..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew8/out/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-//use B
-class A extends B{
-	public void foo(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew8/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew8/out/B.java
deleted file mode 100644
index 421cf56..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew8/out/B.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-class B{
-	public void foo(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew8/out/Test.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew8/out/Test.java
deleted file mode 100644
index 6d99e1d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew8/out/Test.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class Test{
-	void test(){
-		B a= new A();
-		test(a);
-	}
-	void test(B a){
-		a.foo();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew9/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew9/in/A.java
deleted file mode 100644
index 99794fa..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew9/in/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-//use Object
-class A {
-	public void foo(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew9/in/Test.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew9/in/Test.java
deleted file mode 100644
index 500eb57..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew9/in/Test.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class Test{
-	void test(){
-		A a= new A();
-		test(a);
-	}
-	void test(Object o){
-		o.hashCode();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew9/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew9/out/A.java
deleted file mode 100644
index 99794fa..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew9/out/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-//use Object
-class A {
-	public void foo(){};
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew9/out/Test.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew9/out/Test.java
deleted file mode 100644
index fd7140d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew9/out/Test.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-
-class Test{
-	void test(){
-		Object a= new A();
-		test(a);
-	}
-	void test(Object o){
-		o.hashCode();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/templates/test/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/templates/test/in/A.java
deleted file mode 100644
index b23b2d9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/templates/test/in/A.java
+++ /dev/null
@@ -1 +0,0 @@
-package p;
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/templates/test/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/templates/test/out/A.java
deleted file mode 100644
index b23b2d9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/templates/test/out/A.java
+++ /dev/null
@@ -1 +0,0 @@
-package p;
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/templates/testFail/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/templates/testFail/in/A.java
deleted file mode 100644
index ff4381d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/templates/testFail/in/A.java
+++ /dev/null
@@ -1 +0,0 @@
-package p;
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/actions/AllTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/actions/AllTests.java
deleted file mode 100644
index 7450d69..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/actions/AllTests.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.eclipse.jdt.ui.tests.actions;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class AllTests {
-	
-	public static Test suite ( ) {
-		TestSuite suite= new TestSuite("All Action Tests");
-		suite.addTest(DeleteSourceReferenceEditTests.suite());
-
-//      FIX ME - randomly fails on linux
-//		suite.addTest(PasteSourceReferenceActionTests.suite());
-
-		suite.addTest(DeleteSourceReferenceActionTests.suite());
-		suite.addTest(StructureSelectionActionTests.suite());
-		suite.addTest(CopyResourcesToClipboardActionTest.suite());
-		suite.addTest(PasteResourcesFromClipboardActionTest.suite());
-		suite.addTest(GoToNextPreviousMemberActionTests.suite());
-		return suite;
-	}
-
-}
-
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/actions/CopyResourcesToClipboardActionTest.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/actions/CopyResourcesToClipboardActionTest.java
deleted file mode 100644
index 04e39ff..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/actions/CopyResourcesToClipboardActionTest.java
+++ /dev/null
@@ -1,197 +0,0 @@
-package org.eclipse.jdt.ui.tests.actions;
-
-import java.io.InputStream;
-import java.io.StringBufferInputStream;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.runtime.CoreException;
-
-import org.eclipse.swt.dnd.Clipboard;
-import org.eclipse.swt.widgets.Display;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.ISourceManipulation;
-import org.eclipse.jdt.core.JavaModelException;
-
-import org.eclipse.jdt.ui.actions.SelectionDispatchAction;
-import org.eclipse.jdt.ui.tests.refactoring.MySetup;
-import org.eclipse.jdt.ui.tests.refactoring.RefactoringTest;
-import org.eclipse.jdt.ui.tests.refactoring.infra.MockWorkbenchSite;
-
-import org.eclipse.jdt.internal.ui.reorg.ReorgActionFactory;
-
-public class CopyResourcesToClipboardActionTest extends RefactoringTest{
-
-	private static final Class clazz= CopyResourcesToClipboardActionTest.class;
-
-	private ICompilationUnit fCuA;
-	private ICompilationUnit fCuB;
-	
-	private IPackageFragment fPackageQ;
-	private IPackageFragment fPackageQ_R;
-	private IPackageFragment fDefaultPackage;
-	private static final String CU_A_NAME= "A";
-	private static final String CU_B_NAME= "B";
-	private IFile faTxt;
-
-	private Clipboard fClipboard;
-	
-	public CopyResourcesToClipboardActionTest(String name) {
-		super(name);
-	}
-	
-	public static Test suite() {
-		return new MySetup(new TestSuite(clazz));
-	}
-	
-	private static InputStream getStream(String content){
-		return new StringBufferInputStream(content);
-	}
-	
-	private IFile createFile(IFolder folder, String fileName) throws Exception {
-		IFile file= folder.getFile(fileName);
-		file.create(getStream("aa"), true, null);	
-		return file;
-	}
-	
-	protected void setUp() throws Exception {
-		super.setUp();
-		fClipboard= new Clipboard(Display.getDefault());
-		fDefaultPackage= MySetup.getDefaultSourceFolder().createPackageFragment("", true, null);
-		
-		fCuA= createCU(getPackageP(), CU_A_NAME + ".java", "package p; class A{}");
-		
-		fPackageQ= MySetup.getDefaultSourceFolder().createPackageFragment("q", true, null);
-		fCuB= createCU(fPackageQ, CU_B_NAME + ".java", "package q; class B{}");
-		
-		fPackageQ_R= MySetup.getDefaultSourceFolder().createPackageFragment("q.r", true, null);
-		
-		faTxt= createFile((IFolder)getPackageP().getUnderlyingResource(), "a.txt");
-		
-		assertTrue("A.java does not exist", fCuA.exists());
-		assertTrue("B.java does not exist", fCuB.exists());
-		assertTrue("q does not exist", fPackageQ.exists());
-		assertTrue("q.r does not exist", fPackageQ_R.exists());
-		assertTrue(faTxt.exists());
-	}
-
-	protected void tearDown() throws Exception {
-		super.tearDown();
-		fClipboard.dispose();
-		delete(fCuA);
-		delete(fCuB);
-		delete(fPackageQ_R);
-		delete(fPackageQ);
-		delete(faTxt);
-	}
-
-	private static void delete(ISourceManipulation element) {
-		try {
-			if (element != null && ((IJavaElement)element).exists())
-				element.delete(false, null);
-		} catch(JavaModelException e) {
-			//ignore, we must keep going
-		}		
-	}
-	private static void delete(IFile element) {
-		try {
-			element.delete(true, false, null);
-		} catch(CoreException e) {
-			//ignore, we must keep going
-		}
-	}
-
-	private void checkEnabled(Object[] elements) {
-		SelectionDispatchAction pasteAction= ReorgActionFactory.createPasteAction(new MockWorkbenchSite(elements), fClipboard);
-		SelectionDispatchAction copyAction= ReorgActionFactory.createCopyAction(new MockWorkbenchSite(elements), fClipboard, pasteAction);
-		copyAction.update(copyAction.getSelection());
-		assertTrue("action should be enabled", copyAction.isEnabled());
-	}
-	
-	private void checkDisabled(Object[] elements) {
-		SelectionDispatchAction pasteAction= ReorgActionFactory.createPasteAction(new MockWorkbenchSite(elements), fClipboard);
-		SelectionDispatchAction copyAction= ReorgActionFactory.createCopyAction(new MockWorkbenchSite(elements), fClipboard, pasteAction);
-		copyAction.update(copyAction.getSelection());
-		assertTrue("action should not be enabled", ! copyAction.isEnabled());
-	}
-	
-	public void testEnabled0() throws Exception{
-		checkEnabled(new Object[]{fCuA});
-	}
-
-	public void testEnabled1() throws Exception{
-		checkEnabled(new Object[]{getRoot().getJavaProject()});
-	}
-		
-	public void testEnabled2() throws Exception{
-		checkEnabled(new Object[]{getPackageP()});
-	}
-	
-	public void testEnabled3() throws Exception{
-		checkEnabled(new Object[]{getPackageP(), fPackageQ, fPackageQ_R});
-	}
-
-	public void testEnabled4() throws Exception{
-		checkEnabled(new Object[]{faTxt});
-	}
-
-	public void testEnabled5() throws Exception{
-		checkEnabled(new Object[]{getRoot()});
-	}
-
-	public void testDisabled0() throws Exception{
-		checkDisabled(new Object[]{});
-	}
-
-	public void testDisabled1() throws Exception{
-		checkDisabled(new Object[]{getRoot().getJavaProject(), fCuA});
-	}
-
-	public void testDisabled2() throws Exception{
-		checkDisabled(new Object[]{getRoot().getJavaProject(), fPackageQ});
-	}
-
-	public void testDisabled3() throws Exception{
-		checkDisabled(new Object[]{getRoot().getJavaProject(), faTxt});
-	}
-
-	public void testDisabled4() throws Exception{
-		checkDisabled(new Object[]{getPackageP(), fCuA});
-	}
-
-	public void testDisabled5() throws Exception{
-		checkDisabled(new Object[]{getRoot(), fCuA});
-	}
-
-	public void testDisabled6() throws Exception{
-		checkDisabled(new Object[]{getRoot(), fPackageQ});
-	}
-
-	public void testDisabled7() throws Exception{
-		checkDisabled(new Object[]{getRoot(), faTxt});
-	}
-
-	public void testDisabled8() throws Exception{
-		checkDisabled(new Object[]{getRoot(), getRoot().getJavaProject()});
-	}
-
-	public void testDisabled9() throws Exception{
-		checkDisabled(new Object[]{MySetup.getProject().getPackageFragmentRoots()});
-	}
-
-	public void testDisabled10() throws Exception{
-		checkDisabled(new Object[]{fCuA, fCuB});
-	}
-	
-	public void testDisabled11() throws Exception{
-		checkDisabled(new Object[]{fDefaultPackage});
-	}
-	
-
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/actions/DeleteSourceReferenceActionTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/actions/DeleteSourceReferenceActionTests.java
deleted file mode 100644
index 8b61997..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/actions/DeleteSourceReferenceActionTests.java
+++ /dev/null
@@ -1,226 +0,0 @@
-package org.eclipse.jdt.ui.tests.actions;
-import java.io.IOException;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.JavaModelException;
-
-import org.eclipse.jdt.ui.tests.refactoring.MySetup;
-import org.eclipse.jdt.ui.tests.refactoring.RefactoringTest;
-
-public class DeleteSourceReferenceActionTests extends RefactoringTest{
-
-	private static final Class clazz= DeleteSourceReferenceActionTests.class;
-	private static final String REFACTORING_PATH= "DeleteSourceReference/";
-	
-	public DeleteSourceReferenceActionTests(String name) {
-		super(name);
-	}
-	
-	public static Test suite() {
-		return new MySetup(new TestSuite(clazz));
-	}
-	
-	protected String getRefactoringPath() {
-		return REFACTORING_PATH;
-	}
-
-	private ICompilationUnit fCuA;
-	private ICompilationUnit fNewCuA;
-	private static final String CU_NAME= "A";
-		
-	protected void setUp() throws Exception{
-		super.setUp();
-		
-		fCuA= createCUfromTestFile(getPackageP(), CU_NAME);
-		assertTrue("A.java does not exist", fCuA.exists());
-	}
-	
-	protected void tearDown() throws Exception{
-		super.tearDown();
-		if (fNewCuA != null && fNewCuA.exists())
-			fNewCuA.delete(false, null);		
-		if (fCuA != null && fCuA.exists())
-			fCuA.delete(false, null);		
-	}
-
-	private void check() throws IOException, JavaModelException {
-		fNewCuA= getPackageP().getCompilationUnit(CU_NAME + ".java");
-		assertTrue("A.java does not exist", fNewCuA.exists());
-		assertEquals("incorrect content of A.java", getFileContents(getOutputTestFileName(CU_NAME)), fNewCuA.getSource());	
-	}
-		
-	public void test0() throws Exception{
-		printTestDisabledMessage("bug#15305 incorrect deletion of fields (multi-declaration case)");
-//		printTestDisabledMessage("test for bug#8405 Delete field action broken for multiple declarations");
-		if (true)
-			return;
-		Object elem0= fCuA.getType("A").getField("i");
-		Object[] elems= new Object[]{elem0};
-		SourceReferenceTestUtil.delete(elems);
-		check();
-	}
-
-	public void test1() throws Exception{
-		Object elem0= fCuA.getType("A");
-		Object[] elems= new Object[]{elem0};
-		SourceReferenceTestUtil.delete(elems);
-		check();
-	}
-	
-	public void test2() throws Exception{
-		Object elem0= fCuA.getType("A").getField("i");
-		Object[] elems= new Object[]{elem0};
-		SourceReferenceTestUtil.delete(elems);
-		check();
-	}
-
-	public void test3() throws Exception{
-		printTestDisabledMessage("bug#15305 incorrect deletion of fields (multi-declaration case)");
-//		printTestDisabledMessage("test for bug#8405 Delete field action broken for multiple declarations");		
-		if (true)
-			return;
-		Object elem0= fCuA.getType("A").getField("i");
-		Object elem1= fCuA.getType("A").getField("j");
-		Object[] elems= new Object[]{elem0, elem1};
-		SourceReferenceTestUtil.delete(elems);
-		check();
-	}
-
-	public void test4() throws Exception{
-		printTestDisabledMessage("bug#15305 incorrect deletion of fields (multi-declaration case)");
-//		printTestDisabledMessage("test for bug#8405 Delete field action broken for multiple declarations");		
-		if (true)
-			return;
-		Object elem0= fCuA.getType("A").getField("i");
-		Object elem1= fCuA.getType("A").getField("k");
-		Object[] elems= new Object[]{elem0, elem1};
-		SourceReferenceTestUtil.delete(elems);
-		check();
-	}
-
-	public void test5() throws Exception{
-		printTestDisabledMessage("bug#15305 incorrect deletion of fields (multi-declaration case)");
-//		printTestDisabledMessage("test for bug#8405 Delete field action broken for multiple declarations");		
-		if (true)
-			return;
-		Object elem0= fCuA.getType("A").getField("j");
-		Object[] elems= new Object[]{elem0};
-		SourceReferenceTestUtil.delete(elems);
-		check();
-	}
-
-	public void test6() throws Exception{
-//		printTestDisabledMessage("test for bug#8405 Delete field action broken for multiple declarations");		
-		printTestDisabledMessage("test for bug#9382 IField::delete incorrect on multiple field declarations with initializers");		
-		if (true)
-			return;
-		Object elem0= fCuA.getType("A").getField("j");
-		Object[] elems= new Object[]{elem0};
-		SourceReferenceTestUtil.delete(elems);
-		check();
-	}
-
-	public void test7() throws Exception{
-		//exposes bug#9381 IPackageDeclaration is not ISourceManipulation 
-		Object elem0= fCuA.getPackageDeclaration("p");
-		Object[] elems= new Object[]{elem0};
-		SourceReferenceTestUtil.delete(elems);
-		check();
-	}
-	
-	public void test8() throws Exception{
-		Object elem0= fCuA.getType("A").getMethod("m", new String[0]);
-		Object[] elems= new Object[]{elem0};
-		SourceReferenceTestUtil.delete(elems);
-		check();
-	}
-
-	public void test9() throws Exception{
-		Object elem0= fCuA.getType("A").getInitializer(1);
-		Object[] elems= new Object[]{elem0};
-		SourceReferenceTestUtil.delete(elems);
-		check();
-	}
-
-	public void test10() throws Exception{
-		Object elem0= fCuA.getType("A").getInitializer(1);
-		Object[] elems= new Object[]{elem0};
-		SourceReferenceTestUtil.delete(elems);
-		check();
-	}
-
-	public void test11() throws Exception{
-		Object elem0= fCuA.getImport("java.util.List");
-		Object[] elems= new Object[]{elem0};
-		SourceReferenceTestUtil.delete(elems);
-		check();
-	}
-
-	public void test12() throws Exception{
-		Object elem0= fCuA.getType("A").getType("B");
-		Object[] elems= new Object[]{elem0};
-		SourceReferenceTestUtil.delete(elems);
-		check();
-	}
-	
-	public void test13() throws Exception{
-		Object elem0= fCuA.getType("A").getType("B");
-		Object elem1= fCuA.getType("A");
-		Object[] elems= new Object[]{elem0, elem1};
-		SourceReferenceTestUtil.delete(elems);
-		check();
-	}
-
-	public void test14() throws Exception{
-		Object elem0= fCuA.getType("A").getType("B");
-		Object elem1= fCuA.getType("A");
-		Object elem2= fCuA.getPackageDeclaration("p");
-		Object[] elems= new Object[]{elem0, elem1, elem2};
-		SourceReferenceTestUtil.delete(elems);
-		check();
-	}
-
-	public void test15() throws Exception{
-		Object elem0= fCuA.getType("A").getField("field");
-		Object[] elems= new Object[]{elem0};
-		SourceReferenceTestUtil.delete(elems);
-		check();
-	}
-
-	public void test16() throws Exception{
-//		printTestDisabledMessage("test for bug#15412 deleting type removes too much from editor");		
-//		if (true)
-//			return;
-		
-		Object elem0= fCuA.getType("Test");
-		Object[] elems= new Object[]{elem0};
-		SourceReferenceTestUtil.delete(elems);
-		check();
-	}
-
-	public void test17() throws Exception{
-//		printTestDisabledMessage("test for bug#15936 delete methods deletes too much (indent messing)");		
-//		if (true)
-//			return;
-		
-		Object elem0= fCuA.getType("A").getMethod("f", new String[0]);
-		Object[] elems= new Object[]{elem0};
-		SourceReferenceTestUtil.delete(elems);
-		check();
-	}
-
-	public void test18() throws Exception{
-//		printTestDisabledMessage("test for bug#16314");		
-//		if (true)
-//			return;
-		
-		Object elem0= fCuA.getType("A").getMethod("fs", new String[0]);
-		Object[] elems= new Object[]{elem0};
-		SourceReferenceTestUtil.delete(elems);
-		check();
-	}
-	
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/actions/DeleteSourceReferenceEditTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/actions/DeleteSourceReferenceEditTests.java
deleted file mode 100644
index 059f05e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/actions/DeleteSourceReferenceEditTests.java
+++ /dev/null
@@ -1,156 +0,0 @@
-package org.eclipse.jdt.ui.tests.actions;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.NullProgressMonitor;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IImportDeclaration;
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IMember;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.ISourceReference;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.JavaModelException;
-
-import org.eclipse.jdt.ui.tests.refactoring.MySetup;
-import org.eclipse.jdt.ui.tests.refactoring.RefactoringTest;
-
-import org.eclipse.jdt.internal.corext.refactoring.reorg.DeleteSourceReferenceEdit;
-import org.eclipse.jdt.internal.corext.textmanipulation.TextBuffer;
-import org.eclipse.jdt.internal.corext.textmanipulation.TextBufferEditor;
-import org.eclipse.jdt.internal.corext.textmanipulation.TextEdit;
-
-public class DeleteSourceReferenceEditTests extends RefactoringTest {
-
-	private static final Class clazz= DeleteSourceReferenceEditTests.class;
-	private static final String REFACTORING_PATH= "DeleteSourceReferenceEdit/";
-	
-	public DeleteSourceReferenceEditTests(String name) {
-		super(name);
-	}
-	
-	public static Test suite() {
-		return new MySetup(new TestSuite(clazz));
-	}
-	
-	protected String getRefactoringPath() {
-		return REFACTORING_PATH;
-	}
-	
-	private static ICompilationUnit getCompilationUnit(Object o){
-		if (o instanceof IMember)
-			return ((IMember)o).getCompilationUnit();
-		else if (o instanceof IImportDeclaration){
-				IImportDeclaration im= (IImportDeclaration)o;
-				return (ICompilationUnit)im.getParent().getParent();
-		} else		
-			return (ICompilationUnit)((IJavaElement)o).getParent();
-	}
-	
-	private static TextEdit createDeleteEdit(ISourceReference ref) throws JavaModelException{
-		return new DeleteSourceReferenceEdit(ref, getCompilationUnit(ref));
-	}
-	
-	protected ICompilationUnit createCUfromTestFile(IPackageFragment pack, boolean input) throws Exception {
-		return createCU(pack, getSimpleTestFileName(input), getFileContents(getTestFileName(input)));
-	}
-	
-	private String getTestFileName(boolean input){
-		return TEST_PATH_PREFIX + getRefactoringPath() + getSimpleTestFileName(input);
-	}
-	
-	private String getSimpleTestFileName(boolean input){
-		String fileName = "A_" + getName();
-		fileName += input ? "_in": "_out";
-		return fileName + ".java"; 
-	}
-
-	private void helper(ICompilationUnit cu, ISourceReference[] elems) throws Exception {
-		IFile file= (IFile)cu.getUnderlyingResource();
-		TextBuffer tb= TextBuffer.acquire(file);
-		try{
-			TextBufferEditor tbe= new TextBufferEditor(tb);
-			for (int i= 0; i < elems.length; i++) {
-				ISourceReference iSourceReference= elems[i];
-				tbe.add(createDeleteEdit(iSourceReference));	
-			}
-			assertTrue("cannot perform", tbe.canPerformEdits().isOK());
-			
-			tbe.performEdits(new NullProgressMonitor());	
-			TextBuffer.commitChanges(tb, false, new NullProgressMonitor());
-		} finally{	
-			if (tb != null)
-				TextBuffer.release(tb);
-		}	
-		String expected= getFileContents(getTestFileName(false));
-		assertEquals("incorrect modification", expected, tb.getContent());	
-	}
-	
-	private void methodHelper(String[] methodNames, String[][] signatures) throws Exception{
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), true);
-		IType classA= getType(cu, "A");
-		
-		ISourceReference[] elems= new ISourceReference[methodNames.length];
-		for (int i= 0; i < methodNames.length; i++) {
-			elems[i]= classA.getMethod(methodNames[i], signatures[i]);
-		}
-		helper(cu, elems);	
-	}
-	
-	private void fieldHelper(String[] fieldNames) throws Exception{
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), true);
-		IType classA= getType(cu, "A");
-		
-		ISourceReference[] elems= new ISourceReference[fieldNames.length];
-		for (int i= 0; i < fieldNames.length; i++) {
-			elems[i]= classA.getField(fieldNames[i]);
-		}
-		helper(cu, elems);	
-	}
-	
-	//---- tests 
-	
-	public void test0() throws Exception{
-		methodHelper(new String[]{"m"}, new String[][]{new String[0]});
-	}
-	
-	public void test1() throws Exception{
-		methodHelper(new String[]{"m"}, new String[][]{new String[0]});
-	}	
-	
-	public void test2() throws Exception{
-		methodHelper(new String[]{"m", "n"}, new String[][]{new String[0], new String[0]});
-	}	
-
-	public void test3() throws Exception{
-		methodHelper(new String[]{"m"}, new String[][]{new String[0]});
-	}	
-
-	public void test4() throws Exception{
-		methodHelper(new String[]{"m"}, new String[][]{new String[0]});
-	}	
-	
-	public void testField0() throws Exception{
-		fieldHelper(new String[]{"f"});
-	}
-	
-	public void testField1() throws Exception{
-		fieldHelper(new String[]{"f"});
-	}	
-	
-	public void testField2() throws Exception{
-		fieldHelper(new String[]{"f", "ff"});
-	}	
-
-	public void testField3() throws Exception{
-		fieldHelper(new String[]{"f"});
-	}	
-
-	public void testField4() throws Exception{
-		fieldHelper(new String[]{"f"});
-	}	
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/actions/GoToNextPreviousMemberActionTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/actions/GoToNextPreviousMemberActionTests.java
deleted file mode 100644
index 002da90..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/actions/GoToNextPreviousMemberActionTests.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package org.eclipse.jdt.ui.tests.actions;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.ISourceRange;
-
-import org.eclipse.jdt.ui.tests.refactoring.MySetup;
-import org.eclipse.jdt.ui.tests.refactoring.RefactoringTest;
-import org.eclipse.jdt.ui.tests.refactoring.infra.TextRangeUtil;
-
-import org.eclipse.jdt.internal.ui.javaeditor.selectionactions.GoToNextPreviousMemberAction;
-
-public class GoToNextPreviousMemberActionTests extends RefactoringTest{
-
-	private static final Class clazz= GoToNextPreviousMemberActionTests.class;
-	private static final String REFACTORING_PATH= "GoToNextPreviousMemberAction/";
-	
-	public GoToNextPreviousMemberActionTests(String name){
-		super(name);
-	}
-	
-	protected String getRefactoringPath() {
-		return REFACTORING_PATH;
-	}
-	
-	public static Test suite() {
-		return new MySetup(new TestSuite(clazz));
-	}
-	
-	private String getSimpleTestFileName(){
-		return "A_" + getName() + ".java";
-	}
-	
-	private String getTestFileName(){
-		return TEST_PATH_PREFIX + getRefactoringPath() + getSimpleTestFileName();
-	}
-	
-	//------------
-	protected ICompilationUnit createCUfromTestFile() throws Exception {
-		return createCU(getPackageP(), getSimpleTestFileName(), getFileContents(getTestFileName()));
-	}
-	
-	private void helper(int startLine, int startColumn, int endLine, int endColumn, 
-											int expectedStartLine, int expectedStartColumn, boolean isSelectNext) throws Exception{
-		ICompilationUnit cu= createCUfromTestFile();
-		ISourceRange selection= TextRangeUtil.getSelection(cu, startLine, startColumn, endLine, endColumn);
-		ISourceRange actualNewRange= new GoToNextPreviousMemberAction(isSelectNext).getNewSelectionRange(selection, cu);
-		ISourceRange expectedNewRange= TextRangeUtil.getSelection(cu, expectedStartLine, expectedStartColumn, expectedStartLine, expectedStartColumn);
-		assertEquals("incorrect selection offset", expectedNewRange.getOffset(), actualNewRange.getOffset());
-		assertEquals("incorrect selection length", expectedNewRange.getLength(), actualNewRange.getLength());
-	}	
-
-	private void helperNext(int startLine, int startColumn, int expectedStartLine, int expectedStartColumn) throws Exception{
-		helper(startLine, startColumn, startLine, startColumn, expectedStartLine, expectedStartColumn, true);										
-	}
-
-	private void helperPrevious(int startLine, int startColumn, int expectedStartLine, int expectedStartColumn) throws Exception{
-		helper(startLine, startColumn, startLine, startColumn, expectedStartLine, expectedStartColumn, false);			
-	}
-
-	//----
-	public void testPrevious0() throws Exception{
-		helperPrevious(6, 5, 5, 11);
-	}
-
-	public void testPrevious1() throws Exception{
-		helperPrevious(8, 5, 7, 6);
-	}
-
-	public void testPrevious2() throws Exception{
-		helperPrevious(3, 1, 3, 1);
-	}
-
-	public void testPrevious3() throws Exception{
-		helperPrevious(15, 9, 13, 6);
-	}
-
-	public void testPrevious4() throws Exception{
-		helperPrevious(19, 1, 18, 9);
-	}
-
-	public void testPrevious5() throws Exception{
-		helperPrevious(31, 10, 27, 10);
-	}
-
-	public void testPrevious6() throws Exception{
-		helperPrevious(35, 3, 34, 2);
-	}
-
-	public void testNext0() throws Exception{
-		helperNext(3, 1, 4, 7);
-	}
-
-	public void testNext1() throws Exception{
-		helperNext(27, 10, 31, 10);
-	}
-
-	public void testNext2() throws Exception{
-		helperNext(35, 2, 35, 2);
-	}
-
-	public void testNext3() throws Exception{
-		helperNext(19, 1, 20, 13);
-	}
-
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/actions/PasteResourcesFromClipboardActionTest.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/actions/PasteResourcesFromClipboardActionTest.java
deleted file mode 100644
index 560de98..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/actions/PasteResourcesFromClipboardActionTest.java
+++ /dev/null
@@ -1,265 +0,0 @@
-package org.eclipse.jdt.ui.tests.actions;
-
-import java.io.InputStream;
-import java.io.StringBufferInputStream;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.runtime.CoreException;
-
-import org.eclipse.swt.SWTError;
-import org.eclipse.swt.dnd.Clipboard;
-import org.eclipse.swt.dnd.DND;
-import org.eclipse.swt.dnd.Transfer;
-import org.eclipse.swt.widgets.Display;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.ISourceManipulation;
-import org.eclipse.jdt.core.JavaModelException;
-
-import org.eclipse.jdt.internal.core.ClasspathEntry;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-import org.eclipse.jdt.ui.actions.SelectionDispatchAction;
-import org.eclipse.jdt.ui.tests.refactoring.MySetup;
-import org.eclipse.jdt.ui.tests.refactoring.RefactoringTest;
-import org.eclipse.jdt.ui.tests.refactoring.infra.MockWorkbenchSite;
-
-import org.eclipse.jdt.internal.ui.reorg.ReorgActionFactory;
-
-public class PasteResourcesFromClipboardActionTest extends RefactoringTest{
-
-	private static final Class clazz= PasteResourcesFromClipboardActionTest.class;
-
-	private ICompilationUnit fCuA;
-	private ICompilationUnit fCuB;
-	
-	private IPackageFragment fPackageQ;
-	private IPackageFragment fPackageQ_R;
-	private static final String CU_A_NAME= "A";
-	private static final String CU_B_NAME= "B";
-	private IFile faTxt;
-	private IJavaProject fSimpleProject;
-	private IJavaProject fAnotherProject;
-	
-	private Clipboard fClipboard;
-	
-	public PasteResourcesFromClipboardActionTest(String name) {
-		super(name);
-	}
-	
-	public static Test suite() {
-		return new MySetup(new TestSuite(clazz));
-	}
-	
-	private static InputStream getStream(String content){
-		return new StringBufferInputStream(content);
-	}
-	
-	private IFile createFile(IFolder folder, String fileName) throws Exception {
-		IFile file= folder.getFile(fileName);
-		file.create(getStream("aa"), true, null);	
-		return file;
-	}
-	
-	private static IJavaProject createProject(String name, String srcFolderName) throws Exception{
-		IJavaProject project= JavaProjectHelper.createJavaProject(name, "bin");
-		JavaProjectHelper.addRTJar(project);
-		if (srcFolderName != null)
-			JavaProjectHelper.addSourceContainer(project, srcFolderName);
-			
-		return project;	
-	}
-	
-	protected void setUp() throws Exception {
-		super.setUp();
-		fClipboard= new Clipboard(Display.getDefault());
-		fCuA= createCU(getPackageP(), CU_A_NAME + ".java", "package p; class A{}");
-		fCuB= createCU(getPackageP(), CU_B_NAME + ".java", "package p; class B{}");
-		
-		fPackageQ= MySetup.getDefaultSourceFolder().createPackageFragment("q", true, null);
-		fPackageQ_R= MySetup.getDefaultSourceFolder().createPackageFragment("q.r", true, null);
-		
-		faTxt= createFile((IFolder)getPackageP().getUnderlyingResource(), "a.txt");
-		
-		int count= 0;
-		boolean success= false;
-		while (count < 10 && ! success){
-			success= clearClipboard();
-			count++;
-		}
-		if (! success)
-			return;
-		
-		fSimpleProject= createProject("SimpleProject", null);
-		fAnotherProject= createProject("AnotherProject", "src");
-		
-		assertTrue("A.java does not exist", fCuA.exists());
-		assertTrue("B.java does not exist", fCuB.exists());
-		assertTrue("q does not exist", fPackageQ.exists());
-		assertTrue("q.r does not exist", fPackageQ_R.exists());
-		assertTrue("a.txt does not exist", faTxt.exists());
-		assertTrue("project SP does not exist", fSimpleProject.exists());
-		assertTrue("project AP does not exist", fAnotherProject.exists());
-	}
-
-	protected void tearDown() throws Exception {
-		super.tearDown();
-		fClipboard.dispose();
-		delete(fCuA);
-		delete(fCuB);
-		delete(fPackageQ_R);
-		delete(fPackageQ);
-		delete(faTxt);
-		delete(fSimpleProject);
-		delete(fAnotherProject);
-	}
-	
-	/**
-	 * @return true iff successful
-	 */
-	private boolean clearClipboard() {
-		try{
-			fClipboard.setContents(new Object[0], new Transfer[0]);
-			return true;
-		} catch (SWTError e){
-			if (e.code != DND.ERROR_CANNOT_SET_CLIPBOARD)
-				throw e;
-			return false;
-		}	
-	}
-
-	private static void delete(ISourceManipulation element) {
-		try {
-			if (element != null && ((IJavaElement)element).exists())
-				element.delete(false, null);
-		} catch(JavaModelException e) {
-			//ignore, we must keep going
-		}		
-	}
-	private static void delete(IFile element) {
-		try {
-			if (element != null && element.exists())
-				element.delete(true, false, null);
-		} catch(CoreException e) {
-			//ignore, we must keep going
-		}
-	}
-	
-	private static void delete(IJavaProject project){
-		try {
-			if (project != null && project.exists()){
-				project.setRawClasspath(new ClasspathEntry[0], project.getProject().getFullPath(), null);
-				project.getProject().delete(true, true, null);
-			}	
-		} catch(CoreException e) {
-			//ignore, we must keep going
-		}
-	}
-
-	private void doCopy(Object[] copySelection) {
-		if (copySelection == null)
-			return; 
-			
-		SelectionDispatchAction pasteAction= ReorgActionFactory.createPasteAction(new MockWorkbenchSite(copySelection), fClipboard);	
-		SelectionDispatchAction copyAction= ReorgActionFactory.createCopyAction(new MockWorkbenchSite(copySelection), fClipboard, pasteAction);
-		copyAction.update(copyAction.getSelection());
-		assertTrue("copy not enabled", copyAction.isEnabled());
-		copyAction.run();
-	}
-
-	private void checkEnabled(Object[] copySelection, Object[] pasteSelection) {
-		doCopy(copySelection);		
-		SelectionDispatchAction pasteAction= ReorgActionFactory.createPasteAction(new MockWorkbenchSite(pasteSelection), fClipboard);
-		pasteAction.update(pasteAction.getSelection());
-		assertTrue("paste incorrectly disabled", pasteAction.isEnabled());
-	}
-	
-	private void checkDisabled(Object[] copySelection, Object[] pasteSelection) {
-		doCopy(copySelection);		
-		SelectionDispatchAction pasteAction= ReorgActionFactory.createPasteAction(new MockWorkbenchSite(pasteSelection), fClipboard);
-		pasteAction.update(pasteAction.getSelection());
-		assertTrue("paste incorrectly enabled", ! pasteAction.isEnabled());
-	}
-
-	//--- tests --------
-
-	public void testEmpty() throws Exception{
-		checkDisabled(null, new Object[]{getPackageP()});
-		checkDisabled(null, new Object[]{fPackageQ});
-		checkDisabled(null, new Object[]{fSimpleProject});
-		checkDisabled(null, new Object[]{fAnotherProject});
-		checkDisabled(null, new Object[]{MySetup.getProject()});
-		checkDisabled(null, new Object[]{getRoot()});
-		checkDisabled(null, new Object[]{fCuA});
-		checkDisabled(null, new Object[]{faTxt});
-	}
-	
-	public void testProject() throws Exception{
-		checkEnabled(new Object[]{MySetup.getProject()}, new Object[]{getPackageP()});
-		checkEnabled(new Object[]{MySetup.getProject()}, new Object[]{fPackageQ});
-		checkEnabled(new Object[]{MySetup.getProject()}, new Object[]{fSimpleProject});
-		checkEnabled(new Object[]{MySetup.getProject()}, new Object[]{fAnotherProject});
-		checkEnabled(new Object[]{MySetup.getProject()}, new Object[]{MySetup.getProject()});
-		checkEnabled(new Object[]{MySetup.getProject()}, new Object[]{getRoot()});
-		checkEnabled(new Object[]{MySetup.getProject()}, new Object[]{fCuA});
-		checkEnabled(new Object[]{MySetup.getProject()}, new Object[]{faTxt});
-	}
-	
-	public void testCu() throws Exception{
-		checkEnabled(new Object[]{fCuA}, new Object[]{getPackageP()});
-		checkEnabled(new Object[]{fCuA}, new Object[]{fPackageQ});
-		checkEnabled(new Object[]{fCuA}, new Object[]{fSimpleProject});
-		checkEnabled(new Object[]{fCuA}, new Object[]{fAnotherProject});
-		checkEnabled(new Object[]{fCuA}, new Object[]{MySetup.getProject()});
-		checkEnabled(new Object[]{fCuA}, new Object[]{getRoot()});
-		checkEnabled(new Object[]{fCuA}, new Object[]{fCuA});		
-		checkEnabled(new Object[]{fCuA}, new Object[]{faTxt});
-	}
-	
-	public void testFile() throws Exception{
-		checkEnabled(new Object[]{faTxt}, new Object[]{getPackageP()});
-		checkEnabled(new Object[]{faTxt}, new Object[]{fPackageQ});
-		checkEnabled(new Object[]{faTxt}, new Object[]{fSimpleProject});
-		checkEnabled(new Object[]{faTxt}, new Object[]{fAnotherProject});
-		checkEnabled(new Object[]{faTxt}, new Object[]{MySetup.getProject()});
-		checkEnabled(new Object[]{faTxt}, new Object[]{getRoot()});
-		checkEnabled(new Object[]{faTxt}, new Object[]{fCuA});
-		checkEnabled(new Object[]{faTxt}, new Object[]{faTxt});
-	}
-	
-	public void testPackage() throws Exception{
-//		checkEnabled(new Object[]{getPackageP()}, new Object[]{fSimpleProject});
-		checkEnabled(new Object[]{getPackageP()}, new Object[]{getRoot()});
-		
-		checkDisabled(new Object[]{getPackageP()}, new Object[]{getPackageP()});
-		checkDisabled(new Object[]{getPackageP()}, new Object[]{fPackageQ});
-		checkDisabled(new Object[]{getPackageP()}, new Object[]{fAnotherProject});
-		checkDisabled(new Object[]{getPackageP()}, new Object[]{MySetup.getProject()});		
-		checkDisabled(new Object[]{getPackageP()}, new Object[]{fCuA});
-		checkDisabled(new Object[]{getPackageP()}, new Object[]{faTxt});
-	}
-	
-	public void testRoot() throws Exception{		
-		checkEnabled(new Object[]{getRoot()}, new Object[]{fAnotherProject});
-		checkEnabled(new Object[]{getRoot()}, new Object[]{MySetup.getProject()});		
-		
-		checkDisabled(new Object[]{getRoot()}, new Object[]{getRoot()});
-//		checkDisabled(new Object[]{getRoot()}, new Object[]{fSimpleProject});
-		checkDisabled(new Object[]{getRoot()}, new Object[]{getPackageP()});
-		checkDisabled(new Object[]{getRoot()}, new Object[]{fPackageQ});
-		checkDisabled(new Object[]{getRoot()}, new Object[]{fCuA});
-		checkDisabled(new Object[]{getRoot()}, new Object[]{faTxt});
-	}
-	
-
-	public void testEnabled2() throws Exception{
-		checkEnabled(new Object[]{fCuA, fCuB}, new Object[]{getPackageP()});
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/actions/PasteSourceReferenceActionTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/actions/PasteSourceReferenceActionTests.java
deleted file mode 100644
index abd18fc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/actions/PasteSourceReferenceActionTests.java
+++ /dev/null
@@ -1,142 +0,0 @@
-package org.eclipse.jdt.ui.tests.actions;
-
-import java.io.IOException;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.swt.dnd.Clipboard;
-import org.eclipse.swt.widgets.Display;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.ISourceReference;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.JavaModelException;
-
-import org.eclipse.jdt.ui.tests.refactoring.MySetup;
-import org.eclipse.jdt.ui.tests.refactoring.RefactoringTest;
-
-public class PasteSourceReferenceActionTests extends RefactoringTest {
-
-	private static final Class clazz= PasteSourceReferenceActionTests.class;
-	private static final String REFACTORING_PATH= "PasteSourceReference/";
-	
-	public PasteSourceReferenceActionTests(String name) {
-		super(name);
-	}
-	
-	public static Test suite() {
-		return new MySetup(new TestSuite(clazz));
-	}
-	
-	protected String getRefactoringPath() {
-		return REFACTORING_PATH;
-	}
-		
-	private ICompilationUnit fCuA;
-	private ICompilationUnit fCuB;
-	private ICompilationUnit fNewCuA;
-	private ICompilationUnit fNewCuB;
-	private static final String CU_A_NAME= "A";
-	private static final String CU_B_NAME= "B";
-	private Clipboard fClipboard;
-		
-	protected void setUp() throws Exception{
-		super.setUp();
-		fClipboard= new Clipboard(Display.getDefault());
-		fCuA= createCUfromTestFile(getPackageP(), CU_A_NAME);
-		assertTrue("A.java does not exist", fCuA.exists());
-		fCuB= createCUfromTestFile(getPackageP(), CU_B_NAME);
-		assertTrue("B.java does not exist", fCuB.exists());
-	}
-	
-	protected void tearDown() throws Exception{
-		super.tearDown();
-		fClipboard.dispose();
-		if (fNewCuA != null && fNewCuA.exists())
-			fNewCuA.delete(false, null);		
-		if (fCuA != null && fCuA.exists())
-			fCuA.delete(false, null);		
-			
-		if (fNewCuB != null && fNewCuB.exists())
-			fNewCuB.delete(false, null);		
-		if (fCuB != null && fCuB.exists())
-			fCuB.delete(false, null);		
-	}
-
-	private void check() throws IOException, JavaModelException {
-		fNewCuA= getPackageP().getCompilationUnit(CU_A_NAME + ".java");
-		assertEquals("incorrect paste in A", getFileContents(getOutputTestFileName(CU_A_NAME)), fNewCuA.getSource());	
-		
-		fNewCuB= getPackageP().getCompilationUnit(CU_B_NAME + ".java");
-		assertEquals("incorrect paste in B", getFileContents(getOutputTestFileName("B")), fNewCuB.getSource());	
-	}
-		
-	//---- tests 
-	
-	public void test0() throws Exception{
-		IType typeA= fCuA.getType("A");
-		assertTrue("A does not exist", typeA.exists());
-
-		SourceReferenceTestUtil.copy(new IType[]{typeA}, fClipboard);
-		
-		IType typeB= fCuB.getType("B");
-		SourceReferenceTestUtil.paste(new IType[]{typeB}, fClipboard);
-		
-		check();
-	}
-
-	public void test1() throws Exception{
-		IType typeA= fCuA.getType("A");
-		assertTrue("A does not exist", typeA.exists());
-		
-		SourceReferenceTestUtil.copy(new IType[]{typeA}, fClipboard);
-		SourceReferenceTestUtil.delete(new IType[]{typeA});
-		
-		IType typeB= fCuB.getType("B");
-		SourceReferenceTestUtil.paste(new IType[]{typeB}, fClipboard);
-
-		check();
-	}
-	
-	public void test2() throws Exception{
-		Object elem0= fCuA.getType("A").getField("y");
-				
-		SourceReferenceTestUtil.copy(new Object[]{elem0}, fClipboard);
-		SourceReferenceTestUtil.delete(new Object[]{elem0});
-		
-		IType typeB= fCuB.getType("B");
-		SourceReferenceTestUtil.paste(new IType[]{typeB}, fClipboard);
-
-		check();
-	}
-
-	public void test3() throws Exception{
-//		if (true){
-//			printTestDisabledMessage("test for bug#19007");
-//			return;
-//		}	
-		Object elem0= fCuA.getImport("java.lang.*");
-				
-		SourceReferenceTestUtil.copy(new Object[]{elem0}, fClipboard);
-		
-		ISourceReference container= fCuB.getImportContainer();
-		SourceReferenceTestUtil.paste(new ISourceReference[]{container}, fClipboard);
-
-		check();
-	}
-
-	public void test4() throws Exception{
-//		printTestDisabledMessage("test for bug 20151");
-		Object elem0= fCuA.getType("A").getMethod("f", new String[0]);
-				
-		SourceReferenceTestUtil.copy(new Object[]{elem0}, fClipboard);
-		
-		Object dest= fCuA.getType("A").getMethod("f1", new String[0]);
-		SourceReferenceTestUtil.paste(new Object[]{dest}, fClipboard);
-
-		check();
-	}
-	
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/actions/SourceReferenceTestUtil.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/actions/SourceReferenceTestUtil.java
deleted file mode 100644
index 2858588..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/actions/SourceReferenceTestUtil.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package org.eclipse.jdt.ui.tests.actions;
-
-import junit.framework.Assert;
-
-import org.eclipse.swt.dnd.Clipboard;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-
-import org.eclipse.jdt.ui.actions.SelectionDispatchAction;
-import org.eclipse.jdt.ui.tests.refactoring.infra.MockWorkbenchSite;
-
-import org.eclipse.jdt.internal.ui.reorg.DeleteSourceReferencesAction;
-import org.eclipse.jdt.internal.ui.reorg.ReorgActionFactory;
-
-class SourceReferenceTestUtil {
-	
-	private SourceReferenceTestUtil(){
-	}
-	
-	static DeleteSourceReferencesAction createDeleteAction(Object[] elems){
-		DeleteSourceReferencesAction deleteAction= new DeleteSourceReferencesAction(new MockWorkbenchSite(elems)){
-			protected boolean confirmCusDelete(ICompilationUnit[] cusToDelete) {
-				return false;
-			}
-			protected boolean confirmGetterSetterDelete(){
-				return true;
-			}
-		};
-		deleteAction.setAskForDeleteConfirmation(false);
-		return deleteAction;
-	}
-
-	static void delete(Object[] elems) {
-		DeleteSourceReferencesAction deleteAction= createDeleteAction(elems);
-		deleteAction.update(deleteAction.getSelection());
-		Assert.assertTrue("delete action incorrectly disabled", deleteAction.isEnabled());
-		deleteAction.run();
-	}
-
-//	static void cut(Object[] elems) {
-//		ISelectionProvider provider= new FakeSelectionProvider(elems);
-//		CutSourceReferencesToClipboardAction cutAction= new CutSourceReferencesToClipboardAction(provider);
-//		cutAction.update();
-//		Assert.assertTrue("cut enabled", cutAction.isEnabled());
-//		cutAction.run();
-//	}	
-
-	static void copy(Object[] elems, Clipboard clipboard) {
-		SelectionDispatchAction pasteAction= ReorgActionFactory.createPasteAction(new MockWorkbenchSite(elems), clipboard);
-		SelectionDispatchAction copyAction= ReorgActionFactory.createCopyAction(new MockWorkbenchSite(elems), clipboard, pasteAction);
-		copyAction.update(copyAction.getSelection());
-		Assert.assertTrue("copy incorrectly disabled", copyAction.isEnabled());
-		copyAction.run();
-	}	
-
-	static void paste(Object[] elems, Clipboard clipboard) {
-		SelectionDispatchAction pasteAction= ReorgActionFactory.createPasteAction(new MockWorkbenchSite(elems), clipboard);
-		pasteAction.update(pasteAction.getSelection());
-		Assert.assertTrue("paste incorrectly disabled", pasteAction.isEnabled());
-		pasteAction.run();
-	}
-
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/actions/StructureSelectionActionTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/actions/StructureSelectionActionTests.java
deleted file mode 100644
index 4003414..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/actions/StructureSelectionActionTests.java
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/all/AllAllTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/all/AllAllTests.java
deleted file mode 100644
index 16558fb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/all/AllAllTests.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.eclipse.jdt.ui.tests.all;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class AllAllTests {
-	public static Test suite ( ) {
-		TestSuite suite= new TestSuite("All Tests");
-		suite.addTest(org.eclipse.jdt.ui.tests.actions.AllTests.suite());
-		suite.addTest(org.eclipse.jdt.ui.tests.nls.AllTests.suite());
-		suite.addTest(org.eclipse.jdt.ui.tests.refactoring.AllTests.suite());
-		suite.addTest(org.eclipse.jdt.ui.tests.changes.AllTests.suite());
-	    return suite;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/changes/AllTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/changes/AllTests.java
deleted file mode 100644
index 6be4cec..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/changes/AllTests.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.eclipse.jdt.ui.tests.changes;
-
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-public class AllTests {
-	
-	public static Test suite ( ) {
-		TestSuite suite= new TestSuite("All Change Tests");
-		suite.addTest(TrackPositionTest.suite());
-	    return suite;
-	}
-}
-
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/changes/TrackPositionTest.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/changes/TrackPositionTest.java
deleted file mode 100644
index 24b09fe..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/changes/TrackPositionTest.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package org.eclipse.jdt.ui.tests.changes;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.runtime.NullProgressMonitor;
-
-import org.eclipse.jdt.internal.corext.refactoring.base.ChangeContext;
-import org.eclipse.jdt.internal.corext.refactoring.changes.TextBufferChange;
-import org.eclipse.jdt.internal.corext.textmanipulation.SimpleTextEdit;
-import org.eclipse.jdt.internal.corext.textmanipulation.TextBuffer;
-import org.eclipse.jdt.internal.corext.textmanipulation.TextEdit;
-import org.eclipse.jdt.internal.corext.textmanipulation.TextRange;
-import org.eclipse.jdt.internal.ui.refactoring.changes.AbortChangeExceptionHandler;
-
-public class TrackPositionTest extends TestCase {
-
-	private static final Class THIS= TrackPositionTest.class;
-	private static final String NN= "N.N";
-	
-	private TextBuffer fBuffer;
-	private TextBufferChange fChange;
-	
-	public TrackPositionTest(String name) {
-		super(name);
-	}
-	
-	public static Test suite() {
-		return new TestSuite(THIS);
-	}
-	
-	protected void setUp() throws Exception {
-		fBuffer= TextBuffer.create("0123456789");
-		fChange= new TextBufferChange(NN, fBuffer);
-		fChange.setKeepExecutedTextEdits(true);
-	}
-	
-	protected void tearDown() throws Exception {
-		fChange= null;
-	}
-
-	public void test1() throws Exception {
-		TextEdit edit= SimpleTextEdit.createReplace(2, 2, "xyz");
-		fChange.addTextEdit(NN, edit);
-		executeChange();
-		assert(fChange.getNewTextRange(edit), 2, 3);
-	}
-	
-	public void test2() throws Exception {
-		TextEdit edit= SimpleTextEdit.createReplace(5, 3, "xy");
-		fChange.addTextEdit(NN, edit);
-		TextBuffer preview= fChange.getPreviewTextBuffer();
-		assertEquals(fBuffer.getContent(), "0123456789");
-		assertEquals(preview.getContent(), "01234xy89");
-		assert(fChange.getNewTextRange(edit), 5, 2);
-	}
-		
-	private void executeChange() throws Exception {
-		try {
-			ChangeContext context= new ChangeContext(new AbortChangeExceptionHandler());
-			fChange.aboutToPerform(context, new NullProgressMonitor());
-			fChange.perform(context, new NullProgressMonitor());
-		} finally {
-			fChange.performed();
-		}
-	}
-	
-	private void assert(TextRange r, int offset, int length) {
-		assertEquals("Offset", offset, r.getOffset());
-		assertEquals("Length", length, r.getLength());	
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/nls/AllTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/nls/AllTests.java
deleted file mode 100644
index 71427db..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/nls/AllTests.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package org.eclipse.jdt.ui.tests.nls;
-
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-public class AllTests {
-	
-	public static Test suite ( ) {
-		TestSuite suite= new TestSuite("All NLS Tests");
-		suite.addTest(NLSElementTester.suite());
-		suite.addTest(NLSScannerTester.suite());
-		suite.addTest(NLSRefactoringTester.suite());
-		suite.addTest(CellEditorTester.suite());
-		suite.addTest(OrderedMapTester.suite());
-	    return suite;
-	}
-}
-
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/nls/CellEditorTester.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/nls/CellEditorTester.java
deleted file mode 100644
index a8299d7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/nls/CellEditorTester.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package org.eclipse.jdt.ui.tests.nls;
-
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.eclipse.jdt.internal.ui.refactoring.nls.MultiStateCellEditor;
-
-
-public class CellEditorTester extends TestCase {
-
-	/**
-	 * Constructor for CellEditorTester
-	 */
-	public CellEditorTester(String name) {
-		super(name);
-	}
-	
-	public static void main (String[] args) {
-		junit.textui.TestRunner.run (suite());
-	}
-	
-	public static Test suite() {
-		return new TestSuite(CellEditorTester.class);
-	}
-	
-	public void test0(){
-		MultiStateCellEditor ce= new MultiStateCellEditor(null, 3, 0);
-		assertTrue(ce.getValue().equals(new Integer(0)));	
-	}
-	
-	public void test1(){
-		MultiStateCellEditor ce= new MultiStateCellEditor(null, 3, 0);
-		ce.activate();
-		assertTrue(ce.getValue().equals(new Integer(1)));	
-	}
-	public void test2(){
-		MultiStateCellEditor ce= new MultiStateCellEditor(null, 3, 0);
-		ce.activate();
-		ce.activate();
-		assertTrue(ce.getValue().equals(new Integer(2)));	
-	}
-	
-	public void test3(){
-		MultiStateCellEditor ce= new MultiStateCellEditor(null, 3, 0);
-		ce.activate();
-		ce.activate();
-		ce.activate();
-		assertTrue(ce.getValue().equals(new Integer(0)));	
-	}
-	
-	public void test4(){
-		MultiStateCellEditor ce= new MultiStateCellEditor(null, 3, 0);
-		ce.setValue(new Integer(1));
-		assertTrue(ce.getValue().equals(new Integer(1)));	
-	}
-	
-	public void test5(){
-		MultiStateCellEditor ce= new MultiStateCellEditor(null, 3, 0);
-		ce.setValue(new Integer(2));
-		ce.activate();
-		assertTrue(ce.getValue().equals(new Integer(0)));	
-	}	
-}
-
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/nls/NLSElementTester.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/nls/NLSElementTester.java
deleted file mode 100644
index aa4b777..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/nls/NLSElementTester.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package org.eclipse.jdt.ui.tests.nls;
-
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.eclipse.jdt.internal.corext.refactoring.nls.NLSElement;
-
-
-public class NLSElementTester extends TestCase{
-	
-	public NLSElementTester(String name) {
-		super(name);
-	}
-	
-	private NLSElement fEl;
-	private int fOff, fLen;
-	private String fVal;
-	
-	
-	public static void main (String[] args) {
-		junit.textui.TestRunner.run (suite());
-	}
-	
-	public static Test suite() {
-		return new TestSuite(NLSElementTester.class);
-	}
-	
-	protected void setUp(){
-		fOff= 3;
-		fLen= 5;
-		fVal= "test";
-		fEl= new NLSElement(fVal, fOff, fLen);
-	}
-	
-	protected void tearDown(){
-	}
-	
-	public void test0(){
-		assertEquals("Position offset", fOff, fEl.getPosition().getOffset());
-	}
-	
-	public void test1(){	
-		assertEquals("Position length", fLen, fEl.getPosition().getLength());
-	}
-	
-	public void test2(){		
-		assertEquals("value", fVal, fEl.getValue());
-	}
-	
-	public void test3(){	
-		assertEquals("tagposition", null, fEl.getTagPosition());
-	}
-	
-	public void test3a(){	
-		fEl.setTagPosition(1, 2);
-		assertEquals("tagposition.length", 2, fEl.getTagPosition().getLength());
-		assertEquals("tagposition.offset", 1, fEl.getTagPosition().getOffset());
-	}
-
-
-	public void test4(){	
-		assertEquals("hastag", false, fEl.hasTag());
-	}
-	
-	public void test4a(){	
-		fEl.setTagPosition(1, 2);
-		assertEquals("hastag", true, fEl.hasTag());
-	}
-		
-}
-
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/nls/NLSRefactoringTester.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/nls/NLSRefactoringTester.java
deleted file mode 100644
index d26deb6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/nls/NLSRefactoringTester.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package org.eclipse.jdt.ui.tests.nls;
-
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.eclipse.jdt.internal.corext.refactoring.nls.NLSRefactoring;
-
-
-public class NLSRefactoringTester extends TestCase {
-
-
-	/**
-	 * Constructor for NLSRefactoringTester
-	 */
-	public NLSRefactoringTester(String name) {
-		super(name);
-	}
-
-
-	public static void main (String[] args) {
-		junit.textui.TestRunner.run (suite());
-	}
-	
-	public static Test suite() {
-		return new TestSuite(NLSRefactoringTester.class);
-	}
-	
-	private void testRemoveQuotes(String in, String expected){
-		assertEquals("remove quotes", expected, NLSRefactoring.removeQuotes(in));
-	}
-	
-	public void test0(){
-		testRemoveQuotes("\"x\"", "x");
-	}
-	
-	public void test1(){
-		testRemoveQuotes("\"\"", "");	}
-
-}
-
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/nls/NLSScannerTester.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/nls/NLSScannerTester.java
deleted file mode 100644
index 6f186b9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/nls/NLSScannerTester.java
+++ /dev/null
@@ -1,219 +0,0 @@
-package org.eclipse.jdt.ui.tests.nls;
-
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.eclipse.jdt.internal.corext.refactoring.nls.NLSElement;
-import org.eclipse.jdt.internal.corext.refactoring.nls.NLSLine;
-import org.eclipse.jdt.internal.corext.refactoring.nls.NLSScanner;
-
-
-public class NLSScannerTester extends TestCase {
-
-
-	public NLSScannerTester(String name) {
-		super(name);
-	}
-	
-	public static void main (String[] args) {
-		junit.textui.TestRunner.run (suite());
-	}
-	
-	public static Test suite() {
-		return new TestSuite(NLSScannerTester.class);
-	}
-	
-	private void printDisabledMessage(String msg){
-		System.out.println("\nTest " + getName() + " disabled (" + msg + ")");
-	}
-	
-	public void test0() throws Exception{
-		String text= "fred";
-		NLSLine[] l= NLSScanner.scan(text);
-		assertEquals("empty", true, l.length == 0);
-	}
-	
-	public void test1() throws Exception{
-//		String text= "fred\"x\"";
-//		List l= NLSScanner.scan(text);
-//		assertEquals("non empty", false, l.isEmpty());
-//		assertEquals("1 line", 1, l.size());
-		printDisabledMessage("Scanner does not handle strings in the first line");
-	}
-	
-	public void test1a() throws Exception{
-		String text= "fred\n\"x\"";
-		NLSLine[] l= NLSScanner.scan(text);
-		assertEquals("non empty", false, l.length == 0);
-		assertEquals("1 line", 1,l.length);
-	}
-	
-	public void test2() throws Exception{
-//		String text= "fred\"x\" \"xx\"";
-//		NLSLine[] l= NLSScanner.scan(text);
-//		assertEquals("non empty", false, l.isEmpty());
-//		assertEquals("2 line", 2,l.length);
-		printDisabledMessage("Scanner does not handle strings in the first line");
-	}
-	
-	public void test2a() throws Exception{
-		String text= "fred\n\"x\" \"xx\"";
-		NLSLine[] l= NLSScanner.scan(text);
-		assertEquals("non empty", false, l.length == 0);
-		assertEquals("1 lines", 1,l.length);
-	}
-	
-	public void test3() throws Exception{
-//		String text= "fred\"x\"\n \"xx\"";
-//		NLSLine[] l= NLSScanner.scan(text);
-//		assertEquals("non empty", false, l.length == 0);
-//		assertEquals("2 lines", 2,l.length);
-		printDisabledMessage("Scanner does not handle strings in the first line");
-	}
-
-
-	public void test4() throws Exception{
-		String text= "fred\n \"xx\"";
-		NLSLine[] l= NLSScanner.scan(text);
-		assertEquals("non empty", false, l.length == 0);
-		assertEquals("1 line", 1,l.length);
-	}
-	
-	public void test5() throws Exception{
-		String text= "\n \"xx\"";
-		NLSLine[] l= NLSScanner.scan(text);
-		NLSLine line=l[0];
-		assertEquals("1 string", 1, line.size());
-	}	
-	
-	public void test6() throws Exception{
-		String text= "\n \"xx\" \"dff\"";
-		NLSLine[] l= NLSScanner.scan(text);
-		NLSLine line=l[0];
-		assertEquals("2 string", 2, line.size());
-	}	
-	
-	public void test7() throws Exception{
-		String text= "\n \"xx\" \n\"dff\"";
-		NLSLine[] l= NLSScanner.scan(text);
-		NLSLine line=l[0];
-		assertEquals("1 string A", 1, line.size());
-		
-		line= l[1];
-		assertEquals("1 string B", 1, line.size());
-	}	
-
-
-	public void test8() throws Exception{
-		String text= "\n \"xx\" \n\"dff\" \"ccc\"";
-		NLSLine[] l= NLSScanner.scan(text);
-		NLSLine line=l[0];
-		assertEquals("1 string A", 1, line.size());
-		
-		line= l[1];
-		assertEquals("2 strings B", 2, line.size());
-	}
-	
-	public void test9() throws Exception{
-		String text= "fred\n \"xx\"" + NLSElement.createTagText(1) + "\n";
-		NLSLine[] l= NLSScanner.scan(text);
-		NLSLine line=l[0];
-		NLSElement el= line.get(0);
-		assertEquals("has tag", true, el.hasTag());
-	}
-
-
-	public void test10() throws Exception{
-		String text= "fred\n \"xx\"\n";
-		NLSLine[] l= NLSScanner.scan(text);
-		NLSLine line=l[0];
-		NLSElement el= line.get(0);
-		assertEquals("has tag", false, el.hasTag());
-	}
-	
-	public void test11() throws Exception{
-		String text= 
-				"\n\"x\" \"y\""
-				+ NLSElement.createTagText(2) 
-				+ NLSElement.createTagText(1) 
-				+ "\n";
-		NLSLine[] l= NLSScanner.scan(text);
-		NLSLine line=l[0];
-		assertEquals("2 strings", 2, line.size());
-		
-		NLSElement el= line.get(0);
-		assertEquals("0 has tag", true, el.hasTag());
-		
-		el= line.get(1);
-		assertEquals("1 has tag", true, el.hasTag());
-	}
-	
-	public void test12() throws Exception{
-		String text= 
-				"\n\"x\" \"y\""
-				+ NLSElement.createTagText(1) 
-				+ NLSElement.createTagText(2) 
-				+ "\n";
-		NLSLine[] l= NLSScanner.scan(text);
-		NLSLine line=l[0];
-		assertEquals("2 strings", 2, line.size());
-		
-		NLSElement el= line.get(0);
-		assertEquals("0 has tag", true, el.hasTag());
-		
-		el= line.get(1);
-		assertEquals("1 has tag", true, el.hasTag());
-	}
-	
-	public void test13() throws Exception{
-		String text= 
-				"\n\"x\" \"y\""
-				+ NLSElement.createTagText(1) 
-				+ "\n";
-		NLSLine[] l= NLSScanner.scan(text);
-		NLSLine line=l[0];
-		assertEquals("2 strings", 2, line.size());
-		
-		NLSElement el= line.get(0);
-		assertEquals("0 has tag", true, el.hasTag());
-		
-		el= line.get(1);
-		assertEquals("1 has no tag", false, el.hasTag());
-	}
-	
-	public void test14() throws Exception{
-		String text= 
-				"\n\"x\" \"y\""
-				+ NLSElement.createTagText(2) 
-				+ "\n";
-		NLSLine[] l= NLSScanner.scan(text);
-		NLSLine line=l[0];
-		assertEquals("2 strings", 2, line.size());
-		
-		NLSElement el= line.get(0);
-		assertEquals("0 has no tag", false, el.hasTag());
-		
-		el= line.get(1);
-		assertEquals("1 has tag", true, el.hasTag());
-	}
-
-	//regression test for bug 12600
-	public void test54() throws Exception{
-		String text= 
-				"\n\"x\""
-				+ NLSElement.TAG_PREFIX + 1 
-				+ "\n";
-		NLSLine[] l= NLSScanner.scan(text);
-		NLSLine line=l[0];
-		assertEquals("1 strings", 1, line.size());
-		
-		NLSElement el= line.get(0);
-		assertEquals("0 has no tag", false, el.hasTag());
-		
-	}
-				
-}
-
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/nls/OrderedMapTester.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/nls/OrderedMapTester.java
deleted file mode 100644
index cab9cf2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/nls/OrderedMapTester.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package org.eclipse.jdt.ui.tests.nls;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.eclipse.jdt.internal.ui.refactoring.nls.OrderedMap;
-
-public class OrderedMapTester extends TestCase {
-
-	/**
-	 * Constructor for OrderedMapTester
-	 */
-	public OrderedMapTester(String name) {
-		super(name);
-	}
-
-	public static void main (String[] args) {
-		junit.textui.TestRunner.run (suite());
-	}
-	
-	public static Test suite() {
-		return new TestSuite(OrderedMapTester.class);
-	}
-	
-	private OrderedMap m;
-	
-	public void setUp(){
-		m= new OrderedMap();
-	}
-	
-	public void test0(){
-		assertTrue(m.peek() == null);
-	}
-	
-	public void test1(){
-		String key= "key";
-		m.push(key, this);
-		assertTrue(m.peek() != null);
-	}
-	
-	public void test2(){
-		String key= "key";
-		m.push(key, this);
-		m.remove(key);
-		assertTrue(m.peek() == null);
-	}
-	
-	public void test3(){
-		String key= "key";
-		m.push(key, this);
-		m.push(key, key);
-		assertTrue("A", m.peek() != null);
-		m.remove(key);
-		assertTrue("B", m.peek() == null);
-	}
-	
-	public void test4(){
-		m.remove(this);
-	}
-	
-	public void test5(){
-		String key1= "key1";
-		String key2= "key2";
-		String v1= "v1";
-		String v2= "v2";
-		m.push(key1, v1);
-		m.push(key2, v2);
-		assertTrue("A", m.peek().equals(v2));
-		m.remove(key2);
-		assertTrue("B", m.peek().equals(v1));
-	}
-
-	public void test6(){
-		String key1= "key1";
-		String key2= "key2";
-		String v1= "v1";
-		String v2= "v2";
-		m.push(key1, v1);
-		m.push(key2, v2);
-		assertEquals("A", v2, m.peek());
-		m.remove(key1);
-		assertEquals("B", v2, m.peek());
-		m.remove(key2);
-		assertEquals("B", null, m.peek());
-	}
-	
-	public void test7(){
-		String key1= "key1";
-		String key2= "key2";
-		String v1= "v1";
-		String v2= "v2";
-		m.push(key1, v1);
-		m.push(key2, v2);
-		assertEquals("A", v2, m.peek());
-		m.remove(key2);
-		assertEquals("B", v1, m.peek());
-		m.remove(key1);
-		assertEquals("B", null, m.peek());
-	}
-	
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/AbstractSelectionTestCase.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/AbstractSelectionTestCase.java
deleted file mode 100644
index 3518fa6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/AbstractSelectionTestCase.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.NullProgressMonitor;
-
-import org.eclipse.jface.text.ITextSelection;
-import org.eclipse.jface.text.TextSelection;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-
-import org.eclipse.jdt.ui.tests.refactoring.infra.AbstractCUTestCase;
-import org.eclipse.jdt.ui.tests.refactoring.infra.RefactoringTestPlugin;
-import org.eclipse.jdt.ui.tests.refactoring.infra.TestExceptionHandler;
-
-import org.eclipse.jdt.internal.corext.refactoring.base.ChangeContext;
-import org.eclipse.jdt.internal.corext.refactoring.base.IChange;
-import org.eclipse.jdt.internal.corext.refactoring.base.Refactoring;
-import org.eclipse.jdt.internal.corext.refactoring.base.RefactoringStatus;
-
-public abstract class AbstractSelectionTestCase extends AbstractCUTestCase {
-
-	public static final String SQUARE_BRACKET_OPEN= "/*[*/";
-	public static final int    SQUARE_BRACKET_OPEN_LENGTH= SQUARE_BRACKET_OPEN.length();
-	public static final String SQUARE_BRACKET_CLOSE=   "/*]*/";
-	public static final int    SQUARE_BRACKET_CLOSE_LENGTH= SQUARE_BRACKET_CLOSE.length();
-	
-	protected static final int VALID_SELECTION=     1;
-	protected static final int INVALID_SELECTION=   2;
-	protected static final int COMPARE_WITH_OUTPUT= 3;
-	
-	public AbstractSelectionTestCase(String name) {
-		super(name);
-	}
-
-	protected int[] getSelection(String source) {
-		int start= -1;
-		int end= -1;
-		int includingStart= source.indexOf(SQUARE_BRACKET_OPEN);
-		int excludingStart= source.indexOf(SQUARE_BRACKET_CLOSE);
-		int includingEnd= source.lastIndexOf(SQUARE_BRACKET_CLOSE);
-		int excludingEnd= source.lastIndexOf(SQUARE_BRACKET_OPEN);
-
-		if (includingStart > excludingStart && excludingStart != -1) {
-			includingStart= -1;
-		} else if (excludingStart > includingStart && includingStart != -1) {
-			excludingStart= -1;
-		}
-		
-		if (includingEnd < excludingEnd) {
-			includingEnd= -1;
-		} else if (excludingEnd < includingEnd) {
-			excludingEnd= -1;
-		}
-		
-		if (includingStart != -1) {
-			start= includingStart;
-		} else {
-			start= excludingStart + SQUARE_BRACKET_CLOSE_LENGTH;
-		}
-		
-		if (excludingEnd != -1) {
-			end= excludingEnd;
-		} else {
-			end= includingEnd + SQUARE_BRACKET_CLOSE_LENGTH;
-		}
-		
-		assertTrue("Selection invalid", start >= 0 && end >= 0 && end >= start);
-		
-		int[] result= new int[] { start, end - start }; 
-		// System.out.println("|"+ source.substring(result[0], result[0] + result[1]) + "|");
-		return result;
-	}
-	
-	protected ITextSelection getTextSelection(String source) {
-		int[] s= getSelection(source);
-		return new TextSelection(s[0], s[1]);
-	}
-	
-	protected InputStream getFileInputStream(String fileName) throws IOException {
-		return RefactoringTestPlugin.getDefault().getTestResourceStream(fileName);
-	}
-	
-	protected void performTest(ICompilationUnit unit, Refactoring refactoring, int mode, String out) throws Exception {
-		IProgressMonitor pm= new NullProgressMonitor();
-		RefactoringStatus status= refactoring.checkPreconditions(pm);
-		switch (mode) {
-			case VALID_SELECTION:
-				// System.out.println(status);
-				assertTrue(status.isOK());
-				break;
-			case INVALID_SELECTION:
-				// System.out.println(status);
-				assertTrue(!status.isOK());
-				break;
-			case COMPARE_WITH_OUTPUT:
-				assertTrue(!status.hasFatalError());
-				String original= unit.getSource();
-				IChange change= refactoring.createChange(pm);
-				assertNotNull(change);
-				ChangeContext context= new ChangeContext(new TestExceptionHandler());
-				change.aboutToPerform(context, pm);
-				change.perform(context, pm);
-				change.performed();
-				IChange undo= change.getUndoChange();
-				assertNotNull(undo);
-				compareSource(unit.getSource(), out);
-				context= new ChangeContext(new TestExceptionHandler());
-				undo.aboutToPerform(context, pm);
-				undo.perform(context, pm);
-				undo.performed();
-				compareSource(unit.getSource(), original);
-				break;		
-		}
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/AllChangeTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/AllChangeTests.java
deleted file mode 100644
index deb0b64..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/AllChangeTests.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class AllChangeTests {
-	private static final Class clazz= AllChangeTests.class;
-
-	public static Test suite() {
-		TestSuite suite= new TestSuite(clazz.getName());
-		suite.addTest(new TestSuite(RenameResourceChangeTests.class));
-		suite.addTest(new TestSuite(RenameSourceFolderChangeTests.class));
-		suite.addTest(new TestSuite(CopyPackageChangeTest.class));
-		return new MySetup(suite);
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/AllRefactoringTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/AllRefactoringTests.java
deleted file mode 100644
index d788996..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/AllRefactoringTests.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-public class AllRefactoringTests {
-
-	private static final Class clazz= AllRefactoringTests.class;
-
-	public static Test suite() {
-		TestSuite suite= new TestSuite(clazz.getName());
-
-		//--code
-		suite.addTest(ExtractMethodTests.suite());
-		suite.addTest(InlineMethodTests.suite());
-		suite.addTest(SefTests.suite());
-		suite.addTest(InlineTempTests.suite());
-		suite.addTest(ExtractTempTests.suite());
-		suite.addTest(RenameTempTests.suite());
-		suite.addTest(ExtractConstantTests.suite());
-		
-		//-- structure
-		suite.addTest(ChangeSignatureTests.suite());
-		suite.addTest(PullUpTests.suite());
-		suite.addTest(MoveMembersTests.suite());
-		suite.addTest(ExtractInterfaceTests.suite());
-		suite.addTest(MoveInnerToTopLevelTests.suite());
-		suite.addTest(UseSupertypeWherePossibleTests.suite());
-		
-		//--methods
-		suite.addTest(RenameVirtualMethodInClassTests.suite());
-		suite.addTest(RenameMethodInInterfaceTests.suite());
-		suite.addTest(RenamePrivateMethodTests.suite());	
-		suite.addTest(RenameStaticMethodTests.suite());
-		suite.addTest(RenameParametersTests.suite());
-		
-		//--types
-		suite.addTest(RenameTypeTests.suite());	
-		
-		//--packages
-		suite.addTest(RenamePackageTests.suite());
-		
-		//--fields
-		suite.addTest(RenamePrivateFieldTests.suite());
-		suite.addTest(RenameNonPrivateFieldTests.suite());
-		
-		//--compilation units
-		suite.addTest(MultiMoveTests.suite());
-
-		//--projects
-		suite.addTest(RenameJavaProjectTests.suite());		
-		return suite;
-	}
-}
- 
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/AllTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/AllTests.java
deleted file mode 100644
index 212e0eb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/AllTests.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class AllTests {
-	
-	private static final Class clazz= AllTests.class;
-	
-	public static Test suite() {
-		TestSuite suite= new TestSuite(clazz.getName());
-		suite.addTest(AllRefactoringTests.suite());
-		suite.addTest(ReorgTests.suite());
-		suite.addTest(AllChangeTests.suite());
-		suite.addTest(UndoManagerTests.suite());
-		suite.addTest(PathTransformationTests.suite());
-		suite.addTest(RefactoringScannerTests.suite());
-		suite.addTest(SurroundWithTests.suite());
-		// suite.addTest(SelectionAnalyzerTests.suite()); 
-		return suite;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ChangeSignatureTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ChangeSignatureTests.java
deleted file mode 100644
index 5642668..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ChangeSignatureTests.java
+++ /dev/null
@@ -1,618 +0,0 @@
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IMethod;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IType;
-
-import org.eclipse.jdt.internal.corext.refactoring.ParameterInfo;
-import org.eclipse.jdt.internal.corext.refactoring.base.RefactoringStatus;
-import org.eclipse.jdt.internal.corext.refactoring.structure.ChangeSignatureRefactoring;
-import org.eclipse.jdt.internal.corext.refactoring.util.JdtFlags;
-
-import org.eclipse.jdt.ui.tests.refactoring.infra.AbstractCUTestCase;
-
-public class ChangeSignatureTests extends RefactoringTest {
-	private static final Class clazz= ChangeSignatureTests.class;
-	private static final String REFACTORING_PATH= "ChangeSignature/";
-	
-	private static final boolean RUN_CONSTRUCTOR_TEST = false;
-
-	public ChangeSignatureTests(String name) {
-		super(name);
-	}
-	
-	protected String getRefactoringPath() {
-		return REFACTORING_PATH;
-	}
-	
-	public static Test suite() {
-		return new MySetup(new TestSuite(clazz));
-	}
-	
-	private String getSimpleTestFileName(boolean canReorder, boolean input){
-		String fileName = "A_" + getName();
-		if (canReorder)
-			fileName += input ? "_in": "_out";
-		return fileName + ".java"; 
-	}
-	
-	private String getTestFileName(boolean canReorder, boolean input){
-		String fileName= TEST_PATH_PREFIX + getRefactoringPath();
-		fileName += (canReorder ? "canModify/": "cannotModify/");
-		return fileName + getSimpleTestFileName(canReorder, input);
-	}
-	
-	private String getPassingTestFileName(boolean input){
-		return getTestFileName(true, input);
-	}	
-	
-	//---helpers 
-	
-	protected ICompilationUnit createCUfromTestFile(IPackageFragment pack, boolean canRename, boolean input) throws Exception {
-		return createCU(pack, getSimpleTestFileName(canRename, input), getFileContents(getTestFileName(canRename, input)));
-	}
-
-	private static ParameterInfo[] createNewParamInfos(String[] newTypes, String[] newNames, String[] newDefaultValues) {
-		if (newTypes == null)
-			return new ParameterInfo[0];
-		ParameterInfo[] result= new ParameterInfo[newTypes.length];
-		for (int i= 0; i < newDefaultValues.length; i++) {
-			result[i]= ParameterInfo.createInfoForAddedParameter();
-			result[i].setNewName(newNames[i]);
-			result[i].setType(newTypes[i]);
-			result[i].setDefaultValue(newDefaultValues[i]);
-		}
-		return result;
-	}
-
-	private static void addInfos(List list, ParameterInfo[] newParamInfos, int[] newIndices) {
-		if (newParamInfos == null || newIndices == null)
-			return;
-		for (int i= newIndices.length - 1; i >= 0; i--) {
-			list.add(newIndices[i], newParamInfos[i]);
-		}
-	}
-		
-	private void helperAdd(String[] signature, ParameterInfo[] newParamInfos, int[] newIndices) throws Exception {
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), true, true);
-		IType classA= getType(cu, "A");
-		IMethod method = classA.getMethod("m", signature);
-		assertTrue("method does not exist", method.exists());
-		ChangeSignatureRefactoring ref= new ChangeSignatureRefactoring(method);
-		addInfos(ref.getParameterInfos(), newParamInfos, newIndices);
-		RefactoringStatus result= performRefactoring(ref);
-		assertEquals("precondition was supposed to pass", null, result);
-		
-		IPackageFragment pack= (IPackageFragment)cu.getParent();
-		String newCuName= getSimpleTestFileName(true, true);
-		ICompilationUnit newcu= pack.getCompilationUnit(newCuName);
-		assertTrue(newCuName + " does not exist", newcu.exists());
-		String expectedFileContents= getFileContents(getTestFileName(true, false));
-//		assertEquals("invalid renaming", expectedFileContents, newcu.getSource());
-		AbstractCUTestCase.compareSource(newcu.getSource(), expectedFileContents);
-	}
-
-	private void helperDoAll(String methodName, String[] signature, ParameterInfo[] newParamInfos, int[] newIndices, String[] oldParamNames, String[] newParamNames, int[] permutation, int newVisibility)  throws Exception{
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), true, true);
-		IType classA= getType(cu, "A");
-		IMethod method = classA.getMethod(methodName, signature);
-		assertTrue("method does not exist", method.exists());
-		ChangeSignatureRefactoring ref= new ChangeSignatureRefactoring(method);
-		modifyInfos(ref.getParameterInfos(), newParamInfos, newIndices, oldParamNames, newParamNames, permutation);
-		if (newVisibility != JdtFlags.VISIBILITY_CODE_INVALID)
-			ref.setVisibility(newVisibility);
-		RefactoringStatus result= performRefactoring(ref);
-		assertEquals("precondition was supposed to pass", null, result);
-		
-		IPackageFragment pack= (IPackageFragment)cu.getParent();
-		String newCuName= getSimpleTestFileName(true, true);
-		ICompilationUnit newcu= pack.getCompilationUnit(newCuName);
-		assertTrue(newCuName + " does not exist", newcu.exists());
-		String expectedFileContents= getFileContents(getTestFileName(true, false));
-//		assertEquals("invalid renaming", expectedFileContents, actualCode);
-		AbstractCUTestCase.compareSource(newcu.getSource(), expectedFileContents);
-	}
-
-	private void helper1(String[] newOrder, String[] signature) throws Exception{
-		helper1(newOrder, signature, null, null);
-	}
-	
-	private void helper1(String[] newOrder, String[] signature, String[] oldNames, String[] newNames) throws Exception{
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), true, true);
-		IType classA= getType(cu, "A");
-		IMethod method = classA.getMethod("m", signature);
-		assertTrue("method does not exist", method.exists());
-		ChangeSignatureRefactoring ref= new ChangeSignatureRefactoring(method);
-		modifyInfos(ref.getParameterInfos(), newOrder, oldNames, newNames);
-		RefactoringStatus result= performRefactoring(ref);
-		assertEquals("precondition was supposed to pass", null, result);
-		
-		IPackageFragment pack= (IPackageFragment)cu.getParent();
-		String newCuName= getSimpleTestFileName(true, true);
-		ICompilationUnit newcu= pack.getCompilationUnit(newCuName);
-		assertTrue(newCuName + " does not exist", newcu.exists());
-		String expectedFileContents= getFileContents(getTestFileName(true, false));
-//		assertEquals("invalid renaming", expectedFileContents, newcu.getSource());
-		AbstractCUTestCase.compareSource(newcu.getSource(), expectedFileContents);
-	}
-
-	private void modifyInfos(List infos, ParameterInfo[] newParamInfos, int[] newIndices, String[] oldParamNames, String[] newParamNames, int[] permutation) {
-		addInfos(infos, newParamInfos, newIndices);
-		List swapped= new ArrayList(infos.size());
-		List oldNameList= Arrays.asList(oldParamNames);
-		List newNameList= Arrays.asList(newParamNames);
-		for (int i= 0; i < permutation.length; i++) {
-			if (((ParameterInfo)infos.get(i)).isAdded())
-				continue;
-			if (! swapped.contains(new Integer(i))){
-				swapped.add(new Integer(permutation[i]));
-				ParameterInfo infoI= (ParameterInfo)infos.get(i);
-				infoI.setNewName((String)newNameList.get(oldNameList.indexOf(infoI.getOldName())));
-				ParameterInfo infoI1= (ParameterInfo)infos.get(permutation[i]);
-				infoI1.setNewName((String)newNameList.get(oldNameList.indexOf(infoI1.getOldName())));
-				swap(infos, i, permutation[i]);
-			}	
-		}
-	}
-
-	private static void modifyInfos(List infos, String[] newOrder, String[] oldNames, String[] newNames) {
-		int[] permutation= createPermutation(infos, newOrder);
-		List swapped= new ArrayList(infos.size());
-		if (oldNames == null || newNames == null){
-			for (int i= 0; i < permutation.length; i++) {
-				if (! swapped.contains(new Integer(i))){
-					swapped.add(new Integer(permutation[i]));
-					swap(infos, i, permutation[i]);
-				}	
-			}
-			return;
-		} else {
-			List oldNameList= Arrays.asList(oldNames);
-			List newNameList= Arrays.asList(newNames);
-			for (int i= 0; i < permutation.length; i++) {
-				if (! swapped.contains(new Integer(i))){
-					swapped.add(new Integer(permutation[i]));
-					ParameterInfo infoI= (ParameterInfo)infos.get(i);
-					infoI.setNewName((String)newNameList.get(oldNameList.indexOf(infoI.getOldName())));
-					ParameterInfo infoI1= (ParameterInfo)infos.get(permutation[i]);
-					infoI1.setNewName((String)newNameList.get(oldNameList.indexOf(infoI1.getOldName())));
-					swap(infos, i, permutation[i]);
-				}				
-			}
-		}
-	}
-
-	private static void swap(List infos, int i, int i1) {
-		Object o= infos.get(i);
-		infos.set(i, infos.get(i1));
-		infos.set(i1, o);
-	}
-
-	private static int[] createPermutation(List infos, String[] newOrder) {
-		int[] result= new int[infos.size()];
-		for (int i= 0; i < result.length; i++) {
-			result[i]= indexOfOldName(infos, newOrder[i]);
-		}
-		return result;
-	}
-
-	private static int indexOfOldName(List infos, String string) {
-		for (Iterator iter= infos.iterator(); iter.hasNext();) {
-			ParameterInfo info= (ParameterInfo) iter.next();
-			if (info.getOldName().equals(string))
-				return infos.indexOf(info);
-		}
-		assertTrue(false);
-		return -1;
-	}
-
-	private void helperFail(String[] newOrder, String[] signature, int expectedSeverity) throws Exception{
-		IType classA= getType(createCUfromTestFile(getPackageP(), false, false), "A");
-		ChangeSignatureRefactoring ref= new ChangeSignatureRefactoring(classA.getMethod("m", signature));
-		modifyInfos(ref.getParameterInfos(), newOrder, null, null);
-		RefactoringStatus result= performRefactoring(ref);
-		assertNotNull("precondition was supposed to fail", result);		
-		assertEquals("Severity:", expectedSeverity, result.getSeverity());
-	}
-
-	private void helperAddFail(String[] signature, ParameterInfo[] newParamInfos, int[] newIndices, int expectedSeverity) throws Exception{
-		IType classA= getType(createCUfromTestFile(getPackageP(), false, false), "A");
-		ChangeSignatureRefactoring ref= new ChangeSignatureRefactoring(classA.getMethod("m", signature));
-		addInfos(ref.getParameterInfos(), newParamInfos, newIndices);
-		RefactoringStatus result= performRefactoring(ref);
-		assertNotNull("precondition was supposed to fail", result);		
-		assertEquals("Severity:" + result.getFirstMessage(result.getSeverity()), expectedSeverity, result.getSeverity());
-	}
-	
-	//------- tests 
-	
-	public void testFail0() throws Exception{
-		helperFail(new String[]{"j", "i"}, new String[]{"I", "I"}, RefactoringStatus.ERROR);
-	}
-	
-	public void testFail1() throws Exception{
-		helperFail(new String[]{"j", "i"}, new String[]{"I", "I"}, RefactoringStatus.ERROR);
-	}
-
-	public void testFailAdd2() throws Exception{
-		String[] signature= {"I"};
-		String[] newNames= {"x"};
-		String[] newTypes= {"int"};
-		String[] newDefaultValues= {"0"};
-		ParameterInfo[] newParamInfo= createNewParamInfos(newTypes, newNames, newDefaultValues);
-		int[] newIndices= {0};
-		helperAddFail(signature, newParamInfo, newIndices, RefactoringStatus.ERROR);
-	}
-
-	public void testFailAdd3() throws Exception{
-		String[] signature= {"I"};
-		String[] newNames= {"x"};
-		String[] newTypes= {"int"};
-		String[] newDefaultValues= {"not good"};
-		ParameterInfo[] newParamInfo= createNewParamInfos(newTypes, newNames, newDefaultValues);
-		int[] newIndices= {0};
-		helperAddFail(signature, newParamInfo, newIndices, RefactoringStatus.FATAL);
-	}
-
-	public void testFailAdd4() throws Exception{
-		String[] signature= {"I"};
-		String[] newNames= {"x"};
-		String[] newTypes= {"not a type"};
-		String[] newDefaultValues= {"0"};
-		ParameterInfo[] newParamInfo= createNewParamInfos(newTypes, newNames, newDefaultValues);
-		int[] newIndices= {0};
-		helperAddFail(signature, newParamInfo, newIndices, RefactoringStatus.FATAL);
-	}
-	
-	//---------
-	public void test0() throws Exception{
-		helper1(new String[]{"j", "i"}, new String[]{"I", "I"});
-	}
-	
-	public void test1() throws Exception{
-		helper1(new String[]{"j", "i"}, new String[]{"I", "I"});
-	}
-	
-	public void test2() throws Exception{
-		helper1(new String[]{"j", "i"}, new String[]{"I", "I"});
-	}
-	
-	public void test3() throws Exception{
-		helper1(new String[]{"j", "i"}, new String[]{"I", "I"});
-	}
-	
-	public void test4() throws Exception{
-		helper1(new String[]{"j", "i"}, new String[]{"I", "I"});
-	}
-	
-	public void test5() throws Exception{
-		helper1(new String[]{"j", "i"}, new String[]{"I", "I"});
-	}
-	
-	public void test6() throws Exception{
-		helper1(new String[]{"k", "i", "j"}, new String[]{"I", "I", "I"});
-	}
-
-	public void test7() throws Exception{
-		helper1(new String[]{"i", "k", "j"}, new String[]{"I", "I", "I"});
-	}
-
-	public void test8() throws Exception{
-		helper1(new String[]{"k", "j", "i"}, new String[]{"I", "I", "I"});
-	}
-	
-	public void test9() throws Exception{
-		helper1(new String[]{"j", "i", "k"}, new String[]{"I", "I", "I"});
-	}
-
-	public void test10() throws Exception{
-		helper1(new String[]{"j", "k", "i"}, new String[]{"I", "I", "I"});
-	}
-
-	public void test11() throws Exception{
-		helper1(new String[]{"j", "k", "i"}, new String[]{"I", "I", "I"});
-	}
-
-	public void test12() throws Exception{
-		helper1(new String[]{"j", "k", "i"}, new String[]{"I", "I", "I"});
-	}
-
-	public void test13() throws Exception{
-		helper1(new String[]{"j", "k", "i"}, new String[]{"I", "I", "I"});
-	}
-	
-	public void test14() throws Exception{
-		helper1(new String[]{"j", "i"}, new String[]{"I", "I"});
-	}
-	
-	public void test15() throws Exception{
-		helper1(new String[]{"b", "i"}, new String[]{"I", "Z"});
-	}
-	
-	public void test16() throws Exception{
-		helper1(new String[]{"b", "i"}, new String[]{"I", "Z"});
-	}
-	
-	public void test17() throws Exception{
-		//exception because of bug 11151
-		helper1(new String[]{"b", "i"}, new String[]{"I", "Z"});
-	}
-	
-	public void test18() throws Exception{
-		//exception because of bug 11151
-		helper1(new String[]{"b", "i"}, new String[]{"I", "Z"});
-	}
-	
-	public void test19() throws Exception{
-//		printTestDisabledMessage("bug 7274 - reorder parameters: incorrect when parameters have more than 1 modifiers");
-		helper1(new String[]{"b", "i"}, new String[]{"I", "Z"});
-	}
-	public void test20() throws Exception{
-//		printTestDisabledMessage("bug 18147");
-		helper1(new String[]{"b", "a"}, new String[]{"I", "[I"});
-	}
-
-//constructor tests
-	public void test21() throws Exception{
-		if (! RUN_CONSTRUCTOR_TEST){
-			printTestDisabledMessage("disabled for constructors for now");
-			return;
-		}
-		String[] signature= {"I", "I"};
-		ParameterInfo[] newParamInfo= null;
-		int[] newIndices= null;
-		
-		String[] oldParamNames= {"a", "b"};
-		String[] newParamNames= {"a", "b"};
-		int[] permutation= {1, 0};
-		int newVisibility= JdtFlags.VISIBILITY_CODE_INVALID;//retain
-		helperDoAll("A", signature, newParamInfo, newIndices, oldParamNames, newParamNames, permutation, newVisibility);
-	}
-	public void test22() throws Exception{
-		if (! RUN_CONSTRUCTOR_TEST){
-			printTestDisabledMessage("disabled for constructors for now");
-			return;
-		}
-		String[] signature= {"I", "I"};
-		ParameterInfo[] newParamInfo= null;
-		int[] newIndices= null;
-		
-		String[] oldParamNames= {"a", "b"};
-		String[] newParamNames= {"a", "b"};
-		int[] permutation= {1, 0};
-		int newVisibility= JdtFlags.VISIBILITY_CODE_INVALID;//retain
-		helperDoAll("A", signature, newParamInfo, newIndices, oldParamNames, newParamNames, permutation, newVisibility);
-	}
-	public void test23() throws Exception{
-		if (! RUN_CONSTRUCTOR_TEST){
-			printTestDisabledMessage("disabled for constructors for now");
-			return;
-		}
-		String[] signature= {"I", "I"};
-		ParameterInfo[] newParamInfo= null;
-		int[] newIndices= null;
-		
-		String[] oldParamNames= {"a", "b"};
-		String[] newParamNames= {"a", "b"};
-		int[] permutation= {1, 0};
-		int newVisibility= JdtFlags.VISIBILITY_CODE_INVALID;//retain
-		helperDoAll("A", signature, newParamInfo, newIndices, oldParamNames, newParamNames, permutation, newVisibility);
-	}
-	public void test24() throws Exception{
-		if (! RUN_CONSTRUCTOR_TEST){
-			printTestDisabledMessage("disabled for constructors for now");
-			return;
-		}
-		if (true){
-			printTestDisabledMessage("Bug 24230");
-			return;
-		}	
-		String[] signature= {"I", "I"};
-		ParameterInfo[] newParamInfo= null;
-		int[] newIndices= null;
-		
-		String[] oldParamNames= {"a", "b"};
-		String[] newParamNames= {"a", "b"};
-		int[] permutation= {1, 0};
-		int newVisibility= JdtFlags.VISIBILITY_CODE_INVALID;//retain
-		helperDoAll("A", signature, newParamInfo, newIndices, oldParamNames, newParamNames, permutation, newVisibility);
-	}
-	public void test25() throws Exception{
-		if (! RUN_CONSTRUCTOR_TEST){
-			printTestDisabledMessage("disabled for constructors for now");
-			return;
-		}
-		String[] signature= {"I", "I"};
-		ParameterInfo[] newParamInfo= null;
-		int[] newIndices= null;
-		
-		String[] oldParamNames= {"a", "b"};
-		String[] newParamNames= {"a", "b"};
-		int[] permutation= {1, 0};
-		int newVisibility= JdtFlags.VISIBILITY_CODE_INVALID;//retain
-		helperDoAll("A", signature, newParamInfo, newIndices, oldParamNames, newParamNames, permutation, newVisibility);
-	}
-	public void test26() throws Exception{
-		if (! RUN_CONSTRUCTOR_TEST){
-			printTestDisabledMessage("disabled for constructors for now");
-			return;
-		}
-		String[] signature= {"I", "I"};
-		ParameterInfo[] newParamInfo= null;
-		int[] newIndices= null;
-		
-		String[] oldParamNames= {"a", "b"};
-		String[] newParamNames= {"a", "b"};
-		int[] permutation= {1, 0};
-		int newVisibility= JdtFlags.VISIBILITY_CODE_INVALID;//retain
-		helperDoAll("A", signature, newParamInfo, newIndices, oldParamNames, newParamNames, permutation, newVisibility);
-	}
-
-	public void testRenameReorder26() throws Exception{
-		helper1(new String[]{"a", "y"}, new String[]{"Z", "I"}, new String[]{"y", "a"}, new String[]{"zzz", "bb"});
-	}
-	
-	public void testRenameReorder27() throws Exception{
-		helper1(new String[]{"a", "y"}, new String[]{"Z", "I"}, new String[]{"y", "a"}, new String[]{"yyy", "a"});
-	}
-
-	public void testAdd28()throws Exception{
-		String[] signature= {"I"};
-		String[] newNames= {"x"};
-		String[] newTypes= {"int"};
-		String[] newDefaultValues= {"0"};
-		ParameterInfo[] newParamInfo= createNewParamInfos(newTypes, newNames, newDefaultValues);
-		int[] newIndices= {1};
-		helperAdd(signature, newParamInfo, newIndices);
-	}
-
-	public void testAdd29()throws Exception{
-		String[] signature= {"I"};
-		String[] newNames= {"x"};
-		String[] newTypes= {"int"};
-		String[] newDefaultValues= {"0"};
-		ParameterInfo[] newParamInfo= createNewParamInfos(newTypes, newNames, newDefaultValues);
-		int[] newIndices= {0};
-		helperAdd(signature, newParamInfo, newIndices);
-	}
-
-	public void testAdd30()throws Exception{
-		String[] signature= {"I"};
-		String[] newNames= {"x"};
-		String[] newTypes= {"int"};
-		String[] newDefaultValues= {"0"};
-		ParameterInfo[] newParamInfo= createNewParamInfos(newTypes, newNames, newDefaultValues);
-		int[] newIndices= {1};
-		helperAdd(signature, newParamInfo, newIndices);
-	}
-	
-	public void testAdd31()throws Exception{
-		String[] signature= {"I"};
-		String[] newNames= {"x"};
-		String[] newTypes= {"int"};
-		String[] newDefaultValues= {"0"};
-		ParameterInfo[] newParamInfo= createNewParamInfos(newTypes, newNames, newDefaultValues);
-		int[] newIndices= {1};
-		helperAdd(signature, newParamInfo, newIndices);
-	}
-
-	public void testAdd32()throws Exception{
-		String[] signature= {"I"};
-		String[] newNames= {"x"};
-		String[] newTypes= {"int"};
-		String[] newDefaultValues= {"0"};
-		ParameterInfo[] newParamInfo= createNewParamInfos(newTypes, newNames, newDefaultValues);
-		int[] newIndices= {0};
-		helperAdd(signature, newParamInfo, newIndices);
-	}
-
-	public void testAdd33()throws Exception{
-		String[] signature= {};
-		String[] newNames= {"x"};
-		String[] newTypes= {"int"};
-		String[] newDefaultValues= {"0"};
-		ParameterInfo[] newParamInfo= createNewParamInfos(newTypes, newNames, newDefaultValues);
-		int[] newIndices= {0};
-		helperAdd(signature, newParamInfo, newIndices);
-	}
-
-	public void testAddReorderRename34()throws Exception{
-		String[] signature= {"I", "Z"};
-		String[] newNames= {"x"};
-		String[] newTypes= {"Object"};
-		String[] newDefaultValues= {"null"};
-		ParameterInfo[] newParamInfo= createNewParamInfos(newTypes, newNames, newDefaultValues);
-		int[] newIndices= {1};
-		
-		String[] oldParamNames= {"iii", "j"};
-		String[] newParamNames= {"i", "jj"};
-		int[] permutation= {2, -1, 0};
-		int newVisibility= JdtFlags.VISIBILITY_CODE_INVALID;//retain
-		helperDoAll("m", signature, newParamInfo, newIndices, oldParamNames, newParamNames, permutation, newVisibility);
-	}	
-
-	public void testAll35()throws Exception{
-		String[] signature= {"I", "Z"};
-		String[] newNames= null;
-		String[] newTypes= null;
-		String[] newDefaultValues= null;
-		ParameterInfo[] newParamInfo= createNewParamInfos(newTypes, newNames, newDefaultValues);
-		int[] newIndices= null;
-		
-		String[] oldParamNames= {"iii", "j"};
-		String[] newParamNames= oldParamNames;
-		int[] permutation= {0, 1};
-		int newVisibility= JdtFlags.VISIBILITY_CODE_PUBLIC;
-		helperDoAll("m", signature, newParamInfo, newIndices, oldParamNames, newParamNames, permutation, newVisibility);
-	}	
-
-	public void testAll36()throws Exception{
-		String[] signature= {"I", "Z"};
-		String[] newNames= null;
-		String[] newTypes= null;
-		String[] newDefaultValues= null;
-		ParameterInfo[] newParamInfo= createNewParamInfos(newTypes, newNames, newDefaultValues);
-		int[] newIndices= null;
-		
-		String[] oldParamNames= {"iii", "j"};
-		String[] newParamNames= oldParamNames;
-		int[] permutation= {0, 1};
-		int newVisibility= JdtFlags.VISIBILITY_CODE_PRIVATE;
-		helperDoAll("m", signature, newParamInfo, newIndices, oldParamNames, newParamNames, permutation, newVisibility);
-	}	
-
-	public void testAll37()throws Exception{
-		String[] signature= {"I", "Z"};
-		String[] newNames= null;
-		String[] newTypes= null;
-		String[] newDefaultValues= null;
-		ParameterInfo[] newParamInfo= createNewParamInfos(newTypes, newNames, newDefaultValues);
-		int[] newIndices= null;
-		
-		String[] oldParamNames= {"iii", "j"};
-		String[] newParamNames= oldParamNames;
-		int[] permutation= {0, 1};
-		int newVisibility= JdtFlags.VISIBILITY_CODE_PROTECTED;
-		helperDoAll("m", signature, newParamInfo, newIndices, oldParamNames, newParamNames, permutation, newVisibility);
-	}	
-
-	public void testAll38()throws Exception{
-		String[] signature= {"I", "Z"};
-		String[] newNames= null;
-		String[] newTypes= null;
-		String[] newDefaultValues= null;
-		ParameterInfo[] newParamInfo= createNewParamInfos(newTypes, newNames, newDefaultValues);
-		int[] newIndices= null;
-		
-		String[] oldParamNames= {"iii", "j"};
-		String[] newParamNames= oldParamNames;
-		int[] permutation= {0, 1};
-		int newVisibility= JdtFlags.VISIBILITY_CODE_PROTECTED;
-		helperDoAll("m", signature, newParamInfo, newIndices, oldParamNames, newParamNames, permutation, newVisibility);
-	}	
-
-	public void testAll39()throws Exception{
-		String[] signature= {"I", "Z"};
-		String[] newNames= {"x"};
-		String[] newTypes= {"Object"};
-		String[] newDefaultValues= {"null"};
-		ParameterInfo[] newParamInfo= createNewParamInfos(newTypes, newNames, newDefaultValues);
-		int[] newIndices= {1};
-		
-		String[] oldParamNames= {"iii", "j"};
-		String[] newParamNames= {"i", "jj"};
-		int[] permutation= {2, -1, 0};
-		int newVisibility= JdtFlags.VISIBILITY_CODE_PUBLIC;
-		helperDoAll("m", signature, newParamInfo, newIndices, oldParamNames, newParamNames, permutation, newVisibility);
-	}	
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/CopyPackageChangeTest.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/CopyPackageChangeTest.java
deleted file mode 100644
index 8230cd8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/CopyPackageChangeTest.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-
-import org.eclipse.jdt.internal.corext.refactoring.changes.CopyPackageChange;
-
-public class CopyPackageChangeTest extends RefactoringTest {
-
-	private static final String REFACTORING_PATH= "CopyPackageChange/";
-	private static final Class clazz= CopyPackageChangeTest.class;
-	
-	public CopyPackageChangeTest(String name) {
-		super(name);
-	}
-	
-	protected String getRefactoringPath() {
-		return REFACTORING_PATH;
-	}
-	
-	public static Test suite() {
-		return new MySetup(new TestSuite(clazz));
-	}
-	
-	public void test0() throws Exception{
-		ICompilationUnit cu= createCU(getPackageP(), "A.java", getFileContents(getRefactoringPath() + "A.java"));
-		
-		IPackageFragmentRoot newRoot= JavaProjectHelper.addSourceContainer(MySetup.getProject(), "newName");
-		
-		String packName= getPackageP().getElementName();
-		CopyPackageChange change= new CopyPackageChange(getPackageP(), newRoot, null);
-		performChange(change);
-		IPackageFragment copied= newRoot.getPackageFragment(packName);
-		assertTrue("copied.exists()", copied.exists());
-		assertTrue(copied.getChildren().length == 1);
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractConstantTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractConstantTests.java
deleted file mode 100644
index e490373..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractConstantTests.java
+++ /dev/null
@@ -1,229 +0,0 @@
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import java.util.Hashtable;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.ISourceRange;
-import org.eclipse.jdt.core.JavaCore;
-
-import org.eclipse.jdt.ui.tests.refactoring.infra.TextRangeUtil;
-
-import org.eclipse.jdt.internal.corext.refactoring.base.RefactoringStatus;
-import org.eclipse.jdt.internal.corext.refactoring.base.RefactoringStatusCodes;
-import org.eclipse.jdt.internal.corext.refactoring.code.ExtractConstantRefactoring;
-import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
-
-public class ExtractConstantTests extends RefactoringTest {
-
-	private static final Class clazz = ExtractConstantTests.class;
-	private static final String REFACTORING_PATH = "ExtractConstant/";
-
-	private Object fCompactPref; 
-		
-	public ExtractConstantTests(String name) {
-		super(name);
-	} 
-	
-	protected String getRefactoringPath() {
-		return REFACTORING_PATH;
-	}
-	
-	public static Test suite() {
-		return new MySetup(new TestSuite(clazz));
-	}
-	
-	private String getSimpleTestFileName(boolean canInline, boolean input){
-		String fileName = "A_" + getName();
-		if (canInline)
-			fileName += input ? "_in": "_out";
-		return fileName + ".java"; 
-	}
-	
-	private String getTestFileName(boolean canExtract, boolean input){
-		String fileName= TEST_PATH_PREFIX + getRefactoringPath();
-		fileName += (canExtract ? "canExtract/": "cannotExtract/");
-		return fileName + getSimpleTestFileName(canExtract, input);
-	}
-	
-	private String getFailingTestFileName(){
-		return getTestFileName(false, false);
-	}
-	private String getPassingTestFileName(boolean input){
-		return getTestFileName(true, input);
-	}
-
-	protected ICompilationUnit createCUfromTestFile(IPackageFragment pack, boolean canExtract, boolean input) throws Exception {
-		return createCU(pack, getSimpleTestFileName(canExtract, input), getFileContents(getTestFileName(canExtract, input)));
-	}
-
-	protected void setUp() throws Exception {
-		super.setUp();
-		Hashtable options= JavaCore.getOptions();
-		fCompactPref= options.get(JavaCore.FORMATTER_COMPACT_ASSIGNMENT);
-		options.put(JavaCore.FORMATTER_COMPACT_ASSIGNMENT, JavaCore.COMPACT);
-		JavaCore.setOptions(options);
-	}
-	
-	protected void tearDown() throws Exception {
-		super.tearDown();
-		Hashtable options= JavaCore.getOptions();
-		options.put(JavaCore.FORMATTER_COMPACT_ASSIGNMENT, fCompactPref);
-		JavaCore.setOptions(options);	
-	}
-
-	private void helper1(int startLine, int startColumn, int endLine, int endColumn, boolean replaceAll, boolean allowLoadtime, String constantName, String guessedConstantName) throws Exception{
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), true, true);
-		ISourceRange selection= TextRangeUtil.getSelection(cu, startLine, startColumn, endLine, endColumn);
-		ExtractConstantRefactoring ref= new ExtractConstantRefactoring(cu, selection.getOffset(), selection.getLength(), 
-																									JavaPreferencesSettings.getCodeGenerationSettings());
-		
-		ref.setReplaceAllOccurrences(replaceAll);
-		ref.setConstantName(constantName);
-
-		RefactoringStatus result= performRefactoring(ref);
-		
-		if(!allowLoadtime)
-			assertTrue("The selected expression has been erroneously reported to contain references to non-static or non-final fields.", ref.selectionAllStaticFinal());
-		
-		assertEquals("precondition was supposed to pass", null, result);
-		assertEquals("temp name incorrectly guessed", guessedConstantName, ref.guessConstantName());
-		
-		IPackageFragment pack= (IPackageFragment)cu.getParent();
-		String newCuName= getSimpleTestFileName(true, true);
-		ICompilationUnit newcu= pack.getCompilationUnit(newCuName);
-		assertTrue(newCuName + " does not exist", newcu.exists());
-		assertEquals("incorrect extraction", getFileContents(getTestFileName(true, false)), newcu.getSource());
-	}
-	
-	private void helper1(int startLine, int startColumn, int endLine, int endColumn, boolean replaceAll, boolean allowLoadtime, String constantName) throws Exception{
-		helper1(startLine, startColumn, endLine, endColumn, replaceAll, allowLoadtime, constantName, constantName);
-	}	
-	
-	private void failHelper1(int startLine, int startColumn, int endLine, int endColumn, boolean replaceAll, boolean allowLoadtime, String constantName) throws Exception {
-		failHelper1(startLine, startColumn, endLine, endColumn, replaceAll, allowLoadtime, constantName, 0, false);	
-	}
-	private void failHelper1(int startLine, int startColumn, int endLine, int endColumn, boolean replaceAll, boolean allowLoadtime, String constantName, int errorCode, boolean checkCode) throws Exception{
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), false, true);
-		ISourceRange selection= TextRangeUtil.getSelection(cu, startLine, startColumn, endLine, endColumn);
-		ExtractConstantRefactoring ref= new ExtractConstantRefactoring(cu, selection.getOffset(), selection.getLength(), 
-																									JavaPreferencesSettings.getCodeGenerationSettings());
-		ref.setReplaceAllOccurrences(replaceAll);
-		ref.setConstantName(constantName);
-		RefactoringStatus result= performRefactoring(ref);
-		
-		if(!allowLoadtime && !ref.selectionAllStaticFinal())
-			return;
-			
-		assertNotNull("precondition was supposed to fail", result);
-		if(checkCode)
-			assertEquals(errorCode, result.getFirstEntry(RefactoringStatus.ERROR).getCode());
-	}
-
-	//--- TESTS
-	
-	public void test0() throws Exception {
-		helper1(5, 16, 5, 17, true, false, "CONSTANT");
-	}
-	
-	public void test1() throws Exception {
-		helper1(5, 16, 5, 21, false, false, "CONSTANT");	
-	}
-	
-	public void test2() throws Exception {
-		helper1(8, 16, 8, 27, false, false, "CONSTANT");
-	}
-	
-	public void test3() throws Exception {
-		helper1(8, 16, 8, 27, true, false, "CONSTANT");	
-	}
-		
-	public void test4() throws Exception {
-		helper1(5, 23, 5, 34, true, false, "CONSTANT");
-	}
-	
-	public void test5() throws Exception {
-		helper1(11, 20, 11, 26, true, true, "CONSTANT");		
-	}	
-	
-	public void test6() throws Exception {
-		helper1(13, 20, 13, 35, true, true, "CONSTANT");		
-	}
-		
-	public void test7() throws Exception {
-		helper1(12, 20, 12, 28, true, true, "CONSTANT");		
-	}
-		
-	public void test8() throws Exception {
-		helper1(8, 16, 8, 22, true, true, "CONSTANT");	
-	}
-			
-	// -- testing failing preconditions
-	public void testFail0() throws Exception{
-		failHelper1(8, 16, 8, 21, true, true, "CONSTANT");		
-	}
-	
-	public void testFail1() throws Exception{
-		failHelper1(8, 16, 8, 26 , true, true, "CONSTANT");		
-	}
-	
-	public void testFail2() throws Exception{
-		failHelper1(9, 20, 9, 21 , true, true, "CONSTANT");	
-	}
-		
-	public void testFail3() throws Exception{
-		failHelper1(9, 18, 9, 25, true, true, "CONSTANT");	
-	}
-		
-	public void testFail4() throws Exception{
-		failHelper1(6, 16, 6, 20, true, true, "CONSTANT");	
-	}
-		
-	public void testFail5() throws Exception{
-		failHelper1(9, 16, 9, 25, true, true, "CONSTANT");	
-	}
-		
-	public void testFail6() throws Exception{
-		failHelper1(11, 20, 11, 24, true, true, "CONSTANT");	
-	}
-		
-	public void testFail7() throws Exception{
-		failHelper1(11, 20, 11, 34, true, true, "CONSTANT");	
-	}
-		
-	public void testFail8() throws Exception{
-		failHelper1(9, 16, 9, 28, true, true, "CONSTANT");		
-	}
-		
-	public void testFail9() throws Exception{
-		failHelper1(10, 28, 10, 44, true, true, "CONSTANT");
-	}
-		
-	public void testFail10() throws Exception{
-		failHelper1(15, 20, 15, 37, true, false, "CONSTANT");	
-	}
-		
-	public void testFail11() throws Exception{
-		failHelper1(8, 16, 8, 22, true, false, "CONSTANT");
-	}
-	
-	public void testFail12() throws Exception{
-		failHelper1(4, 7, 4, 8, true, true, "CONSTANT", RefactoringStatusCodes.EXPRESSION_NOT_RVALUE, true);
-	}
-	
-	public void testFail13() throws Exception {
-		failHelper1(2, 9, 2, 10, true, true, "CONSTANT", RefactoringStatusCodes.EXPRESSION_NOT_RVALUE, true);	
-	}
-	
-	public void testFail14() throws Exception {
-		failHelper1(5, 9, 5, 11, true, true, "CONSTANT", RefactoringStatusCodes.EXTRANEOUS_TEXT, true);	
-	}
-	
-	public void testFail15() throws Exception {
-		failHelper1(5, 10, 5, 13, true, true, "CONSTANT", RefactoringStatusCodes.EXTRANEOUS_TEXT, true);	
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractInterfaceTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractInterfaceTests.java
deleted file mode 100644
index 6f29c77..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractInterfaceTests.java
+++ /dev/null
@@ -1,488 +0,0 @@
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IMethod;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IType;
-
-import org.eclipse.jdt.internal.corext.refactoring.base.RefactoringStatus;
-import org.eclipse.jdt.internal.corext.refactoring.structure.ExtractInterfaceRefactoring;
-import org.eclipse.jdt.internal.corext.template.Template;
-import org.eclipse.jdt.internal.corext.template.Templates;
-import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
-
-public class ExtractInterfaceTests extends RefactoringTest {
-
-	private static final Class clazz= ExtractInterfaceTests.class;
-	private static final String REFACTORING_PATH= "ExtractInterface/";
-	
-	public ExtractInterfaceTests(String name) {
-		super(name);
-	}
-	
-	public static Test suite() {
-		return new MySetup(new TestSuite(clazz));
-	}
-	
-	protected String getRefactoringPath() {
-		return REFACTORING_PATH;
-	}
-
-	protected void setUp() throws Exception {
-		super.setUp();
-		Template[] typecomments= Templates.getInstance().getTemplates("typecomment");
-		for (int i= 0; i < typecomments.length; i++) {
-			typecomments[i].setPattern("/** typecomment template*/");	
-		}
-		Template[] filecomments= Templates.getInstance().getTemplates("filecomment");
-		for (int i= 0; i < filecomments.length; i++) {
-			filecomments[i].setPattern("/** filecomment template */");	
-		}
-	}
-		
-	/******* shortcuts **********/
-	
-	private static String getTopLevelTypeName(String typeQualifiedTyperName){
-		int dotIndex= typeQualifiedTyperName.indexOf('.');
-		if (dotIndex == -1)
-			return typeQualifiedTyperName;
-		return typeQualifiedTyperName.substring(0, dotIndex);
-	}
-	
-	private IType getClassFromTestFile(IPackageFragment pack, String className) throws Exception{
-		return getType(createCUfromTestFile(pack, getTopLevelTypeName(className)), className);
-	}
-
-	private void validatePassingTest(String className, String[] cuNames, String newInterfaceName, String[] extractedNames, String[][] extractedSignatures, boolean replaceOccurrences) throws Exception {
-		IType clas= getClassFromTestFile(getPackageP(), className);
-				
-		ExtractInterfaceRefactoring ref= new ExtractInterfaceRefactoring(clas, JavaPreferencesSettings.getCodeGenerationSettings());
-		ref.setNewInterfaceName(newInterfaceName);
-		assertEquals("interface name should be accepted", RefactoringStatus.OK, ref.checkNewInterfaceName(newInterfaceName).getSeverity());
-		
-		ICompilationUnit[] cus= new ICompilationUnit[cuNames.length];
-		for (int i= 0; i < cuNames.length; i++) {
-			cus[i]= createCUfromTestFile(clas.getPackageFragment(), cuNames[i]);			
-		}
-		ref.setReplaceOccurrences(replaceOccurrences);	
-		IMethod[] extractedMethods= TestUtil.getMethods(clas, extractedNames, extractedSignatures);
-		ref.setExtractedMembers(extractedMethods);
-		assertEquals("was supposed to pass", null, performRefactoring(ref));
-
-		for (int i= 0; i < cus.length; i++) {
-			assertEquals("incorrect changes in " + cus[i].getElementName(), getFileContents(getOutputTestFileName(cuNames[i])), cus[i].getSource());
-		}
-
-		ICompilationUnit interfaceCu= clas.getPackageFragment().getCompilationUnit(newInterfaceName + ".java");
-		assertEquals("incorrect interface created", getFileContents(getOutputTestFileName(newInterfaceName)), interfaceCu.getSource());
-	}
-	
-	private void validatePassingTest(String className, String newInterfaceName, boolean extractAll, boolean replaceOccurrences) throws Exception {
-		IType clas= getClassFromTestFile(getPackageP(), className);
-		ICompilationUnit cu= clas.getCompilationUnit();
-		IPackageFragment pack= (IPackageFragment)cu.getParent();
-				
-		ExtractInterfaceRefactoring ref= new ExtractInterfaceRefactoring(clas, JavaPreferencesSettings.getCodeGenerationSettings());
-		ref.setNewInterfaceName(newInterfaceName);
-		assertEquals("interface name should be accepted", RefactoringStatus.OK, ref.checkNewInterfaceName(newInterfaceName).getSeverity());
-		
-		if (extractAll)
-			ref.setExtractedMembers(ref.getExtractableMembers());
-		ref.setReplaceOccurrences(replaceOccurrences);	
-		assertEquals("was supposed to pass", null, performRefactoring(ref));
-		assertEquals("incorrect changes in " + className, getFileContents(getOutputTestFileName(className)), cu.getSource());
-
-		ICompilationUnit interfaceCu= pack.getCompilationUnit(newInterfaceName + ".java");
-		assertEquals("incorrect interface created", getFileContents(getOutputTestFileName(newInterfaceName)), interfaceCu.getSource());
-	}
-
-	private void validateFailingTest(String className, String newInterfaceName, boolean extractAll, int expectedSeverity) throws Exception {
-		IType clas= getClassFromTestFile(getPackageP(), className);
-		ExtractInterfaceRefactoring ref= new ExtractInterfaceRefactoring(clas, JavaPreferencesSettings.getCodeGenerationSettings());
-		
-		ref.setNewInterfaceName(newInterfaceName);
-		if (extractAll)
-			ref.setExtractedMembers(ref.getExtractableMembers());
-		assertTrue("was not supposed to pass", performRefactoring(ref) != null);	
-		assertEquals("was not supposed to fail with different severity", expectedSeverity, performRefactoring(ref).getSeverity());
-	}
-
-	private void standardPassingTest() throws Exception{
-		String[] names= new String[]{"m"};
-		String[][] signatures= new String[][]{new String[0]};
-		validatePassingTest("A", new String[]{"A"}, "I", names, signatures, true);
-	}
-	//---------------tests ----------------------
-	
-	public void test0() throws Exception{
-		validatePassingTest("A", "I", true, false);
-	}
-
-	public void test1() throws Exception{
-		validatePassingTest("A", "I", true, false);
-	}
-
-	public void test2() throws Exception{
-		validatePassingTest("A", "I", true, false);
-	}
-
-	public void test3() throws Exception{
-		validatePassingTest("A", "I", true, false);
-	}
-
-	public void test4() throws Exception{
-		validatePassingTest("A", "I", true, false);
-	}
-
-	public void test5() throws Exception{
-		validatePassingTest("A", "I", true, false);
-	}
-
-	public void test6() throws Exception{
-		printTestDisabledMessage("needs Organize Import");
-//		validatePassingTest("A", "I", true, false);
-	}
-
-	public void test7() throws Exception{
-		printTestDisabledMessage("needs Organize Import");
-//		validatePassingTest("A", "I", true, false);
-	}
-
-	public void test8() throws Exception{
-		printTestDisabledMessage("needs Organize Import");
-//		validatePassingTest("A", "I", true, false);
-	}
-
-	public void test9() throws Exception{
-		validatePassingTest("A", "I", true, false);
-	}
-
-	public void test10() throws Exception{
-		validatePassingTest("A", "I", true, false);
-	}
-
-	public void test11() throws Exception{
-		validatePassingTest("A", "I", true, false);
-	}
-
-	public void test12() throws Exception{
-		validatePassingTest("A", "I", true, true);
-	}
-
-	public void test13() throws Exception{
-		validatePassingTest("A", "I", true, true);
-	}
-
-	public void test14() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test15() throws Exception{
-		String[] names= new String[]{"m", "m1"};
-		String[][] signatures= new String[][]{new String[0], new String[0]};
-		validatePassingTest("A", new String[]{"A"}, "I", names, signatures, true);
-	}
-
-	public void test16() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test17() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test18() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test19() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test20() throws Exception{
-		String[] names= new String[]{"m", "m1"};
-		String[][] signatures= new String[][]{new String[0], new String[0]};
-		validatePassingTest("A", new String[]{"A"},"I", names, signatures, true);
-	}
-	
-	public void test21() throws Exception{
-		//disable for Exceptions
-//		validatePassingTest("A", "I", true, true);
-	}
-
-	public void test22() throws Exception{
-		validatePassingTest("A", "I", true, true);
-	}
-
-	public void test23() throws Exception{
-		validatePassingTest("A", "I", true, true);
-	}
-
-	public void test24() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test25() throws Exception{
-		validatePassingTest("A", "I", true, true);
-	}
-
-	public void test26() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test27() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test28() throws Exception{
-		printTestDisabledMessage("bug 22883");
-//		standardPassingTest();
-	}
-
-	public void test29() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test30() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test31() throws Exception{
-		standardPassingTest();
-	}
-	
-	public void test32() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test33() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test34() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test35() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test36() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test37() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test38() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test39() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test40() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test41() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test42() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test43() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test44() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test45() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test46() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test47() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test48() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test49() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test50() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test51() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test52() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test53() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test54() throws Exception{
-		String[] names= new String[]{"m"};
-		String[][] signatures= new String[][]{new String[0]};
-		validatePassingTest("A", new String[]{"A", "A1"}, "I", names, signatures, true);
-	}
-
-	public void test55() throws Exception{
-		String[] names= new String[]{"m"};
-		String[][] signatures= new String[][]{new String[0]};
-		validatePassingTest("A", new String[]{"A", "A1"}, "I", names, signatures, true);
-	}
-
-	public void test56() throws Exception{
-		String[] names= new String[]{"m"};
-		String[][] signatures= new String[][]{new String[0]};
-		validatePassingTest("A", new String[]{"A", "A1"}, "I", names, signatures, true);
-	}
-
-	public void test57() throws Exception{
-		String[] names= new String[]{"m"};
-		String[][] signatures= new String[][]{new String[0]};
-		validatePassingTest("A", new String[]{"A", "A1"}, "I", names, signatures, true);
-	}
-
-	public void test58() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test59() throws Exception{
-//		printTestDisabledMessage("bug 22946 ");
-		standardPassingTest();
-	}
-
-	public void test60() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test61() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test62() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test63() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test64() throws Exception{
-//		printTestDisabledMessage("test for 23105");
-		String[] names= new String[]{"m"};
-		String[][] signatures= new String[][]{new String[0]};
-		validatePassingTest("A", new String[]{"A", "Inter"}, "I", names, signatures, true);
-	}
-
-	public void test65() throws Exception{
-//		printTestDisabledMessage("test for 23105");
-		standardPassingTest();
-	}
-
-	public void test66() throws Exception{
-		standardPassingTest();
-	}
-
-	public void test67() throws Exception{
-//		printTestDisabledMessage("test for 23105");
-		String[] names= new String[]{"m"};
-		String[][] signatures= new String[][]{new String[0]};
-		validatePassingTest("A", new String[]{"A", "Outer", "Inter"}, "I", names, signatures, true);
-	}
-	
-	public void test68() throws Exception{
-		String[] names= new String[]{"m"};
-		String[][] signatures= new String[][]{new String[0]};
-		validatePassingTest("A", new String[]{"A", "As"}, "I", names, signatures, true);
-	}
-
-	public void test69() throws Exception{
-		String[] names= new String[]{"m"};
-		String[][] signatures= new String[][]{new String[0]};
-		validatePassingTest("A", new String[]{"A", "As"}, "I", names, signatures, true);
-	}
-
-	public void test70() throws Exception{
-		standardPassingTest();
-	}
-	
-	public void test71() throws Exception{
-		String[] names= new String[]{"m"};
-		String[][] signatures= new String[][]{new String[0]};
-		validatePassingTest("A", new String[]{"A", "As"}, "I", names, signatures, true);
-	}
-
-	public void test72() throws Exception{
-		printTestDisabledMessage("bug 23705");		
-//		String[] names= new String[]{"m"};
-//		String[][] signatures= new String[][]{new String[]{"QA;"}};
-//		validatePassingTest("A", new String[]{"A", "As"}, "I", names, signatures, true);
-	}
-
-	public void test73() throws Exception{
-//		printTestDisabledMessage("bug 23953");		
-		String[] names= new String[]{"amount"};
-		String[][] signatures= new String[][]{new String[0]};
-		validatePassingTest("A", new String[]{"A", "B", "OldInterface"}, "I", names, signatures, true);
-	}
-
-	public void test74() throws Exception{
-//		printTestDisabledMessage("bug 23953");		
-		String[] names= new String[]{"amount"};
-		String[][] signatures= new String[][]{new String[0]};
-		validatePassingTest("A", new String[]{"A", "B", "OldInterface"}, "I", names, signatures, true);
-	}
-
-	public void test75() throws Exception{
-//		printTestDisabledMessage("bug 23953");		
-		String[] names= new String[]{"amount"};
-		String[][] signatures= new String[][]{new String[0]};
-		validatePassingTest("A", new String[]{"A", "B", "C"}, "I", names, signatures, true);
-	}
-
-	public void test76() throws Exception{
-//		printTestDisabledMessage("bug 23953");		
-		String[] names= new String[]{"amount"};
-		String[][] signatures= new String[][]{new String[0]};
-		validatePassingTest("A", new String[]{"A", "B", "C"}, "I", names, signatures, true);
-	}
-
-	public void test77() throws Exception{
-		printTestDisabledMessage("bug 23699");
-//		String[] names= new String[]{"amount"};
-//		String[][] signatures= new String[][]{new String[0]};
-//		validatePassingTest("A.Inner", new String[]{"A", "B"}, "I", names, signatures, true);
-	}
-
-	public void testFail0() throws Exception{
-		validateFailingTest("A", "I", true, RefactoringStatus.FATAL);
-	}
-
-	public void testFail1() throws Exception{
-		validateFailingTest("A", "I", true, RefactoringStatus.FATAL);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractMethodTestSetup.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractMethodTestSetup.java
deleted file mode 100644
index 216bd6d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractMethodTestSetup.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import junit.extensions.TestSetup;
-import junit.framework.Test;
-
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.IWorkspaceDescription;
-import org.eclipse.core.resources.ResourcesPlugin;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-
-import org.eclipse.jdt.internal.corext.refactoring.base.Refactoring;
-
-public class ExtractMethodTestSetup extends TestSetup {
-	
-	private IJavaProject fJavaProject;
-	private IPackageFragmentRoot fRoot;
-	private static final String CONTAINER= "src";
-
-	private IPackageFragment fSelectionPackage;
-	private IPackageFragment fInvalidSelectionPackage;
-	private IPackageFragment fValidSelectionPackage;
-	private IPackageFragment fValidSelectionCheckedPackage;
-	private IPackageFragment fSemicolonPackage;
-	private IPackageFragment fTryPackage;
-	private IPackageFragment fLocalsPackage;
-	private IPackageFragment fExpressionPackage;
-	private IPackageFragment fNestedPackage;
-	private IPackageFragment fReturnPackage;
-	private IPackageFragment fBranchPackage;
-	private IPackageFragment fErrorPackage;
-	private IPackageFragment fWikiPackage;
-	
-	public ExtractMethodTestSetup(Test test) {
-		super(test);
-	}	
-	
-	public IPackageFragmentRoot getRoot() {
-		return fRoot;
-	}
-		
-	protected void setUp() throws Exception {
-		super.setUp();
-		
-		fJavaProject= JavaProjectHelper.createJavaProject("TestProject", "bin");
-		JavaProjectHelper.addRTJar(fJavaProject);
-		fRoot= JavaProjectHelper.addSourceContainer(fJavaProject, CONTAINER);
-		
-		Refactoring.getUndoManager().flush();
-		IWorkspace workspace= ResourcesPlugin.getWorkspace();
-		IWorkspaceDescription description= workspace.getDescription();
-		description.setAutoBuilding(false);
-		workspace.setDescription(description);
-		
-		fSelectionPackage= getRoot().createPackageFragment("selection", true, null);
-		fInvalidSelectionPackage= fRoot.createPackageFragment("invalidSelection", true, null);
-		fValidSelectionPackage= fRoot.createPackageFragment("validSelection", true, null);
-		fValidSelectionCheckedPackage= fRoot.createPackageFragment("validSelection_in", true, null);
-		fSemicolonPackage= getRoot().createPackageFragment("semicolon_in", true, null);
-		fTryPackage= getRoot().createPackageFragment("try_in", true, null);
-		fLocalsPackage= getRoot().createPackageFragment("locals_in", true, null);
-		fExpressionPackage= getRoot().createPackageFragment("expression_in", true, null);
-		fNestedPackage= getRoot().createPackageFragment("nested_in", true, null);
-		fReturnPackage= getRoot().createPackageFragment("return_in", true, null);
-		fBranchPackage= getRoot().createPackageFragment("branch_in", true, null);
-		fErrorPackage= getRoot().createPackageFragment("error_in", true, null);
-		fWikiPackage= getRoot().createPackageFragment("wiki_in", true, null);
-		
-		ICompilationUnit cu= fExpressionPackage.createCompilationUnit(
-			"A.java", 
-			"package expression_in; import java.io.File; class A { public File getFile() { return null; } public void useFile(File file) { } }",
-			true, null);
-			
-		cu= fExpressionPackage.createCompilationUnit(
-			"B.java", 
-			"package expression_in; import java.util.List; public class B { public List[] foo() { return null; } }",
-			true, null);
-		cu.save(null, true);
-	}
-
-	protected void tearDown() throws Exception {
-		super.tearDown();
-		RefactoringTest.performDummySearch(fJavaProject);
-		JavaProjectHelper.delete(fJavaProject);
-	}
-	
-	public IPackageFragment getExpressionPackage() {
-		return fExpressionPackage;
-	}
-	
-	public IPackageFragment getInvalidSelectionPackage() {
-		return fInvalidSelectionPackage;
-	}
-	
-	public IPackageFragment getLocalsPackage() {
-		return fLocalsPackage;
-	}
-	
-	public IPackageFragment getNestedPackage() {
-		return fNestedPackage;
-	}
-	
-	public IPackageFragment getReturnPackage() {
-		return fReturnPackage;
-	}
-	
-	public IPackageFragment getSelectionPackage() {
-		return fSelectionPackage;
-	}
-	
-	public IPackageFragment getSemicolonPackage() {
-		return fSemicolonPackage;
-	}
-	
-	public IPackageFragment getTryPackage() {
-		return fTryPackage;
-	}
-	
-	public IPackageFragment getValidSelectionPackage() {
-		return fValidSelectionPackage;
-	}
-
-	public IPackageFragment getValidSelectionCheckedPackage() {
-		return fValidSelectionCheckedPackage;
-	}
-	
-	public IPackageFragment getBranchPackage() {
-		return fBranchPackage;
-	}
-
-	public IPackageFragment getErrorPackage() {
-		return fErrorPackage;
-	}
-
-	public IPackageFragment getWikiPackage() {
-		return fWikiPackage;
-	}	
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractMethodTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractMethodTests.java
deleted file mode 100644
index a629733..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractMethodTests.java
+++ /dev/null
@@ -1,1444 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.ISourceRange;
-import org.eclipse.jdt.core.JavaModelException;
-
-import org.eclipse.jdt.ui.tests.refactoring.infra.TextRangeUtil;
-
-import org.eclipse.jdt.internal.corext.refactoring.code.ExtractMethodRefactoring;
-import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
-
-public class ExtractMethodTests extends AbstractSelectionTestCase {
-
-	private static ExtractMethodTestSetup fgTestSetup;
-	
-	public ExtractMethodTests(String name) {
-		super(name);
-	}
-	
-	public static Test suite() {
-		fgTestSetup= new ExtractMethodTestSetup(new TestSuite(ExtractMethodTests.class));
-		return fgTestSetup;
-	}
-
-	protected IPackageFragmentRoot getRoot() {
-		return fgTestSetup.getRoot();
-	}
-	
-	protected String getResourceLocation() {
-		return "ExtractMethodWorkSpace/ExtractMethodTests/";
-	}
-	
-	protected String adaptName(String name) {
-		return name + "_" + getName() + ".java";
-	}	
-	
-	protected void selectionTest(int startLine, int startColumn, int endLine, int endColumn) throws Exception{
-		ICompilationUnit unit= createCU(getSelectionPackage(), "A");
-		String source= unit.getSource();
-		int[] selection= getSelection(source);
-		ISourceRange expected= TextRangeUtil.getSelection(unit, startLine, startColumn, endLine, endColumn);
-		assertEquals(expected.getOffset(), selection[0]);
-		assertEquals(expected.getLength(), selection[1]);
-	}
-	
-	private IPackageFragment getSelectionPackage() throws JavaModelException {
-		return fgTestSetup.getSelectionPackage();
- 	}
-	
-	protected void performTest(IPackageFragment packageFragment, String id, int mode, String outputFolder) throws Exception {
-		ICompilationUnit unit= createCU(packageFragment, id);
-		String source= unit.getSource();
-		int[] selection= getSelection(source);
-		ExtractMethodRefactoring refactoring= new ExtractMethodRefactoring(
-			unit, selection[0], selection[1],
-			JavaPreferencesSettings.getCodeGenerationSettings());
-		refactoring.setMethodName("extracted");
-		refactoring.setVisibility("protected");
-		String out= null;
-		switch (mode) {
-			case COMPARE_WITH_OUTPUT:
-				out= getProofedContent(outputFolder, id);
-				break;		
-		}
-		performTest(unit, refactoring, mode, out);
-	}	
-	
-	protected void invalidSelectionTest() throws Exception {
-		performTest(fgTestSetup.getInvalidSelectionPackage(), "A", INVALID_SELECTION, null);
-	}
-	
-	protected void validSelectionTest() throws Exception {
-		performTest(fgTestSetup.getValidSelectionPackage(), "A", VALID_SELECTION, null);
-	}
-	
-	protected void validSelectionTestChecked() throws Exception {
-		performTest(fgTestSetup.getValidSelectionCheckedPackage(), "A", COMPARE_WITH_OUTPUT, "validSelection_out");
-	}
-	
-	protected void semicolonTest() throws Exception {
-		performTest(fgTestSetup.getSemicolonPackage(), "A", COMPARE_WITH_OUTPUT, "semicolon_out");
-	}
-	
-	protected void tryTest() throws Exception {
-		performTest(fgTestSetup.getTryPackage(), "A", COMPARE_WITH_OUTPUT, "try_out");
-	}
-	
-	protected void localsTest() throws Exception {
-		performTest(fgTestSetup.getLocalsPackage(), "A", COMPARE_WITH_OUTPUT, "locals_out");
-	}
-	
-	protected void expressionTest() throws Exception {
-		performTest(fgTestSetup.getExpressionPackage(), "A", COMPARE_WITH_OUTPUT, "expression_out");
-	}
-	
-	protected void nestedTest() throws Exception {
-		performTest(fgTestSetup.getNestedPackage(), "A", COMPARE_WITH_OUTPUT, "nested_out");
-	}
-	
-	protected void returnTest() throws Exception {
-		performTest(fgTestSetup.getReturnPackage(), "A", COMPARE_WITH_OUTPUT, "return_out");
-	}
-	
-	protected void branchTest() throws Exception {
-		performTest(fgTestSetup.getBranchPackage(), "A", COMPARE_WITH_OUTPUT, "branch_out");
-	}
-	
-	protected void errorTest() throws Exception {
-		performTest(fgTestSetup.getErrorPackage(), "A", COMPARE_WITH_OUTPUT, "error_out");
-	}
-	
-	protected void wikiTest() throws Exception {
-		performTest(fgTestSetup.getWikiPackage(), "A", COMPARE_WITH_OUTPUT, "wiki_out");
-	}
-	
-	//=====================================================================================
-	// Testing selections
-	//=====================================================================================
-	
-	public void test1() throws Exception {
-		selectionTest(5, 9, 5, 24);
-	}
-	
-	public void test2() throws Exception {
-		selectionTest(5, 9, 5, 19);
-	}
-	
-	public void test3() throws Exception {
-		selectionTest(5, 14, 5, 24);
-	}
-	
-	public void test4() throws Exception {
-		selectionTest(5, 14, 5, 19);
-	}
-	
-	//=====================================================================================
-	// Testing invalid selections
-	//=====================================================================================
-	
-	//---- Misc
-	
-	public void test010() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test011() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test012() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test013() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test014() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	//---- Switch / Case
-	
-	public void test020() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test021() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test022() throws Exception {
-		invalidSelectionTest();
-	}
-
-	//---- Block
-	
-	public void test030() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test031() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	//---- For
-	
-	public void test040() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test041() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test042() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test043() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test044() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test045() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test046() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test047() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test048() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	//---- While
-	
-	public void test050() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test051() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test052() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	//---- do / While
-	
-	public void test060() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test061() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test062() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test063() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	//---- switch
-	
-	public void test070() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test071() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test072() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test073() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	//---- if then else
-	
-	public void test080() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test081() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test082() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test083() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test084() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test085() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	//---- Break
-	
-	public void test090() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test091() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test092() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test093() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test094() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test095() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test096() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	//---- Try / catch / finally
-	
-	public void test100() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test101() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test102() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test103() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test104() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test105() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test106() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test107() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test108() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test109() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test110() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test111() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test112() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test113() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test114() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test115() throws Exception {
-		invalidSelectionTest();
-	}
-
-	//---- invalid local var selection
-	
-	public void test120() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test121() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test122() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test123() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	//---- invalid local type selection
-	
-	public void test130() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test131() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	//---- invalid return statement selection
-	
-	public void test140() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test141() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test142() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test143() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test144() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test145() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test146() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test147() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test148() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test149() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	//---- Synchronized statement
-	
-	public void test150() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test151() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test152() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test153() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test160() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test161() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	//----- local declarations
-	
-	public void test170() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test171() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test172() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test173() throws Exception {
-		invalidSelectionTest();
-	}
-
-	//---- Constructor
-	
-	public void test180() throws Exception {
-		// System.out.println(getClass().getName() + "::"+  getName() + " disabled - see bug 11853");
-		invalidSelectionTest();
-	}
-	
-	public void test181() throws Exception {
-		// System.out.println(getClass().getName() + "::"+  getName() + " disabled - see bug 11853");
-		invalidSelectionTest();
-	}
-	
-	//---- More return statement handling
-	
-	public void test190() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test191() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	public void test192() throws Exception {
-		invalidSelectionTest();
-	}
-	
-	//====================================================================================
-	// Testing valid selections
-	//=====================================================================================
-	
-	//---- Misc
-	
-	public void test200() throws Exception {
-		validSelectionTest();
-	}
-	
-	public void test201() throws Exception {
-		validSelectionTest();
-	}
-	
-	public void test202() throws Exception {
-		validSelectionTest();
-	}
-	
-	public void test203() throws Exception {
-		validSelectionTest();
-	}
-	
-	//---- Block
-	
-	public void test230() throws Exception {
-		validSelectionTest();
-	}
-	
-	public void test231() throws Exception {
-		validSelectionTest();
-	}
-	
-	public void test232() throws Exception {
-		validSelectionTest();
-	}
-	
-	public void test233() throws Exception {
-		validSelectionTest();
-	}
-	
-	public void test234() throws Exception {
-		validSelectionTest();
-	}
-	
-	public void test235() throws Exception {
-		validSelectionTest();
-	}
-	
-	//---- For statement
-	
-	public void test240() throws Exception {
-		validSelectionTest();
-	}
-	
-	public void test241() throws Exception {
-		validSelectionTest();
-	}
-	
-	public void test244() throws Exception {
-		validSelectionTest();
-	}
-	
-	public void test245() throws Exception {
-		validSelectionTest();
-	}
-	
-	public void test246() throws Exception {
-		validSelectionTest();
-	}
-	
-	public void test247() throws Exception {
-		validSelectionTest();
-	}
-			
-	public void test248() throws Exception {
-		validSelectionTest();
-	}
-			
-	public void test249() throws Exception {
-		validSelectionTest();
-	}
-			
-	//---- While statement
-	
-	public void test250() throws Exception {
-		validSelectionTest();
-	}
-	
-	public void test251() throws Exception {
-		validSelectionTest();
-	}	
-	
-	public void test252() throws Exception {
-		validSelectionTest();
-	}	
-	
-	public void test253() throws Exception {
-		validSelectionTest();
-	}
-		
-	public void test254() throws Exception {
-		validSelectionTest();
-	}
-	
-	public void test255() throws Exception {
-		validSelectionTest();
-	}
-	
-	//---- do while statement
-	
-	public void test260() throws Exception {
-		validSelectionTest();
-	}
-	
-	public void test261() throws Exception {
-		validSelectionTest();
-	}	
-		
-	public void test262() throws Exception {
-		validSelectionTest();
-	}
-	
-	public void test263() throws Exception {
-		validSelectionTest();
-	}
-	
-	//---- switch
-	
-	public void test270() throws Exception {
-		validSelectionTest();
-	}
-	
-	public void test271() throws Exception {
-		validSelectionTest();
-	}	
-	
-	public void test272() throws Exception {
-		validSelectionTest();
-	}	
-	
-	public void test273() throws Exception {
-		validSelectionTest();
-	}
-	
-	public void test274() throws Exception {
-		validSelectionTest();
-	}
-	
-	public void test275() throws Exception {
-		validSelectionTest();
-	}
-	
-	//---- if then else
-	
-	public void test280() throws Exception {
-		validSelectionTest();
-	}
-	
-	public void test281() throws Exception {
-		validSelectionTest();
-	}	
-	
-	public void test282() throws Exception {
-		validSelectionTest();
-	}
-	
-	public void test283() throws Exception {
-		validSelectionTest();
-	}
-	
-	public void test284() throws Exception {
-		validSelectionTest();
-	}
-	
-	public void test285() throws Exception {
-		validSelectionTest();
-	}
-	
-	//---- try / catch / finally
-	
-	public void test300() throws Exception {
-		validSelectionTest();
-	}
-	
-	public void test301() throws Exception {
-		validSelectionTest();
-	}	
-	
-	public void test302() throws Exception {
-		validSelectionTest();
-	}				
-	
-	public void test304() throws Exception {
-		validSelectionTest();
-	}				
-	
-	public void test305() throws Exception {
-		validSelectionTest();
-	}				
-	
-	public void test306() throws Exception {
-		validSelectionTest();
-	}				
-	
-	public void test307() throws Exception {
-		validSelectionTest();
-	}				
-	
-	public void test308() throws Exception {
-		validSelectionTest();
-	}				
-	
-	public void test309() throws Exception {
-		validSelectionTest();
-	}
-	
-	public void test310() throws Exception {
-		validSelectionTest();
-	}
-	
-	public void test311() throws Exception {
-		validSelectionTest();
-	}
-	
-	//---- Synchronized statement
-	
-	public void test350() throws Exception {
-		validSelectionTest();
-	}
-	
-	public void test351() throws Exception {
-		validSelectionTest();
-	}
-	
-	public void test352() throws Exception {
-		validSelectionTest();
-	}
-	
-	public void test353() throws Exception {
-		validSelectionTest();
-	}
-	
-	public void test360() throws Exception {
-		validSelectionTestChecked();
-	}
-	
-	public void test361() throws Exception {
-		validSelectionTestChecked();
-	}
-	
-	public void test362() throws Exception {
-		validSelectionTestChecked();
-	}
-	
-	public void test363() throws Exception {
-		validSelectionTestChecked();
-	}
-	
-	public void test364() throws Exception {
-		validSelectionTestChecked();
-	}
-	
-	public void test365() throws Exception {
-		validSelectionTestChecked();
-	}
-	
-	//====================================================================================
-	// Testing Extracted result
-	//====================================================================================
-
-	//---- Test semicolon
-	
-	public void test400() throws Exception {
-		semicolonTest();
-	}
-	
-	public void test401() throws Exception {
-		semicolonTest();
-	}
-	
-	public void test402() throws Exception {
-		semicolonTest();
-	}
-	
-	public void test403() throws Exception {
-		semicolonTest();
-	}	
-	
-	public void test404() throws Exception {
-		semicolonTest();
-	}	
-	
-	public void test406() throws Exception {
-		semicolonTest();
-	}	
-	
-	public void test407() throws Exception {
-		semicolonTest();
-	}	
-	
-	public void test409() throws Exception {
-		semicolonTest();
-	}	
-	
-	//---- Test Try / catch block
-
-	public void test450() throws Exception {
-		tryTest();
-	}
-	
-	public void test451() throws Exception {
-		tryTest();
-	}
-	
-	public void test452() throws Exception {
-		tryTest();
-	}
-	
-	public void test453() throws Exception {
-		tryTest();
-	}
-	
-	public void test454() throws Exception {
-		tryTest();
-	}
-	
-	public void test455() throws Exception {
-		tryTest();
-	}
-	
-	public void test456() throws Exception {
-		tryTest();
-	}
-	
-	public void test457() throws Exception {
-		tryTest();
-	}
-	
-	public void test458() throws Exception {
-		tryTest();
-	}
-	
-	public void test459() throws Exception {
-		tryTest();
-	}
-	
-	public void test460() throws Exception {
-		tryTest();
-	}
-	
-	public void test461() throws Exception {
-		tryTest();
-	}
-	
-	public void test462() throws Exception {
-		tryTest();
-	}
-	
-	//---- Test local vars and types
-	
-	public void test500() throws Exception {
-		localsTest();
-	}
-	
-	public void test501() throws Exception {
-		localsTest();
-	}
-	
-	public void test502() throws Exception {
-		localsTest();
-	}
-	
-	public void test503() throws Exception {
-		localsTest();
-	}
-	
-	public void test504() throws Exception {
-		localsTest();
-	}
-	
-	public void test505() throws Exception {
-		localsTest();
-	}
-	
-	public void test506() throws Exception {
-		localsTest();
-	}
-	
-	public void test507() throws Exception {
-		localsTest();
-	}
-	
-	public void test508() throws Exception {
-		localsTest();
-	}
-	
-	public void test509() throws Exception {
-		localsTest();
-	}
-	
-	public void test510() throws Exception {
-		localsTest();
-	}
-	
-	public void test511() throws Exception {
-		localsTest();
-	}
-		
-	public void test512() throws Exception {
-		localsTest();
-	}
-	
-	public void test513() throws Exception {
-		localsTest();
-	}
-	
-	public void test514() throws Exception {
-		localsTest();
-	}
-	
-	public void test515() throws Exception {
-		localsTest();
-	}
-	
-	public void test516() throws Exception {
-		localsTest();
-	}
-	
-	public void test517() throws Exception {
-		localsTest();
-	}
-	
-	public void test518() throws Exception {
-		localsTest();
-	}
-	
-	public void test519() throws Exception {
-		localsTest();
-	}
-	
-	public void test520() throws Exception {
-		localsTest();
-	}
-	
-	public void test521() throws Exception {
-		localsTest();
-	}
-	
-	public void test522() throws Exception {
-		localsTest();
-	}
-	
-	public void test523() throws Exception {
-		localsTest();
-	}
-	
-	public void test524() throws Exception {
-		localsTest();
-	}
-	
-	public void test525() throws Exception {
-		localsTest();
-	}
-	
-	public void test526() throws Exception {
-		localsTest();
-	}
-	
-	public void test527() throws Exception {
-		localsTest();
-	}
-	
-	public void test528() throws Exception {
-		localsTest();
-	}
-	
-	public void test530() throws Exception {
-		localsTest();
-	}
-	
-	public void test531() throws Exception {
-		localsTest();
-	}
-	
-	public void test532() throws Exception {
-		localsTest();
-	}
-	
-	public void test533() throws Exception {
-		localsTest();
-	}
-	
-	public void test534() throws Exception {
-		localsTest();
-	}
-	
-	public void test535() throws Exception {
-		localsTest();
-	}
-	
-	public void test536() throws Exception {
-		localsTest();
-	}
-	
-	public void test537() throws Exception {
-		localsTest();
-	}
-	
-	public void test538() throws Exception {
-		localsTest();
-	}
-	
-	public void test539() throws Exception {
-		localsTest();
-	}
-	
-	public void test540() throws Exception {
-		localsTest();
-	}
-	
-	public void test541() throws Exception {
-		localsTest();
-	}
-	
-	public void test542() throws Exception {
-		localsTest();
-	}
-	
-	public void test543() throws Exception {
-		localsTest();
-	}
-	
-	public void test550() throws Exception {
-		localsTest();
-	}
-	
-	public void test551() throws Exception {
-		localsTest();
-	}
-	
-	public void test552() throws Exception {
-		localsTest();
-	}
-	
-	public void test553() throws Exception {
-		localsTest();
-	}
-	
-	public void test554() throws Exception {
-		localsTest();
-	}
-	
-	public void test555() throws Exception {
-		localsTest();
-	}
-	
-	public void test556() throws Exception {
-		localsTest();
-	}
-	
-	public void test557() throws Exception {
-		localsTest();
-	}
-	
-	public void test558() throws Exception {
-		localsTest();
-	}
-	
-	public void test559() throws Exception {
-		localsTest();
-	}
-	
-	public void test560() throws Exception {
-		localsTest();
-	}
-	
-	public void test561() throws Exception {
-		localsTest();
-	}
-	
-	public void test562() throws Exception {
-		localsTest();
-	}
-	
-	public void test563() throws Exception {
-		localsTest();
-	}
-	
-	public void test564() throws Exception {
-		localsTest();
-	}
-	
-	public void test565() throws Exception {
-		localsTest();
-	}
-	
-	public void test566() throws Exception {
-		localsTest();
-	}
-	
-	public void test567() throws Exception {
-		localsTest();
-	}
-	
-	public void test568() throws Exception {
-		localsTest();
-	}
-	
-	public void test569() throws Exception {
-		localsTest();
-	}
-	
-	//---- Test expressions
-	
-	public void test600() throws Exception {
-		expressionTest();
-	}
-	
-	public void test601() throws Exception {
-		expressionTest();
-	}
-	
-	public void test602() throws Exception {
-		expressionTest();
-	}
-	
-	public void test603() throws Exception {
-		expressionTest();
-	}
-	
-	public void test604() throws Exception {
-		expressionTest();
-	}
-	
-	public void test605() throws Exception {
-		expressionTest();
-	}
-	
-	public void test606() throws Exception {
-		expressionTest();
-	}
-	
-	public void test607() throws Exception {
-		expressionTest();
-	}
-	
-	public void test608() throws Exception {
-		expressionTest();
-	}
-	
-	public void test609() throws Exception {
-		expressionTest();
-	}
-	
-	public void test610() throws Exception {
-		expressionTest();
-	}
-	
-	public void test611() throws Exception {
-		expressionTest();
-	}
-	
-	public void test612() throws Exception {
-		expressionTest();
-	}
-	
-	public void test613() throws Exception {
-		expressionTest();
-	}
-	
-	public void test614() throws Exception {
-		expressionTest();
-	}
-	
-	public void test615() throws Exception {
-		expressionTest();
-	}
-	
-	public void test616() throws Exception {
-		expressionTest();
-	}
-	
-	public void test617() throws Exception {
-		expressionTest();
-	}
-	
-	public void test618() throws Exception {
-		expressionTest();
-	}
-	
-	public void test619() throws Exception {
-		expressionTest();
-	}
-	
-	public void test620() throws Exception {
-		expressionTest();
-	}
-	
-	public void test621() throws Exception {
-		expressionTest();
-	}
-	
-	public void test622() throws Exception {
-		expressionTest();
-	}
-	
-	//---- Test nested methods and constructor
-	
-	public void test650() throws Exception {
-		nestedTest();
-	}
-	
-	public void test651() throws Exception {
-		nestedTest();
-	}
-	
-	public void test652() throws Exception {
-		nestedTest();
-	}
-
-	public void test653() throws Exception {
-		nestedTest();
-	}
-	
-	public void test654() throws Exception {
-		nestedTest();
-	}
-	
-	//---- Extracting method containing a return statement.
-	
-	public void test700() throws Exception {
-		returnTest();
-	}	
-	
-	public void test701() throws Exception {
-		returnTest();
-	}	
-	
-	public void test702() throws Exception {
-		returnTest();
-	}	
-	
-	public void test703() throws Exception {
-		returnTest();
-	}	
-	
-	public void test704() throws Exception {
-		returnTest();
-	}	
-	
-	public void test705() throws Exception {
-		returnTest();
-	}	
-	
-	public void test706() throws Exception {
-		returnTest();
-	}	
-	
-	public void test707() throws Exception {
-		returnTest();
-	}
-		
-	public void test708() throws Exception {
-		returnTest();
-	}	
-	
-	public void test709() throws Exception {
-		returnTest();
-	}	
-	
-	public void test710() throws Exception {
-		returnTest();
-	}	
-	
-	public void test711() throws Exception {
-		returnTest();
-	}	
-	
-	public void test712() throws Exception {
-		returnTest();
-	}	
-	
-	public void test713() throws Exception {
-		returnTest();
-	}	
-	
-	public void test714() throws Exception {
-		returnTest();
-	}	
-	
-	public void test715() throws Exception {
-		returnTest();
-	}	
-	
-	public void test716() throws Exception {
-		returnTest();
-	}	
-	
-	public void test717() throws Exception {
-		returnTest();
-	}	
-	
-	public void test718() throws Exception {
-		returnTest();
-	}	
-	
-	public void test719() throws Exception {
-		returnTest();
-	}
-	
-	public void test720() throws Exception {
-		returnTest();
-	}
-	
-	public void test721() throws Exception {
-		returnTest();
-	}
-	
-	public void test722() throws Exception {
-		returnTest();
-	}
-	
-	public void test723() throws Exception {
-		returnTest();
-	}
-	
-	public void test724() throws Exception {
-		returnTest();
-	}
-	
-	public void test725() throws Exception {
-		returnTest();
-	}
-	
-	public void test726() throws Exception {
-		returnTest();
-	}
-	
-	//---- Branch statements
-	
-	public void test750() throws Exception {
-		branchTest();
-	}
-	
-	public void test751() throws Exception {
-		branchTest();
-	}
-	
-	public void test752() throws Exception {
-		branchTest();
-	}
-	
-	public void test753() throws Exception {
-		branchTest();
-	}
-	
-	public void test754() throws Exception {
-		branchTest();
-	}
-	
-	public void test755() throws Exception {
-		branchTest();
-	}
-	
-	//---- Test for CUs with compiler errors
-	
-	public void test800() throws Exception {
-		errorTest();
-	}
-	
-	public void test801() throws Exception {
-		errorTest();
-	}
-	
-	public void test802() throws Exception {
-		errorTest();
-	}
-	
-	//---- Test copied from http://c2.com/cgi/wiki?RefactoringBenchmarksForExtractMethod
-	
-	public void test2001() throws Exception {
-		wikiTest();
-	}	
-	
-	public void test2002() throws Exception {
-		wikiTest();
-	}	
-	
-	public void test2003() throws Exception {
-		wikiTest();
-	}	
-	
-	public void test2004() throws Exception {
-		wikiTest();
-	}	
-	
-	public void test2005() throws Exception {
-		wikiTest();
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractTempTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractTempTests.java
deleted file mode 100644
index cd1a6dc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractTempTests.java
+++ /dev/null
@@ -1,476 +0,0 @@
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import java.util.Hashtable;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.ISourceRange;
-import org.eclipse.jdt.core.JavaCore;
-
-import org.eclipse.jdt.ui.tests.refactoring.infra.TextRangeUtil;
-
-import org.eclipse.jdt.internal.corext.refactoring.base.RefactoringStatus;
-import org.eclipse.jdt.internal.corext.refactoring.code.ExtractTempRefactoring;
-import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
-
-public class ExtractTempTests extends RefactoringTest {
-
-	private static final Class clazz= ExtractTempTests.class;
-	private static final String REFACTORING_PATH= "ExtractTemp/";
-
-	private Object fCompactPref; 
-		
-	public ExtractTempTests(String name) {
-		super(name);
-	} 
-	
-	protected String getRefactoringPath() {
-		return REFACTORING_PATH;
-	}
-	
-	public static Test suite() {
-		return new MySetup(new TestSuite(clazz));
-	}
-	
-	private String getSimpleTestFileName(boolean canInline, boolean input){
-		String fileName = "A_" + getName();
-		if (canInline)
-			fileName += input ? "_in": "_out";
-		return fileName + ".java"; 
-	}
-	
-	private String getTestFileName(boolean canExtract, boolean input){
-		String fileName= TEST_PATH_PREFIX + getRefactoringPath();
-		fileName += (canExtract ? "canExtract/": "cannotExtract/");
-		return fileName + getSimpleTestFileName(canExtract, input);
-	}
-	
-	private String getFailingTestFileName(){
-		return getTestFileName(false, false);
-	}
-	private String getPassingTestFileName(boolean input){
-		return getTestFileName(true, input);
-	}
-
-	protected ICompilationUnit createCUfromTestFile(IPackageFragment pack, boolean canExtract, boolean input) throws Exception {
-		return createCU(pack, getSimpleTestFileName(canExtract, input), getFileContents(getTestFileName(canExtract, input)));
-	}
-
-	protected void setUp() throws Exception {
-		super.setUp();
-		Hashtable options= JavaCore.getOptions();
-		fCompactPref= options.get(JavaCore.FORMATTER_COMPACT_ASSIGNMENT);
-		options.put(JavaCore.FORMATTER_COMPACT_ASSIGNMENT, JavaCore.COMPACT);
-		JavaCore.setOptions(options);
-	}
-	
-	protected void tearDown() throws Exception {
-		super.tearDown();
-		Hashtable options= JavaCore.getOptions();
-		options.put(JavaCore.FORMATTER_COMPACT_ASSIGNMENT, fCompactPref);
-		JavaCore.setOptions(options);	
-	}
-
-	private void helper1(int startLine, int startColumn, int endLine, int endColumn, boolean replaceAll, boolean makeFinal, String tempName, String guessedTempName) throws Exception{
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), true, true);
-		ISourceRange selection= TextRangeUtil.getSelection(cu, startLine, startColumn, endLine, endColumn);
-		ExtractTempRefactoring ref= new ExtractTempRefactoring(cu, selection.getOffset(), selection.getLength(), 
-																									JavaPreferencesSettings.getCodeGenerationSettings());
-		
-		ref.setReplaceAllOccurrences(replaceAll);
-		ref.setDeclareFinal(makeFinal);
-		ref.setTempName(tempName);
-
-		RefactoringStatus result= performRefactoring(ref);
-		assertEquals("precondition was supposed to pass", null, result);
-		assertEquals("temp name incorrectly guessed", guessedTempName, ref.guessTempName());
-		
-		IPackageFragment pack= (IPackageFragment)cu.getParent();
-		String newCuName= getSimpleTestFileName(true, true);
-		ICompilationUnit newcu= pack.getCompilationUnit(newCuName);
-		assertTrue(newCuName + " does not exist", newcu.exists());
-		assertEquals("incorrect extraction", getFileContents(getTestFileName(true, false)), newcu.getSource());
-	}
-	
-	private void helper1(int startLine, int startColumn, int endLine, int endColumn, boolean replaceAll, boolean makeFinal, String tempName) throws Exception{
-		helper1(startLine, startColumn, endLine, endColumn, replaceAll, makeFinal, tempName, tempName);
-	}	
-	
-	private void failHelper1(int startLine, int startColumn, int endLine, int endColumn, boolean replaceAll, boolean makeFinal, String tempName, int expectedStatus) throws Exception{
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), false, true);
-		ISourceRange selection= TextRangeUtil.getSelection(cu, startLine, startColumn, endLine, endColumn);
-		ExtractTempRefactoring ref= new ExtractTempRefactoring(cu, selection.getOffset(), selection.getLength(), 
-																									JavaPreferencesSettings.getCodeGenerationSettings());
-		
-		ref.setReplaceAllOccurrences(replaceAll);
-		ref.setDeclareFinal(makeFinal);
-		ref.setTempName(tempName);
-		RefactoringStatus result= performRefactoring(ref);
-		assertNotNull("precondition was supposed to fail", result);
-		assertEquals("status", expectedStatus, result.getSeverity());
-	}	
-
-	//--- TESTS
-	
-	public void test0() throws Exception{
-		helper1(4, 16, 4, 17, false, false, "temp");
-	}
-	
-	public void test1() throws Exception{
-		helper1(4, 16, 4, 17, true, false, "temp");
-	}
-	
-	public void test2() throws Exception{
-		helper1(4, 16, 4, 17, true, true, "temp");
-	}
-	
-	public void test3() throws Exception{
-		helper1(4, 16, 4, 17, false, true, "temp");
-	}	
-	
-	public void test4() throws Exception{
-		helper1(4, 16, 4, 21, false, false, "temp");
-	}	
-	
-	public void test5() throws Exception{
-		helper1(4, 16, 4, 21, true, false, "temp");
-	}	
-	
-	public void test6() throws Exception{
-		helper1(4, 16, 4, 21, true, true, "temp");
-	}	
-	
-	public void test7() throws Exception{
-		helper1(4, 16, 4, 21, false, true, "temp");
-	}	
-
-	public void test8() throws Exception{
-		helper1(5, 20, 5, 25, true, false, "temp");
-	}	
-
-	public void test9() throws Exception{
-		helper1(5, 20, 5, 25, false, false, "temp");
-	}	
-
-	public void test10() throws Exception{
-		helper1(5, 20, 5, 25, true, false, "temp");
-	}	
-
-	public void test11() throws Exception{
-		helper1(5, 20, 5, 25, true, false, "temp");
-	}	
-
-	public void test12() throws Exception{
-		helper1(5, 17, 5, 22, true, false, "temp");
-	}	
-
-	public void test13() throws Exception{
-		helper1(7, 16, 7, 42, true, false, "temp");
-	}	
-
-	public void test14() throws Exception{
-		helper1(6, 15, 6, 20, false, false, "temp");
-	}	
-	
-	public void test15() throws Exception{
-		helper1(7, 23, 7, 28, false, false, "temp");
-	}	
-
-	public void test16() throws Exception{
-		helper1(7, 23, 7, 28, false, false, "temp");
-	}	
-	
-	public void test17() throws Exception{
-		helper1(5, 20, 5, 25, true, false, "temp");
-	}	
-	
-	public void test18() throws Exception{
-		helper1(6, 20, 6, 25, true, false, "temp");
-	}	
-	
-	public void test19() throws Exception{
-		helper1(5, 20, 5, 23, true, false, "temp");
-	}	
-
-//cannot do it - see testFail16
-//	public void test20() throws Exception{
-//		printTestDisabledMessage("regression test for bug#11474");
-//		helper1(5, 9, 5, 12, false, false, "temp");
-//	}	
-	
-	public void test21() throws Exception{
-		helper1(5, 16, 5, 17, false, false, "temp");
-	}	
-
-//cannot do it - see testFail17
-//	public void test22() throws Exception{
-//		printTestDisabledMessage("regression test for bug#11474");
-//		helper1(6, 13, 6, 16, false, false, "temp");
-//	}	
-
-	public void test23() throws Exception{
-		helper1(7, 17, 7, 20, false, false, "temp");
-	}		
-	
-//	public void test24() throws Exception{
-//test disabled - trainling semicolons are disallowed now
-//		//regression test for bug#8116
-//		helper1(4, 16, 4, 18, false, false, "temp");
-//	}
-	
-	public void test25() throws Exception{
-//		printTestDisabledMessage("regression test for bug#8895");
-		helper1(4, 17, 4, 22, true, false, "temp");
-	}
-	
-	public void test26() throws Exception{
-//		printTestDisabledMessage("regression test for 9905");
-		helper1(5, 19, 5, 23, true, false, "temp");
-	}
-	
-	public void test27() throws Exception{
-//		printTestDisabledMessage("regression test for 8123");
-		helper1(4, 15, 4, 19, true, false, "temp");
-	}
-	
-	public void test28() throws Exception{
-//		printTestDisabledMessage("regression test for 11026");
-		helper1(4, 16, 4, 31, true, false, "temp");
-	}
-	
-	public void test29() throws Exception{
-		helper1(4, 19, 4, 22, true, false, "temp");
-	}
-	
-	public void test30() throws Exception{
-		helper1(5, 16, 5, 20, true, false, "temp");
-	}
-
-	public void test31() throws Exception{
-		helper1(5, 16, 5, 20, true, false, "temp");
-	}
-
-	public void test32() throws Exception{
-		helper1(4, 16, 4, 22, true, false, "temp");
-	}
-	
-	public void test33() throws Exception{
-//		printTestDisabledMessage("regression test for bug#11449");
-		helper1(4, 19, 4, 33, true, false, "temp");
-	}
-
-	public void test34() throws Exception{
-//		printTestDisabledMessage("another regression test for bug#11449");
-		helper1(4, 19, 4, 46, true, false, "temp");
-	}
-
-	public void test35() throws Exception{
-//		printTestDisabledMessage("another regression test for bug#11622");
-		helper1(8, 19, 8, 28, true, false, "temp");
-	}
-
-	public void test36() throws Exception{
-//		printTestDisabledMessage("another regression test for bug#12205");
-		helper1(11, 15, 11, 25, true, false, "temp");
-	}
-
-	public void test37() throws Exception{
-//		printTestDisabledMessage("another regression test for bug#15196");
-		helper1(8, 20, 8, 25, true, false, "temp");
-	}
-
-	public void test38() throws Exception{
-//		printTestDisabledMessage("regression test for bug#17473");
-		helper1(5, 28, 5, 32, true, false, "temp1");
-	}
-
-	public void test39() throws Exception{
-//		printTestDisabledMessage("regression test for bug#20520 ");
-		helper1(4, 14, 4, 26, true, false, "temp");
-	}
-	
-	public void test40() throws Exception{
-//		printTestDisabledMessage("test for bug 21815");
-		helper1(4, 9, 4, 16, true, false, "temp");
-	}
-
-	public void test41() throws Exception{
-//		printTestDisabledMessage("test for bug 21815");
-		helper1(4, 9, 4, 36, true, false, "temp");
-	}
-
-	public void test42() throws Exception{
-//		printTestDisabledMessage("test for bug 19930");
-		helper1(5, 16, 5, 35, true, false, "temp", "length");
-	}
-
-	public void test43() throws Exception{
-//		printTestDisabledMessage("test for bug 19930");
-		helper1(5, 20, 5, 36, true, false, "temp", "fred");
-	}
-
-	public void test44() throws Exception{
-		//21939
-		helper1(5, 20, 5, 28, true, false, "temp", "fred");
-	}
-
-	public void test45() throws Exception{
-		//21939
-		helper1(4, 16, 4, 19, true, false, "temp");
-	}
-
-	public void test46() throws Exception{
-//		printTestDisabledMessage("test for bug 21815");
-		helper1(4, 9, 4, 12, true, false, "temp");
-	}
-
-	public void test47() throws Exception{
-		helper1(5, 9, 5, 12, true, false, "temp");
-	}
-
-	public void test48() throws Exception{
-//		printTestDisabledMessage("test for bug#22054");
-		helper1(4, 16, 4, 32, true, false, "temp");
-	}
-
-	public void test49() throws Exception{
-//		printTestDisabledMessage("test for bug#23282 ");
-		helper1(5, 15, 5, 19, true, false, "temp");
-	}
-
-	public void test50() throws Exception{
-//		printTestDisabledMessage("test for bug#23283 ");
-		helper1(5, 15, 5, 19, true, false, "temp");
-	}
-
-	public void test51() throws Exception{
-//		printTestDisabledMessage("test for bug#23281");
-		helper1(5, 15, 5, 18, true, false, "temp");
-	}
-	
-	// -- testing failing preconditions
-	public void testFail0() throws Exception{
-		failHelper1(5, 16, 5, 17, false, false, "temp", RefactoringStatus.ERROR);
-	}	
-
-	public void testFail1() throws Exception{
-		failHelper1(4, 9, 5, 13, false, false, "temp", RefactoringStatus.FATAL);
-	}	
-
-	public void testFail2() throws Exception{
-		failHelper1(4, 9, 4, 20, false, false, "temp", RefactoringStatus.FATAL);
-	}	
-
-	public void testFail3() throws Exception{
-		failHelper1(4, 9, 4, 20, false, false, "temp", RefactoringStatus.FATAL);
-	}	
-
-	public void testFail4() throws Exception{
-		failHelper1(5, 9, 5, 12, false, false, "temp", RefactoringStatus.FATAL);
-	}	
-	
-	public void testFail5() throws Exception{
-		failHelper1(3, 12, 3, 15, false, false, "temp", RefactoringStatus.FATAL);
-	}	
-
-	public void testFail6() throws Exception{
-		failHelper1(4, 14, 4, 19, false, false, "temp", RefactoringStatus.FATAL);
-	}	
-
-	public void testFail7() throws Exception{
-		failHelper1(4, 15, 4, 20, false, false, "temp", RefactoringStatus.FATAL);
-	}	
-
-//	public void testFail8() throws Exception{
-//		printTestDisabledMessage("removed");
-//		failHelper1(5, 16, 5, 20, false, false, "temp", RefactoringStatus.FATAL);
-//	}	
-
-	public void testFail9() throws Exception{
-		failHelper1(4, 19, 4, 23, false, false, "temp", RefactoringStatus.FATAL);
-	}	
-
-	public void testFail10() throws Exception{
-		failHelper1(4, 33, 4, 39, false, false, "temp", RefactoringStatus.FATAL);
-	}	
-
-	public void testFail11() throws Exception{
-//		printTestDisabledMessage("regression test for bug#13061");
-		failHelper1(4, 18, 4, 19, false, false, "temp", RefactoringStatus.FATAL);
-	}	
-
-	public void testFail12() throws Exception{
-		failHelper1(4, 16, 4, 29, false, false, "temp", RefactoringStatus.FATAL);
-	}	
-
-//removed
-//	public void testFail13() throws Exception{
-//		failHelper1(5, 16, 5, 20, false, false, "temp", RefactoringStatus.FATAL);
-//	}	
-
-//removed
-//	public void testFail14() throws Exception{
-//		failHelper1(4, 16, 4, 22, false, false, "temp", RefactoringStatus.FATAL);
-//	}	
-
-//removed
-//	public void testFail15() throws Exception{
-//		failHelper1(4, 19, 4, 22, false, false, "temp", RefactoringStatus.FATAL);
-//	}	
-
-//removed - allowed now (see bug 21815)
-//	public void testFail16() throws Exception{
-//		failHelper1(5, 9, 5, 12, false, false, "temp", RefactoringStatus.FATAL);
-//	}	
-//
-//	public void testFail17() throws Exception{
-//		failHelper1(6, 13, 6, 16, false, false, "temp", RefactoringStatus.FATAL);
-//	}	
-
-	public void testFail18() throws Exception{
-//		printTestDisabledMessage("regression test for bug#8149");
-		failHelper1(4, 27, 4, 28, false, false, "temp", RefactoringStatus.FATAL);
-	}	
-
-	public void testFail19() throws Exception{
-		printTestDisabledMessage("regression test for bug#8149");
-//		failHelper1(6, 16, 6, 18, false, false, "temp", RefactoringStatus.FATAL);
-	}	
-
-	public void testFail20() throws Exception{
-//		printTestDisabledMessage("regression test for bug#13249");
-		failHelper1(3, 9, 3, 41, false, false, "temp", RefactoringStatus.FATAL);
-	}	
-	
-	public void testFail21() throws Exception{
-		//test for bug 19851
-		failHelper1(6, 9, 6, 24, false, false, "temp", RefactoringStatus.FATAL);
-	}	
-
-	public void testFail22() throws Exception{
-//		printTestDisabledMessage("test for bug 21815");
-		failHelper1(5, 9, 5, 12, false, false, "temp", RefactoringStatus.FATAL);
-	}	
-	
-	public void testFail23() throws Exception{
-//		printTestDisabledMessage("test for bug 24265");
-		failHelper1(4, 13, 4, 14, false, false, "temp", RefactoringStatus.FATAL);
-	}	
-
-	public void testFail24() throws Exception{
-//		printTestDisabledMessage("test for bug 24265");
-		failHelper1(4, 13, 4, 14, false, false, "temp", RefactoringStatus.FATAL);
-	}	
-
-	public void testFail25() throws Exception{
-		failHelper1(4, 16, 4, 18, false, false, "temp", RefactoringStatus.FATAL);
-	}	
-
-	public void testFail26() throws Exception{
-		failHelper1(4, 15, 4, 20, false, false, "temp", RefactoringStatus.FATAL);
-	}	
-	
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/InlineMethodTestSetup.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/InlineMethodTestSetup.java
deleted file mode 100644
index 34cbdcf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/InlineMethodTestSetup.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002 International Business Machines Corp. and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0 
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import junit.extensions.TestSetup;
-import junit.framework.Test;
-
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.IWorkspaceDescription;
-import org.eclipse.core.resources.ResourcesPlugin;
-
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-
-import org.eclipse.jdt.internal.corext.refactoring.base.Refactoring;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-
-public class InlineMethodTestSetup extends TestSetup {
-
-	private IJavaProject fJavaProject;
-	private IPackageFragmentRoot fRoot;
-	private static final String CONTAINER= "src";
-
-	private IPackageFragment fInvalid;
-	private IPackageFragment fSimple;
-	private IPackageFragment fArgument;
-	private IPackageFragment fNameConflict;
-	private IPackageFragment fCall;
-	private IPackageFragment fExpression;
-	private IPackageFragment fControlStatement;
-
-	public InlineMethodTestSetup(Test test) {
-		super(test);
-	}
-
-	public IPackageFragmentRoot getRoot() {
-		return fRoot;
-	}
-		
-	protected void setUp() throws Exception {
-		super.setUp();
-		
-		fJavaProject= JavaProjectHelper.createJavaProject("TestProject", "bin");
-		JavaProjectHelper.addRTJar(fJavaProject);
-		fRoot= JavaProjectHelper.addSourceContainer(fJavaProject, CONTAINER);
-		
-		Refactoring.getUndoManager().flush();
-		IWorkspace workspace= ResourcesPlugin.getWorkspace();
-		IWorkspaceDescription description= workspace.getDescription();
-		description.setAutoBuilding(false);
-		workspace.setDescription(description);
-		
-		fInvalid= fRoot.createPackageFragment("invalid", true, null);
-		fSimple= fRoot.createPackageFragment("simple_in", true, null);		
-		fArgument= fRoot.createPackageFragment("argument_in", true, null);
-		fNameConflict= fRoot.createPackageFragment("nameconflict_in", true, null);
-		fCall= fRoot.createPackageFragment("call_in", true, null);
-		fExpression= fRoot.createPackageFragment("expression_in", true, null);
-		fControlStatement= fRoot.createPackageFragment("controlStatement_in", true, null);
-	}
-
-	protected void tearDown() throws Exception {
-		super.tearDown();
-		RefactoringTest.performDummySearch(fJavaProject);
-		JavaProjectHelper.delete(fJavaProject);
-	}
-	
-	public IPackageFragment getInvalidPackage() {
-		return fInvalid;
-	}
-
-	public IPackageFragment getSimplePackage() {
-		return fSimple;
-	}
-
-	public IPackageFragment getArgumentPackage() {
-		return fArgument;
-	}
-
-	public IPackageFragment getNameConflictPackage() {
-		return fNameConflict;
-	}
-
-	public IPackageFragment getCallPackage() {
-		return fCall;
-	}
-
-	public IPackageFragment getExpressionPackage() {
-		return fExpression;
-	}
-	
-	public IPackageFragment getControlStatementPackage() {
-		return fControlStatement;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/InlineMethodTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/InlineMethodTests.java
deleted file mode 100644
index 8109731..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/InlineMethodTests.java
+++ /dev/null
@@ -1,300 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002 International Business Machines Corp. and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0 
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.dom.ASTNode;
-import org.eclipse.jdt.core.dom.MethodInvocation;
-
-import org.eclipse.jdt.internal.corext.refactoring.code.InlineMethodRefactoring;
-import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
-
-public class InlineMethodTests extends AbstractSelectionTestCase {
-
-	private static InlineMethodTestSetup fgTestSetup;
-	
-	public InlineMethodTests(String name) {
-		super(name);
-	}
-
-	public static Test suite() {
-		fgTestSetup= new InlineMethodTestSetup(new TestSuite(InlineMethodTests.class));
-		return fgTestSetup;
-	}
-	
-	protected String getResourceLocation() {
-		return "InlineMethodWorkspace/TestCases/";
-	}
-	
-	protected String adaptName(String name) {
-		return Character.toUpperCase(name.charAt(0)) + name.substring(1) + ".java";
-	}
-	
-	protected void performTest(IPackageFragment packageFragment, String id, int mode, String outputFolder) throws Exception {
-		ICompilationUnit unit= createCU(packageFragment, id);
-		String source= unit.getSource();
-		int[] selection= getSelection(source);
-		ASTNode node= InlineMethodRefactoring.getTargetNode(unit, selection[0], selection[1]);
-		InlineMethodRefactoring refactoring= new InlineMethodRefactoring(
-			unit, (MethodInvocation)node,
-			JavaPreferencesSettings.getCodeGenerationSettings());
-		refactoring.setSaveChanges(true);
-		String out= null;
-		switch (mode) {
-			case COMPARE_WITH_OUTPUT:
-				out= getProofedContent(outputFolder, id);
-				break;		
-		}
-		performTest(unit, refactoring, mode, out);
-	}
-
-	/************************ Invalid Tests ********************************/
-		
-	protected void performInvalidTest() throws Exception {
-		performTest(fgTestSetup.getInvalidPackage(), getName(), INVALID_SELECTION, null);
-	}
-	
-	public void testRecursion() throws Exception {
-		performInvalidTest();
-	}
-	
-	public void testFieldInitializer() throws Exception {
-		performInvalidTest();
-	}
-	
-	public void testInterruptedStatement() throws Exception {
-		performInvalidTest();
-	}
-	
-	public void testComplexBody() throws Exception {
-		performInvalidTest();
-	}
-	
-	public void testCompileError1() throws Exception {
-		performInvalidTest();
-	}
-	
-	public void testCompileError2() throws Exception {
-		performInvalidTest();
-	}
-	
-	public void testCompileError3() throws Exception {
-		performInvalidTest();
-	}
-	
-	/************************ Simple Tests ********************************/
-		
-	private void performSimpleTest() throws Exception {
-		performTest(fgTestSetup.getSimplePackage(), getName(), COMPARE_WITH_OUTPUT, "simple_out");
-	}
-	
-	public void testBasic1() throws Exception {
-		performSimpleTest();
-	}	
-
-	public void testBasic2() throws Exception {
-		performSimpleTest();
-	}	
-	
-	public void testEmptyBody() throws Exception {
-		performSimpleTest();
-	}	
-
-	public void testPrimitiveArray() throws Exception {
-		performSimpleTest();
-	}	
-
-	public void testTypeArray() throws Exception {
-		performSimpleTest();
-	}	
-
-	/************************ Argument Tests ********************************/
-		
-	private void performArgumentTest() throws Exception {
-		performTest(fgTestSetup.getArgumentPackage(), getName(), COMPARE_WITH_OUTPUT, "argument_out");
-	}
-	
-	public void testLocalReferenceUnused() throws Exception {
-		performArgumentTest();
-	}	
-	
-	public void testLocalReferenceRead() throws Exception {
-		performArgumentTest();
-	}	
-	
-	public void testLocalReferenceWrite() throws Exception {
-		performArgumentTest();
-	}	
-	
-	public void testLocalReferenceLoop() throws Exception {
-		performArgumentTest();
-	}	
-	
-	public void testLiteralReferenceRead() throws Exception {
-		performArgumentTest();
-	}	
-	
-	public void testLiteralReferenceWrite() throws Exception {
-		performArgumentTest();
-	}	
-	
-	public void testParameterNameUsed1() throws Exception {
-		performArgumentTest();
-	}	
-	
-	public void testParameterNameUsed2() throws Exception {
-		performArgumentTest();
-	}	
-	
-	public void testParameterNameUsed3() throws Exception {
-		performArgumentTest();
-	}	
-	
-	public void testParameterNameUsed4() throws Exception {
-		performArgumentTest();
-	}	
-	
-	public void testParameterNameUnused1() throws Exception {
-		performArgumentTest();
-	}	
-	
-	public void testParameterNameUnused2() throws Exception {
-		performArgumentTest();
-	}	
-	
-	public void testParameterNameUnused3() throws Exception {
-		performArgumentTest();
-	}
-	
-	/************************ Name Conflict Tests ********************************/
-		
-	private void performNameConflictTest() throws Exception {
-		performTest(fgTestSetup.getNameConflictPackage(), getName(), COMPARE_WITH_OUTPUT, "nameconflict_out");
-	}
-	
-	public void testSameLocal() throws Exception {
-		performNameConflictTest();
-	}
-	
-	public void testSameType() throws Exception {
-		performNameConflictTest();
-	}
-	
-	public void testSameTypeAfter() throws Exception {
-		performNameConflictTest();
-	}
-	
-	public void testSameTypeInSibling() throws Exception {
-		performNameConflictTest();
-	}
-	
-	public void testLocalInType() throws Exception {
-		performNameConflictTest();
-	}
-	
-	public void testFieldInType() throws Exception {
-		performNameConflictTest();
-	}
-
-	public void testSwitchStatement() throws Exception {
-		performNameConflictTest();
-	}
-
-	/************************ Call Tests ********************************/
-		
-	private void performCallTest() throws Exception {
-		performTest(fgTestSetup.getCallPackage(), getName(), COMPARE_WITH_OUTPUT, "call_out");
-	}
-	
-	public void testExpressionStatement() throws Exception {
-		performCallTest();
-	}
-
-	public void testExpressionStatementWithReturn() throws Exception {
-		performCallTest();
-	}
-	
-	public void testStatementWithFunction1() throws Exception {
-		performCallTest();
-	}
-	
-	public void testStatementWithFunction2() throws Exception {
-		performCallTest();
-	}
-	
-	public void testParenthesis() throws Exception {
-		performCallTest();
-	}
-	
-	/************************ Expression Tests ********************************/
-		
-	private void performExpressionTest() throws Exception {
-		performTest(fgTestSetup.getExpressionPackage(), getName(), COMPARE_WITH_OUTPUT, "expression_out");
-	}
-	
-	public void testSimpleExpression() throws Exception {
-		performExpressionTest();
-	}
-	
-	public void testSimpleExpressionWithStatements() throws Exception {
-		performExpressionTest();
-	}
-	
-	public void testSimpleBody() throws Exception {
-		performExpressionTest();
-	}
-	
-	public void testAssignment() throws Exception {
-		performExpressionTest();
-	}
-	
-	public void testReturnStatement() throws Exception {
-		performExpressionTest();
-	}
-	
-	/************************ Control Statements Tests ********************************/
-		
-	private void performControlStatementTest() throws Exception {
-		performTest(fgTestSetup.getControlStatementPackage(), getName(), COMPARE_WITH_OUTPUT, "controlStatement_out");
-	}
-	
-	public void testForEmpty() throws Exception {
-		performControlStatementTest();
-	}
-	
-	public void testForOne() throws Exception {
-		performControlStatementTest();
-	}
-	
-	public void testForTwo() throws Exception {
-		performControlStatementTest();
-	}
-	
-	public void testIfThenTwo() throws Exception {
-		performControlStatementTest();
-	}
-	
-	public void testIfElseTwo() throws Exception {
-		performControlStatementTest();
-	}
-	
-	public void testForAssignmentOne() throws Exception {
-		performControlStatementTest();
-	}
-	
-	public void testForAssignmentTwo() throws Exception {
-		performControlStatementTest();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/InlineTempTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/InlineTempTests.java
deleted file mode 100644
index ca2b28d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/InlineTempTests.java
+++ /dev/null
@@ -1,287 +0,0 @@
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.ISourceRange;
-
-import org.eclipse.jdt.internal.corext.SourceRange;
-import org.eclipse.jdt.internal.corext.refactoring.base.RefactoringStatus;
-import org.eclipse.jdt.internal.corext.refactoring.code.InlineTempRefactoring;
-
-import org.eclipse.jdt.ui.tests.refactoring.infra.TextRangeUtil;
-
-public class InlineTempTests extends RefactoringTest {
-
-	private static final Class clazz= InlineTempTests.class;
-	private static final String REFACTORING_PATH= "InlineTemp/";
-	
-	public InlineTempTests(String name) {
-		super(name);
-	}
-	
-	protected String getRefactoringPath() {
-		return REFACTORING_PATH;
-	}
-	
-	public static Test suite() {
-		return new MySetup(new TestSuite(clazz));
-	}
-	
-	private String getSimpleTestFileName(boolean canInline, boolean input){
-		String fileName = "A_" + getName();
-		if (canInline)
-			fileName += input ? "_in": "_out";
-		return fileName + ".java"; 
-	}
-	
-	private String getTestFileName(boolean canInline, boolean input){
-		String fileName= TEST_PATH_PREFIX + getRefactoringPath();
-		fileName += (canInline ? "canInline/": "cannotInline/");
-		return fileName + getSimpleTestFileName(canInline, input);
-	}
-	
-	private String getFailingTestFileName(){
-		return getTestFileName(false, false);
-	}
-	private String getPassingTestFileName(boolean input){
-		return getTestFileName(true, input);
-	}
-
-	protected ICompilationUnit createCUfromTestFile(IPackageFragment pack, boolean canInline, boolean input) throws Exception {
-		return createCU(pack, getSimpleTestFileName(canInline, input), getFileContents(getTestFileName(canInline, input)));
-	}
-	
-	private ISourceRange getSelection(ICompilationUnit cu) throws Exception{
-		String source= cu.getSource();
-		int offset= source.indexOf(AbstractSelectionTestCase.SQUARE_BRACKET_OPEN);
-		int end= source.indexOf(AbstractSelectionTestCase.SQUARE_BRACKET_CLOSE);
-		return new SourceRange(offset, end - offset);
-	}
-	
-	private void helper1(ICompilationUnit cu, ISourceRange selection) throws Exception{
-		InlineTempRefactoring ref= new InlineTempRefactoring(cu, selection.getOffset(), selection.getLength());
-		
-		RefactoringStatus result= performRefactoring(ref);
-		assertEquals("precondition was supposed to pass", null, result);
-		
-		IPackageFragment pack= (IPackageFragment)cu.getParent();
-		String newCuName= getSimpleTestFileName(true, true);
-		ICompilationUnit newcu= pack.getCompilationUnit(newCuName);
-		assertTrue(newCuName + " does not exist", newcu.exists());
-		assertEquals("incorrect inlining", getFileContents(getTestFileName(true, false)), newcu.getSource());
-	}
-	
-	private void helper1(int startLine, int startColumn, int endLine, int endColumn) throws Exception{
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), true, true);
-		ISourceRange selection= TextRangeUtil.getSelection(cu, startLine, startColumn, endLine, endColumn);
-		helper1(cu, selection);
-	}
-	
-	private void helper1() throws Exception{
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), true, true);
-		helper1(cu, getSelection(cu));
-	}	
-	
-	private void helper2() throws Exception{
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), false, true);
-		helper2(cu, getSelection(cu));
-	}
-	
-	private void helper2(ICompilationUnit cu, ISourceRange selection) throws Exception{
-		InlineTempRefactoring ref= new InlineTempRefactoring(cu, selection.getOffset(), selection.getLength());
-		
-		RefactoringStatus result= performRefactoring(ref);
-		assertNotNull("precondition was supposed to fail", result);		
-	}
-	
-	private void helper2(int startLine, int startColumn, int endLine, int endColumn) throws Exception{
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), false, true);
-		ISourceRange selection= TextRangeUtil.getSelection(cu, startLine, startColumn, endLine, endColumn);
-		helper2(cu, selection);
-	}
-	
-	
-	//--- tests 
-	
-	public void test0() throws Exception{
-		helper1();
-	}
-
-	public void test1() throws Exception{
-		helper1();
-	}
-
-	public void test2() throws Exception{
-		helper1();
-	}
-	
-	public void test3() throws Exception{
-		helper1();
-	}
-
-	public void test4() throws Exception{
-		helper1();
-	}
-
-	public void test5() throws Exception{
-		helper1();
-	}
-
-	public void test6() throws Exception{
-		//printTestDisabledMessage("bug#6429 declaration source start incorrect on local variable");
-		helper1(9, 13, 9, 14);
-	}
-
-	public void test7() throws Exception{
-		helper1();
-	}
-	
-	public void test8() throws Exception{
-		//printTestDisabledMessage("bug#6429 declaration source start incorrect on local variable");
-		helper1(5, 13, 5, 14);
-	}
-	
-	public void test9() throws Exception{
-		helper1();
-	}
-	
-	public void test10() throws Exception{
-//		printTestDisabledMessage("regression test for bug#9001");
-		helper1(4, 21, 4, 25);
-	}
-	
-	public void test11() throws Exception{
-		helper1(5, 21, 5, 25);
-	}	
-
-	public void test12() throws Exception{
-		helper1(5, 15, 5, 19);
-	}	
-
-	public void test13() throws Exception{
-		helper1(5, 17, 5, 18);
-	}	
-	
-	public void test14() throws Exception{
-		printTestDisabledMessage("regression for bug 11664");		
-//		helper1(4, 13, 4, 14);
-	}	
-	
-	public void test15() throws Exception{
-		printTestDisabledMessage("regression for bug 11664");		
-//		helper1(4, 19, 4, 20);
-	}	
-	
-	public void test16() throws Exception{
-//		printTestDisabledMessage("regression test for 10751");		
-		helper1(5, 17, 5, 24);
-	}	
-	
-	public void test17() throws Exception{
-//		printTestDisabledMessage("regression test for 12200");		
-		helper1(8, 18, 8, 21);
-	}	
-
-	public void test18() throws Exception{
-//		printTestDisabledMessage("regression test for 12200");		
-		helper1(6, 18, 6, 21);
-	}	
-
-	public void test19() throws Exception{
-//		printTestDisabledMessage("regression test for 12212");		
-		helper1(6, 19, 6, 19);
-	}	
-
-	public void test20() throws Exception{
-//		printTestDisabledMessage("regression test for 16054");		
-		helper1(4, 17, 4, 18);
-	}	
-
-	public void test21() throws Exception{
-//		printTestDisabledMessage("regression test for 17479");		
-		helper1(6, 20, 6, 25);
-	}	
-
-	public void test22() throws Exception{
-//		printTestDisabledMessage("regression test for 18284");		
-		helper1(5, 13, 5, 17);
-	}	
-
-	public void test23() throws Exception{
-//		printTestDisabledMessage("regression test for 22938");		
-		helper1(5, 16, 5, 20);
-	}	
-
-	//------
-	
-	public void testFail0() throws Exception{
-		printTestDisabledMessage("compile errors are ok now");
-//		helper2();
-	}
-
-	public void testFail1() throws Exception{
-		helper2();
-	}
-
-	public void testFail2() throws Exception{
-		helper2();
-	}
-
-	public void testFail3() throws Exception{
-		helper2();
-	}
-
-	public void testFail4() throws Exception{
-		helper2();
-	}
-
-	public void testFail5() throws Exception{
-		helper2();
-	}
-
-	public void testFail6() throws Exception{
-		helper2();
-	}
-
-	public void testFail7() throws Exception{
-		helper2();
-	}
-
-	public void testFail8() throws Exception{
-		helper2();
-	}
-
-	public void testFail9() throws Exception{
-		//test for 16737
-		helper2(3, 9, 3, 13);
-	}
-
-	public void testFail10() throws Exception{
-		//test for 16737
-		helper2(3, 5, 3, 17);
-	}
-
-	public void testFail11() throws Exception{
-		//test for 17253
-		helper2(8, 14, 8, 18);
-	}
-	
-	public void testFail12() throws Exception{
-		//test for 19851
-		helper2(10, 16, 10, 19);
-	}
-
-	public void testFail13() throws Exception{
-//		printTestDisabledMessage("12106");
-		helper2(4, 18, 4, 19);
-	}
-
-	public void testFail14() throws Exception{
-//		printTestDisabledMessage("22632");
-		helper2(4, 8, 4, 11);
-	}
-	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MoveInnerToTopLevelTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MoveInnerToTopLevelTests.java
deleted file mode 100644
index c7fa656..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MoveInnerToTopLevelTests.java
+++ /dev/null
@@ -1,327 +0,0 @@
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import java.util.Hashtable;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.runtime.NullProgressMonitor;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.JavaModelException;
-
-import org.eclipse.jdt.internal.corext.refactoring.base.RefactoringStatus;
-import org.eclipse.jdt.internal.corext.refactoring.structure.MoveInnerToTopRefactoring;
-import org.eclipse.jdt.internal.corext.template.Template;
-import org.eclipse.jdt.internal.corext.template.Templates;
-import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
-
-public class MoveInnerToTopLevelTests extends RefactoringTest {
-
-	private static final Class clazz= MoveInnerToTopLevelTests.class;
-	private static final String REFACTORING_PATH= "MoveInnerToTopLevel/";
-
-	private Object fCompactPref;
-
-	public MoveInnerToTopLevelTests(String name) {
-		super(name);
-	}
-
-	public static Test suite() {
-		return new MySetup(new TestSuite(clazz));
-	}
-	
-	protected String getRefactoringPath() {
-		return REFACTORING_PATH;
-	}
-
-	protected void setUp() throws Exception {
-		super.setUp();
-		Template[] filecomments= Templates.getInstance().getTemplates("filecomment");
-		for (int i= 0; i < filecomments.length; i++) {
-			filecomments[i].setPattern("/** filecomment template */");	
-		}
-		Hashtable options= JavaCore.getOptions();
-		fCompactPref= options.get(JavaCore.FORMATTER_COMPACT_ASSIGNMENT);
-		options.put(JavaCore.FORMATTER_COMPACT_ASSIGNMENT, JavaCore.COMPACT);
-		JavaCore.setOptions(options);
-	}
-	
-	
-	protected void tearDown() throws Exception {
-		super.tearDown();
-		Hashtable options= JavaCore.getOptions();
-		options.put(JavaCore.FORMATTER_COMPACT_ASSIGNMENT, fCompactPref);
-		JavaCore.setOptions(options);	
-	}
-	
-
-	/******* shortcuts **********/
-	
-	private IType getClassFromTestFile(IPackageFragment pack, String className) throws Exception{
-		return getType(createCUfromTestFile(pack, className), className);
-	}
-
-	private void validatePassingTest(String parentClassName, String className, String[] cuNames, String[] packageNames, String enclosingInstanceName, boolean makeFinal) throws Exception {
-		IType parentClas= getClassFromTestFile(getPackageP(), parentClassName);
-		IType clas= parentClas.getType(className);
-				
-		MoveInnerToTopRefactoring ref= new MoveInnerToTopRefactoring(clas, JavaPreferencesSettings.getCodeGenerationSettings());
-		if (enclosingInstanceName != null){
-			ref.setEnclosingInstanceName(enclosingInstanceName);
-			assertTrue("name should be ok ", ref.checkEnclosingInstanceName(enclosingInstanceName).isOK());
-		}	
-		ref.setMarkInstanceFieldAsFinal(makeFinal);
-		ICompilationUnit[] cus= new ICompilationUnit[cuNames.length];
-		for (int i= 0; i < cuNames.length; i++) {
-			cus[i]= createCUfromTestFile(getPackage(packageNames[i]), cuNames[i]);			
-		}
-		assertEquals("precondition check was supposed to pass", null, performRefactoring(ref));
-
-		for (int i= 0; i < cus.length; i++) {
-			assertEquals("incorrect changes in " + cus[i].getElementName(), getFileContents(getOutputTestFileName(cuNames[i])), cus[i].getSource());
-		}
-
-		ICompilationUnit newCu= clas.getPackageFragment().getCompilationUnit(className + ".java");
-		assertEquals("incorrect new cu created", getFileContents(getOutputTestFileName(className)), newCu.getSource());
-	}
-	private void validatePassingTest(String parentClassName, String className, String[] cuNames, String[] packageNames, String enclosingInstanceName) throws Exception {
-		validatePassingTest(parentClassName, className, cuNames, packageNames, enclosingInstanceName, false);
-	}
-
-	private void validateFailingTest(String parentClassName, String className, String[] cuNames, String[] packageNames, String enclosingInstanceName, int expectedSeverity) throws Exception {
-		IType parentClas= getClassFromTestFile(getPackageP(), parentClassName);
-		IType clas= parentClas.getType(className);
-				
-		MoveInnerToTopRefactoring ref= new MoveInnerToTopRefactoring(clas, JavaPreferencesSettings.getCodeGenerationSettings());
-		if (enclosingInstanceName != null){
-			ref.setEnclosingInstanceName(enclosingInstanceName);
-		}	
-		ref.setMarkInstanceFieldAsFinal(false);		
-		ICompilationUnit[] cus= new ICompilationUnit[cuNames.length];
-		for (int i= 0; i < cuNames.length; i++) {
-			cus[i]= createCUfromTestFile(getPackage(packageNames[i]), cuNames[i]);			
-		}
-		RefactoringStatus result= performRefactoring(ref);
-		assertNotNull("precondition check was supposed to fail", result);
-		assertEquals("different severity expected", expectedSeverity, result.getSeverity());
-	}
-	private IPackageFragment getPackage(String name) throws JavaModelException {
-		if ("p".equals(name))
-			return getPackageP();
-		IPackageFragment pack= getRoot().getPackageFragment(name);
-		if (pack.exists())	
-			return pack;
-		return getRoot().createPackageFragment(name, false, new NullProgressMonitor());	
-	}
-
-
-	//-- tests 
-
-	public void test0() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, null);
-	}
-	
-	public void test1() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, null);
-	}
-
-	public void test2() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, null);
-	}
-
-	public void test3() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, null);
-	}
-
-	public void test4() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, null);
-	}
-
-	public void test5() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, null);
-	}
-
-	public void test6() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, null);
-	}
-	public void test7() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, null);
-	}
-
-	public void test8() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, null);
-	}
-	public void test9() throws Exception{
-		printTestDisabledMessage("removing unused imports");
-//		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, null);
-	}
-
-	public void test10() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, null);
-	}
-	public void test11() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, null);
-	}
-
-	public void test12() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, null);
-	}
-	public void test13() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, null);
-	}
-
-	public void test14() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, null);
-	}
-
-	public void test15() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A", "A1"}, new String[]{"p", "p1"}, null);
-	}
-
-	public void test16() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A", "A1"}, new String[]{"p", "p1"}, null);
-	}
-
-	public void test17() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, null);
-	}
-
-	public void test18() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A", "A1"}, new String[]{"p", "p1"}, null);
-	}
-
-	public void test19() throws Exception{
-		printTestDisabledMessage("bug 23078");
-//		validatePassingTest("A", "Inner", new String[]{"A", "A1"}, new String[]{"p", "p1"}, null);
-	}
-
-	public void test20() throws Exception{
-//		printTestDisabledMessage("bug 23077 ");
-		validatePassingTest("A", "Inner", new String[]{"A", "A1"}, new String[]{"p", "p1"}, null);
-	}
-
-	public void test21() throws Exception{
-//		printTestDisabledMessage("bug 23627");
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, null);
-	}
-	public void test22() throws Exception{
-//		printTestDisabledMessage("bug 23627");
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, null);
-	}
-
-	public void test_nonstatic_0() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, "a");
-	}
-
-	public void test_nonstatic_1() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, "a");
-	}
-	public void test_nonstatic_2() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, "a");
-	}
-	public void test_nonstatic_3() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, "a");
-	}
-	public void test_nonstatic_4() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, "a");
-	}
-	public void test_nonstatic_5() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, "a");
-	}
-	public void test_nonstatic_6() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, "a");
-	}
-	public void test_nonstatic_7() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, "a");
-	}
-	public void test_nonstatic_8() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, "a");
-	}
-	public void test_nonstatic_9() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, "a");
-	}
-	public void test_nonstatic_10() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, "a");
-	}
-	public void test_nonstatic_11() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, "a");
-	}
-	public void test_nonstatic_12() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, "a");
-	}
-	public void test_nonstatic_13() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, "a");
-	}
-	public void test_nonstatic_14() throws Exception{
-		printTestDisabledMessage("bug 23488");
-//		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, "a");
-	}
-	public void test_nonstatic_15() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, "a");
-	}
-	public void test_nonstatic_16() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, "a");
-	}
-	public void test_nonstatic_17() throws Exception{ 
-		printTestDisabledMessage("bug 23488");
-//		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, "a");
-	}
-	public void test_nonstatic_18() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, "a");
-	}
-	public void test_nonstatic_19() throws Exception{
-//		printTestDisabledMessage("bug 23464 ");
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, "a");
-	}
-	public void test_nonstatic_20() throws Exception{
-//		printTestDisabledMessage("bug 23464 ");
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, "a");
-	}
-	public void test_nonstatic_21() throws Exception{
-//		printTestDisabledMessage("must fix - consequence of fix for 23464");
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, "a");
-	}
-	public void test_nonstatic_22() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, "a");
-	}
-	public void test_nonstatic_23() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, "a");
-	}
-	public void test_nonstatic_24() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, "a");
-	}
-	public void test_nonstatic_25() throws Exception{
-//		printTestDisabledMessage("bug 23464 ");
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, "a");
-	}
-	public void test_nonstatic_26() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, "a");
-	}
-	public void test_nonstatic_27() throws Exception{
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, "a");
-	}
-	public void test_nonstatic_28() throws Exception{
-		printTestDisabledMessage("test for bug 23725");
-//		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, "a");
-	}
-	public void test_nonstatic_29() throws Exception{
-		printTestDisabledMessage("test for bug 23724");
-//		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, "a");
-	}
-	public void test_nonstatic_30() throws Exception{
-//		printTestDisabledMessage("test for bug 23715");
-		validatePassingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, "a", true);
-	}
-
-	public void testFail_nonstatic_0() throws Exception{
-		validateFailingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, "a", RefactoringStatus.ERROR);
-	}
-	public void testFail_nonstatic_1() throws Exception{
-		validateFailingTest("A", "Inner", new String[]{"A"}, new String[]{"p"}, "a", RefactoringStatus.ERROR);
-	}
-
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MoveMembersTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MoveMembersTests.java
deleted file mode 100644
index 6237772..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MoveMembersTests.java
+++ /dev/null
@@ -1,389 +0,0 @@
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IField;
-import org.eclipse.jdt.core.IMember;
-import org.eclipse.jdt.core.IMethod;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IType;
-
-import org.eclipse.jdt.internal.corext.refactoring.base.RefactoringStatus;
-import org.eclipse.jdt.internal.corext.refactoring.structure.MoveMembersRefactoring;
-import org.eclipse.jdt.internal.corext.refactoring.util.DebugUtils;
-import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
-
-public class MoveMembersTests extends RefactoringTest {
-
-	private static final Class clazz= MoveMembersTests.class;
-	
-	private static final String REFACTORING_PATH= "MoveMembers/";
-
-	public MoveMembersTests(String name) {
-		super(name);
-	}
-	
-	public static Test suite() {
-		return new MySetup(new TestSuite(clazz));
-	}
-
-	protected String getRefactoringPath() {
-		return REFACTORING_PATH;
-	}
-
-	//---
-	private static MoveMembersRefactoring createRefactoring(IMember[] members){
-		return new MoveMembersRefactoring(members, JavaPreferencesSettings.getCodeGenerationSettings());
-	}
-	
-	protected void setUp() throws Exception {
-		if (fIsVerbose)
-			DebugUtils.dump("--------- " + getName() + " ---------------");
-		super.setUp();
-	}
-	
-	private void fieldMethodHelper_passingTest(String[] fieldNames, String[] methodNames, String[][] signatures, IPackageFragment packForA, IPackageFragment packForB) throws Exception {
-		ICompilationUnit cuA= createCUfromTestFile(packForA, "A");
-		ICompilationUnit cuB= createCUfromTestFile(packForB, "B");
-		try{
-			IType typeA= getType(cuA, "A");
-			IType typeB= getType(cuB, "B");
-			IField[] fields= TestUtil.getFields(typeA, fieldNames);
-			IMethod[] methods= TestUtil.getMethods(typeA, methodNames, signatures);
-		
-			MoveMembersRefactoring ref= createRefactoring(TestUtil.merge(methods, fields));
-			IType destinationType= typeB;
-			ref.setDestinationTypeFullyQualifiedName(destinationType.getFullyQualifiedName());
-		
-			RefactoringStatus result= performRefactoring(ref);
-			assertEquals("precondition was supposed to pass", null, result);
-		
-			String expected;
-			String actual;
-		
-			expected= getFileContents(getOutputTestFileName("A"));
-			actual= cuA.getSource();
-			assertEquals("incorrect modification of  A", expected, actual);
-		
-			expected= getFileContents(getOutputTestFileName("B"));
-			actual= cuB.getSource();
-			assertEquals("incorrect modification of  B", expected, actual);
-		
-		} finally{
-			performDummySearch();
-			cuA.delete(false, null);
-			cuB.delete(false, null);
-		}	
-	}
-	
-	private void fieldMethodHelper_passingTest(String[] fieldNames, String[] methodNames, String[][] signatures) throws Exception{
-		IPackageFragment packForA= getPackageP();
-		IPackageFragment packForB= getPackageP();
-		fieldMethodHelper_passingTest(fieldNames, methodNames, signatures, packForA, packForB);
-	}
-	
-	private void fieldMethodHelper_failingTest(String[] fieldNames, 
-												String[] methodNames, String[][] signatures, 
-												int errorLevel, String destinationTypeName,
-												IPackageFragment packForA,
-												IPackageFragment packForB) throws Exception {
-		ICompilationUnit cuA= createCUfromTestFile(packForA, "A");
-		ICompilationUnit cuB= createCUfromTestFile(packForB, "B");
-		try{
-			IType typeA= getType(cuA, "A");
-			IField[] fields= TestUtil.getFields(typeA, fieldNames);
-			IMethod[] methods= TestUtil.getMethods(typeA, methodNames, signatures);
-		
-			MoveMembersRefactoring ref= createRefactoring(TestUtil.merge(methods, fields));
-			ref.setDestinationTypeFullyQualifiedName(destinationTypeName);
-		
-			RefactoringStatus result= performRefactoring(ref);
-			if (fIsVerbose)
-				DebugUtils.dump("status:" + result);
-			assertNotNull("precondition was supposed to fail", result);
-			assertEquals("precondition was supposed to fail", errorLevel, result.getSeverity());
-		
-		} finally{
-			performDummySearch();			
-			cuA.delete(false, null);
-			cuB.delete(false, null);
-		}	
-	}
-	
-	private void fieldMethodHelper_failingTest(String[] fieldNames, 
-												String[] methodNames, String[][] signatures, 
-												int errorLevel, String destinationTypeName) throws Exception {
-		IPackageFragment packForA= getPackageP();
-		IPackageFragment packForB= getPackageP();											
-		fieldMethodHelper_failingTest(fieldNames, methodNames, signatures, errorLevel, destinationTypeName, packForA, packForB);	
-	}
-	//---
-	public void test0() throws Exception{
-		fieldMethodHelper_passingTest(new String[0], new String[]{"m"}, new String[][]{new String[0]});
-	}
-
-	public void test1() throws Exception{
-		fieldMethodHelper_passingTest(new String[0], new String[]{"m"}, new String[][]{new String[0]});
-	}
-
-	public void test2() throws Exception{
-		fieldMethodHelper_passingTest(new String[0], new String[]{"m"}, new String[][]{new String[0]});
-	}
-
-	public void test3() throws Exception{
-		fieldMethodHelper_passingTest(new String[0], new String[]{"m"}, new String[][]{new String[0]});
-	}
-
-	public void test4() throws Exception{
-		fieldMethodHelper_passingTest(new String[0], new String[]{"m"}, new String[][]{new String[0]});
-	}
-
-	public void test5() throws Exception{
-		fieldMethodHelper_passingTest(new String[]{"f"}, new String[0], new String[0][0]);
-	}
-
-	public void test6() throws Exception{
-		fieldMethodHelper_passingTest(new String[]{"f"}, new String[0], new String[0][0]);
-	}
-
-	public void test7() throws Exception{
-		fieldMethodHelper_passingTest(new String[]{"f"}, new String[0], new String[0][0]);
-	}
-	
-	public void test8() throws Exception{
-		IPackageFragment packageForB= null;
-		try{
-			packageForB= getRoot().createPackageFragment("r", false, null);
-			fieldMethodHelper_passingTest(new String[]{"f"}, new String[0], new String[0][0], getPackageP(), packageForB);
-		} finally{
-			performDummySearch();
-			if (packageForB != null)
-				packageForB.delete(true, null);
-		}	
-	}
-
-	public void test9() throws Exception{
-		fieldMethodHelper_passingTest(new String[0], new String[]{"m"}, new String[][]{new String[0]});
-	}
-
-	public void test10() throws Exception{
-		fieldMethodHelper_passingTest(new String[0], new String[]{"m"}, new String[][]{new String[0]});
-	}
-
-	public void test11() throws Exception{
-		fieldMethodHelper_passingTest(new String[0], new String[]{"m"}, new String[][]{new String[0]});
-	}
-
-	public void test12() throws Exception{
-		fieldMethodHelper_passingTest(new String[0], new String[]{"m"}, new String[][]{new String[0]});
-	}
-
-	public void test13() throws Exception{
-		fieldMethodHelper_passingTest(new String[0], new String[]{"m"}, new String[][]{new String[0]});
-	}
-
-	public void test14() throws Exception{
-		fieldMethodHelper_passingTest(new String[0], new String[]{"m"}, new String[][]{new String[0]});
-	}
-
-	public void test15() throws Exception{
-		fieldMethodHelper_passingTest(new String[0], new String[]{"m"}, new String[][]{new String[0]});
-	}
-
-	public void test16() throws Exception{
-		fieldMethodHelper_passingTest(new String[0], new String[]{"m"}, new String[][]{new String[0]});
-	}
-
-	public void test17() throws Exception{
-		fieldMethodHelper_passingTest(new String[0], new String[]{"m"}, new String[][]{new String[0]});
-	}
-
-	public void test18() throws Exception{
-		fieldMethodHelper_passingTest(new String[0], new String[]{"m"}, new String[][]{new String[0]});
-	}
-
-	public void test19() throws Exception{
-		fieldMethodHelper_passingTest(new String[0], new String[]{"m"}, new String[][]{new String[0]});
-	}
-
-	public void test20() throws Exception{
-		fieldMethodHelper_passingTest(new String[0], new String[]{"m"}, new String[][]{new String[0]});
-	}
-	
-	public void test21() throws Exception{
-		printTestDisabledMessage("incorrect warning");	
-//		fieldMethodHelper_passingTest(new String[]{"F", "i"}, new String[0], new String[0][0]);
-	}
-	
-	public void test22() throws Exception{
-		printTestDisabledMessage("nasty corner case");	
-//		fieldMethodHelper_passingTest(new String[]{"i"}, new String[0], new String[0][0]);
-	}
-	
-	public void test23() throws Exception{
-		fieldMethodHelper_passingTest(new String[]{"FRED"}, new String[0], new String[0][0]);
-	}
-	
-	public void test24() throws Exception{
-		fieldMethodHelper_passingTest(new String[]{"FRED"}, new String[0], new String[0][0]);
-	}
-	
-	
-	
-	//---
-	public void testFail0() throws Exception{
-		fieldMethodHelper_failingTest(new String[0], 
-									  new String[]{"m"}, new String[][]{new String[0]}, 
-									  RefactoringStatus.FATAL, "p.B");
-	}
-	
-
-	public void testFail1() throws Exception{
-		fieldMethodHelper_failingTest(new String[0], 
-									  new String[]{"m"}, new String[][]{new String[0]}, 
-									  RefactoringStatus.ERROR, "p.B.X");
-	}
-	
-	public void testFail2() throws Exception{
-		fieldMethodHelper_failingTest(new String[0], 
-									  new String[]{"m"}, new String[][]{new String[0]}, 
-									  RefactoringStatus.ERROR, "p.B");
-	}
-
-	public void testFail3() throws Exception{
-		fieldMethodHelper_failingTest(new String[0], 
-									  new String[]{"m"}, new String[][]{new String[]{"I", "I"}}, 
-									  RefactoringStatus.ERROR, "p.B");
-	}
-
-	public void testFail4() throws Exception{
-		fieldMethodHelper_failingTest(new String[0], 
-									  new String[]{"m"}, new String[][]{new String[]{"I", "I"}}, 
-									  RefactoringStatus.WARNING, "p.B");
-	}
-	
-	public void testFail5() throws Exception{
-		fieldMethodHelper_failingTest(new String[0], 
-									  new String[]{"m"}, new String[][]{new String[]{"I", "I"}}, 
-									  RefactoringStatus.WARNING, "p.B");
-	}
-
-	public void testFail6() throws Exception{
-		fieldMethodHelper_failingTest(new String[]{"i"}, new String[0], new String[0][0], 
-									  RefactoringStatus.ERROR, "p.B");
-	}
-	
-	public void testFail7() throws Exception{
-		fieldMethodHelper_failingTest(new String[]{"i"}, new String[0], new String[0][0], 
-									  RefactoringStatus.ERROR, "p.B");
-	}
-	
-	public void testFail8() throws Exception{
-		fieldMethodHelper_failingTest(new String[]{"i"}, new String[0], new String[0][0], 
-									  RefactoringStatus.ERROR, "p.B");
-	}
-	
-	public void testFail9() throws Exception{
-		fieldMethodHelper_failingTest(new String[0], 
-									  new String[]{"m"}, new String[][]{new String[0]}, 
-									  RefactoringStatus.WARNING, "p.B");
-	}
-	
-	public void testFail10() throws Exception{
-		fieldMethodHelper_failingTest(new String[0], 
-									  new String[]{"m"}, new String[][]{new String[0]}, 
-									  RefactoringStatus.WARNING, "p.B");
-	}
-
-	public void testFail11() throws Exception{
-		fieldMethodHelper_failingTest(new String[]{"i"}, new String[0], new String[0][0],  
-									  RefactoringStatus.WARNING, "p.B");
-	}
-
-	public void testFail12() throws Exception{
-		fieldMethodHelper_failingTest(new String[]{"i"}, new String[0], new String[0][0],  
-									  RefactoringStatus.WARNING, "p.B");
-	}
-
-	public void testFail13() throws Exception{
-		fieldMethodHelper_failingTest(new String[0], 
-									  new String[]{"m"}, new String[][]{new String[0]}, 
-									  RefactoringStatus.WARNING, "p.B");
-	}
-
-	public void testFail14() throws Exception{
-		fieldMethodHelper_failingTest(new String[]{"i"}, new String[0], new String[0][0],  
-									  RefactoringStatus.WARNING, "p.B");
-	}
-
-	public void testFail15() throws Exception{
-		fieldMethodHelper_failingTest(new String[0], 
-									  new String[]{"m"}, new String[][]{new String[0]}, 
-									  RefactoringStatus.WARNING, "p.B");
-	}
-
-	public void testFail16() throws Exception{
-		IPackageFragment packageForB= null;
-		try{
-			packageForB= getRoot().createPackageFragment("r", false, null);
-			fieldMethodHelper_failingTest(new String[]{"f"}, new String[0], new String[0][0],
-										 RefactoringStatus.WARNING, "r.B", 
-										 getPackageP(), packageForB);
-		} finally{
-			performDummySearch();
-			if (packageForB != null)
-				packageForB.delete(true, null);
-		}	
-	}
-
-	public void testFail17() throws Exception{
-		fieldMethodHelper_failingTest(new String[0], 
-									  new String[]{"m"}, new String[][]{new String[0]}, 
-									  RefactoringStatus.FATAL, "java.lang.Object");
-	}
-	
-	public void testFail18() throws Exception{
-		fieldMethodHelper_failingTest(new String[0], 
-									  new String[]{"m"}, new String[][]{new String[0]}, 
-									  RefactoringStatus.FATAL, "p.DontExist");
-	}
-
-	public void testFail19() throws Exception{
-		fieldMethodHelper_failingTest(new String[0], 
-									  new String[]{"m"}, new String[][]{new String[0]}, 
-									  RefactoringStatus.FATAL, "p.B");
-	}
-	
-	public void testFail20() throws Exception{
-		fieldMethodHelper_failingTest(new String[0], 
-									  new String[]{"m"}, new String[][]{new String[0]}, 
-									  RefactoringStatus.FATAL, "p.B");
-	}
-	
-	public void testFail21() throws Exception{
-		fieldMethodHelper_failingTest(new String[0], 
-									  new String[]{"m"}, new String[][]{new String[0]}, 
-									  RefactoringStatus.FATAL, "p.B");
-	}
-
-	public void testFail22() throws Exception{
-		fieldMethodHelper_failingTest(new String[]{"i"}, 
-									  new String[0], new String[0][0], 
-									  RefactoringStatus.FATAL, "p.B");
-	}
-
-	public void testFail23() throws Exception{
-		fieldMethodHelper_failingTest(new String[]{"i"}, 
-									  new String[0], new String[0][0], 
-									  RefactoringStatus.FATAL, "p.B");
-	}
-
-	public void testFail24() throws Exception{
-		fieldMethodHelper_failingTest(new String[0], 
-									  new String[]{"m"}, new String[][]{new String[0]}, 
-									  RefactoringStatus.FATAL, "p.B");
-	}
-
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MultiMoveTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MultiMoveTests.java
deleted file mode 100644
index c3e6aad..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MultiMoveTests.java
+++ /dev/null
@@ -1,180 +0,0 @@
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.JavaModelException;
-
-import org.eclipse.jdt.internal.corext.refactoring.base.RefactoringStatus;
-import org.eclipse.jdt.internal.corext.refactoring.reorg.MoveRefactoring;
-import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
-
-public class MultiMoveTests extends RefactoringTest {
-
-	private static final Class clazz= MultiMoveTests.class;
-	private static final String REFACTORING_PATH= "MultiMove/";
-
-	public MultiMoveTests(String name) {
-		super(name);
-	}
-
-	public static Test suite() {
-		return new MySetup(new TestSuite(clazz));
-	}
-
-	protected String getRefactoringPath() {
-		return REFACTORING_PATH;
-	}
-
-	//---
-	private IPackageFragment createPackage(String name) throws Exception{
-		return getRoot().createPackageFragment(name, true, null);
-	}
-	
-	private ICompilationUnit createCu(IPackageFragment pack, String cuPath, String cuName) throws Exception{
-		return createCU(pack, cuName, getFileContents(getRefactoringPath() + cuPath));
-	}
-	
-	private void delete(IPackageFragment pack) throws Exception {
-		performDummySearch();
-		try {
-			if (pack.exists())
-				pack.delete(true, null);
-		} catch(JavaModelException e) {
-			//ignore
-		}
-	}
-	
-	
-	//--------
-	public void test0() throws Exception{		
-		final String p1Name= "p1";
-		final String inDir= "/in/";
-		final String outDir= "/out/";
-		
-		IPackageFragment packP1= createPackage(p1Name);
-		ICompilationUnit p1A= createCu(packP1, getName() + inDir + p1Name + "/A.java", "A.java");
-		ICompilationUnit p1B= createCu(packP1, getName() + inDir + p1Name + "/B.java", "B.java");
-		
-		String p2Name= "p2";
-		IPackageFragment packP2= createPackage(p2Name);
-		ICompilationUnit p2C= createCu(packP2, getName() + inDir + p2Name + "/C.java", "C.java");
-		
-		List elems= new ArrayList();
-		elems.add(p1A);
-		elems.add(p1B);
-		MoveRefactoring ref= new MoveRefactoring(elems, JavaPreferencesSettings.getCodeGenerationSettings());
-		ref.setDestination(packP2);
-		ref.setUpdateReferences(true);
-		RefactoringStatus status= performRefactoring(ref);
-		
-		//-- checks
-		assertEquals("status should be ok here", null, status);		
-		
-		assertEquals("p1 files", 0, packP1.getChildren().length);
-		assertEquals("p2 files", 3, packP2.getChildren().length);
-
-		String expectedSource= getFileContents(getRefactoringPath() + getName() + outDir + p2Name + "/A.java");
-		assertEquals("incorrect update of A", expectedSource, packP2.getCompilationUnit("A.java").getSource());		
-		
-		expectedSource= getFileContents(getRefactoringPath() + getName() + outDir + p2Name + "/B.java");
-		assertEquals("incorrect update of B", expectedSource, packP2.getCompilationUnit("B.java").getSource());
-		
-		expectedSource= getFileContents(getRefactoringPath() + getName() + outDir + p2Name + "/C.java");
-		assertEquals("incorrect update of C", expectedSource ,p2C.getSource());
-		
-		delete(packP1);
-		delete(packP2);
-	}
-
-	
-	public void test1() throws Exception{		
-		final String p1Name= "p1";
-		final String p3Name= "p3";
-		final String inDir= "/in/";
-		final String outDir= "/out/";
-		
-		IPackageFragment packP1= createPackage(p1Name);
-		IPackageFragment packP3= createPackage(p3Name);
-		ICompilationUnit p1A= createCu(packP1, getName() + inDir + p1Name + "/A.java", "A.java");
-		ICompilationUnit p3B= createCu(packP3, getName() + inDir + p3Name + "/B.java", "B.java");
-		
-		String p2Name= "p2";
-		IPackageFragment packP2= createPackage(p2Name);
-		ICompilationUnit p2C= createCu(packP2, getName() + inDir + p2Name + "/C.java", "C.java");
-		
-		List elems= new ArrayList();
-		elems.add(p1A);
-		elems.add(p3B);
-		MoveRefactoring ref= new MoveRefactoring(elems, JavaPreferencesSettings.getCodeGenerationSettings());
-		ref.setDestination(packP2);
-		ref.setUpdateReferences(true);
-		RefactoringStatus status= performRefactoring(ref);
-		
-		//-- checks
-		assertEquals("status should be ok here", null, status);		
-		
-		assertEquals("p1 files", 0, packP1.getChildren().length);
-		assertEquals("p2 files", 3, packP2.getChildren().length);
-		assertEquals("p1 files", 0, packP3.getChildren().length);
-				
-		String expectedSource= getFileContents(getRefactoringPath() + getName() + outDir + p2Name + "/A.java");
-		assertEquals("incorrect update of A", expectedSource, packP2.getCompilationUnit("A.java").getSource());
-		
-		expectedSource= getFileContents(getRefactoringPath() + getName() + outDir + p2Name + "/B.java");
-		assertEquals("incorrect update of B", expectedSource, packP2.getCompilationUnit("B.java").getSource());
-		
-		expectedSource= getFileContents(getRefactoringPath() + getName() + outDir + p2Name + "/C.java");
-		assertEquals("incorrect update of C", expectedSource ,p2C.getSource());
-		
-		delete(packP1);
-		delete(packP2);
-		delete(packP3);
-	}
-	
-	public void test2() throws Exception{
-		final String p1Name= "p1";
-		final String inDir= "/in/";
-		final String outDir= "/out/";
-		
-		IPackageFragment packP1= createPackage(p1Name);
-		ICompilationUnit p1A= createCu(packP1, getName() + inDir + p1Name + "/A.java", "A.java");
-		ICompilationUnit p1B= createCu(packP1, getName() + inDir + p1Name + "/B.java", "B.java");
-		
-		String p2Name= "p2";
-		IPackageFragment packP2= createPackage(p2Name);
-		ICompilationUnit p2C= createCu(packP2, getName() + inDir + p2Name + "/C.java", "C.java");
-		
-		List elems= new ArrayList();
-		elems.add(p1A);
-		MoveRefactoring ref= new MoveRefactoring(elems, JavaPreferencesSettings.getCodeGenerationSettings());
-		ref.setDestination(packP2);
-		ref.setUpdateReferences(true);
-		RefactoringStatus status= performRefactoring(ref);
-		
-		//-- checks
-		assertEquals("status should be ok here", null, status);		
-		
-		assertEquals("p1 files", 1, packP1.getChildren().length);
-		assertEquals("p2 files", 2, packP2.getChildren().length);
-
-		String expectedSource= getFileContents(getRefactoringPath() + getName() + outDir + p2Name + "/A.java");
-		assertEquals("incorrect update of A", expectedSource, packP2.getCompilationUnit("A.java").getSource());		
-		
-		expectedSource= getFileContents(getRefactoringPath() + getName() + outDir + p1Name + "/B.java");
-		assertEquals("incorrect update of B", expectedSource, packP1.getCompilationUnit("B.java").getSource());
-		
-		expectedSource= getFileContents(getRefactoringPath() + getName() + outDir + p2Name + "/C.java");
-		assertEquals("incorrect update of C", expectedSource, p2C.getSource());
-		
-		delete(packP1);
-		delete(packP2);
-	}
-	
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MySetup.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MySetup.java
deleted file mode 100644
index 9af3647..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MySetup.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import junit.extensions.TestSetup;
-import junit.framework.Test;
-
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-
-public class MySetup extends TestSetup {
-	
-	public MySetup(Test test) {
-		super(test);
-	}
-	public static final String CONTAINER= "src";
-	private static IPackageFragmentRoot fgRoot;
-	private static IPackageFragment fgPackageP;
-	private static IJavaProject fgJavaTestProject;
-	
-	public static IPackageFragmentRoot getDefaultSourceFolder() throws Exception {
-		if (fgRoot != null) 
-			return fgRoot;
-		throw new Exception("MySetup not initialized");
-	}
-	
-	public static IJavaProject getProject()throws Exception {
-		if (fgJavaTestProject != null)
-			return fgJavaTestProject;
-		throw new Exception("MySetup not initialized");
-	}
-	
-	public static IPackageFragment getPackageP()throws Exception {
-		if (fgPackageP != null) 
-			return fgPackageP;
-		throw new Exception("MySetup not initialized");
-	}
-	
-	protected void setUp() throws Exception {
-		super.setUp();
-		fgJavaTestProject= JavaProjectHelper.createJavaProject("TestProject", "bin");
-		JavaProjectHelper.addRTJar(fgJavaTestProject);
-		fgRoot= JavaProjectHelper.addSourceContainer(fgJavaTestProject, CONTAINER);
-		fgPackageP= fgRoot.createPackageFragment("p", true, null);
-	}
-	
-	protected void tearDown() throws Exception {
-		if (fgPackageP.exists())
-			fgPackageP.delete(true, null);
-		JavaProjectHelper.removeSourceContainer(fgJavaTestProject, CONTAINER);
-		JavaProjectHelper.delete(fgJavaTestProject);
-		super.tearDown();
-	}
-	
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/NullRefactoring.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/NullRefactoring.java
deleted file mode 100644
index 80be620..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/NullRefactoring.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-
-import org.eclipse.jdt.internal.corext.refactoring.NullChange;
-import org.eclipse.jdt.internal.corext.refactoring.base.IChange;
-import org.eclipse.jdt.internal.corext.refactoring.base.IRefactoring;
-import org.eclipse.jdt.internal.corext.refactoring.base.RefactoringStatus;
-
-
-
-/**
- * useful for tests
- */
-public class NullRefactoring implements IRefactoring {
-	
-	public IChange createChange(IProgressMonitor pm){
-		pm.beginTask("", 1);
-		pm.worked(1);
-		pm.done();
-		return new NullChange("NullRefactoring");
-	}
-
-	public RefactoringStatus checkPreconditions(IProgressMonitor pm){
-		pm.beginTask("", 1);
-		pm.worked(1);
-		pm.done();
-		return new RefactoringStatus();
-	}
-	
-	public String getName(){
-		return "Null Refactoring";
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/PathTransformationTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/PathTransformationTests.java
deleted file mode 100644
index 974d670..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/PathTransformationTests.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
-
-import org.eclipse.jdt.internal.corext.refactoring.changes.RenameResourceChange;
-
-public class PathTransformationTests extends TestCase {
-	
-	private static final Class clazz= PathTransformationTests.class;
-	public PathTransformationTests(String name) {
-		super(name);
-	}
-	
-	public static Test suite() {
-		return new MySetup(new TestSuite(clazz));
-	}
-	
-/************/	
-	private IPath createIPath(String p){
-		return Path.EMPTY.append(p);
-	}
-	
-	private void  check(String path, String oldName, String newName){
-		IPath pOld= createIPath(path + "/" + oldName);
-		String extension= "";
-		//if (oldName.lastIndexOf(".") != -1)
-		//	extension= oldName.substring(oldName.lastIndexOf("."));
-		IPath pNew= createIPath(path + "/" + newName + extension);
-		IPath newPath= RenameResourceChange.renamedResourcePath(pOld, newName);
-		
-		assertEquals(pNew.toString(), newPath.toString());
-	}
-	
-/************/
-	
-	public void test0(){
-		check("/s/p", "A.java", "B.java");
-	}
-	
-	public void test1(){
-		check("/s/p", "A.java", "A.java");
-	}		
-
-	public void test2(){
-		check("/s/p", "A.txt", "B.txt");
-	}		
-	
-	public void test3(){
-		check("/s/p", "A", "B");
-	}		
-	
-	public void test4(){
-		check("/s/p/p", "A.java", "B.java");
-	}
-	
-	public void test5(){
-		check("/s/p/p", "A.java", "A.java");
-	}		
-
-	public void test6(){
-		check("/s/p/p", "A.txt", "B.txt");
-	}		
-	
-	public void test7(){
-		check("/s", "A", "B.java");
-	}		
-	
-	public void test8(){
-		check("/s", "A.java", "B.java");
-	}
-	
-	public void test9(){
-		check("/s", "A.java", "A.java");
-	}		
-
-	public void test10(){
-		check("/s", "A.txt", "B.txt");
-	}		
-	
-	public void test11(){
-		check("/s", "A", "B");
-	}			
-	
-	public void test12(){
-		check("", "A.java", "B.java");
-	}
-	
-	public void test13(){
-		check("", "A.java", "A.java");
-	}		
-
-	public void test14(){
-		check("", "A.txt", "B.txt");
-	}		
-	
-	public void test15(){
-		check("", "A", "B");
-	}			
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/PullUpTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/PullUpTests.java
deleted file mode 100644
index 457ef6b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/PullUpTests.java
+++ /dev/null
@@ -1,470 +0,0 @@
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import java.util.Arrays;
-import java.util.List;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.runtime.NullProgressMonitor;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IField;
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IMember;
-import org.eclipse.jdt.core.IMethod;
-import org.eclipse.jdt.core.IType;
-
-import org.eclipse.jdt.internal.corext.refactoring.base.RefactoringStatus;
-import org.eclipse.jdt.internal.corext.refactoring.structure.PullUpRefactoring;
-import org.eclipse.jdt.internal.corext.refactoring.util.JavaElementUtil;
-import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
-
-public class PullUpTests extends RefactoringTest {
-
-	private static final Class clazz= PullUpTests.class;
-	
-	private static final String REFACTORING_PATH= "PullUp/";
-
-	public PullUpTests(String name) {
-		super(name);
-	}
-	
-	public static Test suite() {
-		return new MySetup(new TestSuite(clazz));
-	}
-
-	protected String getRefactoringPath() {
-		return REFACTORING_PATH;
-	}
-	
-	//-------------------
-	
-	private static PullUpRefactoring createRefactoring(IMember[] methods){
-		return new PullUpRefactoring(methods, JavaPreferencesSettings.getCodeGenerationSettings());
-	}
-	
-	private void fieldMethodHelper1(String[] fieldNames, String[] methodNames, String[][] signatures, boolean deleteAllInSourceType, boolean deleteAllMatchingMethods) throws Exception{
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), "A");
-		try{
-			IType type= getType(cu, "B");
-			IField[] fields= TestUtil.getFields(type, fieldNames);
-			IMethod[] methods= TestUtil.getMethods(type, methodNames, signatures);
-
-			PullUpRefactoring ref= createRefactoring(TestUtil.merge(methods, fields));
-
-			if (deleteAllInSourceType)
-				ref.setMethodsToDelete(methods);
-			if (deleteAllMatchingMethods)
-				ref.setMethodsToDelete(getMethods(ref.getMatchingElements(new NullProgressMonitor())));
-						
-		
-			RefactoringStatus result= performRefactoring(ref);
-			assertEquals("precondition was supposed to pass", null, result);
-			
-			String expected= getFileContents(getOutputTestFileName("A"));
-			String actual= cu.getSource();
-			assertEquals("incorrect modification", expected, actual);
-		} finally{
-			performDummySearch();
-			cu.delete(false, null);
-		}	
-	}
-
-	private void fieldHelper1(String[] fieldNames, boolean deleteAllInSourceType, boolean deleteAllMatchingFields) throws Exception{
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), "A");
-		try{
-			IType type= getType(cu, "B");
-			IField[] fields= TestUtil.getFields(type, fieldNames);
-			
-			PullUpRefactoring ref= createRefactoring(fields);
-		
-			RefactoringStatus result= performRefactoring(ref);
-			assertEquals("precondition was supposed to pass", null, result);
-			
-			String expected= getFileContents(getOutputTestFileName("A"));
-			String actual= cu.getSource();
-			assertEquals("incorrect modification", expected, actual);
-		} finally{
-			performDummySearch();
-			cu.delete(false, null);
-		}	
-	}
-	
-	private void fieldHelper2(String[] fieldNames) throws Exception{
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), "A");
-		try{
-			IType type= getType(cu, "B");
-			IField[] fields= TestUtil.getFields(type, fieldNames);
-			PullUpRefactoring ref= createRefactoring(fields);
-		
-			RefactoringStatus result= performRefactoring(ref);
-			assertTrue("precondition was supposed to fail", result != null && ! result.isOK());
-		} finally{
-			performDummySearch();
-			cu.delete(false, null);
-		}		
-	}
-	
-	private static IMethod[] getMethods(IMember[] members){
-		List l= Arrays.asList(JavaElementUtil.getElementsOfType(members, IJavaElement.METHOD));
-		return (IMethod[]) l.toArray(new IMethod[l.size()]);
-	}
-	
-	private void helper1(String[] methodNames, String[][] signatures, boolean deleteAllInSourceType, boolean deleteAllMatchingMethods) throws Exception{
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), "A");
-		try{
-			IType type= getType(cu, "B");
-			IMethod[] methods= TestUtil.getMethods(type, methodNames, signatures);
-			PullUpRefactoring ref= createRefactoring(methods);
-			if (deleteAllInSourceType)
-				ref.setMethodsToDelete(methods);
-			if (deleteAllMatchingMethods)
-				ref.setMethodsToDelete(getMethods(ref.getMatchingElements(new NullProgressMonitor())));
-		
-			RefactoringStatus result= performRefactoring(ref);
-			assertEquals("precondition was supposed to pass", null, result);
-			
-			String expected= getFileContents(getOutputTestFileName("A"));
-			String actual= cu.getSource();
-			//assertEquals("incorrect lengths", expected.length(), actual.length());
-			assertEquals("incorrect modification", expected, actual);
-		} finally{
-			performDummySearch();
-			cu.delete(false, null);
-		}	
-	}
-	
-	private void helper2(String[] methodNames, String[][] signatures, boolean deleteAllInSourceType, boolean deleteAllMatchingMethods) throws Exception{
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), "A");
-		try{
-			IType type= getType(cu, "B");
-			IMethod[] methods= TestUtil.getMethods(type, methodNames, signatures);
-			PullUpRefactoring ref= createRefactoring(methods);
-			if (deleteAllInSourceType)
-				ref.setMethodsToDelete(methods);
-			if (deleteAllMatchingMethods)
-				ref.setMethodsToDelete(getMethods(ref.getMatchingElements(new NullProgressMonitor())));
-		
-			RefactoringStatus result= performRefactoring(ref);
-			assertTrue("precondition was supposed to fail", result != null && ! result.isOK());
-		} finally{
-			performDummySearch();
-			cu.delete(false, null);
-		}		
-	}
-	
-	private void helper3(String[] methodNames, String[][] signatures, boolean deleteAllInSourceType, boolean deleteAllMatchingMethods) throws Exception {
-		ICompilationUnit cuA= createCUfromTestFile(getPackageP(), "A");
-		ICompilationUnit cuB= createCUfromTestFile(getPackageP(), "B");
-		try{
-			IType type= getType(cuB, "B");
-			IMethod[] methods= TestUtil.getMethods(type, methodNames, signatures);
-			PullUpRefactoring ref= createRefactoring(methods);
-			if (deleteAllInSourceType)
-				ref.setMethodsToDelete(methods);
-			if (deleteAllMatchingMethods)
-				ref.setMethodsToDelete(getMethods(ref.getMatchingElements(new NullProgressMonitor())));
-			
-			RefactoringStatus result= performRefactoring(ref);
-			assertTrue("precondition was supposed to fail", result != null && ! result.isOK());
-		} finally{
-			performDummySearch();
-			cuA.delete(false, null);
-			cuB.delete(false, null);
-		}				
-	}
-	
-	//------------------ tests -------------
-	
-	public void test0() throws Exception{
-		helper1(new String[]{"m"}, new String[][]{new String[0]}, true, false);
-	}
-	
-	public void test1() throws Exception{
-		helper1(new String[]{"m"}, new String[][]{new String[0]}, true, false);
-	}
-
-	public void test2() throws Exception{
-		helper1(new String[]{"mmm", "n"}, new String[][]{new String[0], new String[0]}, true, false);
-	}
-
-	public void test3() throws Exception{
-		helper1(new String[]{"mmm", "n"}, new String[][]{new String[0], new String[0]}, true, true);
-	}
-
-	public void test4() throws Exception{
-		ICompilationUnit cuA= createCUfromTestFile(getPackageP(), "A");
-		ICompilationUnit cuB= createCUfromTestFile(getPackageP(), "B");
-		
-		try{
-			String[] methodNames= new String[]{"m"};
-			String[][] signatures= new String[][]{new String[]{"QList;"}};
-			
-			IType type= getType(cuB, "B");
-			IMethod[] methods= TestUtil.getMethods(type, methodNames, signatures);
-			PullUpRefactoring ref= createRefactoring(methods);
-			ref.setMethodsToDelete(getMethods(ref.getMatchingElements(new NullProgressMonitor())));
-		
-			RefactoringStatus result= performRefactoring(ref);
-			assertEquals("precondition was supposed to pass", null, result);
-			
-			assertEquals("incorrect modification in A", getFileContents(getOutputTestFileName("A")), cuA.getSource());		
-			assertEquals("incorrect modification in B", getFileContents(getOutputTestFileName("B")), cuB.getSource());		
-		} finally{
-			performDummySearch();
-			cuA.delete(false, null);
-			cuB.delete(false, null);
-		}					
-	}
-
-	public void test5() throws Exception{
-		ICompilationUnit cuA= createCUfromTestFile(getPackageP(), "A");
-		ICompilationUnit cuB= createCUfromTestFile(getPackageP(), "B");
-		
-		try{
-			String[] methodNames= new String[]{"m"};
-			String[][] signatures= new String[][]{new String[0]};
-			
-			IType type= getType(cuB, "B");
-			IMethod[] methods= TestUtil.getMethods(type, methodNames, signatures);
-			PullUpRefactoring ref= createRefactoring(methods);
-			ref.setMethodsToDelete(getMethods(ref.getMatchingElements(new NullProgressMonitor())));
-		
-			RefactoringStatus result= performRefactoring(ref);
-			assertEquals("precondition was supposed to pass", null, result);
-			
-			assertEquals("incorrect modification in A", getFileContents(getOutputTestFileName("A")), cuA.getSource());
-			assertEquals("incorrect modification in B", getFileContents(getOutputTestFileName("B")), cuB.getSource());		
-		} finally{
-			performDummySearch();
-			cuA.delete(false, null);
-			cuB.delete(false, null);
-		}		
-	}
-
-	public void test6() throws Exception{
-		helper1(new String[]{"m"}, new String[][]{new String[0]}, true, false);
-	}
-
-	public void test7() throws Exception{
-		helper1(new String[]{"m"}, new String[][]{new String[0]}, true, false);
-	}
-	
-	public void test8() throws Exception{
-		helper1(new String[]{"m"}, new String[][]{new String[0]}, true, false);
-	}
-	
-	public void test9() throws Exception{
-		helper1(new String[]{"m"}, new String[][]{new String[0]}, true, false);
-	}
-
-	public void test10() throws Exception{
-		helper1(new String[]{"m"}, new String[][]{new String[0]}, true, false);
-	}
-	
-	public void test11() throws Exception{
-		helper1(new String[]{"m"}, new String[][]{new String[0]}, true, false);
-	}
-	
-	public void test12() throws Exception{
-		//printTestDisabledMessage("bug#6779 searchDeclarationsOfReferencedTyped - missing exception  types");
-		ICompilationUnit cuA= createCUfromTestFile(getPackageP(), "A");
-		ICompilationUnit cuB= createCUfromTestFile(getPackageP(), "B");
-
-		try{
-			String[] methodNames= new String[]{"m"};
-			String[][] signatures= new String[][]{new String[0]};
-			
-			IType type= getType(cuB, "B");
-			IMethod[] methods= TestUtil.getMethods(type, methodNames, signatures);
-			PullUpRefactoring ref= createRefactoring(methods);
-			//ref.setMethodsToDelete(ref.getMatchingMethods());
-			ref.setMethodsToDelete(getMethods(ref.getMatchingElements(new NullProgressMonitor())));
-		
-			RefactoringStatus result= performRefactoring(ref);
-			assertEquals("precondition was supposed to pass", null, result);
-			
-			assertEquals("incorrect modification in A", getFileContents(getOutputTestFileName("A")), cuA.getSource());		
-			assertEquals("incorrect modification in B", getFileContents(getOutputTestFileName("B")), cuB.getSource());		
-		} finally{
-			performDummySearch();
-			cuA.delete(false, null);
-			cuB.delete(false, null);
-		}							
-	}
-	
-	public void test13() throws Exception{
-		helper1(new String[]{"m"}, new String[][]{new String[0]}, true, false);
-	}
-	
-	public void test14() throws Exception{
-		helper1(new String[]{"m"}, new String[][]{new String[0]}, true, false);
-	}
-	
-	public void test15() throws Exception{
-		printTestDisabledMessage("must fix - incorrect error");
-//		helper1(new String[]{"m"}, new String[][]{new String[0]}, true, false);
-	}
-	
-	public void test16() throws Exception{
-		printTestDisabledMessage("must fix - incorrect error");
-//		helper1(new String[]{"m"}, new String[][]{new String[0]}, true, false);
-	}
-	
-	public void test17() throws Exception{
-		printTestDisabledMessage("must fix - incorrect error with static method access");
-//		helper1(new String[]{"m"}, new String[][]{new String[0]}, true, false);
-	}
-
-	public void test18() throws Exception{
-		printTestDisabledMessage("must fix - incorrect error with static field access");
-//		helper1(new String[]{"m"}, new String[][]{new String[0]}, true, false);
-	}
-	
-	public void test19() throws Exception{
-//		printTestDisabledMessage("bug 18438");
-//		printTestDisabledMessage("bug 23324 ");
-		helper1(new String[]{"m"}, new String[][]{new String[0]}, true, false);
-	}
-	
-	public void testFail0() throws Exception{
-//		printTestDisabledMessage("6538: searchDeclarationsOf* incorrect");
-		helper2(new String[]{"m"}, new String[][]{new String[0]}, true, false);
-	}
-	
-	public void testFail1() throws Exception{
-		printTestDisabledMessage("overloading - current limitation");
-//		helper2(new String[]{"m"}, new String[][]{new String[0]}, true, false);
-	}
-	
-	public void testFail2() throws Exception{
-//		printTestDisabledMessage("6538: searchDeclarationsOf* incorrect");
-		helper2(new String[]{"m"}, new String[][]{new String[0]}, true, false);
-	}
-
-	public void testFail3() throws Exception{
-//		printTestDisabledMessage("6538: searchDeclarationsOf* incorrect");
-		helper2(new String[]{"m"}, new String[][]{new String[0]}, true, false);
-	}
-
-	public void testFail4() throws Exception{
-//		printTestDisabledMessage("6538: searchDeclarationsOf* incorrect");
-		helper2(new String[]{"m"}, new String[][]{new String[0]}, true, false);
-	}
-
-	public void testFail5() throws Exception{
-		helper2(new String[]{"m"}, new String[][]{new String[0]}, true, false);
-	}
-	
-	public void testFail6() throws Exception{
-		String[] methodNames= new String[]{"m"};
-		String[][] signatures= new String[][]{new String[0]};
-		boolean deleteAllInSourceType= true;
-		boolean deleteAllMatchingMethods= false;
-		
-		helper3(methodNames, signatures, deleteAllInSourceType, deleteAllMatchingMethods);
-	}
-	
-	public void testFail7() throws Exception{
-		String[] methodNames= new String[]{"m"};
-		String[][] signatures= new String[][]{new String[0]};
-		boolean deleteAllInSourceType= true;
-		boolean deleteAllMatchingMethods= false;
-		helper3(methodNames, signatures, deleteAllInSourceType, deleteAllMatchingMethods);
-	}
-	
-	public void testFail8() throws Exception{
-		String[] methodNames= new String[]{"m"};
-		String[][] signatures= new String[][]{new String[0]};
-		boolean deleteAllInSourceType= true;
-		boolean deleteAllMatchingMethods= false;
-		helper3(methodNames, signatures, deleteAllInSourceType, deleteAllMatchingMethods);
-	}
-	
-	public void testFail9() throws Exception{
-		String[] methodNames= new String[]{"m"};
-		String[][] signatures= new String[][]{new String[0]};
-		boolean deleteAllInSourceType= true;
-		boolean deleteAllMatchingMethods= false;
-		helper3(methodNames, signatures, deleteAllInSourceType, deleteAllMatchingMethods);
-	}
-	
-	public void testFail10() throws Exception{
-		String[] methodNames= new String[]{"m"};
-		String[][] signatures= new String[][]{new String[0]};
-		boolean deleteAllInSourceType= true;
-		boolean deleteAllMatchingMethods= false;
-		helper3(methodNames, signatures, deleteAllInSourceType, deleteAllMatchingMethods);
-	}
-
-	public void testFail11() throws Exception{
-		String[] methodNames= new String[]{"m"};
-		String[][] signatures= new String[][]{new String[0]};
-		boolean deleteAllInSourceType= true;
-		boolean deleteAllMatchingMethods= false;
-		helper3(methodNames, signatures, deleteAllInSourceType, deleteAllMatchingMethods);
-	}
-
-	public void testFail12() throws Exception{
-		printTestDisabledMessage("overloading - current limitation");
-//		String[] methodNames= new String[]{"m"};
-//		String[][] signatures= new String[][]{new String[0]};
-//		boolean deleteAllInSourceType= true;
-//		boolean deleteAllMatchingMethods= false;
-//		helper3(methodNames, signatures, deleteAllInSourceType, deleteAllMatchingMethods);
-	}
-
-	public void testFail13() throws Exception{
-		String[] methodNames= new String[]{"m"};
-		String[][] signatures= new String[][]{new String[0]};
-		boolean deleteAllInSourceType= true;
-		boolean deleteAllMatchingMethods= false;
-		helper2(methodNames, signatures, deleteAllInSourceType, deleteAllMatchingMethods);
-	}
-	
-	public void testFail14() throws Exception{
-		String[] methodNames= new String[]{"m"};
-		String[][] signatures= new String[][]{new String[0]};
-		boolean deleteAllInSourceType= true;
-		boolean deleteAllMatchingMethods= false;
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), "A");
-		try{
-			IType type= getType(cu, "A");
-			IMethod[] methods= TestUtil.getMethods(type, methodNames, signatures);
-			IMember[] members= TestUtil.merge(methods, new IMember[]{type.getType("Quux")});
-			PullUpRefactoring ref= createRefactoring(members);
-			if (deleteAllInSourceType)
-				ref.setMethodsToDelete(methods);
-			if (deleteAllMatchingMethods)
-				ref.setMethodsToDelete(getMethods(ref.getMatchingElements(new NullProgressMonitor())));
-		
-			RefactoringStatus result= performRefactoring(ref);
-			assertTrue("precondition was supposed to fail", result != null && ! result.isOK());
-		} finally{
-			performDummySearch();
-			cu.delete(false, null);
-		}		
-
-	}
-
-	//----------------------------------------------------------
-	public void testField0() throws Exception{
-		fieldHelper1(new String[]{"i"}, true, false);
-	}
-	
-	public void testFieldFail0() throws Exception{
-		fieldHelper2(new String[]{"x"});
-	}
-	
-	public void testFieldFail1() throws Exception{
-		fieldHelper2(new String[]{"x"});
-	}
-
-	//---------------------------------------------------------
-	public void testFieldMethod0() throws Exception{
-//		printTestDisabledMessage("bug 23324 ");
-		fieldMethodHelper1(new String[]{"f"}, new String[]{"m"}, new String[][]{new String[0]}, true, false);
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RefactoringScannerTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RefactoringScannerTests.java
deleted file mode 100644
index 30d600e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RefactoringScannerTests.java
+++ /dev/null
@@ -1,117 +0,0 @@
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jdt.internal.corext.refactoring.rename.RefactoringScanner;
-
-public class RefactoringScannerTests extends RefactoringTest{
-
-	public RefactoringScannerTests(String name){
-		super(name);
-	}
-	
-	private RefactoringScanner fScanner;
-	private static Class clazz= RefactoringScannerTests.class;
-	
-	protected String getRefactoringPath() {
-		return "RefactoringScanner/";
-	}
-	
-	public static Test suite() {
-		return new MySetup(new TestSuite(clazz));
-	}
-	
-	protected void setUp() throws Exception {
-		//no need to call super.setUp();
-		fScanner= new RefactoringScanner();
-		fScanner.setPattern("TestPattern");
-	}
-
-	protected void tearDown() throws Exception {
-		//no need to call super.tearDown();
-	}
-
-	private void helper(String fileName, int expectedMatchCount, boolean analyzeComments, boolean analyzeJavaDoc, boolean analyzeString)	throws Exception{
-		String text= getFileContents(getRefactoringPath() + fileName);
-		fScanner.setAnalyzeComments(analyzeComments);
-		fScanner.setAnalyzeJavaDoc(analyzeJavaDoc);
-		fScanner.setAnalyzeStrings(analyzeString);
-		fScanner.scan(text);
-		assertEquals("results.length", expectedMatchCount, fScanner.getJavaDocResults().size() + fScanner.getCommentResults().size() + fScanner.getStringResults().size());		
-	}
-	
-	//-- tests
-	public void test0() throws Exception{
-		String text= "";
-		fScanner.scan(text);
-		assertEquals("results.length", 0, fScanner.getJavaDocResults().size() + fScanner.getCommentResults().size() + fScanner.getStringResults().size());		
-	}
-	
-	public void test1() throws Exception{
-		helper("A.java", 8, true, true, true);
-	}
-
-	public void test2() throws Exception{
-		helper("A.java", 4, false, true, true);
-	}
-
-	public void test3() throws Exception{
-		helper("A.java", 6, true, false, true);
-	}
-
-	public void test4() throws Exception{
-		helper("A.java", 6, true, true, false);
-	}
-	
-	public void test5() throws Exception{
-		helper("A.java", 2, false, false, true);
-	}
-
-	public void test6() throws Exception{
-		helper("A.java", 2, false, true, false);
-	}
-
-	public void test7() throws Exception{
-		helper("A.java", 4, true, false, false);
-	}
-
-	public void test8() throws Exception{
-		helper("A.java", 0, false, false, false);
-	}
-
-	//---
-	public void testWord1() throws Exception{
-		helper("B.java", 6, true, true, true);
-	}
-
-	public void testWord2() throws Exception{
-		helper("B.java", 3, false, true, true);
-	}
-
-	public void testWord3() throws Exception{
-		helper("B.java", 5, true, false, true);
-	}
-
-	public void testWord4() throws Exception{
-		helper("B.java", 4, true, true, false);
-	}
-	
-	public void testWord5() throws Exception{
-		helper("B.java", 2, false, false, true);
-	}
-
-	public void testWord6() throws Exception{
-		helper("B.java", 1, false, true, false);
-	}
-
-	public void testWord7() throws Exception{
-		helper("B.java", 3, true, false, false);
-	}
-
-	public void testWord8() throws Exception{
-		helper("B.java", 0, false, false, false);
-	}
-		
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RefactoringTest.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RefactoringTest.java
deleted file mode 100644
index 7e718ce..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RefactoringTest.java
+++ /dev/null
@@ -1,288 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-
-import junit.framework.TestCase;
-
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.NullProgressMonitor;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.ISourceManipulation;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.search.IJavaSearchConstants;
-import org.eclipse.jdt.core.search.ITypeNameRequestor;
-import org.eclipse.jdt.core.search.SearchEngine;
-
-import org.eclipse.jdt.internal.core.JavaModelManager;
-
-import org.eclipse.jdt.ui.tests.refactoring.infra.RefactoringTestPlugin;
-import org.eclipse.jdt.ui.tests.refactoring.infra.TestExceptionHandler;
-
-import org.eclipse.jdt.internal.corext.refactoring.base.ChangeContext;
-import org.eclipse.jdt.internal.corext.refactoring.base.IChange;
-import org.eclipse.jdt.internal.corext.refactoring.base.IRefactoring;
-import org.eclipse.jdt.internal.corext.refactoring.base.Refactoring;
-import org.eclipse.jdt.internal.corext.refactoring.base.RefactoringStatus;
-import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
-
-public abstract class RefactoringTest extends TestCase {
-
-	private IPackageFragmentRoot fRoot;
-	private IPackageFragment fPackageP;
-	private IJavaProject fJavaProject;
-	
-	public boolean fIsVerbose= false;
-
-	public static final String TEST_PATH_PREFIX= "";
-
-	protected static final String TEST_INPUT_INFIX= "/in/";
-	protected static final String TEST_OUTPUT_INFIX= "/out/";
-	protected static final String CONTAINER= "src";
-	
-	public RefactoringTest(String name) {
-		super(name);
-	}
-
-	protected void setUp() throws Exception {
-		fJavaProject= MySetup.getProject();
-		fRoot= MySetup.getDefaultSourceFolder();
-		fPackageP= MySetup.getPackageP();
-		
-		if (fIsVerbose){
-			System.out.println("\n---------------------------------------------");
-			System.out.println("\nTest:" + getClass() + "." + getName());
-		}	
-		Refactoring.getUndoManager().flush();
-	}
-
-	protected void performDummySearch() throws Exception {
-		performDummySearch(fPackageP);
-	}	
-
-	public static void performDummySearch(IJavaElement element) throws Exception{
-		new SearchEngine().searchAllTypeNames(
-		 	ResourcesPlugin.getWorkspace(),
-			null,
-			null,
-			IJavaSearchConstants.EXACT_MATCH,
-			IJavaSearchConstants.CASE_SENSITIVE,
-			IJavaSearchConstants.CLASS,
-			SearchEngine.createJavaSearchScope(new IJavaElement[]{element}),
-			new Requestor(),
-			IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,
-			null);
-	}
-	
-	protected void tearDown() throws Exception {
-		performDummySearch();
-		
-		if (fPackageP.exists()){	
-			IJavaElement[] kids= fPackageP.getChildren();
-			for (int i= 0; i < kids.length; i++){
-				if (kids[i] instanceof ISourceManipulation){
-					try{
-						if (kids[i].exists() && ! kids[i].isReadOnly())
-							((ISourceManipulation)kids[i]).delete(true, null);
-					}	catch (JavaModelException e){
-						//try to delete'em all
-					}
-				}	
-			}
-		}	
-		
-		if (fRoot.exists()){
-			IJavaElement[] packages= fRoot.getChildren();
-			for (int i= 0; i < packages.length; i++){
-				try{
-					IPackageFragment pack= (IPackageFragment)packages[i];
-					if (! pack.equals(fPackageP) && pack.exists() && ! pack.isReadOnly())
-						pack.delete(true, null);
-				}	catch (JavaModelException e){
-					//try to delete'em all
-				}	
-			}
-		}
-	}
-
-	protected IPackageFragmentRoot getRoot() {
-		return fRoot;
-	}
-
-	protected IPackageFragment getPackageP() {
-		return fPackageP;
-	}
-
-	protected final RefactoringStatus performRefactoring(IRefactoring ref) throws JavaModelException {
-		RefactoringStatus status= ref.checkPreconditions(new NullProgressMonitor());
-		if (!status.isOK())
-			return status;
-
-		IChange change= ref.createChange(new NullProgressMonitor());
-		performChange(change);
-		
-		// XXX: this should be done by someone else
-		Refactoring.getUndoManager().addUndo(ref.getName(), change.getUndoChange());
-
-		return null;
-	}
-	
-	protected void performChange(IChange change) throws JavaModelException{
-		change.aboutToPerform(new ChangeContext(new TestExceptionHandler()), new NullProgressMonitor());
-		try {
-			change.perform(new ChangeContext(new TestExceptionHandler()), new NullProgressMonitor());
-		} finally {
-			change.performed();
-		}
-	}
-
-	/****************  helpers  ******************/
-	/**** mostly not general, just shortcuts *****/
-
-	/**
-	 * @param pack
-	 * @param name
-	 * @param contents
-	 */
-	protected ICompilationUnit createCU(IPackageFragment pack, String name, String contents) throws Exception {
-		if (pack.getCompilationUnit(name).exists())
-			return pack.getCompilationUnit(name);
-		ICompilationUnit cu= pack.createCompilationUnit(name, contents, true, null);
-		cu.save(null, true);
-		forceIndexing();
-		return cu;
-	}
-
-	//BOGUS??
-	protected void forceIndexing() {
-		JavaModelManager.getJavaModelManager().getIndexManager().checkIndexConsistency();
-	}
-
-	/**
-	 * BOGUS: this might be already implemented somewhere else (JDK? Core?)
-	 */
-	protected String getFileContents(String fileName) throws IOException {
-		if (fIsVerbose)
-			System.out.println("loading:" + fileName);
-			
-		InputStream in= getFileInputStream(fileName);
-		BufferedReader br= new BufferedReader(new InputStreamReader(in));
-		
-		StringBuffer sb= new StringBuffer();
-		try {
-			int read= 0;
-			while ((read= br.read()) != -1)
-				sb.append((char) read);
-		} finally {
-			br.close();
-		}
-		return sb.toString();
-	}
-
-	protected InputStream getFileInputStream(String fileName) throws IOException {
-		return RefactoringTestPlugin.getDefault().getTestResourceStream(fileName);
-	}
-
-	protected IType getType(ICompilationUnit cu, String name) throws JavaModelException {
-		IType[] types= cu.getAllTypes();
-		for (int i= 0; i < types.length; i++)
-			if (JavaModelUtil.getTypeQualifiedName(types[i]).equals(name) ||
-			    types[i].getElementName().equals(name))
-				return types[i];
-		return null;
-	}
-	
-	/**
-	 * subclasses override to inform about the location of their test cases
-	 */
-	protected String getRefactoringPath() {
-		return "";
-	}
-
-	/**
-	 *  example "RenameType/"
-	 */
-	protected String getTestPath() {
-		return TEST_PATH_PREFIX + getRefactoringPath();
-	}
-
-	/**
-	 * @param cuName
-	 * @param infix
-	 * example "RenameTest/test0 + infix + cuName.java"
-	 */
-	protected String createTestFileName(String cuName, String infix) {
-		return getTestPath() + getName() + infix + cuName + ".java";
-	}
-	
-	protected String getInputTestFileName(String cuName) {
-		return createTestFileName(cuName, TEST_INPUT_INFIX);
-	}
-	
-	/**
-	 * @param subDirName example "p/" or "org/eclipse/jdt/"
-	 */
-	protected String getInputTestFileName(String cuName, String subDirName) {
-		return createTestFileName(cuName, TEST_INPUT_INFIX + subDirName);
-	}
-
-	protected String getOutputTestFileName(String cuName) {
-		return createTestFileName(cuName, TEST_OUTPUT_INFIX);
-	}
-	
-	/**
-	 * @param subDirName example "p/" or "org/eclipse/jdt/"
-	 */
-	protected String getOutputTestFileName(String cuName, String subDirName) {
-		return createTestFileName(cuName, TEST_OUTPUT_INFIX + subDirName);
-	}
-	
-	protected ICompilationUnit createCUfromTestFile(IPackageFragment pack, String cuName) throws Exception {
-		return createCUfromTestFile(pack, cuName, true);
-	}
-	
-	protected ICompilationUnit createCUfromTestFile(IPackageFragment pack, String cuName, String subDirName) throws Exception {
-		return createCUfromTestFile(pack, cuName, subDirName, true);
-	}
-	
-	protected ICompilationUnit createCUfromTestFile(IPackageFragment pack, String cuName, boolean input) throws Exception {
-		String contents= input 
-					? getFileContents(getInputTestFileName(cuName))
-					: getFileContents(getOutputTestFileName(cuName));
-		return createCU(pack, cuName + ".java", contents);
-	}
-	
-	protected ICompilationUnit createCUfromTestFile(IPackageFragment pack, String cuName, String subDirName, boolean input) throws Exception {
-		String contents= input 
-			? getFileContents(getInputTestFileName(cuName, subDirName))
-			: getFileContents(getOutputTestFileName(cuName, subDirName));
-		
-		return createCU(pack, cuName + ".java", contents);
-	}
-	
-	protected void printTestDisabledMessage(String explanation){
-		System.out.println("\n" +getClass().getName() + "::"+ getName() + " disabled (" + explanation + ")");
-	}
-	
-	private static class Requestor implements ITypeNameRequestor{
-		
-		public void acceptClass(char[] packageName, char[] simpleTypeName, char[][] enclosingTypeNames, String path) {
-		}
-
-		public void acceptInterface(char[] packageName, char[] simpleTypeName, char[][] enclosingTypeNames, String path) {
-		}
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameFieldTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameFieldTests.java
deleted file mode 100644
index 6fb44ff..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameFieldTests.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class RenameFieldTests {
-	
-	private static final Class clazz= RenameFieldTests.class;
-	
-	public static Test suite() {
-		TestSuite suite= new TestSuite(clazz.getName());
-		suite.addTest(RenameNonPrivateFieldTests.suite());
-		suite.addTest(RenamePrivateFieldTests.suite());
-		return suite;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameJavaProjectTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameJavaProjectTests.java
deleted file mode 100644
index 1aefed4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameJavaProjectTests.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jdt.core.IClasspathEntry;
-import org.eclipse.jdt.core.IJavaProject;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-
-import org.eclipse.jdt.internal.corext.refactoring.base.RefactoringStatus;
-import org.eclipse.jdt.internal.corext.refactoring.rename.RenameJavaProjectRefactoring;
-
-public class RenameJavaProjectTests extends RefactoringTest {
-	
-	private static final Class clazz= RenameJavaProjectTests.class;
-	
-	public RenameJavaProjectTests(String name) {
-		super(name);
-	}
-
-	public static Test suite() {
-		return new MySetup(new TestSuite(clazz));
-	}
-
-	public void test0() throws Exception{
-		printTestDisabledMessage("wating for jcore fix");
-		if (true)
-			return;
-		IJavaProject p1= null;
-		IJavaProject referencing1= null;
-		IJavaProject referencing2= null;
-		try{
-			String newProjectName= "newName";
-			 p1= JavaProjectHelper.createJavaProject("p1", "bin");
-			 referencing1= JavaProjectHelper.createJavaProject("p2", "bin");
-			 referencing2= JavaProjectHelper.createJavaProject("p3", "bin");
-			 
-			 JavaProjectHelper.addRTJar(referencing1);
-			 JavaProjectHelper.addRequiredProject(referencing1, p1);
-			 JavaProjectHelper.addSourceContainer(referencing1, "src");
-			 
-			 JavaProjectHelper.addRTJar(referencing2);
-			 JavaProjectHelper.addRequiredProject(referencing2, p1);
-			 JavaProjectHelper.addSourceContainer(referencing2, "src");
-
-			 JavaProjectHelper.addRTJar(p1);
-			 
-			 RenameJavaProjectRefactoring ref= new RenameJavaProjectRefactoring(p1);
-			 ref.setNewName(newProjectName);
-			 RefactoringStatus result= performRefactoring(ref);
-			 assertEquals("not expected to fail", null, result);
-			
-			//check entries in  referencing1
-			IClasspathEntry[] entries= referencing1.getRawClasspath();
-			assertEquals("expected entries", 3, entries.length);
-			for (int i= 0; i < entries.length; i++) {
-				IClasspathEntry iClassPathEntry= entries[i];
-				if (i == 1){
-					assertEquals("expected entry name", p1.getProject().getFullPath(), iClassPathEntry.getPath());
-					assertEquals("expected entry kind", IClasspathEntry.CPE_PROJECT, iClassPathEntry.getEntryKind());
-				}	
-			}
-
-			//check entries in  referencing2
-			entries= referencing2.getRawClasspath();
-			assertEquals("expected entries", 3, entries.length);
-			for (int i= 0; i < entries.length; i++) {
-				IClasspathEntry iClassPathEntry= entries[i];
-				if (i == 1){
-					assertEquals("expected entry name", p1.getProject().getFullPath(), iClassPathEntry.getPath());
-					assertEquals("expected entry kind", IClasspathEntry.CPE_PROJECT, iClassPathEntry.getEntryKind());
-				}	
-			}
-			
-		}	finally{
-			performDummySearch();
-			
-			JavaProjectHelper.removeSourceContainer(referencing1, "src");
-			JavaProjectHelper.removeSourceContainer(referencing2, "src");
-			
-			if (p1 != null && p1.exists()){
-				JavaProjectHelper.delete(p1);
-				JavaProjectHelper.delete(referencing1);
-				JavaProjectHelper.delete(referencing2);
-			}	
-		}	
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameMethodInInterfaceTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameMethodInInterfaceTests.java
deleted file mode 100644
index 24a5529..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameMethodInInterfaceTests.java
+++ /dev/null
@@ -1,396 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.runtime.NullProgressMonitor;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.Signature;
-
-import org.eclipse.jdt.ui.tests.refactoring.infra.TestExceptionHandler;
-
-import org.eclipse.jdt.internal.corext.refactoring.base.ChangeContext;
-import org.eclipse.jdt.internal.corext.refactoring.base.Refactoring;
-import org.eclipse.jdt.internal.corext.refactoring.base.RefactoringStatus;
-import org.eclipse.jdt.internal.corext.refactoring.rename.RenameMethodRefactoring;
-
-public class RenameMethodInInterfaceTests extends RefactoringTest {
-	
-	private static final Class clazz= RenameMethodInInterfaceTests.class;
-	private static final String REFACTORING_PATH= "RenameMethodInInterface/";
-
-	public RenameMethodInInterfaceTests(String name) {
-		super(name);
-	}
-	
-	public static Test suite() {
-		return new MySetup(new TestSuite(clazz));
-	}
-
-	protected String getRefactoringPath() {
-		return REFACTORING_PATH;
-	}
-
-	private void helper1_0(String methodName, String newMethodName, String[] signatures) throws Exception{
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), "A");
-		IType interfaceI= getType(cu, "I");
-		RenameMethodRefactoring ref= RenameMethodRefactoring.createInstance(interfaceI.getMethod(methodName, signatures));
-		ref.setNewName(newMethodName);
-		RefactoringStatus result= performRefactoring(ref);
-		assertNotNull("precondition was supposed to fail", result);
-	}
-	
-	private void helper1() throws Exception{
-		helper1_0("m", "k", new String[0]);
-	}
-	
-	private void helper2_0(String methodName, String newMethodName, String[] signatures, boolean shouldPass, boolean updateReferences) throws Exception{
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), "A");
-		IType interfaceI= getType(cu, "I");
-		RenameMethodRefactoring ref= RenameMethodRefactoring.createInstance(interfaceI.getMethod(methodName, signatures));
-		ref.setUpdateReferences(updateReferences);
-		ref.setNewName(newMethodName);
-		assertEquals("was supposed to pass", null, performRefactoring(ref));
-		if (!shouldPass){
-			assertTrue("incorrect renaming because of a java model bug", ! getFileContents(getOutputTestFileName("A")).equals(cu.getSource()));
-			return;
-		}
-		assertEquals("incorrect renaming", getFileContents(getOutputTestFileName("A")), cu.getSource());
-		
-		assertTrue("anythingToUndo", Refactoring.getUndoManager().anythingToUndo());
-		assertTrue("! anythingToRedo", !Refactoring.getUndoManager().anythingToRedo());
-		//assertEquals("1 to undo", 1, Refactoring.getUndoManager().getRefactoringLog().size());
-		
-		Refactoring.getUndoManager().performUndo(new ChangeContext(new TestExceptionHandler()), new NullProgressMonitor());
-		assertEquals("invalid undo", getFileContents(getInputTestFileName("A")), cu.getSource());
-
-		assertTrue("! anythingToUndo", !Refactoring.getUndoManager().anythingToUndo());
-		assertTrue("anythingToRedo", Refactoring.getUndoManager().anythingToRedo());
-		//assertEquals("1 to redo", 1, Refactoring.getUndoManager().getRedoStack().size());
-		
-		Refactoring.getUndoManager().performRedo(new ChangeContext(new TestExceptionHandler()), new NullProgressMonitor());
-		assertEquals("invalid redo", getFileContents(getOutputTestFileName("A")), cu.getSource());
-	}
-	
-	private void helper2_0(String methodName, String newMethodName, String[] signatures, boolean shouldPass) throws Exception{
-		helper2_0(methodName, newMethodName, signatures, shouldPass, true);
-	}
-	
-	private void helper2_0(String methodName, String newMethodName, String[] signatures) throws Exception{
-		helper2_0(methodName, newMethodName, signatures, true);
-	}
-	
-	private void helper2(boolean updateReferences) throws Exception{
-		helper2_0("m", "k", new String[0], true, updateReferences);
-	}
-	
-	private void helper2() throws Exception{
-		helper2(true);
-	}
-	
-	private void helper2_fail() throws Exception{
-		printTestDisabledMessage("search engine bug");
-		helper2_0("m", "k", new String[0], false);
-	}
-	
-
-	/********tests************/
-	public void testFail0() throws Exception{
-		helper1();
-	}
-	public void testFail1() throws Exception{
-		helper1();
-	}
-	public void testFail3() throws Exception{
-		helper1();
-	}
-	public void testFail4() throws Exception{
-		helper1();
-	}
-	public void testFail5() throws Exception{
-		helper1();
-	}
-	public void testFail6() throws Exception{
-		helper1();
-	}
-	public void testFail7() throws Exception{
-		helper1();
-	}
-	public void testFail8() throws Exception{
-		helper1_0("m", "k", new String[]{Signature.SIG_INT});
-	}
-	public void testFail9() throws Exception{
-		helper1();
-	}
-	public void testFail10() throws Exception{
-		helper1();
-	}
-	public void testFail11() throws Exception{
-		helper1();
-	}
-	public void testFail12() throws Exception{
-		helper1();
-	}
-	public void testFail13() throws Exception{
-		helper1();
-	}
-	public void testFail14() throws Exception{
-		helper1();
-	}
-	public void testFail15() throws Exception{
-		helper1();
-	}
-	public void testFail16() throws Exception{
-		helper1();
-	}
-	public void testFail17() throws Exception{
-		helper1();
-	}
-	public void testFail18() throws Exception{
-		helper1();
-	}
-	public void testFail19() throws Exception{
-		helper1();
-	}
-	public void testFail20() throws Exception{
-		helper1();
-	}
-	public void testFail21() throws Exception{
-		helper1_0("m", "k", new String[]{"QString;"});
-	}
-	public void testFail22() throws Exception{
-		helper1_0("m", "k", new String[]{"QObject;"});
-	}
-	public void testFail23() throws Exception{
-		helper1_0("toString", "k", new String[0]);
-	}
-	public void testFail24() throws Exception{
-		helper1();
-	}
-	public void testFail25() throws Exception{
-		helper1();
-	}
-	public void testFail26() throws Exception{
-		helper1();
-	}
-	public void testFail27() throws Exception{
-		helper1();
-	}
-	public void testFail28() throws Exception{
-		helper1();
-	}
-	public void testFail29() throws Exception{
-		helper1();
-	}
-	
-	public void testFail30() throws Exception{
-		helper1_0("toString", "k", new String[0]);
-	}
-	
-	public void testFail31() throws Exception{
-		helper1_0("toString", "k", new String[0]);
-	}
-	
-	public void testFail32() throws Exception{
-		helper1_0("m", "toString", new String[0]);
-	}
-	
-	public void testFail33() throws Exception{
-		helper1_0("m", "toString", new String[0]);
-	}
-	
-	public void testFail34() throws Exception{
-		helper1_0("m", "equals", new String[]{"QObject;"});
-	}
-	
-	public void testFail35() throws Exception{
-		helper1_0("m", "equals", new String[]{"Qjava.lang.Object;"});
-	}
-	
-	public void testFail36() throws Exception{
-		helper1_0("m", "getClass", new String[0]);
-	}
-	
-	public void testFail37() throws Exception{
-		helper1_0("m", "hashCode", new String[0]);
-	}
-
-	public void testFail38() throws Exception{
-		helper1_0("m", "notify", new String[0]);
-	}	
-
-	public void testFail39() throws Exception{
-		helper1_0("m", "notifyAll", new String[0]);
-	}	
-	
-	public void testFail40() throws Exception{
-		helper1_0("m", "wait", new String[]{Signature.SIG_LONG, Signature.SIG_INT});
-	}	
-
-	public void testFail41() throws Exception{
-		helper1_0("m", "wait", new String[]{Signature.SIG_LONG});
-	}	
-	
-	public void testFail42() throws Exception{
-		helper1_0("m", "wait", new String[0]);
-	}	
-	
-	public void testFail43() throws Exception{
-		helper1_0("m", "wait", new String[0]);
-	}	
-	
-	
-	public void test0() throws Exception{
-		helper2();
-	}
-	public void test1() throws Exception{
-		helper2();
-	}
-	public void test2() throws Exception{
-		helper2();
-	}
-	public void test3() throws Exception{
-		helper2();
-	}
-	public void test4() throws Exception{
-		helper2();
-	}
-	public void test5() throws Exception{
-		helper2();
-	}
-	public void test6() throws Exception{
-		helper2();
-	}
-	public void test7() throws Exception{
-		helper2();
-	}
-	public void test10() throws Exception{
-		helper2();
-	}
-	public void test11() throws Exception{
-		helper2();
-	}	
-	public void test12() throws Exception{
-		helper2();
-	}
-	
-	//test13 became testFail45
-	//public void test13() throws Exception{
-	//	helper2();
-	//}
-	public void test14() throws Exception{
-		helper2();
-	}
-	public void test15() throws Exception{
-		helper2();
-	}
-	public void test16() throws Exception{
-		helper2();
-	}
-	public void test17() throws Exception{
-		helper2();
-	}
-	public void test18() throws Exception{
-		helper2();
-	}
-	public void test19() throws Exception{
-		helper2();
-	}
-	public void test20() throws Exception{
-		helper2();
-	}
-	//anonymous inner class
-	public void test21() throws Exception{
-		printTestDisabledMessage("must fix - incorrect warnings");
-		//helper2_fail();
-	}
-	public void test22() throws Exception{
-		helper2();
-	}
-	
-	//test23 became testFail45
-	//public void test23() throws Exception{
-	//	helper2();
-	//}
-	
-	public void test24() throws Exception{
-		helper2();
-	}
-	public void test25() throws Exception{
-		helper2();
-	}
-	public void test26() throws Exception{
-		helper2();
-	}
-	public void test27() throws Exception{
-		helper2();
-	}
-	public void test28() throws Exception{
-		helper2();
-	}
-	public void test29() throws Exception{
-		helper2();
-	}
-	public void test30() throws Exception{
-		helper2();
-	}
-	//anonymous inner class
-	public void test31() throws Exception{
-		helper2();
-	}
-	//anonymous inner class
-	public void test32() throws Exception{
-		helper2();
-	}
-	public void test33() throws Exception{
-		helper2();
-	}
-	public void test34() throws Exception{
-		helper2();
-	}
-	public void test35() throws Exception{
-		helper2();
-	}
-	public void test36() throws Exception{
-		helper2();
-	}
-	public void test37() throws Exception{
-		helper2();
-	}
-	public void test38() throws Exception{
-		helper2();
-	}
-	public void test39() throws Exception{
-		helper2();
-	}
-	public void test40() throws Exception{
-		helper2();
-	}
-	public void test41() throws Exception{
-		helper2();
-	}
-	public void test42() throws Exception{
-		helper2();
-	}
-	public void test43() throws Exception{
-		helper2();
-	}
-	public void test44() throws Exception{
-		helper2();
-	}
-	public void test45() throws Exception{
-		helper2();
-	}
-	public void test46() throws Exception{
-		helper2(false);
-	}
-	public void test47() throws Exception{
-		helper2();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameMethodTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameMethodTests.java
deleted file mode 100644
index bb8b056..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameMethodTests.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class RenameMethodTests {
-	private static final Class clazz= RenameMethodTests.class;
-
-	public static Test suite() {
-		TestSuite suite= new TestSuite(clazz.getName());
-		suite.addTest(RenameVirtualMethodInClassTests.suite());
-		suite.addTest(RenameMethodInInterfaceTests.suite());
-		suite.addTest(RenamePrivateMethodTests.suite());	
-		suite.addTest(RenameStaticMethodTests.suite());
-		return suite;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameNonPrivateFieldTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameNonPrivateFieldTests.java
deleted file mode 100644
index 3f9aea6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameNonPrivateFieldTests.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.runtime.NullProgressMonitor;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IType;
-
-import org.eclipse.jdt.ui.tests.refactoring.infra.TestExceptionHandler;
-
-import org.eclipse.jdt.internal.corext.codemanipulation.CodeGenerationSettings;
-import org.eclipse.jdt.internal.corext.refactoring.base.ChangeContext;
-import org.eclipse.jdt.internal.corext.refactoring.base.Refactoring;
-import org.eclipse.jdt.internal.corext.refactoring.base.RefactoringStatus;
-import org.eclipse.jdt.internal.corext.refactoring.rename.RenameFieldRefactoring;
-
-public class RenameNonPrivateFieldTests extends RefactoringTest{
-	
-	private static final Class clazz= RenameNonPrivateFieldTests.class;
-	private static final String REFACTORING_PATH= "RenameNonPrivateField/";
-
-	public RenameNonPrivateFieldTests(String name) {
-		super(name);
-	}
-
-	public static Test suite() {
-		return new MySetup(new TestSuite(clazz));
-	}
-
-	protected String getRefactoringPath() {
-		return REFACTORING_PATH;
-	}
-
-	private CodeGenerationSettings getSettings(){
-		return new CodeGenerationSettings();
-	}
-	
-	private String[] getPrefixes(){
-		return new String[0];
-	}
-	
-	private String[] getSuffixes(){
-		return new String[0];
-	}
-	
-	private void helper1_0(String fieldName, String newFieldName) throws Exception{
-		IType classA= getType(createCUfromTestFile(getPackageP(), "A"), "A");
-		RenameFieldRefactoring ref= new RenameFieldRefactoring(classA.getField(fieldName), getPrefixes(), getSuffixes());
-		ref.setNewName(newFieldName);
-		RefactoringStatus result= performRefactoring(ref);
-		assertNotNull("precondition was supposed to fail", result);
-	}
-	
-	private void helper1() throws Exception{
-		helper1_0("f", "g");
-	}
-	
-	private void helper2(String fieldName, String newFieldName, boolean updateReferences) throws Exception{
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), "A");
-		IType classA= getType(cu, "A");
-		RenameFieldRefactoring ref= new RenameFieldRefactoring(classA.getField(fieldName), getPrefixes(), getSuffixes());
-		ref.setNewName(newFieldName);
-		ref.setUpdateReferences(updateReferences);
-		RefactoringStatus result= performRefactoring(ref);
-		assertEquals("was supposed to pass", null, result);
-		assertEquals("invalid renaming", getFileContents(getOutputTestFileName("A")), cu.getSource());
-		
-		assertTrue("anythingToUndo", Refactoring.getUndoManager().anythingToUndo());
-		assertTrue("! anythingToRedo", !Refactoring.getUndoManager().anythingToRedo());
-		
-		Refactoring.getUndoManager().performUndo(new ChangeContext(new TestExceptionHandler()), new NullProgressMonitor());
-		assertEquals("invalid undo", getFileContents(getInputTestFileName("A")), cu.getSource());
-
-		assertTrue("! anythingToUndo", !Refactoring.getUndoManager().anythingToUndo());
-		assertTrue("anythingToRedo", Refactoring.getUndoManager().anythingToRedo());
-		
-		Refactoring.getUndoManager().performRedo(new ChangeContext(new TestExceptionHandler()), new NullProgressMonitor());
-		assertEquals("invalid redo", getFileContents(getOutputTestFileName("A")), cu.getSource());
-	}
-	
-	private void helper2(String fieldName, String newFieldName) throws Exception{
-		helper2(fieldName, newFieldName, true);
-	}
-	
-	private void helper2() throws Exception{
-		helper2(true);
-	}
-	
-	private void helper2(boolean updateReferences) throws Exception{
-		helper2("f", "g", updateReferences);
-	}
-
-	//--------- tests ----------	
-	public void testFail0() throws Exception{
-		helper1();
-	}
-	
-	public void testFail1() throws Exception{
-		helper1();
-	}
-	
-	public void testFail2() throws Exception{
-		helper1();
-	}
-	
-	public void testFail3() throws Exception{
-		helper1();
-	}
-	
-	public void testFail4() throws Exception{
-		helper1();
-	}
-	
-	public void testFail5() throws Exception{
-		helper1();
-	}	
-	
-	public void testFail6() throws Exception{
-		helper1();
-	}
-	
-	public void testFail7() throws Exception{
-		helper1();
-	}
-	
-	public void testFail8() throws Exception{
-		helper1();
-	}
-	
-	public void testFail9() throws Exception{
-		helper1();
-	}
-	
-	public void testFail10() throws Exception{
-		helper1();
-	}
-	
-	public void testFail11() throws Exception{
-		helper1();
-	}
-	
-	public void testFail12() throws Exception{
-		helper1();
-	}	
-	
-	public void testFail13() throws Exception{
-		//printTestDisabledMessage("1GKZ8J6: ITPJCORE:WIN2000 - search: missing field occurrecnces");
-		helper1();
-	}
-	
-	public void testFail14() throws Exception{
-		//printTestDisabledMessage("1GKZ8J6: ITPJCORE:WIN2000 - search: missing field occurrecnces");
-		helper1();
-	}
-	
-	// ------ 
-	public void test0() throws Exception{
-		helper2();
-	}
-	
-	public void test1() throws Exception{
-		helper2();
-	}
-	
-	public void test2() throws Exception{
-		helper2();
-	}
-	
-	public void test3() throws Exception{
-		helper2();
-	}
-	
-	public void test4() throws Exception{
-		helper2();
-		//printTestDisabledMessage("1GKZ8J6: ITPJCORE:WIN2000 - search: missing field occurrecnces");
-	}
-
-	public void test5() throws Exception{
-		helper2();
-	}
-	
-	public void test6() throws Exception{
-		//printTestDisabledMessage("1GKB9YH: ITPJCORE:WIN2000 - search for field refs - incorrect results");
-		helper2();
-	}
-
-	public void test7() throws Exception{
-		helper2();
-	}
-	
-	public void test8() throws Exception{
-		//printTestDisabledMessage("1GD79XM: ITPJCORE:WINNT - Search - search for field references - not all found");
-		helper2();
-	}
-	
-	public void test9() throws Exception{
-		helper2();
-	}
-	
-	public void test10() throws Exception{
-		helper2();
-	}
-	
-	public void test11() throws Exception{
-		helper2();
-	}
-	
-	public void test12() throws Exception{
-		//System.out.println("\nRenameNonPrivateField::" + name() + " disabled (1GIHUQP: ITPJCORE:WINNT - search for static field should be more accurate)");
-		helper2();
-	}
-	
-	public void test13() throws Exception{
-		//System.out.println("\nRenameNonPrivateField::" + name() + " disabled (1GIHUQP: ITPJCORE:WINNT - search for static field should be more accurate)");
-		helper2();
-	}
-	
-	public void test14() throws Exception{
-		helper2(false);
-	}
-	
-	public void test15() throws Exception{
-		helper2(false);
-	}
-
-	public void test16() throws Exception{
-//		printTestDisabledMessage("text for bug 20693");
-		helper2();
-	}
-	
-	public void testBug5821() throws Exception{
-		helper2("test", "test1");
-	}
-	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenamePackageTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenamePackageTests.java
deleted file mode 100644
index 21c7289..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenamePackageTests.java
+++ /dev/null
@@ -1,265 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IPackageFragment;
-
-import org.eclipse.jdt.internal.corext.refactoring.base.IRefactoring;
-import org.eclipse.jdt.internal.corext.refactoring.base.RefactoringStatus;
-import org.eclipse.jdt.internal.corext.refactoring.rename.RenamePackageRefactoring;
-import org.eclipse.jdt.internal.corext.refactoring.util.DebugUtils;
-
-
-public class RenamePackageTests extends RefactoringTest {
-	
-	private static final Class clazz= RenamePackageTests.class;
-	private static final String REFACTORING_PATH= "RenamePackage/";
-	
-	public RenamePackageTests(String name) {
-		super(name);
-	}
-
-	public static Test suite() {
-		return new MySetup(new TestSuite(clazz));
-	}
-
-	protected String getRefactoringPath() {
-		return REFACTORING_PATH;
-	}
-	
-	// -------------
-	private RenamePackageRefactoring createRefactoring(IPackageFragment pack, String newName) {
-		RenamePackageRefactoring ref= new RenamePackageRefactoring(pack);
-		ref.setNewName(newName);
-		return ref;
-	}
-
-	/* non java-doc
-	 * the 0th one is the one to rename
-	 */
-	private void helper1(String packageNames[], String[][] packageFiles, String newPackageName) throws Exception{
-		try{
-			IPackageFragment[] packages= new IPackageFragment[packageNames.length];
-			for (int i= 0; i < packageFiles.length; i++){
-				packages[i]= getRoot().createPackageFragment(packageNames[i], true, null);
-				for (int j= 0; j < packageFiles[i].length; j++){
-					createCUfromTestFile(packages[i], packageFiles[i][j], packageNames[i].replace('.', '/') + "/");
-					//DebugUtils.dump(cu.getElementName() + "\n" + cu.getSource());
-				}	
-			}
-			IPackageFragment thisPackage= packages[0];
-			IRefactoring ref= createRefactoring(thisPackage, newPackageName);
-			RefactoringStatus result= performRefactoring(ref);
-			assertNotNull("precondition was supposed to fail", result);
-			if (fIsVerbose)
-				DebugUtils.dump("" + result);
-		} finally{		
-			performDummySearch();
-		
-			for (int i= 0; i < packageNames.length; i++){
-				IPackageFragment pack= getRoot().getPackageFragment(packageNames[i]);
-				if (pack.exists())
-					pack.delete(true, null);
-			}	
-		}	
-	}
-	
-	/* non java-doc
-	 * the 0th one is the one to rename
-	 */
-	private void helper1(String[] packageNames, String newPackageName) throws Exception{
-		try{
-			IPackageFragment[] packages= new IPackageFragment[packageNames.length];
-			for (int i= 0; i < packageNames.length; i++){
-				packages[i]= getRoot().createPackageFragment(packageNames[i], true, null);
-			}
-			IPackageFragment thisPackage= packages[0];
-			IRefactoring ref= createRefactoring(thisPackage, newPackageName);
-			RefactoringStatus result= performRefactoring(ref);
-			assertNotNull("precondition was supposed to fail", result);
-			if (fIsVerbose)
-				DebugUtils.dump("" + result);
-		} finally{		
-			performDummySearch();	
-			
-			for (int i= 0; i < packageNames.length; i++){
-				IPackageFragment pack= getRoot().getPackageFragment(packageNames[i]);
-				if (pack.exists())
-					pack.delete(true, null);
-			}		
-		}	
-	}
-	
-	private void helper1() throws Exception{
-		helper1(new String[]{"r"}, new String[][]{{"A"}}, "p1");
-	}
-	
-	private void helper2(String[] packageNames, String[][] packageFileNames, String newPackageName, boolean updateReferences) throws Exception{
-		try{
-			IPackageFragment[] packages= new IPackageFragment[packageNames.length];
-			ICompilationUnit[][] cus= new ICompilationUnit[packageFileNames.length][packageFileNames[0].length];
-			for (int i= 0; i < packageNames.length; i++){
-				packages[i]= getRoot().createPackageFragment(packageNames[i], true, null);
-				for (int j= 0; j < packageFileNames[i].length; j++){
-					cus[i][j]= createCUfromTestFile(packages[i], packageFileNames[i][j], packageNames[i].replace('.', '/') + "/");
-				}
-			}
-			IPackageFragment thisPackage= packages[0];
-			RenamePackageRefactoring ref= createRefactoring(thisPackage, newPackageName);
-			ref.setUpdateReferences(updateReferences);
-			RefactoringStatus result= performRefactoring(ref);
-			assertEquals("preconditions were supposed to pass", null, result);
-			
-			//---
-			
-			assertTrue("package not renamed", ! getRoot().getPackageFragment(packageNames[0]).exists());
-			IPackageFragment newPackage= getRoot().getPackageFragment(newPackageName);
-			assertTrue("new package does not exist", newPackage.exists());
-			
-			for (int i= 0; i < packageFileNames.length; i++){
-				String packageName= (i == 0) 
-								? newPackageName.replace('.', '/') + "/"
-								: packageNames[i].replace('.', '/') + "/";
-				for (int j= 0; j < packageFileNames[i].length; j++){
-					String s1= getFileContents(getOutputTestFileName(packageFileNames[i][j], packageName));
-					ICompilationUnit cu= 
-						(i == 0) 
-							? newPackage.getCompilationUnit(packageFileNames[i][j] + ".java")
-							: cus[i][j];
-					//DebugUtils.dump("cu:" + cu.getElementName());		
-					String s2= cu.getSource();
-					
-					//DebugUtils.dump("expected:" + s1);
-					//DebugUtils.dump("was:" + s2);
-					assertEquals("invalid update in file " + cu.getElementName(), s1,	s2);
-				}
-			}
-		} finally{
-			performDummySearch();
-			getRoot().getPackageFragment(newPackageName).delete(true, null);
-			for (int i= 1; i < packageNames.length; i++){
-				getRoot().getPackageFragment(packageNames[i]).delete(true, null);
-			}	
-		}	
-	}
-	
-	private void helper2(String[] packageNames, String[][] packageFileNames, String newPackageName) throws Exception{
-		helper2(packageNames, packageFileNames, newPackageName, true);
-	}
-	
-	// ---------- tests -------------	
-	public void testFail0() throws Exception{
-		helper1(new String[]{"r"}, new String[][]{{"A"}}, "9");
-	}
-	
-	public void testFail1() throws Exception{
-		printTestDisabledMessage("needs revisiting");
-		//helper1(new String[]{"r.p1"}, new String[][]{{"A"}}, "r");
-	}
-	
-	public void testFail2() throws Exception{
-		helper1(new String[]{"r.p1", "fred"}, "fred");
-	}	
-	
-	public void testFail3() throws Exception{
-		helper1(new String[]{"r"}, new String[][]{{"A"}}, "fred");
-	}
-	
-	public void testFail4() throws Exception{
-		helper1();
-	}
-	
-	public void testFail5() throws Exception{
-		helper1();
-	}
-	
-	public void testFail6() throws Exception{
-		helper1();
-	}
-	
-	public void testFail7() throws Exception{
-		//printTestDisabledMessage("1GK90H4: ITPJCORE:WIN2000 - search: missing package reference");
-		printTestDisabledMessage("corner case - name obscuring");
-//		helper1(new String[]{"r", "p1"}, new String[][]{{"A"}, {"A"}}, "fred");
-	}
-	
-	public void testFail8() throws Exception{
-		printTestDisabledMessage("corner case - name obscuring");
-//		helper1(new String[]{"r", "p1"}, new String[][]{{"A"}, {"A"}}, "fred");
-	}
-	
-	//native method used r.A as a paramter
-	public void testFail9() throws Exception{
-		printTestDisabledMessage("corner case - qualified name used  as a paramter of a native method");
-		//helper1(new String[]{"r", "p1"}, new String[][]{{"A"}, {"A"}}, "fred");
-	}
-	
-	public void testFail10() throws Exception{
-		helper1(new String[]{"r.p1", "r"}, new String[][]{{"A"}, {"A"}}, "r");
-	}
-
-	public void testFail11() throws Exception{
-		helper1(new String[]{"q.p1", "q", "r.p1"}, new String[][]{{"A"}, {"A"}, {}}, "r.p1");
-	}
-	
-	//-------
-	public void test0() throws Exception{
-		helper2(new String[]{"r"}, new String[][]{{"A"}}, "p1");
-	}
-	
-	public void test1() throws Exception{
-		helper2(new String[]{"r"}, new String[][]{{"A"}}, "p1");
-	}
-	
-	public void test2() throws Exception{
-		helper2(new String[]{"r", "fred"}, new String[][]{{"A"}, {"A"}}, "p1");
-	}
-	
-	public void test3() throws Exception{
-		helper2(new String[]{"fred", "r.r"}, new String[][]{{"A"}, {"B"}}, "r");
-	}
-	
-	public void test4() throws Exception{
-		helper2(new String[]{"r.p1", "r"}, new String[][]{{"A"}, {"A"}}, "q");
-	}
-	
-	public void test5() throws Exception{
-		helper2(new String[]{"r"}, new String[][]{{"A"}}, "p1", false);
-	}
-	
-	public void testReadOnly() throws Exception{
-		printTestDisabledMessage("see bug#6054 (renaming a read-only package resets the read-only flag)");
-		if (true)
-			return;
-		
-		String[] packageNames= new String[]{"r"};
-		String[][] packageFileNames= new String[][]{{"A"}};
-		String newPackageName= "p1";
-		IPackageFragment[] packages= new IPackageFragment[packageNames.length];
-
-		ICompilationUnit[][] cus= new ICompilationUnit[packageFileNames.length][packageFileNames[0].length];
-		for (int i= 0; i < packageNames.length; i++){
-			packages[i]= getRoot().createPackageFragment(packageNames[i], true, null);
-			for (int j= 0; j < packageFileNames[i].length; j++){
-				cus[i][j]= createCUfromTestFile(packages[i], packageFileNames[i][j], packageNames[i].replace('.', '/') + "/");
-			}
-		}
-		IPackageFragment thisPackage= packages[0];
-		thisPackage.getCorrespondingResource().setReadOnly(true);
-		RenamePackageRefactoring ref= createRefactoring(thisPackage, newPackageName);
-		RefactoringStatus result= performRefactoring(ref);
-		assertEquals("preconditions were supposed to pass", null, result);
-		
-		assertTrue("package not renamed", ! getRoot().getPackageFragment(packageNames[0]).exists());
-		IPackageFragment newPackage= getRoot().getPackageFragment(newPackageName);
-		assertTrue("new package does not exist", newPackage.exists());
-		assertTrue("new package should be read-only", newPackage.getCorrespondingResource().isReadOnly());
-	}
-	
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameParametersTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameParametersTests.java
deleted file mode 100644
index 50f3442..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameParametersTests.java
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenamePrivateFieldTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenamePrivateFieldTests.java
deleted file mode 100644
index 2804820..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenamePrivateFieldTests.java
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.runtime.NullProgressMonitor;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IType;
-
-import org.eclipse.jdt.ui.tests.refactoring.infra.TestExceptionHandler;
-
-import org.eclipse.jdt.internal.corext.codemanipulation.CodeGenerationSettings;
-import org.eclipse.jdt.internal.corext.refactoring.base.ChangeContext;
-import org.eclipse.jdt.internal.corext.refactoring.base.Refactoring;
-import org.eclipse.jdt.internal.corext.refactoring.base.RefactoringStatus;
-import org.eclipse.jdt.internal.corext.refactoring.rename.RenameFieldRefactoring;
-
-public class RenamePrivateFieldTests extends RefactoringTest {
-
-	private static final Class clazz= RenamePrivateFieldTests.class;
-	private static final String REFACTORING_PATH= "RenamePrivateField/";
-
-	public RenamePrivateFieldTests(String name) {
-		super(name);
-	}
-
-	public static Test suite() {
-		return new MySetup( new TestSuite(clazz));
-	}
-
-	protected String getRefactoringPath() {
-		return REFACTORING_PATH;
-	}
-
-	private CodeGenerationSettings getSettings(){
-		CodeGenerationSettings settings= new CodeGenerationSettings();
-		settings.createComments= true;
-		settings.createNonJavadocComments= true;
-		settings.importOrder= new String[]{"java", "javax", "com"};
-		settings.importThreshold= 99;
-		return settings;
-	}
-	
-	private String[] getPrefixes(){
-		return new String[]{"f", "fg", "_", "m_"};
-	}
-	
-	private String[] getSuffixes(){
-		return new String[0];
-	}
-	
-	private void helper1_0(String fieldName, String newFieldName, String typeName,
-							boolean renameGetter, boolean renameSetter) throws Exception{
-		IType declaringType= getType(createCUfromTestFile(getPackageP(), "A"), typeName);
-		RenameFieldRefactoring ref= new RenameFieldRefactoring(declaringType.getField(fieldName), getPrefixes(), getSuffixes());
-		ref.setNewName(newFieldName);
-		ref.setRenameGetter(renameGetter);
-		ref.setRenameSetter(renameSetter);
-		RefactoringStatus result= performRefactoring(ref);
-		assertNotNull("precondition was supposed to fail", result);
-	}
-	
-	private void helper1_0(String fieldName, String newFieldName) throws Exception{
-		helper1_0(fieldName, newFieldName, "A", false, false);
-	}
-
-	private void helper1() throws Exception{
-		helper1_0("f", "g");
-	}
-	
-	//--
-		
-	private void helper2(String fieldName, String newFieldName, boolean updateReferences,  boolean updateJavaDoc, 
-											boolean updateComments, boolean updateStrings,
-											boolean renameGetter, boolean renameSetter,
-											boolean expectedGetterRenameEnabled, boolean expectedSetterRenameEnabled) throws Exception{
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), "A");
-		IType classA= getType(cu, "A");
-		RenameFieldRefactoring ref= new RenameFieldRefactoring(classA.getField(fieldName), getPrefixes(), getSuffixes());
-		ref.setUpdateReferences(updateReferences);
-		ref.setUpdateJavaDoc(updateJavaDoc);
-		ref.setUpdateComments(updateComments);
-		ref.setUpdateStrings(updateStrings);
-		assertEquals("getter rename enabled", expectedGetterRenameEnabled, ref.canEnableGetterRenaming());
-		assertEquals("setter rename enabled", expectedSetterRenameEnabled, ref.canEnableSetterRenaming());
-		ref.setRenameGetter(renameGetter);
-		ref.setRenameSetter(renameSetter);
-		ref.setNewName(newFieldName);
-		
-		RefactoringStatus result= performRefactoring(ref);
-		assertEquals("was supposed to pass", null, result);
-		assertEquals("invalid renaming", getFileContents(getOutputTestFileName("A")), cu.getSource());
-		
-		assertTrue("anythingToUndo", Refactoring.getUndoManager().anythingToUndo());
-		assertTrue("! anythingToRedo", !Refactoring.getUndoManager().anythingToRedo());
-		
-		Refactoring.getUndoManager().performUndo(new ChangeContext(new TestExceptionHandler()), new NullProgressMonitor());
-		assertEquals("invalid undo", getFileContents(getInputTestFileName("A")), cu.getSource());
-
-		assertTrue("! anythingToUndo", !Refactoring.getUndoManager().anythingToUndo());
-		assertTrue("anythingToRedo", Refactoring.getUndoManager().anythingToRedo());
-		
-		Refactoring.getUndoManager().performRedo(new ChangeContext(new TestExceptionHandler()), new NullProgressMonitor());
-		assertEquals("invalid redo", getFileContents(getOutputTestFileName("A")), cu.getSource());
-	}
-
-	private void helper2(boolean updateReferences) throws Exception{
-		helper2("f", "g", updateReferences, false, false, false, false, false, false, false);
-	}
-	
-	private void helper2() throws Exception{
-		helper2(true);
-	}
-
-	//--------- tests ----------	
-	public void testFail0() throws Exception{
-		helper1();
-	}
-	
-	public void testFail1() throws Exception{
-		helper1();
-	}
-	
-	public void testFail2() throws Exception{
-		helper1();
-	}
-	
-	public void testFail3() throws Exception{
-		helper1();
-	}
-	
-	public void testFail4() throws Exception{
-		helper1();
-	}
-	
-	public void testFail5() throws Exception{
-		helper1();
-	}	
-	
-	public void testFail6() throws Exception{
-		helper1();
-	}
-	
-	public void testFail7() throws Exception{
-		helper1();
-	}
-	
-	public void testFail8() throws Exception{
-		helper1_0("gg", "f", "A", false, false);
-	}	
-
-	public void testFail9() throws Exception{
-		helper1_0("y", "e", "getE", true, true);
-	}	
-
-	public void testFail10() throws Exception{
-		helper1_0("y", "e", "setE", true, true);
-	}	
-	
-	// ------ 
-	public void test0() throws Exception{
-		helper2();
-	}
-	
-	public void test1() throws Exception{
-		helper2();
-	}
-
-	public void test2() throws Exception{
-		helper2(false);
-	}	
-	
-	public void test3() throws Exception{
-		helper2("f", "gg", true, true, true, true, false, false, false, false);
-	}	
-
-	public void test4() throws Exception{
-		helper2("fMe", "fYou", true, false, false, false, true, true, true, true);
-	}		
-	
-	public void test5() throws Exception{
-		//regression test for 9895
-		helper2("fMe", "fYou", true, false, false, false, true, false, true, false);
-	}		
-	
-	public void test6() throws Exception{
-		//regression test for 9895 - opposite case
-		helper2("fMe", "fYou", true, false, false, false, false, true, false, true);
-	}		
-
-	public void test7() throws Exception{
-		//regression test for 21292 
-		helper2("fBig", "fSmall", true, false, false, false, true, true, true, true);
-	}		
-	
-	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenamePrivateMethodTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenamePrivateMethodTests.java
deleted file mode 100644
index 2d4266d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenamePrivateMethodTests.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.runtime.NullProgressMonitor;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IType;
-
-import org.eclipse.jdt.ui.tests.refactoring.infra.TestExceptionHandler;
-
-import org.eclipse.jdt.internal.corext.refactoring.base.ChangeContext;
-import org.eclipse.jdt.internal.corext.refactoring.base.Refactoring;
-import org.eclipse.jdt.internal.corext.refactoring.base.RefactoringStatus;
-import org.eclipse.jdt.internal.corext.refactoring.rename.RenameMethodRefactoring;
-
-public class RenamePrivateMethodTests extends RefactoringTest {
-	
-	private static final Class clazz= RenamePrivateMethodTests.class;
-	private static final String REFACTORING_PATH= "RenamePrivateMethod/";
-
-	public RenamePrivateMethodTests(String name) {
-		super(name);
-	}
-
-	public static Test suite() {
-		return new MySetup(new TestSuite(clazz));
-	}
-
-	protected String getRefactoringPath() {
-		return REFACTORING_PATH;
-	}
-
-	private void helper1_0(String methodName, String newMethodName, String[] signatures) throws Exception{
-		IType classA= getType(createCUfromTestFile(getPackageP(), "A"), "A");
-		RenameMethodRefactoring ref= RenameMethodRefactoring.createInstance(classA.getMethod(methodName, signatures));
-		ref.setNewName(newMethodName);
-		RefactoringStatus result= performRefactoring(ref);
-		assertNotNull("precondition was supposed to fail", result);
-	}
-	
-	private void helper1() throws Exception{
-		helper1_0("m", "k", new String[0]);
-	}
-	
-	private void helper2_0(String methodName, String newMethodName, String[] signatures, boolean updateReferences) throws Exception{
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), "A");
-		IType classA= getType(cu, "A");
-		RenameMethodRefactoring ref= RenameMethodRefactoring.createInstance(classA.getMethod(methodName, signatures));
-		ref.setUpdateReferences(updateReferences);
-		ref.setNewName(newMethodName);
-		assertEquals("was supposed to pass", null, performRefactoring(ref));
-		assertEquals("invalid renaming", getFileContents(getOutputTestFileName("A")), cu.getSource());
-		
-		assertTrue("anythingToUndo", Refactoring.getUndoManager().anythingToUndo());
-		assertTrue("! anythingToRedo", !Refactoring.getUndoManager().anythingToRedo());
-		//assertEquals("1 to undo", 1, Refactoring.getUndoManager().getRefactoringLog().size());
-		
-		Refactoring.getUndoManager().performUndo(new ChangeContext(new TestExceptionHandler()), new NullProgressMonitor());
-		assertEquals("invalid undo", getFileContents(getInputTestFileName("A")), cu.getSource());
-
-		assertTrue("! anythingToUndo", !Refactoring.getUndoManager().anythingToUndo());
-		assertTrue("anythingToRedo", Refactoring.getUndoManager().anythingToRedo());
-		//assertEquals("1 to redo", 1, Refactoring.getUndoManager().getRedoStack().size());
-		
-		Refactoring.getUndoManager().performRedo(new ChangeContext(new TestExceptionHandler()), new NullProgressMonitor());
-		assertEquals("invalid redo", getFileContents(getOutputTestFileName("A")), cu.getSource());
-	}
-	
-	private void helper2_0(String methodName, String newMethodName, String[] signatures) throws Exception{
-		helper2_0(methodName, newMethodName, signatures, true);
-	}
-	
-	private void helper2(boolean updateReferences) throws Exception{
-		helper2_0("m", "k", new String[0], updateReferences);
-	}
-	
-	private void helper2() throws Exception{
-		helper2(true);
-	}
-
-	/******* tests ******************/
-	public void testFail0() throws Exception{
-		helper1();
-	}
-	
-	public void testFail1() throws Exception{
-		helper1();
-	}
-	
-	public void testFail2() throws Exception{
-		helper1();
-	}
-	
-	//testFail3 deleted
-	
-	//testFail4 deleted
-	
-	public void testFail5() throws Exception{
-		helper1();
-	}
-	
-	public void test0() throws Exception{
-		helper2();
-	}	
-	
-	public void test10() throws Exception{
-		helper2();
-	}	
-
-	public void test11() throws Exception{
-		helper2();
-	}	
-
-	public void test12() throws Exception{
-		helper2();
-	}	
-
-	public void test13() throws Exception{
-		helper2();
-	}	
-	
-	public void test14() throws Exception{
-		helper2();
-	}	
-
-	public void test15() throws Exception{
-		helper2_0("m", "k", new String[]{"I"});
-	}	
-
-	public void test16() throws Exception{
-		helper2_0("m", "fred", new String[]{"I"});
-	}	
-
-	public void test17() throws Exception{
-		helper2_0("m", "kk", new String[]{"I"});
-	}	
-
-	public void test18() throws Exception{
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), "A");
-		ICompilationUnit cuC= createCUfromTestFile(getPackageP(), "C");
-		
-		IType classB= getType(cu, "B");
-		RenameMethodRefactoring ref= RenameMethodRefactoring.createInstance(classB.getMethod("m", new String[]{"I"}));
-		ref.setNewName("kk");
-		
-		assertEquals("was supposed to pass", null, performRefactoring(ref));
-		assertEquals("invalid renaming A", getFileContents(getOutputTestFileName("A")), cu.getSource());
-		assertEquals("invalid renaming C", getFileContents(getOutputTestFileName("C")), cuC.getSource());
-		
-	}
-
-	public void test2() throws Exception{
-		helper2_0("m", "fred", new String[0]);
-	}	
-
-	public void test20() throws Exception{
-		helper2_0("m", "fred", new String[]{"I"});
-	}	
-
-	public void test23() throws Exception{
-		helper2_0("m", "k", new String[0]);
-	}			
-
-	public void test24() throws Exception{
-		helper2_0("m", "k", new String[]{"QString;"});
-	}	
-	
-	public void test25() throws Exception{
-		helper2_0("m", "k", new String[]{"[QString;"});
-	}
-	
-	public void test26() throws Exception{
-		helper2_0("m", "k", new String[0]);
-	}
-	
-	public void test27() throws Exception{
-		helper2_0("m", "k", new String[0], false);
-	}
-
-	public void testAnon0() throws Exception{
-		helper2();
-	}			
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameResourceChangeTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameResourceChangeTests.java
deleted file mode 100644
index 631c732..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameResourceChangeTests.java
+++ /dev/null
@@ -1,183 +0,0 @@
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import java.io.InputStream;
-import java.io.StringBufferInputStream;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.runtime.NullProgressMonitor;
-
-import org.eclipse.jdt.internal.corext.refactoring.base.IChange;
-import org.eclipse.jdt.internal.corext.refactoring.changes.RenameResourceChange;
-
-public class RenameResourceChangeTests extends RefactoringTest {
-	
-	private static final Class clazz= RenameResourceChangeTests.class;
-	public RenameResourceChangeTests(String name) {
-		super(name);
-	}
-	
-	public static Test suite() {
-		return new MySetup(new TestSuite(clazz));
-	}
-	
-	private static InputStream getStream(String content){
-		return new StringBufferInputStream(content);
-	}
-	
-	public void testFile0() throws Exception{
-		IFolder folder= (IFolder)getPackageP().getCorrespondingResource();	
-		String newName= "b.txt";
-		try{
-			
-			String oldName= "a.txt";
-			IFile file= folder.getFile(oldName);
-			assertTrue("should not exist", ! file.exists());
-			String content= "aaaaaaaaa";
-			file.create(getStream(content), true, new NullProgressMonitor());
-			assertTrue("should exist", file.exists());
-			
-			IChange change= new RenameResourceChange(file, newName);
-			performChange(change);
-			assertTrue("after: should exist", folder.getFile(newName).exists());
-			assertTrue("after: old should not exist", ! folder.getFile(oldName).exists());
-		} finally{	
-			performDummySearch();
-			folder.getFile(newName).delete(true, false, new NullProgressMonitor());
-		}	
-	}
-	
-	public void testFile1() throws Exception{
-		
-		IFolder folder= (IFolder)getPackageP().getCorrespondingResource();	
-		String newName= "b.txt";
-		try{
-			String oldName= "a.txt";
-			IFile file= folder.getFile(oldName);
-			assertTrue("should not exist", ! file.exists());
-			String content= "";
-			file.create(getStream(content), true, new NullProgressMonitor());
-			assertTrue("should exist", file.exists());
-			
-			
-			IChange change= new RenameResourceChange(file, newName);
-			performChange(change);
-			assertTrue("after: should exist", folder.getFile(newName).exists());
-			assertTrue("after: old should not exist", ! folder.getFile(oldName).exists());
-		} finally{	
-			performDummySearch();
-			folder.getFile(newName).delete(true, false, new NullProgressMonitor());
-		}	
-	}
-	
-	public void testFile2() throws Exception{
-		IFolder folder= (IFolder)getPackageP().getCorrespondingResource();	
-		String oldName= "a.txt";
-		String newName= "b.txt";
-		try{ 
-			IFile file= folder.getFile(oldName);
-			assertTrue("should not exist", ! file.exists());
-			String content= "aaaaaaaaa";
-			file.create(getStream(content), true, new NullProgressMonitor());
-			assertTrue("should exist", file.exists());
-			
-			IChange change= new RenameResourceChange(file, newName);
-			performChange(change);
-			assertTrue("after: should exist", folder.getFile(newName).exists());
-			assertTrue("after: old should not exist", ! folder.getFile(oldName).exists());
-			//------
-			
-			assertTrue("should be undoable", change.isUndoable());	
-			IChange undoChange= change.getUndoChange();
-			performChange(undoChange);
-			assertTrue("after undo: should exist", folder.getFile(oldName).exists());
-			assertTrue("after undo: old should not exist", ! folder.getFile(newName).exists());
-		} finally{		
-			performDummySearch();
-			folder.getFile(oldName).delete(true, false, new NullProgressMonitor());
-		}	
-	}
-	
-	
-	public void testFolder0() throws Exception{
-		IFolder folder= (IFolder)getPackageP().getCorrespondingResource();	
-		String newName= "b";
-		try{
-			String oldName= "a";
-			IFolder subFolder= folder.getFolder(oldName);
-			assertTrue("should not exist", ! subFolder.exists());
-			subFolder.create(true, true, null);
-			assertTrue("should exist", subFolder.exists());
-			
-			
-			IChange change= new RenameResourceChange(subFolder, newName);
-			performChange(change);
-			assertTrue("after: should exist", folder.getFolder(newName).exists());
-			assertTrue("after: old should not exist", ! folder.getFolder(oldName).exists());
-		} finally{	
-			performDummySearch();
-			folder.getFolder(newName).delete(true, false, new NullProgressMonitor());
-		}	
-	}
-	
-	public void testFolder1() throws Exception{
-		IFolder folder= (IFolder)getPackageP().getCorrespondingResource();	
-		String newName= "b";
-		
-		try{
-			String oldName= "a";
-			IFolder subFolder= folder.getFolder(oldName);
-			assertTrue("should not exist", ! subFolder.exists());
-			subFolder.create(true, true, null);
-			IFile file1= subFolder.getFile("a.txt");
-			IFile file2= subFolder.getFile("b.txt");
-			file1.create(getStream("123"), true, null);
-			file2.create(getStream("123345"), true, null);
-			
-			assertTrue("should exist", subFolder.exists());
-			assertTrue("file1 should exist", file1.exists());
-			assertTrue("file2 should exist", file2.exists());
-			
-			IChange change= new RenameResourceChange(subFolder, newName);
-			performChange(change);
-			assertTrue("after: should exist", folder.getFolder(newName).exists());
-			assertTrue("after: old should not exist", ! folder.getFolder(oldName).exists());
-			assertEquals("after: child count", 2, folder.getFolder(newName).members().length);
-		} finally{	
-			performDummySearch();
-			folder.getFolder(newName).delete(true, false, new NullProgressMonitor());
-		}	
-	}	
-	
-	public void testFolder2() throws Exception{
-		IFolder folder= (IFolder)getPackageP().getCorrespondingResource();	
-		String oldName= "a";
-		String newName= "b";
-		try{
-			IFolder subFolder= folder.getFolder(oldName);
-			assertTrue("should not exist", ! subFolder.exists());
-			subFolder.create(true, true, null);
-			assertTrue("should exist", subFolder.exists());
-			
-			
-			IChange change= new RenameResourceChange(subFolder, newName);
-			performChange(change);
-			assertTrue("after: should exist", folder.getFolder(newName).exists());
-			assertTrue("after: old should not exist", ! folder.getFolder(oldName).exists());
-		
-			//---
-			assertTrue("should be undoable", change.isUndoable());	
-			IChange undoChange= change.getUndoChange();
-			performChange(undoChange);
-			assertTrue("after undo: should exist", folder.getFolder(oldName).exists());
-			assertTrue("after undo: old should not exist", ! folder.getFolder(newName).exists());
-		} finally{		
-			performDummySearch();
-			folder.getFolder(oldName).delete(true, false, new NullProgressMonitor());
-		}
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameSourceFolderChangeTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameSourceFolderChangeTests.java
deleted file mode 100644
index 2f3b69f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameSourceFolderChangeTests.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-
-import org.eclipse.jdt.internal.corext.refactoring.changes.RenameSourceFolderChange;
-
-
-public class RenameSourceFolderChangeTests extends RefactoringTest {
-	
-	private static final Class clazz= RenameSourceFolderChangeTests.class;
-
-	public RenameSourceFolderChangeTests(String name){
-		super(name);
-	}
-	
-	public static Test suite() {
-		return new MySetup(new TestSuite(clazz));
-	}
-	
-	public void test0() throws Exception {
-		String oldName= "oldName";
-		String newName= "newName";
-		
-		try{
-			IJavaProject testProject= MySetup.getProject();
-			IPackageFragmentRoot oldRoot= JavaProjectHelper.addSourceContainer(MySetup.getProject(), oldName);
-			
-			assertTrue("old folder should exist here", oldRoot.exists());
-			
-			RenameSourceFolderChange change= new RenameSourceFolderChange(oldRoot, newName);
-			performChange(change);
-			
-			assertTrue("old folder should not exist", ! oldRoot.exists());
-			assertEquals("expected 3 pfr's", 3, testProject.getPackageFragmentRoots().length);
-			IPackageFragmentRoot[] newRoots= testProject.getPackageFragmentRoots();
-			for (int i= 0; i < newRoots.length; i++){
-				assertTrue("should exist " + i, newRoots[i].exists());
-			}
-		} finally{
-			JavaProjectHelper.removeSourceContainer(MySetup.getProject(), newName);
-		}	
-	}
-	
-	public void test1() throws Exception {
-		String oldName1= "oldName1";
-		String oldName2= "oldName2";
-		String newName1= "newName";
-		
-		try{
-			
-			IJavaProject testProject= MySetup.getProject();
-			IPackageFragmentRoot oldRoot1= JavaProjectHelper.addSourceContainer(MySetup.getProject(), oldName1);
-			IPackageFragmentRoot oldRoot2= JavaProjectHelper.addSourceContainer(MySetup.getProject(), oldName2);
-			
-			assertTrue("old folder should exist here", oldRoot1.exists());
-			assertTrue("old folder 2 should exist here", oldRoot2.exists());
-			
-			RenameSourceFolderChange change= new RenameSourceFolderChange(oldRoot1, newName1);
-			performChange(change);
-			
-			assertTrue("old folder should not exist", ! oldRoot1.exists());
-			assertEquals("expected 4 pfr's", 4, testProject.getPackageFragmentRoots().length);
-			IPackageFragmentRoot[] newRoots= testProject.getPackageFragmentRoots();
-			for (int i= 0; i < newRoots.length; i++){
-				//DebugUtils.dump(newRoots[i].getElementName());
-				assertTrue("should exist " + i, newRoots[i].exists());
-				if (i == 2)
-					assertEquals("3rd position should be:" + newName1, newName1, newRoots[i].getElementName());
-			} 
-		}finally{		
-			JavaProjectHelper.removeSourceContainer(MySetup.getProject(), newName1);
-			JavaProjectHelper.removeSourceContainer(MySetup.getProject(), oldName2);
-		}	
-	}
-	
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameStaticMethodTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameStaticMethodTests.java
deleted file mode 100644
index 9e71498..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameStaticMethodTests.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.runtime.NullProgressMonitor;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.Signature;
-
-import org.eclipse.jdt.ui.tests.refactoring.infra.TestExceptionHandler;
-
-import org.eclipse.jdt.internal.corext.refactoring.base.ChangeContext;
-import org.eclipse.jdt.internal.corext.refactoring.base.Refactoring;
-import org.eclipse.jdt.internal.corext.refactoring.base.RefactoringStatus;
-import org.eclipse.jdt.internal.corext.refactoring.rename.RenameMethodRefactoring;
-
-public class RenameStaticMethodTests extends RefactoringTest {
-	private static final Class clazz= RenameStaticMethodTests.class;
-	private static final String REFACTORING_PATH= "RenameStaticMethod/";
-
-	public RenameStaticMethodTests(String name) {
-		super(name);
-	}
-
-	public static Test suite() {
-		return new MySetup(new TestSuite(clazz));
-	}
-
-	protected String getRefactoringPath() {
-		return REFACTORING_PATH;
-	}
-
-	private void helper1_0(String methodName, String newMethodName, String[] signatures) throws Exception{
-			IType classA= getType(createCUfromTestFile(getPackageP(), "A"), "A");
-		try{
-			RenameMethodRefactoring ref= RenameMethodRefactoring.createInstance(classA.getMethod(methodName, signatures));
-			ref.setNewName(newMethodName);
-			RefactoringStatus result= performRefactoring(ref);
-			assertNotNull("precondition was supposed to fail", result);
-		} finally{
-			performDummySearch();
-			classA.getCompilationUnit().delete(true, null);
-		}	
-	}
-	
-	private void helper1() throws Exception{
-		helper1_0("m", "k", new String[0]);
-	}
-	
-	private void helper2_0(String methodName, String newMethodName, String[] signatures, boolean updateReferences) throws Exception{
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), "A");
-		try{
-			IType classA= getType(cu, "A");
-			RenameMethodRefactoring ref= RenameMethodRefactoring.createInstance(classA.getMethod(methodName, signatures));
-			ref.setUpdateReferences(updateReferences);
-			ref.setNewName(newMethodName);
-			assertEquals("was supposed to pass", null, performRefactoring(ref));
-			assertEquals("invalid renaming", getFileContents(getOutputTestFileName("A")), cu.getSource());
-			
-			assertTrue("anythingToUndo", Refactoring.getUndoManager().anythingToUndo());
-			assertTrue("! anythingToRedo", !Refactoring.getUndoManager().anythingToRedo());
-			//assertEquals("1 to undo", 1, Refactoring.getUndoManager().getRefactoringLog().size());
-			
-			Refactoring.getUndoManager().performUndo(new ChangeContext(new TestExceptionHandler()), new NullProgressMonitor());
-			assertEquals("invalid undo", getFileContents(getInputTestFileName("A")), cu.getSource());
-	
-			assertTrue("! anythingToUndo", !Refactoring.getUndoManager().anythingToUndo());
-			assertTrue("anythingToRedo", Refactoring.getUndoManager().anythingToRedo());
-			//assertEquals("1 to redo", 1, Refactoring.getUndoManager().getRedoStack().size());
-			
-			Refactoring.getUndoManager().performRedo(new ChangeContext(new TestExceptionHandler()), new NullProgressMonitor());
-			assertEquals("invalid redo", getFileContents(getOutputTestFileName("A")), cu.getSource());
-		} finally{
-			performDummySearch();
-			cu.delete(true, null);
-		}
-	}
-	private void helper2_0(String methodName, String newMethodName, String[] signatures) throws Exception{
-		helper2_0(methodName, newMethodName, signatures, true);
-	}
-	
-	private void helper2(boolean updateReferences) throws Exception{
-		helper2_0("m", "k", new String[0], updateReferences);
-	}
-	
-	private void helper2() throws Exception{
-		helper2(true);
-	}
-
-	/********** tests *********/
-	public void testFail0() throws Exception{
-		helper1();
-	}
-	
-	public void testFail1() throws Exception{
-		helper1();
-	}
-	
-	public void testFail2() throws Exception{
-		helper1();
-	}
-	
-	//testFail3 deleted
-	
-	public void testFail4() throws Exception{
-		helper1();
-	}
-	
-	public void testFail5() throws Exception{
-		helper1();
-	}
-	
-	public void testFail6() throws Exception{
-		helper1();
-	}
-	
-	public void testFail7() throws Exception{
-		helper1();
-	}
-	
-	public void testFail8() throws Exception{
-		helper1();
-	}
-	
-	public void test0() throws Exception{
-		helper2();
-	}
-	
-	public void test1() throws Exception{
-		helper2();
-	}
-	
-	public void test2() throws Exception{
-		helper2();
-	}
-	
-	public void test3() throws Exception{
-		helper2();
-	}
-	
-	public void test4() throws Exception{
-		helper2();
-	}
-	
-	public void test5() throws Exception{
-		helper2();
-	}
-	
-	public void test6() throws Exception{
-		helper2();
-	}
-	
-	public void test7() throws Exception{
-		helper2_0("m", "k", new String[]{Signature.SIG_INT});
-	}
-	
-	public void test8() throws Exception{
-		helper2_0("m", "k", new String[]{Signature.SIG_INT});
-	}
-	
-	public void test9() throws Exception{
-		helper2_0("m", "k", new String[]{Signature.SIG_INT}, false);
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameTempTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameTempTests.java
deleted file mode 100644
index 6f9b17f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameTempTests.java
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameTypeTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameTypeTests.java
deleted file mode 100644
index f17e387..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameTypeTests.java
+++ /dev/null
@@ -1,961 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.boot.BootLoader;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.NullProgressMonitor;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IType;
-
-import org.eclipse.jdt.internal.corext.refactoring.base.IRefactoring;
-import org.eclipse.jdt.internal.corext.refactoring.base.RefactoringStatus;
-import org.eclipse.jdt.internal.corext.refactoring.rename.RenameTypeRefactoring;
-import org.eclipse.jdt.internal.corext.refactoring.util.DebugUtils;
-
-
-public class RenameTypeTests extends RefactoringTest {
-	
-	private static final Class clazz= RenameTypeTests.class;
-	private static final String REFACTORING_PATH= "RenameType/";
-	
-	public RenameTypeTests(String name) {
-		super(name);
-	}
-	
-	public static Test suite() {
-		return new MySetup(new TestSuite(clazz));
-	}
-	
-	protected String getRefactoringPath() {
-		return REFACTORING_PATH;
-	}
-		
-	/******* shortcuts **********/
-	
-	private IType getClassFromTestFile(IPackageFragment pack, String className) throws Exception{
-		return getType(createCUfromTestFile(pack, className), className);
-	}
-		
-	private RenameTypeRefactoring createRefactoring(IType type, String newName){
-		RenameTypeRefactoring ref= new RenameTypeRefactoring(type);
-		ref.setNewName(newName);
-		return ref;
-	}
-	
-	private void helper1_0(String className, String newName) throws Exception{
-		IType classA= getClassFromTestFile(getPackageP(), className);
-		IRefactoring ref= createRefactoring(classA, newName);
-		RefactoringStatus result= performRefactoring(ref);
-		assertNotNull("precondition was supposed to fail", result);
-		if (fIsVerbose)
-			DebugUtils.dump("result: " + result);
-	}
-	
-	private void helper1() throws Exception{
-		helper1_0("A", "B");
-	}
-		
-	private void helper2_0(String oldCuName, String oldName, String newName, String newCUName, boolean updateReferences, boolean updateJavaDoc, 
-											boolean updateComments, boolean updateStrings) throws Exception{
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), oldCuName);
-		IPath path= cu.getUnderlyingResource().getFullPath();
-		IType classA= getType(cu, oldName);
-		
-		IPackageFragment pack= (IPackageFragment)cu.getParent();
-		RenameTypeRefactoring ref= createRefactoring(classA, newName);
-		ref.setUpdateReferences(updateReferences);
-		ref.setUpdateJavaDoc(updateJavaDoc);
-		ref.setUpdateComments(updateComments);
-		ref.setUpdateStrings(updateStrings);
-		assertEquals("was supposed to pass", null, performRefactoring(ref));
-		ICompilationUnit newcu= pack.getCompilationUnit(newCUName + ".java");
-		assertTrue("cu " + newcu.getElementName()+ " does not exist", newcu.exists());
-		assertEquals("invalid renaming", getFileContents(getOutputTestFileName(newCUName)), newcu.getSource());	
-	}
-	
-	private void helper2_0(String oldName, String newName, String newCUName, boolean updateReferences) throws Exception{
-		helper2_0(oldName, oldName, newName, newCUName, updateReferences, false, false, false);
-	}
-	
-	private void helper2_0(String oldName, String newName, String newCUName) throws Exception{
-		helper2_0(oldName, newName, newCUName, true);
-	}
-	
-	private void helper2(String oldName, String newName, boolean updateReferences) throws Exception{
-		helper2_0(oldName, newName, newName, updateReferences);
-	}
-
-	private void helper2(String oldName, String newName) throws Exception{
-		helper2_0(oldName, newName, newName, true);
-	}
-				
-	/****** tests ***********/
-	
-	public void testIllegalInnerClass() throws Exception {
-		helper1();
-	}
-	
-	public void testIllegalTypeName1() throws Exception {
-		helper1_0("A", "X ");
-	}
-	
-	public void testIllegalTypeName2() throws Exception {
-		helper1_0("A", " X");
-	}
-	
-	public void testIllegalTypeName3() throws Exception {
-		helper1_0("A", "34");
-	}
-
-	public void testIllegalTypeName4() throws Exception {
-		helper1_0("A", "this");
-	}
-
-	public void testIllegalTypeName5() throws Exception {
-		helper1_0("A", "fred");
-	}
-	
-	public void testIllegalTypeName6() throws Exception {
-		helper1_0("A", "class");
-	}
-	
-	public void testIllegalTypeName7() throws Exception {
-		helper1_0("A", "A.B");
-	}
-
-	public void testIllegalTypeName8() throws Exception {
-		helper1_0("A", "A$B");
-	}
-	
-	public void testIllegalTypeName9() throws Exception {
-		if (BootLoader.getOS().equals(BootLoader.OS_WIN32))
-			helper1_0("A", "aux");
-	}
-
-	public void testNoOp() throws Exception {
-		helper1_0("A", "A");
-	}
-
-	public void testWrongArg1() throws Exception {
-		helper1_0("A", "");
-	}
-	
-	public void testFail0() throws Exception {
-		helper1();
-	}
-	
-	public void testFail1() throws Exception {
-		helper1();
-	}
-
-	public void testFail2() throws Exception {
-		helper1();
-	}
-	
-	public void testFail3() throws Exception {
-		helper1();
-	}
-	
-	public void testFail4() throws Exception {
-		IType classA= getClassFromTestFile(getPackageP(), "A");
-		getClassFromTestFile(getPackageP(), "B");
-		RefactoringStatus result= performRefactoring(createRefactoring(classA, "B"));
-		assertNotNull("precondition was supposed to fail", result);
-	}
-		
-	public void testFail5() throws Exception {
-		IType classA= getClassFromTestFile(getPackageP(), "A");
-		getClassFromTestFile(getPackageP(), "B");
-		getClassFromTestFile(getPackageP(), "C");
-
-		RefactoringStatus result= performRefactoring(createRefactoring(classA, "B"));
-		assertNotNull("precondition was supposed to fail", result);
-	}
-
-	public void testFail6() throws Exception {
-		IType classA= getClassFromTestFile(getPackageP(), "A");
-		getClassFromTestFile(getPackageP(), "B");
-		getClassFromTestFile(getPackageP(), "C");
-
-		RefactoringStatus result= performRefactoring(createRefactoring(classA, "B"));
-		assertNotNull("precondition was supposed to fail", result);
-	}
-	
-	public void testFail7() throws Exception {
-		helper1();
-	}
-	
-	public void testFail8() throws Exception {
-		IType classA= getClassFromTestFile(getPackageP(), "A");
-		getClassFromTestFile(getPackageP(), "B");
-
-		RefactoringStatus result= performRefactoring(createRefactoring(classA, "B"));
-		assertNotNull("precondition was supposed to fail", result);
-	}
-	
-	public void testFail9() throws Exception {
-		helper1();
-	}
-	
-	public void testFail10() throws Exception {
-		helper1();
-	}
-
-	public void testFail11() throws Exception {
-		helper1();
-	}
-
-	public void testFail12() throws Exception {
-		helper1();
-	}
-
-	public void testFail16() throws Exception {
-		helper1();
-	}
-
-	public void testFail17() throws Exception {
-		helper1();
-	}
-
-	public void testFail18() throws Exception {
-		helper1();
-	}
-
-	public void testFail19() throws Exception {
-		helper1();
-	}
-
-	public void testFail20() throws Exception {
-		IPackageFragment packageP1= getRoot().createPackageFragment("p1", true, null);
-		IPackageFragment packageP2= getRoot().createPackageFragment("p2", true, null);
-
-		IType classA= getClassFromTestFile(packageP1, "A");
-		IType classAA= getClassFromTestFile(packageP2, "AA");
-
-		RefactoringStatus result= performRefactoring(createRefactoring(classA, "B"));
-		assertNotNull("precondition was supposed to fail", result);
-	}
-
-	public void testFail22() throws Exception {
-		IType classA= getClassFromTestFile(getPackageP(), "A");
-		getClassFromTestFile(getPackageP(), "B");
-
-		RefactoringStatus result= performRefactoring(createRefactoring(classA, "B"));
-		assertNotNull("precondition was supposed to fail", result);
-	}
-
-	public void testFail23() throws Exception {
-		IPackageFragment packageP1= getRoot().createPackageFragment("p1", true, null);
-		IPackageFragment packageP2= getRoot().createPackageFragment("p2", true, null);
-		IPackageFragment packageP3= getRoot().createPackageFragment("p3", true, null);
-
-		IType classA= getClassFromTestFile(packageP1, "A");
-		getClassFromTestFile(packageP3, "B");
-		getClassFromTestFile(packageP2, "Bogus");
-
-		RefactoringStatus result= performRefactoring(createRefactoring(classA, "B"));
-		assertNotNull("precondition was supposed to fail", result);
-	}
-
-	public void testFail24() throws Exception {
-		IPackageFragment packageP1= getRoot().createPackageFragment("p1", true, null);
-		IPackageFragment packageP2= getRoot().createPackageFragment("p2", true, null);
-
-		IType classA= getClassFromTestFile(packageP1, "A");
-		getClassFromTestFile(packageP2, "B");
-
-		RefactoringStatus result= performRefactoring(createRefactoring(classA, "B"));
-		assertNotNull("precondition was supposed to fail", result);
-	}
-
-	public void testFail25() throws Exception {
-		IPackageFragment packageP1= getRoot().createPackageFragment("p1", true, null);
-		IPackageFragment packageP2= getRoot().createPackageFragment("p2", true, null);
-
-		IType classA= getClassFromTestFile(packageP1, "A");
-		getClassFromTestFile(packageP2, "B");
-
-		RefactoringStatus result= performRefactoring(createRefactoring(classA, "B"));
-		assertNotNull("precondition was supposed to fail", result);
-	}
-
-	public void testFail26() throws Exception {
-		IPackageFragment packageP1= getRoot().createPackageFragment("p1", true, null);
-		IPackageFragment packageP2= getRoot().createPackageFragment("p2", true, null);
-
-		IType classA= getClassFromTestFile(packageP1, "A");
-		getClassFromTestFile(packageP2, "B");
-
-		RefactoringStatus result= performRefactoring(createRefactoring(classA, "B"));
-		assertNotNull("precondition was supposed to fail", result);
-	}
-
-	public void testFail27() throws Exception {
-		IPackageFragment packageP1= getRoot().createPackageFragment("p1", true, null);
-		IPackageFragment packageP2= getRoot().createPackageFragment("p2", true, null);
-
-		IType classA= getClassFromTestFile(packageP1, "A");
-		getClassFromTestFile(packageP2, "B");
-
-		RefactoringStatus result= performRefactoring(createRefactoring(classA, "B"));
-		assertNotNull("precondition was supposed to fail", result);
-	}
-	
-	public void testFail28() throws Exception {
-		printTestDisabledMessage("obscuring");
-//		helper1();
-	}
-	
-	public void testFail29() throws Exception {
-		printTestDisabledMessage("obscuring");
-//		helper1();
-	}
-	
-	public void testFail30() throws Exception {
-		printTestDisabledMessage("obscuring");
-//		helper1();
-	}
-	
-	public void testFail31() throws Exception {
-		IPackageFragment packageP1= getRoot().createPackageFragment("p1", true, null);
-		IPackageFragment packageP2= getRoot().createPackageFragment("p2", true, null);
-		IPackageFragment packageP3= getRoot().createPackageFragment("p3", true, null);
-
-		IType classA= getClassFromTestFile(packageP1, "A");
-		getClassFromTestFile(packageP2, "B");
-		getClassFromTestFile(packageP3, "C");
-
-		RefactoringStatus result= performRefactoring(createRefactoring(classA, "B"));
-		assertNotNull("precondition was supposed to fail", result);
-	}
-
-	public void testFail32() throws Exception {
-		IType classA= getClassFromTestFile(getPackageP(), "A");
-		IPackageFragment packageP1= getRoot().createPackageFragment("p1", true, null);
-		getClassFromTestFile(packageP1, "B");
-		
-		RefactoringStatus result= performRefactoring(createRefactoring(classA, "B"));
-		assertNotNull("precondition was supposed to fail", result);
-	}
-	
-	public void testFail33() throws Exception {
-		helper1();
-	}
-
-	public void testFail34() throws Exception {
-		printTestDisabledMessage("obscuring");
-//		helper1();
-	}
-	
-	public void testFail35() throws Exception {
-		printTestDisabledMessage("obscuring");
-//		helper1();
-	}
-	
-	public void testFail36() throws Exception {
-		printTestDisabledMessage("obscuring");
-//		helper1();
-	}
-		
-	public void testFail37() throws Exception {
-		IType classA= getClassFromTestFile(getPackageP(), "A");
-		getClassFromTestFile(getPackageP(), "B");
-		
-		RefactoringStatus result= performRefactoring(createRefactoring(classA, "B"));
-		assertNotNull("precondition was supposed to fail", result);
-	}
-	
-	public void testFail38() throws Exception {
-		helper1();
-	}
-	
-	public void testFail39() throws Exception {
-		helper1();
-	}
-	
-	public void testFail40() throws Exception {
-		helper1();
-	}
-	
-	public void testFail41() throws Exception {
-		printTestDisabledMessage("obscuring");
-//		helper1();
-	}
-	
-	public void testFail42() throws Exception {
-		printTestDisabledMessage("obscuring");
-//		helper1();
-	}
-
-	public void testFail43() throws Exception {
-		printTestDisabledMessage("obscuring");
-//		helper1();
-	}
-
-	public void testFail44() throws Exception {
-		printTestDisabledMessage("obscuring");
-//		helper1();
-	}
-	
-	public void testFail45() throws Exception {
-		printTestDisabledMessage("obscuring");
-//		helper1();
-	}
-	
-	public void testFail46() throws Exception {
-		printTestDisabledMessage("obscuring");
-//		helper1();
-	}
-	
-	public void testFail47() throws Exception {
-		printTestDisabledMessage("obscuring");
-//		helper1();
-	}
-	
-	public void testFail48() throws Exception {
-		helper1();
-	}
-	
-	public void testFail49() throws Exception {
-		helper1();
-	}
-	
-	public void testFail50() throws Exception {
-		helper1();
-	}
-
-	public void testFail51() throws Exception {
-		helper1();
-	}
-
-	public void testFail52() throws Exception {
-		helper1();
-	}
-	
-	public void testFail53() throws Exception {
-		helper1();
-	}
-	
-	public void testFail54() throws Exception {
-		helper1();
-	}
-	
-	public void testFail55() throws Exception {
-		helper1();
-	}
-	
-	public void testFail56() throws Exception {
-		helper1();
-	}
-	
-	public void testFail57() throws Exception {
-		helper1();
-	}
-	
-	public void testFail58() throws Exception {
-		helper1();
-	}
-
-	public void testFail59() throws Exception {
-		helper1();
-	}
-
-	public void testFail60() throws Exception {
-		helper1();
-	}
-	
-	public void testFail61() throws Exception {
-		helper1();
-	}
-	
-	public void testFail62() throws Exception {
-		helper1();
-	}
-	
-	public void testFail63() throws Exception {
-		helper1();
-	}
-	
-	public void testFail64() throws Exception {
-		helper1();
-	}
-	
-	public void testFail65() throws Exception {
-		helper1();
-	}
-	
-	public void testFail66() throws Exception {
-		helper1();
-	}
-
-	public void testFail67() throws Exception {
-		helper1();
-	}
-
-	public void testFail68() throws Exception {
-		helper1();
-	}
-	
-	public void testFail69() throws Exception {
-		helper1();
-	}
-	
-	public void testFail70() throws Exception {
-		helper1();
-	}
-	
-	public void testFail71() throws Exception {
-		helper1();
-	}
-	
-	public void testFail72() throws Exception {
-		helper1();
-	}
-	
-	public void testFail73() throws Exception {
-		helper1();
-	}
-	
-	public void testFail74() throws Exception {
-		helper1();
-	}
-	
-	public void testFail75() throws Exception {
-		helper1();
-	}
-	
-	public void testFail76() throws Exception {
-		helper1();
-	}
-
-	public void testFail77() throws Exception {
-		helper1();
-	}
-
-	public void testFail78() throws Exception {
-		helper1();
-	}
-	
-	public void testFail79() throws Exception {
-		helper1();
-	}
-
-	public void testFail80() throws Exception {
-		helper1();
-	}
-	
-	public void testFail81() throws Exception {
-		helper1();
-	}
-	
-	public void testFail82() throws Exception {
-		helper1();
-	}
-	
-	public void testFail83() throws Exception {
-		helper1_0("A", "Cloneable");
-	}
-	
-	public void testFail84() throws Exception {
-		helper1_0("A", "List");
-	}
-	
-	public void testFail85() throws Exception {
-		helper1();
-	}
-	
-	public void testFail86() throws Exception {
-		printTestDisabledMessage("native method with A as parameter (same CU)");
-//		helper1();
-	}
-
-	public void testFail87() throws Exception {
-		printTestDisabledMessage("native method with A as parameter (same CU)");
-//		helper1();
-	}
-	
-	public void testFail88() throws Exception {
-		helper1();
-	}
-	
-	public void testFail89() throws Exception {
-		helper1();
-	}
-	
-	public void testFail90() throws Exception {
-		helper1();
-	}
-	
-	public void testFail91() throws Exception {
-		helper1();
-	}
-
-	public void testFail92() throws Exception {
-//		printTestDisabledMessage("needs fixing - double nested local type named B");
-		helper1();
-	}
-
-	public void testFail93() throws Exception {
-//		printTestDisabledMessage("needs fixing - double nested local type named B");
-		helper1();
-	}
-	
-	public void testFail94() throws Exception {
-		helper1();
-	}
-	
-	public void testFail95() throws Exception {
-		helper1();
-	}
-
-	public void testFail00() throws Exception {
-		helper1();
-	}
-	
-	public void testFail01() throws Exception {
-		helper1_0("A", "B");
-	}
-
-	public void testFail02() throws Exception {
-		helper1();
-	}
-
-	public void testFail03() throws Exception {
-		helper1_0("A", "C");
-	}
-
-	public void testFail04() throws Exception {
-		helper1_0("A", "A");
-	}
-	
-	public void testFailRegression1GCRKMQ() throws Exception {
-		IPackageFragment myPackage= getRoot().createPackageFragment("", true, new NullProgressMonitor());
-		IType myClass= getClassFromTestFile(myPackage, "Blinky");
-		
-		RefactoringStatus result= performRefactoring(createRefactoring(myClass, "B"));
-		assertNotNull("precondition was supposed to fail", result);
-	}
-	
-	/******************/
-	
-	public void test0() throws Exception { 
-		helper2("A", "B");
-	}
-	
-	public void test1() throws Exception { 
-		helper2("A", "B");
-	}
-	
-	public void test10() throws Exception { 
-		helper2("A", "B");
-	}
-	
-	public void test12() throws Exception { 
-		helper2("A", "B");
-	}
-	
-	public void test13() throws Exception { 
-		helper2("A", "B");
-	}
-	
-	public void test14() throws Exception { 
-		helper2("A", "B");		
-	}
-	
-	public void test15() throws Exception { 
-		helper2("A", "B");		
-	}
-	
-	public void test16() throws Exception { 
-		helper2("A", "B");		
-	}
-	
-	public void test17() throws Exception { 
-		helper2("A", "B");		
-	}
-	
-	public void test18() throws Exception { 
-		helper2("A", "B");		
-	}
-	
-	public void test19() throws Exception { 
-		helper2("A", "B");		
-	}
-	
-	public void test2() throws Exception { 
-		helper2("A", "B");		
-	}
-	
-	public void test20() throws Exception { 
-		//printTestDisabledMessage("failb because of bug#9479");
-		//if (true)
-		//	return;
-		IPackageFragment packageA= getRoot().createPackageFragment("A", true, null);
-		
-		ICompilationUnit cu= createCUfromTestFile(packageA, "A");
-		IType classA= getType(cu, "A");
-		
-		IRefactoring ref= createRefactoring(classA, "B");
-		
-		assertEquals("was supposed to pass", null, performRefactoring(ref));
-		
-		ICompilationUnit newcu= packageA.getCompilationUnit("B.java");
-		assertEquals("invalid renaming", getFileContents(getOutputTestFileName("B")), newcu.getSource());
-	}
-	
-	public void test21() throws Exception { 
-		helper2("A", "B");		
-	}
-	
-	public void test22() throws Exception { 
-		helper2("A", "B");		
-	}
-	
-	public void test23() throws Exception { 
-		helper2("A", "B");		
-	}
-	
-	public void test24() throws Exception { 
-		helper2("A", "B");		
-	}
-	
-	public void test25() throws Exception { 
-		helper2("A", "B");		
-	}
-	
-	public void test26() throws Exception { 
-		helper2("A", "B");		
-	}
-	
-	public void test27() throws Exception { 
-		helper2("A", "B");		
-	}
-	
-	public void test28() throws Exception { 
-		helper2("A", "B");		
-	}
-	
-	public void test29() throws Exception { 
-		IPackageFragment packageP1= getRoot().createPackageFragment("p1", true, null);
-		ICompilationUnit cuC= createCUfromTestFile(packageP1, "C");
-		
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), "A");
-		IType classA= getType(cu, "A");
-				
-		IRefactoring ref= createRefactoring(classA, "B");
-		
-		assertEquals("was supposed to pass", null, performRefactoring(ref));
-		
-		ICompilationUnit newcu= getPackageP().getCompilationUnit("B.java");
-		ICompilationUnit newcuC= packageP1.getCompilationUnit("C.java");
-		assertEquals("invalid renaming A", getFileContents(getOutputTestFileName("B")), newcu.getSource());
-		assertEquals("invalid renaming C", getFileContents(getOutputTestFileName("C")), newcuC.getSource());		
-		
-	}
-	
-	public void test3() throws Exception { 
-		helper2("A", "B");		
-	}
-	
-	public void test30() throws Exception { 
-		ICompilationUnit cuAA= createCUfromTestFile(getPackageP(), "AA");
-		
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), "A");
-		IType classA= getType(cu, "A");
-				
-		IRefactoring ref= createRefactoring(classA, "B");
-		
-		assertEquals("was supposed to pass", null, performRefactoring(ref));
-		
-		ICompilationUnit newcu= getPackageP().getCompilationUnit("B.java");
-		ICompilationUnit newcuAA= getPackageP().getCompilationUnit("AA.java");
-		assertEquals("invalid renaming A", getFileContents(getOutputTestFileName("B")), newcu.getSource());
-		assertEquals("invalid renaming AA", getFileContents(getOutputTestFileName("AA")), newcuAA.getSource());		
-	}
-	public void test31() throws Exception {
-		ICompilationUnit cuAA= createCUfromTestFile(getPackageP(), "AA");
-		
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), "A");
-		IType classA= getType(cu, "A");
-				
-		IRefactoring ref= createRefactoring(classA, "B");
-		
-		assertEquals("was supposed to pass", null, performRefactoring(ref));
-		
-		ICompilationUnit newcu= getPackageP().getCompilationUnit("B.java");
-		ICompilationUnit newcuAA= getPackageP().getCompilationUnit("AA.java");
-		assertEquals("invalid renaming A", getFileContents(getOutputTestFileName("B")), newcu.getSource());
-		assertEquals("invalid renaming AA", getFileContents(getOutputTestFileName("AA")), newcuAA.getSource());		
-	}
-	public void test32() throws Exception { 
-		helper2("A", "B");		
-	}
-	
-	public void test33() throws Exception { 
-		helper2("A", "B");		
-	}
-	
-	public void test34() throws Exception { 
-		helper2("A", "B");		
-	}
-	
-	public void test35() throws Exception { 
-		helper2("A", "B");		
-	}
-	
-	public void test36() throws Exception { 
-		helper2("A", "B");		
-	}
-
-	public void test37() throws Exception { 
-		helper2("A", "B");		
-	}
-	
-	public void test38() throws Exception { 
-		helper2("A", "B");			
-	}
-
-	public void test39() throws Exception { 
-		helper2("A", "B");		
-	}
-		
-	public void test4() throws Exception { 
-		helper2("A", "B");		
-	}
-	
-	public void test40() throws Exception { 
-		//printTestDisabledMessage("search engine bug");
-		helper2("A", "B");		
-	}
-	
-	public void test41() throws Exception { 
-		helper2("A", "B");		
-	}
-		
-	public void test42() throws Exception { 
-		helper2("A", "B");		
-	}
-	
-	public void test43() throws Exception { 
-		helper2("A", "B");		
-	}
-	
-	public void test44() throws Exception { 
-		helper2("A", "B");		
-	}
-	
-	public void test45() throws Exception { 
-		helper2("A", "B");		
-	}
-	
-	public void test46() throws Exception { 	
-		IPackageFragment packageP1= getRoot().createPackageFragment("p1", true, null);
-		ICompilationUnit cuC= createCUfromTestFile(packageP1, "C");
-		
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), "A");
-		IType classA= getType(cu, "A");
-				
-		IRefactoring ref= createRefactoring(classA, "B");
-		
-		assertEquals("was supposed to pass", null, performRefactoring(ref));
-		
-		ICompilationUnit newcu= getPackageP().getCompilationUnit("B.java");
-		ICompilationUnit newcuC= packageP1.getCompilationUnit("C.java");
-		assertEquals("invalid renaming A", getFileContents(getOutputTestFileName("B")), newcu.getSource());
-		assertEquals("invalid renaming C", getFileContents(getOutputTestFileName("C")), newcuC.getSource());		
-	}
-	
-	public void test47() throws Exception { 
-		helper2("A", "B");		
-	}
-	
-	public void test48() throws Exception { 
-		helper2("A", "B");		
-	}
-	
-	public void test49() throws Exception { 
-		helper2("A", "B");		
-	}
-	
-	public void test50() throws Exception { 
-		helper2("A", "B");		
-	}
-	
-	public void test51() throws Exception { 
-		IPackageFragment packageP1= getRoot().createPackageFragment("p1", true, null);
-		ICompilationUnit cuC= createCUfromTestFile(packageP1, "C");
-		
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), "A");
-		IType classA= getType(cu, "A");
-				
-		IRefactoring ref= createRefactoring(classA, "B");
-		
-		assertEquals("was supposed to pass", null, performRefactoring(ref));
-		
-		ICompilationUnit newcu= getPackageP().getCompilationUnit("B.java");
-		ICompilationUnit newcuC= packageP1.getCompilationUnit("C.java");
-		assertEquals("invalid renaming A", getFileContents(getOutputTestFileName("B")), newcu.getSource());
-		assertEquals("invalid renaming C", getFileContents(getOutputTestFileName("C")), newcuC.getSource());		
-	}
-	
-	public void test52() throws Exception {
-		//printTestDisabledMessage("1GJY2XN: ITPJUI:WIN2000 - rename type: error when with reference");
-		helper2("A", "B");		
-	}
-
-	public void test53() throws Exception { 
-		helper2("A", "B", false);		
-	}
-	
-	public void test54() throws Exception { 
-		//printTestDisabledMessage("waiting for: 1GKAQJS: ITPJCORE:WIN2000 - search: incorrect results for nested types");
-		helper2_0("A", "X", "XYZ", "A", true, false, false, false);		
-	}
-	
-	public void test55() throws Exception { 
-		//printTestDisabledMessage("waiting for: 1GKAQJS: ITPJCORE:WIN2000 - search: incorrect results for nested types");
-		helper2_0("A", "X", "XYZ", "A", false, false, false, false);		
-	}
-	
-	public void test57() throws Exception {
-		helper2_0("A", "A", "B", "B", true, true, true, true);
-	}
-	
-	public void test58() throws Exception {
-		//printTestDisabledMessage("bug#16751");
-		helper2("A", "B");
-	}
-
-	public void test59() throws Exception {
-//		printTestDisabledMessage("bug#22938");
-		helper2("A", "B");
-	}
-		
-	public void test5() throws Exception { 
-		helper2("A", "B");		
-	}
-	
-	public void test6() throws Exception { 
-		helper2("A", "B");		
-	}
-	
-	public void test7() throws Exception { 
-		helper2("A", "B");		
-	}
-	
-	public void test8() throws Exception { 
-		helper2("A", "B");		
-	}
-	
-	public void test9() throws Exception { 
-		helper2("A", "B");		
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameVirtualMethodInClassTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameVirtualMethodInClassTests.java
deleted file mode 100644
index cfd20a8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameVirtualMethodInClassTests.java
+++ /dev/null
@@ -1,383 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.runtime.NullProgressMonitor;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.Signature;
-
-import org.eclipse.jdt.ui.tests.refactoring.infra.TestExceptionHandler;
-
-import org.eclipse.jdt.internal.corext.refactoring.base.ChangeContext;
-import org.eclipse.jdt.internal.corext.refactoring.base.Refactoring;
-import org.eclipse.jdt.internal.corext.refactoring.base.RefactoringStatus;
-import org.eclipse.jdt.internal.corext.refactoring.rename.RenameMethodRefactoring;
-
-public class RenameVirtualMethodInClassTests extends RefactoringTest {
-	
-	private static final Class clazz= RenameVirtualMethodInClassTests.class;
-	private static final String REFACTORING_PATH= "RenameVirtualMethodInClass/";
-		
-	public RenameVirtualMethodInClassTests(String name) {
-		super(name);
-	}
-	
-	public static Test suite() {
-		return new MySetup(new TestSuite(clazz));
-	}
-	
-	protected String getRefactoringPath(){
-		return REFACTORING_PATH;
-	}
-	
-	private void helper1_0(String methodName, String newMethodName, String[] signatures) throws Exception{
-		IType classA= getType(createCUfromTestFile(getPackageP(), "A"), "A");
-		RenameMethodRefactoring ref= RenameMethodRefactoring.createInstance(classA.getMethod(methodName, signatures));
-		ref.setNewName(newMethodName);
-		RefactoringStatus result= performRefactoring(ref);
-		assertNotNull("precondition was supposed to fail", result);
-	}
-	
-	private void helper1() throws Exception{
-		helper1_0("m", "k", new String[0]);
-	}
-	
-	private void helper2_0(String methodName, String newMethodName, String[] signatures, boolean shouldPass, boolean updateReferences) throws Exception{
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), "A");
-		IType classA= getType(cu, "A");
-		RenameMethodRefactoring ref=  RenameMethodRefactoring.createInstance(classA.getMethod(methodName, signatures));
-		ref.setUpdateReferences(updateReferences);
-		ref.setNewName(newMethodName);
-		
-		assertEquals("was supposed to pass", null, performRefactoring(ref));
-		if (!shouldPass){
-			assertTrue("incorrect renaming because of java model", ! getFileContents(getOutputTestFileName("A")).equals(cu.getSource()));
-			return;
-		}
-		assertEquals("incorrect renaming", getFileContents(getOutputTestFileName("A")), cu.getSource());
-		
-		assertTrue("anythingToUndo", Refactoring.getUndoManager().anythingToUndo());
-		assertTrue("! anythingToRedo", !Refactoring.getUndoManager().anythingToRedo());
-		//assertEquals("1 to undo", 1, Refactoring.getUndoManager().getRefactoringLog().size());
-		
-		Refactoring.getUndoManager().performUndo(new ChangeContext(new TestExceptionHandler()), new NullProgressMonitor());
-		assertEquals("invalid undo", getFileContents(getInputTestFileName("A")), cu.getSource());
-
-		assertTrue("! anythingToUndo", !Refactoring.getUndoManager().anythingToUndo());
-		assertTrue("anythingToRedo", Refactoring.getUndoManager().anythingToRedo());
-		//assertEquals("1 to redo", 1, Refactoring.getUndoManager().getRedoStack().size());
-		
-		Refactoring.getUndoManager().performRedo(new ChangeContext(new TestExceptionHandler()), new NullProgressMonitor());
-		assertEquals("invalid redo", getFileContents(getOutputTestFileName("A")), cu.getSource());
-	}
-	
-	private void helper2_0(String methodName, String newMethodName, String[] signatures, boolean shouldPass) throws Exception{
-		helper2_0(methodName, newMethodName, signatures, shouldPass, true);
-	}
-	
-	private void helper2_0(String methodName, String newMethodName, String[] signatures) throws Exception{
-		helper2_0(methodName, newMethodName, signatures, true);
-	}
-	
-	private void helper2(boolean updateReferences) throws Exception{
-		helper2_0("m", "k", new String[0], true, updateReferences);
-	}
-
-	private void helper2() throws Exception{
-		helper2(true);
-	}
-	
-	private void helper2_fail() throws Exception{
-		helper2_0("m", "k", new String[0], false);
-	}
-	
-/******************************************************************/	
-	public void testFail0() throws Exception{
-		helper1();
-	}
-	
-	public void testFail1() throws Exception{
-		helper1_0("toString", "fred", new String[0]);
-	}
-	
-	public void testFail2() throws Exception{
-		helper1();
-	}
-	
-	public void testFail3() throws Exception{
-		helper1();
-	}
-	
-	public void testFail4() throws Exception{
-		helper1();
-	}
-	
-	public void testFail5() throws Exception{
-		helper1();
-	}
-	
-	public void testFail6() throws Exception{
-		helper1();
-	}
-	
-	public void testFail7() throws Exception{
-		helper1();
-	}
-	
-	public void testFail8() throws Exception{
-		helper1();
-	}
-	
-	public void testFail9() throws Exception{
-		helper1_0("m", "k", new String[]{Signature.SIG_INT});
-	}
-	
-	public void testFail10() throws Exception{
-		helper1();
-	}
-	
-	public void testFail11() throws Exception{
-		helper1();
-	}
-
-	public void testFail12() throws Exception{
-		helper1();
-	}
-	
-	public void testFail13() throws Exception{
-		helper1();
-	}
-	
-	public void testFail14() throws Exception{
-		helper1_0("m", "k", new String[]{Signature.SIG_INT});
-	}
-	
-	public void testFail15() throws Exception{
-		helper1();
-	}
-	
-	public void testFail17() throws Exception{
-		helper1();
-	}
-	
-	public void testFail18() throws Exception{
-		helper1();
-	}
-	
-	public void testFail19() throws Exception{
-		helper1();
-	}
-	
-	public void testFail20() throws Exception{
-		helper1();
-	}
-	
-	public void testFail21() throws Exception{
-		helper1();
-	}
-	
-	public void testFail22() throws Exception{
-		helper1();
-	}
-	
-	public void testFail23() throws Exception{
-		helper1();
-	}
-	
-	public void testFail24() throws Exception{
-		helper1();
-	}
-	
-	public void testFail25() throws Exception{
-		helper1();
-	}
-	
-	public void testFail26() throws Exception{
-		helper1();
-	}
-	
-	public void testFail27() throws Exception{
-		helper1();
-	}
-	
-	public void testFail28() throws Exception{
-		helper1();
-	}
-	
-	public void testFail29() throws Exception{
-		helper1();
-	}
-		
-	public void testFail30() throws Exception{
-		helper1();
-	}
-	
-	public void testFail31() throws Exception{
-		helper1_0("m", "k", new String[]{"QString;"});
-	}
-	
-	public void testFail32() throws Exception{
-		helper1_0("m", "k", new String[]{"QObject;"});
-	}
-	
-	public void testFail33() throws Exception{
-		helper1_0("toString", "k", new String[0]);
-	}
-	
-	public void testFail34() throws Exception{
-		helper1_0("m", "k", new String[]{"QString;"});
-	}
-	
-	public void testFail35() throws Exception{
-		printTestDisabledMessage("does not detect introduced compile error - method declared in enclosing and inheritance hierarchy");
-//		helper1();
-	}
-	
-	public void testFail36() throws Exception{
-		helper1();
-	}
-	
-	public void testFail37() throws Exception{
-		helper1();
-	}
-	
-	public void testFail38() throws Exception{
-		printTestDisabledMessage("must fix - nested type");
-		//helper1();
-	}
-	
-	public void test1() throws Exception{
-		helper2();
-	}	
-
-	public void test10() throws Exception{
-		helper2();
-	}	
-	
-	public void test11() throws Exception{
-		helper2();
-	}	
-
-	public void test12() throws Exception{
-		helper2();
-	}	
-
-	public void test13() throws Exception{
-		helper2();
-	}	
-	
-	public void test14() throws Exception{
-		helper2();
-	}
-	
-	public void test15() throws Exception{
-		helper2_0("m", "k", new String[]{Signature.SIG_INT});
-	}		
-	
-	public void test16() throws Exception{
-		helper2_0("m", "fred", new String[]{Signature.SIG_INT});
-	}		
-	
-	public void test17() throws Exception{
-		printTestDisabledMessage("overloading");
-		//helper2_0("m", "kk", new String[]{Signature.SIG_INT});
-	}		
-	
-	public void test18() throws Exception{
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), "A");
-		ICompilationUnit cuC= createCUfromTestFile(getPackageP(), "C");
-		
-		IType classB= getType(cu, "B");
-		RenameMethodRefactoring ref= RenameMethodRefactoring.createInstance(classB.getMethod("m", new String[]{"I"}));
-		ref.setNewName("kk");
-		assertEquals("was supposed to pass", null, performRefactoring(ref));
-		assertEquals("invalid renaming A", getFileContents(getOutputTestFileName("A")), cu.getSource());
-		assertEquals("invalid renaming C", getFileContents(getOutputTestFileName("C")), cuC.getSource());
-		
-	}
-	
-	public void test19() throws Exception{
-		helper2_0("m", "fred", new String[0]);
-	}		
-	
-	public void test2() throws Exception{
-		helper2_0("m", "fred", new String[0]);
-	}		
-	
-	public void test20() throws Exception{
-		helper2_0("m", "fred", new String[]{Signature.SIG_INT});
-	}		
-	
-	public void test21() throws Exception{
-		helper2_0("m", "fred", new String[]{Signature.SIG_INT});
-	}
-	
-	public void test22() throws Exception{
-		helper2();
-	}		
-	
-	//anonymous inner class
-	public void test23() throws Exception{
-		helper2_fail();
-	}		
-	
-	public void test24() throws Exception{
-		helper2_0("m", "k", new String[]{"QString;"});
-	}		
-	
-	public void test25() throws Exception{
-		//printTestDisabledMessage("waiting for 1GIIBC3: ITPJCORE:WINNT - search for method references - missing matches");
-		helper2();
-	}		
-	
-	public void test26() throws Exception{
-		helper2();
-	}		
-	
-	public void test27() throws Exception{
-		helper2();
-	}		
-	
-	public void test28() throws Exception{
-		helper2();
-	}		
-	
-	public void test29() throws Exception{
-		helper2();
-	}		
-	
-	public void test30() throws Exception{
-		helper2();
-	}
-	
-	public void test31() throws Exception{
-		helper2();
-	}
-	
-	public void test32() throws Exception{
-		helper2(false);
-	}
-	
-	public void test33() throws Exception{
-		helper2();
-	}
-
-	public void test34() throws Exception{
-		printTestDisabledMessage("test for bug#18553");
-//		helper2_0("A", "foo", new String[0], true, true);
-	}
-	
-	//anonymous inner class
-	public void testAnon0() throws Exception{
-		//helper2_fail();
-		helper2();
-	}		
-	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ReorgTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ReorgTests.java
deleted file mode 100644
index 22e587d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ReorgTests.java
+++ /dev/null
@@ -1,473 +0,0 @@
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.NullProgressMonitor;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-
-import org.eclipse.jdt.internal.corext.refactoring.base.RefactoringStatus;
-import org.eclipse.jdt.internal.corext.refactoring.reorg.CopyRefactoring;
-import org.eclipse.jdt.internal.corext.refactoring.reorg.ICopyQueries;
-import org.eclipse.jdt.internal.corext.refactoring.reorg.INewNameQuery;
-import org.eclipse.jdt.internal.corext.refactoring.reorg.MoveRefactoring;
-import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
-
-public class ReorgTests extends RefactoringTest {
-
-	private static final Class clazz= ReorgTests.class;
-	private static final String REFACTORING_PATH= "ReorgTests/";
-	
-	public ReorgTests(String name) {
-		super(name);
-	}
-	
-	public static Test suite() {
-		return new MySetup(new TestSuite(clazz));
-	}
-	
-	protected String getRefactoringPath() {
-		return REFACTORING_PATH;
-	}	
-	private ICompilationUnit getCu(String cuPath, IPackageFragment pack, String cuName)throws Exception{
-		return createCU(pack, cuName, getFileContents(getTestPath() + cuPath));
-	}
-	
-	private IPackageFragmentRoot getRtJar()throws Exception{
-		IJavaProject proj= getPackageP().getJavaProject();
-		IPackageFragmentRoot[] roots= proj.getPackageFragmentRoots();
-		for (int i= 0; i < roots.length; i++){
-			if (roots[i].isReadOnly())
-				return roots[i];
-		}
-		assertTrue(false);//not expected
-		return null;
-	}
-	
-	private IFolder createFolder(String name) throws Exception {
-		IProject project= (IProject)getPackageP().getJavaProject().getCorrespondingResource();	
-		IFolder newFolder= project.getFolder(name);
-		newFolder.create(false, true, null);
-		return newFolder;
-	}
-	
-	private IFile createFile(String fileName) throws Exception {
-		IFolder folder= (IFolder)getPackageP().getCorrespondingResource();	
-		IFile file= folder.getFile(fileName);
-		assertTrue("should not exist", ! file.exists());
-		file.create(getFileInputStream(getTestPath() + fileName), true, new NullProgressMonitor());
-		assertTrue("should exist", file.exists());
-		return file;
-	}
-	
-	//--- activation tests 
-	private void checkActivation(List elements, boolean expected)throws Exception{
-		CopyRefactoring ref= new CopyRefactoring(elements, new MockCopyQueries());
-		assertEquals("copy", expected, ref.checkActivation(new NullProgressMonitor()).isOK());		
-		
-		MoveRefactoring moveRef= new MoveRefactoring(elements, JavaPreferencesSettings.getCodeGenerationSettings());
-		assertEquals("move", expected, moveRef.checkActivation(new NullProgressMonitor()).isOK());		
-	}
-	
-	public void testActivation0() throws Exception{
-		checkActivation(new ArrayList(0), false);
-	}
-	
-	public void testActivation1() throws Exception{
-		List elements= new ArrayList();
-		ICompilationUnit cu= getCu("A.java", getPackageP(), "A.java");
-		try{
-			elements.add(cu);
-			checkActivation(elements, true);	
-		} finally{
-			performDummySearch();
-			cu.delete(false, null);
-		}	
-	}
-	
-	public void testActivation2() throws Exception{
-		List elements= new ArrayList();
-		ICompilationUnit cu= getCu("A.java", getPackageP(), "A.java");
-		elements.add(cu);
-		elements.add(getPackageP());
-		checkActivation(elements, false);
-		performDummySearch();
-		cu.delete(false, null);
-	}
-
-	public void testActivation3() throws Exception{
-		List elements= new ArrayList();		
-		IPackageFragment p1= getRoot().createPackageFragment("p1", false, null);
-		ICompilationUnit cu= getCu("p1/A.java", p1, "A.java");
-		elements.add(cu);
-		elements.add(p1);
-		checkActivation(elements, false);
-		performDummySearch();
-		cu.delete(false, null);		
-		p1.delete(false, null);
-	}
-	
-	public void testActivation4() throws Exception{
-		List elements= new ArrayList();
-		ICompilationUnit cu= getCu("A.java", getPackageP(), "A.java");
-		ICompilationUnit cu2= getCu("B.java", getPackageP(), "B.java");
-		
-		elements.add(cu);
-		elements.add(cu2);
-		checkActivation(elements, true);
-		performDummySearch();
-		cu2.delete(false, null);
-		cu.delete(false, null);
-	}
-	
-	public void testActivation5() throws Exception{
-		List elements= new ArrayList();
-		elements.add(getPackageP().getJavaProject());
-		checkActivation(elements, false);
-	}
-
-	public void testActivation6() throws Exception{
-		List elements= new ArrayList();
-		IJavaProject proj= getPackageP().getJavaProject();
-		IPackageFragmentRoot[] roots= proj.getPackageFragmentRoots();
-		for (int i= 0; i < roots.length; i++){
-			if (roots[i].isReadOnly())
-				elements.add(roots[i]);
-		}
-		checkActivation(elements, false);
-	}
-
-	public void testActivation7() throws Exception{
-		List elements= new ArrayList();
-		IJavaProject proj= getPackageP().getJavaProject();
-		IPackageFragmentRoot root= proj.getPackageFragmentRoot(MySetup.CONTAINER);
-		elements.add(root);
-		checkActivation(elements, false);
-	}
-	
-	public void testActivation8() throws Exception{
-		List elements= new ArrayList();
-		IFile file= createFile("launcher.gif");
-		elements.add(file);
-		checkActivation(elements, true);
-		performDummySearch();
-		file.delete(false, null);
-	}
-	
-	public void testActivation9() throws Exception{
-		List elements= new ArrayList();
-		IFolder folder= createFolder("newF");
-		elements.add(folder);
-		checkActivation(elements, true);
-		performDummySearch();
-		folder.delete(false, null);
-	}	
-	
-	public void testActivation10() throws Exception{
-		List elements= new ArrayList();
-		IFolder folder= createFolder("newF");
-		ICompilationUnit cu= getCu("A.java", getPackageP(), "A.java");
-		elements.add(folder);
-		elements.add(cu);
-		checkActivation(elements, false);
-		performDummySearch();
-		cu.delete(false, null);
-		folder.delete(false, null);
-	}	
-
-	public void testActivation11() throws Exception{
-		List elements= new ArrayList();
-		IPackageFragment p1= getRoot().createPackageFragment("p1", false, null);
-		elements.add(p1);
-		checkActivation(elements, true);
-		performDummySearch();
-		p1.delete(false, null);
-	}		
-	
-	//--- destination tests
-	
-	public void testDestination0() throws Exception{
-		ICompilationUnit cu= null;
-		IFolder folder= null;
-		IPackageFragment p1= null;
-		
-		try{
-			List elements= new ArrayList();
-			
-			cu= getCu("A.java", getPackageP(), "A.java");
-			elements.add(cu);
-			
-			p1= getRoot().createPackageFragment("p1", false, null);
-			folder= createFolder("f");
-			
-			CopyRefactoring copyRef= new CopyRefactoring(elements, new MockCopyQueries());
-			assertEquals("copy0", true, copyRef.isValidDestination(cu));
-			assertEquals("copy1", true, copyRef.isValidDestination(p1));
-			assertEquals("copy2", true, copyRef.isValidDestination(getPackageP()));
-			assertEquals("copy3", true, copyRef.isValidDestination(getRoot()));
-			assertEquals("copy4", true, copyRef.isValidDestination(getRoot().getJavaProject()));
-			assertEquals("copy5", false, copyRef.isValidDestination(getRtJar()));
-			assertEquals("copy6", true, copyRef.isValidDestination(folder));
-	
-			MoveRefactoring moveRef= new MoveRefactoring(elements, JavaPreferencesSettings.getCodeGenerationSettings());
-			assertEquals("moveRef0", false, moveRef.isValidDestination(cu));
-			assertEquals("moveRef1", true, moveRef.isValidDestination(p1));
-			assertEquals("moveRef2", false, moveRef.isValidDestination(getPackageP()));
-			assertEquals("moveRef3", true, moveRef.isValidDestination(getRoot()));
-			assertEquals("moveRef4", true, moveRef.isValidDestination(getRoot().getJavaProject()));
-			assertEquals("moveRef5", false, moveRef.isValidDestination(getRtJar()));
-			assertEquals("moveRef6", true, moveRef.isValidDestination(folder));
-		
-		} finally{
-			performDummySearch();
-			folder.delete(false, null);
-			p1.delete(false, null);
-			cu.delete(false, null);
-		}
-	}
-	
-	public void testDestination2() throws Exception{
-		ICompilationUnit cu= null;
-		ICompilationUnit cu2= null;
-		IFolder folder= null;
-		IPackageFragment p1= null;
-		
-		try{
-			List elements= new ArrayList();
-			cu= getCu("A.java", getPackageP(), "A.java");
-			cu2= getCu("B.java", getPackageP(), "B.java");
-			folder= createFolder("f");
-			
-			elements.add(cu);
-			elements.add(cu2);
-			
-			p1= getRoot().createPackageFragment("p1", false, null);
-			CopyRefactoring copyRef= new CopyRefactoring(elements, new MockCopyQueries());
-			assertEquals("copy0", true, copyRef.isValidDestination(cu));
-			assertEquals("copy0a", true, copyRef.isValidDestination(cu2));
-			assertEquals("copy1", true, copyRef.isValidDestination(p1));
-			assertEquals("copy2", true, copyRef.isValidDestination(getPackageP()));
-			assertEquals("copy3", true, copyRef.isValidDestination(getRoot()));
-			assertEquals("copy4", true, copyRef.isValidDestination(getRoot().getJavaProject()));
-			assertEquals("copy5", false, copyRef.isValidDestination(getRtJar()));
-			assertEquals("copy6", true, copyRef.isValidDestination(folder));
-			
-			MoveRefactoring moveRef= new MoveRefactoring(elements, JavaPreferencesSettings.getCodeGenerationSettings());
-			assertEquals("moveRef0", false, moveRef.isValidDestination(cu));
-			assertEquals("moveRef0a", false, moveRef.isValidDestination(cu2));
-			assertEquals("moveRef1", true, moveRef.isValidDestination(p1));
-			assertEquals("moveRef2", false, moveRef.isValidDestination(getPackageP()));
-			assertEquals("moveRef3", true, moveRef.isValidDestination(getRoot()));
-			assertEquals("moveRef4", true, moveRef.isValidDestination(getRoot().getJavaProject()));
-			assertEquals("moveRef5", false, moveRef.isValidDestination(getRtJar()));
-			assertEquals("moveRef6", true, moveRef.isValidDestination(folder));
-
-		}finally{		
-			performDummySearch();
-			folder.delete(false, null);	
-			p1.delete(false, null);
-			cu.delete(false, null);
-			cu2.delete(false, null);
-		}
-	}
-
-	public void testDestination3() throws Exception{
-		ICompilationUnit cu= null;
-		ICompilationUnit cu2= null;
-		IFile file= null;
-		IFolder folder= null;
-		IPackageFragment p1= null;
-		try{
-			List elements= new ArrayList();
-			cu= getCu("A.java", getPackageP(), "A.java");
-			cu2= getCu("B.java", getPackageP(), "B.java");
-			file= createFile("launcher.gif");
-			elements.add(cu);
-			elements.add(cu2);
-			elements.add(file);
-			folder= createFolder("f");
-			
-			p1= getRoot().createPackageFragment("p1", false, null);
-			CopyRefactoring copyRef= new CopyRefactoring(elements, new MockCopyQueries());
-			assertEquals("copy0", true, copyRef.isValidDestination(cu));
-			assertEquals("copy0a", true, copyRef.isValidDestination(cu2));
-			assertEquals("copy1", true, copyRef.isValidDestination(p1));
-			assertEquals("copy2", true, copyRef.isValidDestination(getPackageP()));
-			assertEquals("copy3", true, copyRef.isValidDestination(getRoot()));
-			assertEquals("copy4", true, copyRef.isValidDestination(getRoot().getJavaProject()));
-			assertEquals("copy5", false, copyRef.isValidDestination(getRtJar()));
-			assertEquals("copy6", true, copyRef.isValidDestination(folder));
-			assertEquals("copy7", true, copyRef.isValidDestination(file));
-			
-			MoveRefactoring moveRef= new MoveRefactoring(elements, JavaPreferencesSettings.getCodeGenerationSettings());
-			assertEquals("moveRef0", false, moveRef.isValidDestination(cu));
-			assertEquals("moveRef0a", false, moveRef.isValidDestination(cu2));
-			assertEquals("moveRef1", true, moveRef.isValidDestination(p1));
-			assertEquals("moveRef2", false, moveRef.isValidDestination(getPackageP()));
-			assertEquals("moveRef3", true, moveRef.isValidDestination(getRoot()));
-			assertEquals("moveRef4", true, moveRef.isValidDestination(getRoot().getJavaProject()));
-			assertEquals("moveRef5", false, moveRef.isValidDestination(getRtJar()));
-			assertEquals("moveRef6", true, moveRef.isValidDestination(folder));
-			assertEquals("moveRef7", false, moveRef.isValidDestination(file));
-		} finally{		
-			performDummySearch();
-			file.delete(false, null);
-			folder.delete(false, null);	
-			p1.delete(false, null);
-			cu.delete(false, null);
-			cu2.delete(false, null);
-		}
-	}
-	
-	//----
-	public void testReadOnlyFolder() throws Exception{
-		printTestDisabledMessage("waiting for bug#6058 (copying IFolder loses read-only flag setting)");
-		if (true)
-			return;
-		
-		IFolder folder= null;
-		IJavaProject p2=  null;
-		IFolder copiedFolder= null;
-		try{
-			List elements= new ArrayList();	
-			String folderName= "f";
-			folder= createFolder(folderName);
-			folder.setReadOnly(true);
-			assertTrue("folder should be read-only", folder.isReadOnly());
-			elements.add(folder);
-			
-			p2= JavaProjectHelper.createJavaProject("P2", "bin");
-			CopyRefactoring copyRef= new CopyRefactoring(elements, new MockCopyQueries());
-			copyRef.setDestination(p2);
-			assertTrue("copy read-only", copyRef.checkActivation(new NullProgressMonitor()).isOK());
-			RefactoringStatus status= performRefactoring(copyRef);
-			assertEquals("preconditions were expected to be ok", null, status);
-			
-			IResource p2res= p2.getCorrespondingResource();
-			assertTrue("instance of IProject", p2res instanceof IProject);
-			
-			copiedFolder= ((IProject)p2res).getFolder(folderName);
-			assertTrue("copied folder should exist", copiedFolder.exists());
-		
-			assertTrue("copied folder should be read-only", copiedFolder.isReadOnly());
-		
-		}finally{
-			performDummySearch();
-			JavaProjectHelper.delete(p2);
-			folder.delete(false, null);
-			copiedFolder.delete(false, null);
-		}
-	}
-	
-	public void testReadOnlySourceFolder() throws Exception{
-		printTestDisabledMessage("waiting for bug#6058 (copying IFolder loses read-only flag setting)");
-		if (true)
-			return;
-		IPackageFragmentRoot srcFolder= null;
-		IJavaProject p2=  null;
-		IFolder copiedFolder= null;
-		try{
-			List elements= new ArrayList();	
-			String folderName= "ss";
-			srcFolder= JavaProjectHelper.addSourceContainer(MySetup.getProject(), folderName);
-			srcFolder.getCorrespondingResource().setReadOnly(true);
-			assertTrue("folder should be read-only", srcFolder.getCorrespondingResource().isReadOnly());
-			elements.add(srcFolder);
-			
-			p2= JavaProjectHelper.createJavaProject("P2", "bin");
-			CopyRefactoring copyRef= new CopyRefactoring(elements, new MockCopyQueries());
-			copyRef.setDestination(p2);
-			assertTrue("copy read-only", copyRef.checkActivation(new NullProgressMonitor()).isOK());
-			RefactoringStatus status= performRefactoring(copyRef);
-			assertEquals("preconditions were expected to be ok", null, status);
-			
-			IResource p2res= p2.getCorrespondingResource();
-			assertTrue("instance of IProject", p2res instanceof IProject);
-			
-			copiedFolder= ((IProject)p2res).getFolder(folderName);
-			assertTrue("copied folder should exist", copiedFolder.exists());
-		
-			assertTrue("copied folder should be read-only", copiedFolder.isReadOnly());
-		
-		}finally{
-			performDummySearch();
-			if (p2 != null)
-				JavaProjectHelper.delete(p2);
-			srcFolder.getCorrespondingResource().delete(false, null);
-			copiedFolder.delete(false, null);
-		}
-	}
-
-	public void testReadOnlyPackage() throws Exception{
-		printTestDisabledMessage("waiting for bug#6060 (IPackageFragment::copy loses the read-only setting)");
-		if (true)
-			return;
-		
-		IPackageFragment pack= null;
-		IPackageFragmentRoot srcFolder2= null;		
-		IPackageFragment copiedPackage= null;
-		try{
-			List elements= new ArrayList();	
-			String packageName= "ss";
-			pack= MySetup.getDefaultSourceFolder().createPackageFragment(packageName, false, new NullProgressMonitor());
-			pack.getCorrespondingResource().setReadOnly(true);
-			assertTrue("package should be read-only", pack.getCorrespondingResource().isReadOnly());
-			elements.add(pack);
-			
-			srcFolder2= JavaProjectHelper.addSourceContainer(MySetup.getProject(), "src2");
-			CopyRefactoring copyRef= new CopyRefactoring(elements, new MockCopyQueries());
-			copyRef.setDestination(srcFolder2);
-			assertTrue("copy read-only", copyRef.checkActivation(new NullProgressMonitor()).isOK());
-			RefactoringStatus status= performRefactoring(copyRef);
-			assertEquals("preconditions were expected to be ok", null, status);
-			
-			copiedPackage= srcFolder2.getPackageFragment(packageName);
-			assertTrue("copied package should exist", copiedPackage.exists());
-		
-			assertTrue("copied package should be read-only", copiedPackage.isReadOnly());
-			assertTrue("copied package should be read-only (2)", copiedPackage.getCorrespondingResource().isReadOnly());
-		
-		}finally{
-			performDummySearch();
-			srcFolder2.getCorrespondingResource().delete(false, null);
-			pack.delete(false, null);
-		}
-	}
-	
-	private static class MockCopyQueries implements ICopyQueries{
-		public INewNameQuery createNewCompilationUnitNameQuery(ICompilationUnit cu) {
-			return null;
-		}
-
-		public INewNameQuery createNewPackageNameQuery(IPackageFragment pack) {
-			return null;
-		}
-
-		public INewNameQuery createNewResourceNameQuery(IResource res) {
-			return null;
-		}
-
-		public INewNameQuery createNullQuery() {
-			return null;
-		}
-
-		public INewNameQuery createStaticQuery(String newName) {
-			return null;
-		}
-
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/SefTestSetup.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/SefTestSetup.java
deleted file mode 100644
index c856e10..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/SefTestSetup.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import junit.extensions.TestSetup;
-import junit.framework.Test;
-
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.IWorkspaceDescription;
-import org.eclipse.core.resources.ResourcesPlugin;
-
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-
-import org.eclipse.jdt.internal.corext.refactoring.base.Refactoring;
-
-public class SefTestSetup extends TestSetup {
-	
-	private IJavaProject fJavaProject;
-	private IPackageFragmentRoot fRoot;
-	private static final String CONTAINER= "src";
-
-	private IPackageFragment fBaseTypes;
-	private IPackageFragment fObjectTypes;
-	private IPackageFragment fInvalid;
-	
-	public SefTestSetup(Test test) {
-		super(test);
-	}	
-	
-	public IPackageFragmentRoot getRoot() {
-		return fRoot;
-	}
-		
-	protected void setUp() throws Exception {
-		super.setUp();
-		fJavaProject= JavaProjectHelper.createJavaProject("TestProject", "bin");
-		JavaProjectHelper.addRTJar(fJavaProject);
-		fRoot= JavaProjectHelper.addSourceContainer(fJavaProject, CONTAINER);
-		
-		Refactoring.getUndoManager().flush();
-		IWorkspace workspace= ResourcesPlugin.getWorkspace();
-		IWorkspaceDescription description= workspace.getDescription();
-		description.setAutoBuilding(false);
-		workspace.setDescription(description);
-		
-		fBaseTypes= getRoot().createPackageFragment("base_in", true, null);
-		fObjectTypes= getRoot().createPackageFragment("object_in", true, null);
-		fInvalid= getRoot().createPackageFragment("invalid", true, null);
-	}
-
-	protected void tearDown() throws Exception {
-		super.tearDown();
-		RefactoringTest.performDummySearch(fJavaProject);
-		JavaProjectHelper.delete(fJavaProject);		
-	}
-	
-	public IPackageFragment getBasePackage() {
-		return fBaseTypes;
-	}	
-
-	public IPackageFragment getObjectPackage() {
-		return fObjectTypes;
-	}	
-
-	public IPackageFragment getInvalidPackage() {
-		return fInvalid;
-	}	
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/SefTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/SefTests.java
deleted file mode 100644
index 4ff139c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/SefTests.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.NullProgressMonitor;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IField;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.JavaModelException;
-
-import org.eclipse.jdt.ui.tests.refactoring.infra.TestExceptionHandler;
-
-import org.eclipse.jdt.internal.corext.codemanipulation.CodeGenerationSettings;
-import org.eclipse.jdt.internal.corext.refactoring.base.ChangeContext;
-import org.eclipse.jdt.internal.corext.refactoring.base.IChange;
-import org.eclipse.jdt.internal.corext.refactoring.base.RefactoringStatus;
-import org.eclipse.jdt.internal.corext.refactoring.sef.SelfEncapsulateFieldRefactoring;
-import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
-
-public class SefTests extends AbstractSelectionTestCase {
-
-	private static SefTestSetup fgTestSetup;
-	
-	public SefTests(String name) {
-		super(name);
-	}
-	
-	public static Test suite() {
-		fgTestSetup= new SefTestSetup(new TestSuite(SefTests.class));
-		return fgTestSetup;
-	}
-
-	protected IPackageFragmentRoot getRoot() {
-		return fgTestSetup.getRoot();
-	}
-	
-	protected String getResourceLocation() {
-		return "SefWorkSpace/SefTests/";
-	}
-	
-	protected String adaptName(String name) {
-		return Character.toUpperCase(name.charAt(0)) + name.substring(1) + ".java";
-	}	
-	
-	protected void performTest(IPackageFragment packageFragment, String id, String outputFolder, String fieldName) throws Exception {
-		IProgressMonitor pm= new NullProgressMonitor();
-		ICompilationUnit unit= createCU(packageFragment, id);
-		IField field= getField(unit, fieldName);
-		assertNotNull(field);
-		CodeGenerationSettings settings= JavaPreferencesSettings.getCodeGenerationSettings();
-		settings.fieldPrefixes= new String[0];
-		SelfEncapsulateFieldRefactoring refactoring= new SelfEncapsulateFieldRefactoring(field, settings);
-		RefactoringStatus status= refactoring.checkPreconditions(pm);
-		assertTrue(!status.hasFatalError());
-		IChange change= refactoring.createChange(pm);
-		assertNotNull(change);
-		ChangeContext context= new ChangeContext(new TestExceptionHandler());
-		change.aboutToPerform(context, new NullProgressMonitor());
-		change.perform(context, pm);
-		change.performed();
-		assertNotNull(change.getUndoChange());
-		String source= unit.getSource();
-		String out= getProofedContent(outputFolder, id);
-		compareSource(source, out);
-	}
-	
-	protected void performInvalidTest(IPackageFragment packageFragment, String id, String fieldName) throws Exception {
-		ICompilationUnit unit= createCU(packageFragment, id);
-		IField field= getField(unit, fieldName);
-		assertNotNull(field);
-		CodeGenerationSettings settings= JavaPreferencesSettings.getCodeGenerationSettings();
-		settings.fieldPrefixes= new String[0];
-		SelfEncapsulateFieldRefactoring refactoring= new SelfEncapsulateFieldRefactoring(field, settings);
-		RefactoringStatus status= refactoring.checkPreconditions(new NullProgressMonitor());
-		assertTrue(status.hasError());
-	}	
-	
-	private static IField getField(ICompilationUnit unit, String fieldName) throws Exception {
-		IField result= null;
-		IType[] types= unit.getAllTypes();
-		for (int i= 0; i < types.length; i++) {
-			IType type= types[i];
-			result= type.getField(fieldName);
-			if (result != null && result.exists())
-				break;
-		}
-		return result;
-	}
-
-	private IPackageFragment getObjectPackage() throws JavaModelException {
-		return fgTestSetup.getObjectPackage();
- 	}
-	
-	private IPackageFragment getBasePackage() throws JavaModelException {
-		return fgTestSetup.getBasePackage();
- 	}
-	
-	private IPackageFragment getInvalidPackage() throws JavaModelException {
-		return fgTestSetup.getInvalidPackage();
-	}
-	
-	private void objectTest(String fieldName) throws Exception {
-		performTest(getObjectPackage(), getName(), "object_out", fieldName);
-	}
-	
-	private void baseTest(String fieldName) throws Exception {
-		performTest(getBasePackage(), getName(), "base_out", fieldName);
-	}
-	
-	private void invalidTest(String fieldName) throws Exception {
-		performInvalidTest(getInvalidPackage(), getName(), fieldName);
-	}
-	
-	//=====================================================================================
-	// Invalid
-	//=====================================================================================
-	
-	public void testPostfixExpression() throws Exception {
-		invalidTest("field");
-	}
-	
-	public void testInvalidOverwrite() throws Exception {
-		invalidTest("field");
-	}
-	
-	//=====================================================================================
-	// Primitiv Data Test
-	//=====================================================================================
-	
-	public void testPrefixInt() throws Exception {
-		baseTest("field");
-	}
-	
-	public void testPrefixBoolean() throws Exception {
-		baseTest("field");
-	}
-	
-	public void testPostfixInt() throws Exception {
-		baseTest("field");
-	}
-	
-	public void testThisExpression() throws Exception {
-		baseTest("field");
-	}
-	
-	public void testThisExpressionInner() throws Exception {
-		baseTest("field");
-	}
-	
-	//=====================================================================================
-	// Basic Object Test
-	//=====================================================================================
-	
-	public void testSimpleRead() throws Exception {
-		objectTest("field");
-	}
-	
-	public void testSimpleWrite() throws Exception {
-		objectTest("field");
-	}
-	
-	public void testSimpleReadWrite() throws Exception {
-		objectTest("field");
-	}
-	
-	public void testNestedRead() throws Exception {
-		objectTest("field");
-	}
-	
-	public void testArrayRead() throws Exception {
-		objectTest("field");
-	}
-	
-	public void testSetterInAssignment() throws Exception {
-		objectTest("field");
-	}
-	
-	public void testSetterInExpression() throws Exception {
-		objectTest("field");
-	}
-	
-	public void testSetterInInitialization() throws Exception {
-		objectTest("field");
-	}
-	
-	public void testSetterAsReceiver() throws Exception {
-		objectTest("field");
-	}
-	
-	public void testCompoundWrite() throws Exception {
-		objectTest("field");
-	}
-	
-	public void testCompoundWrite2() throws Exception {
-		objectTest("field");
-	}
-	
-	public void testCompoundWrite3() throws Exception {
-		objectTest("field");
-	}
-	
-	public void testFinalField() throws Exception {
-		objectTest("field");
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/SelectionAnalyzerTestSetup.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/SelectionAnalyzerTestSetup.java
deleted file mode 100644
index f0fd8bd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/SelectionAnalyzerTestSetup.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import junit.extensions.TestSetup;
-import junit.framework.Test;
-
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.IWorkspaceDescription;
-import org.eclipse.core.resources.ResourcesPlugin;
-
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-
-import org.eclipse.jdt.internal.corext.refactoring.base.Refactoring;
-
-public class SelectionAnalyzerTestSetup extends TestSetup {
-	
-	private IJavaProject fJavaProject;
-	private IPackageFragmentRoot fRoot;
-	private static final String CONTAINER= "src";
-
-	private IPackageFragment fSelectionPackage;
-	private IPackageFragment fInvalidSelectionPackage;
-	private IPackageFragment fValidSelectionPackage;
-	
-	public SelectionAnalyzerTestSetup(Test test) {
-		super(test);
-	}	
-	
-	public IPackageFragmentRoot getRoot() {
-		return fRoot;
-	}
-		
-	protected void setUp() throws Exception {
-		super.setUp();
-		fJavaProject= JavaProjectHelper.createJavaProject("TestProject", "bin");
-		JavaProjectHelper.addRTJar(fJavaProject);
-		fRoot= JavaProjectHelper.addSourceContainer(fJavaProject, CONTAINER);
-		
-		Refactoring.getUndoManager().flush();
-		IWorkspace workspace= ResourcesPlugin.getWorkspace();
-		IWorkspaceDescription description= workspace.getDescription();
-		description.setAutoBuilding(false);
-		workspace.setDescription(description);
-		
-		fSelectionPackage= getRoot().createPackageFragment("selection", true, null);
-		fInvalidSelectionPackage= fRoot.createPackageFragment("invalidSelection", true, null);
-		fValidSelectionPackage= fRoot.createPackageFragment("validSelection", true, null);
-	}
-
-	protected void tearDown() throws Exception {
-		JavaProjectHelper.delete(fJavaProject);
-		super.tearDown();
-	}
-	
-	public IPackageFragment getInvalidSelectionPackage() {
-		return fInvalidSelectionPackage;
-	}
-	
-	public IPackageFragment getSelectionPackage() {
-		return fSelectionPackage;
-	}
-	
-	public IPackageFragment getValidSelectionPackage() {
-		return fValidSelectionPackage;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/SurroundWithTestSetup.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/SurroundWithTestSetup.java
deleted file mode 100644
index 0846833..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/SurroundWithTestSetup.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import junit.extensions.TestSetup;
-import junit.framework.Test;
-
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.IWorkspaceDescription;
-import org.eclipse.core.resources.ResourcesPlugin;
-
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-
-import org.eclipse.jdt.internal.corext.refactoring.base.Refactoring;
-
-public class SurroundWithTestSetup extends TestSetup {
-	
-	private IJavaProject fJavaProject;
-	private IPackageFragmentRoot fRoot;
-	private static final String CONTAINER= "src";
-
-	private IPackageFragment fTryCatchPackage;
-	
-	public SurroundWithTestSetup(Test test) {
-		super(test);
-	}	
-	
-	public IPackageFragmentRoot getRoot() {
-		return fRoot;
-	}
-		
-	protected void setUp() throws Exception {
-		super.setUp();
-		fJavaProject= JavaProjectHelper.createJavaProject("TestProject", "bin");
-		JavaProjectHelper.addRTJar(fJavaProject);
-		fRoot= JavaProjectHelper.addSourceContainer(fJavaProject, CONTAINER);
-		
-		Refactoring.getUndoManager().flush();
-		IWorkspace workspace= ResourcesPlugin.getWorkspace();
-		IWorkspaceDescription description= workspace.getDescription();
-		description.setAutoBuilding(false);
-		workspace.setDescription(description);
-		
-		fTryCatchPackage= getRoot().createPackageFragment("trycatch_in", true, null);
-	}
-
-	protected void tearDown() throws Exception {
-		super.tearDown();
-		RefactoringTest.performDummySearch(fJavaProject);
-		JavaProjectHelper.delete(fJavaProject);
-	}
-	
-	public IPackageFragment getTryCatchPackage() {
-		return fTryCatchPackage;
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/SurroundWithTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/SurroundWithTests.java
deleted file mode 100644
index a90afc5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/SurroundWithTests.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-
-import org.eclipse.jdt.internal.corext.refactoring.surround.SurroundWithTryCatchRefactoring;
-import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
-
-public class SurroundWithTests extends AbstractSelectionTestCase {
-
-	private static SurroundWithTestSetup fgTestSetup;
-	
-	public SurroundWithTests(String name) {
-		super(name);
-	}
-	
-	public static Test suite() {
-		fgTestSetup= new SurroundWithTestSetup(new TestSuite(SurroundWithTests.class));
-		return fgTestSetup;
-	}
-
-	protected IPackageFragmentRoot getRoot() {
-		return fgTestSetup.getRoot();
-	}
-	
-	protected String getResourceLocation() {
-		return "SurroundWithWorkSpace/SurroundWithTests/";
-	}
-	
-	protected String adaptName(String name) {
-		return Character.toUpperCase(name.charAt(0)) + name.substring(1) + ".java";
-	}	
-
-	protected void performTest(IPackageFragment packageFragment, String name, String outputFolder, int mode) throws Exception {
-		ICompilationUnit unit= createCU(packageFragment, name);
-		SurroundWithTryCatchRefactoring refactoring= new SurroundWithTryCatchRefactoring(unit, 
-			getTextSelection(unit.getSource()), JavaPreferencesSettings.getCodeGenerationSettings(), null);
-		refactoring.setSaveChanges(true);
-		String out= null;
-		if (mode == COMPARE_WITH_OUTPUT)
-			out= getProofedContent(outputFolder, name);
-		performTest(unit, refactoring, mode, out);
-	}
-	
-	protected void tryCatchInvalidTest() throws Exception {
-		performTest(fgTestSetup.getTryCatchPackage(), getName(), "trycatch_out", INVALID_SELECTION);
-	}	
-	
-	protected void tryCatchTest() throws Exception {
-		performTest(fgTestSetup.getTryCatchPackage(), getName(), "trycatch_out", COMPARE_WITH_OUTPUT);
-	}	
-	
-	public void testNoException() throws Exception {
-		tryCatchInvalidTest();
-	}
-	
-	public void testAlreadyCaught() throws Exception {
-		tryCatchInvalidTest();
-	}
-	
-	public void testInvalidParent1() throws Exception {
-		tryCatchInvalidTest();
-	}
-	
-	public void testInvalidParent2() throws Exception {
-		tryCatchInvalidTest();
-	}
-	
-	public void testThisConstructorCall() throws Exception {
-		tryCatchInvalidTest();
-	}
-	
-	public void testSuperConstructorCall() throws Exception {
-		tryCatchInvalidTest();
-	}
-	
-	public void testSimple() throws Exception {
-		tryCatchTest();
-	}
-	
-	public void testOneLine() throws Exception {
-		tryCatchTest();
-	}	
-	
-	public void testMultiLine() throws Exception {
-		tryCatchTest();
-	}
-	
-	public void testExceptionOrder()	throws Exception {
-		tryCatchTest();
-	}
-	
-	public void testWrappedLocal1() throws Exception {
-		tryCatchTest();
-	}
-	
-	public void testWrappedLocal2() throws Exception {
-		tryCatchTest();
-	}
-	
-	public void testWrappedLocal3() throws Exception {
-		tryCatchTest();
-	}
-	
-	public void testWrappedLocal4() throws Exception {
-		tryCatchTest();
-	}
-	
-	public void testWrappedLocal5() throws Exception {
-		tryCatchTest();
-	}
-	
-	public void testWrappedLocal6() throws Exception {
-		tryCatchTest();
-	}
-	
-	public void testInitializerThrowsException() throws Exception {
-		tryCatchTest();
-	}
-	
-	public void testThrowInCatch() throws Exception {
-		tryCatchTest();
-	}
-	
-	public void testExpression() throws Exception {
-		tryCatchTest();
-	}
-	
-	public void testInitializer() throws Exception {
-		tryCatchTest();
-	}
-	
-	public void testSuperCall() throws Exception {
-		tryCatchTest();
-	}
-	
-	public void testRuntimeException1() throws Exception {
-		tryCatchInvalidTest();
-	}
-	
-	public void testRuntimeException2() throws Exception {
-		tryCatchInvalidTest();
-	}	
-
-	public void testStaticField() throws Exception {
-		tryCatchInvalidTest();
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/TestUtil.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/TestUtil.java
deleted file mode 100644
index 7d10a53..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/TestUtil.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.eclipse.jdt.core.IField;
-import org.eclipse.jdt.core.IMember;
-import org.eclipse.jdt.core.IMethod;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.JavaModelException;
-
-import org.eclipse.jdt.internal.corext.Assert;
-
-class TestUtil {
-	private TestUtil(){
-	}
-	
-	static IMember[] merge(IMember[] a1, IMember[] a2){
-		Set result= new HashSet(a1.length + a2.length);
-		result.addAll(Arrays.asList(a1));
-		result.addAll(Arrays.asList(a2));
-		return (IMember[]) result.toArray(new IMember[result.size()]);
-	}
-	
-	static IField[] getFields(IType type, String[] names) throws JavaModelException{
-		Set fields= new HashSet();
-		for (int i = 0; i < names.length; i++) {
-			IField field= type.getField(names[i]);
-			Assert.isTrue(field.exists());
-			fields.add(field);
-		}
-		return (IField[]) fields.toArray(new IField[fields.size()]);	
-	}
-	
-	static IMethod[] getMethods(IType type, String[] names, String[][] signatures) throws JavaModelException{
-		Set methods= new HashSet();
-		for (int i = 0; i < names.length; i++) {
-			IMethod method= type.getMethod(names[i], signatures[i]);
-			Assert.isTrue(method.exists());
-			methods.add(method);
-		}
-		return (IMethod[]) methods.toArray(new IMethod[methods.size()]);	
-	}
-	
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/UndoManagerTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/UndoManagerTests.java
deleted file mode 100644
index 3553c14..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/UndoManagerTests.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.runtime.NullProgressMonitor;
-
-import org.eclipse.jdt.ui.tests.refactoring.infra.TestExceptionHandler;
-
-import org.eclipse.jdt.internal.corext.refactoring.base.ChangeContext;
-import org.eclipse.jdt.internal.corext.refactoring.base.Refactoring;
-
-public class UndoManagerTests extends RefactoringTest {
-	
-	private static final Class clazz= UndoManagerTests.class;
-	public UndoManagerTests(String name) {
-		super(name);
-	}
-	
-	public static Test suite() {
-		return new MySetup(new TestSuite(clazz));
-	}
-	
-	private void checkState(boolean undo, boolean redo, int undoCount, int redoCount){
-		checkState(0, undo, redo, undoCount, redoCount);
-	}
-	
-	private void checkState(int iterationCount, boolean undo, boolean redo, int undoCount, int redoCount){
-		assertTrue(iterationCount + " undo", undo == Refactoring.getUndoManager().anythingToUndo());
-		assertTrue(iterationCount + " redo", redo == Refactoring.getUndoManager().anythingToRedo());
-		//assertEquals(iterationCount + "undo stack", undoCount, Refactoring.getUndoManager().getRefactoringLog().size());
-		//assertEquals(iterationCount + "redo stack", redoCount, Refactoring.getUndoManager().getRedoStack().size());
-	}
-	
-	private void performUndo() throws Exception {
-		Refactoring.getUndoManager().performUndo(new ChangeContext(new TestExceptionHandler()), new NullProgressMonitor());
-	}
-	
-	private void performRedo() throws Exception {
-		Refactoring.getUndoManager().performRedo(new ChangeContext(new TestExceptionHandler()), new NullProgressMonitor());
-	}
-	
-	public void test0() throws Exception{
-		checkState(false, false, 0, 0);
-	}
-	
-	public void test1() throws Exception{	
-		performRefactoring(new NullRefactoring());
-		checkState(true, false, 1, 0);
-	}
-	
-	public void test2() throws Exception{	
-		performRefactoring(new NullRefactoring());
-		performUndo();
-		checkState(false, true, 0, 1);
-	}
-	
-	public void test3() throws Exception{	
-		performRefactoring(new NullRefactoring());
-		performUndo();
-		performRedo();
-		checkState(true, false, 1, 0);
-	}
-	
-	public void test4() throws Exception{	
-		performRefactoring(new NullRefactoring());
-		performUndo();
-		performRedo();
-		performUndo();
-		checkState(false, true, 0, 1);
-	}
-
-	public void test5() throws Exception{	
-		performRefactoring(new NullRefactoring());
-		performUndo();
-		performRedo();
-		performRefactoring(new NullRefactoring());
-		checkState(true, false, 2, 0);
-	}
-	
-	public void test6() throws Exception{	
-		performRefactoring(new NullRefactoring());
-		performUndo();
-		performRedo();
-		performRefactoring(new NullRefactoring());
-		performUndo();
-		performUndo();
-		checkState(false, true, 0, 2);
-	}	
-	
-	public void test7() throws Exception{	
-		performRefactoring(new NullRefactoring());
-		performUndo();
-		performRedo();
-		performRefactoring(new NullRefactoring());
-		performUndo();
-		checkState(true, true, 1, 1);
-	}	
-	
-	public void test8() throws Exception{	
-		int limit= 10;
-		for (int i= 0; i < limit; i++){
-			checkState(i, i != 0, false, i, 0);			
-			performRefactoring(new NullRefactoring());
-		}
-		for (int i= 0; i < limit; i++){
-			checkState(i, i != limit, i != 0, limit - i, i);			
-			performUndo();
-		}
-		
-		for (int i= 0; i < limit; i++){
-			checkState(i, i != 0, i != limit, i, limit - i);			
-			performRedo();
-		}
-	}
-	
-
-	public void test9() throws Exception{	
-		performRefactoring(new NullRefactoring());
-		performUndo();
-		performRedo();
-		performRefactoring(new NullRefactoring());
-		performUndo();
-		Refactoring.getUndoManager().flush();
-		checkState(false, false, 0, 0);
-	}		
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/UseSupertypeWherePossibleTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/UseSupertypeWherePossibleTests.java
deleted file mode 100644
index bd66a69..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/UseSupertypeWherePossibleTests.java
+++ /dev/null
@@ -1,423 +0,0 @@
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IType;
-
-import org.eclipse.jdt.internal.corext.refactoring.structure.UseSupertypeWherePossibleRefactoring;
-import org.eclipse.jdt.internal.corext.template.Template;
-import org.eclipse.jdt.internal.corext.template.Templates;
-import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
-
-import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
-
-public class UseSupertypeWherePossibleTests extends RefactoringTest {
-
-	private static final Class clazz= UseSupertypeWherePossibleTests.class;
-	private static final String REFACTORING_PATH= "UseSupertypeWherePossible/";
-	
-	public UseSupertypeWherePossibleTests(String name) {
-		super(name);
-	}
-	
-	public static Test suite() {
-		return new MySetup(new TestSuite(clazz));
-	}
-	
-	protected String getRefactoringPath() {
-		return REFACTORING_PATH;
-	}
-
-	protected void setUp() throws Exception {
-		super.setUp();
-		Template[] typecomments= Templates.getInstance().getTemplates("typecomment");
-		for (int i= 0; i < typecomments.length; i++) {
-			typecomments[i].setPattern("/** typecomment template*/");	
-		}
-		Template[] filecomments= Templates.getInstance().getTemplates("filecomment");
-		for (int i= 0; i < filecomments.length; i++) {
-			filecomments[i].setPattern("/** filecomment template */");	
-		}
-	}
-		
-	/******* shortcuts **********/
-	
-	private IType getClassFromTestFile(IPackageFragment pack, String className) throws Exception{
-		return getType(createCUfromTestFile(pack, className), className);
-	}
-
-	private void validatePassingTest(String className, String[] cuNames, String superTypeFullName, boolean updateInstanceOf) throws Exception {
-		IType clas= getClassFromTestFile(getPackageP(), className);
-				
-		UseSupertypeWherePossibleRefactoring ref= new UseSupertypeWherePossibleRefactoring(clas, JavaPreferencesSettings.getCodeGenerationSettings());
-		ref.setUseSupertypeInInstanceOf(updateInstanceOf);
-			
-		ICompilationUnit[] cus= new ICompilationUnit[cuNames.length];
-		for (int i= 0; i < cuNames.length; i++) {
-			cus[i]= createCUfromTestFile(clas.getPackageFragment(), cuNames[i]);			
-		}
-		ref.setSuperTypeToUse(JavaModelUtil.findType(clas.getJavaProject(), superTypeFullName));
-		assertEquals("was supposed to pass", null, performRefactoring(ref));
-
-		for (int i= 0; i < cus.length; i++) {
-			assertEquals("incorrect changes in " + cus[i].getElementName(), getFileContents(getOutputTestFileName(cuNames[i])), cus[i].getSource());
-		}
-	}
-
-	private void validatePassingTest(String className, String[] cuNames, String superTypeFullName) throws Exception {
-		validatePassingTest(className, cuNames, superTypeFullName, false);
-	}
-
-	//---------------tests ----------------------
-	
-	public void testNew0() throws Exception{
-		validatePassingTest("A", new String[]{"A"}, "java.lang.Object");
-	}
-
-	public void testNew1() throws Exception{
-		printTestDisabledMessage("bug 23597 ");
-//		validatePassingTest("A", new String[]{"A"}, "java.lang.Object");
-	}
-
-	public void testNew2() throws Exception{
-		validatePassingTest("A", new String[]{"A"}, "java.lang.Object");
-	}
-
-	public void testNew3() throws Exception{
-		validatePassingTest("A", new String[]{"A"}, "java.lang.Object");
-	}
-
-	public void testNew4() throws Exception{
-		validatePassingTest("A", new String[]{"A", "Test"}, "java.lang.Object");
-	}
-
-	public void testNew5() throws Exception{
-		validatePassingTest("A", new String[]{"A", "Test"}, "java.lang.Object");
-	}
-
-	public void testNew6() throws Exception{
-		validatePassingTest("A", new String[]{"A", "Test"}, "java.lang.Object");
-	}
-
-	public void testNew7() throws Exception{
-		validatePassingTest("A", new String[]{"A", "Test", "B"}, "p.B");
-	}
-	
-	public void testNew8() throws Exception{
-		validatePassingTest("A", new String[]{"A", "Test", "B"}, "p.B");
-	}
-
-	public void testNew9() throws Exception{
-		validatePassingTest("A", new String[]{"A", "Test"}, "java.lang.Object");
-	}
-
-	public void testNew10() throws Exception{
-		validatePassingTest("A", new String[]{"A", "Test", "B"}, "p.B");
-	}
-
-	public void testNew11() throws Exception{
-		validatePassingTest("A", new String[]{"A", "Test", "B"}, "p.B");
-	}
-
-	public void testNew12() throws Exception{
-		validatePassingTest("A", new String[]{"A", "Test", "B"}, "p.B");
-	}
-
-	public void testNew13() throws Exception{
-		validatePassingTest("A", new String[]{"A", "Test", "B"}, "p.B");
-	}
-
-	public void testNew14() throws Exception{
-		validatePassingTest("A", new String[]{"A", "Test", "B"}, "p.B");
-	}
-
-	public void testNew15() throws Exception{
-		validatePassingTest("A", new String[]{"A", "Test", "B"}, "p.B");
-	}
-
-	public void testNew16() throws Exception{
-//		printTestDisabledMessage("instanceof ");
-		validatePassingTest("A", new String[]{"A", "Test", "B"}, "p.B");
-	}
-
-	public void testNew17() throws Exception{
-		validatePassingTest("A", new String[]{"A"}, "p.C");
-	}
-
-	public void testNew18() throws Exception{
-		validatePassingTest("A", new String[]{"A"}, "p.B");
-	}
-
-	public void testNew19() throws Exception{
-		validatePassingTest("A", new String[]{"A"}, "p.I");
-	}
-
-	public void testNew20() throws Exception{
-		printTestDisabledMessage("http://dev.eclipse.org/bugs/show_bug.cgi?id=23829");
-//		validatePassingTest("A", new String[]{"A"}, "p.B");
-	}
-
-	public void testNew21() throws Exception{
-		validatePassingTest("A", new String[]{"A"}, "java.lang.Object");
-	}
-
-	public void testNew22() throws Exception{
-		validatePassingTest("A", new String[]{"A", "B", "Test"}, "p.B");
-	}
-
-	public void testNew23() throws Exception{
-		validatePassingTest("A", new String[]{"A", "B", "Test"}, "java.lang.Object");
-	}
-
-	public void testNew24() throws Exception{
-		validatePassingTest("A", new String[]{"A", "B"}, "java.lang.Object");
-	}
-
-	public void testNew25() throws Exception{
-		validatePassingTest("A", new String[]{"A", "B", "C"}, "java.lang.Object");
-	}
-
-	public void testNew26() throws Exception{
-		validatePassingTest("A", new String[]{"A", "B"}, "java.lang.Object");
-	}
-
-	public void testNew27() throws Exception{
-		validatePassingTest("A", new String[]{"A", "B"}, "p.B");
-	}
-
-	public void testNew28() throws Exception{
-		validatePassingTest("A", new String[]{"A", "B"}, "p.B");
-	}
-
-	public void testNew29() throws Exception{
-		printTestDisabledMessage("bug 24278");
-//		validatePassingTest("A", new String[]{"A"}, "p.B");
-	}
-
-	public void testNew30() throws Exception{
-		printTestDisabledMessage("bug 24278");
-//		validatePassingTest("A", new String[]{"A"}, "p.B");
-	}
-
-	/* i had to rename tests 0-15 because of cvs problems*/
-	
-	
-	public void test0_() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test1_() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test2_() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test3_() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test4_() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test5_() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test6_() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test7_() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test8_() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test9_() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test10_() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test11_() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test12_() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test13_() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test14_() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test15_() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test16() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test17() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test18() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test19() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test20() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test21() throws Exception{
-		//disable for exceptions
-//		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test22() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test23() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test24() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test25() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test26() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test27() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test28() throws Exception{
-		printTestDisabledMessage("bug 22883");
-//		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test29() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test30() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test31() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test32() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test33() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test34() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test35() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test36() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test37() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test38() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test39() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test40() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test41() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test42() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test43() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test44() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test45() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test46() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test47() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test48() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test49() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test50() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test51() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test52() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test53() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test54() throws Exception{
-		validatePassingTest("A", new String[]{"A", "A1", "I"}, "p.I");
-	}
-	public void test55() throws Exception{
-		validatePassingTest("A", new String[]{"A", "A1", "I"}, "p.I");
-	}
-	public void test56() throws Exception{
-		validatePassingTest("A", new String[]{"A", "A1", "I"}, "p.I");
-	}
-	public void test57() throws Exception{
-		validatePassingTest("A", new String[]{"A", "A1", "I"}, "p.I");
-	}
-	public void test58() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test59() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test60() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test61() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test62() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test63() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test64() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I", "Inter"}, "p.I");
-	}
-	public void test65() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test66() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test67() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-	public void test68() throws Exception{
-		validatePassingTest("A", new String[]{"A", "As", "I"}, "p.I");
-	}
-	public void test69() throws Exception{
-		validatePassingTest("A", new String[]{"A", "As", "I"}, "p.I");
-	}
-	public void test70() throws Exception{
-		validatePassingTest("A", new String[]{"A", "I"}, "p.I");
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/infra/AbstractCUTestCase.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/infra/AbstractCUTestCase.java
deleted file mode 100644
index bef6802..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/infra/AbstractCUTestCase.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.refactoring.infra;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IPackageFragment;
-
-import org.eclipse.jdt.internal.corext.util.Strings;
-
-public abstract class AbstractCUTestCase extends TestCase {
-
-	public AbstractCUTestCase(String name) {
-		super(name);
-	}
-	
-	protected String getFileContents(InputStream in) throws IOException {
-		BufferedReader br= new BufferedReader(new InputStreamReader(in));
-		
-		StringBuffer sb= new StringBuffer();
-		try {
-			int read= 0;
-			while ((read= br.read()) != -1)
-				sb.append((char) read);
-		} finally {
-			br.close();
-		}
-		return sb.toString();
-	}
-	
-	protected ICompilationUnit createCU(IPackageFragment pack, String name, String contents) throws Exception {
-		ICompilationUnit cu= pack.createCompilationUnit(name, contents, true, null);
-		cu.save(null, true);
-		return cu;
-	}
-	
-	protected ICompilationUnit createCU(IPackageFragment pack, String name, InputStream contents) throws Exception {
-		return createCU(pack, name, getFileContents(contents));
-	}
-
-	//--- creating a compilation unit from a resource folder relative to a plugin ----------------------------------
-	
-	protected abstract InputStream getFileInputStream(String fileName) throws IOException;
-
-	protected String getResourceLocation() {
-		return "";
-	}
-
-	protected ICompilationUnit createCU(IPackageFragment pack, String name) throws Exception {
-		name= adaptName(name);
-		return createCU(pack, name, getFileInputStream(getFilePath(pack, name)));
-	}
-	
-	protected String adaptName(String name) {
-		return name + ".java";
-	}
-	
-	protected String getProofedContent(String folder, String name) throws Exception {
-		name= adaptName(name);
-		return getFileContents(getFileInputStream(getFilePath(folder, name)));
-	}
-	
-	private String getFilePath(String path, String name) {
-		return getResourceLocation() + path + "/" + name;
-	}
-	
-	private String getFilePath(IPackageFragment pack, String name) {
-		return getFilePath(pack.getElementName(), name);		
-	}
-	
-	//---- helper to compare two file without considering the package statement
-	
-	public static void compareSource(String refactored, String proofed) {
-		compareSource(refactored, proofed, true);
-	}
-	
-	public static void compareSource(String refactored, String proofed, boolean skipPackageDeclaration) {
-		int index= skipPackageDeclaration ? index = refactored.indexOf(';'): 0;
-		String[] refactoredCode= Strings.convertIntoLines(refactored.substring(index));
-		index= proofed.indexOf(';');
-		String[] proofedCode= Strings.convertIntoLines(proofed.substring(index));
-		assertEquals("Length difference", proofedCode.length, refactoredCode.length);
-		for (int i= 0; i < proofedCode.length; i++) {
-			assertEquals("Line difference", proofedCode[i], refactoredCode[i]);
-		}
-	}
-			
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/infra/MockSelectionProvider.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/infra/MockSelectionProvider.java
deleted file mode 100644
index 096559c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/infra/MockSelectionProvider.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.eclipse.jdt.ui.tests.refactoring.infra;
-
-import java.util.Collection;
-
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.ISelectionProvider;
-import org.eclipse.jface.viewers.StructuredSelection;
-
-import org.eclipse.jdt.internal.corext.Assert;
-
-public class MockSelectionProvider implements ISelectionProvider {
-	private ISelection fSelection;
-
-	public MockSelectionProvider(Collection collection) {
-		this(collection.toArray());
-	}
-	
-	public MockSelectionProvider(Object[] elements) {
-		Assert.isNotNull(elements);
-		fSelection= new StructuredSelection(elements);
-	}
-
-	public void addSelectionChangedListener(ISelectionChangedListener listener) {
-	}
-
-	public ISelection getSelection() {
-		return fSelection;
-	}
-
-	public void removeSelectionChangedListener(ISelectionChangedListener listener) {
-	}
-
-	public void setSelection(ISelection selection) {
-	}
-
-}
-
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/infra/MockWorkbenchSite.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/infra/MockWorkbenchSite.java
deleted file mode 100644
index 182614a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/infra/MockWorkbenchSite.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package org.eclipse.jdt.ui.tests.refactoring.infra;
-
-import org.eclipse.swt.widgets.Shell;
-
-import org.eclipse.jface.viewers.ISelectionProvider;
-
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchSite;
-import org.eclipse.ui.IWorkbenchWindow;
-
-public class MockWorkbenchSite implements IWorkbenchSite {
-	
-	private ISelectionProvider fProvider;
-	public MockWorkbenchSite(Object[] elements){
-		fProvider= new MockSelectionProvider(elements);
-	}
-	public IWorkbenchPage getPage() {
-		return null;
-	}
-
-	public ISelectionProvider getSelectionProvider() {
-		return fProvider;
-	}
-
-	public Shell getShell() {
-		return new Shell();
-	}
-
-	public IWorkbenchWindow getWorkbenchWindow() {
-		return null;
-	}
-
-	public void setSelectionProvider(ISelectionProvider provider) {
-		fProvider= provider;
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/infra/RefactoringTestPlugin.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/infra/RefactoringTestPlugin.java
deleted file mode 100644
index 91889d8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/infra/RefactoringTestPlugin.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.refactoring.infra;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.IWorkspaceDescription;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IPluginDescriptor;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Plugin;
-
-
-public class RefactoringTestPlugin extends Plugin {
-	
-	private static RefactoringTestPlugin fgDefault;
-	
-	public RefactoringTestPlugin(IPluginDescriptor descriptor) {
-		super(descriptor);
-		fgDefault= this;
-	}
-	
-	public static RefactoringTestPlugin getDefault() {
-		return fgDefault;
-	}
-	
-	public static IWorkspace getWorkspace() {
-		return ResourcesPlugin.getWorkspace();
-	}
-	
-	public static void enableAutobuild(boolean enable) throws CoreException {
-		// disable auto build
-		IWorkspace workspace= getWorkspace();
-		IWorkspaceDescription desc= workspace.getDescription();
-		desc.setAutoBuilding(enable);
-		workspace.setDescription(desc);
-	}
-	
-	public InputStream getTestResourceStream(String fileName) throws IOException {
-		IPath path= new Path("resources").append(fileName);
-		URL url= new URL(getDescriptor().getInstallURL(), path.toString());
-		return url.openStream();
-	}
-	
-	public File getFileInPlugin(IPath path) {
-		try {
-			URL installURL= new URL(getDescriptor().getInstallURL(), path.toString());
-			URL localURL= Platform.asLocalURL(installURL);
-			return new File(localURL.getFile());
-		} catch (IOException e) {
-			return null;
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/infra/TestExceptionHandler.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/infra/TestExceptionHandler.java
deleted file mode 100644
index 448e72e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/infra/TestExceptionHandler.java
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/infra/TextRangeUtil.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/infra/TextRangeUtil.java
deleted file mode 100644
index d7425c8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/infra/TextRangeUtil.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package org.eclipse.jdt.ui.tests.refactoring.infra;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.ISourceRange;
-
-import org.eclipse.jdt.internal.corext.SourceRange;
-import org.eclipse.jdt.internal.corext.textmanipulation.TextBuffer;
-
-public class TextRangeUtil {
-
-	//no instances
-	private TextRangeUtil(){}
-	
-	public static ISourceRange getSelection(ICompilationUnit cu, int startLine, int startColumn, int endLine, int endColumn) throws Exception{
-		int offset= getOffset(cu, startLine, startColumn);
-		int end= getOffset(cu, endLine, endColumn);
-		return new SourceRange(offset, end - offset);
-	}
-
-	public static int getOffset(ICompilationUnit cu, int line, int column) throws Exception{
-		TextBuffer tb= TextBuffer.create(cu.getSource());
-		int r= tb.getLineInformation(line - 1).getOffset();
-		
-		int lineTabCount= calculateTabCountInLine(tb.getLineContent(line - 1), column);		
-		r += (column - 1) - (lineTabCount * getTabWidth()) + lineTabCount;
-		return r ;
-	}
-	
-	private static final int getTabWidth(){
-		return 4;
-	}
-	
-	public static int calculateTabCountInLine(String lineSource, int lastCharOffset){
-		int acc= 0;
-		int charCount= 0;
-		for(int i= 0; charCount < lastCharOffset - 1; i++){
-			if ('\t' == lineSource.charAt(i)){
-				acc++;
-				charCount += getTabWidth();
-			}	else
-				charCount += 1;
-		}
-		return acc;
-	}
-
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test.xml b/org.eclipse.jdt.ui.tests.refactoring/test.xml
deleted file mode 100644
index b592cf5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="testsuite" default="run" basedir=".">
-  <!-- The property ${eclipse-home} should be passed into this script -->
-  <!-- Set a meaningful default value for when it is not. -->
-  <property name="eclipse-home" value="${basedir}\..\.."/>
-
-  <!-- sets the properties eclipse-home, and library-file -->
-  <property name="plugin-name" value="org.eclipse.jdt.ui.tests.refactoring"/>
-  <property name="library-file"
-            value="${eclipse-home}/plugins/org.eclipse.test/library.xml"/>
-
-  <!-- This target holds all initialization code that needs to be done for -->
-  <!-- all tests that are to be run. Initialization for individual tests -->
-  <!-- should be done within the body of the suite target. -->
-  <target name="init">
-    <tstamp/>
-    <delete>
-      <fileset dir="${eclipse-home}" includes="org*.xml"/>
-    </delete>
-  </target>
-
-  <!-- This target defines the tests that need to be run. -->
-  <target name="suite">
-    <property name="refactoring-folder" 
-              value="${eclipse-home}/refactoring_folder"/>
-    <delete dir="${refactoring-folder}" quiet="true"/>
-    <ant target="ui-test" antfile="${library-file}" dir="${eclipse-home}">
-      <property name="data-dir" value="${refactoring-folder}"/>
-      <property name="plugin-name" value="${plugin-name}"/>
-      <property name="classname" 
-                value="org.eclipse.jdt.ui.tests.all.AllAllTests"/>
-    </ant>
-  </target>
-
-  <!-- This target holds code to cleanup the testing environment after -->
-  <!-- after all of the tests have been run. You can use this target to -->
-  <!-- delete temporary files that have been created. -->
-  <target name="cleanup">
-  </target>
-
-  <!-- This target runs the test suite. Any actions that need to happen -->
-  <!-- after all the tests have been run should go here. -->
-  <target name="run" depends="init,suite,cleanup">
-    <ant target="collect" antfile="${library-file}" dir="${eclipse-home}">
-      <property name="includes" value="org*.xml"/>
-      <property name="output-file" value="${plugin-name}.xml"/>
-    </ant>
-  </target>
-
-</project>
diff --git a/org.eclipse.jdt.ui.tests/.classpath b/org.eclipse.jdt.ui.tests/.classpath
deleted file mode 100644
index 3852122..0000000
--- a/org.eclipse.jdt.ui.tests/.classpath
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-    <classpathentry kind="src" path="examples"/>
-    <classpathentry kind="src" path="test plugin"/>
-    <classpathentry kind="src" path="ui"/>
-    <classpathentry kind="src" path="/org.eclipse.core.boot"/>
-    <classpathentry kind="src" path="/org.eclipse.core.runtime"/>
-    <classpathentry kind="src" path="/org.junit"/>
-    <classpathentry kind="src" path="/org.eclipse.core.resources"/>
-    <classpathentry kind="src" path="/org.apache.xerces"/>
-    <classpathentry kind="src" path="/org.eclipse.ui"/>
-    <classpathentry kind="src" path="/org.eclipse.jdt.core"/>
-    <classpathentry kind="src" path="/org.eclipse.jdt.ui"/>
-    <classpathentry kind="src" path="/org.eclipse.jdt.launching"/>
-    <classpathentry kind="var" path="JRE_LIB" rootpath="JRE_SRCROOT" sourcepath="JRE_SRC"/>
-    <classpathentry kind="src" path="/org.eclipse.jdt.debug.ui"/>
-    <classpathentry kind="src" path="/org.eclipse.update.core"/>
-    <classpathentry kind="src" path="/org.eclipse.update.core.win32"/>
-    <classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/org.eclipse.jdt.ui.tests/.cvsignore b/org.eclipse.jdt.ui.tests/.cvsignore
deleted file mode 100644
index c5e82d7..0000000
--- a/org.eclipse.jdt.ui.tests/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-bin
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests/.plugins-path b/org.eclipse.jdt.ui.tests/.plugins-path
deleted file mode 100644
index 36f1716..0000000
--- a/org.eclipse.jdt.ui.tests/.plugins-path
+++ /dev/null
@@ -1 +0,0 @@
-platformPath = file:/d:/workspaces/eclipse-sh1/plugins/
diff --git a/org.eclipse.jdt.ui.tests/.project b/org.eclipse.jdt.ui.tests/.project
deleted file mode 100644
index bcadd97..0000000
--- a/org.eclipse.jdt.ui.tests/.project
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jdt.ui.tests</name>
-	<comment></comment>
-	<projects>
-		<project>org.apache.xerces</project>
-		<project>org.eclipse.core.boot</project>
-		<project>org.eclipse.core.resources</project>
-		<project>org.eclipse.core.runtime</project>
-		<project>org.eclipse.jdt.core</project>
-		<project>org.eclipse.jdt.debug.ui</project>
-		<project>org.eclipse.jdt.junit.eclipse</project>
-		<project>org.eclipse.jdt.launching</project>
-		<project>org.eclipse.jdt.ui</project>
-		<project>org.eclipse.swt</project>
-		<project>org.eclipse.ui</project>
-		<project>org.eclipse.update.core</project>
-		<project>org.eclipse.update.core.win32</project>
-		<project>org.junit</project>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/org.eclipse.jdt.ui.tests/about.html b/org.eclipse.jdt.ui.tests/about.html
deleted file mode 100644
index fad1e4a..0000000
--- a/org.eclipse.jdt.ui.tests/about.html
+++ /dev/null
@@ -1,44 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
-
-<p>20th June, 2002</p>	
-<h3>License</h3>
-<p>Eclipse.org makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
-Common Public License Version 1.0 (&quot;CPL&quot;).  A copy of the CPL is available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>.
-For purposes of the CPL, &quot;Program&quot; will mean the Content.</p>
-
-<h3>Third Party Content</h3>
-
-<p>The Content includes items that may be have been sourced from third parties as follows:</p>
-
-<p><b>JUnit 3.7</b></p>
-<p>The plug-in is based on software developed by JUnit.org.  Your use of JUnit 3.7 in both source and binary code
-form contained in the plug-in is subject to the terms and conditions of the IBM Public License 1.0 which is available at
-<a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>.
-The source code is located in testresources/junit37-noUI-src.zip.</p>
-
-<p>i) IBM effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;</p>
-<p>ii) IBM effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;</p>
-<p>iii) IBM states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party.</p>
-
-<h3>Contributions</h3>
-
-<p>If this Content is licensed to you under the terms and conditions of the CPL, any Contributions, as defined in the CPL, uploaded, submitted, or otherwise
-made available to Eclipse.org, members of Eclipse.org and/or the host of Eclipse.org web site, by you that relate to such
-Content are provided under the terms and conditions of the CPL and can be made available to others under the terms of the CPL.</p>
-
-<p>If this Content is licensed to you under license terms and conditions other than the CPL (&quot;Other License&quot;), any modifications, enhancements and/or
-other code and/or documentation (&quot;Modifications&quot;) uploaded, submitted, or otherwise made available to Eclipse.org, members of Eclipse.org and/or the
-host of Eclipse.org, by you that relate to such Content are provided under terms and conditions of the Other License and can be made available
-to others under the terms of the Other License.  In addition, with regard to Modifications for which you are the copyright holder, you are also
-providing the Modifications under the terms and conditions of the CPL and such Modifications can be made available to others under the terms of
-the CPL.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests/build.properties b/org.eclipse.jdt.ui.tests/build.properties
deleted file mode 100644
index fd03a9e..0000000
--- a/org.eclipse.jdt.ui.tests/build.properties
+++ /dev/null
@@ -1,8 +0,0 @@
-bin.includes = plugin.xml,\
-               test.xml,\
-               about.html,\
-               testresources/,\
-               *.jar
-source.javauitests.jar = examples/,\
-                         test plugin/,\
-                         ui/
diff --git a/org.eclipse.jdt.ui.tests/examples/org/eclipse/jdt/ui/examples/CheckBoxExample.java b/org.eclipse.jdt.ui.tests/examples/org/eclipse/jdt/ui/examples/CheckBoxExample.java
deleted file mode 100644
index 9037cd2..0000000
--- a/org.eclipse.jdt.ui.tests/examples/org/eclipse/jdt/ui/examples/CheckBoxExample.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.examples;
-
-
-import java.util.List;
-import java.util.Random;
-
-
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-
-
-import org.eclipse.jface.viewers.LabelProvider;
-
-
-import org.eclipse.jdt.internal.ui.wizards.dialogfields.CheckedListDialogField;
-import org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField;
-import org.eclipse.jdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
-import org.eclipse.jdt.internal.ui.wizards.dialogfields.IListAdapter;
-import org.eclipse.jdt.internal.ui.wizards.dialogfields.IStringButtonAdapter;
-import org.eclipse.jdt.internal.ui.wizards.dialogfields.LayoutUtil;
-
-
-public class CheckBoxExample {
-	private Shell fShell;
-	private Label fLabel;
-	
-	public CheckBoxExample() {
-	}
-	
-	public CheckBoxExample close () {
-		if ((fShell != null) && (!fShell.isDisposed ())) fShell.dispose ();
-		fShell= null;
-		return this;
-	}
-	
-	public CheckBoxExample open () {
-		fShell= new Shell ();
-		fShell.setText("Message Dialog Example");
-		fShell.setLayout(new GridLayout());
-		
-		Adapter adapter= new Adapter();
-
-
-		
-		String[] addButtons= new String[] { 
-			/* 0 */ "Add1", 
-			/* 1 */ "Check 0", 
-			/* 2 */ "Print", 
-			/* 3 */ null, 
-			/* 4 */ "Check All", 
-			/* 5 */ "Uncheck All", 
-			/* 6 */ null, 
-			/* 7 */ "Remove"
-		};
-		CheckedListDialogField list= new CheckedListDialogField(adapter, addButtons, new LabelProvider());
-		list.setCheckAllButtonIndex(4);
-		list.setUncheckAllButtonIndex(5);
-		list.setRemoveButtonIndex(7);
-		list.setLabelText("List: ");
-				
-		LayoutUtil.doDefaultLayout(fShell, new DialogField[] { list }, false);
-		
-		fShell.setSize(400,500);
-		fShell.open ();
-		return this;
-	}
-	
-	private static Random fgRandom= new Random();
-	
-	private class Adapter implements IStringButtonAdapter, IDialogFieldListener, IListAdapter {
-		
-		// -------- IStringButtonAdapter
-		public void changeControlPressed(DialogField field) {
-		}		
-				
-		// -------- IListAdapter
-		public void customButtonPressed(DialogField field, int index) {
-			if (field instanceof CheckedListDialogField) {
-				CheckedListDialogField list= (CheckedListDialogField)field;
-				if (index == 0) {
-					list.addElement("element-" + (fgRandom.nextInt() % 1000));
-				} else if (index == 2) {
-					System.out.println("---- printing all");
-					List checked= list.getCheckedElements();
-					for (int i= 0; i < checked.size(); i++) {
-						System.out.println(checked.get(i).toString());
-					}
-				} else {
-					list.setChecked(list.getElement(0), true);
-				}	
-			}
-		}
-		
-		public void selectionChanged(DialogField field) {}
-		
-		// -------- IDialogFieldListener
-		public void dialogFieldChanged(DialogField field) {
-		}
-	}	
-	
-	public CheckBoxExample run () {
-		Display display= fShell.getDisplay ();
-		while (!fShell.isDisposed ()) {
-			if (!display.readAndDispatch ()) display.sleep ();
-		}
-		return this;
-	}
-	
-	public static void main(java.lang.String[] args) {
-		new CheckBoxExample().open().run().close();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests/examples/org/eclipse/jdt/ui/examples/DialogFieldExample.java b/org.eclipse.jdt.ui.tests/examples/org/eclipse/jdt/ui/examples/DialogFieldExample.java
deleted file mode 100644
index c9ac6a9..0000000
--- a/org.eclipse.jdt.ui.tests/examples/org/eclipse/jdt/ui/examples/DialogFieldExample.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.examples;
-
-
-import java.util.Random;
-
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-
-
-import org.eclipse.jface.viewers.LabelProvider;
-
-
-import org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField;
-import org.eclipse.jdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
-import org.eclipse.jdt.internal.ui.wizards.dialogfields.IListAdapter;
-import org.eclipse.jdt.internal.ui.wizards.dialogfields.IStringButtonAdapter;
-import org.eclipse.jdt.internal.ui.wizards.dialogfields.LayoutUtil;
-import org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField;
-import org.eclipse.jdt.internal.ui.wizards.dialogfields.SelectionButtonDialogField;
-import org.eclipse.jdt.internal.ui.wizards.dialogfields.SelectionButtonDialogFieldGroup;
-import org.eclipse.jdt.internal.ui.wizards.dialogfields.StringButtonDialogField;
-import org.eclipse.jdt.internal.ui.wizards.dialogfields.StringDialogField;
-import org.eclipse.swt.layout.GridData;
-
-
-public class DialogFieldExample {
-	private Shell fShell;
-	private Label fLabel;
-	
-	public DialogFieldExample() {
-	}
-	
-	public DialogFieldExample close () {
-		if ((fShell != null) && (!fShell.isDisposed ())) fShell.dispose ();
-		fShell= null;
-		return this;
-	}
-	
-	public DialogFieldExample open () {
-		fShell= new Shell ();
-		fShell.setText("Message Dialog Example");
-		fShell.setLayout(new GridLayout());
-		
-		Adapter adapter= new Adapter();
-		
-		StringButtonDialogField string1= new StringButtonDialogField(adapter);
-		string1.setLabelText("String1: ");
-		string1.setText("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
-		
-		StringButtonDialogField stringbutton= new StringButtonDialogField(adapter);
-		stringbutton.setLabelText("StringButton: ");
-		stringbutton.setButtonLabel("Click");
-		stringbutton.setText("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
-
-		
-		String[] addButtons= new String[] { 
-			/* 0 */ "Add1",
-			/* 1 */ "Add2",
-			/* 2 */ null,
-			/* 3 */ "Up",
-			/* 4 */ "Down",					
-			/* 5 */ null,
-			/* 6 */ "Remove"
-		};
-		ListDialogField list= new ListDialogField(adapter, addButtons, new LabelProvider());
-		list.setUpButtonIndex(3);
-		list.setDownButtonIndex(4);
-		list.setRemoveButtonIndex(6);
-		list.setLabelText("List: ");
-		
-		for (int i= 0; i < 30; i++) {
-				list.addElement(i + "firstxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
-		}
-		
-		SelectionButtonDialogField selButton= new SelectionButtonDialogField(SWT.PUSH);
-		selButton.setLabelText("Press Button");
-		
-		String[] radioButtons1= new String[] { "Option One", "Option Two", "Option Three" };
-		SelectionButtonDialogFieldGroup rdgroup1= new SelectionButtonDialogFieldGroup(SWT.RADIO, radioButtons1, 3, 0);
-		rdgroup1.setLabelText("Radio Button Group");
-		
-		String[] radioButtons2= new String[] { "Option One", "Option Two", "Option Three" };
-		SelectionButtonDialogFieldGroup rdgroup2= new SelectionButtonDialogFieldGroup(SWT.CHECK, radioButtons2, 3);
-		rdgroup2.setLabelText("Radio Button Group 2");		
-		
-		LayoutUtil.doDefaultLayout(fShell, new DialogField[] { string1, rdgroup2, stringbutton, selButton, list, rdgroup1 }, false);
-		
-		((GridData)string1.getTextControl(null).getLayoutData()).widthHint= 100;
-		((GridData)stringbutton.getTextControl(null).getLayoutData()).widthHint= 100;
-		
-		fShell.setSize(fShell.computeSize(SWT.DEFAULT, SWT.DEFAULT));
-		fShell.open ();
-		return this;
-	}
-	
-	private static Random fgRandom= new Random();
-	
-	private class Adapter implements IStringButtonAdapter, IDialogFieldListener, IListAdapter {
-		
-		// -------- IStringButtonAdapter
-		public void changeControlPressed(DialogField field) {
-		}		
-				
-		// -------- IListAdapter
-		public void customButtonPressed(DialogField field, int index) {
-			if (field instanceof ListDialogField) {
-				ListDialogField list= (ListDialogField)field;
-				list.addElement("elementxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-" + fgRandom.nextInt());
-			}
-		}
-		
-		public void selectionChanged(DialogField field) {}
-		
-		// -------- IDialogFieldListener
-		public void dialogFieldChanged(DialogField field) {
-		}
-	}	
-	
-	public DialogFieldExample run () {
-		Display display= fShell.getDisplay ();
-		while (!fShell.isDisposed ()) {
-			if (!display.readAndDispatch ()) display.sleep ();
-		}
-		return this;
-	}
-	
-	public static void main(java.lang.String[] args) {
-		new DialogFieldExample().open().run().close();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests/examples/org/eclipse/jdt/ui/examples/MultiElementListSelectorExample.java b/org.eclipse.jdt.ui.tests/examples/org/eclipse/jdt/ui/examples/MultiElementListSelectorExample.java
deleted file mode 100644
index c7ba6ab..0000000
--- a/org.eclipse.jdt.ui.tests/examples/org/eclipse/jdt/ui/examples/MultiElementListSelectorExample.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.examples;
-
-
-import java.util.Random;
-
-import org.eclipse.core.runtime.IStatus;
-
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-
-import org.eclipse.jface.viewers.ILabelProvider;
-
-import org.eclipse.ui.dialogs.ISelectionStatusValidator;
-
-import org.eclipse.jdt.internal.ui.dialogs.MultiElementListSelectionDialog;
-import org.eclipse.jdt.internal.ui.dialogs.StatusInfo;
-
-
-public class MultiElementListSelectorExample {
-
-
-	public static void main(String[] args) {
-
-
-		ISelectionStatusValidator validator= new ISelectionStatusValidator() {
-			public IStatus validate(Object[] selection) {
-				if (selection != null && selection.length == 1) {
-					return new StatusInfo();
-				} else {
-					StatusInfo status= new StatusInfo();
-					status.setError("Single selection");
-					return status;
-				}
-				
-			}
-		};
-
-
-
-		Random random= new Random();
-		
-		ILabelProvider elementRenderer= new org.eclipse.jface.viewers.LabelProvider() {
-			public String getText(Object element) {
-				return element.toString();
-			}
-		};
-		
-		int nLists= 3;
-		
-		Object[][] elements= new Object[nLists][];
-		for (int i= 0; i < nLists; i++) {
-			int size= random.nextInt(15);
-			elements[i]= new String[size];
-			for (int k= 0; k < size; k++) {
-				elements[i][k]= "elem-" + i + "-" + k;
-			}
-		}
-		Display display= new Display();
-		MultiElementListSelectionDialog d= new MultiElementListSelectionDialog(new Shell(display), elementRenderer);
-		d.setTitle("Title");
-		d.setIgnoreCase(true);
-		d.setMessage("this is a message");
-		d.setValidator(validator);
-		d.setElements(elements);
-		
-		d.open();
-		
-		Object[] res= d.getResult();
-		for (int i= 0; i < res.length; i++)
-			System.out.println(res[i]);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests/examples/org/eclipse/jdt/ui/examples/TabExample.java b/org.eclipse.jdt.ui.tests/examples/org/eclipse/jdt/ui/examples/TabExample.java
deleted file mode 100644
index 895de80..0000000
--- a/org.eclipse.jdt.ui.tests/examples/org/eclipse/jdt/ui/examples/TabExample.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.examples;
-
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.TabFolder;
-import org.eclipse.swt.widgets.TabItem;
-
-
-import org.eclipse.jface.viewers.LabelProvider;
-
-
-import org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField;
-import org.eclipse.jdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
-import org.eclipse.jdt.internal.ui.wizards.dialogfields.IListAdapter;
-import org.eclipse.jdt.internal.ui.wizards.dialogfields.IStringButtonAdapter;
-import org.eclipse.jdt.internal.ui.wizards.dialogfields.LayoutUtil;
-import org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField;
-
-
-public class TabExample {
-	private Shell fShell;
-	private Label fLabel;
-	
-	public TabExample() {
-	}
-	
-	public TabExample close () {
-		if ((fShell != null) && (!fShell.isDisposed ())) fShell.dispose ();
-		fShell= null;
-		return this;
-	}
-	
-	public TabExample open () {
-		fShell= new Shell ();
-		fShell.setText("TabTest");
-		fShell.setLayout(new GridLayout());
-		
-		TabFolder folder= new TabFolder(fShell, SWT.NONE);	
-		folder.setLayoutData(new GridData(GridData.FILL_BOTH));
-		//folder.setLayout(new PageContainerFillLayout(0, 0, 20, 20));
-		//folder.setLayout(new FillLayout());
-	
-		/*folder.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent event) {
-				turnToPage(event);
-			}
-		});*/	
-				
-		TabItem item;
-		Label label;
-		
-		item= new TabItem(folder, SWT.NONE);
-		item.setText("Tab0");
-		
-		String[] addButtons= new String[] { 
-			/* 0 */ "Add1",
-			/* 1 */ "Add2",			
-			/* 2 */ null,
-			/* 3 */ "Remove"
-		};
-		ListDialogField list= new ListDialogField(new Adapter(), addButtons, new LabelProvider());
-		list.setRemoveButtonIndex(3);
-		list.setLabelText("List: ");
-
-
-		Composite c1= new Composite(folder, SWT.NONE);
-		LayoutUtil.doDefaultLayout(c1, new DialogField[] { list }, true);
-		
-		item.setControl(c1);
-		
-		item= new TabItem(folder, SWT.NONE);
-		item.setText("Tab1");
-		label= new Label(folder, SWT.LEFT);
-		label.setText("Tab1");
-		item.setControl(label);
-		
-		item= new TabItem(folder, SWT.NONE);
-		item.setText("Tab2");
-		label= new Label(folder, SWT.LEFT);
-		label.setText("Tab2");
-		item.setControl(label);
-		
-		item= new TabItem(folder, SWT.NONE);
-		item.setText("Tab3");
-		label= new Label(folder, SWT.LEFT);
-		label.setText("Tab3");
-		item.setControl(label);
-				
-		fShell.setSize(400,500);
-		fShell.open ();
-		return this;
-	}
-
-
-	private class Adapter implements IStringButtonAdapter, IDialogFieldListener, IListAdapter {
-		
-		// -------- IStringButtonAdapter
-		public void changeControlPressed(DialogField field) {
-		}		
-				
-		// -------- IListAdapter
-		public void customButtonPressed(DialogField field, int index) {
-		}
-		
-		public void selectionChanged(DialogField field) {
-		}
-		
-		// -------- IDialogFieldListener
-		public void dialogFieldChanged(DialogField field) {
-		}
-	}
-	
-	public TabExample run () {
-		Display display= fShell.getDisplay ();
-		while (!fShell.isDisposed ()) {
-			if (!display.readAndDispatch ()) display.sleep ();
-		}
-		return this;
-	}
-	
-	public static void main(java.lang.String[] args) {
-		new TabExample().open().run().close();
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests/examples/org/eclipse/jdt/ui/examples/TwoPaneElementSelectorExample.java b/org.eclipse.jdt.ui.tests/examples/org/eclipse/jdt/ui/examples/TwoPaneElementSelectorExample.java
deleted file mode 100644
index e53a2b3..0000000
--- a/org.eclipse.jdt.ui.tests/examples/org/eclipse/jdt/ui/examples/TwoPaneElementSelectorExample.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.examples;
-
-
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-
-import org.eclipse.jface.viewers.ILabelProvider;
-
-import org.eclipse.ui.dialogs.TwoPaneElementSelector;
-
-
-
-
-public class TwoPaneElementSelectorExample {
-
-
-	public static void main(String[] args) {
-		java.util.Random random= new java.util.Random();
-		Object[] elements= new Object[8000];
-		for (int i= 0; i < elements.length; i++)
-			elements[i]= new Integer(random.nextInt()).toString();
-		ILabelProvider elementRenderer= new org.eclipse.jface.viewers.LabelProvider() {
-			public String getText(Object element) {
-				return element.toString();
-			}
-		};
-		ILabelProvider qualfierRenderer= new org.eclipse.jface.viewers.LabelProvider() {
-			public String getText(Object element) {
-				return element.toString();
-			}
-		};
-		Display display= new Display();
-		TwoPaneElementSelector d= new TwoPaneElementSelector(new Shell(display), elementRenderer, qualfierRenderer);
-		d.setTitle("Title");
-		d.setMessage("this is a message");
-		d.setElements(elements);
-		
-		d.open();
-		
-		Object res= d.getResult();
-		System.out.println("res= "+res);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests/plugin.xml b/org.eclipse.jdt.ui.tests/plugin.xml
deleted file mode 100644
index 688698a..0000000
--- a/org.eclipse.jdt.ui.tests/plugin.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<plugin
-   name="Java Test Plugin"
-   id="org.eclipse.jdt.ui.tests"
-   version="2.1.0"
-   provider-name = "Eclipse.org"
-   class="org.eclipse.jdt.testplugin.JavaTestPlugin">
-   
-   <requires>
-	  <import plugin="org.junit"/>   
-      <import plugin="org.eclipse.core.resources"/>
-      <import plugin="org.apache.xerces"/>
-      <import plugin="org.eclipse.ui"/>
-      <import plugin="org.eclipse.jdt.core"/>
-      <import plugin="org.eclipse.jdt.ui"/>
-	  <import plugin="org.eclipse.jdt.launching"/>
-   </requires>
-
-<runtime>
-  <library name="javauitests.jar" >
-     <export name = "*"/>
-  </library> 
-</runtime>
-
-<extension id="app" point="org.eclipse.core.runtime.applications">
-  <application> 
-     <run class="org.eclipse.jdt.testplugin.TestWorkbench">
-		<parameter name="productInfo" value="product.ini"/>
-     </run>
-  </application>
-</extension>
-
-<!-- **************** TEST DECORATOR ******************* -->
-	<extension point="org.eclipse.ui.decorators"> 
-        <decorator 
-             id="org.eclipse.jdt.ui.tests.javaElementDecorator"
-             label="Java Element Decorator" 
-             state="false" 
-	         class="org.eclipse.jdt.testplugin.JavaElementDecorator"
-             objectClass="org.eclipse.jdt.core.IJavaElement"
-             adaptable="true">
-         </decorator> 
-	</extension>    
-
-<!-- **************** TEST MARKER for quick fix ******************* -->
-
-<extension id="testmarker" point="org.eclipse.core.resources.markers" name="jdt-test-problem">
-	<super type="org.eclipse.core.resources.textmarker"/>
-</extension>
-<extension point="org.eclipse.ui.markerResolution"> 
-   <markerResolutionGenerator 
-      class="org.eclipse.jdt.ui.tests.quickfix.MarkerResolutionGenerator" 
-      markerType="org.eclipse.jdt.ui.tests.testmarker"> 
-   </markerResolutionGenerator> 
-</extension> 
-
-</plugin>
diff --git a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/JavaElementDecorator.java b/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/JavaElementDecorator.java
deleted file mode 100644
index 801c126..0000000
--- a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/JavaElementDecorator.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.testplugin;
-
-import org.eclipse.swt.graphics.Image;
-
-import org.eclipse.jface.viewers.ILabelDecorator;
-import org.eclipse.jface.viewers.LabelProvider;
-
-/**
- * Allows to test decorators for Java elements
- */
-public class JavaElementDecorator extends LabelProvider implements ILabelDecorator {
-
-	/*
-	 * @see ILabelDecorator#decorateImage(Image, Object)
-	 */
-	public Image decorateImage(Image image, Object element) {
-		return null;
-	}
-
-	/*
-	 * @see ILabelDecorator#decorateText(String, Object)
-	 */
-	public String decorateText(String text, Object element) {
-		return text + "*";
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/JavaProjectHelper.java b/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/JavaProjectHelper.java
deleted file mode 100644
index bb7d831..0000000
--- a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/JavaProjectHelper.java
+++ /dev/null
@@ -1,345 +0,0 @@
-package org.eclipse.jdt.testplugin;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.zip.ZipFile;
-
-import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IProjectDescription;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IWorkspaceRoot;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.Path;
-
-import org.eclipse.ui.dialogs.IOverwriteQuery;
-import org.eclipse.ui.wizards.datatransfer.ImportOperation;
-import org.eclipse.ui.wizards.datatransfer.ZipFileStructureProvider;
-
-import org.eclipse.jdt.core.IClasspathEntry;
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.search.IJavaSearchConstants;
-import org.eclipse.jdt.core.search.ITypeNameRequestor;
-import org.eclipse.jdt.core.search.SearchEngine;
-
-import org.eclipse.jdt.internal.core.ClasspathEntry;
-
-/**
- * Helper methods to set up a IJavaProject.
- */
-public class JavaProjectHelper {
-	
-	public static final IPath RT_STUBS= new Path("testresources/rtstubs.jar");
-	public static final IPath JUNIT_SRC= new Path("testresources/junit37-noUI-src.zip");
-	
-	public static final IPath MYLIB= new Path("testresources/mylib.jar");
-	
-
-	/**
-	 * Creates a IJavaProject.
-	 */	
-	public static IJavaProject createJavaProject(String projectName, String binFolderName) throws CoreException {
-		IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot();
-		IProject project= root.getProject(projectName);
-		if (!project.exists()) {
-			project.create(null);
-		} else {
-			project.refreshLocal(IResource.DEPTH_INFINITE, null);
-		}
-		
-		if (!project.isOpen()) {
-			project.open(null);
-		}
-		
-		IPath outputLocation;
-		if (binFolderName != null && binFolderName.length() > 0) {
-			IFolder binFolder= project.getFolder(binFolderName);
-			if (!binFolder.exists()) {
-				binFolder.create(false, true, null);
-			}
-			outputLocation= binFolder.getFullPath();
-		} else {
-			outputLocation= project.getFullPath();
-		}
-		
-		if (!project.hasNature(JavaCore.NATURE_ID)) {
-			addNatureToProject(project, JavaCore.NATURE_ID, null);
-		}
-		
-		IJavaProject jproject= JavaCore.create(project);
-		
-		jproject.setOutputLocation(outputLocation, null);
-		jproject.setRawClasspath(new IClasspathEntry[0], null);
-		
-		return jproject;	
-	}
-	
-	/**
-	 * Removes a IJavaProject.
-	 */		
-	public static void delete(IJavaProject jproject) throws CoreException {
-		performDummySearch();
-		jproject.setRawClasspath(new ClasspathEntry[0], jproject.getProject().getFullPath(), null);
-		jproject.getProject().delete(true, true, null);
-	}
-
-	public static void performDummySearch() throws JavaModelException {
-		new SearchEngine().searchAllTypeNames(
-		 	ResourcesPlugin.getWorkspace(),
-			null,
-			null,
-			IJavaSearchConstants.EXACT_MATCH,
-			IJavaSearchConstants.CASE_SENSITIVE,
-			IJavaSearchConstants.CLASS,
-			SearchEngine.createJavaSearchScope(new IJavaElement[0]),
-			new Requestor(),
-			IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,
-			null);
-	}
-
-
-	/**
-	 * Adds a source container to a IJavaProject.
-	 */		
-	public static IPackageFragmentRoot addSourceContainer(IJavaProject jproject, String containerName) throws CoreException {
-		IProject project= jproject.getProject();
-		IContainer container= null;
-		if (containerName == null || containerName.length() == 0) {
-			container= project;
-		} else {
-			IFolder folder= project.getFolder(containerName);
-			if (!folder.exists()) {
-				folder.create(false, true, null);
-			}
-			container= folder;
-		}
-		IPackageFragmentRoot root= jproject.getPackageFragmentRoot(container);
-		
-		IClasspathEntry cpe= JavaCore.newSourceEntry(root.getPath());
-		addToClasspath(jproject, cpe);		
-		return root;
-	}
-
-	/**
-	 * Adds a source container to a IJavaProject and imports all files contained
-	 * in the given Zip file.
-	 */	
-	public static IPackageFragmentRoot addSourceContainerWithImport(IJavaProject jproject, String containerName, ZipFile zipFile) throws InvocationTargetException, CoreException {
-		IPackageFragmentRoot root= addSourceContainer(jproject, containerName);
-		importFilesFromZip(zipFile, root.getPath(), null);
-		return root;
-	}
-
-	/**
-	 * Removes a source folder from a IJavaProject.
-	 */		
-	public static void removeSourceContainer(IJavaProject jproject, String containerName) throws CoreException {
-		IFolder folder= jproject.getProject().getFolder(containerName);
-		removeFromClasspath(jproject, folder.getFullPath());
-		folder.delete(true, null);
-	}
-
-	/**
-	 * Adds a library entry to a IJavaProject.
-	 */	
-	public static IPackageFragmentRoot addLibrary(IJavaProject jproject, IPath path) throws JavaModelException {
-		return addLibrary(jproject, path, null, null);
-	}
-
-	/**
-	 * Adds a library entry with source attchment to a IJavaProject.
-	 */			
-	public static IPackageFragmentRoot addLibrary(IJavaProject jproject, IPath path, IPath sourceAttachPath, IPath sourceAttachRoot) throws JavaModelException {
-		IClasspathEntry cpe= JavaCore.newLibraryEntry(path, sourceAttachPath, sourceAttachRoot);
-		addToClasspath(jproject, cpe);
-		return jproject.getPackageFragmentRoot(path.toString());
-	}
-
-	/**
-	 * Copies the library into the project and adds it as library entry.
-	 */			
-	public static IPackageFragmentRoot addLibraryWithImport(IJavaProject jproject, IPath jarPath, IPath sourceAttachPath, IPath sourceAttachRoot) throws IOException, CoreException {
-		IProject project= jproject.getProject();
-		IFile newFile= project.getFile(jarPath.lastSegment());
-		InputStream inputStream= null;
-		try {
-			inputStream= new FileInputStream(jarPath.toFile()); 
-			newFile.create(inputStream, true, null);
-		} finally {
-			if (inputStream != null) {
-				try { inputStream.close(); } catch (IOException e) { }
-			}
-		}				
-		return addLibrary(jproject, newFile.getFullPath(), sourceAttachPath, sourceAttachRoot);
-	}	
-
-	/**
-	 * Adds a library entry pointing to a JRE.
-	 * Can return null, if no JRE installation was found.
-	 */	
-	public static IPackageFragmentRoot addRTJar(IJavaProject jproject) throws CoreException {
-		IPath[] rtJarPath= findRtJar();
-		if (rtJarPath != null) {
-			return addLibrary(jproject, rtJarPath[0], rtJarPath[1], rtJarPath[2]);
-		}
-		return null;
-	}
-	
-	/**
-	 * Adds a variable entry with source attchment to a IJavaProject.
-	 * Can return null if variable can not be resolved.
-	 */			
-	public static IPackageFragmentRoot addVariableEntry(IJavaProject jproject, IPath path, IPath sourceAttachPath, IPath sourceAttachRoot) throws JavaModelException {
-		IClasspathEntry cpe= JavaCore.newVariableEntry(path, sourceAttachPath, sourceAttachRoot);
-		addToClasspath(jproject, cpe);
-		IPath resolvedPath= JavaCore.getResolvedVariablePath(path);
-		if (resolvedPath != null) {
-			return jproject.getPackageFragmentRoot(resolvedPath.toString());
-		}
-		return null;
-	}
-	
-	/**
-	 * Adds a variable entry pointing to a JRE.
-	 * The arguments specify the names of the variable to be used.
-	 * @param libVarName Name of the variable for the library
-	 * @param srcVarName Name of the variable for the source attchment. Can be <code>null</code>.
-	 * @param srcrootVarName Name of the variable for the source attchment root. Can be <code>null</code>.
-	 * @return Returns <code>null</code>, if no JRE installation was found.
-	 */	
-	public static IPackageFragmentRoot addVariableRTJar(IJavaProject jproject, String libVarName, String srcVarName, String srcrootVarName) throws CoreException {
-		IPath[] rtJarPaths= findRtJar();
-		if (rtJarPaths != null) {
-			IPath libVarPath= new Path(libVarName);
-			IPath srcVarPath= null;
-			IPath srcrootVarPath= null;
-			JavaCore.setClasspathVariable(libVarName, rtJarPaths[0], null);
-			if (srcVarName != null) {
-				IPath varValue= rtJarPaths[1] != null ? rtJarPaths[1] : Path.EMPTY;
-				JavaCore.setClasspathVariable(srcVarName, varValue, null);
-				srcVarPath= new Path(srcVarName);
-			}
-			if (srcrootVarName != null) {
-				IPath varValue= rtJarPaths[2] != null ? rtJarPaths[2] : Path.EMPTY;
-				JavaCore.setClasspathVariable(srcrootVarName, varValue, null);
-				srcrootVarPath= new Path(srcrootVarName);
-			}
-			return addVariableEntry(jproject, libVarPath, srcVarPath, srcrootVarPath);
-		}
-		return null;
-	}	
-
-	/**
-	 * Adds a required project entry.
-	 */		
-	public static void addRequiredProject(IJavaProject jproject, IJavaProject required) throws JavaModelException {
-		IClasspathEntry cpe= JavaCore.newProjectEntry(required.getProject().getFullPath());
-		addToClasspath(jproject, cpe);
-	}	
-	
-	public static void removeFromClasspath(IJavaProject jproject, IPath path) throws JavaModelException {
-		IClasspathEntry[] oldEntries= jproject.getRawClasspath();
-		int nEntries= oldEntries.length;
-		ArrayList list= new ArrayList(nEntries);
-		for (int i= 0 ; i < nEntries ; i++) {
-			IClasspathEntry curr= oldEntries[i];
-			if (!path.equals(curr.getPath())) {
-				list.add(curr);			
-			}
-		}
-		IClasspathEntry[] newEntries= (IClasspathEntry[])list.toArray(new IClasspathEntry[list.size()]);
-		jproject.setRawClasspath(newEntries, null);
-	}	
-
-	private static void addToClasspath(IJavaProject jproject, IClasspathEntry cpe) throws JavaModelException {
-		IClasspathEntry[] oldEntries= jproject.getRawClasspath();
-		for (int i= 0; i < oldEntries.length; i++) {
-			if (oldEntries[i].equals(cpe)) {
-				return;
-			}
-		}
-		int nEntries= oldEntries.length;
-		IClasspathEntry[] newEntries= new IClasspathEntry[nEntries + 1];
-		System.arraycopy(oldEntries, 0, newEntries, 0, nEntries);
-		newEntries[nEntries]= cpe;
-		jproject.setRawClasspath(newEntries, null);
-	}
-	
-	/**
-	 * Try to find rt.jar
-	 */
-	public static IPath[] findRtJar() {
-		File rtStubs= JavaTestPlugin.getDefault().getFileInPlugin(RT_STUBS);
-		if (rtStubs != null && rtStubs.exists()) {
-			return new IPath[] {
-				new Path(rtStubs.getPath()),
-				null,
-				null
-			};
-		}
-		
-		/*
-		IVMInstall vmInstall= JavaRuntime.getDefaultVMInstall();
-		if (vmInstall != null) {
-			LibraryLocation loc= vmInstall.getVMInstallType().getDefaultLibraryLocation(vmInstall.getInstallLocation());
-			if (loc != null) {
-				return new IPath[] {
-           			new Path(loc.getSystemLibrary().getPath()),
-            		new Path(loc.getSystemLibrarySource().getPath()),
-            		loc.getPackageRootPath()
-				};
-			}
-		}*/
-		return null;
-	}
-		
-	private static void addNatureToProject(IProject proj, String natureId, IProgressMonitor monitor) throws CoreException {
-		IProjectDescription description = proj.getDescription();
-		String[] prevNatures= description.getNatureIds();
-		String[] newNatures= new String[prevNatures.length + 1];
-		System.arraycopy(prevNatures, 0, newNatures, 0, prevNatures.length);
-		newNatures[prevNatures.length]= natureId;
-		description.setNatureIds(newNatures);
-		proj.setDescription(description, monitor);
-	}
-	
-	private static void importFilesFromZip(ZipFile srcZipFile, IPath destPath, IProgressMonitor monitor) throws InvocationTargetException {		
-		ZipFileStructureProvider structureProvider=	new ZipFileStructureProvider(srcZipFile);
-		try {
-			ImportOperation op= new ImportOperation(destPath, structureProvider.getRoot(), structureProvider, new ImportOverwriteQuery());
-			op.run(monitor);
-		} catch (InterruptedException e) {
-			// should not happen
-		}
-	}
-	
-	private static class ImportOverwriteQuery implements IOverwriteQuery {
-		public String queryOverwrite(String file) {
-			return ALL;
-		}	
-	}		
-	
-	private static class Requestor implements ITypeNameRequestor{
-		
-		public void acceptClass(char[] packageName, char[] simpleTypeName, char[][] enclosingTypeNames, String path) {
-		}
-
-		public void acceptInterface(char[] packageName, char[] simpleTypeName, char[][] enclosingTypeNames, String path) {
-		}
-	}
-	
-}
-
diff --git a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/JavaTestPlugin.java b/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/JavaTestPlugin.java
deleted file mode 100644
index 88b1ac4..0000000
--- a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/JavaTestPlugin.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.testplugin;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.IWorkspaceDescription;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IPluginDescriptor;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Plugin;
-
-
-public class JavaTestPlugin extends Plugin {
-	
-	private static JavaTestPlugin fgDefault;
-	
-	public JavaTestPlugin(IPluginDescriptor descriptor) {
-		super(descriptor);
-		fgDefault= this;
-	}
-	
-	public static JavaTestPlugin getDefault() {
-		return fgDefault;
-	}
-	
-	public static IWorkspace getWorkspace() {
-		return ResourcesPlugin.getWorkspace();
-	}
-	
-	public static void enableAutobuild(boolean enable) throws CoreException {
-		// disable auto build
-		IWorkspace workspace= JavaTestPlugin.getWorkspace();
-		IWorkspaceDescription desc= workspace.getDescription();
-		desc.setAutoBuilding(enable);
-		workspace.setDescription(desc);
-	}
-	
-	public File getFileInPlugin(IPath path) {
-		try {
-			URL installURL= new URL(getDescriptor().getInstallURL(), path.toString());
-			URL localURL= Platform.asLocalURL(installURL);
-			return new File(localURL.getFile());
-		} catch (IOException e) {
-			return null;
-		}
-	}
-	
-		
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/JavaTestSetup.java b/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/JavaTestSetup.java
deleted file mode 100644
index 2bf6f2c..0000000
--- a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/JavaTestSetup.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.testplugin;
-
-import junit.extensions.TestSetup;
-import junit.framework.Test;
-
-import org.eclipse.core.resources.IWorkspaceRoot;
-
-
-public class JavaTestSetup extends TestSetup {
-	
-	/**
-	 * @deprecated
-	 * Not needed anymore. No added value
-	 */
-	public JavaTestSetup(Test test) {
-		super(test);
-	}	
-	
-	protected void setUp() throws Exception {
-	}
-
-	protected void tearDown() throws Exception {
-	}
-	
-
-	
-	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/Main.java b/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/Main.java
deleted file mode 100644
index 2148fc7..0000000
--- a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/Main.java
+++ /dev/null
@@ -1,528 +0,0 @@
-package org.eclipse.jdt.testplugin;
-
-// copied from startup.jar. planned to be removed soon
-
-
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-
-import java.net.*;
-import java.lang.reflect.*;
-import java.io.*;
-import java.util.*;
-/**
- * Startup class for Eclipse. Creates a class loader using
- * supplied URL of platform installation, loads and calls
- * the Eclipse Boot Loader.  The startup arguments are as follows:
- * <dl>
- * <dd>
- *    -application &lt;id&gt;: the identifier of the application to run
- * </dd>
- * <dd>
- *    -boot &lt;location&gt;: the location, expressed as a URL, of the platform's boot.jar
- * </dd>
- * <dd>
- *    -consolelog : enables log to the console. Handy when combined with -debug
- * </dd>
- * <dd>
- *    -data &lt;location&gt;: sets the workspace location and the default location for projects
- * </dd>
- * <dd>
- *    -debug [options file]: turns on debug mode for the platform and optionally specifies a location
- * for the .options file. This file indicates what debug points are available for a
- * plug-in and whether or not they are enabled. If a location is not specified, the platform searches
- * for the .options file under the install directory
- * </dd>
- * <dd>
- *    -dev [entries]: turns on dev mode and optionally specifies comma-separated class path entries
- * which are added to the class path of each plug-in
- * </dd>
- * <dd>
- *    -keyring &lt;location&gt;: the location of the authorization database on disk. This argument
- * has to be used together with the -password argument
- * </dd>
- * <dd>
- *    -password &lt;passwd&gt;: the password for the authorization database
- * </dd>
- * <dd>
- *    -plugins &lt;location&gt;: The arg is a URL pointing to a file which specs the plugin 
- * path for the platform.  The file is in property file format where the keys are user-defined 
- * names and the values are comma separated lists of either explicit paths to plugin.xml 
- * files or directories containing plugins. (e.g., .../eclipse/plugins).
- * </dd>
- * <dd>
- *    -ws &lt;window system&gt;: sets the window system value
- * </dd>
- * </dl>
- */
-public class Main {
-	/**
-	 * Indicates whether this instance is running in debug mode.
-	 */
-	protected boolean debug = false;
-	
-	/**
-	 * The location of the launcher to run.
-	 */
-	protected String bootLocation = null;
-	
-	/**
-	 * The identifier of the application to run.
-	 */
-	protected String application;
-	
-	/**
-	 * The path for finding find plugins.
-	 */
-	protected URL pluginPathLocation;
-	
-	/**
-	 * The boot path location.
-	 */
-	protected String location;
-	
-	/**
-	 * Indicates whether items for UNinstallation should be looked for.
-	 */
-	protected boolean uninstall = false;
-	
-	/**
-	 * The item to be uninstalled.
-	 */
-	protected String uninstallCookie;
-	
-	/**
-	 * The class path entries.
-	 */
-	protected String devClassPath = null;
-	
-	/**
-	 * Indicates whether this instance is running in development mode.
-	 */
-	protected boolean inDevelopmentMode = false;
-
-	// static token describing how to take down the splash screen
-	private static String endSplash = null;
-	
-	// constants
-	private static final String APPLICATION = "-application";
-	private static final String BOOT = "-boot";
-	private static final String DEBUG = "-debug";
-	private static final String DEV = "-dev";
-	private static final String ENDSPLASH = "-endsplash";
-	private static final String UNINSTALL = "-uninstall";
-	private static final String PI_BOOT = "org.eclipse.core.boot";
-	private static final String BOOTLOADER = "org.eclipse.core.boot.BootLoader";
-	private static final String UPDATELOADER = "org.eclipse.core.internal.boot.LaunchInfo";
-
-	// The project containing the boot loader code.  This is used to construct
-	// the correct class path for running in VAJ and VAME.
-	private static final String PROJECT_NAME = "Eclipse Core Boot";
-
-	private static boolean inVAJ;
-	static {
-		try {
-			Class.forName("com.ibm.uvm.lang.ProjectClassLoader");
-			inVAJ = true;
-		} catch (Exception e) {
-			inVAJ = false;
-		}
-	}
-	private static boolean inVAME;
-	static {
-		try {
-			Class.forName("com.ibm.eclipse.core.VAME");
-			inVAME = true;
-		} catch (Exception e) {
-			inVAME = false;
-		}
-	}
-
-/**
- * Executes the launch.
- * 
- * @return the result of performing the launch
- * @param args command-line arguments
- * @exception Exception thrown if a problem occurs during the launch
- */
-protected Object basicRun(String[] args) throws Exception {
-	Class clazz = getBootLoader(bootLocation);
-	Method method = clazz.getDeclaredMethod("run", new Class[] { String.class, URL.class, String.class, String[].class });
-	try {
-		return method.invoke(clazz, new Object[] { application, pluginPathLocation, location, args });
-	} catch (InvocationTargetException e) {
-		if (e.getTargetException() instanceof Error)
-			throw (Error) e.getTargetException();
-		else
-			throw e;
-	}
-}
-
-/**
- * Returns the result of converting a list of comma-separated tokens into an array
- * 
- * @return the array of string tokens
- * @param prop the initial comma-separated string
- */
-private String[] getArrayFromList(String prop) {
-	if (prop == null || prop.trim().equals(""))
-		return new String[0];
-	Vector list = new Vector();
-	StringTokenizer tokens = new StringTokenizer(prop, ",");
-	while (tokens.hasMoreTokens()) {
-		String token = tokens.nextToken().trim();
-		if (!token.equals(""))
-			list.addElement(token);
-	}
-	return list.isEmpty() ? new String[0] : (String[]) list.toArray(new String[0]);
-}
-/**
- * Creates and returns a platform <code>BootLoader</code> which can be used to start
- * up and run the platform.  The given base, if not <code>null</code>,
- * is the location of the boot loader code.  If the value is <code>null</code>
- * then the boot loader is located relative to this class.
- * 
- * @return the new boot loader
- * @param base the location of the boot loader
- */
-public Class getBootLoader(String base) throws Exception {
-	URLClassLoader loader = new URLClassLoader(getBootPath(base), null);
-	return loader.loadClass(BOOTLOADER);
-}
-/**
- * Returns the <code>URL</code>-based class path describing where the boot classes
- * are located when running in development mode.
- * 
- * @return the url-based class path
- * @param base the base location
- * @exception MalformedURLException if a problem occurs computing the class path
- */
-protected URL[] getDevPath(URL base) throws MalformedURLException {
-	URL url;
-	String devBase = base.toExternalForm();
-	if (!inDevelopmentMode) {
-		url = new URL(devBase + "boot.jar");
-		return new URL[] {url};
-	}
-	String[] locations = getArrayFromList(devClassPath);
-	ArrayList result = new ArrayList(locations.length);
-	for (int i = 0; i < locations.length; i++) {
-		String spec = devBase + locations[i];
-		char lastChar = spec.charAt(spec.length() - 1);
-		if ((spec.endsWith(".jar") || (lastChar == '/' || lastChar == '\\')))
-			url = new URL (spec);
-		else
-			url = new URL(spec + "/");
-		//make sure URL exists before adding to path
-		if (new java.io.File(url.getFile()).exists())
-			result.add(url);
-	}
-	url = new URL(devBase + "boot.jar");
-	if (new java.io.File(url.getFile()).exists())
-		result.add(url);
-	return (URL[])result.toArray(new URL[result.size()]);
-}
-
-/**
- * Returns the <code>URL</code>-based class path describing where the boot classes are located.
- * 
- * @return the url-based class path
- * @param base the base location
- * @exception MalformedURLException if a problem occurs computing the class path
- */
-protected URL[] getBootPath(String base) throws MalformedURLException {
-	URL url = null;
-	// if the given location is not null, assume it is correct and use it. 
-	if (base != null) {
-		url = new URL(base);
-		if (debug)
-			System.out.println("Boot URL: " + url.toExternalForm());
-		return new URL[] {url};	
-	}
-	// Create a URL based on the location of this class' code.
-	// strip off jar file and/or last directory to get 
-	// to the directory containing projects.
-	URL[] result = null;
-	url = getClass().getProtectionDomain().getCodeSource().getLocation();
-	String path = url.getFile();
-	if (path.endsWith(".jar"))
-		path = path.substring(0, path.lastIndexOf("/"));
-	else 
-		if (path.endsWith("/"))
-			path = path.substring(0, path.length() - 1);
-	if (inVAJ || inVAME) {
-		int ix = path.lastIndexOf("/");
-		path = path.substring(0, ix + 1);
-		path = path + PROJECT_NAME + "/";
-		url = new URL(url.getProtocol(), url.getHost(), url.getPort(), path);
-		result = new URL[] {url};
-	} else {
-		path = searchForPlugins(path);
-		path = searchForBoot(path);
-		// add on any dev path elements
-		url = new URL(url.getProtocol(), url.getHost(), url.getPort(), path);
-		result = getDevPath(url);
-	}
-	if (debug) {
-		System.out.println("Boot URL:");
-		for (int i = 0; i < result.length; i++)
-			System.out.println("    " + result[i].toExternalForm());	
-	}
-	return result;
-}
-
-/**
- * Searches for a plugins root starting at a given location.  If one is
- * found then this location is returned; otherwise an empty string is
- * returned.
- * 
- * @return the location where plugins were found, or an empty string
- * @param start the location to begin searching at
- */
-protected String searchForPlugins(String start) {
-	File path = new File(start);
-	while (path != null) {
-		File test = new File(path, "plugins");
-		if (test.exists())
-			return test.toString();
-		path = path.getParentFile();
-		path = (path == null || path.length() == 1)  ? null : path;
-	}
-	return "";
-}
-/**
- * Searches for a boot directory starting at a given location.  If one
- * is found then this location is returned; otherwise an empty string
- * is returned.
- * 
- * @return the location where plugins were found, or an empty string
- * @param start the location to begin searching at
- */
-protected String searchForBoot(String start) {
-	FileFilter filter = new FileFilter() {
-		public boolean accept(File candidate) {
-			return candidate.getName().startsWith(PI_BOOT);
-		}
-	};
-	File[] boots = new File(start).listFiles(filter);
-	String result = null;
-	String maxVersion = null;
-	for (int i = 0; i < boots.length; i++) {
-		String name = boots[i].getName();
-		int index = name.lastIndexOf('_');
-		if (index == -1) {
-			result = boots[i].getAbsolutePath();
-			i = boots.length;
-		} else {
-			if (index > 0) {
-				String version = name.substring(index + 1);
-				if (maxVersion == null) {
-					result = boots[i].getAbsolutePath();
-					maxVersion = version;
-				} else
-					if (maxVersion.compareTo(version) == -1) {
-						result = boots[i].getAbsolutePath();
-						maxVersion = version;
-					}						
-			}
-		}
-	}
-	if (result == null)
-		throw new RuntimeException("Could not find bootstrap code. Check location of boot plug-in or specify -boot.");
-	return result.replace(File.separatorChar, '/') + "/";
-}
-/**
- * Returns the update loader for the given boot path.
- * 
- * @return the update loader
- * @param base the boot path base
- * @exception Exception thrown is a problem occurs determining this loader
- */
-public Class getUpdateLoader(String base) throws Exception {
-	URLClassLoader loader = new URLClassLoader(getBootPath(base), null);
-	return loader.loadClass(UPDATELOADER);
-}
-/**
- * Runs the platform with the given arguments.  The arguments must identify
- * an application to run (e.g., <code>-application com.example.application</code>).
- * After running the application <code>System.exit(N)</code> is executed.
- * The value of N is derived from the value returned from running the application.
- * If the application's return value is an <code>Integer</code>, N is this value.
- * In all other cases, N = 0.
- * <p>
- * Clients wishing to run the platform without a following <code>System.exit</code>
- * call should use <code>run()</code>.
- *
- * @see #run
- * 
- * @param args the command line arguments
- */
-public static void main(String[] args) {
-	Object result = null;
-	try {
-		result = new Main().run(args);
-	} catch (Throwable e) {
-		// try and take down the splash screen.
-		endSplash();
-		System.out.println("Exception launching the Eclipse Platform:");
-		e.printStackTrace();
-	}
-	int exitCode = result instanceof Integer ? ((Integer) result).intValue() : 0;
-	System.exit(exitCode);
-}
-/**
- * Tears down the currently-displayed splash screen.
- */
-public static void endSplash() {
-	if (endSplash == null)
-		return;
-	try {
-		Runtime.getRuntime().exec(endSplash);
-	} catch (Exception e) {
-	}
-}
-
-/**
- * Runs this launcher with the arguments specified in the given string.
- * 
- * @param argString the arguments string
- * @exception Exception thrown if a problem occurs during launching
- */
-public static void main(String argString) throws Exception {
-	Vector list = new Vector(5);
-	for (StringTokenizer tokens = new StringTokenizer(argString, " "); tokens.hasMoreElements();)
-		list.addElement((String) tokens.nextElement());
-	main((String[]) list.toArray(new String[list.size()]));
-}
-
-/**
- * Processes the command line arguments
- * 
- * @return the arguments to pass through to the launched application
- * @param args the command line arguments
- */
-protected String[] processCommandLine(String[] args) throws Exception {
-	int[] configArgs = new int[100];
-	configArgs[0] = -1; // need to initialize the first element to something that could not be an index.
-	int configArgIndex = 0;
-	for (int i = 0; i < args.length; i++) {
-		boolean found = false;
-		// check for args without parameters (i.e., a flag arg)
-		// check if debug should be enabled for the entire platform
-		if (args[i].equalsIgnoreCase(DEBUG)) {
-			debug = true;
-			// passed thru this arg (i.e., do not set found = true
-			continue;
-		}
-		
-		// check if development mode should be enabled for the entire platform
-		// If this is the last arg or there is a following arg (i.e., arg+1 has a leading -), 
-		// simply enable development mode.  Otherwise, assume that that the following arg is
-		// actually some additional development time class path entries.  This will be processed below.
-		if (args[i].equalsIgnoreCase(DEV) && ((i + 1 == args.length) || ((i + 1 < args.length) && (args[i + 1].startsWith("-"))))) {
-			inDevelopmentMode = true;
-			// do not mark the arg as found so it will be passed through
-			continue;
-		}
-
-		// done checking for args.  Remember where an arg was found 
-		if (found) {
-			configArgs[configArgIndex++] = i;
-			continue;
-		}
-		// check for args with parameters. If we are at the last argument or if the next one
-		// has a '-' as the first character, then we can't have an arg with a parm so continue.
-		if (i == args.length - 1 || args[i + 1].startsWith("-")) 
-			continue;
-		String arg = args[++i];
-
-		// look for the laucher to run
-		if (args[i - 1].equalsIgnoreCase(BOOT)) {
-			bootLocation = arg;
-			found = true;
-		}
-
-		// look for the development mode and class path entries.  
-		if (args[i - 1].equalsIgnoreCase(DEV)) {
-			inDevelopmentMode = true;
-			devClassPath = arg;
-			continue;
-		}
-
-		// look for the application to run
-		if (args[i - 1].equalsIgnoreCase(APPLICATION)) {
-			application = arg;
-			found = true;
-		}
-
-		// look for token to use to end the splash screen
-		if (args[i - 1].equalsIgnoreCase(ENDSPLASH)) {
-			endSplash = arg;
-			continue;
-		}
-
-		// look for items to uninstall
-		if (args[i - 1].equalsIgnoreCase(UNINSTALL)) {
-			uninstall = true;
-			uninstallCookie = arg;
-			found = true;
-		}
-
-		// done checking for args.  Remember where an arg was found 
-		if (found) {
-			configArgs[configArgIndex++] = i - 1;
-			configArgs[configArgIndex++] = i;
-		}
-	}
-	// remove all the arguments consumed by this argument parsing
-	if (configArgIndex == 0)
-		return args;
-	String[] passThruArgs = new String[args.length - configArgIndex];
-	configArgIndex = 0;
-	int j = 0;
-	for (int i = 0; i < args.length; i++) {
-		if (i == configArgs[configArgIndex])
-			configArgIndex++;
-		else
-			passThruArgs[j++] = args[i];
-	}
-	return passThruArgs;
-}
-/**
- * Runs the application to be launched.
- * 
- * @return the return value from the launched application
- * @param args the arguments to pass to the application
- * @exception thrown if a problem occurs during launching
- */
-public Object run(String[] args) throws Exception {
-	String[] passThruArgs = processCommandLine(args);
-	if (uninstall)
-		return updateRun(UNINSTALL, uninstallCookie, passThruArgs);
-	else
-		return basicRun(passThruArgs);
-}
-/**
- * Performs an update run.
- * 
- * @return the return value from the update loader
- * @param flag flag to give to the update loader
- * @param value value to give to the update loader
- * @param args arguments to give to the update loader.
- * @exception Exception thrown if a problem occurs during execution
- */
-protected Object updateRun(String flag, String value, String[] args) throws Exception {
-	Class clazz = getUpdateLoader(bootLocation);
-	Method method = clazz.getDeclaredMethod("run", new Class[] { String.class, String.class, String.class, String[].class });
-	try {
-		return method.invoke(clazz, new Object[] { flag, value, location, args });
-	} catch (InvocationTargetException e) {
-		if (e.getTargetException() instanceof Error)
-			throw (Error) e.getTargetException();
-		else
-			throw e;
-	}
-}
-}
diff --git a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/NewMain.java b/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/NewMain.java
deleted file mode 100644
index f29b2b0..0000000
--- a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/NewMain.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.testplugin;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.net.URL;
-import java.util.Properties;
-import java.util.StringTokenizer;
-import java.util.Vector;
-
-/** 
- * Application is responsible for calling core launch api
- */
-
-public class NewMain extends Main {
-	private static final String DEFAULT_APPLICATION= "org.eclipse.ui.workbench";
-	
-	
-	public NewMain(String application, String location, URL pluginPathLocation, String bootLocation, boolean debug) throws IOException {
-		this.application= application;
-		this.location= location;
-		this.pluginPathLocation= pluginPathLocation;
-		this.bootLocation= bootLocation;
-	}
-	
-	public static void main(String[] args) {
-		try {
-			String location= getLocationFromProperties("platform");
-			new NewMain(DEFAULT_APPLICATION, location, null, null, true).run(args);
-		} catch (Throwable e) {
-			System.out.println("Exception launching the Eclipse Platform UI:");
-			e.printStackTrace();
-		}
-		System.exit(0);
-	}
-	
-
-	/**
-	 * Run this launcher with the arguments specified in the given string.
-	 * This is a short cut method for people running the launcher from
-	 * a scrapbook (i.e., swip-and-doit facility).
-	 */
-	public static void main(String argString) throws Exception {
-		Vector list= new Vector(5);
-		for (StringTokenizer tokens= new StringTokenizer(argString, " "); tokens.hasMoreElements();)
-			list.addElement((String) tokens.nextElement());
-		main((String[]) list.toArray(new String[list.size()]));
-	}
-	
-	public static String getLocationFromProperties(String key) {
-		Properties properties= new Properties();
-		try {
-			FileInputStream fis= new FileInputStream(getSettingsFile());
-			properties.load(fis);
-			return properties.getProperty(key);
-		} catch (IOException e) {
-		}
-		return null;
-	}	
-	
-	private static File getSettingsFile() {
-		String home= System.getProperty("user.home");
-		if (home == null) {
-			System.out.println("Home dir not defined");
-			return null;
-		}
-		return new File(home, "eclipse-workspaces.properties");	
-	}	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/TestPluginLauncher.java b/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/TestPluginLauncher.java
deleted file mode 100644
index c48239d..0000000
--- a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/TestPluginLauncher.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.testplugin;
-
-import java.net.URL;
-
-/**
- * Helper class to launch a test
- */
-public class TestPluginLauncher {
-	
-	public static final String APP_NAME= "org.eclipse.jdt.ui.tests.app";
-	
-	public static void run(String location, Class testCase, String[] args) {
-		run(APP_NAME, location, testCase, args);
-	}
-	
-	public static void run(String application, String location, Class testCase, String[] args) {
-		try {
-			String bootLocation= getBootLocation();
-			int nArgs= args.length;
-			String[] newArgs= new String[4 + nArgs];
-			newArgs[0]= testCase.getName();
-			for (int i= 0; i < nArgs; i++) {
-				newArgs[1 + i]= args[i];
-			}
-			newArgs[1 + nArgs]= "-dev";
-			newArgs[1 + nArgs + 1]= "bin";
-			newArgs[1 + nArgs + 2]= "-debug";
-			NewMain newMain= new NewMain(application, location, null, bootLocation, false);
-			newMain.run(newArgs);
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-	}
-	
-	public static String getLocationFromProperties(String key) {
-		return NewMain.getLocationFromProperties(key);
-	}
-	
-	public static String getLocationFromProperties() {
-		return NewMain.getLocationFromProperties("tests");
-	}
-	
-	public static String getBootLocation() {
-		URL url= TestPluginLauncher.class.getResource("TestPluginLauncher.class");
-		String s= url.toString();
-		int index= s.indexOf("/org.eclipse.jdt.ui.tests");
-		if (index == -1)
-			throw new IllegalArgumentException();
-		s= s.substring(0, index);
-		s= s + "/org.eclipse.core.boot/boot.jar";
-		return s;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/TestWorkbench.java b/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/TestWorkbench.java
deleted file mode 100644
index af2240c..0000000
--- a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/TestWorkbench.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.testplugin;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import junit.textui.TestRunner;
-
-import org.eclipse.core.runtime.IPath;
-
-import org.eclipse.swt.widgets.Display;
-
-import org.eclipse.ui.internal.Workbench;
-
-public class TestWorkbench extends Workbench {
-
-	/**
-	 * Run an event loop for the workbench.
-	 */
-	protected void runEventLoop() {
-		// Dispatch all events.
-		Display display = Display.getCurrent();
-		while (true) {
-			try {
-				if (!display.readAndDispatch())
-					break;
-			} catch (Throwable e) {
-				break;
-			}
-		}
-		IPath location= JavaTestPlugin.getWorkspace().getRoot().getLocation();
-		System.out.println("Workspace-location: " + location.toString());
-				
-		
-		try {
-			String[] args= getCommandLineArgs();
-			if (args.length > 0) {
-				Test test= getTest(args[0]);
-				TestRunner.run(test);
-			} else {
-				System.out.println("TestWorkbench: Argument must be class name");
-			}
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-				
-		
-		// Close the workbench.
-		close();
-	}
-	
-	public Test getTest(String className) throws Exception {
-		Class testClass= getClass().getClassLoader().loadClass(className);
-
-		Method suiteMethod= null;
-		try {
-			suiteMethod= testClass.getMethod(TestRunner.SUITE_METHODNAME, new Class[0]);
-	 	} catch (Exception e) {
-	 		// try to extract a test suite automatically	
-			return new TestSuite(testClass);
-		}
-		try {
-			return (Test) suiteMethod.invoke(null, new Class[0]); // static method
-		} catch (InvocationTargetException e) {
-			System.out.println("Failed to invoke suite():" + e.getTargetException().toString());
-		} catch (IllegalAccessException e) {
-			System.out.println("Failed to invoke suite():" + e.toString());
-		}
-		return null; 
-
-	}
-	
-	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/test/HelloWorld.java b/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/test/HelloWorld.java
deleted file mode 100644
index 2495469..0000000
--- a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/test/HelloWorld.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.testplugin.test;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.runtime.Path;
-
-import org.eclipse.jdt.core.IClassFile;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IMethod;
-import org.eclipse.jdt.core.IType;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-import org.eclipse.jdt.testplugin.TestPluginLauncher;
-
-
-public class HelloWorld extends TestCase {
-	
-	private IJavaProject fJProject;
-	
-	public static void main(String[] args) {
-		TestPluginLauncher.run(TestPluginLauncher.getLocationFromProperties(), HelloWorld.class, args);
-	}
-	
-	public static Test suite() {
-		TestSuite suite= new TestSuite();
-		suite.addTest(new HelloWorld("test1"));
-		return suite;
-	}		
-	
-	public HelloWorld(String name) {
-		super(name);
-	}
-	
-	protected void setUp() throws Exception {
-			fJProject= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-	}
-
-
-	protected void tearDown() throws Exception {
-		JavaProjectHelper.delete(fJProject);
-	}	
-		
-	public void test1() throws Exception {
-		if (JavaProjectHelper.addRTJar(fJProject) == null) {
-			assertTrue("jdk not found", false);
-			return;
-		}
-		
-		String name= "java/util/Vector.java";
-		IClassFile classfile= (IClassFile) fJProject.findElement(new Path(name));
-		assertTrue("classfile not found", classfile != null);
-		
-		IType type= classfile.getType();
-		System.out.println("methods of Vector");
-		IMethod[] methods= type.getMethods();
-		for (int i= 0; i < methods.length; i++) {
-			System.out.println(methods[i].getElementName());
-		}
-	}		
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/test/JavaTestCase.java b/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/test/JavaTestCase.java
deleted file mode 100644
index ae4e908..0000000
--- a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/test/JavaTestCase.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.testplugin.test;
-
-import junit.extensions.TestSetup;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.runtime.Path;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IMethod;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.IType;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-import org.eclipse.jdt.testplugin.TestPluginLauncher;
-
-
-public class JavaTestCase extends TestCase {
-	
-	private IJavaProject fJavaProject;
-
-	public JavaTestCase(String name) {
-		super(name);
-	}
-
-	public static void main(String[] args) {
-		TestPluginLauncher.run(TestPluginLauncher.getLocationFromProperties(), JavaTestCase.class, args);
-	}		
-			
-	public static Test suite() {
-		TestSuite suite= new TestSuite();
-		suite.addTest(new JavaTestCase("doTest1"));
-		return suite;
-	}
-	
-	/**
-	 * Creates a new test Java project.
-	 */	
-	protected void setUp() throws Exception {
-		fJavaProject= JavaProjectHelper.createJavaProject("HelloWorldProject", "bin");
-
-		IPackageFragmentRoot root= JavaProjectHelper.addSourceContainer(fJavaProject, "src");
-		IPackageFragment pack= root.createPackageFragment("ibm.util", true, null);
-		
-		ICompilationUnit cu= pack.getCompilationUnit("A.java");
-		IType type= cu.createType("public class A {\n}\n", null, true, null);
-		type.createMethod("public void a() {}\n", null, true, null);
-		type.createMethod("public void b(java.util.Vector v) {}\n", null, true, null);
-	}
-
-	/**
-	 * Removes the test java project.
-	 */	
-	protected void tearDown () throws Exception {
-		JavaProjectHelper.delete(fJavaProject);
-	}
-				
-	/*
-	 * Basic test: Checks for created methods.
-	 */
-	public void doTest1() throws Exception {
-		
-		String name= "ibm/util/A.java";
-		ICompilationUnit cu= (ICompilationUnit) fJavaProject.findElement(new Path(name));
-		assertTrue("A.java must exist", cu != null);
-		IType type= cu.getType("A");
-		assertTrue("Type A must exist", type != null);
-		
-		System.out.println("methods of A");
-		IMethod[] methods= type.getMethods();
-		for (int i= 0; i < methods.length; i++) {
-			System.out.println(methods[i].getElementName());
-		}
-		assertTrue("Should contain 2 methods", methods.length == 2);
-	}	
-	
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/util/AccessibilityTestPass.java b/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/util/AccessibilityTestPass.java
deleted file mode 100644
index 049ab0b..0000000
--- a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/util/AccessibilityTestPass.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package org.eclipse.jdt.testplugin.util;
-
-
-import java.util.ArrayList;
-
-
-public class AccessibilityTestPass implements IDialogTestPass {
-	private static final int CHECKLIST_SIZE = 5;
-	
-	/**
-	 * @see IDialogTestPass#title()
-	 */
-	public String title() {
-		return "Test Pass: Accessibility";
-	}
-	/**
-	 * @see IDialogTestPass#description()
-	 */
-	public String description() {
-		return "Verify the accessibility of the dialogs.";
-	}
-	/**
-	 * @see IDialogTestPass#label()
-	 */
-	public String label() {
-		return "&Accessibility";
-	}	
-	/**
-	 * @see IDialogTestPass#checkListTexts()
-	 */
-	public ArrayList checkListTexts() {
-		ArrayList list = new ArrayList(CHECKLIST_SIZE);
-		list.add("&1) all widgets are accessible by tabbing.");
-		list.add("&2) forwards and backwards tabbing is in a logical order");
-		list.add("&3) all the widgets with labels have an appropriate mnemonic.");
-		list.add("&4) there are no duplicate mnemonics.");
-		list.add("&5) selectable widgets can be selected using the spacebar.");
-		return list;
-	}
-	/**
-	 * @see IDialogTestPass#failureTexts()
-	 * Size of the return array must be the same size as the checkListTexts'
-	 * ArrayList.
-	 */
-	public String[] failureTexts() {
-		String[] failureText = new String[CHECKLIST_SIZE];
-		failureText[0] = "Some widgets aren't accessible by tabbing.";
-		failureText[1] = "Tabbing order is illogical.";
-		failureText[2] = "Missing or inappropriate mnemonics.";
-		failureText[3] = "Duplicate mnemonics.";
-		failureText[4] = "Some widgets cannot be selected using the spacebar.";
-		return failureText;
-	}
-	/**
-	 * @see IDialogTestPass#queryText()
-	 */
-	public String queryText() {
-		return "Is the accessibility of the dialog acceptable?";
-	}
-	/**
-	 * @see IDialogTestPass#getID()
-	 */
-	public int getID() {
-		return VerifyDialog.TEST_ACCESS;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/util/DialogCheck.java b/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/util/DialogCheck.java
deleted file mode 100644
index aea09ce..0000000
--- a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/util/DialogCheck.java
+++ /dev/null
@@ -1,218 +0,0 @@
-package org.eclipse.jdt.testplugin.util;
-
-
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-
-
-import junit.framework.Assert;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.dialogs.IDialogConstants;
-
-import org.eclipse.ui.internal.WorkbenchPlugin;
-
-
-/**
- * A <code>DialogCheck</code> is used test a dialog in
- * various ways. 
- * <p>
- * For interactive tests use <code>assertDialog</code>.
- * For automated tests use <code>assert DialogTexts</code>.
- * </p> 
- */
-public class DialogCheck {
-	private DialogCheck() {
-	}
-	private static VerifyDialog _verifyDialog;
-
-
-	/**
-	 * Asserts that a given dialog is not null and that it passes
-	 * certain visual tests.  These tests will be verified manually
-	 * by the tester using an input dialog.  Use this assert method
-	 * to verify a dialog's sizing, initial focus, or accessiblity.
-	 * To ensure that both the input dialog and the test dialog are
-	 * accessible by the tester, the getShell() method should be used
-	 * when creating the test dialog.
-	 * 
-	 * Example usage:
-	 * <code>Dialog dialog = new AboutDialog( DialogCheck.getShell() );
-	 * DialogCheck.assertDialog(dialog, this);</code>
-	 * 
-	 * @param dialog the test dialog to be verified.
-	 */
-	public static void assertDialog(Dialog dialog) {
-		Assert.assertNotNull(dialog);
-		if (_verifyDialog.getShell() == null) {
-			//force the creation of the verify dialog
-			getShell();
-		}
-		if (_verifyDialog.open(dialog) == IDialogConstants.NO_ID) {
-			Assert.assertTrue(_verifyDialog.getFailureText(), false);
-		}
-	}
-
-
-	/**
-	 * Automated test that checks all the labels and buttons of a dialog
-	 * to make sure there is enough room to display all the text.  Any
-	 * text that wraps is only approximated and is currently not accurate.
-	 * 
-	 * @param dialog the test dialog to be verified.
-	 */
-	public static void assertDialogTexts(Dialog dialog) {
-		Assert.assertNotNull(dialog);
-		dialog.setBlockOnOpen(false);
-		dialog.open();
-		Shell shell = dialog.getShell();
-		verifyCompositeText(shell);
-		dialog.close();
-	}
-
-
-	/**
-	 * This method should be called when creating dialogs to test.  This
-	 * ensures that the dialog's parent shell will be that of the
-	 * verification dialog.
-	 * 
-	 * @return Shell The shell of the verification dialog to be used as
-	 * the parent shell of the test dialog.
-	 */
-	public static Shell getShell() {
-		Shell shell =
-			WorkbenchPlugin
-				.getDefault()
-				.getWorkbench()
-				.getActiveWorkbenchWindow()
-				.getShell();
-		_verifyDialog = new VerifyDialog(shell);
-		_verifyDialog.create();
-		return _verifyDialog.getShell();
-	}
-
-
-	/*
-	 * Looks at all the child widgets of a given composite and
-	 * verifies the text on all labels and widgets.
-	 * @param composite The composite to look through
-	 */
-	private static void verifyCompositeText(Composite composite) {
-		Control children[] = composite.getChildren();
-		for (int i = 0; i < children.length; i++) {
-			try {
-				//verify the text if the child is a button
-				verifyButtonText((Button) children[i]);
-			} catch (ClassCastException exNotButton) {
-				try {
-					//child is not a button, maybe a label
-					verifyLabelText((Label) children[i]);
-				} catch (ClassCastException exNotLabel) {
-					try {
-						//child is not a label, make a recursive call if it is a composite
-						verifyCompositeText((Composite) children[i]);
-					} catch (ClassCastException exNotComposite) {
-						//the child is not a button, label, or composite - ignore it.
-					}
-				}
-			}
-		}
-	}
-	
-	/*
-	 * Verifies that a given button is large enough to display its text.
-	 * @param button The button to verify,
-	 */
-	private static void verifyButtonText(Button button) {
-		String widget = button.toString();
-		Point size = button.getSize();
-
-
-		//compute the size with no line wrapping
-		Point preferred = button.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-		//if (size.y/preferred.y) == X, then label spans X lines, so divide
-		//the calculated value of preferred.x by X
-		if (preferred.y * size.y > 0) {
-			preferred.y /= countLines(button.getText()); //check for '\n\'
-			if (size.y / preferred.y > 1) {
-				preferred.x /= (size.y / preferred.y);
-			}
-		}
-
-
-		String message =
-			new StringBuffer("Warning: ")
-				.append(widget)
-				.append("\n\tActual Width -> ")
-				.append(size.x)
-				.append("\n\tRecommended Width -> ")
-				.append(preferred.x)
-				.toString();
-		if (preferred.x > size.x) {
-			//close the dialog
-			button.getShell().dispose();
-			Assert.assertTrue(message.toString(), false);
-		}
-	}
-	
-	/*
-	 * Verifies that a given label is large enough to display its text.
-	 * @param label The label to verify,
-	 */
-	private static void verifyLabelText(Label label) {
-		String widget = label.toString();
-		Point size = label.getSize();
-
-
-		//compute the size with no line wrapping
-		Point preferred = label.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-		//if (size.y/preferred.y) == X, then label spans X lines, so divide
-		//the calculated value of preferred.x by X
-		if (preferred.y * size.y > 0) {
-			preferred.y /= countLines(label.getText());
-			if (size.y / preferred.y > 1) {
-				preferred.x /= (size.y / preferred.y);
-			}
-		}
-		String message =
-			new StringBuffer("Warning: ")
-				.append(widget)
-				.append("\n\tActual Width -> ")
-				.append(size.x)
-				.append("\n\tRecommended Width -> ")
-				.append(preferred.x)
-				.toString();
-		if (preferred.x > size.x) {
-			//close the dialog
-			label.getShell().dispose();
-			Assert.assertTrue(message.toString(), false);
-		}
-	}
-	
-	/*
-	 * Counts the number of lines in a given String.
-	 * For example, if a string contains one (1) newline character,
-	 * a value of two (2) would be returned.
-	 * @param text The string to look through.
-	 * @return int the number of lines in text.
-	 */
-	private static int countLines(String text) {
-		int newLines = 1;
-		for (int i = 0; i < text.length(); i++) {
-			if (text.charAt(i) == '\n') {
-				newLines++;
-			}
-		}
-		return newLines;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/util/FailureDialog.java b/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/util/FailureDialog.java
deleted file mode 100644
index fb91591..0000000
--- a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/util/FailureDialog.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package org.eclipse.jdt.testplugin.util;
-
-
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
- 
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.resource.JFaceResources;
-
-
-/*
- * A dialog for collecting notes from the tester regarding
- * the failure of a test.
- */
-public class FailureDialog extends Dialog {
-	private Text _text;
-	private String _log;
-	private int SIZING_TEXT_WIDTH = 400;
-	private int SIZING_TEXT_HEIGHT = 200;
-	
-	/**
-	 * Constructor for FailureDialog
-	 */
-	public FailureDialog(Shell parentShell) {
-		super(parentShell);
-	}
-	/* (non-Javadoc)
-	 * Method declared on Window.
-	 */
-	protected void configureShell(Shell newShell) {
-		super.configureShell(newShell);
-		newShell.setText("Dialog Test Failed");
-	}
-	/* (non-Javadoc)
-	 * Method declared on Dialog.
-	 */
-	protected void createButtonsForButtonBar(Composite parent) {
-		createButton(parent, IDialogConstants.OK_ID, "&OK", true);
-		createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
-	}
-	/* (non-Javadoc)
-	 * Method declared on Dialog.
-	 */
-	protected Control createDialogArea(Composite parent) {
-		// page group
-		Composite composite = (Composite)super.createDialogArea(parent);
-		composite.setSize( composite.computeSize(SWT.DEFAULT, SWT.DEFAULT) );
-		
-		Label label = new Label(composite, SWT.WRAP);
-		label.setText("&Enter a note regarding the failure:");
-		
-		_text = new Text(composite, SWT.MULTI | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
-		_text.setFont( JFaceResources.getFontRegistry().get(JFaceResources.TEXT_FONT) );
-		GridData data = new GridData(GridData.FILL_BOTH);
-		data.widthHint = SIZING_TEXT_WIDTH;
-		data.heightHint = SIZING_TEXT_HEIGHT;
-		_text.setLayoutData(data);
-		
-		return composite;
-	}
-	/* (non-Javadoc)
-	 * Method declared on Dialog.
-	 */
-	protected void okPressed() {		
-		_log = _text.getText();
-		super.okPressed();
-	}
-	/*
-	 * @return String the text contained in the input area of
-	 * the dialog.
-	 */
-	String getText() {
-		if (_log == null) {
-			return "Empty entry.";
-		} else {
-			return _log;
-		}
-	}
-	/*
-	 * Sets the text of the input area.  This should only be
-	 * called to set the initial text so only call before invoking
-	 * open().
-	 */
-	void setText(String text) {
-		_text.setText(text);
-	}
-	/*
-	 * Returns a string representation of this class which
-	 * the text contained in the input area of the dialog.
-	 */
-	public String toString() {
-		return getText();
-	}
-}
-
-
diff --git a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/util/FocusTestPass.java b/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/util/FocusTestPass.java
deleted file mode 100644
index 5ada767..0000000
--- a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/util/FocusTestPass.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package org.eclipse.jdt.testplugin.util;
-
-
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
- 
-import java.util.ArrayList;
-
-
-/*
- * This test pass verifies the initial focus of a dialog
- * when it is given focus.
- */
-public class FocusTestPass implements IDialogTestPass {
-	private static final int CHECKLIST_SIZE = 1;
-
-
-	/**
-	 * @see IDialogTestPass#title()
-	 */
-	public String title() {
-		return "Test Pass: Initial Focus";
-	}
-	/**
-	 * @see IDialogTestPass#description()
-	 */
-	public String description() {
-		return "Verify the initial focus of the dialogs.";
-	}
-	/**
-	 * @see IDialogTestPass#label()
-	 */
-	public String label() {
-		return "&Initial Focus";
-	}	
-	/**
-	 * @see IDialogTestPass#checkListTexts()
-	 */
-	public ArrayList checkListTexts() {
-		ArrayList list = new ArrayList(CHECKLIST_SIZE);
-		list.add("&1) the initial focus is appropriate.");
-		return list;
-	}
-	/**
-	 * @see IDialogTestPass#failureTexts()
-	 * Size of the return array must be the same size as the checkListTexts'
-	 * ArrayList.
-	 */
-	public String[] failureTexts() {
-		String[] failureText = new String[CHECKLIST_SIZE];
-		failureText[0] = "The initial focus is inappropriate.";
-		return failureText;
-	}
-	/**
-	 * @see IDialogTestPass#queryText()
-	 */
-	public String queryText() {
-		return "Is the initial focus of the dialog correct?";
-	}
-	/**
-	 * @see IDialogTestPass#getID()
-	 */
-	public int getID() {
-		return VerifyDialog.TEST_FOCUS;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/util/IDialogTestPass.java b/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/util/IDialogTestPass.java
deleted file mode 100644
index 36fd27b..0000000
--- a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/util/IDialogTestPass.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.eclipse.jdt.testplugin.util;
-
-
-import java.util.ArrayList;
-
-
-/*
- * Interface to describe a visual test pass for a dialog test.
- */
-public interface IDialogTestPass {
-	/*
-	 * @return String The title of the test pass.
-	 */
-	public String title();
-	/*
-	 * @return String The description of the test pass.
-	 */
-	public String description();
-	/*
-	 * @return String The label of the test pass to be used
-	 * in a selection list.  The return includes an '&'
-	 * if a mnemonic is desired.
-	 */
-	public String label();
-	/*
-	 * @return ArrayList A list of items to appear in a checklist.
-	 * The items in the list must be Strings and should include an
-	 * '&' if a mnemonic is desired.
-	 */
-	public ArrayList checkListTexts();
-	/*
-	 * @return String[] Associated failure messages that correspond
-	 * to the checklist items.  The size of this array should be the
-	 * same size as the checklist.
-	 */
-	public String[] failureTexts();
-	/*
-	 * @return String The test that corresponds to the test pass to
-	 * which the tester will respond with a 'yes' or 'no'.
-	 */
-	public String queryText();
-	/*
-	 * @return int A unique number that identifies the test pass.
-	 */
-	public int getID();
-}
-
-
diff --git a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/util/SizingTestPass.java b/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/util/SizingTestPass.java
deleted file mode 100644
index 295dcbc..0000000
--- a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/util/SizingTestPass.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package org.eclipse.jdt.testplugin.util;
-
-
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
- 
-import java.util.ArrayList;
-
-
-/*
- * This test pass verifies visually the sizing of the dialog and its
- * widgets.
- */
-class SizingTestPass implements IDialogTestPass {
-	private static final int CHECKLIST_SIZE = 5;
-
-
-	/**
-	 * @see IDialogTestPass#title()
-	 */
-	public String title() {
-		return "Test Pass: Sizing and Display";
-	}
-	/**
-	 * @see IDialogTestPass#description()
-	 */
-	public String description() {
-		return "Verify the sizing and display of the dialogs and widgets.";
-	}
-	/**
-	 * @see IDialogTestPass#label()
-	 */
-	public String label() {
-		return "&Sizing and Display";
-	}	
-	/**
-	 * @see IDialogTestPass#checkListTexts()
-	 */
-	public ArrayList checkListTexts() {
-		ArrayList list = new ArrayList(CHECKLIST_SIZE);
-		list.add("&1) the correct dialog displays.");
-		list.add("&2) the dialog is an appropriate size for the required resolution (1024x768).");
-		list.add("&3) the texts are correct and not cut off.");
-		list.add("&4) all strings have been externalized properly.");
-		list.add("&5) all the widgets are viewable and not cut off.");
-		return list;
-	}
-	/**
-	 * @see IDialogTestPass#failureTexts()
-	 * Size of the return array must be the same size as the checkListTexts'
-	 * ArrayList.
-	 */
-	public String[] failureTexts() {
-		String[] failureText = new String[CHECKLIST_SIZE];
-		failureText[0] = "The wrong dialog displayed.";
-		failureText[1] = "The dialog is too large for the required resolution.";
-		failureText[2] = "Text labels are wrong or cut off.";
-		failureText[3] = "Some strings have not been externalized properly.";
-		failureText[4] = "Some widgets are cut off.";
-		return failureText;
-	}
-	/**
-	 * @see IDialogTestPass#queryText()
-	 */
-	public String queryText() {
-		return "Is the sizing and display of the dialog correct?";
-	}
-	/**
-	 * @see IDialogTestPass#getID()
-	 */
-	public int getID() {
-		return VerifyDialog.TEST_SIZING;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/util/VerifyDialog.java b/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/util/VerifyDialog.java
deleted file mode 100644
index f5c938a..0000000
--- a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/util/VerifyDialog.java
+++ /dev/null
@@ -1,305 +0,0 @@
-package org.eclipse.jdt.testplugin.util;
-
-
-import java.util.Iterator;
-
-
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.TitleAreaDialog;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.ShellAdapter;
-import org.eclipse.swt.events.ShellEvent;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-
-
-/*
- * This dialog is intended to verify a dialogs in a testing
- * environment.  The tester can test for sizing, initial focus,
- * or accessibility.
- */
-public class VerifyDialog extends TitleAreaDialog {
-	private int SIZING_WIDTH = 400;
-	
-	private static int      TEST_TYPE;
-	public static final int TEST_SIZING = 0;
-	public static final int TEST_FOCUS  = 1;
-	public static final int TEST_ACCESS = 2;
-	private IDialogTestPass _dialogTests[] = new IDialogTestPass[3];
-
-
-	private Dialog _testDialog; //the dialog to test
-	private Point  _testDialogSize;
-	
-	private Label  _queryLabel;
-	private Button _yesButton;
-	private Button _noButton;
-	private Button _checkList[];
-	private String _failureText;
-	
-	/*
-	 * Create an instance of the verification dialog.
-	 */
-	public VerifyDialog(Shell parent) {
-		super(parent);
-		if ( !(TEST_TYPE <= 2) && !(TEST_TYPE >= 0) ) {
-			TEST_TYPE = TEST_SIZING;
-		}
-		_failureText = "";
-		_dialogTests[0] = new SizingTestPass();
-		_dialogTests[1] = new FocusTestPass();
-		_dialogTests[2] = new AccessibilityTestPass();
-	}
-	
-	/* (non-Javadoc)
-	 * Method declared on Window.
-	 */
-	protected void configureShell(Shell newShell) {
-		super.configureShell(newShell);
-		newShell.setText("Dialog Verification");
-		setShellStyle(SWT.NONE);
-	}
-	/* (non-Javadoc)
-	 * Method declared on Dialog.
-	 */
-	protected void createButtonsForButtonBar(Composite parent) {
-		_yesButton = createButton(parent, IDialogConstants.YES_ID, IDialogConstants.YES_LABEL, true);
-		_noButton = createButton(parent, IDialogConstants.NO_ID, IDialogConstants.NO_LABEL, false);
-	}
-	/* (non-Javadoc)
-	 * Method declared on Dialog.
-	 */
-	protected void buttonPressed(int buttonId) {
-		if (IDialogConstants.YES_ID == buttonId) {
-			setReturnCode(IDialogConstants.YES_ID);
-			if (_testDialog.getShell() != null) {
-				_testDialog.close();
-			}
-			close();
-		} else if (IDialogConstants.NO_ID == buttonId) {
-			handleFailure();
-		}
-	}
-	/* (non-Javadoc)
-	 * Method declared on Dialog.
-	 */
-	protected Control createDialogArea(Composite parent) {
-		// top level composite
-		Composite parentComposite = (Composite)super.createDialogArea(parent);
-
-
-		// create a composite with standard margins and spacing
-		Composite composite = new Composite(parentComposite, SWT.NONE);
-		composite.setSize(SIZING_WIDTH, SWT.DEFAULT);
-		GridLayout layout = new GridLayout();
-		layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
-		layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
-		layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
-		layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
-		composite.setLayout(layout);
-		composite.setLayoutData(new GridData(GridData.FILL_BOTH));
-
-
-		createTestSelectionGroup(composite);
-		createCheckListGroup(composite);
-
-
-		_queryLabel = new Label(composite, SWT.NONE);
-		_queryLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-		
-		initializeTest();
-		return composite;
-	}
-	/*
-	 * Group for selecting type of test.
-	 */
-	private void createTestSelectionGroup(Composite parent) {
-		Group group = new Group(parent, SWT.SHADOW_NONE);
-		group.setText("Testing:");
-		group.setLayout( new GridLayout() );
-		GridData data = new GridData(GridData.FILL_HORIZONTAL);
-		group.setLayoutData(data);
-		
-		for (int i = 0; i < _dialogTests.length; i++) {
-			Button radio = new Button(group, SWT.RADIO);
-			radio.setText( _dialogTests[i].label() );
-			final int testID = _dialogTests[i].getID();
-			radio.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
-					TEST_TYPE = testID;
-					initializeTest();
-					_yesButton.setEnabled(true);
-				}
-			});
-			if ( TEST_TYPE == _dialogTests[i].getID() ) {
-				radio.setSelection(true);
-			}
-		}
-	}
-	/*
-	 * Initializes the checklist with empty checks.
-	 */
-	private void createCheckListGroup(Composite parent) {
-		Group group = new Group(parent, SWT.SHADOW_NONE);
-		group.setText("Verify that:");
-		group.setLayout( new GridLayout() );
-		GridData data = new GridData(GridData.FILL_HORIZONTAL);
-		group.setLayoutData(data);
-		
-		int checkListSize = 0;
-		for (int i = 0; i < _dialogTests.length; i++) {
-			int size = _dialogTests[i].checkListTexts().size();
-			if (size > checkListSize) {
-				checkListSize = size;
-			}
-		}
-		_checkList = new Button[checkListSize];
-		SelectionAdapter selectionAdapter = new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				checkYesEnable();
-			}
-		};
-		for (int i = 0; i < checkListSize; i++) {
-			_checkList[i] = new Button(group, SWT.CHECK);
-			_checkList[i].addSelectionListener(selectionAdapter);
-			data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
-			data.grabExcessHorizontalSpace = true;
-			_checkList[i].setLayoutData(data);
-		}		
-	}
-	/*
-	 * Disables the yes button if any of the items in the checklist
-	 * are unchecked.  Enables the yes button otherwise.
-	 */
-	private void checkYesEnable() {
-		boolean enable = true;
-		for (int i = 0; i < _checkList.length; i++) {
-			if ( !_checkList[i].getSelection() ) {
-				enable = false;
-			}			
-		}
-		_yesButton.setEnabled(enable);
-	}
-	/*
-	 * Initializes the checklist, banner texts, and query label
-	 */
-	private void initializeTest() {
-		IDialogTestPass test = _dialogTests[TEST_TYPE];
-		setTitle( test.title() );
-		setMessage( test.description() );
-		Iterator iterator = test.checkListTexts().iterator();
-		for (int i = 0; i < _checkList.length; i++) {
-			if ( iterator.hasNext() ) {
-				_checkList[i].setText( iterator.next().toString() );
-				_checkList[i].setVisible(true);
-				_checkList[i].update();
-			} else {
-				_checkList[i].setVisible(false);
-				_checkList[i].update();
-			}
-			_checkList[i].setSelection(true);
-		}
-		_queryLabel.setText( test.queryText() );
-	}
-	public String getFailureText() {
-		return _failureText;
-	}
-	/*
-	 * Can't open the verification dialog without a specified
-	 * test dialog, this simply returns a failure and prevents
-	 * opening.  Should use open(Dialog) instead.
-	 * 
-	 */
-	public int open() {
-		_failureText = "Testing dialog is required, use VerifyDialog::open(Dialog)";
-		return IDialogConstants.NO_ID;
-	}
-	/*
-	 * Opens the verification dialog to test the specified dialog.
-	 */
-	public int open(Dialog testDialog) {
-		if (getShell() == null) {
-			create();
-		}
-		getShell().setLocation(0, 0);
-		getShell().setSize(Math.max(SIZING_WIDTH, getShell().getSize().x), getShell().getSize().y);
-		_testDialog = testDialog;
-		if (_testDialog.getShell() == null) {
-			_testDialog.create();
-		}
-		_testDialogSize = _testDialog.getShell().getSize();
-		openNewTestDialog();
-		
-		return super.open();
-	}
-	/*
-	 * Opens the dialog to be verified.
-	 */
-	private void openNewTestDialog() {
-		if (_testDialog.getShell() == null) {
-			_testDialog.create();
-		}
-		_testDialog.setBlockOnOpen(false);
-		_testDialog.getShell().setLocation(getShell().getSize().x + 1, 0);
-		_testDialog.getShell().setSize(_testDialogSize);
-		_testDialog.getShell().addShellListener(new ShellAdapter() {
-			public void shellClosed(ShellEvent e) {				
-				e.doit = false;
-			}
-		
-		});		
-		_testDialog.open();
-	}
-	/*
-	 * The test dialog failed, open the failure dialog.
-	 */
-	private void handleFailure() {
-		IDialogTestPass test = _dialogTests[TEST_TYPE];
-		StringBuffer text = new StringBuffer();
-		String label = test.label();
-		label = label.substring(0, label.indexOf("&")) +
-		        label.substring(label.indexOf("&") + 1);
-		text.append(label).
-		     append(" failed on the ").
-		     append(SWT.getPlatform()).
-		     append(" platform:\n");
-		
-		String failureMessages[] = test.failureTexts();
-		for (int i = 0; i < test.checkListTexts().size(); i++) {
-			if ( !_checkList[i].getSelection() ) {
-				text.append("- ").append(failureMessages[i]).append("\n");
-			}
-		}
-		FailureDialog dialog = new FailureDialog( getShell() );
-		dialog.create();
-		String temp = text.toString();
-		dialog.setText( text.toString() );
-		if (dialog.open() == IDialogConstants.OK_ID) {
-			_failureText = dialog.toString();
-			setReturnCode(IDialogConstants.NO_ID);
-			if (_testDialog.getShell() != null) {
-				_testDialog.close();
-			}
-			close();
-		}
-	}
-	/*
-	 * In case the shell was closed by a means other than
-	 * the NO button.
-	 */
-	protected void handleShellCloseEvent() {
-		handleFailure();
-	}
-}
-
-
diff --git a/org.eclipse.jdt.ui.tests/test.xml b/org.eclipse.jdt.ui.tests/test.xml
deleted file mode 100644
index 5f01e76..0000000
--- a/org.eclipse.jdt.ui.tests/test.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="testsuite" default="run" basedir=".">
-  <!-- The property ${eclipse-home} should be passed into this script -->
-  <!-- Set a meaningful default value for when it is not. -->
-  <property name="eclipse-home" value="${basedir}\..\.."/>
-
-  <!-- sets the properties eclipse-home, and library-file -->
-  <property name="plugin-name" value="org.eclipse.jdt.ui.tests"/>
-  <property name="library-file"
-            value="${eclipse-home}/plugins/org.eclipse.test/library.xml"/>
-
-  <!-- This target holds all initialization code that needs to be done for -->
-  <!-- all tests that are to be run. Initialization for individual tests -->
-  <!-- should be done within the body of the suite target. -->
-  <target name="init">
-    <tstamp/>
-    <delete>
-      <fileset dir="${eclipse-home}" includes="org*.xml"/>
-    </delete>
-  </target>
-
-  <!-- This target defines the tests that need to be run. -->
-  <target name="suite">
-    <property name="jdt-folder" 
-              value="${eclipse-home}/jdt_folder"/>
-    <delete dir="${jdt-folder}" quiet="true"/>
-    <ant target="ui-test" antfile="${library-file}" dir="${eclipse-home}">
-      <property name="data-dir" value="${jdt-folder}"/>
-      <property name="plugin-name" value="${plugin-name}"/>
-      <property name="classname" 
-                value="org.eclipse.jdt.ui.tests.AutomatedSuite"/>
-    </ant>
-  </target>
-
-  <!-- This target holds code to cleanup the testing environment after -->
-  <!-- after all of the tests have been run. You can use this target to -->
-  <!-- delete temporary files that have been created. -->
-  <target name="cleanup">
-  </target>
-
-  <!-- This target runs the test suite. Any actions that need to happen -->
-  <!-- after all the tests have been run should go here. -->
-  <target name="run" depends="init,suite,cleanup">
-    <ant target="collect" antfile="${library-file}" dir="${eclipse-home}">
-      <property name="includes" value="org*.xml"/>
-      <property name="output-file" value="${plugin-name}.xml"/>
-    </ant>
-  </target>
-
-</project>
diff --git a/org.eclipse.jdt.ui.tests/testresources/junit37-noUI-src.zip b/org.eclipse.jdt.ui.tests/testresources/junit37-noUI-src.zip
deleted file mode 100644
index 4f95d30..0000000
--- a/org.eclipse.jdt.ui.tests/testresources/junit37-noUI-src.zip
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.ui.tests/testresources/mylib.jar b/org.eclipse.jdt.ui.tests/testresources/mylib.jar
deleted file mode 100644
index 140e3c6..0000000
--- a/org.eclipse.jdt.ui.tests/testresources/mylib.jar
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.ui.tests/testresources/rtstubs.jar b/org.eclipse.jdt.ui.tests/testresources/rtstubs.jar
deleted file mode 100644
index cf3edc3..0000000
--- a/org.eclipse.jdt.ui.tests/testresources/rtstubs.jar
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/AutomatedSuite.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/AutomatedSuite.java
deleted file mode 100644
index f411573..0000000
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/AutomatedSuite.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jdt.ui.tests.astrewrite.ASTRewritingMethodDeclTest;
-import org.eclipse.jdt.ui.tests.astrewrite.ASTRewritingStatementsTest;
-import org.eclipse.jdt.ui.tests.astrewrite.ASTRewritingTest;
-import org.eclipse.jdt.ui.tests.astrewrite.ASTRewritingTypeDeclTest;
-import org.eclipse.jdt.ui.tests.core.AddUnimplementedMethodsTest;
-import org.eclipse.jdt.ui.tests.core.AllTypesCacheTest;
-import org.eclipse.jdt.ui.tests.core.ImportOrganizeTest;
-import org.eclipse.jdt.ui.tests.core.JavaModelUtilTest;
-import org.eclipse.jdt.ui.tests.core.TextBufferTest;
-import org.eclipse.jdt.ui.tests.core.TypeHierarchyTest;
-import org.eclipse.jdt.ui.tests.core.TypeInfoTest;
-import org.eclipse.jdt.ui.tests.quickfix.QuickFixTest;
-import org.eclipse.jdt.ui.tests.text.HTML2TextReaderTester;
-import org.eclipse.jdt.ui.tests.text.JavaDoc2HTMLTextReaderTester;
-import org.eclipse.jdt.ui.tests.wizardapi.NewJavaProjectWizardTest;
-
-
-/**
- * Test all areas of the UI.
- */
-public class AutomatedSuite extends TestSuite {
-
-	/**
-	 * Returns the suite.  This is required to
-	 * use the JUnit Launcher.
-	 */
-	public static Test suite() {
-		return new AutomatedSuite();
-	}
-
-	/**
-	 * Construct the test suite.
-	 */
-	public AutomatedSuite() {
-		addTest(TypeInfoTest.suite());
-		addTest(AddUnimplementedMethodsTest.suite());
-		addTest(ImportOrganizeTest.suite());
-		addTest(JavaModelUtilTest.suite());
-		addTest(TextBufferTest.suite());
-		addTest(TypeHierarchyTest.suite());
-		addTest(HTML2TextReaderTester.suite());
-		addTest(JavaDoc2HTMLTextReaderTester.suite());
-		
-		addTest(ASTRewritingTest.suite());
-		addTest(QuickFixTest.suite());
-
-		// disabled addTest(AllTypesCacheTest.suite());
-		addTest(NewJavaProjectWizardTest.suite());
-		
-	}
-	
-}
-
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/UIInteractiveSuite.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/UIInteractiveSuite.java
deleted file mode 100644
index 6a23aa2..0000000
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/UIInteractiveSuite.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jdt.testplugin.TestPluginLauncher;
-import org.eclipse.jdt.ui.tests.dialogs.DialogsTest;
-import org.eclipse.jdt.ui.tests.dialogs.PreferencesTest;
-import org.eclipse.jdt.ui.tests.dialogs.WizardsTest;
-
-/**
- * Test all areas of the UI.
- */
-public class UIInteractiveSuite extends TestSuite {
-
-	/**
-	 * Returns the suite.  This is required to
-	 * use the JUnit Launcher.
-	 */
-	public static Test suite() {
-		return new UIInteractiveSuite();
-	}
-
-	/**
-	 * Construct the test suite.
-	 */
-	public UIInteractiveSuite() {
-		addTest(PreferencesTest.suite());
-		addTest(WizardsTest.suite());
-		addTest(DialogsTest.suite());
-	}
-	
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/astrewrite/ASTRewritingExpressionsTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/astrewrite/ASTRewritingExpressionsTest.java
deleted file mode 100644
index 023af5e..0000000
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/astrewrite/ASTRewritingExpressionsTest.java
+++ /dev/null
@@ -1,1624 +0,0 @@
-package org.eclipse.jdt.ui.tests.astrewrite;
-
-import java.util.Hashtable;
-import java.util.List;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.dom.*;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-import org.eclipse.jdt.testplugin.TestPluginLauncher;
-
-import org.eclipse.jdt.internal.corext.dom.ASTRewrite;
-import org.eclipse.jdt.internal.ui.text.correction.ASTRewriteCorrectionProposal;
-
-public class ASTRewritingExpressionsTest extends ASTRewritingTest {
-	private static final Class THIS= ASTRewritingExpressionsTest.class;
-	
-	private IJavaProject fJProject1;
-	private IPackageFragmentRoot fSourceFolder;
-
-	public ASTRewritingExpressionsTest(String name) {
-		super(name);
-	}
-
-	public static void main(String[] args) {
-		TestPluginLauncher.run(TestPluginLauncher.getLocationFromProperties(), THIS, args);
-	}
-
-
-	public static Test suite() {
-		if (false) {
-			return new TestSuite(THIS);
-		} else {
-			TestSuite suite= new TestSuite();
-			suite.addTest(new ASTRewritingExpressionsTest("testMethodInvocation1"));
-			return suite;
-		}		
-	}
-
-
-	protected void setUp() throws Exception {
-		Hashtable options= JavaCore.getOptions();
-		options.put(JavaCore.FORMATTER_TAB_CHAR, JavaCore.SPACE);
-		options.put(JavaCore.FORMATTER_TAB_SIZE, "4");
-		JavaCore.setOptions(options);			
-		
-		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		assertTrue("rt not found", JavaProjectHelper.addRTJar(fJProject1) != null);
-
-		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");				
-	}
-
-
-	protected void tearDown() throws Exception {
-		JavaProjectHelper.delete(fJProject1);
-	}
-	
-	
-	public void testArrayAccess() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    int[] o= new int[] { 1, 2, 3 };\n");		
-		buf.append("    public void foo() {\n");
-		buf.append("        o[3 /* comment*/ - 1]= this.o[3 - 1];\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		List statements= block.statements();
-		assertTrue("Number of statements not 1", statements.size() == 1);
-		{	// replace left hand side index, replace right hand side index by left side index
-			ExpressionStatement stmt= (ExpressionStatement) statements.get(0);
-			Assignment assignment= (Assignment) stmt.getExpression();
-			
-			ArrayAccess left= (ArrayAccess) assignment.getLeftHandSide();
-			ArrayAccess right= (ArrayAccess) assignment.getRightHandSide();
-			
-			NumberLiteral name= ast.newNumberLiteral("1");
-			rewrite.markAsReplaced(left.getIndex(), name, "Replace left array index with 1");
-			
-			ASTNode placeHolder= rewrite.createCopy(left.getIndex());
-			rewrite.markAsReplaced(right.getIndex(), placeHolder, "Replace right array index with left array index");
-			
-			SimpleName newName= ast.newSimpleName("o");
-			rewrite.markAsReplaced(right.getArray(), newName, "Rename array");
-		}
-
-				
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    int[] o= new int[] { 1, 2, 3 };\n");		
-		buf.append("    public void foo() {\n");
-		buf.append("        o[1]= o[3 /* comment*/ - 1];\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-			
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-
-	public void testArrayCreation() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        goo(new int[] { 1, 2, 3 },\n");
-		buf.append("        new int[] { 1, 2, 3 },\n");
-		buf.append("        new int[2][][],\n");
-		buf.append("        new int[2][][],\n");
-		buf.append("        new int[2][][],\n");
-		buf.append("        new int[2][][]);\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		List statements= block.statements();
-		assertTrue("Number of statements not 1", statements.size() == 1);
-		ExpressionStatement statement= (ExpressionStatement) statements.get(0);
-		MethodInvocation invocation= (MethodInvocation) statement.getExpression();
-		List args= invocation.arguments();
-		assertTrue("Number of arguments not 6", args.size() == 6);
-		
-		{	// replace the element type and increase the dimension
-			ArrayCreation arrayCreation= (ArrayCreation) args.get(0);
-			ArrayType arrayType= arrayCreation.getType();
-			
-			PrimitiveType floatType= ast.newPrimitiveType(PrimitiveType.FLOAT); 
-			ArrayType newArrayType= ast.newArrayType(floatType, 2);
-			
-			rewrite.markAsReplaced(arrayType, newArrayType);
-		}
-		{	// remove the initializer, add a dimension expression
-			ArrayCreation arrayCreation= (ArrayCreation) args.get(1);
-			rewrite.markAsRemoved(arrayCreation.getInitializer());
-			
-			List dimensions= arrayCreation.dimensions();
-			assertTrue("Number of dimension expressions not 0", dimensions.size() == 0);
-			
-			NumberLiteral literal= ast.newNumberLiteral("10");
-			dimensions.add(literal);
-			
-			rewrite.markAsInserted(literal);
-		}
-		{	// remove all dimension except one, no dimension expression
-			// insert the initializer: formatter problems
-			ArrayCreation arrayCreation= (ArrayCreation) args.get(2);
-			ArrayType arrayType= arrayCreation.getType();			
-			PrimitiveType intType= ast.newPrimitiveType(PrimitiveType.INT); 
-			ArrayType newArrayType= ast.newArrayType(intType, 1);
-			
-			rewrite.markAsReplaced(arrayType, newArrayType);
-			
-			List dimensions= arrayCreation.dimensions();
-			assertTrue("Number of dimension expressions not 1", dimensions.size() == 1);
-			
-			rewrite.markAsRemoved((ASTNode) dimensions.get(0));
-			
-			ArrayInitializer initializer= ast.newArrayInitializer();
-			List expressions= initializer.expressions();
-			expressions.add(ast.newNumberLiteral("10"));
-		}
-		{	// add 2 dimension expressions
-			ArrayCreation arrayCreation= (ArrayCreation) args.get(3);
-			
-			List dimensions= arrayCreation.dimensions();
-			assertTrue("Number of dimension expressions not 1", dimensions.size() == 1);
-			
-			NumberLiteral literal1= ast.newNumberLiteral("10");
-			dimensions.add(literal1);
-			rewrite.markAsInserted(literal1);
-			
-			NumberLiteral literal2= ast.newNumberLiteral("11");
-			dimensions.add(literal2);
-			rewrite.markAsInserted(literal2);
-		}
-		{	// add 2 empty dimensions
-			ArrayCreation arrayCreation= (ArrayCreation) args.get(4);
-			ArrayType arrayType= arrayCreation.getType();
-			assertTrue("Number of dimension not 3", arrayType.getDimensions() == 3);
-			
-			PrimitiveType intType= ast.newPrimitiveType(PrimitiveType.INT); 
-			ArrayType newArrayType= ast.newArrayType(intType, 5);
-			
-			rewrite.markAsReplaced(arrayType, newArrayType);
-		}
-		{	// replace dimension expression, add a dimension expression
-			ArrayCreation arrayCreation= (ArrayCreation) args.get(5);
-
-			List dimensions= arrayCreation.dimensions();
-			assertTrue("Number of dimension expressions not 1", dimensions.size() == 1);
-
-			NumberLiteral literal1= ast.newNumberLiteral("10");
-			rewrite.markAsReplaced((ASTNode) dimensions.get(0), literal1);
-			
-			NumberLiteral literal2= ast.newNumberLiteral("11");
-			dimensions.add(literal2);
-			rewrite.markAsInserted(literal2);			
-		}			
-				
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        goo(new float[][] { 1, 2, 3 },\n");
-		buf.append("        new int[10],\n");
-		buf.append("        new int[],\n");
-		buf.append("        new int[2][10][11],\n");
-		buf.append("        new int[2][][][][],\n");
-		buf.append("        new int[10][11][]);\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-		
-	public void testArrayInitializer() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        goo(new int[] { 1, 2, 3 },\n");
-		buf.append("        new int[] { 1, 2, 3 },\n");
-		buf.append("        new int[] { 1, 2, 3 });\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		List statements= block.statements();
-		assertTrue("Number of statements not 1", statements.size() == 1);
-		ExpressionStatement statement= (ExpressionStatement) statements.get(0);
-		MethodInvocation invocation= (MethodInvocation) statement.getExpression();
-		List args= invocation.arguments();
-	
-		{	// remove first and last initializer expression
-			ArrayCreation arrayCreation= (ArrayCreation) args.get(0);
-			ArrayInitializer initializer= arrayCreation.getInitializer();
-			
-			List expressions= initializer.expressions();
-			assertTrue("Number of initializer expressions not 3", expressions.size() == 3);
-			
-			rewrite.markAsRemoved((ASTNode) expressions.get(0));
-			rewrite.markAsRemoved((ASTNode) expressions.get(2));
-		}
-		{	// insert at second and last position
-			ArrayCreation arrayCreation= (ArrayCreation) args.get(1);
-			ArrayInitializer initializer= arrayCreation.getInitializer();
-			
-			List expressions= initializer.expressions();
-			assertTrue("Number of initializer expressions not 3", expressions.size() == 3);
-
-			NumberLiteral literal1= ast.newNumberLiteral("10");
-			expressions.add(1, literal1);
-			rewrite.markAsInserted(literal1);
-			
-			NumberLiteral literal2= ast.newNumberLiteral("11");
-			expressions.add(literal2);
-			rewrite.markAsInserted(literal2);
-		}		
-		{	// replace first and last initializer expression
-			ArrayCreation arrayCreation= (ArrayCreation) args.get(2);
-			ArrayInitializer initializer= arrayCreation.getInitializer();
-			
-			List expressions= initializer.expressions();
-			assertTrue("Number of initializer expressions not 3", expressions.size() == 3);
-
-			NumberLiteral literal1= ast.newNumberLiteral("10");
-			NumberLiteral literal2= ast.newNumberLiteral("11");
-			
-			rewrite.markAsReplaced((ASTNode) expressions.get(0), literal1);
-			rewrite.markAsReplaced((ASTNode) expressions.get(2), literal2);
-		}		
-				
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        goo(new int[] { 2 },\n");
-		buf.append("        new int[] { 1, 10, 2, 3, 11 },\n");
-		buf.append("        new int[] { 10, 2, 11 });\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-	
-	public void testAssignment() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        int i, j;\n");
-		buf.append("        i= 0;\n");
-		buf.append("        i-= j= 3;\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		List statements= block.statements();
-		assertTrue("Number of statements not 3", statements.size() == 3);
-		{ // change left side & right side
-			ExpressionStatement stmt= (ExpressionStatement) statements.get(1);
-			Assignment assignment= (Assignment) stmt.getExpression();
-			
-			SimpleName name= ast.newSimpleName("j");
-			rewrite.markAsReplaced(assignment.getLeftHandSide(), name);
-			
-			MethodInvocation invocation= ast.newMethodInvocation();
-			invocation.setName(ast.newSimpleName("goo"));
-			invocation.setExpression(ast.newSimpleName("other"));
-			
-			rewrite.markAsReplaced(assignment.getRightHandSide(), invocation);
-		}
-		{ // change operator and operator of inner
-			ExpressionStatement stmt= (ExpressionStatement) statements.get(2);
-			Assignment assignment= (Assignment) stmt.getExpression();
-			
-			Assignment modifiedNode= ast.newAssignment();
-			modifiedNode.setOperator(Assignment.Operator.DIVIDE_ASSIGN);
-			rewrite.markAsModified(assignment, modifiedNode);
-			
-			Assignment inner= (Assignment) assignment.getRightHandSide();
-			
-			Assignment modifiedInner= ast.newAssignment();
-			modifiedInner.setOperator(Assignment.Operator.RIGHT_SHIFT_UNSIGNED_ASSIGN);
-			rewrite.markAsModified(inner, modifiedInner);			
-		}
-				
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        int i, j;\n");
-		buf.append("        j= other.goo();\n");
-		buf.append("        i/= j>>>= 3;\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-
-	public void testCastExpression() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        x= (E) clone();\n");
-		buf.append("        z= y.toList();\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		List statements= block.statements();
-		assertTrue("Number of statements not 2", statements.size() == 2);
-		{ // change cast type and cast expression
-			ExpressionStatement stmt= (ExpressionStatement) statements.get(0);
-			Assignment assignment= (Assignment) stmt.getExpression();
-			
-			CastExpression expression= (CastExpression) assignment.getRightHandSide();
-			SimpleType newType= ast.newSimpleType(ast.newSimpleName("SuperE"));
-			rewrite.markAsReplaced(expression.getType(), newType);
-			
-			SimpleName newExpression= ast.newSimpleName("a");
-			rewrite.markAsReplaced(expression.getExpression(), newExpression);
-		}
-		{ // create cast
-			ExpressionStatement stmt= (ExpressionStatement) statements.get(1);
-			Assignment assignment= (Assignment) stmt.getExpression();
-			
-			Expression rightHand= assignment.getRightHandSide();
-			
-			Expression placeholder= (Expression) rewrite.createCopy(rightHand);
-			
-			CastExpression newCastExpression= ast.newCastExpression();
-			newCastExpression.setType(ast.newSimpleType(ast.newSimpleName("List")));
-			newCastExpression.setExpression(placeholder);
-			
-			rewrite.markAsReplaced(rightHand, newCastExpression);
-		}
-				
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        x= (SuperE) a;\n");
-		buf.append("        z= (List) y.toList();\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-	public void testCatchClause() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        try {\n");
-		buf.append("        } catch (IOException e) {\n");
-		buf.append("        } catch (CoreException e) {\n");
-		buf.append("        }\n");			
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		List statements= block.statements();
-		assertTrue("Number of statements not 3", statements.size() == 1);
-		List catchClauses= ((TryStatement) statements.get(0)).catchClauses();
-		assertTrue("Number of catchClauses not 2", catchClauses.size() == 2);
-		{ // change exception type
-			CatchClause clause= (CatchClause) catchClauses.get(0);
-			
-			SingleVariableDeclaration exception= clause.getException();
-			
-			SingleVariableDeclaration newException= ast.newSingleVariableDeclaration();
-						
-			newException.setType(ast.newSimpleType(ast.newSimpleName("NullPointerException")));
-			newException.setName(ast.newSimpleName("ex"));
-			
-			rewrite.markAsReplaced(exception, newException);
-		}
-		{ // change body
-			CatchClause clause= (CatchClause) catchClauses.get(1);
-			Block body= clause.getBody();
-			
-			Block newBody= ast.newBlock();
-			ReturnStatement returnStatement= ast.newReturnStatement();
-			newBody.statements().add(returnStatement);
-			
-			rewrite.markAsReplaced(body, newBody);
-		}
-				
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        try {\n");
-		buf.append("        } catch (NullPointerException ex) {\n");
-		buf.append("        } catch (CoreException e) {\n");
-		buf.append("            return;\n");	
-		buf.append("        }\n");			
-		buf.append("    }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-
-	public void testClassInstanceCreation() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        goo().new Inner();\n");
-		buf.append("        new Runnable(\"Hello\") {\n");
-		buf.append("            public void run() {\n");
-		buf.append("            }\n");		
-		buf.append("        };\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		List statements= block.statements();
-		assertTrue("Number of statements not 2", statements.size() == 2);
-		{ // remove expression, change type name, add argument, add anonym decl
-			ExpressionStatement stmt= (ExpressionStatement) statements.get(0);
-			ClassInstanceCreation creation= (ClassInstanceCreation) stmt.getExpression();
-
-			rewrite.markAsRemoved(creation.getExpression());
-			
-			SimpleName newName= ast.newSimpleName("NewInner");
-			rewrite.markAsReplaced(creation.getName(), newName);
-			
-			List arguments= creation.arguments();
-			
-			StringLiteral stringLiteral1= ast.newStringLiteral();
-			stringLiteral1.setLiteralValue("Hello");
-			arguments.add(stringLiteral1);
-			rewrite.markAsInserted(stringLiteral1);
-			
-			StringLiteral stringLiteral2= ast.newStringLiteral();
-			stringLiteral2.setLiteralValue("World");
-			arguments.add(stringLiteral2);
-			rewrite.markAsInserted(stringLiteral2);
-
-			
-			assertTrue("Has anonym class decl", creation.getAnonymousClassDeclaration() == null);
-			
-			AnonymousClassDeclaration anonymDecl= ast.newAnonymousClassDeclaration();
-			MethodDeclaration anonymMethDecl= createNewMethod(ast, "newMethod", false);
-			anonymDecl.bodyDeclarations().add(anonymMethDecl);
-			
-			creation.setAnonymousClassDeclaration(anonymDecl);
-			rewrite.markAsInserted(anonymDecl);			
-
-		}
-		{ // add expression, remove argument, remove anonym decl 
-			ExpressionStatement stmt= (ExpressionStatement) statements.get(1);
-			ClassInstanceCreation creation= (ClassInstanceCreation) stmt.getExpression();
-
-			assertTrue("Has expression", creation.getExpression() == null);
-			
-			SimpleName newExpression= ast.newSimpleName("x");
-			creation.setExpression(newExpression);
-			
-			rewrite.markAsInserted(newExpression);
-			
-			List arguments= creation.arguments();
-			assertTrue("Must have 1 argument", arguments.size() == 1);
-			
-			rewrite.markAsRemoved((ASTNode) arguments.get(0));
-			
-			rewrite.markAsRemoved(creation.getAnonymousClassDeclaration());
-		}
-		
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        new NewInner(\"Hello\", \"World\") {\n");
-		buf.append("            private void newMethod(String str) {\n");
-		buf.append("            }\n");
-		buf.append("        };\n");
-		buf.append("        x.new Runnable();\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-	public void testConditionalExpression() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        i= (k == 0) ? 1 : 2;\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		List statements= block.statements();
-		assertTrue("Number of statements not 1", statements.size() == 1);
-		{ // change compare expression, then expression & else expression
-			ExpressionStatement stmt= (ExpressionStatement) statements.get(0);
-			Assignment assignment= (Assignment) stmt.getExpression();
-			ConditionalExpression condExpression= (ConditionalExpression) assignment.getRightHandSide();
-			
-			BooleanLiteral literal= ast.newBooleanLiteral(true);
-			rewrite.markAsReplaced(condExpression.getExpression(), literal);
-			
-			SimpleName newThenExpre= ast.newSimpleName("x");
-			rewrite.markAsReplaced(condExpression.getThenExpression(), newThenExpre);
-			
-			InfixExpression infixExpression= ast.newInfixExpression();
-			infixExpression.setLeftOperand(ast.newNumberLiteral("1"));
-			infixExpression.setRightOperand(ast.newNumberLiteral("2"));
-			infixExpression.setOperator(InfixExpression.Operator.PLUS);
-			
-			rewrite.markAsReplaced(condExpression.getElseExpression(), infixExpression);
-		}
-		
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        i= true ? x : 1 + 2;\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-	public void testFieldAccess() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        foo().i= goo().i;\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		List statements= block.statements();
-		assertTrue("Number of statements not 1", statements.size() == 1);
-		{ // replace field expression, replace field name
-			ExpressionStatement stmt= (ExpressionStatement) statements.get(0);
-			Assignment assignment= (Assignment) stmt.getExpression();
-			FieldAccess leftFieldAccess= (FieldAccess) assignment.getLeftHandSide();
-			FieldAccess rightFieldAccess= (FieldAccess) assignment.getRightHandSide();
-			
-			MethodInvocation invocation= ast.newMethodInvocation();
-			invocation.setName(ast.newSimpleName("xoo"));
-			rewrite.markAsReplaced(leftFieldAccess.getExpression(), invocation);
-			
-			SimpleName newName= ast.newSimpleName("x");
-			rewrite.markAsReplaced(leftFieldAccess.getName(), newName);
-
-			SimpleName rightHand= ast.newSimpleName("b");
-			rewrite.markAsReplaced(rightFieldAccess.getExpression(), rightHand);
-		}
-		
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        xoo().x= b.i;\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-	public void testInfixExpression() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        i= 1 + 2;\n");
-		buf.append("        j= 1 + 2 + 3 + 4 + 5;\n");
-		buf.append("        k= 1 + 2 + 3 + 4 + 5;\n");		
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		List statements= block.statements();
-		assertTrue("Number of statements not 3", statements.size() == 3);
-		{ // change left side & right side & operand
-			ExpressionStatement stmt= (ExpressionStatement) statements.get(0);
-			Assignment assignment= (Assignment) stmt.getExpression();
-			InfixExpression expr= (InfixExpression) assignment.getRightHandSide();
-			
-			SimpleName leftOp= ast.newSimpleName("k");
-			rewrite.markAsReplaced(expr.getLeftOperand(), leftOp);	
-
-			SimpleName rightOp= ast.newSimpleName("j");
-			rewrite.markAsReplaced(expr.getRightOperand(), rightOp);	
-			
-			// change operand
-			InfixExpression modifiedNode= ast.newInfixExpression();
-			modifiedNode.setOperator(InfixExpression.Operator.MINUS);
-			rewrite.markAsModified(expr, modifiedNode);
-		}
-		
-		{ // remove an ext. operand, add one and replace one
-			ExpressionStatement stmt= (ExpressionStatement) statements.get(1);
-			Assignment assignment= (Assignment) stmt.getExpression();
-			InfixExpression expr= (InfixExpression) assignment.getRightHandSide();
-			
-			List extendedOperands= expr.extendedOperands();
-			assertTrue("Number of extendedOperands not 3", extendedOperands.size() == 3);
-			
-			rewrite.markAsRemoved((ASTNode) extendedOperands.get(0));
-			
-			SimpleName newOp1= ast.newSimpleName("k");
-			rewrite.markAsReplaced((ASTNode) extendedOperands.get(1), newOp1);
-			
-			SimpleName newOp2= ast.newSimpleName("n");
-			rewrite.markAsInserted(newOp2);
-			
-			extendedOperands.add(newOp2);
-		}
-		
-		{ // change operand
-			ExpressionStatement stmt= (ExpressionStatement) statements.get(2);
-			Assignment assignment= (Assignment) stmt.getExpression();
-			InfixExpression expr= (InfixExpression) assignment.getRightHandSide();			
-			
-			InfixExpression modifiedNode= ast.newInfixExpression();
-			modifiedNode.setOperator(InfixExpression.Operator.TIMES);
-			rewrite.markAsModified(expr, modifiedNode);
-		}			
-			
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        i= k - j;\n");
-		buf.append("        j= 1 + 2 + k + 5 + n;\n");
-		buf.append("        k= 1 * 2 * 3 * 4 * 5;\n");		
-		buf.append("    }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-
-	public void testInstanceofExpression() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        goo(k instanceof Vector);\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		List statements= block.statements();
-		assertTrue("Number of statements not 1", statements.size() == 1);
-		{ // change left side & right side
-			ExpressionStatement stmt= (ExpressionStatement) statements.get(0);
-			MethodInvocation invocation= (MethodInvocation) stmt.getExpression();
-			
-			List arguments= invocation.arguments();
-			InstanceofExpression expr= (InstanceofExpression) arguments.get(0);
-			
-			SimpleName name= ast.newSimpleName("x");
-			rewrite.markAsReplaced(expr.getLeftOperand(), name);
-			
-			Type newCastType= ast.newSimpleType(ast.newSimpleName("List"));
-
-			rewrite.markAsReplaced(expr.getRightOperand(), newCastType);
-		}
-			
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        goo(x instanceof List);\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-	public void testMethodInvocation() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        foo(1, 2).goo();\n");
-		buf.append("        foo(1, 2).goo();\n");
-		buf.append("        foo(1, 2).goo();\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		List statements= block.statements();
-		assertTrue("Number of statements not 3", statements.size() == 3);
-		{ // remove expression, add param, change name
-			ExpressionStatement stmt= (ExpressionStatement) statements.get(0);
-			MethodInvocation invocation= (MethodInvocation) stmt.getExpression();
-			
-			rewrite.markAsRemoved(invocation.getExpression());
-			
-			SimpleName name= ast.newSimpleName("x");
-			rewrite.markAsReplaced(invocation.getName(), name);
-			
-			ASTNode arg= ast.newNumberLiteral("1");
-			rewrite.markAsInserted(arg);
-			
-			invocation.arguments().add(arg);
-		}
-		{ // insert expression, delete params
-			ExpressionStatement stmt= (ExpressionStatement) statements.get(1);
-			MethodInvocation invocation= (MethodInvocation) stmt.getExpression();
-			
-			MethodInvocation leftInvocation= (MethodInvocation) invocation.getExpression();
-			
-			SimpleName newExpression= ast.newSimpleName("x");
-			rewrite.markAsInserted(newExpression);
-			
-			leftInvocation.setExpression(newExpression);
-			
-			List args= leftInvocation.arguments();
-			rewrite.markAsRemoved((ASTNode) args.get(0));
-			rewrite.markAsRemoved((ASTNode) args.get(1));
-		}
-		{ // remove expression, add it as parameter
-			ExpressionStatement stmt= (ExpressionStatement) statements.get(2);
-			MethodInvocation invocation= (MethodInvocation) stmt.getExpression();
-			
-			ASTNode placeHolder= rewrite.createCopy(invocation.getExpression());
-			
-			rewrite.markAsRemoved(invocation.getExpression());
-			rewrite.markAsInserted(placeHolder);
-			
-			invocation.arguments().add(placeHolder);
-		}
-			
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        x(1);\n");
-		buf.append("        x.foo().goo();\n");		
-		buf.append("        goo(foo(1, 2));\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-
-	public void testMethodParamsRenameReorder() throws Exception {
-		if (true)
-			return;
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void m(boolean y, int a) {\n");
-		buf.append("        m(y, a);\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "m");
-		Block block= methodDecl.getBody();
-		List statements= block.statements();
-		assertTrue("Number of statements not 1", statements.size() == 1);
-		{ 
-			//params 
-			List params= methodDecl.parameters();
-			SingleVariableDeclaration firstParam= (SingleVariableDeclaration) params.get(0);
-			SingleVariableDeclaration secondParam= (SingleVariableDeclaration) params.get(1);
-
-			//args
-			ExpressionStatement stmt= (ExpressionStatement) statements.get(0);
-			MethodInvocation invocation= (MethodInvocation) stmt.getExpression();
-			List arguments= invocation.arguments();
-			SimpleName first= (SimpleName) arguments.get(0);
-			SimpleName second= (SimpleName) arguments.get(1);
-			
-
-			//rename args
-			SimpleName newFirstArg= methodDecl.getAST().newSimpleName("yyy");
-			SimpleName newSecondArg= methodDecl.getAST().newSimpleName("bb");
-			rewrite.markAsReplaced(first, newFirstArg);
-			rewrite.markAsReplaced(second, newSecondArg);
-			
-
-			//rename params
-			SimpleName newFirstName= methodDecl.getAST().newSimpleName("yyy");
-			SimpleName newSecondName= methodDecl.getAST().newSimpleName("bb");
-			rewrite.markAsReplaced(firstParam.getName(), newFirstName);
-			rewrite.markAsReplaced(secondParam.getName(), newSecondName);
-			
-			//reoder params
-			ASTNode paramplaceholder1= rewrite.createCopy(firstParam);
-			ASTNode paramplaceholder2= rewrite.createCopy(secondParam);
-			
-			rewrite.markAsReplaced(firstParam, paramplaceholder2);
-			rewrite.markAsReplaced(secondParam, paramplaceholder1);
-			
-			//reorder args
-			ASTNode placeholder1= rewrite.createCopy(first);
-			ASTNode placeholder2= rewrite.createCopy(second);
-			
-			rewrite.markAsReplaced(first, placeholder2);
-			rewrite.markAsReplaced(second, placeholder1);
-
-			
-		}
-			
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void m(int bb, boolean yyy) {\n");
-		buf.append("        m(bb, yyy);\n");
-		buf.append("    }\n");
-		buf.append("}\n");		
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-	public void testMethodInvocation1() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        foo(foo(1, 2), 3);\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		List statements= block.statements();
-		assertTrue("Number of statements not 1", statements.size() == 1);
-		{ // remove expression, add param, change name
-			ExpressionStatement stmt= (ExpressionStatement) statements.get(0);
-			MethodInvocation invocation= (MethodInvocation) stmt.getExpression();
-			
-			List arguments= invocation.arguments();
-			MethodInvocation first= (MethodInvocation) arguments.get(0);
-			ASTNode second= (ASTNode) arguments.get(1);
-			
-			ASTNode placeholder1= rewrite.createCopy(first);
-			ASTNode placeholder2= rewrite.createCopy(second);
-			
-			rewrite.markAsReplaced(first, placeholder2);
-			rewrite.markAsReplaced(second, placeholder1);
-			
-			List innerArguments= first.arguments();
-			ASTNode innerFirst= (ASTNode) innerArguments.get(0);
-			ASTNode innerSecond= (ASTNode) innerArguments.get(1);
-			
-			ASTNode innerPlaceholder1= rewrite.createCopy(innerFirst);
-			ASTNode innerPlaceholder2= rewrite.createCopy(innerSecond);
-			
-			rewrite.markAsReplaced(innerFirst, innerPlaceholder2);
-			rewrite.markAsReplaced(innerSecond, innerPlaceholder1);			
-			
-			
-			
-		}
-			
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        foo(3, foo(2, 1));\n");
-		buf.append("    }\n");
-		buf.append("}\n");		
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}	
-	
-	public void testParenthesizedExpression() throws Exception {
-		//System.out.println(getClass().getName()+"::" + getName() +" disabled (bug 23362)");
-		
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        i= (1 + 2) * 3;\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		List statements= block.statements();
-		assertTrue("Number of statements not 1", statements.size() == 1);
-		{ // replace expression
-			ExpressionStatement stmt= (ExpressionStatement) statements.get(0);
-			Assignment assignment= (Assignment) stmt.getExpression();
-			
-			InfixExpression multiplication= (InfixExpression) assignment.getRightHandSide();
-			
-			ParenthesizedExpression parenthesizedExpression= (ParenthesizedExpression) multiplication.getLeftOperand();
-						
-			SimpleName name= ast.newSimpleName("x");
-			rewrite.markAsReplaced(parenthesizedExpression.getExpression(), name);
-		}
-			
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        i= (x) * 3;\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-		
-	}
-	
-	public void testPrefixExpression() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        i= --x;\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		List statements= block.statements();
-		assertTrue("Number of statements not 1", statements.size() == 1);
-		{ // modify operand and operation
-			ExpressionStatement stmt= (ExpressionStatement) statements.get(0);
-			Assignment assignment= (Assignment) stmt.getExpression();
-			
-			PrefixExpression preExpression= (PrefixExpression) assignment.getRightHandSide();
-					
-			NumberLiteral newOperation= ast.newNumberLiteral("10");
-			rewrite.markAsReplaced(preExpression.getOperand(), newOperation);
-			
-			PrefixExpression modifiedNode= ast.newPrefixExpression();
-			modifiedNode.setOperator(PrefixExpression.Operator.COMPLEMENT);
-			
-			rewrite.markAsModified(preExpression, modifiedNode);
-		}
-			
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        i= ~10;\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}	
-	
-	public void testPostfixExpression() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        i= x--;\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		List statements= block.statements();
-		assertTrue("Number of statements not 1", statements.size() == 1);
-		{ // modify operand and operation
-			ExpressionStatement stmt= (ExpressionStatement) statements.get(0);
-			Assignment assignment= (Assignment) stmt.getExpression();
-			
-			PostfixExpression postExpression= (PostfixExpression) assignment.getRightHandSide();
-					
-			NumberLiteral newOperation= ast.newNumberLiteral("10");
-			rewrite.markAsReplaced(postExpression.getOperand(), newOperation);
-			
-			PostfixExpression modifiedNode= ast.newPostfixExpression();
-			modifiedNode.setOperator(PostfixExpression.Operator.INCREMENT);
-			
-			rewrite.markAsModified(postExpression, modifiedNode);
-		}
-			
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        i= 10++;\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}		
-
-	public void testSuperConstructorInvocation() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public E() {\n");
-		buf.append("        super();\n");
-		buf.append("    }\n");
-		buf.append("    public E(int i) {\n");
-		buf.append("        foo(i + i).super(i);\n");
-		buf.append("    }\n");
-		buf.append("    public E(int i, int k) {\n");
-		buf.append("        Outer.super(foo(goo(x)), 1);\n");
-		buf.append("    }\n");	
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		List bodyDeclarations= type.bodyDeclarations();
-		assertTrue("Number of bodyDeclarations not 3", bodyDeclarations.size() == 3);
-		{ // add expresssion & parameter
-			MethodDeclaration methodDecl= (MethodDeclaration) bodyDeclarations.get(0);
-			SuperConstructorInvocation invocation= (SuperConstructorInvocation) methodDecl.getBody().statements().get(0);
-
-			SimpleName newExpression= ast.newSimpleName("x");
-			rewrite.markAsInserted(newExpression);
-			invocation.setExpression(newExpression);
-			
-			
-			ASTNode arg= ast.newNumberLiteral("1");
-			rewrite.markAsInserted(arg);
-			
-			invocation.arguments().add(arg);		
-		}
-		{ // remove expression, replace argument with argument of expression
-			MethodDeclaration methodDecl= (MethodDeclaration) bodyDeclarations.get(1);
-			SuperConstructorInvocation invocation= (SuperConstructorInvocation) methodDecl.getBody().statements().get(0);
-
-			MethodInvocation expression= (MethodInvocation) invocation.getExpression();
-			rewrite.markAsRemoved(expression);
-			
-			ASTNode placeHolder= rewrite.createCopy((ASTNode) expression.arguments().get(0));
-			
-			ASTNode arg1= (ASTNode) invocation.arguments().get(0);
-			
-			rewrite.markAsReplaced(arg1, placeHolder);
-		}
-		{ // remove argument, replace expression with part of argument
-			MethodDeclaration methodDecl= (MethodDeclaration) bodyDeclarations.get(2);
-			SuperConstructorInvocation invocation= (SuperConstructorInvocation) methodDecl.getBody().statements().get(0);
-			
-			MethodInvocation arg1= (MethodInvocation) invocation.arguments().get(0);
-			rewrite.markAsRemoved(arg1);
-			
-			ASTNode placeHolder= rewrite.createCopy((ASTNode) arg1.arguments().get(0));
-			
-			rewrite.markAsReplaced((ASTNode) invocation.getExpression(), placeHolder);
-		}
-			
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public E() {\n");
-		buf.append("        x.super(1);\n");
-		buf.append("    }\n");
-		buf.append("    public E(int i) {\n");
-		buf.append("        super(i + i);\n");
-		buf.append("    }\n");
-		buf.append("    public E(int i, int k) {\n");
-		buf.append("        goo(x).super(1);\n");
-		buf.append("    }\n");	
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-	public void testSuperFieldInvocation() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        super.x= Outer.super.y;\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-			
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		List statements= block.statements();
-		assertTrue("Number of statements not 1", statements.size() == 1);
-		{ // insert qualifier, replace field name, delete qualifier
-			ExpressionStatement stmt= (ExpressionStatement) statements.get(0);
-			Assignment assignment= (Assignment) stmt.getExpression();
-			SuperFieldAccess leftFieldAccess= (SuperFieldAccess) assignment.getLeftHandSide();
-			SuperFieldAccess rightFieldAccess= (SuperFieldAccess) assignment.getRightHandSide();
-			
-			SimpleName newQualifier= ast.newSimpleName("X");
-			rewrite.markAsInserted(newQualifier);
-			leftFieldAccess.setQualifier(newQualifier);
-			
-			SimpleName newName= ast.newSimpleName("y");
-			rewrite.markAsReplaced(leftFieldAccess.getName(), newName);
-
-			rewrite.markAsRemoved(rightFieldAccess.getQualifier());
-		}
-		
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        X.super.y= super.y;\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}	
-	public void testSuperMethodInvocation() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        super.foo();\n");
-		buf.append("        Outer.super.foo(i);\n");		
-		buf.append("        Outer.super.foo(foo(X.goo()), 1);\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		List statements= block.statements();
-		assertTrue("Number of statements not 3", statements.size() == 3);
-		{ // add qualifier & parameter
-			ExpressionStatement statement= (ExpressionStatement) statements.get(0);
-			SuperMethodInvocation invocation= (SuperMethodInvocation) statement.getExpression();
-
-			SimpleName newExpression= ast.newSimpleName("X");
-			rewrite.markAsInserted(newExpression);
-			invocation.setQualifier(newExpression);
-			
-			
-			ASTNode arg= ast.newNumberLiteral("1");
-			rewrite.markAsInserted(arg);
-			
-			invocation.arguments().add(arg);		
-		}
-		{ // remove qualifier, replace argument with argument of expression
-			ExpressionStatement statement= (ExpressionStatement) statements.get(1);
-			SuperMethodInvocation invocation= (SuperMethodInvocation) statement.getExpression();
-
-			Name qualifier= (Name) invocation.getQualifier();
-			rewrite.markAsRemoved(qualifier);
-			
-			Name placeHolder= (Name) rewrite.createCopy(qualifier);
-			
-			FieldAccess newFieldAccess= ast.newFieldAccess();
-			newFieldAccess.setExpression(placeHolder);
-			newFieldAccess.setName(ast.newSimpleName("count"));
-			
-			ASTNode arg1= (ASTNode) invocation.arguments().get(0);
-			rewrite.markAsReplaced(arg1, newFieldAccess);
-		}
-		{ // remove argument, replace qualifier with part argument qualifier
-			ExpressionStatement statement= (ExpressionStatement) statements.get(2);
-			SuperMethodInvocation invocation= (SuperMethodInvocation) statement.getExpression();
-			
-			MethodInvocation arg1= (MethodInvocation) invocation.arguments().get(0);
-			rewrite.markAsRemoved(arg1);
-			
-			MethodInvocation innerArg= (MethodInvocation) arg1.arguments().get(0);
-			
-			ASTNode placeHolder= rewrite.createCopy((ASTNode) innerArg.getExpression());
-			
-			rewrite.markAsReplaced((ASTNode) invocation.getQualifier(), placeHolder);
-		}
-			
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        X.super.foo(1);\n");
-		buf.append("        super.foo(Outer.count);\n");		
-		buf.append("        X.super.foo(1);\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-	public void testThisExpression() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        return this;\n");		
-		buf.append("        return Outer.this;\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		List statements= block.statements();
-		assertTrue("Number of statements not 2", statements.size() == 2);
-		{ // add qualifier
-			ReturnStatement returnStatement= (ReturnStatement) statements.get(0);
-			
-			ThisExpression thisExpression= (ThisExpression) returnStatement.getExpression();
-
-			SimpleName newExpression= ast.newSimpleName("X");
-			rewrite.markAsInserted(newExpression);
-			thisExpression.setQualifier(newExpression);
-		}
-		{ // remove qualifier
-			ReturnStatement returnStatement= (ReturnStatement) statements.get(1);
-			
-			ThisExpression thisExpression= (ThisExpression) returnStatement.getExpression();
-
-			rewrite.markAsRemoved(thisExpression.getQualifier());
-		}
-
-			
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        return X.this;\n");		
-		buf.append("        return this;\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-	public void testTypeLiteral() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        return E.class;\n");		
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		List statements= block.statements();
-		assertTrue("Number of statements not 1", statements.size() == 1);
-		{ // replace type
-			ReturnStatement returnStatement= (ReturnStatement) statements.get(0);
-			
-			TypeLiteral typeLiteral= (TypeLiteral) returnStatement.getExpression();
-
-			Type newType= ast.newPrimitiveType(PrimitiveType.VOID);
-			
-			rewrite.markAsReplaced(typeLiteral.getType(), newType);
-		}
-			
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        return void.class;\n");		
-		buf.append("    }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-			
-}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/astrewrite/ASTRewritingMethodDeclTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/astrewrite/ASTRewritingMethodDeclTest.java
deleted file mode 100644
index 87971e5..0000000
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/astrewrite/ASTRewritingMethodDeclTest.java
+++ /dev/null
@@ -1,1054 +0,0 @@
-package org.eclipse.jdt.ui.tests.astrewrite;
-
-import java.util.Hashtable;
-import java.util.List;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.dom.AST;
-import org.eclipse.jdt.core.dom.ASTNode;
-import org.eclipse.jdt.core.dom.Block;
-import org.eclipse.jdt.core.dom.CompilationUnit;
-import org.eclipse.jdt.core.dom.FieldDeclaration;
-import org.eclipse.jdt.core.dom.Initializer;
-import org.eclipse.jdt.core.dom.MethodDeclaration;
-import org.eclipse.jdt.core.dom.Modifier;
-import org.eclipse.jdt.core.dom.Name;
-import org.eclipse.jdt.core.dom.PrimitiveType;
-import org.eclipse.jdt.core.dom.SimpleName;
-import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
-import org.eclipse.jdt.core.dom.Type;
-import org.eclipse.jdt.core.dom.TypeDeclaration;
-import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-import org.eclipse.jdt.testplugin.TestPluginLauncher;
-
-import org.eclipse.jdt.internal.corext.dom.ASTRewrite;
-import org.eclipse.jdt.internal.ui.text.correction.ASTRewriteCorrectionProposal;
-
-public class ASTRewritingMethodDeclTest extends ASTRewritingTest {
-	
-	private static final Class THIS= ASTRewritingMethodDeclTest.class;
-	
-	private IJavaProject fJProject1;
-	private IPackageFragmentRoot fSourceFolder;
-
-	public ASTRewritingMethodDeclTest(String name) {
-		super(name);
-	}
-
-	public static void main(String[] args) {
-		TestPluginLauncher.run(TestPluginLauncher.getLocationFromProperties(), THIS, args);
-	}
-
-
-	public static Test suite() {
-		if (false) {
-			return new TestSuite(THIS);
-		} else {
-			TestSuite suite= new TestSuite();
-			suite.addTest(new ASTRewritingMethodDeclTest("testMethodDeclarationParamShuffel"));
-			return suite;
-		}
-	}
-
-
-	protected void setUp() throws Exception {
-		Hashtable options= JavaCore.getOptions();
-		options.put(JavaCore.FORMATTER_TAB_CHAR, JavaCore.SPACE);
-		options.put(JavaCore.FORMATTER_TAB_SIZE, "4");
-		JavaCore.setOptions(options);			
-		
-		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		assertTrue("rt not found", JavaProjectHelper.addRTJar(fJProject1) != null);
-
-		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
-	}
-
-
-	protected void tearDown() throws Exception {
-		JavaProjectHelper.delete(fJProject1);
-	}
-	
-
-	
-	public void testMethodDeclChanges() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public abstract class E {\n");
-		buf.append("    public E(int p1, int p2, int p3) {}\n");
-		buf.append("    public void gee(int p1, int p2, int p3) throws IllegalArgumentException {}\n");
-		buf.append("    public void hee(int p1, int p2, int p3) throws IllegalArgumentException {}\n");
-		buf.append("    public void iee(int p1, int p2, int p3) throws IllegalArgumentException, IllegalAccessException {}\n");
-		buf.append("    public void jee(int p1, int p2, int p3) throws IllegalArgumentException, IllegalAccessException {}\n");
-		buf.append("    public abstract void kee(int p1, int p2, int p3) throws IllegalArgumentException, IllegalAccessException, SecurityException;\n");
-		buf.append("    public abstract void lee(int p1, int p2, int p3) throws IllegalArgumentException, IllegalAccessException, SecurityException;\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);	
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		AST ast= astRoot.getAST();
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		
-		{ // convert constructor to method: insert return type
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "E");
-			
-			Type newReturnType= astRoot.getAST().newPrimitiveType(PrimitiveType.FLOAT);
-			methodDecl.setReturnType(newReturnType);
-			
-			rewrite.markAsInserted(newReturnType);
-			
-			// from constructor to method
-			MethodDeclaration modifiedNode= ast.newMethodDeclaration();
-			modifiedNode.setConstructor(false);
-			modifiedNode.setModifiers(methodDecl.getModifiers()); // no change
-			modifiedNode.setExtraDimensions(methodDecl.getExtraDimensions()); // no change
-			rewrite.markAsModified(methodDecl, modifiedNode);
-		}
-		{ // change return type
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "gee");
-			assertTrue("Has no return type: gee", methodDecl.getReturnType() != null);
-			
-			Type returnType= methodDecl.getReturnType();
-			Type newReturnType= astRoot.getAST().newPrimitiveType(PrimitiveType.FLOAT);
-			rewrite.markAsReplaced(returnType, newReturnType);
-		}
-		{ // remove return type
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "hee");
-			assertTrue("Has no return type: hee", methodDecl.getReturnType() != null);
-			
-			Type returnType= methodDecl.getReturnType();
-			rewrite.markAsRemoved(returnType);
-			
-			// from method to constructor
-			MethodDeclaration modifiedNode= ast.newMethodDeclaration();
-			modifiedNode.setConstructor(true);
-			modifiedNode.setModifiers(methodDecl.getModifiers());
-			modifiedNode.setExtraDimensions(methodDecl.getExtraDimensions()); // no change
-			rewrite.markAsModified(methodDecl, modifiedNode);
-		}
-		{ // rename method name
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "iee");
-			
-			SimpleName name= methodDecl.getName();
-			SimpleName newName= ast.newSimpleName("xii");
-			
-			rewrite.markAsReplaced(name, newName);
-		}				
-		{ // rename first param & last throw statement
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "jee");
-			List parameters= methodDecl.parameters();
-			assertTrue("must be 3 parameters", parameters.size() == 3);
-			SingleVariableDeclaration newParam= createNewParam(ast, "m");
-			rewrite.markAsReplaced((ASTNode) parameters.get(0), newParam);
-						
-			List thrownExceptions= methodDecl.thrownExceptions();
-			assertTrue("must be 2 thrown exceptions", thrownExceptions.size() == 2);
-			Name newThrownException= ast.newSimpleName("ArrayStoreException");
-			rewrite.markAsReplaced((ASTNode) thrownExceptions.get(1), newThrownException);			
-		}
-		{ // rename first and second param & rename first and last exception
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "kee");
-			List parameters= methodDecl.parameters();
-			assertTrue("must be 3 parameters", parameters.size() == 3);
-			SingleVariableDeclaration newParam1= createNewParam(ast, "m1");
-			SingleVariableDeclaration newParam2= createNewParam(ast, "m2");
-			rewrite.markAsReplaced((ASTNode) parameters.get(0), newParam1);
-			rewrite.markAsReplaced((ASTNode) parameters.get(1), newParam2);
-			
-			List thrownExceptions= methodDecl.thrownExceptions();
-			assertTrue("must be 3 thrown exceptions", thrownExceptions.size() == 3);
-			Name newThrownException1= ast.newSimpleName("ArrayStoreException");
-			Name newThrownException2= ast.newSimpleName("InterruptedException");
-			rewrite.markAsReplaced((ASTNode) thrownExceptions.get(0), newThrownException1);
-			rewrite.markAsReplaced((ASTNode) thrownExceptions.get(2), newThrownException2);
-		}		
-		{ // rename all params & rename second exception
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "lee");
-			List parameters= methodDecl.parameters();
-			assertTrue("must be 3 parameters", parameters.size() == 3);
-			SingleVariableDeclaration newParam1= createNewParam(ast, "m1");
-			SingleVariableDeclaration newParam2= createNewParam(ast, "m2");			
-			SingleVariableDeclaration newParam3= createNewParam(ast, "m3");	
-			rewrite.markAsReplaced((ASTNode) parameters.get(0), newParam1);
-			rewrite.markAsReplaced((ASTNode) parameters.get(1), newParam2);
-			rewrite.markAsReplaced((ASTNode) parameters.get(2), newParam3);
-			
-			List thrownExceptions= methodDecl.thrownExceptions();
-			assertTrue("must be 3 thrown exceptions", thrownExceptions.size() == 3);
-			Name newThrownException= ast.newSimpleName("ArrayStoreException");
-			rewrite.markAsReplaced((ASTNode) thrownExceptions.get(1), newThrownException);
-		}				
-		
-					
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public abstract class E {\n");
-		buf.append("    public float E(int p1, int p2, int p3) {}\n");
-		buf.append("    public float gee(int p1, int p2, int p3) throws IllegalArgumentException {}\n");
-		buf.append("    public hee(int p1, int p2, int p3) throws IllegalArgumentException {}\n");
-		buf.append("    public void xii(int p1, int p2, int p3) throws IllegalArgumentException, IllegalAccessException {}\n");
-		buf.append("    public void jee(float m, int p2, int p3) throws IllegalArgumentException, ArrayStoreException {}\n");
-		buf.append("    public abstract void kee(float m1, float m2, int p3) throws ArrayStoreException, IllegalAccessException, InterruptedException;\n");
-		buf.append("    public abstract void lee(float m1, float m2, float m3) throws IllegalArgumentException, ArrayStoreException, SecurityException;\n");
-		buf.append("}\n");	
-			
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-	public void testListRemoves() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public abstract class E {\n");
-		buf.append("    public E(int p1, int p2, int p3) {}\n");
-		buf.append("    public void gee(int p1, int p2, int p3) throws IllegalArgumentException {}\n");
-		buf.append("    public void hee(int p1, int p2, int p3) throws IllegalArgumentException {}\n");
-		buf.append("    public void iee(int p1, int p2, int p3) throws IllegalArgumentException, IllegalAccessException {}\n");
-		buf.append("    public void jee(int p1, int p2, int p3) throws IllegalArgumentException, IllegalAccessException {}\n");
-		buf.append("    public abstract void kee(int p1, int p2, int p3) throws IllegalArgumentException, IllegalAccessException, SecurityException;\n");
-		buf.append("    public abstract void lee(int p1, int p2, int p3) throws IllegalArgumentException, IllegalAccessException, SecurityException;\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);	
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		AST ast= astRoot.getAST();
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		
-		{ // delete first param
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "E");
-			List parameters= methodDecl.parameters();
-			assertTrue("must be 3 parameters", parameters.size() == 3);
-			rewrite.markAsRemoved((ASTNode) parameters.get(0));
-		}
-		{ // delete second param & remove exception & remove public
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "gee");
-			
-			// change flags
-			MethodDeclaration modifiedNode= ast.newMethodDeclaration();
-			modifiedNode.setConstructor(methodDecl.isConstructor()); // no change
-			modifiedNode.setExtraDimensions(methodDecl.getExtraDimensions()); // no change
-			modifiedNode.setModifiers(0);
-			rewrite.markAsModified(methodDecl, modifiedNode);
-			
-			List parameters= methodDecl.parameters();
-			assertTrue("must be 3 parameters", parameters.size() == 3);
-			rewrite.markAsRemoved((ASTNode) parameters.get(1));
-			
-			List thrownExceptions= methodDecl.thrownExceptions();
-			assertTrue("must be 1 thrown exceptions", thrownExceptions.size() == 1);
-			rewrite.markAsRemoved((ASTNode) thrownExceptions.get(0));
-		}		
-		{ // delete last param
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "hee");
-			List parameters= methodDecl.parameters();
-			assertTrue("must be 3 parameters", parameters.size() == 3);
-			rewrite.markAsRemoved((ASTNode) parameters.get(2));	
-		}				
-		{ // delete first and second param & remove first exception
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "iee");
-			List parameters= methodDecl.parameters();
-			assertTrue("must be 3 parameters", parameters.size() == 3);
-			rewrite.markAsRemoved((ASTNode) parameters.get(0));
-			rewrite.markAsRemoved((ASTNode) parameters.get(1));
-			
-			List thrownExceptions= methodDecl.thrownExceptions();
-			assertTrue("must be 2 thrown exceptions", thrownExceptions.size() == 2);
-			rewrite.markAsRemoved((ASTNode) thrownExceptions.get(0));	
-		}				
-		{ // delete first and last param & remove second
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "jee");
-			List parameters= methodDecl.parameters();
-			assertTrue("must be 3 parameters", parameters.size() == 3);
-			rewrite.markAsRemoved((ASTNode) parameters.get(0));
-			rewrite.markAsRemoved((ASTNode) parameters.get(2));
-			
-			List thrownExceptions= methodDecl.thrownExceptions();
-			assertTrue("must be 2 thrown exceptions", thrownExceptions.size() == 2);
-			rewrite.markAsRemoved((ASTNode) thrownExceptions.get(1));			
-		}
-		{ // delete second and last param & remove first exception
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "kee");
-			List parameters= methodDecl.parameters();
-			assertTrue("must be 3 parameters", parameters.size() == 3);
-			rewrite.markAsRemoved((ASTNode) parameters.get(1));
-			rewrite.markAsRemoved((ASTNode) parameters.get(2));
-			
-			List thrownExceptions= methodDecl.thrownExceptions();
-			assertTrue("must be 3 thrown exceptions", thrownExceptions.size() == 3);
-			rewrite.markAsRemoved((ASTNode) thrownExceptions.get(1));
-		}		
-		{ // delete all params & remove first and last exception
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "lee");
-			List parameters= methodDecl.parameters();
-			assertTrue("must be 3 parameters", parameters.size() == 3);
-			rewrite.markAsRemoved((ASTNode) parameters.get(0));
-			rewrite.markAsRemoved((ASTNode) parameters.get(1));
-			rewrite.markAsRemoved((ASTNode) parameters.get(2));
-			
-			List thrownExceptions= methodDecl.thrownExceptions();
-			assertTrue("must be 3 thrown exceptions", thrownExceptions.size() == 3);
-			rewrite.markAsRemoved((ASTNode) thrownExceptions.get(0));
-			rewrite.markAsRemoved((ASTNode) thrownExceptions.get(2));				
-		}				
-
-
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public abstract class E {\n");
-		buf.append("    public E(int p2, int p3) {}\n");
-		buf.append("    void gee(int p1, int p3) {}\n");
-		buf.append("    public void hee(int p1, int p2) throws IllegalArgumentException {}\n");
-		buf.append("    public void iee(int p3) throws IllegalAccessException {}\n");
-		buf.append("    public void jee(int p2) throws IllegalArgumentException {}\n");
-		buf.append("    public abstract void kee(int p1) throws IllegalArgumentException, SecurityException;\n");
-		buf.append("    public abstract void lee() throws IllegalAccessException;\n");
-		buf.append("}\n");	
-			
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}	
-	
-	public void testListInserts() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public abstract class E {\n");
-		buf.append("    public E(int p1, int p2, int p3) {}\n");
-		buf.append("    public void gee(int p1, int p2, int p3) throws IllegalArgumentException {}\n");
-		buf.append("    public void hee(int p1, int p2, int p3) throws IllegalArgumentException {}\n");
-		buf.append("    public void iee(int p1, int p2, int p3) throws IllegalArgumentException, IllegalAccessException {}\n");
-		buf.append("    public void jee(int p1, int p2, int p3) throws IllegalArgumentException, IllegalAccessException {}\n");
-		buf.append("    public abstract void kee(int p1, int p2, int p3) throws IllegalArgumentException, IllegalAccessException, SecurityException;\n");
-		buf.append("    public abstract void lee(int p1, int p2, int p3) throws IllegalArgumentException, IllegalAccessException, SecurityException;\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);	
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		AST ast= astRoot.getAST();
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		
-		{ // insert before first param & insert an exception
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "E");
-			List parameters= methodDecl.parameters();
-			assertTrue("must be 3 parameters", parameters.size() == 3);
-
-			SingleVariableDeclaration newParam= createNewParam(ast, "m");
-			parameters.add(0, newParam);
-			rewrite.markAsInserted(newParam);
-
-			List thrownExceptions= methodDecl.thrownExceptions();
-			assertTrue("must be 0 thrown exceptions", thrownExceptions.size() == 0);
-			
-			Name newThrownException= ast.newSimpleName("InterruptedException");
-			thrownExceptions.add(newThrownException);
-			rewrite.markAsInserted(newThrownException);
-		}
-		{ // insert before second param & insert before first exception & add synchronized
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "gee");
-			
-			
-			// change flags
-			MethodDeclaration modifiedNode= ast.newMethodDeclaration();
-			modifiedNode.setConstructor(methodDecl.isConstructor()); // no change
-			modifiedNode.setExtraDimensions(methodDecl.getExtraDimensions()); // no change
-			modifiedNode.setModifiers(Modifier.PUBLIC | Modifier.SYNCHRONIZED);
-			rewrite.markAsModified(methodDecl, modifiedNode);			
-			
-			List parameters= methodDecl.parameters();
-			assertTrue("must be 3 parameters", parameters.size() == 3);
-
-			SingleVariableDeclaration newParam= createNewParam(ast, "m");
-			parameters.add(1, newParam);
-			rewrite.markAsInserted(newParam);
-
-			List thrownExceptions= methodDecl.thrownExceptions();
-			assertTrue("must be 1 thrown exceptions", thrownExceptions.size() == 1);
-			
-			Name newThrownException= ast.newSimpleName("InterruptedException");
-			thrownExceptions.add(0, newThrownException);
-			rewrite.markAsInserted(newThrownException);
-		}		
-		{ // insert after last param & insert after first exception & add synchronized, static
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "hee");
-			
-			// change flags
-			MethodDeclaration modifiedNode= ast.newMethodDeclaration();
-			modifiedNode.setConstructor(methodDecl.isConstructor()); // no change
-			modifiedNode.setExtraDimensions(methodDecl.getExtraDimensions()); // no change
-			modifiedNode.setModifiers(Modifier.PUBLIC | Modifier.SYNCHRONIZED | Modifier.STATIC);
-			rewrite.markAsModified(methodDecl, modifiedNode);					
-			
-			List parameters= methodDecl.parameters();
-			assertTrue("must be 3 parameters", parameters.size() == 3);
-
-			SingleVariableDeclaration newParam= createNewParam(ast, "m");
-			parameters.add(newParam);
-			rewrite.markAsInserted(newParam);
-
-			List thrownExceptions= methodDecl.thrownExceptions();
-			assertTrue("must be 1 thrown exceptions", thrownExceptions.size() == 1);
-			
-			Name newThrownException= ast.newSimpleName("InterruptedException");
-			thrownExceptions.add(newThrownException);
-			rewrite.markAsInserted(newThrownException);
-		}				
-		{ // insert 2 params before first & insert between two exception
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "iee");
-			List parameters= methodDecl.parameters();
-			assertTrue("must be 3 parameters", parameters.size() == 3);
-
-			SingleVariableDeclaration newParam1= createNewParam(ast, "m1");
-			SingleVariableDeclaration newParam2= createNewParam(ast, "m2");
-			parameters.add(0, newParam1);
-			parameters.add(1, newParam2);
-			rewrite.markAsInserted(newParam1);
-			rewrite.markAsInserted(newParam2);
-
-			List thrownExceptions= methodDecl.thrownExceptions();
-			assertTrue("must be 2 thrown exceptions", thrownExceptions.size() == 2);
-			
-			Name newThrownException= ast.newSimpleName("InterruptedException");
-			thrownExceptions.add(1, newThrownException);
-			rewrite.markAsInserted(newThrownException);
-		}			
-		{ // insert 2 params after first & replace the second exception and insert new after
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "jee");
-			List parameters= methodDecl.parameters();
-			assertTrue("must be 3 parameters", parameters.size() == 3);
-
-			SingleVariableDeclaration newParam1= createNewParam(ast, "m1");
-			SingleVariableDeclaration newParam2= createNewParam(ast, "m2");
-			parameters.add(1, newParam1);
-			parameters.add(2, newParam2);
-			rewrite.markAsInserted(newParam1);
-			rewrite.markAsInserted(newParam2);
-
-			List thrownExceptions= methodDecl.thrownExceptions();
-			assertTrue("must be 2 thrown exceptions", thrownExceptions.size() == 2);
-			
-			Name newThrownException1= ast.newSimpleName("InterruptedException");
-			thrownExceptions.add(newThrownException1);
-			rewrite.markAsInserted(newThrownException1);
-			
-			Name newThrownException2= ast.newSimpleName("ArrayStoreException");
-			rewrite.markAsReplaced((ASTNode) thrownExceptions.get(1), newThrownException2);
-		}
-		{ // insert 2 params after last & remove the last exception and insert new after
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "kee");
-			List parameters= methodDecl.parameters();
-			assertTrue("must be 3 parameters", parameters.size() == 3);
-
-			SingleVariableDeclaration newParam1= createNewParam(ast, "m1");
-			SingleVariableDeclaration newParam2= createNewParam(ast, "m2");
-			parameters.add(newParam1);
-			parameters.add(newParam2);
-			rewrite.markAsInserted(newParam1);
-			rewrite.markAsInserted(newParam2);
-			
-			List thrownExceptions= methodDecl.thrownExceptions();
-			assertTrue("must be 3 thrown exceptions", thrownExceptions.size() == 3);
-			
-			Name newThrownException= ast.newSimpleName("InterruptedException");
-			thrownExceptions.add(newThrownException);
-			rewrite.markAsInserted(newThrownException);
-			
-			rewrite.markAsRemoved((ASTNode) thrownExceptions.get(2));			
-		}	
-		{ // insert at first and last position & remove 2nd, add after 2nd, remove 3rd
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "lee");
-			List parameters= methodDecl.parameters();
-			assertTrue("must be 3 parameters", parameters.size() == 3);
-
-			SingleVariableDeclaration newParam1= createNewParam(ast, "m1");
-			SingleVariableDeclaration newParam2= createNewParam(ast, "m2");
-			parameters.add(0, newParam1);
-			parameters.add(newParam2);
-			rewrite.markAsInserted(newParam1);
-			rewrite.markAsInserted(newParam2);
-			
-			List thrownExceptions= methodDecl.thrownExceptions();
-			assertTrue("must be 3 thrown exceptions", thrownExceptions.size() == 3);
-			
-			rewrite.markAsRemoved((ASTNode) thrownExceptions.get(1));
-			rewrite.markAsRemoved((ASTNode) thrownExceptions.get(2));
-			
-			Name newThrownException= ast.newSimpleName("InterruptedException");
-			thrownExceptions.add(2, newThrownException);
-			rewrite.markAsInserted(newThrownException);			
-		}				
-
-
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public abstract class E {\n");
-		buf.append("    public E(float m, int p1, int p2, int p3) throws InterruptedException {}\n");
-		buf.append("    public synchronized void gee(int p1, float m, int p2, int p3) throws InterruptedException, IllegalArgumentException {}\n");
-		buf.append("    public static synchronized void hee(int p1, int p2, int p3, float m) throws IllegalArgumentException, InterruptedException {}\n");
-		buf.append("    public void iee(float m1, float m2, int p1, int p2, int p3) throws IllegalArgumentException, InterruptedException, IllegalAccessException {}\n");
-		buf.append("    public void jee(int p1, float m1, float m2, int p2, int p3) throws IllegalArgumentException, ArrayStoreException, InterruptedException {}\n");
-		buf.append("    public abstract void kee(int p1, int p2, int p3, float m1, float m2) throws IllegalArgumentException, IllegalAccessException, InterruptedException;\n");
-		buf.append("    public abstract void lee(float m1, int p1, int p2, int p3, float m2) throws IllegalArgumentException, InterruptedException;\n");
-		buf.append("}\n");	
-			
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-	public void testListCombinations() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public abstract class E {\n");
-		buf.append("    public E(int p1, int p2, int p3) {}\n");
-		buf.append("    public void gee(int p1, int p2, int p3) throws IllegalArgumentException {}\n");
-		buf.append("    public void hee(int p1, int p2, int p3) throws IllegalArgumentException {}\n");
-		buf.append("    public void iee(int p1, int p2, int p3) throws IllegalArgumentException, IllegalAccessException {}\n");
-		buf.append("    public void jee(int p1, int p2, int p3) throws IllegalArgumentException, IllegalAccessException {}\n");
-		buf.append("    public abstract void kee(int p1, int p2, int p3) throws IllegalArgumentException, IllegalAccessException, SecurityException;\n");
-		buf.append("    public abstract void lee(int p1, int p2, int p3) throws IllegalArgumentException, IllegalAccessException, SecurityException;\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);	
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		AST ast= astRoot.getAST();
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		
-		{ // delete all and insert after & insert 2 exceptions
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "E");
-			List parameters= methodDecl.parameters();
-			assertTrue("must be 3 parameters", parameters.size() == 3);
-		
-			rewrite.markAsRemoved((ASTNode) parameters.get(0));
-			rewrite.markAsRemoved((ASTNode) parameters.get(1));
-			rewrite.markAsRemoved((ASTNode) parameters.get(2));
-
-			SingleVariableDeclaration newParam= createNewParam(ast, "m");
-			parameters.add(newParam);
-			rewrite.markAsInserted(newParam);
-
-			List thrownExceptions= methodDecl.thrownExceptions();
-			assertTrue("must be 0 thrown exceptions", thrownExceptions.size() == 0);
-			
-			Name newThrownException1= ast.newSimpleName("InterruptedException");
-			thrownExceptions.add(newThrownException1);
-			rewrite.markAsInserted(newThrownException1);
-			
-			Name newThrownException2= ast.newSimpleName("ArrayStoreException");
-			thrownExceptions.add(newThrownException2);
-			rewrite.markAsInserted(newThrownException2);
-			
-		}
-		{ // delete first 2, replace last and insert after & replace first exception and insert before
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "gee");
-			List parameters= methodDecl.parameters();
-			assertTrue("must be 3 parameters", parameters.size() == 3);
-
-			rewrite.markAsRemoved((ASTNode) parameters.get(0));
-			rewrite.markAsRemoved((ASTNode) parameters.get(1));
-			
-			SingleVariableDeclaration newParam1= createNewParam(ast, "m1");
-			rewrite.markAsReplaced((ASTNode) parameters.get(2), newParam1);
-						
-			SingleVariableDeclaration newParam2= createNewParam(ast, "m2");
-			parameters.add(newParam2);
-			rewrite.markAsInserted(newParam2);
-
-			List thrownExceptions= methodDecl.thrownExceptions();
-			assertTrue("must be 1 thrown exceptions", thrownExceptions.size() == 1);
-			
-			Name modifiedThrownException= ast.newSimpleName("InterruptedException");
-			rewrite.markAsReplaced((ASTNode) thrownExceptions.get(0), modifiedThrownException);
-						
-			Name newThrownException2= ast.newSimpleName("ArrayStoreException");
-			thrownExceptions.add(newThrownException2);
-			rewrite.markAsInserted(newThrownException2);
-		}		
-		{ // delete first 2, replace last and insert at first & remove first and insert before
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "hee");
-			List parameters= methodDecl.parameters();
-			assertTrue("must be 3 parameters", parameters.size() == 3);
-
-			rewrite.markAsRemoved((ASTNode) parameters.get(0));
-			rewrite.markAsRemoved((ASTNode) parameters.get(1));
-			
-			SingleVariableDeclaration newParam1= createNewParam(ast, "m1");
-			rewrite.markAsReplaced((ASTNode) parameters.get(2), newParam1);
-						
-			SingleVariableDeclaration newParam2= createNewParam(ast, "m2");
-			parameters.add(0, newParam2);
-			rewrite.markAsInserted(newParam2);
-
-
-			List thrownExceptions= methodDecl.thrownExceptions();
-			assertTrue("must be 1 thrown exceptions", thrownExceptions.size() == 1);
-			
-			rewrite.markAsRemoved((ASTNode) thrownExceptions.get(0));
-						
-			Name newThrownException2= ast.newSimpleName("ArrayStoreException");
-			thrownExceptions.add(newThrownException2);
-			rewrite.markAsInserted(newThrownException2);
-		}				
-
-
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public abstract class E {\n");
-		buf.append("    public E(float m) throws InterruptedException, ArrayStoreException {}\n");
-		buf.append("    public void gee(float m1, float m2) throws InterruptedException, ArrayStoreException {}\n");
-		buf.append("    public void hee(float m2, float m1) throws ArrayStoreException {}\n");
-		buf.append("    public void iee(int p1, int p2, int p3) throws IllegalArgumentException, IllegalAccessException {}\n");
-		buf.append("    public void jee(int p1, int p2, int p3) throws IllegalArgumentException, IllegalAccessException {}\n");
-		buf.append("    public abstract void kee(int p1, int p2, int p3) throws IllegalArgumentException, IllegalAccessException, SecurityException;\n");
-		buf.append("    public abstract void lee(int p1, int p2, int p3) throws IllegalArgumentException, IllegalAccessException, SecurityException;\n");
-		buf.append("}\n");	
-			
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-	public void testMethodBody() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public abstract class E {\n");
-		buf.append("    public E(int p1, int p2, int p3) {}\n");
-		buf.append("    public void gee(int p1, int p2, int p3) throws IllegalArgumentException {}\n");
-		buf.append("    public void hee(int p1, int p2, int p3) throws IllegalArgumentException {}\n");
-		buf.append("    public void iee(int p1, int p2, int p3) throws IllegalArgumentException, IllegalAccessException {}\n");
-		buf.append("    public void jee(int p1, int p2, int p3) throws IllegalArgumentException, IllegalAccessException {}\n");
-		buf.append("    public abstract void kee(int p1, int p2, int p3) throws IllegalArgumentException, IllegalAccessException, SecurityException;\n");
-		buf.append("    public abstract void lee(int p1, int p2, int p3) throws IllegalArgumentException, IllegalAccessException, SecurityException;\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);	
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		AST ast= astRoot.getAST();
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		
-		{ // replace block
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "E");
-			
-			Block body= methodDecl.getBody();
-			assertTrue("No body: E", body != null);
-			
-			Block newBlock= ast.newBlock();
-
-			rewrite.markAsReplaced(body, newBlock);
-		}
-		{ // delete block & set abstract
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "gee");
-			
-			// change flags
-			MethodDeclaration modifiedNode= ast.newMethodDeclaration();
-			modifiedNode.setConstructor(methodDecl.isConstructor()); // no change
-			modifiedNode.setExtraDimensions(methodDecl.getExtraDimensions()); // no change
-			modifiedNode.setModifiers(Modifier.PUBLIC | Modifier.ABSTRACT);
-			rewrite.markAsModified(methodDecl, modifiedNode);					
-			
-			Block body= methodDecl.getBody();
-			assertTrue("No body: gee", body != null);
-
-			rewrite.markAsRemoved(body);
-		}
-		{ // insert block & set to private
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "kee");
-			
-			// change flags
-			MethodDeclaration modifiedNode= ast.newMethodDeclaration();
-			modifiedNode.setConstructor(methodDecl.isConstructor()); // no change
-			modifiedNode.setExtraDimensions(methodDecl.getExtraDimensions()); // no change
-			modifiedNode.setModifiers(Modifier.PRIVATE);
-			rewrite.markAsModified(methodDecl, modifiedNode);				
-			
-			Block body= methodDecl.getBody();
-			assertTrue("Has body", body == null);
-			
-			Block newBlock= ast.newBlock();
-			methodDecl.setBody(newBlock);
-
-			rewrite.markAsInserted(newBlock);
-		}		
-
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public abstract class E {\n");
-		buf.append("    public E(int p1, int p2, int p3) {\n");
-		buf.append("    }\n");
-		buf.append("    public abstract void gee(int p1, int p2, int p3) throws IllegalArgumentException ;\n");
-		buf.append("    public void hee(int p1, int p2, int p3) throws IllegalArgumentException {}\n");
-		buf.append("    public void iee(int p1, int p2, int p3) throws IllegalArgumentException, IllegalAccessException {}\n");
-		buf.append("    public void jee(int p1, int p2, int p3) throws IllegalArgumentException, IllegalAccessException {}\n");
-		buf.append("    private void kee(int p1, int p2, int p3) throws IllegalArgumentException, IllegalAccessException, SecurityException {\n");
-		buf.append("    }\n");
-		buf.append("    public abstract void lee(int p1, int p2, int p3) throws IllegalArgumentException, IllegalAccessException, SecurityException;\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-	public void testMethodDeclarationExtraDimensions() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public abstract class E {\n");
-		buf.append("    public Object foo1() { return null; }\n");
-		buf.append("    public Object foo2() throws IllegalArgumentException { return null; }\n");
-		buf.append("    public Object foo3()[][] { return null; }\n");
-		buf.append("    public Object foo4()[][] throws IllegalArgumentException { return null; }\n");
-		buf.append("    public Object foo5()[][] { return null; }\n");
-		buf.append("    public Object foo6(int i)[][] throws IllegalArgumentException { return null; }\n");		
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);	
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		AST ast= astRoot.getAST();
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		
-		{ // add extra dim, add throws
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "foo1");
-			
-			MethodDeclaration modifiedNode= ast.newMethodDeclaration();
-			modifiedNode.setConstructor(methodDecl.isConstructor()); // no change
-			modifiedNode.setModifiers(methodDecl.getModifiers()); // no change
-			modifiedNode.setExtraDimensions(1); 
-			rewrite.markAsModified(methodDecl, modifiedNode);
-			
-			Name newThrownException2= ast.newSimpleName("ArrayStoreException");
-			methodDecl.thrownExceptions().add(newThrownException2);
-			rewrite.markAsInserted(newThrownException2);			
-		}
-		{ // add extra dim, remove throws
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "foo2");
-			
-			MethodDeclaration modifiedNode= ast.newMethodDeclaration();
-			modifiedNode.setConstructor(methodDecl.isConstructor()); // no change
-			modifiedNode.setModifiers(methodDecl.getModifiers()); // no change			
-			modifiedNode.setExtraDimensions(1); 
-			rewrite.markAsModified(methodDecl, modifiedNode);
-			
-			rewrite.markAsRemoved((ASTNode) methodDecl.thrownExceptions().get(0));			
-		}		
-		{ // remove extra dim, add throws
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "foo3");
-			
-			MethodDeclaration modifiedNode= ast.newMethodDeclaration();
-			modifiedNode.setConstructor(methodDecl.isConstructor()); // no change
-			modifiedNode.setModifiers(methodDecl.getModifiers()); // no change
-			modifiedNode.setExtraDimensions(1); 
-			rewrite.markAsModified(methodDecl, modifiedNode);
-			
-			Name newThrownException2= ast.newSimpleName("ArrayStoreException");
-			methodDecl.thrownExceptions().add(newThrownException2);
-			rewrite.markAsInserted(newThrownException2);			
-		}
-		{ // add extra dim, remove throws
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "foo4");
-			
-			MethodDeclaration modifiedNode= ast.newMethodDeclaration();
-			modifiedNode.setConstructor(methodDecl.isConstructor()); // no change
-			modifiedNode.setModifiers(methodDecl.getModifiers()); // no change			
-			modifiedNode.setExtraDimensions(1); 
-			rewrite.markAsModified(methodDecl, modifiedNode);
-			
-			rewrite.markAsRemoved((ASTNode) methodDecl.thrownExceptions().get(0));			
-		}
-		{ // add params, add extra dim, add throws
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "foo5");
-			
-			SingleVariableDeclaration newParam1= createNewParam(ast, "m1");
-			methodDecl.parameters().add(newParam1);
-			rewrite.markAsInserted(newParam1);						
-			
-			MethodDeclaration modifiedNode= ast.newMethodDeclaration();
-			modifiedNode.setConstructor(methodDecl.isConstructor()); // no change
-			modifiedNode.setModifiers(methodDecl.getModifiers()); // no change
-			modifiedNode.setExtraDimensions(4); 
-			rewrite.markAsModified(methodDecl, modifiedNode);
-			
-			Name newThrownException2= ast.newSimpleName("ArrayStoreException");
-			methodDecl.thrownExceptions().add(newThrownException2);
-			rewrite.markAsInserted(newThrownException2);			
-		}
-		{ // remove params, add extra dim, remove throws
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "foo6");
-			
-			rewrite.markAsRemoved((ASTNode) methodDecl.parameters().get(0));		
-			
-			MethodDeclaration modifiedNode= ast.newMethodDeclaration();
-			modifiedNode.setConstructor(methodDecl.isConstructor()); // no change
-			modifiedNode.setModifiers(methodDecl.getModifiers()); // no change			
-			modifiedNode.setExtraDimensions(4); 
-			rewrite.markAsModified(methodDecl, modifiedNode);
-			
-			rewrite.markAsRemoved((ASTNode) methodDecl.thrownExceptions().get(0));			
-		}			
-		
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public abstract class E {\n");
-		buf.append("    public Object foo1()[] throws ArrayStoreException { return null; }\n");
-		buf.append("    public Object foo2()[] { return null; }\n");
-		buf.append("    public Object foo3()[] throws ArrayStoreException { return null; }\n");
-		buf.append("    public Object foo4()[] { return null; }\n");
-		buf.append("    public Object foo5(float m1)[][][][] throws ArrayStoreException { return null; }\n");
-		buf.append("    public Object foo6()[][][][] { return null; }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-	
-	
-	public void testFieldDeclaration() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class A {\n");
-		buf.append("    int i1= 1;\n");
-		buf.append("    int i2= 1, k2= 2, n2= 3;\n");
-		buf.append("    static final int i3= 1, k3= 2, n3= 3;\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("A.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "A");
-		
-		FieldDeclaration[] fieldDeclarations= type.getFields();
-		assertTrue("Number of fieldDeclarations not 3", fieldDeclarations.length == 3);
-		{	// add modifier, change type, add fragment
-			FieldDeclaration decl= fieldDeclarations[0];
-			
-			// add modifier
-			FieldDeclaration modifiedNode= ast.newFieldDeclaration(ast.newVariableDeclarationFragment());
-			modifiedNode.setModifiers(Modifier.FINAL);
-			
-			rewrite.markAsModified(decl, modifiedNode);
-			
-			PrimitiveType newType= ast.newPrimitiveType(PrimitiveType.BOOLEAN);
-			rewrite.markAsReplaced(decl.getType(), newType);
-			
-			List fragments= decl.fragments();
-			
-			VariableDeclarationFragment frag=	ast.newVariableDeclarationFragment();
-			frag.setName(ast.newSimpleName("k1"));
-			frag.setInitializer(null);
-			
-			rewrite.markAsInserted(frag);
-			
-			fragments.add(frag);
-		}
-		{	// add modifiers, remove first two fragments, replace last
-			FieldDeclaration decl= fieldDeclarations[1];
-			
-			// add modifier
-			FieldDeclaration modifiedNode= ast.newFieldDeclaration(ast.newVariableDeclarationFragment());
-			modifiedNode.setModifiers(Modifier.FINAL | Modifier.STATIC | Modifier.TRANSIENT);
-			
-			rewrite.markAsModified(decl, modifiedNode);
-			
-			List fragments= decl.fragments();
-			assertTrue("Number of fragments not 3", fragments.size() == 3);
-			
-			rewrite.markAsRemoved((ASTNode) fragments.get(0));
-			rewrite.markAsRemoved((ASTNode) fragments.get(1));
-			
-			VariableDeclarationFragment frag=	ast.newVariableDeclarationFragment();
-			frag.setName(ast.newSimpleName("k2"));
-			frag.setInitializer(null);
-			
-			rewrite.markAsReplaced((ASTNode) fragments.get(2), frag);
-		}
-		{	// remove modifiers
-			FieldDeclaration decl= fieldDeclarations[2];
-			
-			// add modifier
-			FieldDeclaration modifiedNode= ast.newFieldDeclaration(ast.newVariableDeclarationFragment());
-			modifiedNode.setModifiers(0);
-			
-			rewrite.markAsModified(decl, modifiedNode);
-		}
-				
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class A {\n");
-		buf.append("    final boolean i1= 1, k1;\n");
-		buf.append("    static final transient int k2;\n");
-		buf.append("    int i3= 1, k3= 2, n3= 3;\n");
-		buf.append("}\n");	
-		
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-	public void testInitializer() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class A {\n");
-		buf.append("    {\n");
-		buf.append("        foo();\n");
-		buf.append("    }\n");
-		buf.append("    static {\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("A.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "A");
-		
-		List declarations= type.bodyDeclarations();
-		assertTrue("Number of fieldDeclarations not 2", declarations.size() == 2);
-		{	// change modifier, replace body
-			Initializer initializer= (Initializer) declarations.get(0);
-			
-			// add modifier
-			Initializer modifiedNode= ast.newInitializer();
-			modifiedNode.setModifiers(Modifier.STATIC);
-			
-			rewrite.markAsModified(initializer, modifiedNode);
-			
-			
-			Block block= ast.newBlock();
-			block.statements().add(ast.newReturnStatement());
-			
-			rewrite.markAsReplaced(initializer.getBody(), block);
-		}
-		{	// change modifier
-			Initializer initializer= (Initializer) declarations.get(1);
-			
-			// remove modifier
-			Initializer modifiedNode= ast.newInitializer();
-			modifiedNode.setModifiers(0);
-			
-			rewrite.markAsModified(initializer, modifiedNode);
-		}
-				
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class A {\n");
-		buf.append("    static {\n");
-		buf.append("        return;\n");
-		buf.append("    }\n");
-		buf.append("    {\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-	
-	public void testMethodDeclarationParamShuffel() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public abstract class E {\n");
-		buf.append("    public Object foo1(int i, boolean b) { return null; }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);	
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		AST ast= astRoot.getAST();
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		
-		{ // add extra dim, add throws
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "foo1");
-			
-			List params= methodDecl.parameters();
-			
-			SingleVariableDeclaration first= (SingleVariableDeclaration) params.get(0);
-			SingleVariableDeclaration second= (SingleVariableDeclaration) params.get(1);
-			rewrite.markAsReplaced(first.getName(), ast.newSimpleName("x"));
-			rewrite.markAsReplaced(second.getName(), ast.newSimpleName("y"));
-				
-			ASTNode copy1= rewrite.createCopy(first);
-			ASTNode copy2= rewrite.createCopy(second);
-			
-			rewrite.markAsReplaced(first, copy2);
-			rewrite.markAsReplaced(second, copy1);
-			
-		}
-	
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public abstract class E {\n");
-		buf.append("    public Object foo1(boolean y, int x) { return null; }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}	
-	
-	
-}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/astrewrite/ASTRewritingMoveCodeTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/astrewrite/ASTRewritingMoveCodeTest.java
deleted file mode 100644
index 0490632..0000000
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/astrewrite/ASTRewritingMoveCodeTest.java
+++ /dev/null
@@ -1,783 +0,0 @@
-package org.eclipse.jdt.ui.tests.astrewrite;
-
-import java.util.Hashtable;
-import java.util.List;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.dom.AST;
-import org.eclipse.jdt.core.dom.ASTNode;
-import org.eclipse.jdt.core.dom.Block;
-import org.eclipse.jdt.core.dom.CompilationUnit;
-import org.eclipse.jdt.core.dom.ExpressionStatement;
-import org.eclipse.jdt.core.dom.ForStatement;
-import org.eclipse.jdt.core.dom.IfStatement;
-import org.eclipse.jdt.core.dom.MethodDeclaration;
-import org.eclipse.jdt.core.dom.MethodInvocation;
-import org.eclipse.jdt.core.dom.ReturnStatement;
-import org.eclipse.jdt.core.dom.Statement;
-import org.eclipse.jdt.core.dom.TypeDeclaration;
-import org.eclipse.jdt.core.dom.WhileStatement;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-import org.eclipse.jdt.testplugin.TestPluginLauncher;
-
-import org.eclipse.jdt.internal.corext.dom.ASTRewrite;
-import org.eclipse.jdt.internal.ui.text.correction.ASTRewriteCorrectionProposal;
-
-public class ASTRewritingMoveCodeTest extends ASTRewritingTest {
-	
-	private static final Class THIS= ASTRewritingMoveCodeTest.class;
-	
-	private IJavaProject fJProject1;
-	private IPackageFragmentRoot fSourceFolder;
-
-	public ASTRewritingMoveCodeTest(String name) {
-		super(name);
-	}
-
-	public static void main(String[] args) {
-		TestPluginLauncher.run(TestPluginLauncher.getLocationFromProperties(), THIS, args);
-	}
-
-
-	public static Test suite() {
-		if (false) {
-			return new TestSuite(THIS);
-		} else {
-			TestSuite suite= new TestSuite();
-			suite.addTest(new ASTRewritingMoveCodeTest("testMoveForStatementToForBlock"));
-			return suite;
-		}
-	}
-
-
-	protected void setUp() throws Exception {
-		Hashtable options= JavaCore.getOptions();
-		options.put(JavaCore.FORMATTER_TAB_CHAR, JavaCore.SPACE);
-		options.put(JavaCore.FORMATTER_TAB_SIZE, "4");
-		JavaCore.setOptions(options);			
-		
-		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		assertTrue("rt not found", JavaProjectHelper.addRTJar(fJProject1) != null);
-
-		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
-	}
-
-
-	protected void tearDown() throws Exception {
-		JavaProjectHelper.delete(fJProject1);
-	}
-	
-
-	
-	public void testMoveDeclSameLevel() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E extends Exception implements Runnable, Serializable {\n");
-		buf.append("    public static class EInner {\n");
-		buf.append("        public void xee() {\n");
-		buf.append("            /* does nothing */\n");
-		buf.append("        }\n");
-		buf.append("    }\n");		
-		buf.append("    private /* inner comment */ int i;\n");
-		buf.append("    private int k;\n");
-		buf.append("    public E() {\n");
-		buf.append("        super();\n");
-		buf.append("        i= 0;\n");
-		buf.append("        k= 9;\n");
-		buf.append("        if (System.out == null) {\n");
-		buf.append("            gee(); // cool\n");
-		buf.append("        }\n");
-		buf.append("    }\n");
-		buf.append("    public void gee() {\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		buf.append("interface G {\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);	
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		AST ast= astRoot.getAST();
-		assertTrue("Code has errors", (astRoot.getFlags() & CompilationUnit.MALFORMED) == 0);
-		
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		
-		{ // move inner type to the end of the type & move, copy statements from constructor to method
-			
-			List members= type.bodyDeclarations();
-			assertTrue("Has declarations", !members.isEmpty());
-			
-			assertTrue("Cannot find inner class", members.get(0) instanceof TypeDeclaration);
-			TypeDeclaration innerType= (TypeDeclaration) members.get(0);
-			
-			rewrite.markAsRemoved(innerType);
-			ASTNode movedNode= rewrite.createCopy(innerType);
-			members.add(movedNode);
-			rewrite.markAsInserted(movedNode);
-			
-			Statement toMove;
-			Statement toCopy;
-			{
-				MethodDeclaration methodDecl= findMethodDeclaration(type, "E");
-				assertTrue("Cannot find Constructor E", methodDecl != null);
-				Block body= methodDecl.getBody();
-				assertTrue("No body", body != null);
-				List statements= body.statements();
-				assertTrue("Not expected number of statements", statements.size() == 4);
-				
-				toMove= (Statement) statements.get(1);
-				toCopy= (Statement) statements.get(3);
-				
-				rewrite.markAsRemoved(toMove);
-			}
-			{
-				MethodDeclaration methodDecl= findMethodDeclaration(type, "gee");
-				assertTrue("Cannot find gee()", methodDecl != null);
-				Block body= methodDecl.getBody();
-				assertTrue("No body", body != null);
-				List statements= body.statements();
-				assertTrue("Has statements", statements.isEmpty());
-				
-				ASTNode insertNodeForMove= rewrite.createCopy(toMove);
-				ASTNode insertNodeForCopy= rewrite.createCopy(toCopy);
-				
-				statements.add(insertNodeForCopy);
-				statements.add(insertNodeForMove);
-				
-				rewrite.markAsInserted(insertNodeForMove);
-				rewrite.markAsInserted(insertNodeForCopy);
-			}	
-		}			
-					
-
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E extends Exception implements Runnable, Serializable {\n");
-		buf.append("    private /* inner comment */ int i;\n");
-		buf.append("    private int k;\n");
-		buf.append("    public E() {\n");
-		buf.append("        super();\n");		
-		buf.append("        k= 9;\n");
-		buf.append("        if (System.out == null) {\n");
-		buf.append("            gee(); // cool\n");
-		buf.append("        }\n");
-		buf.append("    }\n");
-		buf.append("    public void gee() {\n");
-		buf.append("        if (System.out == null) {\n");
-		buf.append("            gee(); // cool\n");
-		buf.append("        }\n");		
-		buf.append("        i= 0;\n");
-		buf.append("    }\n");
-		buf.append("    public static class EInner {\n");
-		buf.append("        public void xee() {\n");
-		buf.append("            /* does nothing */\n");
-		buf.append("        }\n");
-		buf.append("    }\n");			
-		buf.append("}\n");
-		buf.append("interface G {\n");
-		buf.append("}\n");		
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-
-	public void testMoveDeclDifferentLevel() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E extends Exception implements Runnable, Serializable {\n");
-		buf.append("    public static class EInner {\n");
-		buf.append("        public void xee() {\n");
-		buf.append("            /* does nothing */\n");
-		buf.append("        }\n");
-		buf.append("    }\n");		
-		buf.append("    private /* inner comment */ int i;\n");
-		buf.append("    private int k;\n");
-		buf.append("    public E() {\n");
-		buf.append("        super();\n");
-		buf.append("        i= 0;\n");
-		buf.append("        k= 9;\n");
-		buf.append("        if (System.out == null) {\n");
-		buf.append("            gee(); // cool\n");
-		buf.append("        }\n");
-		buf.append("    }\n");
-		buf.append("    public void gee() {\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		buf.append("interface G {\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		AST ast= astRoot.getAST();
-		assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		
-		{
-			List members= type.bodyDeclarations();
-			assertTrue("Has declarations", !members.isEmpty());
-			
-			assertTrue("Cannot find inner class", members.get(0) instanceof TypeDeclaration);
-			TypeDeclaration innerType= (TypeDeclaration) members.get(0);
-			
-			List innerMembers= innerType.bodyDeclarations();
-			assertTrue("Not expected number of inner members", innerMembers.size() == 1);
-			
-			{ // move outer as inner of inner.
-				TypeDeclaration outerType= findTypeDeclaration(astRoot, "G");
-				assertTrue("G not found", outerType != null);
-				
-				rewrite.markAsRemoved(outerType);
-				
-				ASTNode insertNodeForCopy= rewrite.createCopy(outerType);
-				innerMembers.add(insertNodeForCopy);
-				rewrite.markAsInserted(insertNodeForCopy);
-				
-			}
-			{ // copy method of inner to main type
-				MethodDeclaration methodDecl= (MethodDeclaration) innerMembers.get(0);
-				ASTNode insertNodeForMove= rewrite.createCopy(methodDecl);
-				members.add(insertNodeForMove);
-				rewrite.markAsInserted(insertNodeForMove);
-			}
-			{ // nest body of constructor in a while statement
-				MethodDeclaration methodDecl= findMethodDeclaration(type, "E");
-				assertTrue("Cannot find Constructor E", methodDecl != null);
-
-				Block body= methodDecl.getBody();
-
-				WhileStatement whileStatement= ast.newWhileStatement();
-				whileStatement.setExpression(ast.newBooleanLiteral(true));
-				
-				Statement insertNodeForCopy= (Statement) rewrite.createCopy(body);
-				
-				whileStatement.setBody(insertNodeForCopy); // set existing body
-
-				Block newBody= ast.newBlock();
-				List newStatements= newBody.statements();				
-				newStatements.add(whileStatement);
-				
-				rewrite.markAsReplaced(body, newBody);
-			}			
-		}	
-					
-
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E extends Exception implements Runnable, Serializable {\n");
-		buf.append("    public static class EInner {\n");
-		buf.append("        public void xee() {\n");
-		buf.append("            /* does nothing */\n");
-		buf.append("        }\n");			
-		buf.append("        interface G {\n");
-		buf.append("        }\n");				
-		buf.append("    }\n");		
-		buf.append("    private /* inner comment */ int i;\n");
-		buf.append("    private int k;\n");
-		buf.append("    public E() {\n");
-		buf.append("        while (true) {\n");		
-		buf.append("            super();\n");
-		buf.append("            i= 0;\n");
-		buf.append("            k= 9;\n");
-		buf.append("            if (System.out == null) {\n");
-		buf.append("                gee(); // cool\n");
-		buf.append("            }\n");
-		buf.append("        }\n");		
-		buf.append("    }\n");
-		buf.append("    public void gee() {\n");
-		buf.append("    }\n");
-		buf.append("    public void xee() {\n");
-		buf.append("        /* does nothing */\n");
-		buf.append("    }\n");		
-		buf.append("}\n");
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-	public void testMoveStatements() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E extends Exception implements Runnable, Serializable {\n");
-		buf.append("    public static class EInner {\n");
-		buf.append("        public void xee() {\n");
-		buf.append("            /* does nothing */\n");
-		buf.append("        }\n");
-		buf.append("    }\n");		
-		buf.append("    private /* inner comment */ int i;\n");
-		buf.append("    private int k;\n");
-		buf.append("    public E() {\n");
-		buf.append("        super();\n");
-		buf.append("        i= 0;\n");
-		buf.append("        k= 9;\n");
-		buf.append("        if (System.out == null) {\n");
-		buf.append("            gee(); // cool\n");
-		buf.append("        }\n");
-		buf.append("    }\n");
-		buf.append("    public void gee() {\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		buf.append("interface G {\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		AST ast= astRoot.getAST();
-		assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		
-		{ // move first statments inside an ifstatement, move second statment inside a new while statement
-		   // that is in the ifstatement
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "E");
-			assertTrue("Cannot find Constructor E", methodDecl != null);
-
-			Block body= methodDecl.getBody();
-			List statements= body.statements();
-			
-			assertTrue("Cannot find if statement", statements.get(3) instanceof IfStatement);
-			
-			IfStatement ifStatement= (IfStatement) statements.get(3);
-			
-			Statement insertNodeForCopy1= (Statement) rewrite.createCopy((ASTNode) statements.get(1));
-			Statement insertNodeForCopy2= (Statement) rewrite.createCopy((ASTNode) statements.get(2));
-			
-			Block whileBody= ast.newBlock();
-			
-			WhileStatement whileStatement= ast.newWhileStatement();
-			whileStatement.setExpression(ast.newBooleanLiteral(true));
-			whileStatement.setBody(whileBody);
-			
-			List whileBodyStatements= whileBody.statements();
-			whileBodyStatements.add(insertNodeForCopy2);
-			
-			
-			assertTrue("if statement body not a block", ifStatement.getThenStatement() instanceof Block);
-			
-			List ifBodyStatements= ((Block)ifStatement.getThenStatement()).statements();
-			
-			ifBodyStatements.add(0, whileStatement);
-			ifBodyStatements.add(1, insertNodeForCopy1);
-			
-			rewrite.markAsInserted(whileStatement);
-			rewrite.markAsInserted(insertNodeForCopy1);
-			
-			rewrite.markAsRemoved((ASTNode) statements.get(1));
-			rewrite.markAsRemoved((ASTNode) statements.get(2));
-		}	
-					
-
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E extends Exception implements Runnable, Serializable {\n");
-		buf.append("    public static class EInner {\n");
-		buf.append("        public void xee() {\n");
-		buf.append("            /* does nothing */\n");
-		buf.append("        }\n");
-		buf.append("    }\n");		
-		buf.append("    private /* inner comment */ int i;\n");
-		buf.append("    private int k;\n");
-		buf.append("    public E() {\n");
-		buf.append("        super();\n");
-		buf.append("        if (System.out == null) {\n");
-		buf.append("            while (true) {\n");
-		buf.append("                k= 9;\n");
-		buf.append("            }\n");		
-		buf.append("            i= 0;\n");
-		buf.append("            gee(); // cool\n");
-		buf.append("        }\n");
-		buf.append("    }\n");
-		buf.append("    public void gee() {\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		buf.append("interface G {\n");
-		buf.append("}\n");
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-	public void tesCopyFromDeleted() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        if (System.out == null) {\n");
-		buf.append("            gee(); // cool\n");
-		buf.append("        }\n");
-		buf.append("    }\n");
-		buf.append("    public void goo() {\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		AST ast= astRoot.getAST();
-		assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		
-		{ // delete method foo, but copy if statement to goo
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-			assertTrue("Cannot find foo", methodDecl != null);
-			
-			rewrite.markAsRemoved(methodDecl);
-			
-			Block body= methodDecl.getBody();
-			List statements= body.statements();
-			assertTrue("Cannot find if statement", statements.size() == 1);
-			
-			ASTNode placeHolder= rewrite.createCopy((ASTNode) statements.get(0));
-			
-			
-			MethodDeclaration methodGoo= findMethodDeclaration(type, "goo");
-			assertTrue("Cannot find goo", methodGoo != null);
-			
-			rewrite.markAsInserted(placeHolder);
-			
-			methodGoo.getBody().statements().add(placeHolder);
-		}	
-					
-
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void goo() {\n");
-		buf.append("        if (System.out == null) {\n");
-		buf.append("            gee(); // cool\n");
-		buf.append("        }\n");		
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-	public void testChangesInMove() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        if (System.out == null) {\n");
-		buf.append("            gee( /* cool */);\n");
-		buf.append("        }\n");
-		buf.append("    }\n");
-		buf.append("    public void goo() {\n");
-		buf.append("        x= 1;\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		AST ast= astRoot.getAST();
-		assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		
-		{ // replace statement in goo with moved ifStatement from foo. add a node to if statement
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-			assertTrue("Cannot find foo", methodDecl != null);
-			
-			List fooStatements= methodDecl.getBody().statements();
-			assertTrue("Cannot find if statement", fooStatements.size() == 1);
-			
-			// prepare ifStatement to move
-			IfStatement ifStatement= (IfStatement) fooStatements.get(0);
-			rewrite.markAsRemoved(ifStatement);
-			
-			ASTNode placeHolder= rewrite.createCopy(ifStatement);
-			
-			// add return statement to ifStatement block
-			ReturnStatement returnStatement= ast.newReturnStatement();
-			rewrite.markAsInserted(returnStatement);
-
-			Block then= (Block) ifStatement.getThenStatement();
-			then.statements().add(returnStatement);
-	
-			// replace statement in goo with moved ifStatement
-			MethodDeclaration methodGoo= findMethodDeclaration(type, "goo");
-			assertTrue("Cannot find goo", methodGoo != null);
-			
-			List gooStatements= methodGoo.getBody().statements();
-			assertTrue("Cannot find statement in goo", gooStatements.size() == 1);
-			
-			rewrite.markAsReplaced((ASTNode) gooStatements.get(0), placeHolder);
-		}	
-					
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("    }\n");
-		buf.append("    public void goo() {\n");
-		buf.append("        if (System.out == null) {\n");
-		buf.append("            gee( /* cool */);\n");
-		buf.append("            return;\n");
-		buf.append("        }\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-
-	public void testSwap() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        goo(xoo(/*hello*/), k * 2);\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		AST ast= astRoot.getAST();
-		assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		
-		{ // swap the two arguments
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-			assertTrue("Cannot find foo", methodDecl != null);
-			
-			List fooStatements= methodDecl.getBody().statements();
-			assertTrue("More statements than expected", fooStatements.size() == 1);
-			
-			ExpressionStatement statement= (ExpressionStatement) fooStatements.get(0);
-			MethodInvocation invocation= (MethodInvocation) statement.getExpression();
-			
-			List arguments= invocation.arguments();
-			assertTrue("More arguments than expected", arguments.size() == 2);
-			
-			ASTNode arg0= (ASTNode) arguments.get(0);
-			ASTNode arg1= (ASTNode) arguments.get(1);
-			
-			ASTNode placeHolder0= rewrite.createCopy(arg0);
-			ASTNode placeHolder1= rewrite.createCopy(arg1);
-			
-			rewrite.markAsReplaced(arg0, placeHolder1);
-			rewrite.markAsReplaced(arg1, placeHolder0);
-		}	
-					
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        goo(k * 2, xoo(/*hello*/));\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-	public void testCopyRangeAndInsert() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        if (i == 0) {\n");
-		buf.append("            foo();\n");
-		buf.append("            i++; // comment\n");
-		buf.append("            i++;\n");
-		buf.append("        }\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		AST ast= astRoot.getAST();
-		assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		{
-			List statements= methodDecl.getBody().statements();
-			IfStatement ifStatement= (IfStatement) statements.get(0);
-			List ifStatementBody= ((Block) ifStatement.getThenStatement()).statements();
-			ASTNode first= (ASTNode) ifStatementBody.get(0);
-			ASTNode last= (ASTNode) ifStatementBody.get(ifStatementBody.size() - 1);
-			ASTNode placeholder= rewrite.createCopy(first, last);
-			
-			rewrite.markAsInserted(placeholder);
-			
-			statements.add(placeholder);
-		}	
-					
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        if (i == 0) {\n");
-		buf.append("            foo();\n");
-		buf.append("            i++; // comment\n");
-		buf.append("            i++;\n");
-		buf.append("        }\n");
-		buf.append("        foo();\n");
-		buf.append("        i++; // comment\n");
-		buf.append("        i++;\n");		
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}	
-	
-	public void testCopyRangeAndReplace() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        if (i == 0) {\n");
-		buf.append("            foo();\n");
-		buf.append("            i++; // comment\n");
-		buf.append("            i++;\n");
-		buf.append("        }\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		AST ast= astRoot.getAST();
-		assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		{
-			List statements= methodDecl.getBody().statements();
-			IfStatement ifStatement= (IfStatement) statements.get(0);
-			List ifStatementBody= ((Block) ifStatement.getThenStatement()).statements();
-			ASTNode first= (ASTNode) ifStatementBody.get(0);
-			ASTNode last= (ASTNode) ifStatementBody.get(ifStatementBody.size() - 1);
-			ASTNode placeholder= rewrite.createCopy(first, last);
-			
-			ReturnStatement returnStatement= ast.newReturnStatement();
-			rewrite.markAsReplaced(last, returnStatement);
-			
-			rewrite.markAsReplaced(ifStatement, placeholder);
-		}	
-					
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        foo();\n");
-		buf.append("        i++; // comment\n");
-		buf.append("        return;\n");		
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-	public void testMoveForStatementToForBlock() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        for(int i= 0; i < 8; i++)\n");
-		buf.append("            foo();\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		AST ast= astRoot.getAST();
-		assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		{
-			List statements= methodDecl.getBody().statements();
-			ForStatement forStatement= (ForStatement) statements.get(0);
-			Statement body= forStatement.getBody();
-			
-			ASTNode placeholder= rewrite.createCopy(body);
-			
-			Block newBody= ast.newBlock();
-			newBody.statements().add(placeholder);
-			
-			rewrite.markAsReplaced(body, newBody);
-		}	
-					
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        for(int i= 0; i < 8; i++)\n");
-		buf.append("            {\n");
-		buf.append("                foo();\n");
-		buf.append("            }\n");		
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-	
-	
-}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/astrewrite/ASTRewritingStatementsTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/astrewrite/ASTRewritingStatementsTest.java
deleted file mode 100644
index 311250e..0000000
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/astrewrite/ASTRewritingStatementsTest.java
+++ /dev/null
@@ -1,1830 +0,0 @@
-package org.eclipse.jdt.ui.tests.astrewrite;
-
-import java.util.Hashtable;
-import java.util.List;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.dom.*;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-import org.eclipse.jdt.testplugin.TestPluginLauncher;
-
-import org.eclipse.jdt.internal.corext.dom.ASTRewrite;
-import org.eclipse.jdt.internal.ui.text.correction.ASTResolving;
-import org.eclipse.jdt.internal.ui.text.correction.ASTRewriteCorrectionProposal;
-
-public class ASTRewritingStatementsTest extends ASTRewritingTest {
-
-	private final boolean BUG_23259= false;
-	
-	private static final Class THIS= ASTRewritingStatementsTest.class;
-	
-	private IJavaProject fJProject1;
-	private IPackageFragmentRoot fSourceFolder;
-
-	public ASTRewritingStatementsTest(String name) {
-		super(name);
-	}
-
-	public static void main(String[] args) {
-		TestPluginLauncher.run(TestPluginLauncher.getLocationFromProperties(), THIS, args);
-	}
-
-
-	public static Test suite() {
-		if (true) {
-			return new TestSuite(THIS);
-		} else {
-			TestSuite suite= new TestSuite();
-			suite.addTest(new ASTRewritingStatementsTest("testRemove"));
-			return suite;
-		}
-	}
-
-
-	protected void setUp() throws Exception {
-		Hashtable options= JavaCore.getOptions();
-		options.put(JavaCore.FORMATTER_TAB_CHAR, JavaCore.SPACE);
-		options.put(JavaCore.FORMATTER_TAB_SIZE, "4");
-		JavaCore.setOptions(options);			
-		
-		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		assertTrue("rt not found", JavaProjectHelper.addRTJar(fJProject1) != null);
-
-		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
-	}
-
-	protected void tearDown() throws Exception {
-		JavaProjectHelper.delete(fJProject1);
-	}
-	
-	public void testAdd() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		{	/* foo(): append a return statement */
-			StringBuffer buf= new StringBuffer();
-			buf.append("package test1;\n");
-			buf.append("public class C {\n");
-			buf.append("    public Object foo() {\n");
-			buf.append("        if (this.equals(new Object())) {\n");
-			buf.append("            toString();\n");
-			buf.append("        }\n");
-			buf.append("    }\n");
-			buf.append("}\n");	
-			ICompilationUnit cu= pack1.createCompilationUnit("C.java", buf.toString(), false, null);
-		
-			CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-			ASTRewrite rewrite= new ASTRewrite(astRoot);
-			TypeDeclaration type= findTypeDeclaration(astRoot, "C");
-			
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-			Block block= methodDecl.getBody();
-			assertTrue("No block" , block != null);	
-			
-			List statements= block.statements();
-			ReturnStatement returnStatement= block.getAST().newReturnStatement();
-			returnStatement.setExpression(ASTResolving.getInitExpression(methodDecl.getReturnType()));
-			statements.add(returnStatement);
-			rewrite.markAsInserted(returnStatement);
-			
-			ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-			proposal.getCompilationUnitChange().setSave(true);
-			
-			proposal.apply(null);
-			
-			buf= new StringBuffer();
-			buf.append("package test1;\n");
-			buf.append("public class C {\n");
-			buf.append("    public Object foo() {\n");
-			buf.append("        if (this.equals(new Object())) {\n");
-			buf.append("            toString();\n");
-			buf.append("        }\n");
-			buf.append("        return null;\n");
-			buf.append("    }\n");
-			buf.append("}\n");
-			
-			assertEqualString(cu.getSource(), buf.toString());
-			clearRewrite(rewrite);
-		}
-		{	/* hoo(): return; -> return false;  */
-			StringBuffer buf= new StringBuffer();
-			buf.append("package test1;\n");
-			buf.append("public class D {\n");
-			buf.append("    public Object goo() {\n");
-			buf.append("        return new Integer(3);\n");
-			buf.append("    }\n");
-			buf.append("    public void hoo(int p1, Object p2) {\n");
-			buf.append("        return;\n");
-			buf.append("    }\n");		
-			buf.append("}\n");	
-			ICompilationUnit cu= pack1.createCompilationUnit("D.java", buf.toString(), false, null);
-			
-			CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-			ASTRewrite rewrite= new ASTRewrite(astRoot);
-			TypeDeclaration type= findTypeDeclaration(astRoot, "D");
-		
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "hoo");
-			Block block= methodDecl.getBody();
-			assertTrue("No block" , block != null);
-			
-			List statements= block.statements();
-			assertTrue("No statements in block", !statements.isEmpty());
-			assertTrue("No ReturnStatement", statements.get(0) instanceof ReturnStatement);
-			
-			ReturnStatement returnStatement= (ReturnStatement) statements.get(0);
-			Expression expr= block.getAST().newBooleanLiteral(false);
-			
-			returnStatement.setExpression(expr);
-			rewrite.markAsInserted(expr);
-			
-			ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-			proposal.getCompilationUnitChange().setSave(true);
-			
-			proposal.apply(null);
-			
-			buf= new StringBuffer();
-			buf.append("package test1;\n");
-			buf.append("public class D {\n");
-			buf.append("    public Object goo() {\n");
-			buf.append("        return new Integer(3);\n");
-			buf.append("    }\n");
-			buf.append("    public void hoo(int p1, Object p2) {\n");
-			buf.append("        return false;\n");
-			buf.append("    }\n");		
-			buf.append("}\n");	
-			
-			assertEqualString(cu.getSource(), buf.toString());			
-			clearRewrite(rewrite);
-		}
-		{  // add after comment 
-			StringBuffer buf= new StringBuffer();
-			buf.append("package test1;\n");
-			buf.append("public class E {\n");
-			buf.append("    public Object goo() {\n");
-			buf.append("        i++; //comment\n");
-			buf.append("        i++; //comment\n");					
-			buf.append("        return new Integer(3);\n");
-			buf.append("    }\n");
-			buf.append("}\n");	
-			ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-			
-			CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-			ASTRewrite rewrite= new ASTRewrite(astRoot);
-			TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-			AST ast= astRoot.getAST();
-		
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "goo");
-			Block block= methodDecl.getBody();
-			assertTrue("No block" , block != null);
-			
-			MethodInvocation invocation1= ast.newMethodInvocation();
-			invocation1.setName(ast.newSimpleName("foo"));
-			ExpressionStatement statement1= ast.newExpressionStatement(invocation1);
-			
-			rewrite.markAsInserted(statement1);
-			
-			MethodInvocation invocation2= ast.newMethodInvocation();
-			invocation2.setName(ast.newSimpleName("foo"));
-			ExpressionStatement statement2= ast.newExpressionStatement(invocation2);
-			
-			rewrite.markAsInserted(statement2);		
-			
-			List statements= methodDecl.getBody().statements();
-			
-			rewrite.markAsRemoved((ASTNode) statements.get(1));
-			
-			statements.add(2, statement2);
-			statements.add(1, statement1);
-			
-			ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-			proposal.getCompilationUnitChange().setSave(true);
-			
-			proposal.apply(null);
-			
-			buf= new StringBuffer();
-			buf.append("package test1;\n");
-			buf.append("public class E {\n");
-			buf.append("    public Object goo() {\n");
-			buf.append("        i++; //comment\n");
-			buf.append("        foo();\n");
-			buf.append("        foo();\n");				
-			buf.append("        return new Integer(3);\n");
-			buf.append("    }\n");
-			buf.append("}\n");	
-			
-			assertEqualString(cu.getSource(), buf.toString());			
-			clearRewrite(rewrite);
-		}		
-		
-	}
-	
-	public void testRemove() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);			
-		{	/* foo():  remove if... */
-			StringBuffer buf= new StringBuffer();
-			buf.append("package test1;\n");
-			buf.append("public class C {\n");
-			buf.append("    public Object foo() {\n");
-			buf.append("        if (this.equals(new Object())) {\n");
-			buf.append("            toString();\n");
-			buf.append("        }\n");
-			buf.append("    }\n");
-			buf.append("}\n");	
-			ICompilationUnit cu= pack1.createCompilationUnit("C.java", buf.toString(), false, null);
-			
-			CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-			ASTRewrite rewrite= new ASTRewrite(astRoot);
-			TypeDeclaration type= findTypeDeclaration(astRoot, "C");
-			
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-			Block block= methodDecl.getBody();
-			assertTrue("No block" , block != null);	
-			
-			List statements= block.statements();
-			assertTrue("No statements in block", !statements.isEmpty());
-			
-			rewrite.markAsRemoved((ASTNode) statements.get(0));
-					
-			ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-			proposal.getCompilationUnitChange().setSave(true);
-			
-			proposal.apply(null);
-			
-			buf= new StringBuffer();
-			buf.append("package test1;\n");
-			buf.append("public class C {\n");
-			buf.append("    public Object foo() {\n");
-			buf.append("    }\n");
-			buf.append("}\n");
-				
-			assertEqualString(cu.getSource(), buf.toString());
-			clearRewrite(rewrite);
-		}
-		{
-			StringBuffer buf= new StringBuffer();
-			buf.append("package test1;\n");
-			buf.append("public class D {\n");
-			buf.append("    public Object goo() {\n");
-			buf.append("        return new Integer(3);\n");
-			buf.append("    }\n");
-			buf.append("    public void hoo(int p1, Object p2) {\n");
-			buf.append("        return;\n");
-			buf.append("    }\n");		
-			buf.append("}\n");	
-			ICompilationUnit cu= pack1.createCompilationUnit("D.java", buf.toString(), false, null);
-			
-			CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-			ASTRewrite rewrite= new ASTRewrite(astRoot);
-			TypeDeclaration type= findTypeDeclaration(astRoot, "D");
-		
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "goo");
-			Block block= methodDecl.getBody();
-			assertTrue("No block" , block != null);
-			
-			List statements= block.statements();
-			assertTrue("No statements in block", !statements.isEmpty());
-			assertTrue("No ReturnStatement", statements.get(0) instanceof ReturnStatement);
-			
-			ReturnStatement returnStatement= (ReturnStatement) statements.get(0);
-			Expression expr= returnStatement.getExpression();
-			rewrite.markAsRemoved(expr);
-			
-			ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-			proposal.getCompilationUnitChange().setSave(true);
-			
-			proposal.apply(null);
-			
-			buf= new StringBuffer();
-			buf.append("package test1;\n");
-			buf.append("public class D {\n");
-			buf.append("    public Object goo() {\n");
-			buf.append("        return;\n");
-			buf.append("    }\n");
-			buf.append("    public void hoo(int p1, Object p2) {\n");
-			buf.append("        return;\n");
-			buf.append("    }\n");		
-			buf.append("}\n");	
-			
-			assertEqualString(cu.getSource(), buf.toString());			
-			clearRewrite(rewrite);
-		}
-		{  // delete 
-			StringBuffer buf= new StringBuffer();
-			buf.append("package test1;\n");
-			buf.append("public class E {\n");
-			buf.append("    public Object goo() {\n");
-			buf.append("        i++; //comment\n");
-			buf.append("        i++; //comment\n");					
-			buf.append("        return new Integer(3);\n");
-			buf.append("    }\n");
-			buf.append("}\n");	
-			ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-			
-			CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-			ASTRewrite rewrite= new ASTRewrite(astRoot);
-			TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "goo");
-			Block block= methodDecl.getBody();
-			assertTrue("No block" , block != null);
-			
-			List statements= methodDecl.getBody().statements();
-			rewrite.markAsRemoved((ASTNode) statements.get(0));
-			rewrite.markAsRemoved((ASTNode) statements.get(1));
-			rewrite.markAsRemoved((ASTNode) statements.get(2));
-			
-			ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-			proposal.getCompilationUnitChange().setSave(true);
-			
-			proposal.apply(null);
-			
-			buf= new StringBuffer();
-			buf.append("package test1;\n");
-			buf.append("public class E {\n");
-			buf.append("    public Object goo() {\n");
-			buf.append("    }\n");
-			buf.append("}\n");	
-			
-			assertEqualString(cu.getSource(), buf.toString());			
-			clearRewrite(rewrite);
-		}
-		
-	}
-	
-	public void testReplace() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);		
-		{	/* foo(): if.. -> return; */
-			StringBuffer buf= new StringBuffer();
-			buf.append("package test1;\n");
-			buf.append("public class C {\n");
-			buf.append("    public Object foo() {\n");
-			buf.append("        if (this.equals(new Object())) {\n");
-			buf.append("            toString();\n");
-			buf.append("        }\n");
-			buf.append("    }\n");
-			buf.append("}\n");	
-			ICompilationUnit cu= pack1.createCompilationUnit("C.java", buf.toString(), false, null);
-			
-			CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-			ASTRewrite rewrite= new ASTRewrite(astRoot);
-			TypeDeclaration type= findTypeDeclaration(astRoot, "C");
-			
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-			Block block= methodDecl.getBody();
-			assertTrue("No block" , block != null);	
-			
-			List statements= block.statements();
-			assertTrue("No statements in block", !statements.isEmpty());
-			
-			ReturnStatement returnStatement= block.getAST().newReturnStatement();
-			rewrite.markAsReplaced((ASTNode) statements.get(0), returnStatement);
-					
-			ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-			proposal.getCompilationUnitChange().setSave(true);
-			
-			proposal.apply(null);
-			
-			buf= new StringBuffer();
-			buf.append("package test1;\n");
-			buf.append("public class C {\n");
-			buf.append("    public Object foo() {\n");
-			buf.append("        return;\n");			
-			buf.append("    }\n");
-			buf.append("}\n");
-				
-			assertEqualString(cu.getSource(), buf.toString());
-			clearRewrite(rewrite);
-		}		
-		{	/* goo(): new Integer(3) -> 'null' */
-			StringBuffer buf= new StringBuffer();
-			buf.append("package test1;\n");
-			buf.append("public class D {\n");
-			buf.append("    public Object goo() {\n");
-			buf.append("        return new Integer(3);\n");
-			buf.append("    }\n");
-			buf.append("    public void hoo(int p1, Object p2) {\n");
-			buf.append("        return;\n");
-			buf.append("    }\n");		
-			buf.append("}\n");	
-			ICompilationUnit cu= pack1.createCompilationUnit("D.java", buf.toString(), false, null);
-			
-			CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-			ASTRewrite rewrite= new ASTRewrite(astRoot);
-			TypeDeclaration type= findTypeDeclaration(astRoot, "D");
-		
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "goo");
-			Block block= methodDecl.getBody();
-			assertTrue("No block" , block != null);
-			
-			List statements= block.statements();
-			assertTrue("No statements in block", !statements.isEmpty());
-			assertTrue("No ReturnStatement", statements.get(0) instanceof ReturnStatement);
-			
-			ReturnStatement returnStatement= (ReturnStatement) statements.get(0);
-			Expression expr= returnStatement.getExpression();
-			Expression modified= ASTResolving.getInitExpression(methodDecl.getReturnType());
-	
-			rewrite.markAsReplaced(expr, modified);
-			
-			ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-			proposal.getCompilationUnitChange().setSave(true);
-			
-			proposal.apply(null);
-			
-			buf= new StringBuffer();
-			buf.append("package test1;\n");
-			buf.append("public class D {\n");
-			buf.append("    public Object goo() {\n");
-			buf.append("        return null;\n");
-			buf.append("    }\n");
-			buf.append("    public void hoo(int p1, Object p2) {\n");
-			buf.append("        return;\n");
-			buf.append("    }\n");		
-			buf.append("}\n");	
-			
-			assertEqualString(cu.getSource(), buf.toString());
-			clearRewrite(rewrite);
-		}
-	}
-	
-	public void testBreakStatement() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        break;\n");
-		buf.append("        break label;\n");
-		buf.append("        break label;\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		List statements= block.statements();
-		assertTrue("Number of statements not 3", statements.size() == 3);
-		{ // insert label
-			BreakStatement statement= (BreakStatement) statements.get(0);
-			assertTrue("Has label", statement.getLabel() == null);
-			
-			SimpleName newLabel= ast.newSimpleName("label2");	
-			statement.setLabel(newLabel);
-			
-			rewrite.markAsInserted(newLabel);
-		}
-		{ // replace label
-			BreakStatement statement= (BreakStatement) statements.get(1);
-			
-			SimpleName label= statement.getLabel();
-			assertTrue("Has no label", label != null);
-			
-			SimpleName newLabel= ast.newSimpleName("label2");	
-
-			rewrite.markAsReplaced(label, newLabel);
-		}
-		{ // remove label
-			BreakStatement statement= (BreakStatement) statements.get(2);
-			
-			SimpleName label= statement.getLabel();
-			assertTrue("Has no label", label != null);
-			
-			rewrite.markAsRemoved(label);
-		}	
-				
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        break label2;\n");
-		buf.append("        break label2;\n");
-		buf.append("        break;\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-	public void testConstructorInvocation() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public E(String e, String f) {\n");
-		buf.append("        this();\n");
-		buf.append("    }\n");
-		buf.append("    public E() {\n");
-		buf.append("        this(\"Hello\", true);\n");
-		buf.append("    }\n");		
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration[] declarations= type.getMethods();
-		assertTrue("Number of statements not 2", declarations.length == 2);			
-
-		{ // add parameters
-			Block block= declarations[0].getBody();
-			List statements= block.statements();
-			assertTrue("Number of statements not 1", statements.size() == 1);
-			
-			ConstructorInvocation invocation= (ConstructorInvocation) statements.get(0);
-	
-			List arguments= invocation.arguments();
-			
-			StringLiteral stringLiteral1= ast.newStringLiteral();
-			stringLiteral1.setLiteralValue("Hello");
-			arguments.add(stringLiteral1);
-			rewrite.markAsInserted(stringLiteral1);
-			
-			StringLiteral stringLiteral2= ast.newStringLiteral();
-			stringLiteral2.setLiteralValue("World");
-			arguments.add(stringLiteral2);
-			rewrite.markAsInserted(stringLiteral2);
-		}
-		{ //remove parameters
-			Block block= declarations[1].getBody();
-			List statements= block.statements();
-			assertTrue("Number of statements not 1", statements.size() == 1);			
-			ConstructorInvocation invocation= (ConstructorInvocation) statements.get(0);
-	
-			List arguments= invocation.arguments();
-			
-			rewrite.markAsRemoved((ASTNode) arguments.get(0));
-			rewrite.markAsRemoved((ASTNode) arguments.get(1));
-		}		
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public E(String e, String f) {\n");
-		buf.append("        this(\"Hello\", \"World\");\n");
-		buf.append("    }\n");
-		buf.append("    public E() {\n");
-		buf.append("        this();\n");
-		buf.append("    }\n");		
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-	public void testContinueStatement() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        continue;\n");
-		buf.append("        continue label;\n");
-		buf.append("        continue label;\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		List statements= block.statements();
-		assertTrue("Number of statements not 3", statements.size() == 3);
-		{ // insert label
-			ContinueStatement statement= (ContinueStatement) statements.get(0);
-			assertTrue("Has label", statement.getLabel() == null);
-			
-			SimpleName newLabel= ast.newSimpleName("label2");	
-			statement.setLabel(newLabel);
-			
-			rewrite.markAsInserted(newLabel);
-		}
-		{ // replace label
-			ContinueStatement statement= (ContinueStatement) statements.get(1);
-			
-			SimpleName label= statement.getLabel();
-			assertTrue("Has no label", label != null);
-			
-			SimpleName newLabel= ast.newSimpleName("label2");	
-
-			rewrite.markAsReplaced(label, newLabel);
-		}
-		{ // remove label
-			ContinueStatement statement= (ContinueStatement) statements.get(2);
-			
-			SimpleName label= statement.getLabel();
-			assertTrue("Has no label", label != null);
-			
-			rewrite.markAsRemoved(label);
-		}	
-				
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        continue label2;\n");
-		buf.append("        continue label2;\n");
-		buf.append("        continue;\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-	public void testDoStatement() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        do {\n");
-		buf.append("            System.beep();\n");
-		buf.append("        } while (i == j);\n");		
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		List statements= block.statements();
-		assertTrue("Number of statements not 1", statements.size() == 1);
-
-		{ // replace body and expression
-			DoStatement doStatement= (DoStatement) statements.get(0);
-			
-			Block newBody= ast.newBlock();
-			
-			MethodInvocation invocation= ast.newMethodInvocation();
-			invocation.setName(ast.newSimpleName("hoo"));
-			invocation.arguments().add(ast.newNumberLiteral("11"));
-			
-			newBody.statements().add(ast.newExpressionStatement(invocation));
-			
-			rewrite.markAsReplaced(doStatement.getBody(), newBody);
-
-			BooleanLiteral literal= ast.newBooleanLiteral(true);
-			rewrite.markAsReplaced(doStatement.getExpression(), literal);
-		}
-				
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        do {\n");
-		buf.append("            hoo(11);\n");
-		buf.append("        } while (true);\n");		
-		buf.append("    }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}		
-
-	public void testExpressionStatement() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        i= 0;\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		assertTrue("Parse errors", (block.getFlags() & ASTNode.MALFORMED) == 0);
-		
-		List statements= block.statements();
-		assertTrue("Number of statements not 1", statements.size() == 1);
-		{ // replace expression
-			ExpressionStatement stmt= (ExpressionStatement) statements.get(0);
-			
-			Assignment assignment= (Assignment) stmt.getExpression();
-			Expression placeholder= (Expression) rewrite.createCopy(assignment);
-									
-			Assignment newExpression= ast.newAssignment();
-			newExpression.setLeftHandSide(ast.newSimpleName("x"));
-			newExpression.setRightHandSide(placeholder);
-			newExpression.setOperator(Assignment.Operator.ASSIGN);
-	
-			rewrite.markAsReplaced(stmt.getExpression(), newExpression);
-		}
-				
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        x = i= 0;\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-
-	}
-	
-	public void testForStatement() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        for (int i= 0; i < len; i++) {\n");
-		buf.append("        }\n");
-		buf.append("        for (i= 0, j= 0; i < len; i++, j++) {\n");
-		buf.append("        }\n");
-		buf.append("        for (;;) {\n");
-		buf.append("        }\n");	
-		buf.append("        for (;;) {\n");
-		buf.append("        }\n");
-		buf.append("        for (i= 0; i < len; i++) {\n");
-		buf.append("        }\n");		
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		AST ast= astRoot.getAST();
-
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		assertTrue("Parse errors", (block.getFlags() & ASTNode.MALFORMED) == 0);
-		
-		List statements= block.statements();
-		assertTrue("Number of statements not 5", statements.size() == 5);
-
-		{ // replace initializer, change expression, add updater, replace cody
-			ForStatement forStatement= (ForStatement) statements.get(0);
-			
-			List initializers= forStatement.initializers();
-			assertTrue("Number of initializers not 1", initializers.size() == 1);
-			
-			Assignment assignment= ast.newAssignment();
-			assignment.setLeftHandSide(ast.newSimpleName("i"));
-			assignment.setOperator(Assignment.Operator.ASSIGN);
-			assignment.setRightHandSide(ast.newNumberLiteral("3"));
-			
-			rewrite.markAsReplaced((ASTNode) initializers.get(0), assignment);
-			
-			Assignment assignment2= ast.newAssignment();
-			assignment2.setLeftHandSide(ast.newSimpleName("j"));
-			assignment2.setOperator(Assignment.Operator.ASSIGN);
-			assignment2.setRightHandSide(ast.newNumberLiteral("4"));
-			
-			rewrite.markAsInserted(assignment2);
-			
-			initializers.add(assignment2);
-			
-			BooleanLiteral literal= ast.newBooleanLiteral(true);
-			rewrite.markAsReplaced(forStatement.getExpression(), literal);
-			
-			// add updater
-			PrefixExpression prefixExpression= ast.newPrefixExpression();
-			prefixExpression.setOperand(ast.newSimpleName("j"));
-			prefixExpression.setOperator(PrefixExpression.Operator.INCREMENT);
-			
-			forStatement.updaters().add(prefixExpression);
-			
-			rewrite.markAsInserted(prefixExpression);
-			
-			// replace body		
-			Block newBody= ast.newBlock();
-			
-			MethodInvocation invocation= ast.newMethodInvocation();
-			invocation.setName(ast.newSimpleName("hoo"));
-			invocation.arguments().add(ast.newNumberLiteral("11"));
-			
-			newBody.statements().add(ast.newExpressionStatement(invocation));
-			
-			rewrite.markAsReplaced(forStatement.getBody(), newBody);
-		}
-		{ // remove initializers, expression and updaters
-			ForStatement forStatement= (ForStatement) statements.get(1);
-			
-			List initializers= forStatement.initializers();
-			assertTrue("Number of initializers not 2", initializers.size() == 2);
-			
-			rewrite.markAsRemoved((ASTNode) initializers.get(0));
-			rewrite.markAsRemoved((ASTNode) initializers.get(1));
-			
-			rewrite.markAsRemoved(forStatement.getExpression());
-			
-			List updaters= forStatement.updaters();
-			assertTrue("Number of initializers not 2", updaters.size() == 2);
-			
-			rewrite.markAsRemoved((ASTNode) updaters.get(0));
-			rewrite.markAsRemoved((ASTNode) updaters.get(1));
-		}
-		{ // insert updater
-			ForStatement forStatement= (ForStatement) statements.get(2);
-			
-			PrefixExpression prefixExpression= ast.newPrefixExpression();
-			prefixExpression.setOperand(ast.newSimpleName("j"));
-			prefixExpression.setOperator(PrefixExpression.Operator.INCREMENT);
-			
-			forStatement.updaters().add(prefixExpression);
-			
-			rewrite.markAsInserted(prefixExpression);
-		}
-		
-		{ // insert updater & initializer
-			ForStatement forStatement= (ForStatement) statements.get(3);
-			
-			Assignment assignment= ast.newAssignment();
-			assignment.setLeftHandSide(ast.newSimpleName("j"));
-			assignment.setOperator(Assignment.Operator.ASSIGN);
-			assignment.setRightHandSide(ast.newNumberLiteral("3"));
-			
-			forStatement.initializers().add(assignment);
-			
-			rewrite.markAsInserted(assignment);	
-			
-			PrefixExpression prefixExpression= ast.newPrefixExpression();
-			prefixExpression.setOperand(ast.newSimpleName("j"));
-			prefixExpression.setOperator(PrefixExpression.Operator.INCREMENT);
-			
-			forStatement.updaters().add(prefixExpression);
-			
-			rewrite.markAsInserted(prefixExpression);
-		}
-		
-		{ // replace initializer: turn assignement to var decl
-			ForStatement forStatement= (ForStatement) statements.get(4);
-			
-			Assignment assignment= (Assignment) forStatement.initializers().get(0);
-			SimpleName leftHandSide= (SimpleName) assignment.getLeftHandSide();
-			
-			VariableDeclarationFragment varFragment= ast.newVariableDeclarationFragment();
-			VariableDeclarationExpression varDecl= ast.newVariableDeclarationExpression(varFragment);
-			varFragment.setName(ast.newSimpleName(leftHandSide.getIdentifier()));
-			
-			Expression placeholder= (Expression) rewrite.createCopy(assignment.getRightHandSide());
-			varFragment.setInitializer(placeholder);
-			varDecl.setType(ast.newPrimitiveType(PrimitiveType.INT));
-
-			
-			rewrite.markAsReplaced(assignment, varDecl);
-		}	
-		
-		
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        for (i = 3, j = 4; true; i++, ++j) {\n");
-		buf.append("            hoo(11);\n");
-		buf.append("        }\n");
-		buf.append("        for (;;) {\n");
-		buf.append("        }\n");
-		buf.append("        for (;;++j) {\n");
-		buf.append("        }\n");		
-		buf.append("        for (j = 3;;++j) {\n");
-		buf.append("        }\n");
-		buf.append("        for (int i = 0; i < len; i++) {\n");
-		buf.append("        }\n");			
-		buf.append("    }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}		
-	
-	public void testIfStatement() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        if (i == 0) {\n");
-		buf.append("            System.beep();\n");
-		buf.append("        } else {\n");
-		buf.append("        }\n");
-		buf.append("        if (i == 0) {\n");
-		buf.append("            System.beep();\n");
-		buf.append("        }\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		List statements= block.statements();
-		assertTrue("Number of statements not 2", statements.size() == 2);
-
-		{ // replace expression body and then body, remove else body
-			IfStatement ifStatement= (IfStatement) statements.get(0);
-			
-			BooleanLiteral literal= ast.newBooleanLiteral(true);
-			rewrite.markAsReplaced(ifStatement.getExpression(), literal);			
-			
-			MethodInvocation invocation= ast.newMethodInvocation();
-			invocation.setName(ast.newSimpleName("hoo"));
-			invocation.arguments().add(ast.newNumberLiteral("11"));
-			Block newBody= ast.newBlock();
-			newBody.statements().add(ast.newExpressionStatement(invocation));
-			
-			rewrite.markAsReplaced(ifStatement.getThenStatement(), newBody);
-			
-			rewrite.markAsRemoved(ifStatement.getElseStatement());
-		}
-		{ // add else body
-			IfStatement ifStatement= (IfStatement) statements.get(1);
-			
-			MethodInvocation invocation= ast.newMethodInvocation();
-			invocation.setName(ast.newSimpleName("hoo"));
-			invocation.arguments().add(ast.newNumberLiteral("11"));
-			Block newBody= ast.newBlock();
-			newBody.statements().add(ast.newExpressionStatement(invocation));
-			
-			rewrite.markAsInserted(newBody);
-			
-			ifStatement.setElseStatement(newBody);
-		}		
-		
-				
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        if (true) {\n");
-		buf.append("            hoo(11);\n");
-		buf.append("        }\n");
-		buf.append("        if (i == 0) {\n");
-		buf.append("            System.beep();\n");
-		buf.append("        } else {\n");
-		buf.append("            hoo(11);\n");
-		buf.append("        }\n");		
-		buf.append("    }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-	public void testLabeledStatement() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        label: if (i == 0) {\n");
-		buf.append("            System.beep();\n");
-		buf.append("        }\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		List statements= block.statements();
-		assertTrue("Number of statements not 1", statements.size() == 1);
-
-		{ // replace label and statement
-			LabeledStatement labeledStatement= (LabeledStatement) statements.get(0);
-			
-			Name newLabel= ast.newSimpleName("newLabel");
-			
-			rewrite.markAsReplaced(labeledStatement.getLabel(), newLabel);
-						
-			Assignment newExpression= ast.newAssignment();
-			newExpression.setLeftHandSide(ast.newSimpleName("x"));
-			newExpression.setRightHandSide(ast.newNumberLiteral("1"));
-			newExpression.setOperator(Assignment.Operator.ASSIGN);
-			
-			Statement newStatement= ast.newExpressionStatement(newExpression);
-			
-			rewrite.markAsReplaced(labeledStatement.getBody(), newStatement);
-		}		
-				
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        newLabel: x = 1;\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}		
-	
-	public void testReturnStatement() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        return;\n");
-		buf.append("        return 1;\n");
-		buf.append("        return 1;\n");
-		buf.append("        return 1 + 2;\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		List statements= block.statements();
-		assertTrue("Number of statements not 4", statements.size() == 4);
-		{ // insert expression
-			ReturnStatement statement= (ReturnStatement) statements.get(0);
-			assertTrue("Has expression", statement.getExpression() == null);
-			
-			SimpleName newExpression= ast.newSimpleName("x");	
-			statement.setExpression(newExpression);
-			
-			rewrite.markAsInserted(newExpression);
-		}
-		{ // replace expression
-			ReturnStatement statement= (ReturnStatement) statements.get(1);
-			
-			Expression expression= statement.getExpression();
-			assertTrue("Has no label", expression != null);
-			
-			SimpleName newExpression= ast.newSimpleName("x");
-
-			rewrite.markAsReplaced(expression, newExpression);
-		}
-		{ // remove expression
-			ReturnStatement statement= (ReturnStatement) statements.get(2);
-			
-			Expression expression= statement.getExpression();
-			assertTrue("Has no label", expression != null);
-			
-			rewrite.markAsRemoved(expression);
-		}
-		{ // modify in expression (no change)
-			ReturnStatement statement= (ReturnStatement) statements.get(3);
-			
-			InfixExpression expression= (InfixExpression) statement.getExpression();
-			rewrite.markAsReplaced(expression.getLeftOperand(), ast.newNumberLiteral("9"));
-		}		
-		
-				
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        return x;\n");
-		buf.append("        return x;\n");
-		buf.append("        return;\n");
-		buf.append("        return 9 + 2;\n");		
-		buf.append("    }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-	public void testSwitchStatement() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo(int i) {\n");
-		buf.append("        switch (i) {\n");
-		buf.append("        }\n");
-		buf.append("        switch (i) {\n");
-		buf.append("            case 1:\n");
-		buf.append("                i= 1;\n");
-		buf.append("                break;\n");	
-		buf.append("            case 2:\n");
-		buf.append("                i= 2;\n");
-		buf.append("                break;\n");			
-		buf.append("            default:\n");
-		buf.append("                i= 3;\n");		
-		buf.append("        }\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		List blockStatements= block.statements();
-		assertTrue("Number of statements not 2", blockStatements.size() == 2);
-		{ // insert statements, replace expression
-			SwitchStatement switchStatement= (SwitchStatement) blockStatements.get(0);
-			
-			ASTNode expression= switchStatement.getExpression();
-			SimpleName newExpression= ast.newSimpleName("x");	
-			rewrite.markAsReplaced(expression, newExpression);
-			
-			List statements= switchStatement.statements();
-			assertTrue("Number of statements not 0", statements.size() == 0);
-			
-			SwitchCase caseStatement1= ast.newSwitchCase();
-			caseStatement1.setExpression(ast.newNumberLiteral("1"));
-			rewrite.markAsInserted(caseStatement1);
-			statements.add(caseStatement1);
-			
-			Statement statement1= ast.newReturnStatement();
-			rewrite.markAsInserted(statement1);
-			statements.add(statement1);
-			
-			SwitchCase caseStatement2= ast.newSwitchCase(); // default
-			caseStatement2.setExpression(null);
-			rewrite.markAsInserted(caseStatement2);
-			statements.add(caseStatement2);
-		}
-		
-		{ // insert, remove, replace statements, change case statements
-			SwitchStatement switchStatement= (SwitchStatement) blockStatements.get(1);
-			
-			List statements= switchStatement.statements();
-			assertTrue("Number of statements not 8", statements.size() == 8);
-			
-			// remove statements
-			
-			if (BUG_23259) {
-				System.out.println(getClass().getName()+"::" + getName() +" limited (bug 23259)");
-			} else {
-			rewrite.markAsRemoved((ASTNode) statements.get(0));
-			rewrite.markAsRemoved((ASTNode) statements.get(1));
-			rewrite.markAsRemoved((ASTNode) statements.get(2));
-			}
-			
-			// change case statement
-			SwitchCase caseStatement= (SwitchCase) statements.get(3);
-			Expression newCaseExpression= ast.newNumberLiteral("10");
-			rewrite.markAsReplaced(caseStatement.getExpression(), newCaseExpression);
-			
-			{
-				// insert case statement
-				SwitchCase caseStatement2= ast.newSwitchCase();
-				caseStatement2.setExpression(ast.newNumberLiteral("11"));
-				rewrite.markAsInserted(caseStatement2);
-				statements.add(0, caseStatement2);
-	
-				// insert statement
-				Statement statement1= ast.newReturnStatement();
-				rewrite.markAsInserted(statement1);
-				statements.add(1, statement1);
-			}
-			
-			{
-				// insert case statement
-				SwitchCase caseStatement2= ast.newSwitchCase();
-				caseStatement2.setExpression(ast.newNumberLiteral("12"));
-				rewrite.markAsInserted(caseStatement2);
-				statements.add(caseStatement2);
-	
-				// insert statement
-				Statement statement1= ast.newReturnStatement();
-				rewrite.markAsInserted(statement1);
-				statements.add(statement1);
-			}			
-			
-
-		}		
-	
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo(int i) {\n");
-		buf.append("        switch (x) {\n");
-		buf.append("            case 1 :\n");
-		buf.append("                return;\n");
-		buf.append("            default :\n");			
-		buf.append("        }\n");
-		buf.append("        switch (i) {\n");
-		buf.append("            case 11 :\n");
-		buf.append("                return;\n");
-		if (BUG_23259) {		
-		buf.append("            case 1:\n");
-		buf.append("                i= 1;\n");
-		buf.append("                break;\n");
-		}	
-		buf.append("            case 10:\n");		
-		buf.append("                i= 2;\n");
-		buf.append("                break;\n");			
-		buf.append("            default:\n");
-		buf.append("                i= 3;\n");
-		buf.append("            case 12 :\n");
-		buf.append("                return;\n");			
-		buf.append("        }\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-
-	public void testSynchronizedStatement() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        synchronized(this) {\n");
-		buf.append("            System.beep();\n");
-		buf.append("        }\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		List statements= block.statements();
-		assertTrue("Number of statements not 1", statements.size() == 1);
-
-		{ // replace expression and body
-			SynchronizedStatement statement= (SynchronizedStatement) statements.get(0);
-			ASTNode newExpression= ast.newSimpleName("obj");
-			rewrite.markAsReplaced(statement.getExpression(), newExpression);
-			
-			Block newBody= ast.newBlock();
-						
-			Assignment assign= ast.newAssignment();
-			assign.setLeftHandSide(ast.newSimpleName("x"));
-			assign.setRightHandSide(ast.newNumberLiteral("1"));
-			assign.setOperator(Assignment.Operator.ASSIGN);
-			
-			newBody.statements().add(ast.newExpressionStatement(assign));
-			
-			rewrite.markAsReplaced(statement.getBody(), newBody);
-		}		
-				
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        synchronized(obj) {\n");
-		buf.append("            x = 1;\n");
-		buf.append("        }\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-	public void testThrowStatement() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        throw new Exception();\n");
-		buf.append("    }\n");
-		buf.append("    public void goo() {\n");
-		buf.append("        throw new Exception('d');\n");
-		buf.append("    }\n");		
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		{ // replace expression
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-			Block block= methodDecl.getBody();
-			List statements= block.statements();
-			assertTrue("Number of statements not 1", statements.size() == 1);			
-			
-			ThrowStatement statement= (ThrowStatement) statements.get(0);
-			
-			ClassInstanceCreation creation= ast.newClassInstanceCreation();
-			creation.setName(ast.newSimpleName("NullPointerException"));
-			creation.arguments().add(ast.newSimpleName("x"));
-			
-			rewrite.markAsReplaced(statement.getExpression(), creation);
-		}
-		
-		{ // modify expression
-			MethodDeclaration methodDecl= findMethodDeclaration(type, "goo");
-			Block block= methodDecl.getBody();
-			List statements= block.statements();
-			assertTrue("Number of statements not 1", statements.size() == 1);			
-			
-			ThrowStatement statement= (ThrowStatement) statements.get(0);			
-			
-			ClassInstanceCreation creation= (ClassInstanceCreation) statement.getExpression();
-			
-			ASTNode newArgument= ast.newSimpleName("x");
-			rewrite.markAsReplaced((ASTNode) creation.arguments().get(0), newArgument);
-		}				
-				
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        throw new NullPointerException(x);\n");
-		buf.append("    }\n");
-		buf.append("    public void goo() {\n");
-		buf.append("        throw new Exception(x);\n");
-		buf.append("    }\n");		
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}		
-		
-	public void testTryStatement() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo(int i) {\n");
-		buf.append("        try {\n");	
-		buf.append("        } finally {\n");
-		buf.append("        }\n");		
-		buf.append("        try {\n");	
-		buf.append("        } catch (IOException e) {\n");
-		buf.append("        } finally {\n");
-		buf.append("        }\n");
-		buf.append("        try {\n");	
-		buf.append("        } catch (IOException e) {\n");
-		buf.append("        }\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		List blockStatements= block.statements();
-		assertTrue("Number of statements not 3", blockStatements.size() == 3);
-		{ // add catch, replace finally
-			TryStatement tryStatement= (TryStatement) blockStatements.get(0);
-			
-			CatchClause catchClause= ast.newCatchClause();
-			SingleVariableDeclaration decl= ast.newSingleVariableDeclaration();
-			decl.setType(ast.newSimpleType(ast.newSimpleName("IOException")));
-			decl.setName(ast.newSimpleName("e"));
-			catchClause.setException(decl);
-			
-			rewrite.markAsInserted(catchClause);
-			
-			tryStatement.catchClauses().add(catchClause);
-			
-			Block body= ast.newBlock();
-			body.statements().add(ast.newReturnStatement());
-			
-			rewrite.markAsReplaced(tryStatement.getFinally(), body);
-		}
-		{ // replace catch, remove finally
-			TryStatement tryStatement= (TryStatement) blockStatements.get(1);
-			
-			List catchClauses= tryStatement.catchClauses();
-			
-			CatchClause catchClause= ast.newCatchClause();
-			SingleVariableDeclaration decl= ast.newSingleVariableDeclaration();
-			decl.setType(ast.newSimpleType(ast.newSimpleName("Exception")));
-			decl.setName(ast.newSimpleName("x"));
-			catchClause.setException(decl);
-			
-			rewrite.markAsReplaced((ASTNode) catchClauses.get(0), catchClause);
-					
-			rewrite.markAsRemoved(tryStatement.getFinally());
-		}
-		{ // remove catch, add finally
-			TryStatement tryStatement= (TryStatement) blockStatements.get(2);
-			
-			List catchClauses= tryStatement.catchClauses();
-			rewrite.markAsRemoved((ASTNode) catchClauses.get(0));
-			
-			
-			Block body= ast.newBlock();
-			body.statements().add(ast.newReturnStatement());
-			rewrite.markAsInserted(body);
-			
-			tryStatement.setFinally(body);
-		}		
-			
-	
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo(int i) {\n");
-		buf.append("        try {\n");
-		buf.append("        } catch (IOException e) {\n");		
-		buf.append("        } finally {\n");
-		buf.append("            return;\n");				
-		buf.append("        }\n");		
-		buf.append("        try {\n");	
-		buf.append("        } catch (Exception x) {\n");
-		buf.append("        }\n");
-		buf.append("        try {\n");	
-		buf.append("        } finally {\n");
-		buf.append("            return;\n");		
-		buf.append("        }\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-
-	public void testTypeDeclarationStatement() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        class A {\n");
-		buf.append("        }\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		assertTrue("Parse errors", (block.getFlags() & ASTNode.MALFORMED) == 0);
-		
-		List statements= block.statements();
-		assertTrue("Number of statements not 1", statements.size() == 1);
-		{ // replace expression
-			TypeDeclarationStatement stmt= (TypeDeclarationStatement) statements.get(0);
-			
-			TypeDeclaration newDeclaration= ast.newTypeDeclaration();
-			newDeclaration.setName(ast.newSimpleName("X"));
-			newDeclaration.setInterface(true);
-				
-			rewrite.markAsReplaced(stmt.getTypeDeclaration(), newDeclaration);
-		}
-				
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        interface X {\n");
-		buf.append("        }\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-	public void testVariableDeclarationStatement() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class A {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        int i1= 1;\n");
-		buf.append("        int i2= 1, k2= 2, n2= 3;\n");
-		buf.append("        final int i3= 1, k3= 2, n3= 3;\n");
-		buf.append("    }\n");		
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("A.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "A");
-		
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		assertTrue("Parse errors", (block.getFlags() & ASTNode.MALFORMED) == 0);
-		
-		List statements= block.statements();
-		assertTrue("Number of statements not 3", statements.size() == 3);
-		{	// add modifier, change type, add fragment
-			VariableDeclarationStatement decl= (VariableDeclarationStatement) statements.get(0);
-			
-			// add modifier
-			VariableDeclarationStatement modifiedNode= ast.newVariableDeclarationStatement(ast.newVariableDeclarationFragment());
-			modifiedNode.setModifiers(Modifier.FINAL);
-			
-			rewrite.markAsModified(decl, modifiedNode);
-			
-			PrimitiveType newType= ast.newPrimitiveType(PrimitiveType.BOOLEAN);
-			rewrite.markAsReplaced(decl.getType(), newType);
-			
-			List fragments= decl.fragments();
-			
-			VariableDeclarationFragment frag=	ast.newVariableDeclarationFragment();
-			frag.setName(ast.newSimpleName("k1"));
-			frag.setInitializer(null);
-			
-			rewrite.markAsInserted(frag);
-			
-			fragments.add(frag);
-		}
-		{	// add modifiers, remove first two fragments, replace last
-			VariableDeclarationStatement decl= (VariableDeclarationStatement) statements.get(1);
-			
-			// add modifier
-			VariableDeclarationStatement modifiedNode= ast.newVariableDeclarationStatement(ast.newVariableDeclarationFragment());
-			modifiedNode.setModifiers(Modifier.FINAL);
-			
-			rewrite.markAsModified(decl, modifiedNode);
-			
-			List fragments= decl.fragments();
-			assertTrue("Number of fragments not 3", fragments.size() == 3);
-			
-			rewrite.markAsRemoved((ASTNode) fragments.get(0));
-			rewrite.markAsRemoved((ASTNode) fragments.get(1));
-			
-			VariableDeclarationFragment frag=	ast.newVariableDeclarationFragment();
-			frag.setName(ast.newSimpleName("k2"));
-			frag.setInitializer(null);
-			
-			rewrite.markAsReplaced((ASTNode) fragments.get(2), frag);
-		}
-		{	// remove modifiers
-			VariableDeclarationStatement decl= (VariableDeclarationStatement) statements.get(2);
-			
-			// add modifier
-			VariableDeclarationStatement modifiedNode= ast.newVariableDeclarationStatement(ast.newVariableDeclarationFragment());
-			modifiedNode.setModifiers(0);
-			
-			rewrite.markAsModified(decl, modifiedNode);
-		}
-				
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class A {\n");
-		buf.append("    public void foo() {\n");		
-		buf.append("        final boolean i1= 1, k1;\n");
-		buf.append("        final int k2;\n");
-		buf.append("        int i3= 1, k3= 2, n3= 3;\n");
-		buf.append("    }\n");		
-		buf.append("}\n");	
-		
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-
-	public void testWhileStatement() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        while (i == j) {\n");
-		buf.append("            System.beep();\n");
-		buf.append("        }\n");		
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		List statements= block.statements();
-		assertTrue("Number of statements not 1", statements.size() == 1);
-
-		{ // replace expression and body
-			WhileStatement whileStatement= (WhileStatement) statements.get(0);
-
-			BooleanLiteral literal= ast.newBooleanLiteral(true);
-			rewrite.markAsReplaced(whileStatement.getExpression(), literal);
-			
-			Block newBody= ast.newBlock();
-			
-			MethodInvocation invocation= ast.newMethodInvocation();
-			invocation.setName(ast.newSimpleName("hoo"));
-			invocation.arguments().add(ast.newNumberLiteral("11"));
-			
-			newBody.statements().add(ast.newExpressionStatement(invocation));
-			
-			rewrite.markAsReplaced(whileStatement.getBody(), newBody);
-		}
-				
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        while (true) {\n");
-		buf.append("            hoo(11);\n");
-		buf.append("        }\n");		
-		buf.append("    }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-	
-	public void testInsertCode() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        while (i == j) {\n");
-		buf.append("            System.beep();\n");
-		buf.append("        }\n");		
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		List statements= block.statements();
-		assertTrue("Number of statements not 1", statements.size() == 1);
-
-		{ // replace while statement with comment, insert new statement
-			WhileStatement whileStatement= (WhileStatement) statements.get(0);
-			String comment= "//hello";
-			ASTNode placeHolder= rewrite.createPlaceholder(comment, ASTRewrite.STATEMENT);
-			
-			rewrite.markAsReplaced(whileStatement, placeHolder);
-			
-			StringBuffer buf1= new StringBuffer();
-			buf1.append("if (i == 3) {\n");
-			buf1.append("    System.beep();\n");
-			buf1.append("}");
-			
-			ASTNode placeHolder2= rewrite.createPlaceholder(buf1.toString(), ASTRewrite.STATEMENT);
-			rewrite.markAsInserted(placeHolder2);
-			
-			statements.add(placeHolder2);
-		}
-				
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        //hello\n");
-		buf.append("        if (i == 3) {\n");
-		buf.append("            System.beep();\n");
-		buf.append("        }\n");		
-		buf.append("    }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-}
-
-
-
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/astrewrite/ASTRewritingTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/astrewrite/ASTRewritingTest.java
deleted file mode 100644
index 04ac127..0000000
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/astrewrite/ASTRewritingTest.java
+++ /dev/null
@@ -1,122 +0,0 @@
-package org.eclipse.jdt.ui.tests.astrewrite;
-
-import java.util.List;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.eclipse.jdt.core.dom.AST;
-import org.eclipse.jdt.core.dom.CompilationUnit;
-import org.eclipse.jdt.core.dom.FieldDeclaration;
-import org.eclipse.jdt.core.dom.MethodDeclaration;
-import org.eclipse.jdt.core.dom.Modifier;
-import org.eclipse.jdt.core.dom.PrimitiveType;
-import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
-import org.eclipse.jdt.core.dom.TypeDeclaration;
-import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
-
-import org.eclipse.jdt.internal.corext.dom.ASTRewrite;
-import org.eclipse.jdt.internal.corext.dom.ASTRewriteClear;
-
-/**
-  */
-public class ASTRewritingTest extends TestCase {
-
-	public static Test suite() {
-		TestSuite suite= new TestSuite();
-		suite.addTest(new TestSuite(ASTRewritingMethodDeclTest.class));
-		suite.addTest(new TestSuite(ASTRewritingStatementsTest.class));
-		suite.addTest(new TestSuite(ASTRewritingTypeDeclTest.class));
-		suite.addTest(new TestSuite(ASTRewritingMoveCodeTest.class));
-		suite.addTest(new TestSuite(ASTRewritingExpressionsTest.class));
-		return suite;
-	}
-
-	
-	public ASTRewritingTest(String name) {
-		super(name);
-	}
-	
-	private static final int printRange= 6;
-	
-	public static void assertEqualString(String str1, String str2) {	
-		int len1= Math.min(str1.length(), str2.length());
-		
-		int diffPos= -1;
-		for (int i= 0; i < len1; i++) {
-			if (str1.charAt(i) != str2.charAt(i)) {
-				diffPos= i;
-				break;
-			}
-		}
-		if (diffPos == -1 && str1.length() != str2.length()) {
-			diffPos= len1;
-		}
-		if (diffPos != -1) {
-			int diffAhead= Math.max(0, diffPos - printRange);
-			int diffAfter= Math.min(str1.length(), diffPos + printRange);
-			
-			String diffStr= str1.substring(diffAhead, diffPos) + '^' + str1.substring(diffPos, diffAfter);
-			
-			assertTrue("Content not as expected: is\n" + str1 + "\nDiffers at pos " + diffPos + ": " + diffStr + "\nexpected:\n" + str2, false);
-		}
-	}
-	
-	public static TypeDeclaration findTypeDeclaration(CompilationUnit astRoot, String simpleTypeName) {
-		List types= astRoot.types();
-		for (int i= 0; i < types.size(); i++) {
-			TypeDeclaration elem= (TypeDeclaration) types.get(i);
-			if (simpleTypeName.equals(elem.getName().getIdentifier())) {
-				return elem;
-			}
-		}
-		return null;
-	}
-	
-	public static MethodDeclaration findMethodDeclaration(TypeDeclaration typeDecl, String methodName) {
-		MethodDeclaration[] methods= typeDecl.getMethods();
-		for (int i= 0; i < methods.length; i++) {
-			if (methodName.equals(methods[i].getName().getIdentifier())) {
-				return methods[i];
-			}
-		}
-		return null;
-	}
-	
-	public static SingleVariableDeclaration createNewParam(AST ast, String name) {
-		SingleVariableDeclaration newParam= ast.newSingleVariableDeclaration();
-		newParam.setType(ast.newPrimitiveType(PrimitiveType.FLOAT));
-		newParam.setName(ast.newSimpleName(name));
-		return newParam;
-	}
-	
-	protected FieldDeclaration createNewField(AST ast, String name) {
-		VariableDeclarationFragment frag= ast.newVariableDeclarationFragment();
-		frag.setName(ast.newSimpleName(name));
-		FieldDeclaration newFieldDecl= ast.newFieldDeclaration(frag);
-		newFieldDecl.setModifiers(Modifier.PRIVATE);
-		newFieldDecl.setType(ast.newPrimitiveType(PrimitiveType.DOUBLE));
-		return newFieldDecl;
-	}
-	
-	protected MethodDeclaration createNewMethod(AST ast, String name, boolean isAbstract) {
-		MethodDeclaration decl= ast.newMethodDeclaration();
-		decl.setName(ast.newSimpleName(name));
-		decl.setReturnType(ast.newPrimitiveType(PrimitiveType.VOID));
-		decl.setModifiers(isAbstract ? (Modifier.ABSTRACT | Modifier.PRIVATE) : Modifier.PRIVATE);
-		SingleVariableDeclaration param= ast.newSingleVariableDeclaration();
-		param.setName(ast.newSimpleName("str"));
-		param.setType(ast.newSimpleType(ast.newSimpleName("String")));
-		decl.parameters().add(param);
-		decl.setBody(isAbstract ? null : ast.newBlock());
-		return decl;
-	}
-	
-	
-	protected void clearRewrite(ASTRewrite rewrite) {
-		rewrite.removeModifications();
-	}
-	
-
-}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/astrewrite/ASTRewritingTypeDeclTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/astrewrite/ASTRewritingTypeDeclTest.java
deleted file mode 100644
index b5f653b..0000000
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/astrewrite/ASTRewritingTypeDeclTest.java
+++ /dev/null
@@ -1,824 +0,0 @@
-package org.eclipse.jdt.ui.tests.astrewrite;
-
-import java.util.Hashtable;
-import java.util.List;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.dom.*;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-import org.eclipse.jdt.testplugin.TestPluginLauncher;
-
-import org.eclipse.jdt.internal.corext.dom.ASTRewrite;
-import org.eclipse.jdt.internal.ui.text.correction.ASTRewriteCorrectionProposal;
-
-public class ASTRewritingTypeDeclTest extends ASTRewritingTest {
-	
-	private static final Class THIS= ASTRewritingTypeDeclTest.class;
-	
-	private IJavaProject fJProject1;
-	private IPackageFragmentRoot fSourceFolder;
-
-	public ASTRewritingTypeDeclTest(String name) {
-		super(name);
-	}
-
-	public static void main(String[] args) {
-		TestPluginLauncher.run(TestPluginLauncher.getLocationFromProperties(), THIS, args);
-	}
-
-
-	public static Test suite() {
-		if (true) {
-			return new TestSuite(THIS);
-		} else {
-			TestSuite suite= new TestSuite();
-			suite.addTest(new ASTRewritingTypeDeclTest("testSingleVariableDeclaration"));
-			return suite;
-		}
-	}
-
-
-	protected void setUp() throws Exception {
-		Hashtable options= JavaCore.getOptions();
-		options.put(JavaCore.FORMATTER_TAB_CHAR, JavaCore.SPACE);
-		options.put(JavaCore.FORMATTER_TAB_SIZE, "4");
-		JavaCore.setOptions(options);			
-		
-		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		assertTrue("rt not found", JavaProjectHelper.addRTJar(fJProject1) != null);
-
-		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
-	}
-
-
-	protected void tearDown() throws Exception {
-		JavaProjectHelper.delete(fJProject1);
-	}
-		
-	public void testTypeDeclChanges() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E extends Exception implements Runnable, Serializable {\n");
-		buf.append("    public static class EInner {\n");
-		buf.append("        public void xee() {\n");
-		buf.append("        }\n");		
-		buf.append("    }\n");		
-		buf.append("    private int i;\n");	
-		buf.append("    private int k;\n");	
-		buf.append("    public E() {\n");
-		buf.append("    }\n");
-		buf.append("    public void gee() {\n");
-		buf.append("    }\n");
-		buf.append("    public void hee() {\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		buf.append("class F implements Runnable {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("    }\n");		
-		buf.append("}\n");
-		buf.append("interface G {\n");
-		buf.append("}\n");		
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);			
-
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		AST ast= astRoot.getAST();
-		
-		{  // rename type, rename supertype, rename first interface, replace inner class with field
-			TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-			SimpleName name= type.getName();
-			SimpleName newName= ast.newSimpleName("X");
-			
-			rewrite.markAsReplaced(name, newName);
-			
-			Name superClass= type.getSuperclass();
-			assertTrue("Has super type", superClass != null);
-			
-			SimpleName newSuperclass= ast.newSimpleName("Object");
-			rewrite.markAsReplaced(superClass, newSuperclass, "Rename Superclass");
-
-			List superInterfaces= type.superInterfaces();
-			assertTrue("Has super interfaces", !superInterfaces.isEmpty());
-			
-			SimpleName newSuperinterface= ast.newSimpleName("Cloneable");
-			rewrite.markAsReplaced((ASTNode) superInterfaces.get(0), newSuperinterface, "Rename Interface");
-			
-			List members= type.bodyDeclarations();
-			assertTrue("Has declarations", !members.isEmpty());
-			
-			FieldDeclaration newFieldDecl= createNewField(ast, "fCount");
-			
-			rewrite.markAsReplaced((ASTNode) members.get(0), newFieldDecl, "Replace inner class with field");
-		}
-		{ // replace method in F, change to interface
-			TypeDeclaration type= findTypeDeclaration(astRoot, "F");
-			
-			// change flags
-			TypeDeclaration modifiedNode= ast.newTypeDeclaration();
-			modifiedNode.setInterface(true); 
-			modifiedNode.setModifiers(0);
-			rewrite.markAsModified(type, modifiedNode);				
-			
-			List members= type.bodyDeclarations();
-			assertTrue("Has declarations", members.size() == 1);
-
-			MethodDeclaration methodDecl= createNewMethod(ast, "newFoo", true);
-
-			rewrite.markAsReplaced((ASTNode) members.get(0), methodDecl);
-		}
-		
-		{ // change to class, add supertype
-			TypeDeclaration type= findTypeDeclaration(astRoot, "G");
-
-			// change flags
-			TypeDeclaration modifiedNode= ast.newTypeDeclaration();
-			modifiedNode.setInterface(false); 
-			modifiedNode.setModifiers(0);
-			rewrite.markAsModified(type, modifiedNode);				
-			
-			SimpleName newSuperclass= ast.newSimpleName("Object");
-			type.setSuperclass(newSuperclass);
-			rewrite.markAsInserted(newSuperclass);
-		}			
-					
-
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class X extends Object implements Cloneable, Serializable {\n");
-		buf.append("    private double fCount;\n");
-		buf.append("    private int i;\n");	
-		buf.append("    private int k;\n");
-		buf.append("    public E() {\n");
-		buf.append("    }\n");
-		buf.append("    public void gee() {\n");
-		buf.append("    }\n");
-		buf.append("    public void hee() {\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		buf.append("interface F extends Runnable {\n");
-		buf.append("    private abstract void newFoo(String str);\n");
-		buf.append("}\n");				
-		buf.append("class G extends Object {\n");
-		buf.append("}\n");			
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-
-
-	
-	public void testTypeDeclRemoves() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E extends Exception implements Runnable, Serializable {\n");
-		buf.append("    public static class EInner {\n");
-		buf.append("        public void xee() {\n");
-		buf.append("        }\n");		
-		buf.append("    }\n");		
-		buf.append("    private int i;\n");	
-		buf.append("    private int k;\n");	
-		buf.append("    public E() {\n");
-		buf.append("    }\n");
-		buf.append("    public void gee() {\n");
-		buf.append("    }\n");
-		buf.append("    public void hee() {\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		buf.append("class F implements Runnable {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("    }\n");		
-		buf.append("}\n");
-		buf.append("interface G {\n");
-		buf.append("}\n");		
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);			
-
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		AST ast= astRoot.getAST();
-		{ // change to interface, remove supertype, remove first interface, remove field
-			TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-			
-			// change flags
-			TypeDeclaration modifiedNode= ast.newTypeDeclaration();
-			modifiedNode.setInterface(true); 
-			modifiedNode.setModifiers(0);
-			rewrite.markAsModified(type, modifiedNode);				
-		
-			Name superClass= type.getSuperclass();
-			assertTrue("Has super type", superClass != null);
-			
-			rewrite.markAsRemoved(superClass);
-
-			List superInterfaces= type.superInterfaces();
-			assertTrue("Has super interfaces", !superInterfaces.isEmpty());
-			
-			rewrite.markAsRemoved((ASTNode) superInterfaces.get(0));
-			
-			List members= type.bodyDeclarations();
-			assertTrue("Has declarations", !members.isEmpty());
-					
-			rewrite.markAsRemoved((ASTNode) members.get(1));
-			
-			MethodDeclaration meth= findMethodDeclaration(type, "hee");
-			rewrite.markAsRemoved(meth);
-		}
-		{ // remove superinterface & method, change to interface & final
-			TypeDeclaration type= findTypeDeclaration(astRoot, "F");
-			
-			// change flags
-			TypeDeclaration modifiedNode= ast.newTypeDeclaration();
-			modifiedNode.setInterface(true); 
-			modifiedNode.setModifiers(Modifier.FINAL);
-			rewrite.markAsModified(type, modifiedNode);					
-			
-			List superInterfaces= type.superInterfaces();
-			assertTrue("Has super interfaces", !superInterfaces.isEmpty());
-			rewrite.markAsRemoved((ASTNode) superInterfaces.get(0));
-			
-			List members= type.bodyDeclarations();
-			assertTrue("Has declarations", members.size() == 1);
-
-			rewrite.markAsRemoved((ASTNode) members.get(0));			
-		}			
-		{ // remove class G
-			TypeDeclaration type= findTypeDeclaration(astRoot, "G");
-			rewrite.markAsRemoved(type);		
-		}				
-
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("interface E extends Serializable {\n");
-		buf.append("    public static class EInner {\n");
-		buf.append("        public void xee() {\n");
-		buf.append("        }\n");		
-		buf.append("    }\n");		
-		buf.append("    private int k;\n");	
-		buf.append("    public E() {\n");
-		buf.append("    }\n");
-		buf.append("    public void gee() {\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		buf.append("final interface F {\n");
-		buf.append("}\n");				
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-
-	public void testTypeDeclInserts() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E extends Exception implements Runnable, Serializable {\n");
-		buf.append("    public static class EInner {\n");
-		buf.append("        public void xee() {\n");
-		buf.append("        }\n");		
-		buf.append("    }\n");		
-		buf.append("    private int i;\n");	
-		buf.append("    private int k;\n");	
-		buf.append("    public E() {\n");
-		buf.append("    }\n");
-		buf.append("    public void gee() {\n");
-		buf.append("    }\n");
-		buf.append("    public void hee() {\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		buf.append("class F implements Runnable {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("    }\n");		
-		buf.append("}\n");
-		buf.append("interface G {\n");
-		buf.append("}\n");		
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);			
-
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		assertTrue("Errors in AST", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		AST ast= astRoot.getAST();
-		{ // add interface & set to final
-			TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-			
-			// change flags
-			TypeDeclaration modifiedNode= ast.newTypeDeclaration();
-			modifiedNode.setInterface(type.isInterface()); // no change 
-			modifiedNode.setModifiers(Modifier.PUBLIC | Modifier.FINAL);
-			rewrite.markAsModified(type, modifiedNode);				
-		
-			List superInterfaces= type.superInterfaces();
-			assertTrue("Has super interfaces", !superInterfaces.isEmpty());
-			
-			SimpleName newSuperinterface= ast.newSimpleName("Cloneable");
-			superInterfaces.add(0, newSuperinterface);
-			rewrite.markAsInserted(newSuperinterface);
-			
-			List members= type.bodyDeclarations();
-			assertTrue("Has declarations", !members.isEmpty());
-			
-			assertTrue("Cannot find inner class", members.get(0) instanceof TypeDeclaration);
-			TypeDeclaration innerType= (TypeDeclaration) members.get(0);
-
-/*		bug 22161
-			SimpleName newSuperclass= ast.newSimpleName("Exception");
-			innerType.setSuperclass(newSuperclass);
-			rewrite.markAsInserted(newSuperclass);
-*/
-
-			FieldDeclaration newField= createNewField(ast, "fCount");
-			
-			List innerMembers= innerType.bodyDeclarations();
-			innerMembers.add(0, newField);
-			
-			rewrite.markAsInserted(newField);
-			
-			MethodDeclaration newMethodDecl= createNewMethod(ast, "newMethod", false);
-			members.add(4, newMethodDecl);
-			
-			rewrite.markAsInserted(newMethodDecl);
-		}
-		{ // add exception, add method
-			TypeDeclaration type= findTypeDeclaration(astRoot, "F");
-			
-			SimpleName newSuperclass= ast.newSimpleName("Exception");
-			type.setSuperclass(newSuperclass);
-			
-			rewrite.markAsInserted(newSuperclass);
-			
-			List members= type.bodyDeclarations();
-			
-			MethodDeclaration newMethodDecl= createNewMethod(ast, "newMethod", false);
-			members.add(newMethodDecl);
-			
-			rewrite.markAsInserted(newMethodDecl);	
-		}			
-		{ // insert interface
-			TypeDeclaration type= findTypeDeclaration(astRoot, "G");
-						
-			SimpleName newInterface= ast.newSimpleName("Runnable");
-			type.superInterfaces().add(newInterface);
-			
-			rewrite.markAsInserted(newInterface);
-			
-			List members= type.bodyDeclarations();
-			
-			MethodDeclaration newMethodDecl= createNewMethod(ast, "newMethod", true);
-			members.add(newMethodDecl);
-			
-			rewrite.markAsInserted(newMethodDecl);
-		}			
-
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public final class E extends Exception implements Cloneable, Runnable, Serializable {\n");
-		buf.append("    public static class EInner {\n");
-		buf.append("        private double fCount;\n");	
-		buf.append("        public void xee() {\n");
-		buf.append("        }\n");
-		buf.append("    }\n");		
-		buf.append("    private int i;\n");	
-		buf.append("    private int k;\n");	
-		buf.append("    public E() {\n");
-		buf.append("    }\n");
-		buf.append("    private void newMethod(String str) {\n");
-		buf.append("    }\n");		
-		buf.append("    public void gee() {\n");
-		buf.append("    }\n");
-		buf.append("    public void hee() {\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		buf.append("class F extends Exception implements Runnable {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("    }\n");
-		buf.append("    private void newMethod(String str) {\n");
-		buf.append("    }\n");		
-		buf.append("}\n");				
-		buf.append("interface G extends Runnable {\n");
-		buf.append("    private abstract void newMethod(String str);\n");		
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-	public void testBug22161() throws Exception {
-	//	System.out.println(getClass().getName()+"::" + getName() +" disabled (bug 22161)");
-	
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class T extends Exception implements Runnable, Serializable {\n");
-		buf.append("    public static class EInner {\n");
-		buf.append("        public void xee() {\n");
-		buf.append("        }\n");		
-		buf.append("    }\n");		
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("T.java", buf.toString(), false, null);				
-
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		assertTrue("Errors in AST", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		AST ast= astRoot.getAST();
-		
-		TypeDeclaration type= findTypeDeclaration(astRoot, "T");
-		assertTrue("Outer type not found", type != null);
-		
-		List members= type.bodyDeclarations();
-		assertTrue("Cannot find inner class", members.size() == 1 &&  members.get(0) instanceof TypeDeclaration);
-
-		TypeDeclaration innerType= (TypeDeclaration) members.get(0);
-		
-		SimpleName name= innerType.getName();
-		assertTrue("Name positions not correct", name.getStartPosition() != -1 && name.getLength() > 0);
-		
-	}
-	
-	public void testAnonymousClassDeclaration() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E2 {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        new Runnable() {\n");
-		buf.append("        };\n");
-		buf.append("        new Runnable() {\n");
-		buf.append("            int i= 8;\n");
-		buf.append("        };\n");
-		buf.append("        new Runnable() {\n");
-		buf.append("            int i= 8;\n");
-		buf.append("        };\n");		
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E2.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E2");
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		List statements= block.statements();
-		assertTrue("Number of statements not 3", statements.size() == 3);
-		{	// insert body decl in AnonymousClassDeclaration
-			ExpressionStatement stmt= (ExpressionStatement) statements.get(0);
-			ClassInstanceCreation creation= (ClassInstanceCreation) stmt.getExpression();
-			AnonymousClassDeclaration anonym= creation.getAnonymousClassDeclaration();
-			assertTrue("no anonym class decl", anonym != null);
-			
-			List decls= anonym.bodyDeclarations();
-			assertTrue("Number of bodyDeclarations not 0", decls.size() == 0);
-			
-			MethodDeclaration newMethod= createNewMethod(ast, "newMethod", false);
-			decls.add(newMethod);
-			
-			rewrite.markAsInserted(newMethod);
-		}
-		{	// remove body decl in AnonymousClassDeclaration
-			ExpressionStatement stmt= (ExpressionStatement) statements.get(1);
-			ClassInstanceCreation creation= (ClassInstanceCreation) stmt.getExpression();
-			AnonymousClassDeclaration anonym= creation.getAnonymousClassDeclaration();
-			assertTrue("no anonym class decl", anonym != null);
-			
-			List decls= anonym.bodyDeclarations();
-			assertTrue("Number of bodyDeclarations not 1", decls.size() == 1);
-
-			rewrite.markAsRemoved((ASTNode) decls.get(0));
-		}		
-		{	// replace body decl in AnonymousClassDeclaration
-			ExpressionStatement stmt= (ExpressionStatement) statements.get(2);
-			ClassInstanceCreation creation= (ClassInstanceCreation) stmt.getExpression();
-			AnonymousClassDeclaration anonym= creation.getAnonymousClassDeclaration();
-			assertTrue("no anonym class decl", anonym != null);
-			
-			List decls= anonym.bodyDeclarations();
-			assertTrue("Number of bodyDeclarations not 1", decls.size() == 1);
-			
-			MethodDeclaration newMethod= createNewMethod(ast, "newMethod", false);
-
-			rewrite.markAsReplaced((ASTNode) decls.get(0), newMethod);
-		}	
-					
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E2 {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        new Runnable() {\n");
-		buf.append("            private void newMethod(String str) {\n");
-		buf.append("            }\n");	
-		buf.append("        };\n");
-		buf.append("        new Runnable() {\n");
-		buf.append("        };\n");
-		buf.append("        new Runnable() {\n");
-		buf.append("            private void newMethod(String str) {\n");
-		buf.append("            }\n");	
-		buf.append("        };\n");		
-		buf.append("    }\n");
-		buf.append("}\n");	
-			
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-			
-	public void testImportDeclaration() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.util.Vector;\n");
-		buf.append("import java.util.Vector;\n");
-		buf.append("import java.net.*;\n");
-		buf.append("import java.text.*;\n");					
-		buf.append("public class Z {\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("Z.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		
-		List imports= astRoot.imports();
-		assertTrue("Number of imports not 4", imports.size() == 4);
-		
-		{ // rename import
-			ImportDeclaration imp= (ImportDeclaration) imports.get(0);
-			
-			Name name= ast.newName(new String[] { "org", "eclipse", "X" });
-			rewrite.markAsReplaced(imp.getName(), name);
-		}
-		{ // change to import on demand
-			ImportDeclaration imp= (ImportDeclaration) imports.get(1);
-			
-			Name name= ast.newName(new String[] { "java", "util" });
-			rewrite.markAsReplaced(imp.getName(), name);
-			
-			ImportDeclaration modifedNode= (ImportDeclaration) ast.newImportDeclaration();
-			modifedNode.setOnDemand(true);
-			
-			rewrite.markAsModified(imp, modifedNode);
-		}
-		{ // change to single import
-			ImportDeclaration imp= (ImportDeclaration) imports.get(2);
-			
-			ImportDeclaration modifedNode= (ImportDeclaration) ast.newImportDeclaration();
-			modifedNode.setOnDemand(false);
-			
-			rewrite.markAsModified(imp, modifedNode);
-		}
-		{ // rename import
-			ImportDeclaration imp= (ImportDeclaration) imports.get(3);
-			
-			Name name= ast.newName(new String[] { "org", "eclipse" });
-			rewrite.markAsReplaced(imp.getName(), name);
-		}		
-		
-				
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import org.eclipse.X;\n");
-		buf.append("import java.util.*;\n");
-		buf.append("import java.net;\n");
-		buf.append("import org.eclipse.*;\n");			
-		buf.append("public class Z {\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-	public void testPackageDeclaration() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class Z {\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("Z.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		
-		{ // rename package
-			PackageDeclaration packageDeclaration= astRoot.getPackage();
-			
-			Name name= ast.newName(new String[] { "org", "eclipse" });
-			
-			rewrite.markAsReplaced(packageDeclaration.getName(), name);
-		}
-				
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package org.eclipse;\n");
-		buf.append("public class Z {\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-	public void testSingleVariableDeclaration() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo(int i, final int[] k, int[] x[]) {\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		List arguments= methodDecl.parameters();
-		{ // add modifier, change type, change name, add extra dimension
-			SingleVariableDeclaration decl= (SingleVariableDeclaration) arguments.get(0);
-			
-			SingleVariableDeclaration modifierNode= ast.newSingleVariableDeclaration();
-			modifierNode.setModifiers(Modifier.FINAL);
-			modifierNode.setExtraDimensions(1);
-			
-			rewrite.markAsModified(decl, modifierNode);
-			
-			ArrayType newVarType= ast.newArrayType(ast.newPrimitiveType(PrimitiveType.FLOAT), 2);
-			rewrite.markAsReplaced(decl.getType(), newVarType);
-			
-			Name newName= ast.newSimpleName("count");
-			rewrite.markAsReplaced(decl.getName(), newName);
-		}
-		{ // remove modifier, change type
-			SingleVariableDeclaration decl= (SingleVariableDeclaration) arguments.get(1);
-			
-			SingleVariableDeclaration modifierNode= ast.newSingleVariableDeclaration();
-			modifierNode.setModifiers(0);
-			modifierNode.setExtraDimensions(decl.getExtraDimensions()); // no change
-			
-			rewrite.markAsModified(decl, modifierNode);
-			
-			Type newVarType= ast.newPrimitiveType(PrimitiveType.FLOAT);
-			rewrite.markAsReplaced(decl.getType(), newVarType);
-		}
-		{ // remove extra dim
-			SingleVariableDeclaration decl= (SingleVariableDeclaration) arguments.get(2);
-			
-			SingleVariableDeclaration modifierNode= ast.newSingleVariableDeclaration();
-			modifierNode.setModifiers(decl.getModifiers()); // no change
-			modifierNode.setExtraDimensions(0); 
-			
-			rewrite.markAsModified(decl, modifierNode);
-		}			
-			
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo(final float[][] count[], float k, int[] x) {\n");
-		buf.append("    }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}	
-	
-	public void testVariableDeclarationFragment() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        int i, j, k= 0, x[][], y[]= {0, 1};\n");		
-		buf.append("    }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, false);
-		ASTRewrite rewrite= new ASTRewrite(astRoot);
-		
-		AST ast= astRoot.getAST();
-		
-		assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0);
-		TypeDeclaration type= findTypeDeclaration(astRoot, "E");
-
-		MethodDeclaration methodDecl= findMethodDeclaration(type, "foo");
-		Block block= methodDecl.getBody();
-		List statements= block.statements();
-		assertTrue("Number of statements not 1", statements.size() == 1);
-		
-		VariableDeclarationStatement variableDeclStatement= (VariableDeclarationStatement) statements.get(0);
-		List fragments= variableDeclStatement.fragments();
-		assertTrue("Number of fragments not 5", fragments.size() == 5);
-		
-		{ // rename var, add dimension
-			VariableDeclarationFragment fragment= (VariableDeclarationFragment) fragments.get(0);
-			
-			ASTNode name= ast.newSimpleName("a");
-			rewrite.markAsReplaced(fragment.getName(), name);
-			
-			VariableDeclarationFragment modifierNode= ast.newVariableDeclarationFragment();
-			modifierNode.setExtraDimensions(2);
-			
-			rewrite.markAsModified(fragment, modifierNode);
-		}
-		
-		{ // add initializer
-			VariableDeclarationFragment fragment= (VariableDeclarationFragment) fragments.get(1);
-			
-			Expression initializer= ast.newNumberLiteral("1");
-			rewrite.markAsInserted(initializer);
-			
-			assertTrue("Has initializer", fragment.getInitializer() == null);
-			fragment.setInitializer(initializer);
-		}
-		
-		{ // remove initializer
-			VariableDeclarationFragment fragment= (VariableDeclarationFragment) fragments.get(2);
-			
-			assertTrue("Has no initializer", fragment.getInitializer() != null);
-			rewrite.markAsRemoved(fragment.getInitializer());
-		}
-		{ // add dimension, add initializer
-			VariableDeclarationFragment fragment= (VariableDeclarationFragment) fragments.get(3);			
-			
-			VariableDeclarationFragment modifierNode= ast.newVariableDeclarationFragment();
-			modifierNode.setExtraDimensions(4);
-			
-			rewrite.markAsModified(fragment, modifierNode);
-
-			Expression initializer= ast.newNullLiteral();
-			rewrite.markAsInserted(initializer);
-			
-			assertTrue("Has initializer", fragment.getInitializer() == null);
-			fragment.setInitializer(initializer);			
-			
-		}
-		{ // remove dimension
-			VariableDeclarationFragment fragment= (VariableDeclarationFragment) fragments.get(4);			
-			
-			VariableDeclarationFragment modifierNode= ast.newVariableDeclarationFragment();
-			modifierNode.setExtraDimensions(0);
-			
-			rewrite.markAsModified(fragment, modifierNode);
-		}					
-			
-		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal("", cu, rewrite, 10, null);
-		proposal.getCompilationUnitChange().setSave(true);
-		
-		proposal.apply(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        int a[][], j = 1, k, x[][][][] = null, y= {0, 1};\n");		
-		buf.append("    }\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-		clearRewrite(rewrite);
-	}
-	
-}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/AddUnimplementedMethodsTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/AddUnimplementedMethodsTest.java
deleted file mode 100644
index f002869..0000000
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/AddUnimplementedMethodsTest.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.core;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.runtime.NullProgressMonitor;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IImportDeclaration;
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IMethod;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.IType;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-import org.eclipse.jdt.testplugin.TestPluginLauncher;
-
-import org.eclipse.jdt.internal.corext.codemanipulation.AddUnimplementedMethodsOperation;
-import org.eclipse.jdt.internal.corext.codemanipulation.CodeGenerationSettings;
-
-public class AddUnimplementedMethodsTest extends TestCase {
-	
-	private static final Class THIS= AddUnimplementedMethodsTest.class;
-	
-	private IJavaProject fJavaProject;
-	private IPackageFragment fPackage;
-	private IType fClassA, fInterfaceB, fClassC, fClassD, fInterfaceE;
-
-
-	public AddUnimplementedMethodsTest(String name) {
-		super(name);
-	}
-
-	public static void main(String[] args) {
-		TestPluginLauncher.run(TestPluginLauncher.getLocationFromProperties(), THIS, args);
-	}		
-		
-	public static Test suite() {
-		TestSuite suite= new TestSuite(THIS.getName());
-		suite.addTest(new AddUnimplementedMethodsTest("test1"));
-		suite.addTest(new AddUnimplementedMethodsTest("test2"));
-		suite.addTest(new AddUnimplementedMethodsTest("test3"));
-		suite.addTest(new AddUnimplementedMethodsTest("test4"));
-		return suite;
-	}
-	
-	/**
-	 * Creates a new test Java project.
-	 */	
-	protected void setUp() throws Exception {
-		fJavaProject= JavaProjectHelper.createJavaProject("DummyProject", "bin");
-		assertNotNull(JavaProjectHelper.addRTJar(fJavaProject));
-		
-		IPackageFragmentRoot root= JavaProjectHelper.addSourceContainer(fJavaProject, "src");
-		fPackage= root.createPackageFragment("ibm.util", true, null);
-		
-		ICompilationUnit cu= fPackage.getCompilationUnit("A.java");
-		fClassA= cu.createType("public abstract class A {\n}\n", null, true, null);
-		fClassA.createMethod("public abstract void a();\n", null, true, null);
-		fClassA.createMethod("public abstract void b(java.util.Vector v);\n", null, true, null);
-		
-		cu= fPackage.getCompilationUnit("B.java");
-		fInterfaceB= cu.createType("public interface B {\n}\n", null, true, null);
-		fInterfaceB.createMethod("void c(java.util.Hashtable h);\n", null, true, null);
-		
-		cu= fPackage.getCompilationUnit("C.java");
-		fClassC= cu.createType("public abstract class C {\n}\n", null, true, null);
-		fClassC.createMethod("public void c(java.util.Hashtable h) {\n}\n", null, true, null);
-		fClassC.createMethod("public abstract java.util.Enumeration d(java.util.Hashtable h) {\n}\n", null, true, null);
-
-
-		cu= fPackage.getCompilationUnit("D.java");
-		fClassD= cu.createType("public abstract class D extends C {\n}\n", null, true, null);
-		fClassD.createMethod("public abstract void c(java.util.Hashtable h);\n", null, true, null);
-		
-		cu= fPackage.getCompilationUnit("E.java");
-		fInterfaceE= cu.createType("public interface E {\n}\n", null, true, null);
-		fInterfaceE.createMethod("void c(java.util.Hashtable h);\n", null, true, null);
-		fInterfaceE.createMethod("void e() throws java.util.NoSuchElementException;\n", null, true, null);	
-	}
-
-
-	/**
-	 * Removes the test java project.
-	 */
-	protected void tearDown () throws Exception {
-		JavaProjectHelper.delete(fJavaProject);
-		fJavaProject= null;
-		fPackage= null;
-		fClassA= null;
-		fInterfaceB= null;
-		fClassC= null;
-		fClassD= null;
-		fInterfaceE= null;
-	}
-				
-	/*
-	 * basic test: extend an abstract class and an interface
-	 */
-	public void test1() throws Exception {	
-		ICompilationUnit cu= fPackage.getCompilationUnit("Test1.java");
-		IType testClass= cu.createType("public class Test1 extends A implements B {\n}\n", null, true, null);
-	
-		AddUnimplementedMethodsOperation op= new AddUnimplementedMethodsOperation(testClass, new CodeGenerationSettings(), null, true);
-		op.run(new NullProgressMonitor());
-		
-		IMethod[] methods= testClass.getMethods();
-		checkMethods(new String[] { "a", "b", "c" }, methods);
-		
-		IImportDeclaration[] imports= cu.getImports();
-		checkImports(new String[] { "java.util.Hashtable", "java.util.Vector" }, imports);	
-	}	
-	
-	/*
-	 * method c() of interface B is already implemented by class C
-	 */
-	public void test2() throws Exception {
-			
-		ICompilationUnit cu= fPackage.getCompilationUnit("Test2.java");
-		IType testClass= cu.createType("public class Test2 extends C implements B {\n}\n", null, true, null);
-		
-		AddUnimplementedMethodsOperation op= new AddUnimplementedMethodsOperation(testClass, new CodeGenerationSettings(), null, true);
-		op.run(new NullProgressMonitor());
-		
-		IMethod[] methods= testClass.getMethods();
-		checkMethods(new String[] { "d" }, methods);
-		
-		IImportDeclaration[] imports= cu.getImports();
-		checkImports(new String[] { "java.util.Enumeration", "java.util.Hashtable" }, imports);
-	}	
-
-
-	/*
-	 * method c() is implemented in C but made abstract again in class D
-	 */
-	public void test3() throws Exception {
-		ICompilationUnit cu= fPackage.getCompilationUnit("Test3.java");
-		IType testClass= cu.createType("public class Test3 extends D {\n}\n", null, true, null);
-		
-		AddUnimplementedMethodsOperation op= new AddUnimplementedMethodsOperation(testClass, new CodeGenerationSettings(), null, true);
-		op.run(new NullProgressMonitor());
-		
-		IMethod[] methods= testClass.getMethods();
-		checkMethods(new String[] { "c", "d" }, methods);
-		
-		IImportDeclaration[] imports= cu.getImports();
-		checkImports(new String[] { "java.util.Hashtable", "java.util.Enumeration" }, imports);
-		
-	}
-	
-	/*
-	 * method c() defined in both interfaces B and E
-	 */
-	public void test4() throws Exception {
-		ICompilationUnit cu= fPackage.getCompilationUnit("Test4.java");
-		IType testClass= cu.createType("public class Test4 implements B, E {\n}\n", null, true, null);
-		
-		AddUnimplementedMethodsOperation op= new AddUnimplementedMethodsOperation(testClass, new CodeGenerationSettings(), null, true);
-		op.run(new NullProgressMonitor());
-		
-		IMethod[] methods= testClass.getMethods();
-		checkMethods(new String[] { "c", "e" }, methods);
-		
-		IImportDeclaration[] imports= cu.getImports();
-	}
-	
-	private void checkMethods(String[] expected, IMethod[] methods) {
-		int nMethods= methods.length;
-		int nExpected= expected.length;
-		assertTrue("" + nExpected + " methods expected, is " + nMethods, nMethods == nExpected);
-		for (int i= 0; i < nExpected; i++) {
-			String methName= expected[i];
-			assertTrue("method " + methName + " expected", nameContained(methName, methods));
-		}
-	}			
-	
-	private void checkImports(String[] expected, IImportDeclaration[] imports) {
-		int nImports= imports.length;
-		int nExpected= expected.length;
-		assertTrue("" + nExpected + " imports expected, is " + nImports, nImports == nExpected);
-		for (int i= 0; i < nExpected; i++) {
-			String impName= expected[i];
-			assertTrue("import " + impName + " expected", nameContained(impName, imports));
-		}
-	}
-
-
-	private boolean nameContained(String methName, IJavaElement[] methods) {
-		for (int i= 0; i < methods.length; i++) {
-			if (methods[i].getElementName().equals(methName)) {
-				return true;
-			}
-		}
-		return false;
-	}	
-
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/AllTypesCacheTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/AllTypesCacheTest.java
deleted file mode 100644
index 3497401..0000000
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/AllTypesCacheTest.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.core;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.zip.ZipFile;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.runtime.Path;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.search.IJavaSearchConstants;
-import org.eclipse.jdt.core.search.IJavaSearchScope;
-import org.eclipse.jdt.core.search.SearchEngine;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-import org.eclipse.jdt.testplugin.JavaTestPlugin;
-import org.eclipse.jdt.testplugin.TestPluginLauncher;
-
-import org.eclipse.jdt.internal.corext.util.AllTypesCache;
-import org.eclipse.jdt.internal.corext.util.TypeInfo;
-
-
-public class AllTypesCacheTest extends TestCase {
-	
-	private static final Class THIS= AllTypesCacheTest.class;
-	
-	private IJavaProject fJProject1;
-	private IJavaProject fJProject2;
-	
-	private IPackageFragmentRoot fLibrary;
-	private IPackageFragmentRoot fSourceFolder;
-
-	public AllTypesCacheTest(String name) {
-		super(name);
-	}
-
-
-	public static void main(String[] args) {
-		TestPluginLauncher.run(TestPluginLauncher.getLocationFromProperties(), THIS, args);
-	}
-
-
-	public static Test suite() {
-		return new TestSuite(THIS);
-	}
-
-
-	protected void setUp() throws Exception {
-		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		assertNotNull("jre is null", JavaProjectHelper.addRTJar(fJProject1));
-		
-		File lib= JavaTestPlugin.getDefault().getFileInPlugin(JavaProjectHelper.MYLIB);
-		assertTrue("lib does not exist",  lib != null && lib.exists());
-		fLibrary= JavaProjectHelper.addLibrary(fJProject1, new Path(lib.getPath())); // add library to proj1
-		
-		
-		fJProject2= JavaProjectHelper.createJavaProject("TestProject2", "bin");
-		assertNotNull("jre is null", JavaProjectHelper.addRTJar(fJProject2));
-		
-		// add Junit source to project 2
-		File junitSrcArchive= JavaTestPlugin.getDefault().getFileInPlugin(JavaProjectHelper.JUNIT_SRC);
-		assertTrue("Junit source", junitSrcArchive != null && junitSrcArchive.exists());
-		ZipFile zipfile= new ZipFile(junitSrcArchive);
-		fSourceFolder= JavaProjectHelper.addSourceContainerWithImport(fJProject2, "src", zipfile);
-		
-	}
-
-	protected void tearDown() throws Exception {
-		JavaProjectHelper.delete(fJProject1);
-		JavaProjectHelper.delete(fJProject2);		
-		
-	}
-
-	public void testDifferentScopes() throws Exception {
-		IJavaSearchScope workspaceScope= SearchEngine.createWorkspaceScope();
-		IJavaSearchScope proj1Scope= SearchEngine.createJavaSearchScope(new IJavaElement[] { fJProject1 });
-		IJavaSearchScope proj2Scope= SearchEngine.createJavaSearchScope(new IJavaElement[] { fJProject2 });
-		
-		ArrayList res1= new ArrayList();
-		
-		AllTypesCache.getTypes(workspaceScope, IJavaSearchConstants.TYPE, null, res1);
-		assertTrue("542 types in workspace expected, is " + res1.size(), res1.size() == 542);
-		
-		int nFlushes= AllTypesCache.getNumberOfCacheFlushes();
-		
-		res1.clear();		
-		AllTypesCache.getTypes(workspaceScope, IJavaSearchConstants.INTERFACE, null, res1);
-		assertTrue("73 interfaces in workspace expected, is " + res1.size(), res1.size() == 73);
-		
-		assertTrue("unnecessary flush of cache", AllTypesCache.getNumberOfCacheFlushes() == nFlushes);	
-		
-		res1.clear();
-		AllTypesCache.getTypes(workspaceScope, IJavaSearchConstants.CLASS, null, res1);
-		assertTrue("469 classes in workspace expected, is " + res1.size(), res1.size() == 469);
-		
-		assertTrue("unnecessary flush of cache", AllTypesCache.getNumberOfCacheFlushes() == nFlushes);
-		
-		res1.clear();
-		AllTypesCache.getTypes(proj1Scope, IJavaSearchConstants.TYPE, null, res1);
-		assertTrue("471 types in proj1 expected, is " + res1.size(), res1.size() == 471);
-		
-		assertTrue("unnecessary flush of cache", AllTypesCache.getNumberOfCacheFlushes() == nFlushes);
-		
-		res1.clear();		
-		AllTypesCache.getTypes(proj1Scope, IJavaSearchConstants.INTERFACE, null, res1);
-		assertTrue("65 interfaces in proj1 expected, is " + res1.size(), res1.size() == 65);
-		
-		assertTrue("unnecessary flush of cache", AllTypesCache.getNumberOfCacheFlushes() == nFlushes);
-		
-		res1.clear();
-		AllTypesCache.getTypes(proj1Scope, IJavaSearchConstants.CLASS, null, res1);
-		assertTrue("406 classes in proj1 expected, is " + res1.size(), res1.size() == 406);
-		
-		assertTrue("unnecessary flush of cache", AllTypesCache.getNumberOfCacheFlushes() == nFlushes);
-		
-		res1.clear();
-		AllTypesCache.getTypes(proj2Scope, IJavaSearchConstants.TYPE, null, res1);
-		assertTrue("539 types in proj2 expected, is " + res1.size(), res1.size() == 539);
-		
-		assertTrue("unnecessary flush of cache", AllTypesCache.getNumberOfCacheFlushes() == nFlushes);
-		
-		res1.clear();		
-		AllTypesCache.getTypes(proj2Scope, IJavaSearchConstants.INTERFACE, null, res1);
-		assertTrue("73 interfaces in proj2 expected, is " + res1.size(), res1.size() == 73);
-		
-		assertTrue("unnecessary flush of cache", AllTypesCache.getNumberOfCacheFlushes() == nFlushes);
-		
-		res1.clear();
-		AllTypesCache.getTypes(proj2Scope, IJavaSearchConstants.CLASS, null, res1);
-		assertTrue("466 classes in proj2 expected, is " + res1.size(), res1.size() == 466);
-		
-		assertTrue("unnecessary flush of cache", AllTypesCache.getNumberOfCacheFlushes() == nFlushes);
-	}
-	
-	public void testClasspathChange() throws Exception {	
-		IJavaSearchScope workspaceScope= SearchEngine.createWorkspaceScope();
-		
-		ArrayList res1= new ArrayList();
-		
-		AllTypesCache.getTypes(workspaceScope, IJavaSearchConstants.TYPE, null, res1);
-		assertNotNull("mylib.Foo not found", findTypeRef(res1, "mylib.Foo"));
-		assertTrue("542 types expected, is " + res1.size(), res1.size() == 542);
-		
-		int nFlushes= AllTypesCache.getNumberOfCacheFlushes();
-		
-		JavaProjectHelper.removeFromClasspath(fJProject1, fLibrary.getPath());
-		
-		res1.clear();
-		AllTypesCache.getTypes(workspaceScope, IJavaSearchConstants.TYPE, null, res1);
-		assertNull("mylib.Foo still found", findTypeRef(res1, "mylib.Foo"));
-		
-		assertTrue("539 types in workspace expected, is " + res1.size(), res1.size() == 539);
-		
-		assertTrue("cache not flushed", nFlushes != AllTypesCache.getNumberOfCacheFlushes());
-	}
-	
-	public void testNewElementCreation() throws Exception {
-		IJavaSearchScope workspaceScope= SearchEngine.createWorkspaceScope();
-	
-		ArrayList res1= new ArrayList();
-		
-		AllTypesCache.getTypes(workspaceScope, IJavaSearchConstants.TYPE, null, res1);
-		assertTrue("542 types expected, is " + res1.size(), res1.size() == 542);
-		
-		int nFlushes= AllTypesCache.getNumberOfCacheFlushes();
-		
-		IPackageFragment pack= fSourceFolder.getPackageFragment("");
-		ICompilationUnit newCU= pack.getCompilationUnit("A.java");
-		IType type= newCU.createType("public class A {\n}\n", null, true, null);
-		
-		res1.clear();
-		AllTypesCache.getTypes(workspaceScope, IJavaSearchConstants.TYPE, null, res1);
-		assertNotNull("A not found", findTypeRef(res1, "A"));
-		
-		assertTrue("543 types in workspace expected, is " + res1.size(), res1.size() == 543);
-		
-		assertTrue("cache not flushed", nFlushes != AllTypesCache.getNumberOfCacheFlushes());
-		nFlushes= AllTypesCache.getNumberOfCacheFlushes();
-
-		// create a field: should not flush cache
-		type.createField("public int fCount;", null, true, null);
-
-		res1.clear();
-		AllTypesCache.getTypes(workspaceScope, IJavaSearchConstants.TYPE, null, res1);		
-		assertTrue("still 543 types in workspace expected, is " + res1.size(), res1.size() == 543);
-		
-		assertTrue("cache was flushed", nFlushes == AllTypesCache.getNumberOfCacheFlushes());
-
-		// create an inner type: should flush cache
-		type.createType("public class AInner {}", null, true, null);
-
-		res1.clear();
-		AllTypesCache.getTypes(workspaceScope, IJavaSearchConstants.TYPE, null, res1);		
-		assertNotNull("AInner not found", findTypeRef(res1, "A.AInner"));
-		assertTrue("still 544 types in workspace expected, is " + res1.size(), res1.size() == 544);
-		
-		assertTrue("cache not flushed after inner type creation", nFlushes != AllTypesCache.getNumberOfCacheFlushes());
-	}	
-	
-	
-	private TypeInfo findTypeRef(List refs, String fullname) {
-		for (int i= 0; i <refs.size(); i++) {
-			TypeInfo curr= (TypeInfo) refs.get(i);
-			if (fullname.equals(curr.getFullyQualifiedName())) {
-				return curr;
-			}
-		}
-		return null;
-	}
-		
-	
-}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ImportOrganizeTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ImportOrganizeTest.java
deleted file mode 100644
index cd41af7..0000000
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ImportOrganizeTest.java
+++ /dev/null
@@ -1,527 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.core;
-
-import java.io.File;
-import java.util.zip.ZipFile;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.runtime.Path;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IImportDeclaration;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.ISourceRange;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-import org.eclipse.jdt.testplugin.JavaTestPlugin;
-import org.eclipse.jdt.testplugin.TestPluginLauncher;
-
-import org.eclipse.jdt.internal.corext.codemanipulation.OrganizeImportsOperation;
-import org.eclipse.jdt.internal.corext.codemanipulation.OrganizeImportsOperation.IChooseImportQuery;
-import org.eclipse.jdt.internal.corext.util.TypeInfo;
-
-public class ImportOrganizeTest extends TestCase {
-	
-	private static final Class THIS= ImportOrganizeTest.class;
-	
-	private IJavaProject fJProject1;
-
-	public ImportOrganizeTest(String name) {
-		super(name);
-	}
-
-	public static void main(String[] args) {
-		TestPluginLauncher.run(TestPluginLauncher.getLocationFromProperties(), THIS, args);
-	}
-
-	public static Test suite() {
-		if (true) {
-			return new TestSuite(THIS);
-		} else {
-			TestSuite suite= new TestSuite();
-			suite.addTest(new ImportOrganizeTest("testReplaceImports"));
-			return suite;
-		}	
-	}
-
-
-	protected void setUp() throws Exception {
-		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		assertTrue("rt not found", JavaProjectHelper.addRTJar(fJProject1) != null);
-	}
-
-
-	protected void tearDown() throws Exception {
-		JavaProjectHelper.delete(fJProject1);
-	}
-	
-	private IChooseImportQuery createQuery(final String name, final String[] choices, final int[] nEntries) {
-		return new IChooseImportQuery() {
-			public TypeInfo[] chooseImports(TypeInfo[][] openChoices, ISourceRange[] ranges) {
-				assertTrue(name + "-query-nchoices1", choices.length == openChoices.length);
-				assertTrue(name + "-query-nchoices2", nEntries.length == openChoices.length);
-				if (nEntries != null) {
-					for (int i= 0; i < nEntries.length; i++) {
-						assertTrue(name + "-query-cnt" + i, openChoices[i].length == nEntries[i]);
-					}
-				}
-				TypeInfo[] res= new TypeInfo[openChoices.length];
-				for (int i= 0; i < openChoices.length; i++) {
-					TypeInfo[] selection= openChoices[i];
-					assertNotNull(name + "-query-setset" + i, selection);
-					assertTrue(name + "-query-setlen" + i, selection.length > 0);
-					TypeInfo found= null;
-					for (int k= 0; k < selection.length; k++) {
-						if (selection[k].getFullyQualifiedName().equals(choices[i])) {
-							found= selection[k];
-						}
-					}
-					assertNotNull(name + "-query-notfound" + i, found);
-					res[i]= found;
-				}
-				return res;
-			}
-		};
-	}
-	
-	private void assertImports(ICompilationUnit cu, String[] imports) throws Exception {
-		IImportDeclaration[] desc= cu.getImports();
-		assertTrue(cu.getElementName() + "-count", desc.length == imports.length);
-		for (int i= 0; i < imports.length; i++) {
-			assertEquals(cu.getElementName() + "-cmpentries" + i, desc[i].getElementName(), imports[i]);
-		}
-	}
-	
-	public void test1() throws Exception {
-		File junitSrcArchive= JavaTestPlugin.getDefault().getFileInPlugin(JavaProjectHelper.JUNIT_SRC);
-		assertTrue("junit src not found", junitSrcArchive != null && junitSrcArchive.exists());
-		ZipFile zipfile= new ZipFile(junitSrcArchive);
-		IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainerWithImport(fJProject1, "src", zipfile);
-
-
-		ICompilationUnit cu= (ICompilationUnit) fJProject1.findElement(new Path("junit/runner/BaseTestRunner.java"));
-		assertNotNull("BaseTestRunner.java", cu);
-		
-		IPackageFragmentRoot root= (IPackageFragmentRoot)cu.getParent().getParent();
-		IPackageFragment pack= root.createPackageFragment("mytest", true, null);
-		
-		ICompilationUnit colidingCU= pack.getCompilationUnit("TestListener.java");
-		colidingCU.createType("public abstract class TestListener {\n}\n", null, true, null);
-		
-		
-		String[] order= new String[0];
-		IChooseImportQuery query= createQuery("BaseTestRunner", new String[] { "junit.framework.TestListener" }, new int[] { 2 });
-		
-		OrganizeImportsOperation op= new OrganizeImportsOperation(cu, order, 99, false, true, true, query);
-		op.run(null);
-		
-		assertImports(cu, new String[] {
-			"java.io.BufferedReader",
-			"java.io.File",
-			"java.io.FileInputStream",
-			"java.io.IOException",
-			"java.io.InputStream",
-			"java.io.PrintWriter",
-			"java.io.StringReader",
-			"java.io.StringWriter",
-			"java.lang.reflect.InvocationTargetException",
-			"java.lang.reflect.Method",
-			"java.text.NumberFormat",
-			"java.util.Properties",
-			"junit.framework.Test",
-			"junit.framework.TestListener",
-			"junit.framework.TestSuite"
-		});
-	}
-		
-	public void test2() throws Exception {
-		File junitSrcArchive= JavaTestPlugin.getDefault().getFileInPlugin(JavaProjectHelper.JUNIT_SRC);
-		assertTrue("junit src not found", junitSrcArchive != null && junitSrcArchive.exists());
-		ZipFile zipfile= new ZipFile(junitSrcArchive);
-		IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainerWithImport(fJProject1, "src", zipfile);
-
-
-		ICompilationUnit cu= (ICompilationUnit) fJProject1.findElement(new Path("junit/runner/LoadingTestCollector.java"));
-		assertNotNull("LoadingTestCollector.java", cu);
-		
-		String[] order= new String[0];
-		IChooseImportQuery query= createQuery("LoadingTestCollector", new String[] { }, new int[] { });
-		
-		OrganizeImportsOperation op= new OrganizeImportsOperation(cu, order, 99, false, true, true, query);
-		op.run(null);
-		
-		assertImports(cu, new String[] {
-			"java.lang.reflect.Constructor",
-			"java.lang.reflect.Method",
-			"java.lang.reflect.Modifier",
-			"junit.framework.Test"	
-		});	
-	}
-	
-	
-	public void test3() throws Exception {
-		File junitSrcArchive= JavaTestPlugin.getDefault().getFileInPlugin(JavaProjectHelper.JUNIT_SRC);
-		assertTrue("junit src not found", junitSrcArchive != null && junitSrcArchive.exists());
-		ZipFile zipfile= new ZipFile(junitSrcArchive);
-		IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainerWithImport(fJProject1, "src", zipfile);
-
-		ICompilationUnit cu= (ICompilationUnit) fJProject1.findElement(new Path("junit/runner/TestCaseClassLoader.java"));
-		assertNotNull("TestCaseClassLoader.java", cu);
-		
-		String[] order= new String[0];
-		IChooseImportQuery query= createQuery("TestCaseClassLoader", new String[] { }, new int[] { });
-		
-		OrganizeImportsOperation op= new OrganizeImportsOperation(cu, order, 3, false, true, true, query);
-		op.run(null);
-		
-		assertImports(cu, new String[] {
-			"java.io.*",
-			"java.net.URL",
-			"java.util.*",
-			"java.util.zip.ZipEntry",
-			"java.util.zip.ZipFile",
-		});	
-	}
-		
-	public void test4() throws Exception {
-		File junitSrcArchive= JavaTestPlugin.getDefault().getFileInPlugin(JavaProjectHelper.JUNIT_SRC);
-		assertTrue("junit src not found", junitSrcArchive != null && junitSrcArchive.exists());
-		ZipFile zipfile= new ZipFile(junitSrcArchive);
-		IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainerWithImport(fJProject1, "src", zipfile);
-
-		ICompilationUnit cu= (ICompilationUnit) fJProject1.findElement(new Path("junit/textui/TestRunner.java"));
-		assertNotNull("TestRunner.java", cu);
-		
-		String[] order= new String[0];
-		IChooseImportQuery query= createQuery("TestRunner", new String[] {}, new int[] {});
-		
-		OrganizeImportsOperation op= new OrganizeImportsOperation(cu, order, 99, false, true, true, query);
-		op.run(null);
-		
-		assertImports(cu, new String[] {
-			"java.io.PrintStream",
-			"java.util.Enumeration",
-			"junit.framework.AssertionFailedError",
-			"junit.framework.Test",
-			"junit.framework.TestFailure",
-			"junit.framework.TestResult",
-			"junit.framework.TestSuite",
-			"junit.runner.BaseTestRunner",
-			"junit.runner.StandardTestSuiteLoader",
-			"junit.runner.TestSuiteLoader",
-			"junit.runner.Version"
-		});		
-	}
-	
-	public void testVariousTypeReferences() throws Exception {
-		IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
-
-		IPackageFragment pack= sourceFolder.createPackageFragment("test", false, null);
-		for (int ch= 'A'; ch < 'M'; ch++) {
-			String name= String.valueOf((char) ch);
-			ICompilationUnit cu= pack.getCompilationUnit(name + ".java");
-			String content= "public class " + name + " {}";
-			cu.createType(content, null, false, null);
-		}
-		for (int ch= 'A'; ch < 'M'; ch++) {
-			String name= "I" + String.valueOf((char) ch);
-			ICompilationUnit cu= pack.getCompilationUnit(name + ".java");
-			String content= "public interface " + name + " {}";
-			cu.createType(content, null, false, null);
-		}		
-		
-		StringBuffer buf= new StringBuffer();
-		buf.append("public class ImportTest extends A implements IA, IB {\n");
-		buf.append("  private B fB;\n");
-		buf.append("  private Object fObj= new C();\n");
-		buf.append("  public IB foo(IC c, ID d) throws IOException {\n");
-		buf.append("   Object local= (D) fObj;\n");
-		buf.append("   if (local instanceof E) {};\n");
-		buf.append("   return null;\n");
-		buf.append("  }\n");
-		buf.append("}\n");
-		
-		pack= sourceFolder.createPackageFragment("other", false, null);
-		ICompilationUnit cu= pack.getCompilationUnit("ImportTest.java");
-		cu.createType(buf.toString(), null, false, null);
-
-		String[] order= new String[0];
-		IChooseImportQuery query= createQuery("ImportTest", new String[] {}, new int[] {});
-	
-		OrganizeImportsOperation op= new OrganizeImportsOperation(cu, order, 99, false, true, true, query);
-		op.run(null);
-		
-		assertImports(cu, new String[] {
-			"java.io.IOException",
-			"test.A",
-			"test.B",
-			"test.C",
-			"test.D",
-			"test.E",			
-			"test.IA",
-			"test.IB",
-			"test.IC",
-			"test.ID",
-		});		
-	}
-	
-	public void testInnerClassVisibility() throws Exception {
-		IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
-		
-		IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class C {\n");
-		buf.append("  protected static class C1 {\n");
-		buf.append("    public static class C2 {\n");
-		buf.append("    }\n");
-		buf.append("  }\n");
-		buf.append("}\n");	
-		ICompilationUnit cu1= pack1.createCompilationUnit("C.java", buf.toString(), false, null);
-		
-		
-		IPackageFragment pack2= sourceFolder.createPackageFragment("test2", false, null);
-				
-		buf= new StringBuffer();
-		buf.append("package test2;\n");
-
-		buf.append("import test2.A.A1;\n");		
-		buf.append("import test2.A.A1.A2;\n");
-		buf.append("import test2.A.A1.A2.A3;\n");
-		buf.append("import test2.A.B1;\n");
-		buf.append("import test2.A.B1.B2;\n");
-		buf.append("import test1.C;\n");
-		buf.append("import test1.C.C1.C2;\n");
-		
-		buf.append("public class A {\n");
-		buf.append("    public static class A1 {\n");
-		buf.append("        public static class A2 {\n");
-		buf.append("            public static class A3 {\n");
-		buf.append("            }\n");
-		buf.append("        }\n");
-		buf.append("    }\n");
-		
-		buf.append("    public static class B1 {\n");
-		buf.append("        public static class B2 {\n");
-		buf.append("        }\n");
-		
-		buf.append("        public static class B3 {\n");
-		buf.append("            public static class B4 extends C {\n");
-		buf.append("                B4 b4;\n");
-		buf.append("                B3 b3;\n");
-		buf.append("                B2 b2;\n");
-		buf.append("                B1 b1;\n");
-		buf.append("                A1 a1;\n");
-		buf.append("                A2 a2;\n");
-		buf.append("                A3 a3;\n");
-		buf.append("                C1 c1;\n");
-		buf.append("                C2 c2;\n");
-		buf.append("            }\n");
-		buf.append("        }\n");
-		buf.append("    }\n");
-		ICompilationUnit cu2= pack2.createCompilationUnit("A.java", buf.toString(), false, null);
-
-
-		String[] order= new String[0];
-		IChooseImportQuery query= createQuery("A", new String[] {}, new int[] {});
-	
-		OrganizeImportsOperation op= new OrganizeImportsOperation(cu2, order, 99, false, true, true, query);
-		op.run(null);
-		
-		assertImports(cu2, new String[] {
-			"test1.C", 
-			"test1.C.C1.C2",
-			"test2.A.A1.A2", 
-			"test2.A.A1.A2.A3"
-		});
-	}
-	
-	private static final int printRange= 6;
-	
-	public static void assertEqualString(String str1, String str2) {	
-		int len1= Math.min(str1.length(), str2.length());
-		
-		int diffPos= -1;
-		for (int i= 0; i < len1; i++) {
-			if (str1.charAt(i) != str2.charAt(i)) {
-				diffPos= i;
-				break;
-			}
-		}
-		if (diffPos == -1 && str1.length() != str2.length()) {
-			diffPos= len1;
-		}
-		if (diffPos != -1) {
-			int diffAhead= Math.max(0, diffPos - printRange);
-			int diffAfter= Math.min(str1.length(), diffPos + printRange);
-			
-			String diffStr= str1.substring(diffAhead, diffPos) + '^' + str1.substring(diffPos, diffAfter);
-			
-			assertTrue("Content not as expected: is\n" + str1 + "\nDiffers at pos " + diffPos + ": " + diffStr + "\nexpected:\n" + str2, false);
-		}
-	}	
-	
-	public void testClearImports() throws Exception {
-		IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
-
-		IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.util.Vector;\n");		
-		buf.append("public class C {\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("C.java", buf.toString(), false, null);
-		
-		
-		String[] order= new String[0];
-		IChooseImportQuery query= createQuery("C", new String[] {}, new int[] {});
-	
-		OrganizeImportsOperation op= new OrganizeImportsOperation(cu, order, 99, false, true, true, query);
-		op.run(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class C {\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-	}
-	
-	public void testNewImports() throws Exception {
-		IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
-
-		IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class C extends Vector {\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("C.java", buf.toString(), false, null);
-		
-		
-		String[] order= new String[0];
-		IChooseImportQuery query= createQuery("C", new String[] {}, new int[] {});
-	
-		OrganizeImportsOperation op= new OrganizeImportsOperation(cu, order, 99, false, true, true, query);
-		op.run(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("\n");			
-		buf.append("import java.util.Vector;\n");
-		buf.append("\n");						
-		buf.append("public class C extends Vector {\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-	}
-	
-	public void testReplaceImports() throws Exception {
-		IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
-
-		IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("\n");			
-		buf.append("import java.util.Set;\n");
-		buf.append("\n");				
-		buf.append("public class C extends Vector {\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("C.java", buf.toString(), false, null);
-		
-		
-		String[] order= new String[0];
-		IChooseImportQuery query= createQuery("C", new String[] {}, new int[] {});
-	
-		OrganizeImportsOperation op= new OrganizeImportsOperation(cu, order, 99, false, true, true, query);
-		op.run(null);
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("\n");			
-		buf.append("import java.util.Vector;\n");
-		buf.append("\n");						
-		buf.append("public class C extends Vector {\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-	}	
-	
-	public void testClearImportsNoPackage() throws Exception {
-		IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
-
-		IPackageFragment pack1= sourceFolder.getPackageFragment("");
-		StringBuffer buf= new StringBuffer();
-		buf.append("import java.util.Vector;\n");		
-		buf.append("public class C {\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("C.java", buf.toString(), false, null);
-		
-		
-		String[] order= new String[0];
-		IChooseImportQuery query= createQuery("C", new String[] {}, new int[] {});
-	
-		OrganizeImportsOperation op= new OrganizeImportsOperation(cu, order, 99, false, true, true, query);
-		op.run(null);
-		
-		buf= new StringBuffer();
-		buf.append("public class C {\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-	}
-	
-	public void testNewImportsNoPackage() throws Exception {
-		IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
-
-		IPackageFragment pack1= sourceFolder.getPackageFragment("");
-		StringBuffer buf= new StringBuffer();
-		buf.append("public class C extends Vector {\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("C.java", buf.toString(), false, null);
-		
-		
-		String[] order= new String[0];
-		IChooseImportQuery query= createQuery("C", new String[] {}, new int[] {});
-	
-		OrganizeImportsOperation op= new OrganizeImportsOperation(cu, order, 99, false, true, true, query);
-		op.run(null);
-		
-		buf= new StringBuffer();
-		buf.append("import java.util.Vector;\n");
-		buf.append("\n");						
-		buf.append("public class C extends Vector {\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-	}
-	
-	public void testReplaceImportsNoPackage() throws Exception {
-		IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
-
-		IPackageFragment pack1= sourceFolder.getPackageFragment("");
-		StringBuffer buf= new StringBuffer();
-		buf.append("import java.util.Set;\n");
-		buf.append("\n");				
-		buf.append("public class C extends Vector {\n");
-		buf.append("}\n");	
-		ICompilationUnit cu= pack1.createCompilationUnit("C.java", buf.toString(), false, null);
-		
-		
-		String[] order= new String[0];
-		IChooseImportQuery query= createQuery("C", new String[] {}, new int[] {});
-	
-		OrganizeImportsOperation op= new OrganizeImportsOperation(cu, order, 99, false, true, true, query);
-		op.run(null);
-		
-		buf= new StringBuffer();
-		buf.append("import java.util.Vector;\n");
-		buf.append("\n");						
-		buf.append("public class C extends Vector {\n");
-		buf.append("}\n");	
-		assertEqualString(cu.getSource(), buf.toString());
-	}	
-	
-}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/JavaModelUtilTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/JavaModelUtilTest.java
deleted file mode 100644
index e3b9e30..0000000
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/JavaModelUtilTest.java
+++ /dev/null
@@ -1,375 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.core;
-
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.zip.ZipFile;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
-
-import org.eclipse.jdt.core.IClasspathEntry;
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IMember;
-import org.eclipse.jdt.core.IMethod;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.IType;
-
-import org.eclipse.jdt.core.ITypeHierarchy;
-import org.eclipse.jdt.core.Signature;
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-import org.eclipse.jdt.testplugin.JavaTestPlugin;
-import org.eclipse.jdt.testplugin.TestPluginLauncher;
-
-import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
-
-public class JavaModelUtilTest extends TestCase {
-	
-	private static final Class THIS= JavaModelUtilTest.class;
-	
-	private IJavaProject fJProject1;
-	private IJavaProject fJProject2;
-
-	private static final IPath LIB= new Path("testresources/mylib.jar");
-
-	public JavaModelUtilTest(String name) {
-		super(name);
-	}
-
-	public static void main(String[] args) {
-		TestPluginLauncher.run(TestPluginLauncher.getLocationFromProperties(), THIS, args);
-	}
-
-
-	public static Test suite() {
-		return new TestSuite(THIS);
-	}
-
-
-	protected void setUp() throws Exception {
-		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		fJProject2= JavaProjectHelper.createJavaProject("TestProject2", "bin");
-
-		IPackageFragmentRoot jdk= JavaProjectHelper.addVariableRTJar(fJProject1, "JRE_LIB_TEST", null, null);
-		assertTrue("jdk not found", jdk != null);
-
-		File junitSrcArchive= JavaTestPlugin.getDefault().getFileInPlugin(JavaProjectHelper.JUNIT_SRC);
-		assertTrue("junit src not found", junitSrcArchive != null && junitSrcArchive.exists());
-		ZipFile zipfile= new ZipFile(junitSrcArchive);
-		JavaProjectHelper.addSourceContainerWithImport(fJProject1, "src", zipfile);
-
-		File mylibJar= JavaTestPlugin.getDefault().getFileInPlugin(LIB);
-		assertTrue("lib not found", junitSrcArchive != null && junitSrcArchive.exists());
-		
-		JavaProjectHelper.addLibraryWithImport(fJProject1, new Path(mylibJar.getPath()), null, null);
-
-		JavaProjectHelper.addVariableEntry(fJProject2, new Path("JRE_LIB_TEST"), null, null);
-
-		IPackageFragmentRoot root1= JavaProjectHelper.addSourceContainer(fJProject2, "src");
-		IPackageFragment pack1= root1.createPackageFragment("pack1", true, null);
-		
-		ICompilationUnit cu1= pack1.getCompilationUnit("ReqProjType.java");
-		IType type1= cu1.createType("public class ReqProjType { static class Inner { static class InnerInner {} }\n}\n", null, true, null);
-
-		JavaProjectHelper.addRequiredProject(fJProject1, fJProject2);
-	}
-
-
-	protected void tearDown() throws Exception {
-		JavaProjectHelper.delete(fJProject1);
-		JavaProjectHelper.delete(fJProject2);
-	}
-
-
-	private void assertElementName(String name, IJavaElement elem, int type) {
-		assertNotNull(name, elem);
-		assertEquals(name + "-name", name, elem.getElementName());
-		assertTrue(name + "-type", type == elem.getElementType());
-	}
-
-	public void testFindType() throws Exception {
-		IType type= JavaModelUtil.findType(fJProject1, "junit.extensions.ExceptionTestCase");
-		assertElementName("ExceptionTestCase", type, IJavaElement.TYPE);
-
-		type= JavaModelUtil.findType(fJProject1, "junit.samples.money.IMoney");
-		assertElementName("IMoney", type, IJavaElement.TYPE);	
-
-		type= JavaModelUtil.findType(fJProject1, "junit.tests.TestCaseTest.TornDown");
-		assertElementName("TornDown", type, IJavaElement.TYPE);
-		
-		type= JavaModelUtil.findType(fJProject1, "mylib.Foo");
-		assertElementName("Foo", type, IJavaElement.TYPE);
-		
-		type= JavaModelUtil.findType(fJProject1, "mylib.Foo.FooInner");
-		assertElementName("FooInner", type, IJavaElement.TYPE);
-		
-		type= JavaModelUtil.findType(fJProject1, "mylib.Foo.FooInner.FooInnerInner");
-		assertElementName("FooInnerInner", type, IJavaElement.TYPE);
-		
-		type= JavaModelUtil.findType(fJProject1, "pack1.ReqProjType");
-		assertElementName("ReqProjType", type, IJavaElement.TYPE);
-		
-		type= JavaModelUtil.findType(fJProject1, "pack1.ReqProjType.Inner");
-		assertElementName("Inner", type, IJavaElement.TYPE);	
-
-		type= JavaModelUtil.findType(fJProject1, "pack1.ReqProjType.Inner.InnerInner");
-		assertElementName("InnerInner", type, IJavaElement.TYPE);	
-	}
-	
-	public void testFindType2() throws Exception {
-		IType type= JavaModelUtil.findType(fJProject1, "junit.extensions", "ExceptionTestCase");
-		assertElementName("ExceptionTestCase", type, IJavaElement.TYPE);
-
-		type= JavaModelUtil.findType(fJProject1, "junit.samples.money" , "IMoney");
-		assertElementName("IMoney", type, IJavaElement.TYPE);	
-
-		type= JavaModelUtil.findType(fJProject1, "junit.tests", "TestCaseTest.TornDown");
-		assertElementName("TornDown", type, IJavaElement.TYPE);
-		
-		type= JavaModelUtil.findType(fJProject1, "mylib" , "Foo");
-		assertElementName("Foo", type, IJavaElement.TYPE);
-		
-		type= JavaModelUtil.findType(fJProject1, "mylib", "Foo.FooInner");
-		assertElementName("FooInner", type, IJavaElement.TYPE);
-		
-		type= JavaModelUtil.findType(fJProject1, "mylib", "Foo.FooInner.FooInnerInner");
-		assertElementName("FooInnerInner", type, IJavaElement.TYPE);
-		
-		type= JavaModelUtil.findType(fJProject1, "pack1", "ReqProjType");
-		assertElementName("ReqProjType", type, IJavaElement.TYPE);
-		
-		type= JavaModelUtil.findType(fJProject1, "pack1", "ReqProjType.Inner");
-		assertElementName("Inner", type, IJavaElement.TYPE);	
-
-		type= JavaModelUtil.findType(fJProject1, "pack1", "ReqProjType.Inner.InnerInner");
-		assertElementName("InnerInner", type, IJavaElement.TYPE);				
-	}
-	
-	public void testFindTypeContainer() throws Exception {
-		IJavaElement elem= JavaModelUtil.findTypeContainer(fJProject1, "junit.extensions");
-		assertElementName("junit.extensions", elem, IJavaElement.PACKAGE_FRAGMENT);
-
-		elem= JavaModelUtil.findTypeContainer(fJProject1, "junit.tests.TestCaseTest");
-		assertElementName("TestCaseTest", elem, IJavaElement.TYPE);
-		
-		elem= JavaModelUtil.findTypeContainer(fJProject1, "mylib" );
-		assertElementName("mylib", elem, IJavaElement.PACKAGE_FRAGMENT);
-		
-		elem= JavaModelUtil.findTypeContainer(fJProject1, "mylib.Foo");
-		assertElementName("Foo", elem, IJavaElement.TYPE);
-		
-		elem= JavaModelUtil.findTypeContainer(fJProject1, "mylib.Foo.FooInner");
-		assertElementName("FooInner", elem, IJavaElement.TYPE);
-		
-		elem= JavaModelUtil.findTypeContainer(fJProject1, "pack1");
-		assertElementName("pack1", elem, IJavaElement.PACKAGE_FRAGMENT);
-		
-		elem= JavaModelUtil.findTypeContainer(fJProject1, "pack1.ReqProjType");
-		assertElementName("ReqProjType", elem, IJavaElement.TYPE);	
-
-		elem= JavaModelUtil.findTypeContainer(fJProject1, "pack1.ReqProjType.Inner");
-		assertElementName("Inner", elem, IJavaElement.TYPE);				
-	}
-	
-	public void testFindTypeInCompilationUnit() throws Exception {
-		ICompilationUnit cu= (ICompilationUnit) fJProject1.findElement(new Path("junit/tests/TestCaseTest.java"));
-		assertElementName("TestCaseTest.java", cu, IJavaElement.COMPILATION_UNIT);
-		
-		IType type= JavaModelUtil.findTypeInCompilationUnit(cu, "TestCaseTest");
-		assertElementName("TestCaseTest", type, IJavaElement.TYPE);
-		
-		type= JavaModelUtil.findTypeInCompilationUnit(cu, "TestCaseTest.TornDown");
-		assertElementName("TornDown", type, IJavaElement.TYPE);
-		
-		cu= (ICompilationUnit) fJProject1.findElement(new Path("pack1/ReqProjType.java"));
-		assertElementName("ReqProjType.java", cu, IJavaElement.COMPILATION_UNIT);
-		
-		type= JavaModelUtil.findTypeInCompilationUnit(cu, "ReqProjType");
-		assertElementName("ReqProjType", type, IJavaElement.TYPE);
-		
-		type= JavaModelUtil.findTypeInCompilationUnit(cu, "ReqProjType.Inner");
-		assertElementName("Inner", type, IJavaElement.TYPE);
-		
-		type= JavaModelUtil.findTypeInCompilationUnit(cu, "ReqProjType.Inner.InnerInner");
-		assertElementName("InnerInner", type, IJavaElement.TYPE);		
-	}
-	
-	public void testFindMemberInCompilationUnit() throws Exception {
-		ICompilationUnit cu= (ICompilationUnit) fJProject1.findElement(new Path("junit/tests/TestCaseTest.java"));
-		assertElementName("TestCaseTest.java", cu, IJavaElement.COMPILATION_UNIT);
-		ArrayList children= new ArrayList();
-		
-		IType type= JavaModelUtil.findTypeInCompilationUnit(cu, "TestCaseTest");
-		assertElementName("TestCaseTest", type, IJavaElement.TYPE);
-		
-		children.addAll(Arrays.asList(type.getChildren()));
-		
-		type= JavaModelUtil.findTypeInCompilationUnit(cu, "TestCaseTest.TornDown");
-		assertElementName("TornDown", type, IJavaElement.TYPE);
-		
-		children.addAll(Arrays.asList(type.getChildren()));
-		
-		assertTrue("a", children.size() == 19);
-
-		for (int i= 0; i < children.size(); i++) {
-			Object curr= children.get(i);
-			assertTrue("b", curr instanceof IMember);
-			IMember member= JavaModelUtil.findMemberInCompilationUnit(cu, (IMember) curr);
-			assertEquals("b-" + i, curr, member);
-		}
-	}
-	
-	private void assertClasspathEntry(String name, IJavaElement elem, IPath path, int type) throws Exception {
-		IPackageFragmentRoot root= JavaModelUtil.getPackageFragmentRoot(elem);
-		assertNotNull(name + "-noroot", root);
-		IClasspathEntry entry= JavaModelUtil.getRawClasspathEntry(root);
-		assertNotNull(name + "-nocp", entry);
-		assertEquals(name + "-wrongpath", entry.getPath(), path);
-		assertTrue(name + "-wrongtype", type == entry.getEntryKind());
-	}
-	
-	public void testGetRawClasspathEntry() throws Exception {
-		IType type= JavaModelUtil.findType(fJProject1, "junit.extensions.ExceptionTestCase");
-		assertElementName("ExceptionTestCase", type, IJavaElement.TYPE);
-		IPath path= fJProject1.getProject().getFullPath().append("src");
-		assertClasspathEntry("ExceptionTestCase", type, path, IClasspathEntry.CPE_SOURCE);
-		
-		type= JavaModelUtil.findType(fJProject1, "mylib.Foo");
-		assertElementName("Foo", type, IJavaElement.TYPE);
-		path= fJProject1.getProject().getFullPath().append(LIB.lastSegment());
-		assertClasspathEntry("Foo", type, path, IClasspathEntry.CPE_LIBRARY);
-		
-		type= JavaModelUtil.findType(fJProject1, "java.lang.Object");
-		assertElementName("Object", type, IJavaElement.TYPE);
-		path= new Path("JRE_LIB_TEST");
-		assertClasspathEntry("Object", type, path, IClasspathEntry.CPE_VARIABLE);
-	
-		type= JavaModelUtil.findType(fJProject1, "pack1.ReqProjType");
-		assertElementName("ReqProjType", type, IJavaElement.TYPE);
-		path= fJProject2.getProject().getFullPath().append("src");
-		assertClasspathEntry("ReqProjType", type, path, IClasspathEntry.CPE_SOURCE);		
-	}
-	
-	public void testIsOnBuildPath() throws Exception {
-		IType type= JavaModelUtil.findType(fJProject1, "junit.extensions.ExceptionTestCase");
-		assertElementName("ExceptionTestCase", type, IJavaElement.TYPE);
-		assertTrue("ExceptionTestCase-bp1", JavaModelUtil.isOnBuildPath(fJProject1, type));
-		assertTrue("ExceptionTestCase-bp2", !JavaModelUtil.isOnBuildPath(fJProject2, type));
-		
-		type= JavaModelUtil.findType(fJProject1, "java.lang.Object");
-		assertElementName("Object", type, IJavaElement.TYPE);		
-		assertTrue("Object-bp1", JavaModelUtil.isOnBuildPath(fJProject1, type));
-		// relies on shared objects for library entries
-		assertTrue("Object-bp2", JavaModelUtil.isOnBuildPath(fJProject2, type));			
-		
-		type= JavaModelUtil.findType(fJProject1, "pack1.ReqProjType");
-		assertElementName("ReqProjType", type, IJavaElement.TYPE);
-		assertTrue("ReqProjType-bp1", JavaModelUtil.isOnBuildPath(fJProject1, type));
-		// relies on shared objects for project entries
-		assertTrue("ReqProjType-bp2", JavaModelUtil.isOnBuildPath(fJProject2, type));		
-	}
-	
-	private void assertFindMethod(String methName, String[] paramTypeNames, boolean isConstructor, IType type) throws Exception {
-		String[] sig= new String[paramTypeNames.length];
-		for (int i= 0; i < paramTypeNames.length; i++) {
-			// create as unresolved
-			String name= Signature.getSimpleName(paramTypeNames[i]);
-			sig[i]= Signature.createTypeSignature(name, false);
-			assertNotNull(methName + "-ts1" + i, sig[i]);
-		}
-		IMethod meth= JavaModelUtil.findMethod(methName, sig, isConstructor, type);
-		assertElementName(methName, meth, IJavaElement.METHOD);
-		assertTrue("methName-nparam1", meth.getParameterTypes().length == paramTypeNames.length);
-		
-		for (int i= 0; i < paramTypeNames.length; i++) {
-			// create as resolved
-			sig[i]= Signature.createTypeSignature(paramTypeNames[i], true);
-			assertNotNull(methName + "-ts2" + i, sig[i]);
-		}		
-		meth= JavaModelUtil.findMethod(methName, sig, isConstructor, type);
-		assertElementName(methName, meth, IJavaElement.METHOD);
-		assertTrue("methName-nparam2", meth.getParameterTypes().length == paramTypeNames.length);
-	}
-	
-	public void testFindMethod() throws Exception {
-		IType type= JavaModelUtil.findType(fJProject1, "junit.framework.Assert");
-		assertElementName("Assert", type, IJavaElement.TYPE);
-		
-		assertFindMethod("assertNotNull", new String[] { "java.lang.Object" }, false, type);
-		assertFindMethod("assertNotNull", new String[] { "java.lang.String", "java.lang.Object" }, false, type);
-		assertFindMethod("assertEquals", new String[] { "java.lang.String", "double", "double", "double" }, false, type);
-		assertFindMethod("assertEquals", new String[] { "java.lang.String", "long", "long" }, false, type);
-		assertFindMethod("Assert", new String[0], true, type);
-
-		type= JavaModelUtil.findType(fJProject1, "junit.samples.money.MoneyTest");
-		assertElementName("MoneyTest", type, IJavaElement.TYPE);
-
-		assertFindMethod("main", new String[] { "java.lang.String[]" }, false, type);
-		assertFindMethod("setUp", new String[0] , false, type);
-		assertFindMethod("MoneyTest", new String[] { "java.lang.String" } , true, type);
-	}
-
-	private void assertFindMethodInHierarchy(String methName, String[] paramTypeNames, boolean isConstructor, IType type, String declaringTypeName) throws Exception {
-		ITypeHierarchy hierarchy= type.newSupertypeHierarchy(null);
-		
-		String[] sig= new String[paramTypeNames.length];
-		for (int i= 0; i < paramTypeNames.length; i++) {
-			// create as unresolved
-			String name= Signature.getSimpleName(paramTypeNames[i]);
-			sig[i]= Signature.createTypeSignature(name, false);
-			assertNotNull(methName + "-ts1" + i, sig[i]);
-		}
-		IMethod meth= JavaModelUtil.findMethodDeclarationInHierarchy(hierarchy, type, methName, sig, isConstructor);
-		assertElementName(methName, meth, IJavaElement.METHOD);
-		assertTrue("methName-nparam1", meth.getParameterTypes().length == paramTypeNames.length);
-		assertEquals("methName-decltype", declaringTypeName, JavaModelUtil.getFullyQualifiedName(meth.getDeclaringType()));
-		
-		for (int i= 0; i < paramTypeNames.length; i++) {
-			// create as resolved
-			sig[i]= Signature.createTypeSignature(paramTypeNames[i], true);
-			assertNotNull(methName + "-ts2" + i, sig[i]);
-		}		
-		meth= JavaModelUtil.findMethodDeclarationInHierarchy(hierarchy, type, methName, sig, isConstructor);
-		assertElementName(methName, meth, IJavaElement.METHOD);
-		assertTrue("methName-nparam2", meth.getParameterTypes().length == paramTypeNames.length);
-		assertEquals("methName-decltype", declaringTypeName, JavaModelUtil.getFullyQualifiedName(meth.getDeclaringType()));
-	}
-
-	public void testFindMethodInHierarchy() throws Exception {
-		IType type= JavaModelUtil.findType(fJProject1, "junit.extensions.TestSetup");
-		assertElementName("TestSetup", type, IJavaElement.TYPE);		
-		
-		assertFindMethodInHierarchy("run", new String[] { "junit.framework.TestResult" }, false, type, "junit.framework.Test");
-		assertFindMethodInHierarchy("toString", new String[] {} , false, type, "java.lang.Object");
-	}
-	
-	public void testHasMainMethod() throws Exception {
-		IType type= JavaModelUtil.findType(fJProject1, "junit.samples.money.MoneyTest");
-		assertElementName("MoneyTest", type, IJavaElement.TYPE);
-		
-		assertTrue("MoneyTest-nomain", JavaModelUtil.hasMainMethod(type));
-		
-		type= JavaModelUtil.findType(fJProject1, "junit.framework.TestResult");
-		assertElementName("TestResult", type, IJavaElement.TYPE);
-		
-		assertTrue("TestResult-hasmain", !JavaModelUtil.hasMainMethod(type));
-		
-		type= JavaModelUtil.findType(fJProject1, "junit.samples.VectorTest");
-		assertElementName("VectorTest", type, IJavaElement.TYPE);
-		
-		assertTrue("VectorTest-nomain", JavaModelUtil.hasMainMethod(type));
-	}
-	
-}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/TextBufferTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/TextBufferTest.java
deleted file mode 100644
index ec65276..0000000
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/TextBufferTest.java
+++ /dev/null
@@ -1,736 +0,0 @@
-/*
- * Copyright (c) 2002 IBM Corp.  All rights reserved.
- * This file is made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- */
-
-package org.eclipse.jdt.ui.tests.core;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite; 
-
-import org.eclipse.core.runtime.IStatus;
-
-import org.eclipse.jdt.internal.corext.textmanipulation.CopySourceEdit;
-import org.eclipse.jdt.internal.corext.textmanipulation.CopyTargetEdit;
-import org.eclipse.jdt.internal.corext.textmanipulation.MoveSourceEdit;
-import org.eclipse.jdt.internal.corext.textmanipulation.MoveTargetEdit;
-import org.eclipse.jdt.internal.corext.textmanipulation.MultiTextEdit;
-import org.eclipse.jdt.internal.corext.textmanipulation.NopTextEdit;
-import org.eclipse.jdt.internal.corext.textmanipulation.SimpleTextEdit;
-import org.eclipse.jdt.internal.corext.textmanipulation.TextBuffer;
-import org.eclipse.jdt.internal.corext.textmanipulation.TextBufferEditor;
-import org.eclipse.jdt.internal.corext.textmanipulation.TextRange;
-import org.eclipse.jdt.internal.corext.textmanipulation.UndoMemento;
-
-import org.eclipse.jdt.testplugin.TestPluginLauncher;
-
-public class TextBufferTest extends TestCase {
-
-	private static final Class THIS= TextBufferTest.class;
-	
-	private TextBuffer fBuffer;
-	private TextBufferEditor fEditor;
-	
-	public TextBufferTest(String name) {
-		super(name);
-	}
-	
-	public static void main(String[] args) {
-		TestPluginLauncher.run(TestPluginLauncher.getLocationFromProperties(), THIS, args);
-	}
-
-	public static Test suite() {
-		TestSuite result= new TestSuite(THIS);
-		if (false) {	// For hot code replace when debugging test cases
-			result.addTestSuite(THIS);
-			result.addTestSuite(THIS);
-			result.addTestSuite(THIS);
-			result.addTestSuite(THIS);
-			result.addTestSuite(THIS);
-			result.addTestSuite(THIS);
-		}
-		return result;
-	}
-	
-	protected void setUp() throws Exception {
-		fBuffer= TextBuffer.create("0123456789");
-		fEditor= new TextBufferEditor(fBuffer);
-	}
-	
-	protected void tearDown() throws Exception {
-		fEditor= null;
-	}
-	
-	public void testOverlap1() throws Exception {
-		// [ [ ] ]
-		fEditor.add(SimpleTextEdit.createReplace(0, 2, "01"));
-		fEditor.add(SimpleTextEdit.createReplace(1, 2, "12"));
-		assertFalse(fEditor.canPerformEdits());
-	}	
-	
-	public void testOverlap2() throws Exception {
-		// [[ ] ]
-		fEditor.add(SimpleTextEdit.createReplace(0, 2, "01"));
-		fEditor.add(SimpleTextEdit.createReplace(0, 1, "0"));
-		assertFalse(fEditor.canPerformEdits());
-	}	
-	
-	public void testOverlap3() throws Exception {
-		// [ [ ]]
-		fEditor.add(SimpleTextEdit.createReplace(0, 2, "01"));
-		fEditor.add(SimpleTextEdit.createReplace(1, 1, "1"));
-		assertFalse(fEditor.canPerformEdits());
-	}	
-	
-	public void testOverlap4() throws Exception {
-		// [ [ ] ]
-		fEditor.add(SimpleTextEdit.createReplace(0, 3, "012"));
-		fEditor.add(SimpleTextEdit.createReplace(1, 1, "1"));
-		assertFalse(fEditor.canPerformEdits());
-	}
-	
-	public void testOverlap5() throws Exception {
-		// [ []  ]
-		fEditor.add(SimpleTextEdit.createReplace(0, 3, "012"));
-		fEditor.add(SimpleTextEdit.createInsert(1, "xx"));
-		assertFalse(fEditor.canPerformEdits());
-	}
-	
-	public void testOverlap6() throws Exception {
-		// [  [] ]
-		fEditor.add(SimpleTextEdit.createReplace(0, 3, "012"));
-		fEditor.add(SimpleTextEdit.createInsert(2, "xx"));
-		assertFalse(fEditor.canPerformEdits());
-	}
-	
-	public void testOverlap7() throws Exception {
-		MoveSourceEdit source= new MoveSourceEdit(2, 5);
-		MoveTargetEdit target= new MoveTargetEdit(3, source);
-		fEditor.add(source);
-		fEditor.add(target);
-		assertFalse(fEditor.canPerformEdits());
-	}
-	
-	public void testOverlap8() throws Exception {
-		MoveSourceEdit source= new MoveSourceEdit(2, 5);
-		MoveTargetEdit target= new MoveTargetEdit(6, source);
-		fEditor.add(source);
-		fEditor.add(target);
-		assertFalse(fEditor.canPerformEdits());
-	}
-	
-	public void testOverlap9() throws Exception {
-		MoveSourceEdit s1= new MoveSourceEdit(3, 1);
-		MoveTargetEdit t1= new MoveTargetEdit(7, s1);
-		MoveSourceEdit s2= new MoveSourceEdit(2, 3);
-		MoveTargetEdit t2= new MoveTargetEdit(8, s2);
-		fEditor.add(s1);
-		fEditor.add(t1);
-		fEditor.add(s2);
-		fEditor.add(t2);
-		assertFalse(fEditor.canPerformEdits());
-	}
-		
-	public void testInsert1() throws Exception {
-		// [][  ]
-		SimpleTextEdit e1= SimpleTextEdit.createInsert(2, "yy");
-		SimpleTextEdit e2= SimpleTextEdit.createReplace(2, 3, "3456");
-		fEditor.add(e1);
-		fEditor.add(e2);
-		assertTrue(fEditor.canPerformEdits());
-		UndoMemento undo= fEditor.performEdits(null);
-		assertEquals(e1.getTextRange(), 2, 2);
-		assertEquals(e2.getTextRange(), 4, 4);
-		assertEquals("Buffer content", "01yy345656789", fBuffer.getContent());
-		doUndoRedo(undo, "01yy345656789");
-	}
-	
-	public void testInsert2() throws Exception {
-		// [][]
-		SimpleTextEdit e1= SimpleTextEdit.createInsert(2, "yy");
-		SimpleTextEdit e2= SimpleTextEdit.createInsert(2, "xx");
-		fEditor.add(e1);
-		fEditor.add(e2);
-		assertTrue(fEditor.canPerformEdits());
-		UndoMemento undo= fEditor.performEdits(null);
-		assertEquals(e1.getTextRange(), 2, 2);
-		assertEquals(e2.getTextRange(), 4, 2);
-		assertEquals("Buffer content", "01yyxx23456789", fBuffer.getContent());
-		doUndoRedo(undo, "01yyxx23456789");
-	}
-	
-	public void testInsert3() throws Exception {
-		// [  ][][  ]
-		SimpleTextEdit e1= SimpleTextEdit.createReplace(0, 2, "011");
-		SimpleTextEdit e2= SimpleTextEdit.createInsert(2, "xx");
-		SimpleTextEdit e3= SimpleTextEdit.createReplace(2, 2, "2");
-		fEditor.add(e1);
-		fEditor.add(e2);
-		fEditor.add(e3);
-		assertTrue(fEditor.canPerformEdits());
-		UndoMemento undo= fEditor.performEdits(null);
-		assertEquals(e1.getTextRange(), 0, 3);
-		assertEquals(e2.getTextRange(), 3, 2);
-		assertEquals(e3.getTextRange(), 5, 1);
-		assertEquals("Buffer content", "011xx2456789", fBuffer.getContent());
-		doUndoRedo(undo, "011xx2456789");
-	}
-	
-	public void testInsert4() throws Exception {
-		SimpleTextEdit e1= SimpleTextEdit.createInsert(0, "xx");
-		fEditor.add(e1);
-		assertTrue(fEditor.canPerformEdits());
-		UndoMemento undo= fEditor.performEdits(null);
-		assertEquals("Buffer length", 12, fBuffer.getLength());
-		assertEquals(e1.getTextRange(), 0, 2);
-		assertEquals("Buffer content", "xx0123456789", fBuffer.getContent());
-		doUndoRedo(undo, "xx0123456789");
-	}
-	
-	public void testInsert5() throws Exception {
-		SimpleTextEdit e1= SimpleTextEdit.createInsert(10, "xx");
-		fEditor.add(e1);
-		assertTrue(fEditor.canPerformEdits());
-		UndoMemento undo= fEditor.performEdits(null);
-		assertEquals("Buffer length", 12, fBuffer.getLength());
-		assertEquals(e1.getTextRange(), 10, 2);
-		assertEquals("Buffer content", "0123456789xx", fBuffer.getContent());
-		doUndoRedo(undo, "0123456789xx");
-	}
-	
-	public void testInsertReplace1() throws Exception {
-		SimpleTextEdit e1= SimpleTextEdit.createReplace(2, 1, "y");
-		SimpleTextEdit e2= SimpleTextEdit.createInsert(2, "xx");
-		fEditor.add(e1);
-		fEditor.add(e2);
-		assertTrue(fEditor.canPerformEdits());
-		UndoMemento undo= fEditor.performEdits(null);
-		assertEquals(e1.getTextRange(), 4, 1);
-		assertEquals(e2.getTextRange(), 2, 2);
-		assertEquals("Buffer content", "01xxy3456789", fBuffer.getContent());
-		doUndoRedo(undo, "01xxy3456789");
-	}
-	
-	public void testDelete1() throws Exception {
-		SimpleTextEdit e1= SimpleTextEdit.createDelete(3, 1);
-		fEditor.add(e1);
-		assertTrue("Can perform edits", fEditor.canPerformEdits());
-		UndoMemento undo= fEditor.performEdits(null);
-		assertEquals(e1.getTextRange(), 3, 0);
-		assertEquals("Buffer content", "012456789", fBuffer.getContent());
-		doUndoRedo(undo, "012456789");
-	}
-	
-	public void testDelete2() throws Exception {
-		SimpleTextEdit e1= SimpleTextEdit.createDelete(4, 1);
-		SimpleTextEdit e2= SimpleTextEdit.createDelete(3, 1);
-		SimpleTextEdit e3= SimpleTextEdit.createDelete(5, 1);
-		fEditor.add(e1);
-		fEditor.add(e2);
-		fEditor.add(e3);
-		assertTrue("Can perform edits", fEditor.canPerformEdits());
-		UndoMemento undo= fEditor.performEdits(null);
-		assertEquals(e1.getTextRange(), 3, 0);
-		assertEquals(e2.getTextRange(), 3, 0);
-		assertEquals(e3.getTextRange(), 3, 0);
-		assertEquals("Buffer content", "0126789", fBuffer.getContent());
-		doUndoRedo(undo, "0126789");
-	}
-	
-	public void testDelete3() throws Exception {
-		SimpleTextEdit e1= SimpleTextEdit.createInsert(3, "x");
-		SimpleTextEdit e2= SimpleTextEdit.createDelete(3, 1);
-		fEditor.add(e1);
-		fEditor.add(e2);
-		assertTrue("Can perform edits", fEditor.canPerformEdits());
-		UndoMemento undo= fEditor.performEdits(null);
-		assertEquals(e1.getTextRange(), 3, 1);
-		assertEquals(e2.getTextRange(), 4, 0);
-		assertEquals("Buffer content", "012x456789", fBuffer.getContent());
-		doUndoRedo(undo, "012x456789");
-	}
-	
-	public void testDeleteWithChildren() throws Exception {
-		SimpleTextEdit e1= SimpleTextEdit.createDelete(2, 6);
-		MultiTextEdit e2= new MultiTextEdit();
-		e1.add(e2);
-		SimpleTextEdit e3= SimpleTextEdit.createReplace(3,1,"xx");
-		SimpleTextEdit e4= SimpleTextEdit.createReplace(5,1,"yy");
-		e2.add(e3);
-		e2.add(e4);
-		fEditor.add(e1);
-		assertTrue(fEditor.canPerformEdits());
-		UndoMemento undo= fEditor.performEdits(null);
-		assertEquals("Buffer content", "0189", fBuffer.getContent());
-		assertTrue(e2.getTextRange().isDeleted());
-		assertTrue(e3.getTextRange().isDeleted());
-		assertTrue(e4.getTextRange().isDeleted());
-		doUndoRedo(undo, "0189");
-	}
-	
-	public void testMove1() throws Exception {
-		MoveSourceEdit s1= new MoveSourceEdit(2, 2);
-		MoveTargetEdit t1= new MoveTargetEdit(5, s1);
-		fEditor.add(s1);
-		fEditor.add(t1);
-		assertTrue(fEditor.canPerformEdits());
-		UndoMemento undo= fEditor.performEdits(null);
-		assertEquals("Buffer content", "0142356789", fBuffer.getContent());
-		assertEquals(s1.getTextRange(), 2, 0);
-		assertEquals(t1.getTextRange(), 3, 2);
-		doUndoRedo(undo, "0142356789");
-	}
-	
-	public void testMove2() throws Exception {
-		MoveSourceEdit s1= new MoveSourceEdit(5, 2);
-		MoveTargetEdit t1= new MoveTargetEdit(2, s1);
-		fEditor.add(s1);
-		fEditor.add(t1);
-		assertTrue(fEditor.canPerformEdits());
-		UndoMemento undo= fEditor.performEdits(null);
-		assertEquals("Buffer content", "0156234789", fBuffer.getContent());
-		assertEquals(s1.getTextRange(), 7, 0);
-		assertEquals(t1.getTextRange(), 2, 2);
-		doUndoRedo(undo, "0156234789");
-	}
-
-	public void testMove3() throws Exception {
-		MoveSourceEdit s1= new MoveSourceEdit(2, 2);
-		MoveTargetEdit t1= new MoveTargetEdit(7, s1);
-		SimpleTextEdit e2= SimpleTextEdit.createReplace(4, 1, "x");
-		fEditor.add(s1);
-		fEditor.add(t1);
-		fEditor.add(e2);
-		assertTrue(fEditor.canPerformEdits());
-		UndoMemento undo= fEditor.performEdits(null);
-		assertEquals("Buffer content", "01x5623789", fBuffer.getContent());
-		assertEquals(s1.getTextRange(), 2, 0);
-		assertEquals(t1.getTextRange(), 5, 2);
-		assertEquals(e2.getTextRange(), 2, 1);
-		doUndoRedo(undo, "01x5623789");
-	}
-	
-	public void testMove4() throws Exception {
-		MoveSourceEdit s1= new MoveSourceEdit(7, 2);
-		MoveTargetEdit t1= new MoveTargetEdit(2, s1);
-		SimpleTextEdit e2= SimpleTextEdit.createReplace(5, 1, "x");
-		fEditor.add(s1);
-		fEditor.add(t1);
-		fEditor.add(e2);
-		assertTrue(fEditor.canPerformEdits());
-		UndoMemento undo= fEditor.performEdits(null);
-		assertEquals("Buffer content", "0178234x69", fBuffer.getContent());
-		assertEquals(s1.getTextRange(), 9, 0);
-		assertEquals(t1.getTextRange(), 2, 2);
-		assertEquals(e2.getTextRange(), 7, 1);
-		doUndoRedo(undo, "0178234x69");
-	}
-	
-	public void testMove5() throws Exception {
-		// Move onto itself
-		MoveSourceEdit s1= new MoveSourceEdit(2, 1);
-		MoveTargetEdit t1= new MoveTargetEdit(3, s1);
-		SimpleTextEdit e2= SimpleTextEdit.createReplace(2,1,"x");
-		s1.add(e2);
-		fEditor.add(s1);
-		fEditor.add(t1);
-		assertTrue(fEditor.canPerformEdits());
-		UndoMemento undo= fEditor.performEdits(null);
-		assertEquals(s1.getTextRange(), 2, 0);
-		assertEquals(t1.getTextRange(), 2, 1);
-		assertEquals(e2.getTextRange(), 2, 1);
-		assertEquals("Buffer content", "01x3456789", fBuffer.getContent());
-		doUndoRedo(undo, "01x3456789");
-	}
-	
-	public void testMove6() throws Exception {
-		// Move onto itself
-		MoveSourceEdit s1= new MoveSourceEdit(2, 1);
-		MoveTargetEdit t1= new MoveTargetEdit(2, s1);
-		SimpleTextEdit e2= SimpleTextEdit.createReplace(2,1,"x");
-		s1.add(e2);
-		fEditor.add(s1);
-		fEditor.add(t1);
-		assertTrue(fEditor.canPerformEdits());
-		UndoMemento undo= fEditor.performEdits(null);
-		assertEquals(s1.getTextRange(), 3, 0);
-		assertEquals(t1.getTextRange(), 2, 1);
-		assertEquals(e2.getTextRange(), 2, 1);
-		assertEquals("Buffer content", "01x3456789", fBuffer.getContent());
-		doUndoRedo(undo,"01x3456789");
-	}
-	
-	public void testMove7() throws Exception {
-		MoveSourceEdit s1= new MoveSourceEdit(2, 3);
-		MoveTargetEdit t1= new MoveTargetEdit(7, s1);
-		SimpleTextEdit e2= SimpleTextEdit.createReplace(3, 1, "x");
-		s1.add(e2);
-		fEditor.add(s1);
-		fEditor.add(t1);
-		assertTrue(fEditor.canPerformEdits());
-		UndoMemento undo= fEditor.performEdits(null);
-		assertEquals("Buffer content", "01562x4789", fBuffer.getContent());
-		assertEquals(s1.getTextRange(), 2, 0);
-		assertEquals(t1.getTextRange(), 4, 3);
-		assertEquals(e2.getTextRange(), 5, 1);
-		doUndoRedo(undo, "01562x4789");
-	}
-	
-	public void testMove8() throws Exception {
-		MoveSourceEdit s1= new MoveSourceEdit(5, 3);
-		MoveTargetEdit t1= new MoveTargetEdit(1, s1);
-		SimpleTextEdit e2= SimpleTextEdit.createReplace(6, 1, "x");
-		s1.add(e2);
-		fEditor.add(s1);
-		fEditor.add(t1);
-		assertTrue(fEditor.canPerformEdits());
-		UndoMemento undo= fEditor.performEdits(null);
-		assertEquals("Buffer content", "05x7123489", fBuffer.getContent());
-		assertEquals(s1.getTextRange(), 8, 0);
-		assertEquals(t1.getTextRange(), 1, 3);
-		assertEquals(e2.getTextRange(), 2, 1);
-		doUndoRedo(undo, "05x7123489");
-	}
-		
-	public void testMove9() throws Exception {
-		MoveSourceEdit s1= new MoveSourceEdit(1, 3);
-		MoveTargetEdit t1= new MoveTargetEdit(5, s1);
-		
-		MoveSourceEdit s2= new MoveSourceEdit(1, 1);
-		MoveTargetEdit t2= new MoveTargetEdit(3, s2);
-		s1.add(s2);
-		s1.add(t2);
-		
-		fEditor.add(s1);
-		fEditor.add(t1);
-		assertTrue("Can perform edits", fEditor.canPerformEdits());
-		UndoMemento undo= fEditor.performEdits(null);
-		assertEquals(s1.getTextRange(), 1, 0);
-		assertEquals(t1.getTextRange(), 2, 3);
-		
-		assertEquals(s2.getTextRange(), 2, 0);
-		assertEquals(t2.getTextRange(), 3, 1);
-		assertEquals("Buffer content", "0421356789", fBuffer.getContent());
-		doUndoRedo(undo, "0421356789");
-	}
-	
-	public void testMove10() throws Exception {
-		MoveSourceEdit s1= new MoveSourceEdit(2, 2);
-		MoveTargetEdit t1= new MoveTargetEdit(8, s1);
-		MoveSourceEdit s2= new MoveSourceEdit(5, 2);
-		MoveTargetEdit t2= new MoveTargetEdit(1, s2);
-		
-		fEditor.add(s1);
-		fEditor.add(t1);
-		fEditor.add(s2);
-		fEditor.add(t2);
-		
-		assertTrue("Can perform edits", fEditor.canPerformEdits());
-		UndoMemento undo= fEditor.performEdits(null);
-		assertEquals(s1.getTextRange(), 4, 0);
-		assertEquals(t1.getTextRange(), 6, 2);		
-		assertEquals(s2.getTextRange(), 5, 0);
-		assertEquals(t2.getTextRange(), 1, 2);
-		assertEquals("Buffer content", "0561472389", fBuffer.getContent());
-		doUndoRedo(undo, "0561472389");		
-	}
-	
-	public void testMoveWithTargetDelete() throws Exception {
-		MoveSourceEdit s1= new MoveSourceEdit(2, 3);
-		MoveTargetEdit t1= new MoveTargetEdit(7, s1);
-		SimpleTextEdit e2= SimpleTextEdit.createDelete(6, 2);
-		e2.add(t1);
-		fEditor.add(s1);
-		fEditor.add(e2);
-		assertTrue(fEditor.canPerformEdits());
-		UndoMemento undo= fEditor.performEdits(null);
-		assertEquals("Buffer content", "01589", fBuffer.getContent());
-		assertEquals(s1.getTextRange(), 2, 0);
-		assertTrue(t1.getTextRange().isDeleted());
-		assertEquals(e2.getTextRange(), 3, 0);
-		doUndoRedo(undo, "01589");
-	}
-	
-	public void testMoveWithSourceDelete() throws Exception {
-		MoveSourceEdit s1= new MoveSourceEdit(5, 2);
-		MoveTargetEdit t1= new MoveTargetEdit(1, s1);
-		SimpleTextEdit e2= SimpleTextEdit.createDelete(5, 2);
-		e2.add(s1);
-		fEditor.add(t1);
-		fEditor.add(e2);
-		assertTrue(fEditor.canPerformEdits());
-		UndoMemento undo= fEditor.performEdits(null);
-		assertEquals("Buffer content", "0561234789", fBuffer.getContent());
-		assertTrue(s1.getTextRange().isDeleted());
-		assertEquals(t1.getTextRange(), 1, 2);
-		assertEquals(e2.getTextRange(), 7, 0);
-		doUndoRedo(undo, "0561234789");
-	}
-	
-	public void testMoveUpWithInnerMark() throws Exception {
-		MoveSourceEdit s1= new MoveSourceEdit(7, 2);
-		MoveTargetEdit t1= new MoveTargetEdit(2, s1);
-		SimpleTextEdit m= SimpleTextEdit.createReplace(4, 1, "yy");
-		fEditor.add(t1);
-		fEditor.add(m);
-		fEditor.add(s1);
-		assertTrue(fEditor.canPerformEdits());
-		UndoMemento undo= fEditor.performEdits(null);
-		assertEquals("Buffer content", "017823yy569", fBuffer.getContent());
-		assertEquals(s1.getTextRange(), 10, 0);
-		assertEquals(t1.getTextRange(), 2, 2);
-		assertEquals(m.getTextRange(), 6, 2);
-		doUndoRedo(undo, "017823yy569");
-	}	
-	
-	public void testMoveDownWithInnerMark() throws Exception {
-		MoveSourceEdit s1= new MoveSourceEdit(2, 2);
-		MoveTargetEdit t1= new MoveTargetEdit(7, s1);
-		SimpleTextEdit m= SimpleTextEdit.createReplace(4, 1, "yy");
-		fEditor.add(t1);
-		fEditor.add(m);
-		fEditor.add(s1);
-		assertTrue(fEditor.canPerformEdits());
-		UndoMemento undo= fEditor.performEdits(null);
-		assertEquals("Buffer content", "01yy5623789", fBuffer.getContent());
-		assertEquals(s1.getTextRange(), 2, 0);
-		assertEquals(t1.getTextRange(), 6, 2);
-		assertEquals(m.getTextRange(), 2, 2);
-		doUndoRedo(undo, "01yy5623789");
-	}	
-	
-	public void testMoveUpWithParentMark() throws Exception {
-		NopTextEdit m= new NopTextEdit(2, 6);
-		MoveSourceEdit s1= new MoveSourceEdit(4, 2);
-		MoveTargetEdit t1= new MoveTargetEdit(3, s1);
-		m.add(s1);
-		m.add(t1);
-		fEditor.add(m);
-		assertTrue(fEditor.canPerformEdits());
-		UndoMemento undo= fEditor.performEdits(null);
-		assertEquals("Buffer content", "0124536789", fBuffer.getContent());
-		assertEquals(m.getTextRange(), 2, 6);
-		assertEquals(t1.getTextRange(), 3, 2);
-		assertEquals(s1.getTextRange(), 6, 0);		
-		doUndoRedo(undo, "0124536789");		
-	}
-	
-	public void testMoveDownWithParentMark() throws Exception {
-		NopTextEdit m= new NopTextEdit(2, 6);
-		MoveSourceEdit s1= new MoveSourceEdit(2, 2);
-		MoveTargetEdit t1= new MoveTargetEdit(5, s1);
-		m.add(s1);
-		m.add(t1);
-		fEditor.add(m);
-		assertTrue(fEditor.canPerformEdits());
-		UndoMemento undo= fEditor.performEdits(null);
-		assertEquals("Buffer content", "0142356789", fBuffer.getContent());
-		assertEquals(m.getTextRange(), 2, 6);
-		assertEquals(t1.getTextRange(), 3, 2);
-		assertEquals(s1.getTextRange(), 2, 0);		
-		doUndoRedo(undo, "0142356789");		
-	}
-	
-	public void testCopyDown() throws Exception {
-		CopySourceEdit s1= new CopySourceEdit(2, 3);
-		CopyTargetEdit t1= new CopyTargetEdit(8, s1);
-		
-		fEditor.add(s1);
-		fEditor.add(t1);
-		assertTrue("Can perform edits", fEditor.canPerformEdits());
-		UndoMemento undo= fEditor.performEdits(null);
-		assertEquals(s1.getTextRange(), 2, 3);
-		assertEquals(t1.getTextRange(), 8, 3);
-		String result= "0123456723489";
-		assertEquals("Buffer content", result, fBuffer.getContent());
-		doUndoRedo(undo, result);		
-	}
-	
-	public void testCopyUp() throws Exception {
-		CopySourceEdit s1= new CopySourceEdit(7, 2);
-		CopyTargetEdit t1= new CopyTargetEdit(3, s1);
-		
-		fEditor.add(s1);
-		fEditor.add(t1);
-		assertTrue("Can perform edits", fEditor.canPerformEdits());
-		UndoMemento undo= fEditor.performEdits(null);
-		assertEquals(s1.getTextRange(), 9, 2);
-		assertEquals(t1.getTextRange(), 3, 2);
-		String result= "012783456789";
-		assertEquals("Buffer content", result, fBuffer.getContent());
-		doUndoRedo(undo, result);		
-	}
-	
-	public void testDoubleCopy() throws Exception {
-		CopySourceEdit s1= new CopySourceEdit(5, 2);
-		CopyTargetEdit t1= new CopyTargetEdit(8, s1);
-		CopySourceEdit s2= new CopySourceEdit(5, 2);
-		CopyTargetEdit t2= new CopyTargetEdit(2, s2);
-		s1.add(s2);
-		
-		fEditor.add(s1);
-		fEditor.add(t1);
-		fEditor.add(t2);
-		assertTrue("Can perform edits", fEditor.canPerformEdits());
-		UndoMemento undo= fEditor.performEdits(null);
-		assertEquals(s1.getTextRange(), 7, 2);
-		assertEquals(t1.getTextRange(), 10, 2);
-		assertEquals(s2.getTextRange(), 7, 2);
-		assertEquals(t2.getTextRange(), 2, 2);
-		String result= "01562345675689";
-		assertEquals("Buffer content", result, fBuffer.getContent());
-		doUndoRedo(undo, result);		
-	}
-	
-	public void testSwap1() throws Exception {
-		TextBuffer buffer= TextBuffer.create("foo(1, 2), 3");
-		TextBufferEditor editor= new TextBufferEditor(buffer);		
-		
-		MultiTextEdit root= new MultiTextEdit();
-		{
-			CopySourceEdit innerRoot= new CopySourceEdit(0, 9);
-			
-			SimpleTextEdit e1= SimpleTextEdit.createReplace(0, 9, "");
-			e1.add(innerRoot);
-			CopyTargetEdit t1= new CopyTargetEdit(11, innerRoot);
-			
-			SimpleTextEdit e2= SimpleTextEdit.createReplace(11, 1, "");
-			CopySourceEdit s2= new CopySourceEdit(11, 1);
-			e2.add(s2);
-			CopyTargetEdit t2= new CopyTargetEdit(0, s2);
-
-			root.add(e1);
-			root.add(t2);
-			root.add(e2);				
-			root.add(t1);
-
-			editor.add(root);
-		}
-		
-		assertTrue("Can perform edits", editor.canPerformEdits());
-		UndoMemento undo= editor.performEdits(null);
-
-		String result= "3, foo(1, 2)";
-		assertEquals("Buffer content", result, buffer.getContent());
-	}
-	
-	public void testSwap2() throws Exception {
-		TextBuffer buffer= TextBuffer.create("foo(1, 2), 3");
-		TextBufferEditor editor= new TextBufferEditor(buffer);		
-		
-		MultiTextEdit innerRoot= new MultiTextEdit();
-		{
-			SimpleTextEdit e1= SimpleTextEdit.createReplace(4, 1, "");
-			CopySourceEdit s1= new CopySourceEdit(4, 1);
-			e1.add(s1);
-			CopyTargetEdit t1= new CopyTargetEdit(7, s1);
-			
-			SimpleTextEdit e2= SimpleTextEdit.createReplace(7, 1, "");
-			CopySourceEdit s2= new CopySourceEdit(7, 1);
-			e2.add(s2);
-			CopyTargetEdit t2= new CopyTargetEdit(4, s2);
-			
-			innerRoot.add(e1);
-			innerRoot.add(t2);
-			innerRoot.add(e2);				
-			innerRoot.add(t1);
-		}
-		
-		editor.add(innerRoot);
-		
-		assertTrue("Can perform edits", editor.canPerformEdits());
-		UndoMemento undo= editor.performEdits(null);
-
-		String result= "foo(2, 1), 3";
-		assertEquals("Buffer content", result, buffer.getContent());
-	}	
-	
-	public void testSwap2InSwap1() throws Exception {
-		TextBuffer buffer= TextBuffer.create("foo(1, 2), 3");
-		TextBufferEditor editor= new TextBufferEditor(buffer);		
-		
-		CopySourceEdit innerRoot= new CopySourceEdit(0, 9);
-		{
-			SimpleTextEdit e1= SimpleTextEdit.createReplace(4, 1, "");
-			CopySourceEdit s1= new CopySourceEdit(4, 1);
-			e1.add(s1);
-			CopyTargetEdit t1= new CopyTargetEdit(7, s1);
-			
-			SimpleTextEdit e2= SimpleTextEdit.createReplace(7, 1, "");
-			CopySourceEdit s2= new CopySourceEdit(7, 1);
-			e2.add(s2);
-			CopyTargetEdit t2= new CopyTargetEdit(4, s2);
-			
-			innerRoot.add(e1);
-			innerRoot.add(t2);
-			innerRoot.add(e2);				
-			innerRoot.add(t1);
-		}
-		MultiTextEdit root= new MultiTextEdit();
-		{
-			SimpleTextEdit e1= SimpleTextEdit.createReplace(0, 9, "");
-			e1.add(innerRoot);
-			CopyTargetEdit t1= new CopyTargetEdit(11, innerRoot);
-			
-			SimpleTextEdit e2= SimpleTextEdit.createReplace(11, 1, "");
-			CopySourceEdit s2= new CopySourceEdit(11, 1);
-			e2.add(s2);
-			CopyTargetEdit t2= new CopyTargetEdit(0, s2);
-
-			root.add(e1);
-			root.add(t2);
-			root.add(e2);				
-			root.add(t1);
-			
-			editor.add(root);
-		}
-
-		assertTrue("Can perform edits", editor.canPerformEdits());
-		UndoMemento undo= editor.performEdits(null);
-
-		String result= "3, foo(2, 1)";
-		assertEquals("Buffer content", result, buffer.getContent());
-	}	
-	
-	private void doUndoRedo(UndoMemento undo, String redoResult) throws Exception {
-		fEditor.add(undo);
-		UndoMemento redo= fEditor.performEdits(null);
-		assertBufferContent();
-		fEditor.add(redo);
-		undo= fEditor.performEdits(null);
-		assertEquals("Buffer content redo", redoResult, fBuffer.getContent());
-		fEditor.add(undo);
-		fEditor.performEdits(null);
-		assertBufferContent();
-	}
-	
-	private void assertEquals(TextRange r, int offset, int length) {
-		assertEquals("Offset", offset, r.getOffset());
-		assertEquals("Length", length, r.getLength());	
-	}
-	
-	private void assertBufferContent() {
-		assertEquals("Buffer content restored", "0123456789", fBuffer.getContent());
-	}
-	
-	private void assertTrue(IStatus status) {
-		assertTrue(status.isOK());
-	}	
-	
-	private void assertTrue(String message, IStatus status) {
-		assertTrue(message, status.isOK());
-	}	
-	
-	private void assertFalse(IStatus status) {
-		assertTrue(!status.isOK());
-	}	
-	
-	private void assertFalse(String message, IStatus status) {
-		assertTrue(message, !status.isOK());
-	}
-			
-}
-
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/TypeHierarchyTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/TypeHierarchyTest.java
deleted file mode 100644
index a4afd09..0000000
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/TypeHierarchyTest.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.core;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.ITypeHierarchy;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-import org.eclipse.jdt.testplugin.TestPluginLauncher;
-
-import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
-
-
-public class TypeHierarchyTest extends TestCase {
-	
-	private static final Class THIS= TypeHierarchyTest.class;
-	
-	private IJavaProject fJavaProject1;
-	private IJavaProject fJavaProject2;
-
-	public TypeHierarchyTest(String name) {
-		super(name);
-	}
-
-	public static void main(String[] args) {
-		TestPluginLauncher.run(TestPluginLauncher.getLocationFromProperties(), THIS, args);
-	}		
-			
-	public static Test suite() {
-		return new TestSuite(THIS);
-	}
-	
-	protected void setUp() throws Exception {
-		fJavaProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		fJavaProject2= JavaProjectHelper.createJavaProject("TestProject2", "bin");
-	}
-
-	protected void tearDown () throws Exception {
-		JavaProjectHelper.delete(fJavaProject1);
-		JavaProjectHelper.delete(fJavaProject2);		
-	}
-					
-	public void test1() throws Exception {
-		
-		IPackageFragmentRoot jdk= JavaProjectHelper.addRTJar(fJavaProject1);
-		assertTrue("jdk not found", jdk != null);
-		IPackageFragmentRoot root1= JavaProjectHelper.addSourceContainer(fJavaProject1, "src");
-		IPackageFragment pack1= root1.createPackageFragment("pack1", true, null);
-		
-		ICompilationUnit cu1= pack1.getCompilationUnit("A.java");
-		IType type1= cu1.createType("public class A {\n}\n", null, true, null);
-		
-		JavaProjectHelper.addRTJar(fJavaProject2);
-		JavaProjectHelper.addRequiredProject(fJavaProject2, fJavaProject1);
-		IPackageFragmentRoot root2= JavaProjectHelper.addSourceContainer(fJavaProject2, "src");
-		IPackageFragment pack2= root2.createPackageFragment("pack2", true, null);
-		
-		ICompilationUnit cu2= pack2.getCompilationUnit("B.java");
-		IType type2= cu2.createType("public class B extends pack1.A {\n}\n", null, true, null);
-		
-		ITypeHierarchy hierarchy= type2.newSupertypeHierarchy(null);
-		IType[] allTypes= hierarchy.getAllTypes();
-		
-		assertTrue("Should contain 3 types, contains: " + allTypes.length, allTypes.length == 3);
-		
-		IType type= fJavaProject2.findType("pack1.A");
-		assertTrue("Type not found", type != null);
-
-	}	
-	
-
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/TypeInfoTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/TypeInfoTest.java
deleted file mode 100644
index 53f8231..0000000
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/TypeInfoTest.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.core;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.zip.ZipFile;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.search.IJavaSearchConstants;
-import org.eclipse.jdt.core.search.IJavaSearchScope;
-import org.eclipse.jdt.core.search.ITypeNameRequestor;
-import org.eclipse.jdt.core.search.SearchEngine;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-import org.eclipse.jdt.testplugin.JavaTestPlugin;
-import org.eclipse.jdt.testplugin.TestPluginLauncher;
-
-import org.eclipse.jdt.internal.corext.util.TypeInfo;
-import org.eclipse.jdt.internal.corext.util.TypeInfoRequestor;
-
-
-public class TypeInfoTest extends TestCase {
-	
-	private static final Class THIS= TypeInfoTest.class;
-	
-	private IJavaProject fJProject1;
-	private IJavaProject fJProject2;
-
-	public TypeInfoTest(String name) {
-		super(name);
-	}
-
-
-	public static void main(String[] args) {
-		TestPluginLauncher.run(TestPluginLauncher.getLocationFromProperties(), THIS, args);
-	}
-
-
-	public static Test suite() {
-		return new TestSuite(THIS);
-	}
-
-
-	protected void setUp() throws Exception {
-		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		assertNotNull("jre is null", JavaProjectHelper.addRTJar(fJProject1));
-		
-		fJProject2= JavaProjectHelper.createJavaProject("TestProject2", "bin");
-		assertNotNull("jre is null", JavaProjectHelper.addRTJar(fJProject2));
-		
-		// add Junit source to project 2
-		File junitSrcArchive= JavaTestPlugin.getDefault().getFileInPlugin(JavaProjectHelper.JUNIT_SRC);
-		assertTrue("Junit source", junitSrcArchive != null && junitSrcArchive.exists());
-		ZipFile zipfile= new ZipFile(junitSrcArchive);
-		JavaProjectHelper.addSourceContainerWithImport(fJProject2, "src", zipfile);
-		
-	}
-
-
-	protected void tearDown() throws Exception {
-		JavaProjectHelper.delete(fJProject1);
-		JavaProjectHelper.delete(fJProject2);		
-		
-	}
-
-
-	public void test1() throws Exception {
-	
-		// source folder
-		IPackageFragmentRoot root1= JavaProjectHelper.addSourceContainer(fJProject1, "src");
-		IPackageFragment pack1= root1.createPackageFragment("com.oti", true, null);
-		ICompilationUnit cu1= pack1.getCompilationUnit("V.java");
-		IType type1= cu1.createType("public class V {\n static class VInner {\n}\n}\n", null, true, null);
-
-		// proj1 has proj2 as prerequisit
-		JavaProjectHelper.addRequiredProject(fJProject1, fJProject2);
-
-		// internal jar
-		//IPackageFragmentRoot root2= JavaProjectHelper.addLibraryWithImport(fJProject1, JARFILE, null, null);
-		ArrayList result= new ArrayList();
-
-		IJavaElement[] elements= new IJavaElement[] { fJProject1 };
-		IJavaSearchScope scope= SearchEngine.createJavaSearchScope(elements);
-		ITypeNameRequestor requestor= new TypeInfoRequestor(result);
-		SearchEngine engine= new SearchEngine();
-
-		engine.searchAllTypeNames(
-			fJProject1.getJavaModel().getWorkspace(),
-			null, 
-			new char[] {'V'}, 
-			IJavaSearchConstants.PREFIX_MATCH, 
-			IJavaSearchConstants.CASE_INSENSITIVE, 
-			IJavaSearchConstants.TYPE, 
-			scope, 
-			requestor, 
-			IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, 
-			null); 
-		findTypeRef(result, "com.oti.V");
-		findTypeRef(result, "com.oti.V.VInner");
-		findTypeRef(result, "java.lang.VerifyError");
-		findTypeRef(result, "java.lang.Void");
-		findTypeRef(result, "java.util.Vector");
-		findTypeRef(result, "junit.samples.VectorTest");
-
-		
-		for (int i= 0; i < result.size(); i++) {
-			TypeInfo ref= (TypeInfo) result.get(i);
-			//System.out.println(ref.getTypeName());
-			IType resolvedType= ref.resolveType(scope);
-			if (resolvedType == null) {
-				assertTrue("Could not be resolved: " + ref.toString(), false);
-			}
-		}
-		assertTrue("Should find 9 elements, is " + result.size(), result.size() == 9);
-
-
-	}
-	
-	private void findTypeRef(List refs, String fullname) {
-		for (int i= 0; i <refs.size(); i++) {
-			TypeInfo curr= (TypeInfo) refs.get(i);
-			if (fullname.equals(curr.getFullyQualifiedName())) {
-				return;
-			}
-		}
-		assertTrue("Type not found: " + fullname, false);
-	}
-		
-	
-	public void test2() throws Exception {	
-		ArrayList result= new ArrayList();
-		
-		IJavaProject[] elements= new IJavaProject[] { fJProject2 };
-		IJavaSearchScope scope= SearchEngine.createJavaSearchScope(elements);
-		ITypeNameRequestor requestor= new TypeInfoRequestor(result);
-		SearchEngine engine= new SearchEngine();
-
-		engine.searchAllTypeNames(
-			fJProject1.getJavaModel().getWorkspace(),
-			null, 
-			new char[] {'T'}, 
-			IJavaSearchConstants.PREFIX_MATCH, 
-			IJavaSearchConstants.CASE_INSENSITIVE, 
-			IJavaSearchConstants.TYPE, 
-			scope, 
-			requestor, 
-			IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, 
-			null); 
-
-		findTypeRef(result, "junit.extensions.TestDecorator");
-		findTypeRef(result, "junit.framework.Test");
-		findTypeRef(result, "junit.framework.TestListener");
-		findTypeRef(result, "junit.tests.TestCaseTest.TornDown");
-
-		assertTrue("Should find 37 elements, is " + result.size(), result.size() == 37);
-		//System.out.println("Elements found: " + result.size());
-		for (int i= 0; i < result.size(); i++) {
-			TypeInfo ref= (TypeInfo) result.get(i);
-			//System.out.println(ref.getTypeName());
-			IType resolvedType= ref.resolveType(scope);
-			if (resolvedType == null) {
-				assertTrue("Could not be resolved: " + ref.toString(), false);
-			}
-		}
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/dialogs/DialogsTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/dialogs/DialogsTest.java
deleted file mode 100644
index 8a30041..0000000
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/dialogs/DialogsTest.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.dialogs;
-
-import java.util.ArrayList;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.resources.IProject;
-
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Shell;
-
-import org.eclipse.jface.dialogs.ProgressMonitorDialog;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.dialogs.ElementListSelectionDialog;
-import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
-import org.eclipse.ui.internal.WorkbenchPlugin;
-
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.search.IJavaSearchConstants;
-import org.eclipse.jdt.core.search.IJavaSearchScope;
-import org.eclipse.jdt.core.search.SearchEngine;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-import org.eclipse.jdt.testplugin.TestPluginLauncher;
-import org.eclipse.jdt.testplugin.util.DialogCheck;
-import org.eclipse.jdt.ui.JavaElementContentProvider;
-import org.eclipse.jdt.ui.JavaElementLabelProvider;
-import org.eclipse.jdt.ui.JavaElementSorter;
-
-import org.eclipse.jdt.internal.corext.util.AllTypesCache;
-import org.eclipse.jdt.internal.corext.util.TypeInfo;
-import org.eclipse.jdt.internal.ui.JavaUIMessages;
-import org.eclipse.jdt.internal.ui.dialogs.MultiElementListSelectionDialog;
-import org.eclipse.jdt.internal.ui.dialogs.OpenTypeSelectionDialog;
-import org.eclipse.jdt.internal.ui.util.TypeInfoLabelProvider;
-import org.eclipse.jdt.internal.ui.wizards.NewWizardMessages;
-
-public class DialogsTest extends TestCase {
-	
-	private static final String PROJECT_NAME = "DummyProject";
-
-	public static void main(String[] args) {
-		TestPluginLauncher.run(TestPluginLauncher.getLocationFromProperties(), DialogsTest.class, args);
-	}
-
-	public static Test suite() {
-		TestSuite suite= new TestSuite(DialogsTest.class.getName());
-//		suite.addTest(new DialogsTest("testElementListSelectionDialog2"));
-		suite.addTest(new DialogsTest("testElementListSelectionDialog"));
-		suite.addTest(new DialogsTest("testMultiElementSelectionDialog"));
-		suite.addTest(new DialogsTest("testTwoPaneSelectionDialog"));
-		suite.addTest(new DialogsTest("testElementTreeSelectionDialog"));
-		suite.addTest(new DialogsTest("testElementListSelectionDialog"));
-		return suite;
-	}
-
-	public DialogsTest(String name) {
-		super(name);
-	}
-	private Shell getShell() {
-		return DialogCheck.getShell();
-	}
-	private IWorkbench getWorkbench() {
-		return WorkbenchPlugin.getDefault().getWorkbench();
-	}
-	
-	public void testTwoPaneSelectionDialog() throws Exception {
-		IJavaProject jproject= JavaProjectHelper.createJavaProject(PROJECT_NAME, "bin");
-		JavaProjectHelper.addSourceContainer(jproject, "src1");
-		JavaProjectHelper.addRTJar(jproject);
-		
-		IProject project= jproject.getProject();
-
-		OpenTypeSelectionDialog dialog= new OpenTypeSelectionDialog(getShell(), new ProgressMonitorDialog(getShell()), 
-			IJavaSearchConstants.TYPE, SearchEngine.createWorkspaceScope());
-	
-		dialog.setTitle(JavaUIMessages.getString("OpenTypeAction.dialogTitle")); //$NON-NLS-1$
-		dialog.setMessage(JavaUIMessages.getString("OpenTypeAction.dialogMessage")); //$NON-NLS-1$
-
-		DialogCheck.assertDialog(dialog);
-		
-		JavaProjectHelper.delete(jproject);
-	}
-	
-	private TypeInfo[] getRefs(ArrayList list, int off, int len) {
-		TypeInfo[] res= new TypeInfo[len];
-		for (int i= 0; i < len; i++) {
-			res[i]= (TypeInfo) list.get(off + i);
-		}
-		return res;
-	}
-	
-	public void testMultiElementSelectionDialog() throws Exception {
-		IJavaProject jproject= JavaProjectHelper.createJavaProject(PROJECT_NAME, "bin");
-		JavaProjectHelper.addSourceContainer(jproject, "src1");
-		JavaProjectHelper.addRTJar(jproject);
-
-		ILabelProvider labelProvider= new TypeInfoLabelProvider(TypeInfoLabelProvider.SHOW_FULLYQUALIFIED);
-
-		ArrayList list= new ArrayList(200);
-		IProject project= jproject.getProject();
-
-		IJavaSearchScope searchScope= SearchEngine.createJavaSearchScope(new IJavaElement[] { jproject });		
-		AllTypesCache.getTypes(searchScope, IJavaSearchConstants.TYPE, null, list);
-		
-		MultiElementListSelectionDialog dialog= new MultiElementListSelectionDialog(getShell(), labelProvider);
-		dialog.setTitle("Title"); //$NON-NLS-1$
-		dialog.setMessage("Description:"); //$NON-NLS-1$
-	
-		assertTrue(list.size() > 15);
-		TypeInfo[][] refs= new TypeInfo[][] { getRefs(list, 0, 3), getRefs(list, 4, 6), getRefs(list, 10, 5) };
-		dialog.setElements(refs);
-		dialog.setInitialSelections(new Object[refs.length]);
-		
-		DialogCheck.assertDialog(dialog);
-		
-		JavaProjectHelper.delete(jproject);		
-	
-	}
-	
-	public void testElementTreeSelectionDialog() throws Exception {
-		IJavaProject jproject= JavaProjectHelper.createJavaProject(PROJECT_NAME, "bin");
-		JavaProjectHelper.addSourceContainer(jproject, "src1");
-		Object initSelection= JavaProjectHelper.addSourceContainer(jproject, "src2");
-
-		IJavaProject jproject2= JavaProjectHelper.createJavaProject("Project2", "bin");
-		JavaProjectHelper.addSourceContainer(jproject2, "src1");
-		JavaProjectHelper.addSourceContainer(jproject2, "src2");
-
-		JavaElementContentProvider provider= new JavaElementContentProvider();
-		ILabelProvider labelProvider= new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT); 
-		ElementTreeSelectionDialog dialog= new ElementTreeSelectionDialog(getShell(), labelProvider, provider);
-		dialog.setSorter(new JavaElementSorter());
-		dialog.setTitle(NewWizardMessages.getString("ContainerPage.ChooseSourceContainerDialog.title")); //$NON-NLS-1$
-		dialog.setMessage(NewWizardMessages.getString("ContainerPage.ChooseSourceContainerDialog.description")); //$NON-NLS-1$
-		
-		dialog.setInput(jproject.getJavaModel());
-		dialog.setInitialSelection(initSelection);
-		
-		DialogCheck.assertDialog(dialog);
-		
-		JavaProjectHelper.delete(jproject);	
-		JavaProjectHelper.delete(jproject2);
-	}
-	
-	public void testElementListSelectionDialog() throws Exception {
-		IJavaProject jproject= JavaProjectHelper.createJavaProject(PROJECT_NAME, "bin");
-		IPackageFragmentRoot root=  JavaProjectHelper.addRTJar(jproject);
-		assertTrue(root != null);
-		Object[] elements= root.getChildren();
-
-		ElementListSelectionDialog dialog= new ElementListSelectionDialog(getShell(), new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT));
-		dialog.setIgnoreCase(false);
-		dialog.setTitle(NewWizardMessages.getString("TypePage.ChoosePackageDialog.title")); //$NON-NLS-1$
-		dialog.setMessage(NewWizardMessages.getString("TypePage.ChoosePackageDialog.description")); //$NON-NLS-1$
-		dialog.setEmptyListMessage(NewWizardMessages.getString("TypePage.ChoosePackageDialog.empty")); //$NON-NLS-1$		
-		dialog.setElements(elements);
-		
-		DialogCheck.assertDialog(dialog);
-		
-		JavaProjectHelper.delete(jproject);	
-	}
-	
-
-	private static class TestLabelProvider extends LabelProvider {
-		public Image getImage(Object element) {
-			return null;
-		}
-		
-		public String getText(Object element) {
-			Integer i= (Integer) element;			
-			return "e-" + i.toString();
-		}
-	}
-
-	public void testElementListSelectionDialog2() throws Exception {
-		Object[] elements= new Integer[] {
-			new Integer(0),
-			new Integer(1),
-			new Integer(2),
-			new Integer(7),
-			new Integer(12),
-			new Integer(42)			
-		};
-
-		ElementListSelectionDialog dialog= new ElementListSelectionDialog(getShell(), new TestLabelProvider());
-		dialog.setIgnoreCase(false);
-		dialog.setTitle(NewWizardMessages.getString("TypePage.ChoosePackageDialog.title")); //$NON-NLS-1$
-		dialog.setMessage(NewWizardMessages.getString("TypePage.ChoosePackageDialog.description")); //$NON-NLS-1$
-		dialog.setEmptyListMessage(NewWizardMessages.getString("TypePage.ChoosePackageDialog.empty")); //$NON-NLS-1$		
-		dialog.setElements(elements);
-		dialog.setInitialSelections(new Object[] {new Integer(7)});
-		
-		DialogCheck.assertDialog(dialog);
-		
-		Object[] results= dialog.getResult();
-		assertTrue(results.length == 1);
-		assertEquals(new Integer(7), results[0]);
-	}
-
-}
-
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/dialogs/DialogsTest2.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/dialogs/DialogsTest2.java
deleted file mode 100644
index 62f02e6..0000000
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/dialogs/DialogsTest2.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.dialogs;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.eclipse.swt.widgets.Shell;
-
-import org.eclipse.jface.viewers.ILabelProvider;
-
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.dialogs.CheckedTreeSelectionDialog;
-import org.eclipse.ui.internal.WorkbenchPlugin;
-
-import org.eclipse.jdt.core.IJavaProject;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-import org.eclipse.jdt.testplugin.TestPluginLauncher;
-import org.eclipse.jdt.testplugin.util.DialogCheck;
-import org.eclipse.jdt.ui.JavaElementContentProvider;
-import org.eclipse.jdt.ui.JavaElementLabelProvider;
-import org.eclipse.jdt.ui.JavaElementSorter;
-
-import org.eclipse.jdt.internal.ui.wizards.NewWizardMessages;
-
-public class DialogsTest2 extends TestCase {
-	
-	private static final String PROJECT_NAME = "DummyProject";
-
-	public static void main(String[] args) {
-		TestPluginLauncher.run(TestPluginLauncher.getLocationFromProperties(), DialogsTest2.class, args);
-	}
-
-	public static Test suite() {
-		TestSuite suite= new TestSuite(DialogsTest2.class.getName());
-		suite.addTest(new DialogsTest2("testCheckedTreeSelectionDialog"));
-		suite.addTest(new DialogsTest2("testCheckedTreeSelectionDialog"));
-		return suite;
-	}
-
-	public DialogsTest2(String name) {
-		super(name);
-	}
-	private Shell getShell() {
-		return DialogCheck.getShell();
-	}
-	private IWorkbench getWorkbench() {
-		return WorkbenchPlugin.getDefault().getWorkbench();
-	}
-	
-	
-	public void testCheckedTreeSelectionDialog() throws Exception {
-		IJavaProject jproject= JavaProjectHelper.createJavaProject(PROJECT_NAME, "bin");
-		JavaProjectHelper.addSourceContainer(jproject, "src1");
-		Object initSelection= JavaProjectHelper.addSourceContainer(jproject, "src2");
-
-		IJavaProject jproject2= JavaProjectHelper.createJavaProject("Project2", "bin");
-		JavaProjectHelper.addSourceContainer(jproject2, "src1");
-		JavaProjectHelper.addSourceContainer(jproject2, "src2");
-
-		JavaElementContentProvider provider= new JavaElementContentProvider();
-		ILabelProvider labelProvider= new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT); 
-		CheckedTreeSelectionDialog dialog= new CheckedTreeSelectionDialog(getShell(), labelProvider, provider);
-		dialog.setSorter(new JavaElementSorter());
-		dialog.setTitle(NewWizardMessages.getString("ContainerPage.ChooseSourceContainerDialog.title")); //$NON-NLS-1$
-		dialog.setMessage(NewWizardMessages.getString("ContainerPage.ChooseSourceContainerDialog.description")); //$NON-NLS-1$
-		
-		dialog.setInput(jproject.getJavaModel());
-		dialog.setInitialSelection(initSelection);
-		dialog.setExpandedElements(new Object[] { initSelection, jproject });
-		
-		DialogCheck.assertDialog(dialog);
-		
-		System.out.println("Result:");
-		Object[] checkedElements= dialog.getResult();
-		for (int i= 0; i < checkedElements.length; i++) {
-			System.out.println(labelProvider.getText(checkedElements[i]));
-		}
-		
-		
-		JavaProjectHelper.delete(jproject);	
-		JavaProjectHelper.delete(jproject2);
-	}
-
-}
-
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/dialogs/PreferencesTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/dialogs/PreferencesTest.java
deleted file mode 100644
index aea4391..0000000
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/dialogs/PreferencesTest.java
+++ /dev/null
@@ -1,325 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.dialogs;
-
-import java.util.Iterator;
-
-import junit.framework.Assert;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.IPath;
-
-import org.eclipse.swt.widgets.Shell;
-
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.preference.IPreferenceNode;
-import org.eclipse.jface.preference.PreferenceDialog;
-import org.eclipse.jface.preference.PreferenceManager;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.StructuredSelection;
-
-import org.eclipse.ui.help.WorkbenchHelp;
-import org.eclipse.ui.internal.IHelpContextIds;
-import org.eclipse.ui.internal.WorkbenchMessages;
-import org.eclipse.ui.internal.WorkbenchPlugin;
-import org.eclipse.ui.internal.dialogs.PropertyDialog;
-import org.eclipse.ui.internal.dialogs.PropertyPageContributorManager;
-import org.eclipse.ui.internal.dialogs.PropertyPageManager;
-import org.eclipse.ui.model.IWorkbenchAdapter;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.JavaCore;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-import org.eclipse.jdt.testplugin.TestPluginLauncher;
-import org.eclipse.jdt.testplugin.util.DialogCheck;
-
-public class PreferencesTest extends TestCase {
-
-	public static void main(String[] args) {
-		TestPluginLauncher.run(TestPluginLauncher.getLocationFromProperties(), PreferencesTest.class, args);
-	}
-	
-	public static Test suite() {
-		TestSuite suite= new TestSuite(PreferencesTest.class.getName());
-		suite.addTest(new PreferencesTest("testJavaBasePrefPage"));
-		suite.addTest(new PreferencesTest("testClasspathVarPrefPage"));
-		suite.addTest(new PreferencesTest("testCodeFormatterPrefPage"));
-		suite.addTest(new PreferencesTest("testExecArgPropPage"));
-		suite.addTest(new PreferencesTest("testImportOrganizePrefPage"));
-		suite.addTest(new PreferencesTest("testInfoPropPage"));
-		suite.addTest(new PreferencesTest("testJARSourceAttachmentPropPage"));
-		suite.addTest(new PreferencesTest("testJavaBasePrefPage"));
-		suite.addTest(new PreferencesTest("testJavaCompilerPrefPage"));
-		suite.addTest(new PreferencesTest("testJavaDebugPrefPage"));
-		suite.addTest(new PreferencesTest("testJavaEditorPrefPage"));
-		suite.addTest(new PreferencesTest("testNoExecArgPropPage"));
-		suite.addTest(new PreferencesTest("testRefactoringPrefPage"));
-		suite.addTest(new PreferencesTest("testVMPrefPage"));
-		suite.addTest(new PreferencesTest("testVMPropPage"));
-		suite.addTest(new PreferencesTest("testVSourceLookupPage"));
-		suite.addTest(new PreferencesTest("testVariableSourceAttachmentPropPage"));					
-		return suite;
-	}	
-	
-	private static class PreferenceDialogWrapper extends PreferenceDialog {
-		
-		public PreferenceDialogWrapper(Shell parentShell, PreferenceManager manager) {
-			super(parentShell, manager);
-		}
-		protected boolean showPage(IPreferenceNode node) {
-			return super.showPage(node);
-		}
-	}
-	
-	private class PropertyDialogWrapper extends PropertyDialog {
-		
-		public PropertyDialogWrapper(Shell parentShell, PreferenceManager manager, ISelection selection) {
-			super(parentShell, manager, selection);
-		}
-		protected boolean showPage(IPreferenceNode node) {
-			return super.showPage(node);
-		}
-	}		
-	
-	
-	private boolean fIsInteractive= true;
-	
-	private static final String PROJECT_NAME = "DummyProject";
-	
-	public PreferencesTest(String name) {
-		super(name);
-	}
-
-	private Shell getShell() {
-		return DialogCheck.getShell();
-	}
-	
-	public void assertDialog(Dialog dialog, Assert assertTrue) {
-		if (fIsInteractive) {
-			DialogCheck.assertDialog(dialog);
-		} else {
-			DialogCheck.assertDialogTexts(dialog);
-		}
-	}
-	
-	
-	private PreferenceDialog getPreferenceDialog(String id) {
-		PreferenceDialogWrapper dialog = null;
-		PreferenceManager manager = WorkbenchPlugin.getDefault().getPreferenceManager();
-		if (manager != null) {
-			dialog = new PreferenceDialogWrapper(getShell(), manager);
-			dialog.create();	
-			WorkbenchHelp.setHelp(dialog.getShell(), IHelpContextIds.PREFERENCE_DIALOG);
-
-			for (Iterator iterator = manager.getElements(PreferenceManager.PRE_ORDER).iterator();
-			     iterator.hasNext();)
-			{
-				IPreferenceNode node = (IPreferenceNode)iterator.next();
-				if ( node.getId().equals(id) ) {
-					dialog.showPage(node);
-					break;
-				}
-			}
-		}
-		return dialog;
-	}
-	
-	private PropertyDialog getPropertyDialog(String id, IAdaptable element) {
-		PropertyDialogWrapper dialog = null;
-
-		PropertyPageManager manager = new PropertyPageManager();
-		String title = "";
-		String name  = "";
-
-		// load pages for the selection
-		// fill the manager with contributions from the matching contributors
-		PropertyPageContributorManager.getManager().contribute(manager, element);
-		
-		IWorkbenchAdapter adapter = (IWorkbenchAdapter)element.getAdapter(IWorkbenchAdapter.class);
-		if (adapter != null) {
-			name = adapter.getLabel(element);
-		}
-		
-		// testing if there are pages in the manager
-		Iterator pages = manager.getElements(PreferenceManager.PRE_ORDER).iterator();		
-		if (!pages.hasNext()) {
-			return null;
-		} else {
-			title = WorkbenchMessages.format("PropertyDialog.propertyMessage", new Object[] {name});
-			dialog = new PropertyDialogWrapper(getShell(), manager, new StructuredSelection(element)); 
-			dialog.create();
-			dialog.getShell().setText(title);
-			WorkbenchHelp.setHelp(dialog.getShell(), IHelpContextIds.PROPERTY_DIALOG);
-			for (Iterator iterator = manager.getElements(PreferenceManager.PRE_ORDER).iterator();
-			     iterator.hasNext();)
-			{
-				IPreferenceNode node = (IPreferenceNode)iterator.next();
-				if ( node.getId().equals(id) ) {
-					dialog.showPage(node);
-					break;
-				}
-			}
-		}
-		return dialog;
-	}
-	
-	public void testJavaBasePrefPage() {
-		Dialog dialog = getPreferenceDialog("org.eclipse.jdt.ui.preferences.JavaBasePreferencePage");
-		assertDialog(dialog, this);
-	}
-	
-	public void testImportOrganizePrefPage() {
-		Dialog dialog = getPreferenceDialog("org.eclipse.jdt.ui.preferences.ImportOrganizePreferencePage");
-		assertDialog(dialog, this);
-	}
-	
-	public void testCodeFormatterPrefPage() {
-		Dialog dialog = getPreferenceDialog("org.eclipse.jdt.ui.preferences.CodeFormatterPreferencePage");
-		assertDialog(dialog, this);
-	}
-	
-	public void testClasspathVarPrefPage() throws Exception {
-		IPath path= ResourcesPlugin.getWorkspace().getRoot().getLocation();		
-		JavaCore.setClasspathVariable("DUMMY_VAR", path, null);
-		Dialog dialog = getPreferenceDialog("org.eclipse.jdt.ui.preferences.ClasspathVariablesPreferencePage");
-		assertDialog(dialog, this);
-		JavaCore.removeClasspathVariable("DUMMY_VAR", null);
-	}
-	
-	public void testJavaEditorPrefPage() {
-		Dialog dialog = getPreferenceDialog("org.eclipse.jdt.ui.preferences.JavaEditorPreferencePage");
-		assertDialog(dialog, this);
-	}
-	
-	public void testJavaCompilerPrefPage() {
-		Dialog dialog = getPreferenceDialog("org.eclipse.jdt.ui.preferences.CompilerPreferencePage");
-		assertDialog(dialog, this);
-	}
-	
-	public void testJavaDebugPrefPage() {
-		Dialog dialog = getPreferenceDialog("org.eclipse.jdt.ui.JavaDebugPreferencePage");
-		assertDialog(dialog, this);
-	}
-	
-	public void testRefactoringPrefPage() {
-		Dialog dialog = getPreferenceDialog("org.eclipse.jdt.ui.preferences.RefactoringPreferencePage");
-		assertDialog(dialog, this);
-	}
-	
-	public void testVMPrefPage() {
-		Dialog dialog = getPreferenceDialog("org.eclipse.jdt.ui.preferences.VMPreferencePage");
-		assertDialog(dialog, this);
-	}
-
-	public void testBuildPathPropPage() throws Exception {
-		IJavaProject jproject= JavaProjectHelper.createJavaProject(PROJECT_NAME, "bin");
-		JavaProjectHelper.addSourceContainer(jproject, "src");
-		JavaProjectHelper.addRTJar(jproject);
-		IJavaProject dep1= JavaProjectHelper.createJavaProject("OtherProject", "bin");
-		JavaProjectHelper.addRequiredProject(jproject, dep1);
-		
-		Dialog dialog = getPropertyDialog("org.eclipse.jdt.ui.propertyPages.BuildPathsPropertyPage", jproject);
-		assertDialog(dialog, this);
-		JavaProjectHelper.delete(jproject);
-		JavaProjectHelper.delete(dep1);
-	}
-	
-	public void testJARSourceAttachmentPropPage() throws Exception {
-		IJavaProject jproject= JavaProjectHelper.createJavaProject(PROJECT_NAME, "bin");
-		IPackageFragmentRoot root= JavaProjectHelper.addRTJar(jproject);
-		assertTrue(root != null);
-		
-		Dialog dialog = getPropertyDialog("org.eclipse.jdt.ui.propertyPages.SourceAttachmentPage1", root);
-		assertDialog(dialog, this);
-		
-		JavaProjectHelper.delete(jproject);
-	}
-	
-	public void testVariableSourceAttachmentPropPage() throws Exception {
-		IJavaProject jproject= JavaProjectHelper.createJavaProject(PROJECT_NAME, "bin");
-		IPackageFragmentRoot root= JavaProjectHelper.addVariableRTJar(jproject, "VAR_LIB", "VAR_SRC", "VAR_SRCROOT");
-		assertTrue(root != null);
-		
-		Dialog dialog = getPropertyDialog("org.eclipse.jdt.ui.propertyPages.SourceAttachmentPage1", root);
-		assertDialog(dialog, this);
-		
-		JavaProjectHelper.delete(jproject);
-		JavaCore.removeClasspathVariable("VAR_LIB", null);
-		JavaCore.removeClasspathVariable("VAR_SRC", null);
-		JavaCore.removeClasspathVariable("VAR_SRCROOT", null);
-	}
-	
-	public void testInfoPropPage() throws Exception {
-		IJavaProject jproject= JavaProjectHelper.createJavaProject(PROJECT_NAME, "bin");
-		IPackageFragmentRoot root= JavaProjectHelper.addSourceContainer(jproject, "src");
-		IPackageFragment pack= root.createPackageFragment("org.eclipse.jdt.internal.ui.wizards.dummy", true, null);
-		ICompilationUnit cu= pack.getCompilationUnit("DummyCompilationUnitWizard.java");
-		IType type= cu.createType("public class DummyCompilationUnitWizard {\n\n}\n", null, true, null);	
-		
-		Dialog dialog = getPropertyDialog("org.eclipse.jdt.ui.propertyPages.InfoPage", cu);
-		assertDialog(dialog, this);
-		
-		JavaProjectHelper.delete(jproject);
-	}
-	
-	public void testNoExecArgPropPage() throws Exception {
-		IJavaProject jproject= JavaProjectHelper.createJavaProject(PROJECT_NAME, "bin");
-		IPackageFragmentRoot root= JavaProjectHelper.addSourceContainer(jproject, "src");
-		IPackageFragment pack= root.createPackageFragment("org.eclipse.jdt.internal.ui.hello", true, null);
-		ICompilationUnit cu= pack.getCompilationUnit("HelloWorld.java");
-		IType type= cu.createType("public class HelloWorld {\n\n}\n", null, true, null);	
-	
-		Dialog dialog = getPropertyDialog("org.eclipse.jdt.ui.propertyPages.ExecutionArgsPage", cu);
-		assertDialog(dialog, this);
-		
-		JavaProjectHelper.delete(jproject);
-	}	
-	
-	public void testExecArgPropPage() throws Exception {
-		IJavaProject jproject= JavaProjectHelper.createJavaProject(PROJECT_NAME, "bin");
-		IPackageFragmentRoot root= JavaProjectHelper.addSourceContainer(jproject, "src");
-		IPackageFragment pack= root.createPackageFragment("org.eclipse.jdt.internal.ui.hello", true, null);
-		ICompilationUnit cu= pack.getCompilationUnit("HelloWorld.java");
-		IType type= cu.createType("public class HelloWorld {\npublic static void main(String[] args) {}\n}\n", null, true, null);	
-	
-		Dialog dialog = getPropertyDialog("org.eclipse.jdt.ui.propertyPages.ExecutionArgsPage", cu);
-		assertDialog(dialog, this);
-		
-		JavaProjectHelper.delete(jproject);
-	}	
-		
-
-	public void testVMPropPage() throws Exception {
-		IJavaProject jproject= JavaProjectHelper.createJavaProject(PROJECT_NAME, "bin");
-
-		Dialog dialog = getPropertyDialog("org.eclipse.jdt.ui.propertyPages.VMPropertyPage", jproject);
-		assertDialog(dialog, this);
-		
-		JavaProjectHelper.delete(jproject);
-	}	
-	
-	public void testVSourceLookupPage() throws Exception {
-		IJavaProject jproject= JavaProjectHelper.createJavaProject(PROJECT_NAME, "bin");
-		IJavaProject dep1= JavaProjectHelper.createJavaProject("OtherProject", "bin");
-		JavaProjectHelper.addRequiredProject(jproject, dep1);
-		
-		Dialog dialog = getPropertyDialog("org.eclipse.jdt.ui.launching.SourceLookupPage", jproject);
-		assertDialog(dialog, this);
-		
-		JavaProjectHelper.delete(jproject);
-		JavaProjectHelper.delete(dep1);
-	}	
-	
-}
-
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/dialogs/WizardsTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/dialogs/WizardsTest.java
deleted file mode 100644
index b268448..0000000
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/dialogs/WizardsTest.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.dialogs;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.eclipse.swt.widgets.Shell;
-
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.wizard.WizardDialog;
-
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.internal.WorkbenchPlugin;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.IType;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-import org.eclipse.jdt.testplugin.TestPluginLauncher;
-import org.eclipse.jdt.testplugin.util.DialogCheck;
-
-import org.eclipse.jdt.internal.ui.jarpackager.JarPackageWizard;
-import org.eclipse.jdt.internal.ui.wizards.NewClassCreationWizard;
-import org.eclipse.jdt.internal.ui.wizards.NewInterfaceCreationWizard;
-import org.eclipse.jdt.internal.ui.wizards.NewPackageCreationWizard;
-import org.eclipse.jdt.internal.ui.wizards.NewProjectCreationWizard;
-import org.eclipse.jdt.internal.ui.wizards.NewSnippetFileCreationWizard;
-import org.eclipse.jdt.internal.ui.wizards.NewSourceFolderCreationWizard;
-
-public class WizardsTest extends TestCase {
-	private static final int SIZING_WIZARD_WIDTH    = 470;
-	private static final int SIZING_WIZARD_HEIGHT   = 550;
-	private static final int SIZING_WIZARD_WIDTH_2  = 500;
-	private static final int SIZING_WIZARD_HEIGHT_2 = 500;
-	
-	private static final String PROJECT_NAME = "DummyProject";
-
-	public static void main(String[] args) {
-		TestPluginLauncher.run(TestPluginLauncher.getLocationFromProperties(), WizardsTest.class, args);
-	}
-	
-	public static Test suite() {
-		TestSuite suite= new TestSuite(WizardsTest.class.getName());
-		suite.addTest(new WizardsTest("testClassWizard"));
-		suite.addTest(new WizardsTest("testInterfaceWizard"));
-		suite.addTest(new WizardsTest("testJarPackageWizard"));
-		suite.addTest(new WizardsTest("testNewProjectWizard"));
-		suite.addTest(new WizardsTest("testPackageWizard"));
-		suite.addTest(new WizardsTest("testScrapbookWizard"));
-		suite.addTest(new WizardsTest("testSourceFolderWizard"));				
-		return suite;
-	}		
-	
-	public WizardsTest(String name) {
-		super(name);
-	}
-	private Shell getShell() {
-		return DialogCheck.getShell();
-	}
-	private IWorkbench getWorkbench() {
-		return WorkbenchPlugin.getDefault().getWorkbench();
-	}
-	
-	public void testNewProjectWizard() throws Exception {	
-		NewProjectCreationWizard wizard = new NewProjectCreationWizard();
-		wizard.init(getWorkbench(),  null);
-		wizard.setForcePreviousAndNextButtons(true);
-		WizardDialog dialog = new WizardDialog(getShell(), wizard);
-		dialog.create();
-		DialogCheck.assertDialog(dialog);
-	}
-	
-	public void testSourceFolderWizard() throws Exception {
-		IJavaProject jproject= JavaProjectHelper.createJavaProject(PROJECT_NAME, "bin");
-		JavaProjectHelper.addSourceContainer(jproject, "src1");
-		JavaProjectHelper.addRTJar(jproject);
-	
-		NewSourceFolderCreationWizard wizard = new NewSourceFolderCreationWizard();
-		wizard.init(getWorkbench(), new StructuredSelection(jproject));
-		wizard.setForcePreviousAndNextButtons(true);
-		WizardDialog dialog = new WizardDialog(getShell(), wizard);
-		dialog.create();
-		DialogCheck.assertDialog(dialog);
-		
-		JavaProjectHelper.delete(jproject);
-	}
-	
-	public void testPackageWizard() throws Exception {
-		IJavaProject jproject= JavaProjectHelper.createJavaProject(PROJECT_NAME, "bin");
-		IPackageFragmentRoot root= JavaProjectHelper.addSourceContainer(jproject, "src1");
-		JavaProjectHelper.addRTJar(jproject);
-	
-		NewPackageCreationWizard wizard = new NewPackageCreationWizard();
-		wizard.init(getWorkbench(), new StructuredSelection(root));
-		wizard.setForcePreviousAndNextButtons(true);
-		WizardDialog dialog = new WizardDialog(getShell(), wizard);
-		dialog.create();
-		DialogCheck.assertDialog(dialog);
-		
-		JavaProjectHelper.delete(jproject);
-	}
-	
-	public void testClassWizard() throws Exception {
-		IJavaProject jproject= JavaProjectHelper.createJavaProject(PROJECT_NAME, "bin");
-		IPackageFragmentRoot root= JavaProjectHelper.addSourceContainer(jproject, "src1");
-		IPackageFragment pack= root.createPackageFragment("org.eclipse.jdt.internal.ui.hello", true, null);
-		JavaProjectHelper.addRTJar(jproject);
-	
-		NewClassCreationWizard wizard = new NewClassCreationWizard();
-		wizard.init(getWorkbench(), new StructuredSelection(pack));
-		wizard.setForcePreviousAndNextButtons(true);
-		WizardDialog dialog = new WizardDialog(getShell(), wizard);
-		dialog.create();
-		DialogCheck.assertDialog(dialog);
-		
-		JavaProjectHelper.delete(jproject);
-	}
-	
-	public void testInterfaceWizard() throws Exception {
-		IJavaProject jproject= JavaProjectHelper.createJavaProject(PROJECT_NAME, "bin");
-		IPackageFragmentRoot root= JavaProjectHelper.addSourceContainer(jproject, "src1");
-		IPackageFragment pack= root.createPackageFragment("org.eclipse.jdt.internal.ui.hello", true, null);
-		JavaProjectHelper.addRTJar(jproject);
-	
-		NewInterfaceCreationWizard wizard = new NewInterfaceCreationWizard();
-		wizard.init(getWorkbench(), new StructuredSelection(pack));
-		wizard.setForcePreviousAndNextButtons(true);
-		WizardDialog dialog = new WizardDialog(getShell(), wizard);
-		dialog.create();
-		DialogCheck.assertDialog(dialog);
-		
-		JavaProjectHelper.delete(jproject);
-	}
-	
-	public void testScrapbookWizard() throws Exception {
-		IJavaProject jproject= JavaProjectHelper.createJavaProject(PROJECT_NAME, "bin");
-		IPackageFragmentRoot root= JavaProjectHelper.addSourceContainer(jproject, "src1");
-		JavaProjectHelper.addRTJar(jproject);
-	
-		NewSnippetFileCreationWizard wizard = new NewSnippetFileCreationWizard();
-		wizard.init(getWorkbench(), new StructuredSelection(root));
-		wizard.setForcePreviousAndNextButtons(true);
-		WizardDialog dialog = new WizardDialog(getShell(), wizard);
-		dialog.create();
-		DialogCheck.assertDialog(dialog);
-		
-		JavaProjectHelper.delete(jproject);
-	}
-	
-	public void testJarPackageWizard() throws Exception {
-		IJavaProject jproject= JavaProjectHelper.createJavaProject(PROJECT_NAME, "bin");
-		IPackageFragmentRoot root= JavaProjectHelper.addSourceContainer(jproject, "src1");
-		JavaProjectHelper.addRTJar(jproject);
-		IPackageFragment pack= root.createPackageFragment("org.eclipse.jdt.internal.ui.hello", true, null);
-		ICompilationUnit cu= pack.getCompilationUnit("HelloWorld.java");
-		IType type= cu.createType("public class HelloWorld {\npublic static void main(String[] args) {}\n}\n", null, true, null);	
-	
-		JarPackageWizard wizard = new JarPackageWizard();
-		wizard.init(getWorkbench(), new StructuredSelection(root));
-		wizard.setForcePreviousAndNextButtons(true);
-		WizardDialog dialog = new WizardDialog(getShell(), wizard);
-		dialog.create();
-		DialogCheck.assertDialog(dialog);
-		
-		JavaProjectHelper.delete(jproject);
-	}				
-	
-}
-
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/LocalCorrectionsQuickFixTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/LocalCorrectionsQuickFixTest.java
deleted file mode 100644
index 050c0d6..0000000
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/LocalCorrectionsQuickFixTest.java
+++ /dev/null
@@ -1,561 +0,0 @@
-package org.eclipse.jdt.ui.tests.quickfix;
-
-import java.util.ArrayList;
-import java.util.Hashtable;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jface.preference.IPreferenceStore;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.compiler.IProblem;
-import org.eclipse.jdt.core.dom.AST;
-import org.eclipse.jdt.core.dom.CompilationUnit;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-import org.eclipse.jdt.ui.PreferenceConstants;
-
-import org.eclipse.jdt.internal.ui.JavaPlugin;
-import org.eclipse.jdt.internal.ui.text.correction.CUCorrectionProposal;
-import org.eclipse.jdt.internal.ui.text.correction.CUCorrectionProposal;
-import org.eclipse.jdt.internal.ui.text.correction.ChangeCorrectionProposal;
-import org.eclipse.jdt.internal.ui.text.correction.JavaCorrectionProcessor;
-import org.eclipse.jdt.internal.ui.text.correction.ProblemPosition;
-
-public class LocalCorrectionsQuickFixTest extends QuickFixTest {
-	
-	private static final Class THIS= LocalCorrectionsQuickFixTest.class;
-	
-	private IJavaProject fJProject1;
-	private IPackageFragmentRoot fSourceFolder;
-
-	public LocalCorrectionsQuickFixTest(String name) {
-		super(name);
-	}
-
-
-	public static Test suite() {
-		if (true) {
-			return new TestSuite(THIS);
-		} else {
-			TestSuite suite= new TestSuite();
-			suite.addTest(new LocalCorrectionsQuickFixTest("testStaticMethodRequestedInSameType"));
-			return suite;
-		}
-	}
-
-
-	protected void setUp() throws Exception {
-		Hashtable options= JavaCore.getOptions();
-		options.put(JavaCore.FORMATTER_TAB_CHAR, JavaCore.SPACE);
-		options.put(JavaCore.FORMATTER_TAB_SIZE, "4");
-		options.put(JavaCore.COMPILER_PB_STATIC_ACCESS_RECEIVER, JavaCore.ERROR);
-		
-		JavaCore.setOptions(options);			
-
-		IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
-		store.setValue(PreferenceConstants.CODEGEN__FILE_COMMENTS, false);
-		store.setValue(PreferenceConstants.CODEGEN__JAVADOC_STUBS, false);
-		
-		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		assertTrue("rt not found", JavaProjectHelper.addRTJar(fJProject1) != null);
-
-		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
-	}
-
-
-	protected void tearDown() throws Exception {
-		JavaProjectHelper.delete(fJProject1);
-	}
-
-	
-	public void testFieldAccessToStatic() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.io.File;\n");
-		buf.append("public class E {\n");
-		buf.append("    public char foo() {\n");
-		buf.append("        return (new File(\"x.txt\")).separatorChar;\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu);
-		assertTrue("Problem type not marked with lightbulb", JavaCorrectionProcessor.hasCorrections(problemPos.getId()));
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 1);
-		assertCorrectLabels(proposals);
-		
-		CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.io.File;\n");
-		buf.append("public class E {\n");
-		buf.append("    public char foo() {\n");
-		buf.append("        return File.separatorChar;\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-	}
-	
-	public void testQualifiedAccessToStatic() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo(Thread t) {\n");
-		buf.append("        t.sleep(10);\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu);
-		assertTrue("Problem type not marked with lightbulb", JavaCorrectionProcessor.hasCorrections(problemPos.getId()));
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 1);
-		assertCorrectLabels(proposals);
-		
-		CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo(Thread t) {\n");
-		buf.append("        Thread.sleep(10);\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-	}	
-	
-	public void testThisAccessToStatic() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.io.File;\n");
-		buf.append("public class E {\n");
-		buf.append("    public static void goo() {\n");
-		buf.append("    }\n");				
-		buf.append("    public void foo() {\n");
-		buf.append("        this.goo();\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu);
-		assertTrue("Problem type not marked with lightbulb", JavaCorrectionProcessor.hasCorrections(problemPos.getId()));
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 1);
-		assertCorrectLabels(proposals);
-		
-		CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.io.File;\n");
-		buf.append("public class E {\n");
-		buf.append("    public static void goo() {\n");
-		buf.append("    }\n");				
-		buf.append("    public void foo() {\n");
-		buf.append("        E.goo();\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-	}
-	
-	public void testCastMissingInVarDecl() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo(Object o) {\n");
-		buf.append("        Thread th= o;\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu);
-		assertTrue("Problem type not marked with lightbulb", JavaCorrectionProcessor.hasCorrections(problemPos.getId()));
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 2);
-		assertCorrectLabels(proposals);
-		
-		CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo(Object o) {\n");
-		buf.append("        Thread th= (Thread) o;\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-		
-		proposal= (CUCorrectionProposal) proposals.get(1);
-		preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo(Object o) {\n");
-		buf.append("        Object th= o;\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());		
-	}
-	
-	public void testCastMissingInVarDecl2() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.util.List;\n");		
-		buf.append("public class Container {\n");
-		buf.append("    public List[] getLists() {\n");
-		buf.append("        return null;\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		pack1.createCompilationUnit("Container.java", buf.toString(), false, null);
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.util.ArrayList;\n");				
-		buf.append("public class E {\n");
-		buf.append("    public void foo(Container c) {\n");
-		buf.append("         ArrayList[] lists= c.getLists();\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu);
-		assertTrue("Problem type not marked with lightbulb", JavaCorrectionProcessor.hasCorrections(problemPos.getId()));
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 2);
-		assertCorrectLabels(proposals);
-		
-		CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.util.ArrayList;\n");				
-		buf.append("public class E {\n");
-		buf.append("    public void foo(Container c) {\n");
-		buf.append("         ArrayList[] lists= (ArrayList[]) c.getLists();\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-		
-		proposal= (CUCorrectionProposal) proposals.get(1);
-		preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");					
-		buf.append("import java.util.ArrayList;\n");
-		buf.append("import java.util.List;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo(Container c) {\n");
-		buf.append("         List[] lists= c.getLists();\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());		
-	}	
-	
-	
-	public void testCastMissingInFieldDecl() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    int time= System.currentTimeMillis();\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu);
-		assertTrue("Problem type not marked with lightbulb", JavaCorrectionProcessor.hasCorrections(problemPos.getId()));
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 2);
-		assertCorrectLabels(proposals);
-		
-		CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    int time= (int) System.currentTimeMillis();\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-		
-		proposal= (CUCorrectionProposal) proposals.get(1);
-		preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    long time= System.currentTimeMillis();\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());		
-	}	
-	
-	public void testCastMissingInAssignment() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.util.Iterator;\n");		
-		buf.append("public class E {\n");
-		buf.append("    public void foo(Iterator iter) {\n");
-		buf.append("        String str;\n");
-		buf.append("        str= iter.next();\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu);
-		assertTrue("Problem type not marked with lightbulb", JavaCorrectionProcessor.hasCorrections(problemPos.getId()));
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 1);
-		assertCorrectLabels(proposals);
-		
-		CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.util.Iterator;\n");		
-		buf.append("public class E {\n");
-		buf.append("    public void foo(Iterator iter) {\n");
-		buf.append("        String str;\n");
-		buf.append("        str= (String) iter.next();\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-	}
-	
-	public void testCastMissingInExpression() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.util.List;\n");		
-		buf.append("public class E {\n");
-		buf.append("    public String[] foo(List list) {\n");
-		buf.append("        return list.toArray(new List[list.size()]);\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu);
-		assertTrue("Problem type not marked with lightbulb", JavaCorrectionProcessor.hasCorrections(problemPos.getId()));
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 1);
-		assertCorrectLabels(proposals);
-		
-		CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.util.List;\n");		
-		buf.append("public class E {\n");
-		buf.append("    public String[] foo(List list) {\n");
-		buf.append("        return (String[]) list.toArray(new List[list.size()]);\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-	}
-	
-	public void testStaticMethodRequestedInSameType1() throws Exception {
-		if (true) {
-			System.out.println("testStaticMethodRequestedInSameType1: Waiting for release fo bug fix 24406");	
-			return;
-		}
-		
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.util.List;\n");		
-		buf.append("public class E {\n");
-		buf.append("    public void xoo() {\n");
-		buf.append("    }\n");		
-		buf.append("    public static void foo() {\n");
-		buf.append("        xoo();\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu);
-		assertTrue("Problem type not marked with lightbulb", JavaCorrectionProcessor.hasCorrections(problemPos.getId()));
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 1);
-		assertCorrectLabels(proposals);
-		
-		CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.util.List;\n");		
-		buf.append("public class E {\n");
-		buf.append("    public static void xoo() {\n");
-		buf.append("    }\n");		
-		buf.append("    public static void foo() {\n");
-		buf.append("        xoo();\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-	}	
-	
-	public void testStaticMethodRequestedInSameType2() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.util.List;\n");		
-		buf.append("public class E {\n");
-		buf.append("    public void xoo() {\n");
-		buf.append("    }\n");		
-		buf.append("    public static void foo() {\n");
-		buf.append("        E.xoo();\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu);
-		assertTrue("Problem type not marked with lightbulb", JavaCorrectionProcessor.hasCorrections(problemPos.getId()));
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 1);
-		assertCorrectLabels(proposals);
-		
-		CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.util.List;\n");		
-		buf.append("public class E {\n");
-		buf.append("    public static void xoo() {\n");
-		buf.append("    }\n");		
-		buf.append("    public static void foo() {\n");
-		buf.append("        E.xoo();\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-	}
-	
-	public void testStaticMethodRequestedInOtherType() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.util.List;\n");		
-		buf.append("public class X {\n");
-		buf.append("    public void xoo() {\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		pack1.createCompilationUnit("X.java", buf.toString(), false, null);
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.util.ArrayList;\n");				
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("         X.xoo();\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu);
-		assertTrue("Problem type not marked with lightbulb", JavaCorrectionProcessor.hasCorrections(problemPos.getId()));
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 1);
-		assertCorrectLabels(proposals);
-		
-		CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.util.List;\n");		
-		buf.append("public class X {\n");
-		buf.append("    public static void xoo() {\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-	}		
-	
-	
-	
-}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/MarkerResolutionGenerator.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/MarkerResolutionGenerator.java
deleted file mode 100644
index 8d514c8..0000000
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/MarkerResolutionGenerator.java
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/MarkerResolutionTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/MarkerResolutionTest.java
deleted file mode 100644
index 78c8809..0000000
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/MarkerResolutionTest.java
+++ /dev/null
@@ -1,178 +0,0 @@
-package org.eclipse.jdt.ui.tests.quickfix;
-
-import java.util.Arrays;
-import java.util.Hashtable;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.CoreException;
-
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.text.BadLocationException;
-import org.eclipse.jface.text.IDocument;
-import org.eclipse.jface.text.contentassist.ICompletionProposal;
-
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.texteditor.ITextEditor;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.JavaCore;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-import org.eclipse.jdt.ui.JavaUI;
-import org.eclipse.jdt.ui.PreferenceConstants;
-
-import org.eclipse.jdt.internal.ui.JavaPlugin;
-import org.eclipse.jdt.internal.ui.javaeditor.EditorUtility;
-import org.eclipse.jdt.internal.ui.text.correction.JavaCorrectionProcessor;
-
-public class MarkerResolutionTest extends QuickFixTest {
-	
-	private static final Class THIS= MarkerResolutionTest.class;
-	
-	private IJavaProject fJProject1;
-	private IPackageFragmentRoot fSourceFolder;
-
-	public MarkerResolutionTest(String name) {
-		super(name);
-	}
-
-	public static Test suite() {
-		if (true) {
-			return new TestSuite(THIS);
-		} else {
-			TestSuite suite= new TestSuite();
-			suite.addTest(new MarkerResolutionTest("testQuickFixAfterModification"));
-			return suite;
-		}
-	}
-
-
-	protected void setUp() throws Exception {
-		Hashtable options= JavaCore.getOptions();
-		options.put(JavaCore.FORMATTER_TAB_CHAR, JavaCore.SPACE);
-		options.put(JavaCore.FORMATTER_TAB_SIZE, "4");
-		JavaCore.setOptions(options);			
-
-		IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
-		store.setValue(PreferenceConstants.CODEGEN__FILE_COMMENTS, false);
-		store.setValue(PreferenceConstants.CODEGEN__JAVADOC_STUBS, false);
-		
-		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		assertTrue("rt not found", JavaProjectHelper.addRTJar(fJProject1) != null);
-
-		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
-	}
-
-
-	protected void tearDown() throws Exception {
-		JavaProjectHelper.delete(fJProject1);
-	}
-
-
-	private IMarker createMarker(ICompilationUnit cu, int line, int offset, int len) throws CoreException, BadLocationException {
-		IFile file= (IFile) ((ICompilationUnit) cu).getResource();
-		IMarker marker= file.createMarker("org.eclipse.jdt.ui.tests.testmarker");
-		marker.setAttribute(IMarker.LOCATION, cu.getElementName());
-		marker.setAttribute(IMarker.MESSAGE, "Test marker");
-		marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_ERROR);
-		marker.setAttribute(IMarker.LINE_NUMBER, line);
-		marker.setAttribute(IMarker.CHAR_START, offset);
-		marker.setAttribute(IMarker.CHAR_END, offset + len);
-		return marker;
-	}
-
-	
-	public void testQuickFix() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.util.Vector;\n");
-		buf.append("public class E {\n");
-		buf.append("    void foo(Vector vec) {\n");
-		buf.append("        goo(true);\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		IMarker marker= createMarker(cu, 0, 0, 7);
-		
-		IEditorPart part= EditorUtility.openInEditor(cu);
-		
-		try {
-			JavaCorrectionProcessor processor= new JavaCorrectionProcessor(part);
-			ICompletionProposal[] proposals= processor.computeCompletionProposals(null, 0);
-			
-			assertNumberOf("proposals", proposals.length, 1);
-			assertCorrectLabels(Arrays.asList(proposals));
-			
-			IDocument doc= JavaUI.getDocumentProvider().getDocument(part.getEditorInput());
-			
-			proposals[0].apply(doc);
-			
-			buf= new StringBuffer();
-			buf.append("PACKAGE test1;\n");
-			buf.append("import java.util.Vector;\n");
-			buf.append("public class E {\n");
-			buf.append("    void foo(Vector vec) {\n");
-			buf.append("        goo(true);\n");
-			buf.append("    }\n");
-			buf.append("}\n");
-			assertEqualString(doc.get(), buf.toString());
-		} finally {
-			JavaPlugin.getActivePage().closeAllEditors(false);
-		}
-	}
-	
-	public void testQuickFixAfterModification() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.util.Vector;\n");
-		buf.append("public class E {\n");
-		buf.append("    void foo(Vector vec) {\n");
-		buf.append("        goo(true);\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		int markerPos= 8;
-		IMarker marker= createMarker(cu, 0, markerPos, 5);
-		
-		IEditorPart part= EditorUtility.openInEditor(cu);
-		try {
-			IDocument doc= JavaUI.getDocumentProvider().getDocument(part.getEditorInput());
-			doc.replace(0, 0, "\n"); // insert new line
-			
-			JavaCorrectionProcessor processor= new JavaCorrectionProcessor(part);
-			ICompletionProposal[] proposals= processor.computeCompletionProposals(null, markerPos + 1);
-			
-			assertNumberOf("proposals", proposals.length, 1);
-			assertCorrectLabels(Arrays.asList(proposals));	
-			
-			proposals[0].apply(doc);
-			
-			buf= new StringBuffer();
-			buf.append("\n");		
-			buf.append("package TEST1;\n");
-			buf.append("import java.util.Vector;\n");
-			buf.append("public class E {\n");
-			buf.append("    void foo(Vector vec) {\n");
-			buf.append("        goo(true);\n");
-			buf.append("    }\n");
-			buf.append("}\n");
-			assertEqualString(doc.get(), buf.toString());
-		} finally {
-			JavaPlugin.getActivePage().closeAllEditors(false);
-		}
-	}	
-	
-}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest.java
deleted file mode 100644
index 519b260..0000000
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest.java
+++ /dev/null
@@ -1,123 +0,0 @@
-package org.eclipse.jdt.ui.tests.quickfix;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.StringReader;
-import java.util.List;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.eclipse.jface.text.contentassist.ICompletionProposal;
-
-import org.eclipse.jdt.core.dom.CompilationUnit;
-import org.eclipse.jdt.core.dom.MethodDeclaration;
-import org.eclipse.jdt.core.dom.TypeDeclaration;
-
-/**
-  */
-public class QuickFixTest extends TestCase {
-
-	public static Test suite() {
-		TestSuite suite= new TestSuite();
-		suite.addTest(new TestSuite(UnresolvedTypesQuickFixTest.class));
-		suite.addTest(new TestSuite(UnresolvedVariablesQuickFixTest.class));
-		suite.addTest(new TestSuite(UnresolvedMethodsQuickFixTest.class));
-		suite.addTest(new TestSuite(ReturnTypeQuickFixTest.class));
-		suite.addTest(new TestSuite(LocalCorrectionsQuickFixTest.class));
-		suite.addTest(new TestSuite(UnresolvedMethodsQuickFixTest.class));
-		suite.addTest(new TestSuite(MarkerResolutionTest.class));
-		return suite;
-	}
-
-	
-	public QuickFixTest(String name) {
-		super(name);
-	}
-	
-	public static void assertCorrectLabels(List proposals) {
-		for (int i= 0; i < proposals.size(); i++) {
-			ICompletionProposal proposal= (ICompletionProposal) proposals.get(i);
-			String name= proposal.getDisplayString();
-			if (name == null || name.length() == 0 || name.charAt(0) == '!' || name.indexOf('{') != -1) {
-				assertTrue("wrong proposal label: " + name, false);
-			}
-			if (proposal.getImage() == null) {
-				assertTrue("wrong proposal image", false);
-			}			
-		}
-	}
-	
-	
-	public static void assertNumberOf(String name, int nProblems, int nProblemsExpected) {
-		assertTrue("Wrong number of " + name + ", is: " + nProblems + ", expected: " + nProblemsExpected, nProblems == nProblemsExpected);
-	}
-	
-	private static final int printRange= 6;
-	
-	public static void assertEqualString(String str1, String str2) {	
-		int len1= Math.min(str1.length(), str2.length());
-		
-		int diffPos= -1;
-		for (int i= 0; i < len1; i++) {
-			if (str1.charAt(i) != str2.charAt(i)) {
-				diffPos= i;
-				break;
-			}
-		}
-		if (diffPos == -1 && str1.length() != str2.length()) {
-			diffPos= len1;
-		}
-		if (diffPos != -1) {
-			int diffAhead= Math.max(0, diffPos - printRange);
-			int diffAfter= Math.min(str1.length(), diffPos + printRange);
-			
-			String diffStr= str1.substring(diffAhead, diffPos) + '^' + str1.substring(diffPos, diffAfter);
-			
-			assertTrue("Content not as expected: is\n" + str1 + "\nDiffers at pos " + diffPos + ": " + diffStr + "\nexpected:\n" + str2, false);
-		}
-	}
-	
-	public static void assertEqualStringIgnoreDelim(String str1, String str2) throws IOException {
-		BufferedReader read1= new BufferedReader(new StringReader(str1));
-		BufferedReader read2= new BufferedReader(new StringReader(str2));
-		
-		int line= 1;
-		do {
-			String s1= read1.readLine();
-			String s2= read2.readLine();
-			
-			if (s1 == null || !s1.equals(s2)) {
-				if (s1 == null && s2 == null) {
-					return;
-				}
-				String diffStr= (s1 == null) ? s2 : s1;
-				assertTrue("Content not as expected: is\n" + str1 + "\nDiffers at line " + line + ": " + diffStr + "\nexpected:\n" + str2, false);
-			}
-			line++;
-		} while (true);
-	}	
-	
-	public static TypeDeclaration findTypeDeclaration(CompilationUnit astRoot, String simpleTypeName) {
-		List types= astRoot.types();
-		for (int i= 0; i < types.size(); i++) {
-			TypeDeclaration elem= (TypeDeclaration) types.get(i);
-			if (simpleTypeName.equals(elem.getName().getIdentifier())) {
-				return elem;
-			}
-		}
-		return null;
-	}
-	
-	public static MethodDeclaration findMethodDeclaration(TypeDeclaration typeDecl, String methodName) {
-		MethodDeclaration[] methods= typeDecl.getMethods();
-		for (int i= 0; i < methods.length; i++) {
-			if (methodName.equals(methods[i].getName().getIdentifier())) {
-				return methods[i];
-			}
-		}
-		return null;
-	}	
-	
-}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ReturnTypeQuickFixTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ReturnTypeQuickFixTest.java
deleted file mode 100644
index 7bc26e0..0000000
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ReturnTypeQuickFixTest.java
+++ /dev/null
@@ -1,475 +0,0 @@
-package org.eclipse.jdt.ui.tests.quickfix;
-
-import java.util.ArrayList;
-import java.util.Hashtable;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jface.preference.IPreferenceStore;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.compiler.IProblem;
-import org.eclipse.jdt.core.dom.AST;
-import org.eclipse.jdt.core.dom.CompilationUnit;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-import org.eclipse.jdt.ui.PreferenceConstants;
-
-import org.eclipse.jdt.internal.ui.JavaPlugin;
-import org.eclipse.jdt.internal.ui.text.correction.ASTRewriteCorrectionProposal;
-import org.eclipse.jdt.internal.ui.text.correction.JavaCorrectionProcessor;
-import org.eclipse.jdt.internal.ui.text.correction.ProblemPosition;
-
-public class ReturnTypeQuickFixTest extends QuickFixTest {
-	
-	private static final Class THIS= ReturnTypeQuickFixTest.class;
-	
-	private IJavaProject fJProject1;
-	private IPackageFragmentRoot fSourceFolder;
-
-	public ReturnTypeQuickFixTest(String name) {
-		super(name);
-	}
-
-
-	public static Test suite() {
-		if (true) {
-			return new TestSuite(THIS);
-		} else {
-			TestSuite suite= new TestSuite();
-			suite.addTest(new ReturnTypeQuickFixTest("testMethodWithConstructorName"));
-			return suite;
-		}
-	}
-
-
-	protected void setUp() throws Exception {
-		Hashtable options= JavaCore.getOptions();
-		options.put(JavaCore.FORMATTER_TAB_CHAR, JavaCore.SPACE);
-		options.put(JavaCore.FORMATTER_TAB_SIZE, "4");
-		JavaCore.setOptions(options);			
-
-		IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
-		store.setValue(PreferenceConstants.CODEGEN__FILE_COMMENTS, false);
-		store.setValue(PreferenceConstants.CODEGEN__JAVADOC_STUBS, false);
-		
-		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		assertTrue("rt not found", JavaProjectHelper.addRTJar(fJProject1) != null);
-
-		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
-	}
-
-
-	protected void tearDown() throws Exception {
-		JavaProjectHelper.delete(fJProject1);
-	}
-
-	
-	public void testSimpleTypeReturnDeclMissing() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.util.Vector;\n");
-		buf.append("public class E {\n");
-		buf.append("    public foo() {\n");
-		buf.append("        return (new Vector()).elements();\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu);
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 1);
-		assertCorrectLabels(proposals);
-		
-		ASTRewriteCorrectionProposal proposal= (ASTRewriteCorrectionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.util.Enumeration;\n");		
-		buf.append("import java.util.Vector;\n");
-		buf.append("public class E {\n");
-		buf.append("    public Enumeration foo() {\n");
-		buf.append("        return (new Vector()).elements();\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-	}
-	
-	public void testVoidTypeReturnDeclMissing() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public foo() {\n");
-		buf.append("        //do nothing\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu);
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 1);
-		assertCorrectLabels(proposals);
-		
-		ASTRewriteCorrectionProposal proposal= (ASTRewriteCorrectionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        //do nothing\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-	}
-	
-	public void testVoidTypeReturnDeclMissing2() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public foo() {\n");
-		buf.append("        if (true) {\n");
-		buf.append("           return;\n");
-		buf.append("        }\n");
-		buf.append("        return;\n");				
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu);
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 1);
-		assertCorrectLabels(proposals);
-		
-		ASTRewriteCorrectionProposal proposal= (ASTRewriteCorrectionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo() {\n");
-		buf.append("        if (true) {\n");
-		buf.append("           return;\n");
-		buf.append("        }\n");
-		buf.append("        return;\n");				
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-	}
-	
-	public void testNullTypeReturnDeclMissing() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public foo() {\n");
-		buf.append("        return null;\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu);
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 1);
-		assertCorrectLabels(proposals);
-		
-		ASTRewriteCorrectionProposal proposal= (ASTRewriteCorrectionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public Object foo() {\n");
-		buf.append("        return null;\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-	}
-	
-	public void testArrayTypeReturnDeclMissing() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public foo() {\n");
-		buf.append("        return new int[][] { { 1, 2 }, { 2, 3 } };\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu);
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 1);
-		assertCorrectLabels(proposals);
-		
-		ASTRewriteCorrectionProposal proposal= (ASTRewriteCorrectionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public int[][] foo() {\n");
-		buf.append("        return new int[][] { { 1, 2 }, { 2, 3 } };\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-	}
-	
-	public void testVoidMethodReturnsStatement() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.util.Vector;\n");
-		buf.append("public class E {\n");
-		buf.append("    Vector fList= new Vector();\n");
-		buf.append("    public void elements() {\n");
-		buf.append("        return fList.toArray();\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu);
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 1);
-		assertCorrectLabels(proposals);
-		
-		ASTRewriteCorrectionProposal proposal= (ASTRewriteCorrectionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.util.Vector;\n");
-		buf.append("public class E {\n");
-		buf.append("    Vector fList= new Vector();\n");
-		buf.append("    public Object[] elements() {\n");
-		buf.append("        return fList.toArray();\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-	}
-	
-	public void testVoidMethodReturnsAnonymClass() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void getOperation() {\n");
-		buf.append("        return new Runnable() {\n");
-		buf.append("            public void run() {}\n");
-		buf.append("        };\n");				
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu);
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 1);
-		assertCorrectLabels(proposals);
-		
-		ASTRewriteCorrectionProposal proposal= (ASTRewriteCorrectionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public Runnable getOperation() {\n");
-		buf.append("        return new Runnable() {\n");
-		buf.append("            public void run() {}\n");
-		buf.append("        };\n");				
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-	}
-	
-	public void testCorrectReturnStatement() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public Runnable getOperation() {\n");
-		buf.append("        return;\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu);
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 1);
-		assertCorrectLabels(proposals);
-		
-		ASTRewriteCorrectionProposal proposal= (ASTRewriteCorrectionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public Runnable getOperation() {\n");
-		buf.append("        return null;\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-	}
-	
-	public void testCorrectReturnStatementForArray() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public int[][] getArray() {\n");
-		buf.append("        return;\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu);
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 1);
-		assertCorrectLabels(proposals);
-		
-		ASTRewriteCorrectionProposal proposal= (ASTRewriteCorrectionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public int[][] getArray() {\n");
-		buf.append("        return null;\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-	}
-	
-	public void testMethodWithConstructorName() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public int[][] E() {\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu);
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 1);
-		assertCorrectLabels(proposals);
-		
-		ASTRewriteCorrectionProposal proposal= (ASTRewriteCorrectionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public E() {\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-	}	
-	
-	
-	/*
-	public void testMissingReturnStatement() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public int[][] getArray() {\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu);
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 1);
-		assertCorrectLabels(proposals);
-		
-		ASTRewriteCorrectionProposal proposal= (ASTRewriteCorrectionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public int[][] getArray() {\n");
-		buf.append("        return null;\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-	}
-	*/	
-	
-}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnresolvedMethodsQuickFixTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnresolvedMethodsQuickFixTest.java
deleted file mode 100644
index b26f09b..0000000
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnresolvedMethodsQuickFixTest.java
+++ /dev/null
@@ -1,400 +0,0 @@
-package org.eclipse.jdt.ui.tests.quickfix;
-
-import java.util.ArrayList;
-import java.util.Hashtable;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jface.preference.IPreferenceStore;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.compiler.IProblem;
-import org.eclipse.jdt.core.dom.AST;
-import org.eclipse.jdt.core.dom.CompilationUnit;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-import org.eclipse.jdt.ui.PreferenceConstants;
-
-import org.eclipse.jdt.internal.ui.JavaPlugin;
-import org.eclipse.jdt.internal.ui.text.correction.CUCorrectionProposal;
-import org.eclipse.jdt.internal.ui.text.correction.JavaCorrectionProcessor;
-import org.eclipse.jdt.internal.ui.text.correction.NewCUCompletionUsingWizardProposal;
-import org.eclipse.jdt.internal.ui.text.correction.NewMethodCompletionProposal;
-import org.eclipse.jdt.internal.ui.text.correction.NewVariableCompletionProposal;
-import org.eclipse.jdt.internal.ui.text.correction.ProblemPosition;
-
-public class UnresolvedMethodsQuickFixTest extends QuickFixTest {
-	
-	private static final Class THIS= UnresolvedMethodsQuickFixTest.class;
-	
-	private IJavaProject fJProject1;
-	private IPackageFragmentRoot fSourceFolder;
-
-	public UnresolvedMethodsQuickFixTest(String name) {
-		super(name);
-	}
-
-
-	public static Test suite() {
-		if (false) {
-			return new TestSuite(THIS);
-		} else {
-			TestSuite suite= new TestSuite();
-			suite.addTest(new UnresolvedMethodsQuickFixTest("testSuperMethodInvocation"));
-			return suite;
-		}
-	}
-
-
-	protected void setUp() throws Exception {
-		Hashtable options= JavaCore.getOptions();
-		options.put(JavaCore.FORMATTER_TAB_CHAR, JavaCore.SPACE);
-		options.put(JavaCore.FORMATTER_TAB_SIZE, "4");
-		JavaCore.setOptions(options);			
-
-		IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
-		store.setValue(PreferenceConstants.CODEGEN__FILE_COMMENTS, false);
-		store.setValue(PreferenceConstants.CODEGEN__JAVADOC_STUBS, false);
-		
-		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		assertTrue("rt not found", JavaProjectHelper.addRTJar(fJProject1) != null);
-
-		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
-	}
-
-
-	protected void tearDown() throws Exception {
-		JavaProjectHelper.delete(fJProject1);
-	}
-
-	
-	public void testMethodInSameType() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.util.Vector;\n");
-		buf.append("public class E {\n");
-		buf.append("    void foo(Vector vec) {\n");
-		buf.append("        int i= goo(vec, true);\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu);
-		assertTrue("Problem type not marked with lightbulb", JavaCorrectionProcessor.hasCorrections(problemPos.getId()));
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 1);
-		assertCorrectLabels(proposals);
-
-		NewMethodCompletionProposal proposal= (NewMethodCompletionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.util.Vector;\n");
-		buf.append("public class E {\n");
-		buf.append("    void foo(Vector vec) {\n");
-		buf.append("        int i= goo(vec, true);\n");
-		buf.append("    }\n");
-		buf.append("    private int goo(Vector vec, boolean b) {\n");
-		buf.append("        return 0;\n");
-		buf.append("    }\n");		
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-	}
-	
-	public void testMethodInSameTypeUsingThis() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.util.Vector;\n");
-		buf.append("public class E {\n");
-		buf.append("    void foo(Vector vec) {\n");
-		buf.append("        int i= this.goo(vec, true);\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu);
-		assertTrue("Problem type not marked with lightbulb", JavaCorrectionProcessor.hasCorrections(problemPos.getId()));
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 1);
-		assertCorrectLabels(proposals);
-
-		NewMethodCompletionProposal proposal= (NewMethodCompletionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.util.Vector;\n");
-		buf.append("public class E {\n");
-		buf.append("    void foo(Vector vec) {\n");
-		buf.append("        int i= this.goo(vec, true);\n");
-		buf.append("    }\n");
-		buf.append("    private int goo(Vector vec, boolean b) {\n");
-		buf.append("        return 0;\n");
-		buf.append("    }\n");		
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-	}
-	
-	public void testMethodInDifferentClass() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    void foo(X x) {\n");
-		buf.append("        boolean i= x.goo(1, 2.1);\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class X {\n");
-		buf.append("}\n");
-		pack1.createCompilationUnit("X.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu);
-		assertTrue("Problem type not marked with lightbulb", JavaCorrectionProcessor.hasCorrections(problemPos.getId()));
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 1);
-		assertCorrectLabels(proposals);
-
-		NewMethodCompletionProposal proposal= (NewMethodCompletionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class X {\n");
-		buf.append("    public boolean goo(int i, double d) {\n");
-		buf.append("        return false;\n");
-		buf.append("    }\n");				
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-	}
-	
-	public void testMethodInDifferentInterface() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    void foo(X x) {\n");
-		buf.append("        boolean i= x.goo(getClass());\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public interface X {\n");
-		buf.append("}\n");
-		pack1.createCompilationUnit("X.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu);
-		assertTrue("Problem type not marked with lightbulb", JavaCorrectionProcessor.hasCorrections(problemPos.getId()));
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 1);
-		assertCorrectLabels(proposals);
-
-		NewMethodCompletionProposal proposal= (NewMethodCompletionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public interface X {\n");
-		buf.append("    boolean goo(Class c);\n");				
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-	}
-	
-	public void testSuperConstructor() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E extends A {\n");
-		buf.append("    public E(int i) {\n");
-		buf.append("        super(i);\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu1=pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class A {\n");
-		buf.append("}\n");
-		pack1.createCompilationUnit("A.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu1, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu1);
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 1);
-		assertCorrectLabels(proposals);
-
-		NewMethodCompletionProposal proposal= (NewMethodCompletionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class A {\n");
-		buf.append("    public A(int i) {\n");
-		buf.append("    }\n");		
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-	}
-	
-	
-	public void testClassInstanceCreation() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public void foo(int i) {\n");
-		buf.append("        A a= new A(i);\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu1=pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class A {\n");
-		buf.append("}\n");
-		pack1.createCompilationUnit("A.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu1, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu1);
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 1);
-		assertCorrectLabels(proposals);
-
-		NewMethodCompletionProposal proposal= (NewMethodCompletionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class A {\n");
-		buf.append("    public A(int i) {\n");
-		buf.append("    }\n");		
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-	}	
-	
-	public void testConstructorInvocation() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public E(int i) {\n");
-		buf.append("        this(i, true);\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu1=pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu1, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu1);
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 1);
-		assertCorrectLabels(proposals);
-
-		NewMethodCompletionProposal proposal= (NewMethodCompletionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public E(int i) {\n");
-		buf.append("        this(i, true);\n");
-		buf.append("    }\n");
-		buf.append("    public E(int i, boolean b) {\n");
-		buf.append("    }\n");		
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-	}
-	
-	public void testSuperMethodInvocation() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E extends A {\n");
-		buf.append("    public void foo(int i) {\n");
-		buf.append("        super.foo(i);\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu1=pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class A {\n");
-		buf.append("}\n");
-		pack1.createCompilationUnit("A.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu1, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu1);
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 1);
-		assertCorrectLabels(proposals);
-
-		NewMethodCompletionProposal proposal= (NewMethodCompletionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class A {\n");
-		buf.append("    public void foo(int i) {\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-
-	}		
-	
-
-}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnresolvedTypesQuickFixTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnresolvedTypesQuickFixTest.java
deleted file mode 100644
index 2bb7df1..0000000
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnresolvedTypesQuickFixTest.java
+++ /dev/null
@@ -1,655 +0,0 @@
-package org.eclipse.jdt.ui.tests.quickfix;
-
-import java.util.ArrayList;
-import java.util.Hashtable;
-
-import org.eclipse.jface.preference.IPreferenceStore;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.compiler.IProblem;
-import org.eclipse.jdt.core.dom.AST;
-import org.eclipse.jdt.core.dom.CompilationUnit;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-import org.eclipse.jdt.ui.PreferenceConstants;
-
-import org.eclipse.jdt.internal.ui.JavaPlugin;
-import org.eclipse.jdt.internal.ui.text.correction.CUCorrectionProposal;
-import org.eclipse.jdt.internal.ui.text.correction.JavaCorrectionProcessor;
-import org.eclipse.jdt.internal.ui.text.correction.NewCUCompletionUsingWizardProposal;
-import org.eclipse.jdt.internal.ui.text.correction.ProblemPosition;
-import org.eclipse.jdt.internal.ui.text.correction.ReplaceCorrectionProposal;
-
-public class UnresolvedTypesQuickFixTest extends QuickFixTest {
-	
-	private static final Class THIS= UnresolvedTypesQuickFixTest.class;
-	
-	private IJavaProject fJProject1;
-	private IPackageFragmentRoot fSourceFolder;
-
-	public UnresolvedTypesQuickFixTest(String name) {
-		super(name);
-	}
-
-
-	public static Test suite() {
-		if (true) {
-			return new TestSuite(THIS);
-		} else {
-			TestSuite suite= new TestSuite();
-			suite.addTest(new UnresolvedTypesQuickFixTest("testPrimitiveTypeInFieldDecl"));
-			return suite;
-		}
-	}
-
-
-	protected void setUp() throws Exception {
-		Hashtable options= JavaCore.getOptions();
-		options.put(JavaCore.FORMATTER_TAB_CHAR, JavaCore.SPACE);
-		options.put(JavaCore.FORMATTER_TAB_SIZE, "4");
-		JavaCore.setOptions(options);
-		
-		IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
-		store.setValue(PreferenceConstants.CODEGEN__FILE_COMMENTS, false);
-		store.setValue(PreferenceConstants.CODEGEN__JAVADOC_STUBS, false);
-				
-		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		assertTrue("rt not found", JavaProjectHelper.addRTJar(fJProject1) != null);
-
-		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
-	}
-
-
-	protected void tearDown() throws Exception {
-		JavaProjectHelper.delete(fJProject1);
-	}
-		
-	public void testTypeInFieldDecl() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    Vector1 vec;\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu);
-		assertTrue("Problem type not marked with lightbulb", JavaCorrectionProcessor.hasCorrections(problemPos.getId()));		
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 3);
-		assertCorrectLabels(proposals);
-		
-		CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("\n");
-		buf.append("import java.util.Vector;\n");
-		buf.append("\n");
-		buf.append("public class E {\n");
-		buf.append("    Vector vec;\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-		
-		NewCUCompletionUsingWizardProposal newCUWizard= (NewCUCompletionUsingWizardProposal) proposals.get(1);
-		newCUWizard.setShowDialog(false);
-		newCUWizard.apply(null);
-		
-		ICompilationUnit newCU= pack1.getCompilationUnit("Vector1.java");
-		assertTrue("Nothing created", newCU.exists());
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("\n");
-		buf.append("public class Vector1 {\n");
-		buf.append("\n");
-		buf.append("}\n");
-		assertEqualStringIgnoreDelim(newCU.getSource(), buf.toString());
-		newCU.delete(true, null);
-
-		newCUWizard= (NewCUCompletionUsingWizardProposal) proposals.get(2);
-		newCUWizard.setShowDialog(false);
-		newCUWizard.apply(null);
-		
-		newCU= pack1.getCompilationUnit("Vector1.java");
-		assertTrue("Nothing created", newCU.exists());
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("\n");
-		buf.append("public interface Vector1 {\n");
-		buf.append("\n");
-		buf.append("}\n");
-		assertEqualStringIgnoreDelim(newCU.getSource(), buf.toString());
-	}
-	
-	public void testTypeInMethodDecl() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    void foo(Vect1or[] vec) {\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu);
-		assertTrue("Problem type not marked with lightbulb", JavaCorrectionProcessor.hasCorrections(problemPos.getId()));		
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 3);
-		assertCorrectLabels(proposals);
-		
-		CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("\n");
-		buf.append("import java.util.Vector;\n");
-		buf.append("\n");
-		buf.append("public class E {\n");
-		buf.append("    void foo(Vector[] vec) {\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-		
-		NewCUCompletionUsingWizardProposal newCUWizard= (NewCUCompletionUsingWizardProposal) proposals.get(1);
-		newCUWizard.setShowDialog(false);
-		newCUWizard.apply(null);
-		
-		ICompilationUnit newCU= pack1.getCompilationUnit("Vect1or.java");
-		assertTrue("Nothing created", newCU.exists());
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("\n");
-		buf.append("public class Vect1or {\n");
-		buf.append("\n");
-		buf.append("}\n");
-		assertEqualStringIgnoreDelim(newCU.getSource(), buf.toString());
-		newCU.delete(true, null);
-
-		newCUWizard= (NewCUCompletionUsingWizardProposal) proposals.get(2);
-		newCUWizard.setShowDialog(false);
-		newCUWizard.apply(null);
-		
-		newCU= pack1.getCompilationUnit("Vect1or.java");
-		assertTrue("Nothing created", newCU.exists());
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("\n");
-		buf.append("public interface Vect1or {\n");
-		buf.append("\n");
-		buf.append("}\n");
-		assertEqualStringIgnoreDelim(newCU.getSource(), buf.toString());
-	}
-	
-	public void testTypeInStatement() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.util.ArrayList;\n");		
-		buf.append("public class E {\n");
-		buf.append("    void foo() {\n");
-		buf.append("        ArrayList v= new ArrayListist();\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu);
-		assertTrue("Problem type not marked with lightbulb", JavaCorrectionProcessor.hasCorrections(problemPos.getId()));
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 2);
-		assertCorrectLabels(proposals);
-		
-		CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.util.ArrayList;\n");		
-		buf.append("public class E {\n");
-		buf.append("    void foo() {\n");
-		buf.append("        ArrayList v= new ArrayList();\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-		
-		
-		NewCUCompletionUsingWizardProposal newCUWizard= (NewCUCompletionUsingWizardProposal) proposals.get(1);
-		newCUWizard.setShowDialog(false);
-		newCUWizard.apply(null);
-		
-		ICompilationUnit newCU= pack1.getCompilationUnit("ArrayListist.java");
-		assertTrue("Nothing created", newCU.exists());
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("\n");
-		buf.append("import java.util.ArrayList;\n");
-		buf.append("\n");
-		buf.append("public class ArrayListist extends ArrayList {\n");
-		buf.append("\n");
-		buf.append("}\n");
-		assertEqualStringIgnoreDelim(newCU.getSource(), buf.toString());
-		newCU.delete(true, null);
-	}	
-		
-
-	public void testArrayTypeInStatement() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.io.*;\n");		
-		buf.append("public class E {\n");
-		buf.append("    void foo() {\n");
-		buf.append("        Serializable[] v= new ArrayListExtra[10];\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu);
-		assertTrue("Problem type not marked with lightbulb", JavaCorrectionProcessor.hasCorrections(problemPos.getId()));
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 4);
-		assertCorrectLabels(proposals);
-
-		CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.io.*;\n");
-		buf.append("public class E {\n");
-		buf.append("    void foo() {\n");
-		buf.append("        Serializable[] v= new Serializable[10];\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-		
-		proposal= (CUCorrectionProposal) proposals.get(1);
-		preview= proposal.getCompilationUnitChange().getPreviewContent();
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.io.*;\n");
-		buf.append("import java.util.ArrayList;\n");		
-		buf.append("public class E {\n");
-		buf.append("    void foo() {\n");
-		buf.append("        Serializable[] v= new ArrayList[10];\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-		
-		NewCUCompletionUsingWizardProposal newCUWizard= (NewCUCompletionUsingWizardProposal) proposals.get(2);
-		newCUWizard.setShowDialog(false);
-		newCUWizard.apply(null);
-		
-		ICompilationUnit newCU= pack1.getCompilationUnit("ArrayListExtra.java");
-		assertTrue("Nothing created", newCU.exists());
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("\n");
-		buf.append("import java.io.Serializable;\n");
-		buf.append("\n");
-		buf.append("public class ArrayListExtra implements Serializable {\n");
-		buf.append("\n");
-		buf.append("}\n");
-		assertEqualStringIgnoreDelim(newCU.getSource(), buf.toString());
-		newCU.delete(true, null);
-
-		newCUWizard= (NewCUCompletionUsingWizardProposal) proposals.get(3);
-		newCUWizard.setShowDialog(false);
-		newCUWizard.apply(null);
-		
-		newCU= pack1.getCompilationUnit("ArrayListExtra.java");
-		assertTrue("Nothing created", newCU.exists());
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("\n");
-		buf.append("import java.io.Serializable;\n");
-		buf.append("\n");
-		buf.append("public interface ArrayListExtra extends Serializable {\n");
-		buf.append("\n");
-		buf.append("}\n");
-		assertEqualStringIgnoreDelim(newCU.getSource(), buf.toString());
-	}
-	
-	public void testQualifiedType() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    void foo() {\n");
-		buf.append("        test2.Test t= null;\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu);
-		assertTrue("Problem type not marked with lightbulb", JavaCorrectionProcessor.hasCorrections(problemPos.getId()));
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 2);
-		assertCorrectLabels(proposals);
-		
-		NewCUCompletionUsingWizardProposal newCUWizard= (NewCUCompletionUsingWizardProposal) proposals.get(0);
-		newCUWizard.setShowDialog(false);
-		newCUWizard.apply(null);
-		
-		ICompilationUnit newCU= fSourceFolder.getPackageFragment("test2").getCompilationUnit("Test.java");
-		assertTrue("Nothing created", newCU.exists());
-		
-		buf= new StringBuffer();
-		buf.append("package test2;\n");
-		buf.append("\n");		
-		buf.append("public class Test {\n");
-		buf.append("\n");		
-		buf.append("}\n");
-		assertEqualStringIgnoreDelim(newCU.getSource(), buf.toString());
-		newCU.delete(true, null);
-
-		newCUWizard= (NewCUCompletionUsingWizardProposal) proposals.get(1);
-		newCUWizard.setShowDialog(false);
-		newCUWizard.apply(null);
-		
-		newCU= fSourceFolder.getPackageFragment("test2").getCompilationUnit("Test.java");
-		assertTrue("Nothing created", newCU.exists());
-		
-		buf= new StringBuffer();
-		buf.append("package test2;\n");
-		buf.append("\n");		
-		buf.append("public interface Test {\n");
-		buf.append("\n");		
-		buf.append("}\n");
-		assertEqualStringIgnoreDelim(newCU.getSource(), buf.toString());		
-		
-	}
-	
-	public void testInnerType() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    void foo() {\n");
-		buf.append("        Object object= new F.Inner();\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu1= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class F {\n");
-		buf.append("}\n");
-		ICompilationUnit cu2= pack1.createCompilationUnit("F.java", buf.toString(), false, null);
-
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu1, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu1);
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 2);
-		assertCorrectLabels(proposals);
-		
-		CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    void foo() {\n");
-		buf.append("        Object object= new Object();\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-		
-		NewCUCompletionUsingWizardProposal newCUWizard= (NewCUCompletionUsingWizardProposal) proposals.get(1);
-		newCUWizard.setShowDialog(false);
-		newCUWizard.apply(null);
-				
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class F {\n");
-		buf.append("    public class Inner {\n");
-		buf.append("\n");				
-		buf.append("    }\n");		
-		buf.append("}\n");
-		assertEqualStringIgnoreDelim(cu2.getSource(), buf.toString());
-	}
-	
-	public void testTypeInCatchBlock() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    void foo() {\n");
-		buf.append("        try {\n");		
-		buf.append("        } catch (XXX x) {\n");
-		buf.append("        }\n");		
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu1= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu1, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu1);
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 1);
-		assertCorrectLabels(proposals);
-		
-		NewCUCompletionUsingWizardProposal newCUWizard= (NewCUCompletionUsingWizardProposal) proposals.get(0);
-		newCUWizard.setShowDialog(false);
-		newCUWizard.apply(null);
-		
-		ICompilationUnit newCU= pack1.getCompilationUnit("XXX.java");
-				
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("\n");			
-		buf.append("public class XXX extends Exception {\n");
-		buf.append("\n");	
-		buf.append("}\n");
-		assertEqualStringIgnoreDelim(newCU.getSource(), buf.toString());
-	}
-	
-	public void testTypeInSuperType() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E extends XXX {\n");
-		buf.append("}\n");
-		ICompilationUnit cu1= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu1, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu1);
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 1);
-		assertCorrectLabels(proposals);
-		
-		NewCUCompletionUsingWizardProposal newCUWizard= (NewCUCompletionUsingWizardProposal) proposals.get(0);
-		newCUWizard.setShowDialog(false);
-		newCUWizard.apply(null);
-		
-		ICompilationUnit newCU= pack1.getCompilationUnit("XXX.java");
-				
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("\n");			
-		buf.append("public class XXX {\n");
-		buf.append("\n");	
-		buf.append("}\n");
-		assertEqualStringIgnoreDelim(newCU.getSource(), buf.toString());
-	}
-	
-	public void testTypeInSuperInterface() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public interface E extends XXX {\n");
-		buf.append("}\n");
-		ICompilationUnit cu1= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu1, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu1);
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 1);
-		assertCorrectLabels(proposals);
-		
-		NewCUCompletionUsingWizardProposal newCUWizard= (NewCUCompletionUsingWizardProposal) proposals.get(0);
-		newCUWizard.setShowDialog(false);
-		newCUWizard.apply(null);
-		
-		ICompilationUnit newCU= pack1.getCompilationUnit("XXX.java");
-				
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("\n");			
-		buf.append("public interface XXX {\n");
-		buf.append("\n");	
-		buf.append("}\n");
-		assertEqualStringIgnoreDelim(newCU.getSource(), buf.toString());
-	}
-	
-	public void testPrimitiveTypeInFieldDecl() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    floot vec= 1.0;\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu);
-		assertTrue("Problem type not marked with lightbulb", JavaCorrectionProcessor.hasCorrections(problemPos.getId()));
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 5);
-		assertCorrectLabels(proposals);
-		
-		CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    double vec= 1.0;\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-		
-		proposal= (CUCorrectionProposal) proposals.get(1);
-		preview= proposal.getCompilationUnitChange().getPreviewContent();
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    Float vec= 1.0;\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-		
-		proposal= (CUCorrectionProposal) proposals.get(2);
-		preview= proposal.getCompilationUnitChange().getPreviewContent();
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    float vec= 1.0;\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-		
-		NewCUCompletionUsingWizardProposal newCUWizard= (NewCUCompletionUsingWizardProposal) proposals.get(3);
-		newCUWizard.setShowDialog(false);
-		newCUWizard.apply(null);
-		
-		ICompilationUnit newCU= pack1.getCompilationUnit("floot.java");
-		assertTrue("Nothing created", newCU.exists());
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("\n");
-		buf.append("public class floot {\n");
-		buf.append("\n");
-		buf.append("}\n");
-		assertEqualStringIgnoreDelim(newCU.getSource(), buf.toString());
-		newCU.delete(true, null);
-
-		newCUWizard= (NewCUCompletionUsingWizardProposal) proposals.get(4);
-		newCUWizard.setShowDialog(false);
-		newCUWizard.apply(null);
-		
-		newCU= pack1.getCompilationUnit("floot.java");
-		assertTrue("Nothing created", newCU.exists());
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("\n");		
-		buf.append("public interface floot {\n");
-		buf.append("\n");
-		buf.append("}\n");
-		assertEqualStringIgnoreDelim(newCU.getSource(), buf.toString());	
-	}
-	
-
-}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnresolvedVariablesQuickFixTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnresolvedVariablesQuickFixTest.java
deleted file mode 100644
index 5b8550c..0000000
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnresolvedVariablesQuickFixTest.java
+++ /dev/null
@@ -1,430 +0,0 @@
-package org.eclipse.jdt.ui.tests.quickfix;
-
-import java.util.ArrayList;
-import java.util.Hashtable;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jface.preference.IPreferenceStore;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.compiler.IProblem;
-import org.eclipse.jdt.core.dom.AST;
-import org.eclipse.jdt.core.dom.CompilationUnit;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-import org.eclipse.jdt.ui.PreferenceConstants;
-
-import org.eclipse.jdt.internal.ui.JavaPlugin;
-import org.eclipse.jdt.internal.ui.text.correction.CUCorrectionProposal;
-import org.eclipse.jdt.internal.ui.text.correction.JavaCorrectionProcessor;
-import org.eclipse.jdt.internal.ui.text.correction.NewCUCompletionUsingWizardProposal;
-import org.eclipse.jdt.internal.ui.text.correction.NewVariableCompletionProposal;
-import org.eclipse.jdt.internal.ui.text.correction.ProblemPosition;
-import org.eclipse.jdt.internal.ui.text.correction.ReplaceCorrectionProposal;
-
-public class UnresolvedVariablesQuickFixTest extends QuickFixTest {
-	
-	private static final Class THIS= UnresolvedVariablesQuickFixTest.class;
-	
-	private IJavaProject fJProject1;
-	private IPackageFragmentRoot fSourceFolder;
-
-	public UnresolvedVariablesQuickFixTest(String name) {
-		super(name);
-	}
-
-
-	public static Test suite() {
-		if (false) {
-			return new TestSuite(THIS);
-		} else {
-			TestSuite suite= new TestSuite();
-			suite.addTest(new UnresolvedVariablesQuickFixTest("testVarAndTypeRef"));
-			return suite;
-		}
-	}
-
-
-	protected void setUp() throws Exception {
-		Hashtable options= JavaCore.getOptions();
-		options.put(JavaCore.FORMATTER_TAB_CHAR, JavaCore.SPACE);
-		options.put(JavaCore.FORMATTER_TAB_SIZE, "4");
-		JavaCore.setOptions(options);			
-
-		IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
-		store.setValue(PreferenceConstants.CODEGEN__FILE_COMMENTS, false);
-		store.setValue(PreferenceConstants.CODEGEN__JAVADOC_STUBS, false);
-		
-		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		assertTrue("rt not found", JavaProjectHelper.addRTJar(fJProject1) != null);
-
-		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
-	}
-
-
-	protected void tearDown() throws Exception {
-		JavaProjectHelper.delete(fJProject1);
-	}
-
-	
-	public void testVarInAssignment() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.util.Vector;\n");
-		buf.append("public class E {\n");
-		buf.append("    void foo(Vector vec) {\n");
-		buf.append("        iter= vec.iterator();\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu);
-		assertTrue("Problem type not marked with lightbulb", JavaCorrectionProcessor.hasCorrections(problemPos.getId()));
-
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 3);
-		assertCorrectLabels(proposals);
-		
-		boolean doField= true, doParam= true, doLocal= true;
-		for (int i= 0; i < proposals.size(); i++) {
-			NewVariableCompletionProposal proposal= (NewVariableCompletionProposal) proposals.get(i);
-			String preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-			if (proposal.getVariableKind() == NewVariableCompletionProposal.FIELD) {
-				assertTrue("2 field proposals", doField);
-				doField= false;
-				
-				buf= new StringBuffer();
-				buf.append("package test1;\n");
-				buf.append("import java.util.Iterator;\n");
-				buf.append("import java.util.Vector;\n");
-				buf.append("public class E {\n");
-				buf.append("    private Iterator iter;\n");
-				buf.append("    void foo(Vector vec) {\n");
-				buf.append("        iter= vec.iterator();\n");
-				buf.append("    }\n");
-				buf.append("}\n");
-				assertEqualString(preview, buf.toString());
-			} else if (proposal.getVariableKind() == NewVariableCompletionProposal.LOCAL) {
-				assertTrue("2 local proposals", doLocal);
-				doLocal= false;
-				
-				buf= new StringBuffer();
-				buf.append("package test1;\n");
-				buf.append("import java.util.Iterator;\n");
-				buf.append("import java.util.Vector;\n");
-				buf.append("public class E {\n");
-				buf.append("    void foo(Vector vec) {\n");
-				buf.append("        Iterator iter = vec.iterator();\n");
-				buf.append("    }\n");
-				buf.append("}\n");
-				assertEqualString(preview, buf.toString());
-			} else if (proposal.getVariableKind() == NewVariableCompletionProposal.PARAM) {
-				assertTrue("2 param proposals", doParam);
-				doParam= false;
-				
-				buf= new StringBuffer();
-				buf.append("package test1;\n");
-				buf.append("import java.util.Iterator;\n");
-				buf.append("import java.util.Vector;\n");
-				buf.append("public class E {\n");
-				buf.append("    void foo(Vector vec, Iterator iter) {\n");
-				buf.append("        iter= vec.iterator();\n");
-				buf.append("    }\n");
-				buf.append("}\n");
-				assertEqualString(preview, buf.toString());
-			} else {
-				assertTrue("unknown type", false);
-			}
-		}
-	}
-	
-	public void testVarInInitializer() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    private int i= k;\n");
-		buf.append("}\n");
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu);
-		assertTrue("Problem type not marked with lightbulb", JavaCorrectionProcessor.hasCorrections(problemPos.getId()));
-
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 1);
-		assertCorrectLabels(proposals);
-		
-		NewVariableCompletionProposal proposal= (NewVariableCompletionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    private int k;\n");		
-		buf.append("    private int i= k;\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-	}
-	
-	public void testVarInOtherType() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class F {\n");
-		buf.append("    void foo(E e) {\n");
-		buf.append("         e.var2= 2;\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu1= pack1.createCompilationUnit("F.java", buf.toString(), false, null);		
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    private int var1;\n");
-		buf.append("}\n");
-		pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu1, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu1);
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 2);
-		assertCorrectLabels(proposals);
-
-		boolean doNew= true, doChange= true;
-		for (int i= 0; i < proposals.size(); i++) {
-			Object curr= proposals.get(i);
-			if (curr instanceof NewVariableCompletionProposal) {
-				assertTrue("2 new proposals", doNew);
-				doNew= false;
-				NewVariableCompletionProposal proposal= (NewVariableCompletionProposal) curr;
-				String preview= proposal.getCompilationUnitChange().getPreviewContent();
-	
-				buf= new StringBuffer();
-				buf.append("package test1;\n");
-				buf.append("public class E {\n");
-				buf.append("    private int var1;\n");
-				buf.append("    public int var2;\n");
-				buf.append("}\n");
-				assertEqualString(preview, buf.toString());
-			} else if (curr instanceof CUCorrectionProposal) {
-				assertTrue("2 replace proposals", doChange);
-				doChange= false;
-				CUCorrectionProposal proposal= (CUCorrectionProposal) curr;
-				String preview= proposal.getCompilationUnitChange().getPreviewContent();
-	
-				buf= new StringBuffer();
-				buf.append("package test1;\n");
-				buf.append("public class F {\n");
-				buf.append("    void foo(E e) {\n");
-				buf.append("         e.var1= 2;\n");
-				buf.append("    }\n");
-				buf.append("}\n");
-				assertEqualString(preview, buf.toString());
-			}
-		}
-	}
-	
-	public void testLongVarRef() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class F {\n");
-		buf.append("    void foo(E e) {\n");
-		buf.append("         e.var.x= 2;\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu1= pack1.createCompilationUnit("F.java", buf.toString(), false, null);		
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class E {\n");
-		buf.append("    public F var;\n");
-		buf.append("}\n");
-		pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu1, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu1);
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 1);
-		assertCorrectLabels(proposals);
-
-		NewVariableCompletionProposal proposal= (NewVariableCompletionProposal) proposals.get(0);
-		String preview= proposal.getCompilationUnitChange().getPreviewContent();
-
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("public class F {\n");
-		buf.append("    private int x;\n");
-		buf.append("    void foo(E e) {\n");
-		buf.append("         e.var.x= 2;\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		assertEqualString(preview, buf.toString());
-	}	
-
-	public void testVarAndTypeRef() throws Exception {
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		StringBuffer buf= new StringBuffer();
-		
-		buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("import java.io.File;\n");
-		buf.append("public class F {\n");
-		buf.append("    void foo() {\n");
-		buf.append("        char ch= Fixe.pathSeparatorChar;\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		ICompilationUnit cu1= pack1.createCompilationUnit("F.java", buf.toString(), false, null);		
-
-		CompilationUnit astRoot= AST.parseCompilationUnit(cu1, true);
-		IProblem[] problems= astRoot.getProblems();
-		assertNumberOf("problems", problems.length, 1);
-		
-		ProblemPosition problemPos= new ProblemPosition(problems[0], cu1);
-		ArrayList proposals= new ArrayList();
-		
-		JavaCorrectionProcessor.collectCorrections(problemPos,  proposals);
-		assertNumberOf("proposals", proposals.size(), 6);
-		assertCorrectLabels(proposals);
-
-		boolean doField= true, doParam= true, doLocal= true, doClass= true, doInterface=true, doChange= true;
-		for (int i= 0; i < proposals.size(); i++) {
-			Object curr= proposals.get(i);
-			if (curr instanceof NewVariableCompletionProposal) {
-				NewVariableCompletionProposal proposal= (NewVariableCompletionProposal) proposals.get(i);
-				String preview= proposal.getCompilationUnitChange().getPreviewContent();
-	
-				if (proposal.getVariableKind() == NewVariableCompletionProposal.FIELD) {
-					assertTrue("2 field proposals", doField);
-					doField= false;
-					
-					buf= new StringBuffer();
-					buf.append("package test1;\n");
-					buf.append("import java.io.File;\n");
-					buf.append("public class F {\n");
-					buf.append("    private Object Fixe;\n");
-					buf.append("    void foo() {\n");
-					buf.append("        char ch= Fixe.pathSeparatorChar;\n");
-					buf.append("    }\n");
-					buf.append("}\n");
-					assertEqualString(preview, buf.toString());
-				} else if (proposal.getVariableKind() == NewVariableCompletionProposal.LOCAL) {
-					assertTrue("2 local proposals", doLocal);
-					doLocal= false;
-					
-					buf= new StringBuffer();
-					buf.append("package test1;\n");
-					buf.append("import java.io.File;\n");
-					buf.append("public class F {\n");
-					buf.append("    void foo() {\n");
-					buf.append("        Object Fixe = null;\n");					
-					buf.append("        char ch= Fixe.pathSeparatorChar;\n");
-					buf.append("    }\n");
-					buf.append("}\n");
-					assertEqualString(preview, buf.toString());
-				} else if (proposal.getVariableKind() == NewVariableCompletionProposal.PARAM) {
-					assertTrue("2 param proposals", doParam);
-					doParam= false;
-					
-					buf= new StringBuffer();
-					buf.append("package test1;\n");
-					buf.append("import java.io.File;\n");
-					buf.append("public class F {\n");
-					buf.append("    void foo(Object Fixe) {\n");
-					buf.append("        char ch= Fixe.pathSeparatorChar;\n");
-					buf.append("    }\n");
-					buf.append("}\n");
-					assertEqualString(preview, buf.toString());
-				} else {
-					assertTrue("unknown type", false);
-				}
-			} else if (curr instanceof NewCUCompletionUsingWizardProposal) {
-				NewCUCompletionUsingWizardProposal proposal= (NewCUCompletionUsingWizardProposal) curr;
-				proposal.setShowDialog(false);
-				proposal.apply(null);
-				
-				ICompilationUnit newCU= pack1.getCompilationUnit("Fixe.java");
-				assertTrue("Nothing created", newCU.exists());
-
-				if (proposal.isClass()) {
-					assertTrue("2 class proposals", doParam);
-					doClass= false;
-
-					buf= new StringBuffer();
-					buf.append("package test1;\n");
-					buf.append("\n");
-					buf.append("public class Fixe {\n");
-					buf.append("\n");
-					buf.append("}\n");
-					assertEqualStringIgnoreDelim(newCU.getSource(), buf.toString());
-					newCU.delete(true, null);
-				} else {
-					assertTrue("2 interface proposals", doParam);
-					doInterface= false;					
-					
-					buf= new StringBuffer();
-					buf.append("package test1;\n");
-					buf.append("\n");
-					buf.append("public interface Fixe {\n");
-					buf.append("\n");
-					buf.append("}\n");
-					assertEqualStringIgnoreDelim(newCU.getSource(), buf.toString());
-					newCU.delete(true, null);
-				}
-			} else {
-				assertTrue("2 replace proposals", doChange);
-				doChange= false;
-				CUCorrectionProposal proposal= (CUCorrectionProposal) curr;
-				String preview= proposal.getCompilationUnitChange().getPreviewContent();
-	
-				buf= new StringBuffer();
-				buf.append("package test1;\n");
-				buf.append("import java.io.File;\n");
-				buf.append("public class F {\n");
-				buf.append("    void foo() {\n");
-				buf.append("        char ch= File.pathSeparatorChar;\n");
-				buf.append("    }\n");
-				buf.append("}\n");
-				assertEqualString(preview, buf.toString());
-			}
-		}		
-	
-	}
-
-
-}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/text/HTML2TextReaderTester.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/text/HTML2TextReaderTester.java
deleted file mode 100644
index c72d2cf..0000000
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/text/HTML2TextReaderTester.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package org.eclipse.jdt.ui.tests.text;
-
-import java.io.IOException;
-import java.io.Reader;
-import java.io.StringReader;
-
-import org.eclipse.jdt.internal.ui.text.HTML2TextReader;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-public class HTML2TextReaderTester extends TestCase {
-
-	private boolean isVerbose= false;
-	private static final String LD= System.getProperty("line.separator", "\n"); //$NON-NLS-1$ //$NON-NLS-2$
-
-	public HTML2TextReaderTester(String name) {
-		super(name);
-	}
-
-	public static Test suite() {
-		return new TestSuite(HTML2TextReaderTester.class);
-	}
-
-	private void verify(String input, String expectedOutput) throws IOException{
-		Reader reader= new StringReader(input);
-		HTML2TextReader htmlReader= new HTML2TextReader(reader, null);
-		String result= htmlReader.getString();
-		if (isVerbose)
-			System.out.println("<"+ result +"/>");
-		assertEquals(expectedOutput, result);		
-	}
-	
-	public void test0() throws IOException{
-		String string= "<code>3<5<code>";
-		String expected= "3<5";
-		verify(string, expected);
-	}
-	
-	public void test1() throws IOException{
-		String string= "<dl><dt>@author</dt><dd>Foo Bar</dd></dl>";
-		String expected= LD+ "@author"+LD+"\tFoo Bar"+LD;
-		verify(string, expected);
-	}
-
-	public void test2() throws IOException{
-		String string= "<code>3>5<code>";
-		String expected= "3>5";
-		verify(string, expected);
-	}
-
-	public void test3() throws IOException{
-		String string= "<a href= \"<p>this is only a string - not a tag<p>\">text</a>";
-		String expected= "text";
-		verify(string, expected);
-	}
-	
-	public void test4() throws IOException{
-		String string= 	"<html><body text=\"#000000\" bgcolor=\"#FFFF88\"><font size=-1><h5>void p.Bb.fes()</h5><p><dl><dt>Parameters:</dt><dd><b>i</b> fred or <code>null</code></dd></dl></font></body></html>";
-		String expected= "void p.Bb.fes()"+ LD + LD + LD+ "Parameters:"+ LD + "\ti fred or null"+LD;
-		verify(string, expected);
-	}
-
-	public void test5() throws IOException{
-		String string= "<code>1<2<3<4</code>";
-		String expected= "1<2<3<4";
-		verify(string, expected);
-	}
-
-	public void test6() throws IOException{
-		//test for bug 19070
-		String string= "<p>Something.<p>Something more.";
-		String expected= LD + "Something." + LD + "Something more.";
-		verify(string, expected);
-	}
-	
-}
-
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/text/JavaDoc2HTMLTextReaderTester.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/text/JavaDoc2HTMLTextReaderTester.java
deleted file mode 100644
index b05f771..0000000
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/text/JavaDoc2HTMLTextReaderTester.java
+++ /dev/null
@@ -1,236 +0,0 @@
-package org.eclipse.jdt.ui.tests.text;
-
-import java.io.Reader;
-
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jdt.core.IBuffer;
-import org.eclipse.jdt.core.IBufferChangedListener;
-import org.eclipse.jdt.core.IOpenable;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.internal.corext.javadoc.JavaDocCommentReader;
-import org.eclipse.jdt.internal.ui.text.HTMLPrinter;
-import org.eclipse.jdt.internal.ui.text.javadoc.JavaDoc2HTMLTextReader;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-public class JavaDoc2HTMLTextReaderTester extends TestCase {
-
-	private boolean isVerbose= false;
-	
-	public JavaDoc2HTMLTextReaderTester(String name) {
-		super(name);
-	}
-
-	public static Test suite() {
-		return new TestSuite(JavaDoc2HTMLTextReaderTester.class);
-	}
-
-	private String getTransformedJavaDoc(String string) {
-		Reader reader= new JavaDocCommentReader(new MockBuffer(string), 0, string.length());
-		return HTMLPrinter.read(new JavaDoc2HTMLTextReader(reader));
-	}
-	
-	private void verify(String string, String expected){
-		String result = getTransformedJavaDoc(string);
-		if (isVerbose)
-			System.out.println("result:" + result);
-		assertEquals(expected, result);
-	}
-
-	public void test0(){
-		String string= "/**@deprecated*/";
-		String expected= "<dl><dt>@deprecated</dt><dd></dd></dl>";
-		verify(string, expected);
-	}
-
-	public void test1(){
-		String string= "/**@author Foo Bar*/";
-		String expected= "<dl><dt>@author</dt><dd>Foo Bar</dd></dl>";
-		verify(string, expected);
-	}
-
-	public void test2(){
-		//test for bug 14658
-		String string= "/**@author Foo Bar<a href=\"mailto:foobar@eclipse.org\">foobar@eclipse.org</a>*/";
-		String expected= "<dl><dt>@author</dt><dd>Foo Bar<a href=\"mailto:foobar@eclipse.org\">foobar@eclipse.org</a></dd></dl>";
-		verify(string, expected);
-	}
-	
-	public void test3(){
-		//test for bug 14658
-		String string= "/**@author Foo Bar<a href=\"mailto:foobar@eclipse.org\">foobar@eclipse.org</a>\n *@deprecated*/";
-		String expected= "<dl><dt>@author</dt><dd>Foo Bar<a href=\"mailto:foobar@eclipse.org\">foobar@eclipse.org</a></dd><dt>@deprecated</dt><dd></dd></dl>";
-		verify(string, expected);
-	}
-
-	public void test4(){
-		String string= "/**@author Foo Bar\n * @deprecated*/";
-		String expected= "<dl><dt>@author</dt><dd>Foo Bar</dd><dt>@deprecated</dt><dd></dd></dl>";
-		verify(string, expected);
-	}
-	
-	public void test5(){
-		String string= "/**@author Foo Bar\n * @author Baz Fred*/";
-		String expected= "<dl><dt>@author</dt><dd>Foo Bar</dd><dt>@author</dt><dd>Baz Fred</dd></dl>";
-		verify(string, expected);
-	}
-
-	public void test6(){
-		String string= "/**@author Foo Bar\n * @since 2.0*/";
-		String expected= "<dl><dt>@author</dt><dd>Foo Bar</dd><dt>@since</dt><dd>2.0</dd></dl>";
-		verify(string, expected);
-	}
-
-	
-	public void test7(){
-		if (true){
-			System.out.println(getClass().getName()+"::" + getName() +" disabled(corner case - @see tag inside <a> tag)");
-			return;
-		}
-		String string= "/**@author Foo Bar<a href=\"mailto:foobar@see.org\">foobar@see.org</a>*/";
-		String expected= "<dl><dt>@author</dt><dd>Foo Bar<a href=\"mailto:foobar@see.org\">foobar@see.org</a></dd></dl>";
-		verify(string, expected);
-	}
-
-	public void test8(){
-		if (true){
-			System.out.println(getClass().getName()+"::" + getName() +" disabled(corner case - @see tag inside <a> tag)");
-			return;
-		}
-		String string= "/**@author Foo Bar<a href=\"mailto:foobar@see.org\">foobar@eclipse.org</a>*/";
-		String expected= "<dl><dt>@author</dt><dd>Foo Bar<a href=\"mailto:foobar@see.org\">foobar@eclipse.org</a></dd></dl>";
-		verify(string, expected);
-	}
-
-	public void test9(){
-		String string= "/**@throws NullPointerException*/";
-		String expected= "<dl><dt>Throws:</dt><dd>NullPointerException</dd></dl>";
-		verify(string, expected);
-	}
-
-	public void test10(){
-		//test for bug 8131
-		String string= "/**@exception NullPointerException*/";
-		String expected= "<dl><dt>Throws:</dt><dd>NullPointerException</dd></dl>";
-		verify(string, expected);
-	}
-
-	public void test11(){
-		//test for bug 8132
-		String string= "/**@exception NullPointerException \n * @throws java.lang.Exception*/";
-		String expected= "<dl><dt>Throws:</dt><dd>NullPointerException</dd><dd>java.lang.Exception</dd></dl>";
-		verify(string, expected);
-	}
-
-	public void test12(){
-		String string= "/** \n * @param i fred or <code>null</code> \n*/";
-		String expected= "<dl><dt>Parameters:</dt><dd><b>i</b> fred or <code>null</code></dd></dl>";
-		verify(string, expected);
-	}
-
-}
-
-class MockBuffer implements IBuffer{
-	
-	private StringBuffer fStringBuffer;
-	MockBuffer(String string){
-		fStringBuffer= new StringBuffer(string);
-	}
-	
-	public void addBufferChangedListener(IBufferChangedListener listener) {
-	}
-
-
-	public void append(char[] text) {
-		fStringBuffer.append(text);
-	}
-
-
-	public void append(String text) {
-		fStringBuffer.append(text);
-	}
-
-
-	public void close() {
-	}
-
-
-	public char getChar(int position) {
-		return fStringBuffer.charAt(position);
-	}
-
-
-	public char[] getCharacters() {
-		return fStringBuffer.toString().toCharArray();
-	}
-
-
-	public String getContents() {
-		return fStringBuffer.toString();
-	}
-
-
-	public int getLength() {
-		return fStringBuffer.length();
-	}
-
-
-	public IOpenable getOwner() {
-		return null;
-	}
-
-
-	public String getText(int offset, int length) {
-		return fStringBuffer.toString().substring(offset, offset + length);
-	}
-
-
-	public IResource getUnderlyingResource() {
-		return null;
-	}
-
-
-	public boolean hasUnsavedChanges() {
-		return false;
-	}
-
-
-	public boolean isClosed() {
-		return false;
-	}
-
-
-	public boolean isReadOnly() {
-		return false;
-	}
-
-
-	public void removeBufferChangedListener(IBufferChangedListener listener) {
-	}
-
-
-	public void replace(int position, int length, char[] text) {
-	}
-
-
-	public void replace(int position, int length, String text) {
-	}
-
-
-	public void save(IProgressMonitor progress, boolean force)
-		throws JavaModelException {
-	}
-
-
-	public void setContents(char[] contents) {
-	}
-
-
-	public void setContents(String contents) {
-		fStringBuffer= new StringBuffer(contents);
-	}
-}
-
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/text/PartitionTokenScannerTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/text/PartitionTokenScannerTest.java
deleted file mode 100644
index b7c0724..0000000
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/text/PartitionTokenScannerTest.java
+++ /dev/null
@@ -1,242 +0,0 @@
-package org.eclipse.jdt.ui.tests.text;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-import org.eclipse.jdt.internal.ui.text.FastJavaPartitionScanner;
-import org.eclipse.jdt.internal.ui.text.JavaPartitionScanner;
-import org.eclipse.jface.text.BadLocationException;
-import org.eclipse.jface.text.Document;
-import org.eclipse.jface.text.IDocument;
-import org.eclipse.jface.text.IRegion;
-import org.eclipse.jface.text.rules.IPartitionTokenScanner;
-import org.eclipse.jface.text.rules.IToken;
-
-/**
- * Compares two <code>IParitionTokenScanner</code>s for conformance and performance.
- */
-public class PartitionTokenScannerTest extends TestCase {
-
-	private IPartitionTokenScanner fReference;
-	private IPartitionTokenScanner fTestee;
-
-	public PartitionTokenScannerTest(String name) {
-		super(name);	
-	}
-
-	protected void setUp() {
-		fReference= new JavaPartitionScanner();
-		fTestee= new FastJavaPartitionScanner();
-	}
-
-	// read sample java file
-	private IDocument getDocument(String name, String lineDelimiter) {
-		try {
-			InputStream stream= getClass().getResourceAsStream(name);
-			BufferedReader reader= new BufferedReader(new InputStreamReader(stream));
-			
-			StringBuffer buffer= new StringBuffer();
-			String line= reader.readLine();
-			while (line != null) {
-				buffer.append(line);
-				buffer.append(lineDelimiter);
-				line= reader.readLine();
-			}
-
-			return new Document(buffer.toString());
-
-		} catch (IOException e) {			
-		}
-		
-		return null;
-	}
-	
-	private static IDocument getRandomDocument(int size) {
-		final char[] characters= {'/', '*', '\'', '"', '\r', '\n', '\\'};
-		final StringBuffer buffer= new StringBuffer();
-		
-		for (int i= 0; i < size; i++) {
-			final int randomIndex= (int) (Math.random() * characters.length);
-			buffer.append(characters[randomIndex]);
-		}
-		
-		return new Document(buffer.toString());
-	}
-
-	public static Test suite() {
-		return new TestSuite(PartitionTokenScannerTest.class);
-	}
-
-	public void testTestCaseLF() {
-		testConformance(getDocument("TestCase.txt", "\n"));
-	}
-
-	public void testTestCaseCRLF() {
-		testConformance(getDocument("TestCase.txt", "\r\n"));
-	}
-
-	public void testTestCaseCR() {
-		testConformance(getDocument("TestCase.txt", "\r"));
-	}
-
-	public void testTestCase2LF() {
-		testConformance(getDocument("TestCase2.txt", "\n"));
-	}
-
-	public void testTestCase2CRLF() {
-		testConformance(getDocument("TestCase2.txt", "\r\n"));
-	}
-
-	public void testTestCase2CR() {
-		testConformance(getDocument("TestCase2.txt", "\r"));
-	}
-
-//	XXX not fully passing because of "\<LF> and '\<LF>
-//	public void testRandom() {
-//		testConformance(getRandomDocument(2048));
-//	}
-
-	/**
-	 * Tests performance of the testee against the reference IPartitionTokenScanner.
-	 */
-	public void testPerformance() {
-		final int COUNT= 5000;
-		final IDocument document= getDocument("TestCase.txt", "\n");
-
-		final long referenceTime= getTime(fReference, document, COUNT);
-		final long testeeTime= getTime(fTestee, document, COUNT);
-
-		if (false) {
-			System.out.println("reference time = " + referenceTime / 1000.0f);
-			System.out.println("testee time = " + testeeTime / 1000.0f);
-			System.out.println("factor = " + (float) referenceTime / testeeTime);
-		}
-		
-		// dangerous: assert no regression in performance
-		// assertTrue(testeeTime <= referenceTime);
-	}
-	
-	private long getTime(IPartitionTokenScanner scanner, IDocument document, int count) {
-		final long start= System.currentTimeMillis();
-
-		for (int i= 0; i < count; i++)
-			testPerformance(scanner, document);
-
-		final long end= System.currentTimeMillis();
-		
-		return end - start;
-	}
-	
-	private void testConformance(final IDocument document) {
-		
-		final StringBuffer message= new StringBuffer();
-		
-		fReference.setRange(document, 0, document.getLength());
-		fTestee.setRange(document, 0, document.getLength());
-		
-		while (true) {
-			
-			message.setLength(0);
-			
-			final IToken referenceToken= fReference.nextToken();
-			final IToken testeeToken= fTestee.nextToken();
-			assertTokenEquals(referenceToken, testeeToken);
-			
-			final int referenceOffset= fReference.getTokenOffset();
-			final int testeeOffset= fTestee.getTokenOffset();
-			message.append(", offset = " + referenceOffset);
-			message.append(", " + extractString(document, referenceOffset));
-			assertEquals(message.toString(), referenceOffset, testeeOffset);
-
-			final int referenceLength= fReference.getTokenLength();
-			final int testeeLength= fTestee.getTokenLength();
-			message.append(", length = " + referenceLength);
-			assertEquals(message.toString(), referenceLength, testeeLength);
-
-			if (referenceToken.isEOF())
-				break;
-		}
-	}
-
-	private static void testPerformance(final IPartitionTokenScanner scanner, final IDocument document) {
-		
-		scanner.setRange(document, 0, document.getLength());
-
-		IToken token;
-		do {
-			token= scanner.nextToken();			
-			scanner.getTokenOffset();
-			scanner.getTokenLength();
-
-		} while (!token.isEOF());
-	}
-	
-	private void assertTokenEquals(IToken expected, IToken actual) {
-		assertEquals(expected.isEOF(), actual.isEOF());
-		assertEquals(expected.isOther(), actual.isOther());
-		assertEquals(expected.isUndefined(), actual.isUndefined());
-		assertEquals(expected.isWhitespace(), actual.isWhitespace());
-	}
-		
-	private static String extractString(IDocument document, int offset) {
-		final StringBuffer buffer= new StringBuffer();
-
-		try {
-			IRegion region= document.getLineInformationOfOffset(offset);
-			String line= document.get(region.getOffset(), region.getLength());
-			
-			int offsetIndex= offset - region.getOffset();
-
-			// XXX kludge
-			if (offsetIndex > line.length())
-				offsetIndex= line.length();
-			
-			buffer.append("line = " + document.getLineOfOffset(offset) + ": [");
-			buffer.append(line.substring(0, offsetIndex));
-			buffer.append("<POS>");
-			buffer.append(line.substring(offsetIndex));
-			buffer.append(']');
-			
-		} catch (BadLocationException e) {
-		}	
-		
-		return buffer.toString();	
-	}
-
-	/**
-	 * Escapes CR, LF and TAB in a string.
-	 */
-	private static String escape(String string) {
-		final StringBuffer buffer= new StringBuffer();
-		
-		final int length= string.length();
-		for (int i= 0; i < length; i++) {
-			final char character= string.charAt(i);
-			switch (character) {
-			case '\t':
-				buffer.append("\\t");
-				break;
-
-			case '\r':
-				buffer.append("\\r");
-				break;
-				
-			case '\n':
-				buffer.append("\\n");
-				break;			
-			
-			default:	
-				buffer.append(character);
-				break;
-			}
-		}
-		
-		return buffer.toString();	
-	}
-	
-}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/text/StringsTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/text/StringsTest.java
deleted file mode 100644
index 147c13a..0000000
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/text/StringsTest.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package org.eclipse.jdt.ui.tests.text;
-
-import java.io.IOException;
-import java.io.Reader;
-import java.io.StringReader;
-
-import org.eclipse.jdt.internal.corext.util.Strings;
-import org.eclipse.jdt.internal.ui.text.HTML2TextReader;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-public class StringsTest extends TestCase {
-
-
-	public StringsTest(String name) {
-		super(name);
-	}
-
-	public static Test suite() {
-		return new TestSuite(StringsTest.class);
-	}
-
-	
-	public void testIsIndentChar() {
-		assertTrue(Strings.isIndentChar(' '));
-		assertTrue(Strings.isIndentChar('\t'));
-		assertTrue(!Strings.isIndentChar('x'));
-		assertTrue(!Strings.isIndentChar('\n'));
-		assertTrue(!Strings.isIndentChar('\r'));
-	}
-		
-	public void testIsLineDelimiterChar() {
-		assertTrue(!Strings.isLineDelimiterChar(' '));
-		assertTrue(!Strings.isLineDelimiterChar('\t'));
-		assertTrue(!Strings.isLineDelimiterChar('x'));
-		assertTrue(Strings.isLineDelimiterChar('\n'));
-		assertTrue(Strings.isLineDelimiterChar('\r'));
-	}
-	
-}
-
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/text/TestCase.txt b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/text/TestCase.txt
deleted file mode 100644
index 09eca5f..0000000
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/text/TestCase.txt
+++ /dev/null
@@ -1,211 +0,0 @@
-package org.eclipse.jdt.ui.tests.text;
-
-import java.lang.reflect.*;
-
-/**
- * A test case defines the fixture to run multiple tests. To define a test case<br>
- * 1) implement a subclass of TestCase<br>
- * 2) define instance variables that store the state of the fixture<br>
- * 3) initialize the fixture state by overriding <code>setUp</code><br>
- * 4) clean-up after a test by overriding <code>tearDown</code>.<br>
- * Each test runs in its own fixture so there
- * can be no side effects among test runs.
- * Here is an example:
- * <pre>
- * public class MathTest extends TestCase {
- *     protected double fValue1;
- *     protected double fValue2;
- *
- *     public MathTest(String name) {
- *         super(name);
- *     }
- *
- *    protected void setUp() {
- *         fValue1= 2.0;
- *         fValue2= 3.0;
- *     }
- * }
- * </pre>
- *
- * For each test implement a method which interacts
- * with the fixture. Verify the expected results with assertions specified
- * by calling <code>assert</code> with a boolean.
- * <pre>
- *    protected void testAdd() {
- *        double result= fValue1 + fValue2;
- *        assert(result == 5.0);
- *    }
- * </pre>
- * Once the methods are defined you can run them. The framework supports
- * both a static type safe and more dynamic way to run a test.
- * In the static way you override the runTest method and define the method to
- * be invoked. A convenient way to do so is with an anonymous inner class.
- * <pre>
- * Test test= new MathTest("add") {
- *        public void runTest() {
- *            testAdd();
- *        }
- * };
- * test.run();
- * </pre>
- * The dynamic way uses reflection to implement <code>runTest</code>. It dynamically finds
- * and invokes a method.
- * In this case the name of the test case has to correspond to the test method
- * to be run.
- * <pre>
- * Test= new MathTest("testAdd");
- * test.run();
- * </pre>
- * The tests to be run can be collected into a TestSuite. JUnit provides
- * different <i>test runners</i> which can run a test suite and collect the results.
- * A test runner either expects a static method <code>suite</code> as the entry
- * point to get a test to run or it will extract the suite automatically.
- * <pre>
- * public static Test suite() {
- *      suite.addTest(new MathTest("testAdd"));
- *      suite.addTest(new MathTest("testDivideByZero"));
- *      return suite;
- *  }
- * </pre>
- * @see TestResult
- * @see TestSuite
- */
-
-public abstract class TestCase extends Assert implements Test {
-	/**
-	 * the name of the test case
-	 */
-	private String fName;
-	
-	/**
-	 * No-arg constructor to enable serialization. This method
-	 * is not intended to be used by mere mortals.
-	 */
-	TestCase() {
-		fName= null;
-	}
-	
-	/**
-	 * Constructs a test case with the given name.
-	 */
-	public TestCase(String name) {
-		fName= name;
-	}
-	
-	/**
-	 * Counts the number of test cases executed by run(TestResult result).
-	 */
-	public int countTestCases() {
-		return 1;
-	}
-	/**
-	 * Creates a default TestResult object
-	 *
-	 * @see TestResult
-	 */
-	protected TestResult createResult() {
-	    return new TestResult();
-	}
-	/**
-	 * Gets the name of the test case.
-	 * @deprecated use getName()
-	 */
-	public String name() {
-		return fName;
-	}
-	/**
-	 * A convenience method to run this test, collecting the results with a
-	 * default TestResult object.
-	 *
-	 * @see TestResult
-	 */
-	public TestResult run() {
-		TestResult result= createResult();
-		run(result);
-		return result;
-	}
-	/**
-	 * Runs the test case and collects the results in TestResult.
-	 */
-	public void run(TestResult result) {
-		result.run(this);
-	}
-	/**
-	 * Runs the bare test sequence.
-	 * @exception Throwable if any exception is thrown
-	 */
-	public void runBare() throws Throwable {
-		setUp();
-		try {
-			runTest();
-		}
-		finally {
-			tearDown();
-		}
-	}
-	/**
-	 * Override to run the test and assert its state.
-	 * @exception Throwable if any exception is thrown
-	 */
-	protected void runTest() throws Throwable {
-		Method runMethod= null;
-		try {
-			// use getMethod to get all public inherited
-			// methods. getDeclaredMethods returns all
-			// methods of this class but excludes the
-			// inherited ones.
-			runMethod= getClass().getMethod(fName, null);
-		} catch (NoSuchMethodException e) {
-			fail("Method \""+fName+"\" not found");
-		}
-		if (!Modifier.isPublic(runMethod.getModifiers())) {
-			fail("Method \""+fName+"\" should be public");
-		}
-
-		try {
-			runMethod.invoke(this, new Class[0]);
-		}
-		catch (InvocationTargetException e) {
-			e.fillInStackTrace();
-			throw e.getTargetException();
-		}
-		catch (IllegalAccessException e) {
-			e.fillInStackTrace();
-			throw e;
-		}
-	}
-	/**
-	 * Sets up the fixture, for example, open a network connection.
-	 * This method is called before a test is executed.
-	 */
-	protected void setUp() throws Exception {
-	}
-	/**
-	 * Tears down the fixture, for example, close a network connection.
-	 * This method is called after a test is executed.
-	 */
-	protected void tearDown() throws Exception {
-	}
-	/**
-	 * Returns a string representation of the test case
-	 */
-	public String toString() {
-	    return name()+"("+getClass().getName()+")";
-	}
-	/**
-	 * Gets the name of a TestCase
-	 * @return returns a String
-	 */
-	public String getName() {
-		return fName;
-	}
-
-	/**
-	 * Sets the name of a TestCase
-	 * @param name The name to set
-	 */
-	public void setName(String name) {
-		fName= name;
-	}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/text/TestCase2.txt b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/text/TestCase2.txt
deleted file mode 100644
index f9a86b8..0000000
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/text/TestCase2.txt
+++ /dev/null
@@ -1,66 +0,0 @@
-package org.eclipse.jdt.ui.tests.text;
-
-/**
- * javadoc
- */
-public class TestCase2 {
-	/*
-	 * multi line comment
-	 */
-	 private void foo() {
-	 	// single line comment
-	 	int value= 42;
-	 	
-	 	/**/
-	 	
-	 	String s= "string";
-	 	char c= 'c';
-	 	
-	 	String s2= "string2"/* ads*/;
-	 	
-	 	Nastyness: ""/**/''"";
-	 	
-	 	// open strings and characters
-	 	'open characters
-	 	"open strings
-	 	
-	 	// all state transitions
-	 	/* multi line comment */// single line comment
-	 	/* multi line comment *//* multi line comment */
-	 	/* multi line comment *//** java doc */
-	 	/* multi line comment */'character'
-	 	/* multi line comment */"string"
-	 	/* java doc */// single line comment
-	 	/* java doc *//* multi line comment */
-	 	/* java doc *//** java doc */
-	 	/* java doc */'character'
-	 	/* java doc */"string"
-	 	"string"// single line comment
-	 	"string"//* multi line comment */
-	 	"string"/** java doc */
-	 	"string"'character'
-	 	"string""string"
-	 	'character'// single line comment
-	 	'character'"//* multi line comment */
-	 	'character'/** java doc */
-	 	'character''character'
-	 	'character'"string"
-
-		// more nasty cases
-		/'asdf
-		/"asdf
-
-		/**
-		 *	// single line comment inside javadoc
-		 */
-		
-		/*
-		 *	// single line comment inside multi-line comment
-		 */
-		 
-		// would fail conformance, but it's ok
-		"<backslash>
-		'<backslash>		
-	 }
-
-}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/wizardapi/NewJavaProjectWizardTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/wizardapi/NewJavaProjectWizardTest.java
deleted file mode 100644
index 93d3806..0000000
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/wizardapi/NewJavaProjectWizardTest.java
+++ /dev/null
@@ -1,306 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.jdt.ui.tests.wizardapi;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IWorkspaceRoot;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
-
-import org.eclipse.jface.operation.IRunnableWithProgress;
-
-import org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation;
-
-import org.eclipse.jdt.core.IClasspathEntry;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.JavaCore;
-
-import org.eclipse.jdt.testplugin.TestPluginLauncher;
-import org.eclipse.jdt.ui.wizards.NewJavaProjectWizardPage;
-
-import org.eclipse.jdt.internal.ui.preferences.NewJavaProjectPreferencePage;
-
-public class NewJavaProjectWizardTest extends TestCase {
-	
-	
-	public static void main(String[] args) {
-		TestPluginLauncher.run(TestPluginLauncher.getLocationFromProperties(), NewJavaProjectWizardTest.class, args);
-	}
-
-
-	public static Test suite() {
-		return new TestSuite(NewJavaProjectWizardTest.class);
-	}		
-	
-	private class TestNewJavaProjectWizardPage extends NewJavaProjectWizardPage {
-	
-		private IProject fNewProject;
-	
-		public TestNewJavaProjectWizardPage(IWorkspaceRoot root) {
-			super(root, null);
-		}
-		
-		public void setProjectHandle(IProject newProject) {
-			fNewProject= newProject;
-		}	
-	
-		/**
-		 * @see NewJavaProjectWizardPage#getLocationPath()
-		 */
-		protected IPath getLocationPath() {
-			return null;
-		}
-
-		/**
-		 * @see NewJavaProjectWizardPage#getProjectHandle()
-		 */
-		protected IProject getProjectHandle() {
-			return fNewProject;
-		}
-		
-		public void initBuildPath() {
-			super.initBuildPaths();
-		}
-		
-	}
-	
-	
-	private static final String PROJECT_NAME = "DummyProject";
-	private static final String OTHER_PROJECT_NAME = "OtherProject";
-	
-	
-	private TestNewJavaProjectWizardPage fWizardPage;
-
-	public NewJavaProjectWizardTest(String name) {
-		super(name);
-	}	
-
-	/**
-	 * @see TestCase#setUp()
-	 */
-	protected void setUp() throws Exception {
-		super.setUp();
-		
-		IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot();
-		
-		IProject project= root.getProject(PROJECT_NAME);
-		
-		fWizardPage= new TestNewJavaProjectWizardPage(root);
-		fWizardPage.setProjectHandle(project);
-	}
-
-	/**
-	 * @see TestCase#tearDown()
-	 */
-	protected void tearDown() throws Exception {
-		IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot();
-		IProject project= root.getProject(PROJECT_NAME);
-		if (project.exists()) {
-			project.delete(true, null);
-		}
-		
-		project= root.getProject(OTHER_PROJECT_NAME);
-		if (project.exists()) {
-			project.delete(true, null);
-		}		
-	
-		super.tearDown();
-	}
-	
-	
-	private void assertBasicBuildPath(IProject project, IPath outputLocation, IClasspathEntry[] classpath) {
-		assertNotNull("a", outputLocation);
-		assertNotNull("b", classpath);
-		assertTrue("c", classpath.length == 2);
-		
-		if (NewJavaProjectPreferencePage.useSrcAndBinFolders()) {
-			assertEquals("d", outputLocation, project.getFolder("bin").getFullPath());
-			assertEquals("e", classpath[0].getPath(), project.getFolder("src").getFullPath());
-		} else {
-			assertEquals("f", outputLocation, project.getFullPath());
-			assertEquals("g", classpath[0].getPath(), project.getFullPath());
-		}
-		assertEquals("h", classpath[1].getPath(), new Path("JRE_LIB"));		
-	}
-	
-	public void testBasicSet() throws Exception {
-		fWizardPage.initBuildPath();
-		IProject project= fWizardPage.getProjectHandle();
-		
-		IPath outputLocation= fWizardPage.getOutputLocation();
-		IClasspathEntry[] classpath= fWizardPage.getRawClassPath();
-		assertBasicBuildPath(project, outputLocation, classpath);
-	}
-			
-		
-	public void testBasicCreate() throws Exception {	
-		IProject project= fWizardPage.getProjectHandle();
-		
-		IRunnableWithProgress op= new WorkspaceModifyDelegatingOperation(fWizardPage.getRunnable());
-		op.run(null);
-	
-		IJavaProject jproj= fWizardPage.getNewJavaProject();
-		
-		assertEquals("a", jproj.getProject(), project);
-		
-		IPath outputLocation= jproj.getOutputLocation();
-		IClasspathEntry[] classpath= jproj.getRawClasspath();
-		assertBasicBuildPath(jproj.getProject(), outputLocation, classpath);		
-	}
-	
-	public void testProjectChange() throws Exception {	
-		fWizardPage.initBuildPath();
-		IProject project= fWizardPage.getProjectHandle();
-		
-		IPath outputLocation= fWizardPage.getOutputLocation();
-		IClasspathEntry[] classpath= fWizardPage.getRawClassPath();
-		assertBasicBuildPath(project, outputLocation, classpath);
-	
-		IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot();
-		IProject otherProject= root.getProject(OTHER_PROJECT_NAME);		
-		
-		// change the project before create
-		fWizardPage.setProjectHandle(otherProject);
-
-		IRunnableWithProgress op= new WorkspaceModifyDelegatingOperation(fWizardPage.getRunnable());
-		op.run(null);
-		
-		IJavaProject jproj= fWizardPage.getNewJavaProject();
-		
-		assertEquals("a", jproj.getProject(), otherProject);
-		
-		IPath outputLocation1= fWizardPage.getOutputLocation();
-		IClasspathEntry[] classpath1= fWizardPage.getRawClassPath();
-		assertBasicBuildPath(otherProject, outputLocation1, classpath1);			
-	}	
-	
-	private void assertUserBuildPath(IProject project, IPath outputLocation, IClasspathEntry[] classpath) {
-		assertNotNull("a", outputLocation);
-		assertNotNull("b", classpath);
-		assertTrue("c", classpath.length == 3);
-		
-		assertEquals("d", outputLocation, project.getFolder("dbin").getFullPath());
-		assertEquals("e", classpath[0].getPath(), project.getFolder("dsrc1").getFullPath());
-		assertEquals("f", classpath[1].getPath(), project.getFolder("dsrc2").getFullPath());
-		assertEquals("g", classpath[2].getPath(), new Path("JRE_LIB"));	
-	}
-	
-	public void testUserSet() throws Exception {	
-		IProject project= fWizardPage.getProjectHandle();
-		
-		IPath folderPath= project.getFolder("dbin").getFullPath();
-		
-		IClasspathEntry[] entries= new IClasspathEntry[] {
-			JavaCore.newSourceEntry(project.getFolder("dsrc1").getFullPath()),
-			JavaCore.newSourceEntry(project.getFolder("dsrc2").getFullPath())
-		};
-			
-		fWizardPage.setDefaultOutputFolder(folderPath);
-		fWizardPage.setDefaultClassPath(entries, true);
-		fWizardPage.initBuildPath();
-		
-		IPath outputLocation= fWizardPage.getOutputLocation();
-		IClasspathEntry[] classpath= fWizardPage.getRawClassPath();
-		assertUserBuildPath(project, outputLocation, classpath);
-		
-		fWizardPage.setDefaultOutputFolder(null);
-		fWizardPage.setDefaultClassPath(null, false);
-		fWizardPage.initBuildPath();
-		
-		IPath outputLocation1= fWizardPage.getOutputLocation();
-		IClasspathEntry[] classpath1= fWizardPage.getRawClassPath();
-		assertBasicBuildPath(project, outputLocation1, classpath1);
-	}
-	
-	public void testUserCreate() throws Exception {	
-		IProject project= fWizardPage.getProjectHandle();
-		
-		IPath folderPath= project.getFolder("dbin").getFullPath();
-		
-		IClasspathEntry[] entries= new IClasspathEntry[] {
-			JavaCore.newSourceEntry(project.getFolder("dsrc1").getFullPath()),
-			JavaCore.newSourceEntry(project.getFolder("dsrc2").getFullPath())
-		};
-			
-		fWizardPage.setDefaultOutputFolder(folderPath);
-		fWizardPage.setDefaultClassPath(entries, true);
-		
-		IRunnableWithProgress op= new WorkspaceModifyDelegatingOperation(fWizardPage.getRunnable());
-		op.run(null);
-	
-		IJavaProject jproj= fWizardPage.getNewJavaProject();
-		
-		assertEquals("a", jproj.getProject(), project);
-		
-		IPath outputLocation= jproj.getOutputLocation();
-		IClasspathEntry[] classpath= jproj.getRawClasspath();
-		assertUserBuildPath(jproj.getProject(), outputLocation, classpath);	
-	}
-	
-	public void testReadExisting() throws Exception {
-		IProject project= fWizardPage.getProjectHandle();
-		
-		IPath folderPath= project.getFolder("dbin").getFullPath();
-		IClasspathEntry[] entries= new IClasspathEntry[] {
-			JavaCore.newSourceEntry(project.getFolder("dsrc1").getFullPath()),
-			JavaCore.newSourceEntry(project.getFolder("dsrc2").getFullPath())
-		};	
-		
-		fWizardPage.setDefaultOutputFolder(folderPath);
-		fWizardPage.setDefaultClassPath(entries, true);		
-		
-		IRunnableWithProgress op= new WorkspaceModifyDelegatingOperation(fWizardPage.getRunnable());
-		op.run(null);
-	
-		IProject proj= fWizardPage.getNewJavaProject().getProject();
-	
-		fWizardPage.setDefaultClassPath(null, false);
-		fWizardPage.setDefaultOutputFolder(null);
-		fWizardPage.setProjectHandle(proj);
-		
-		// reads from existing
-		fWizardPage.initBuildPath();
-		
-		IPath outputLocation1= fWizardPage.getOutputLocation();
-		IClasspathEntry[] classpath1= fWizardPage.getRawClassPath();
-		assertUserBuildPath(project, outputLocation1, classpath1);
-	}
-	
-	public void testExistingOverwrite() throws Exception {
-		IProject project= fWizardPage.getProjectHandle();
-				
-		IRunnableWithProgress op= new WorkspaceModifyDelegatingOperation(fWizardPage.getRunnable());
-		op.run(null);
-	
-		IProject proj= fWizardPage.getNewJavaProject().getProject();
-	
-		IPath folderPath= project.getFolder("dbin").getFullPath();
-		IClasspathEntry[] entries= new IClasspathEntry[] {
-			JavaCore.newSourceEntry(project.getFolder("dsrc1").getFullPath()),
-			JavaCore.newSourceEntry(project.getFolder("dsrc2").getFullPath())
-		};	
-		
-		fWizardPage.setDefaultOutputFolder(folderPath);
-		fWizardPage.setDefaultClassPath(entries, true);
-		
-		// should overwrite existing
-		IRunnableWithProgress op1= new WorkspaceModifyDelegatingOperation(fWizardPage.getRunnable());
-		op1.run(null);
-		
-		IJavaProject jproj= fWizardPage.getNewJavaProject();
-		
-		IPath outputLocation1= jproj.getOutputLocation();
-		IClasspathEntry[] classpath1= jproj.getRawClasspath();
-		assertUserBuildPath(project, outputLocation1, classpath1);	
-	}	
-}
-
-
-
diff --git a/org.eclipse.jdt.ui.vcm/.classpath b/org.eclipse.jdt.ui.vcm/.classpath
deleted file mode 100644
index b2cd8dd..0000000
--- a/org.eclipse.jdt.ui.vcm/.classpath
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-    <classpathentry kind="src" path="vcm"/>
-    <classpathentry kind="src" path="/org.eclipse.core.boot"/>
-    <classpathentry kind="src" path="/org.eclipse.core.runtime"/>
-    <classpathentry kind="src" path="/org.eclipse.core.resources"/>
-    <classpathentry kind="src" path="/org.eclipse.ui"/>
-    <classpathentry kind="src" path="/org.eclipse.vcm.core"/>
-    <classpathentry kind="src" path="/org.eclipse.vcm.ui"/>
-    <classpathentry kind="src" path="/org.eclipse.jdt.ui"/>
-    <classpathentry kind="src" path="/org.eclipse.jdt.core"/>
-    <classpathentry kind="var" path="JRE_LIB" rootpath="JRE_SRCROOT" sourcepath="JRE_SRC"/>
-    <classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/org.eclipse.jdt.ui.vcm/.cvsignore b/org.eclipse.jdt.ui.vcm/.cvsignore
deleted file mode 100644
index fe99505..0000000
--- a/org.eclipse.jdt.ui.vcm/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-bin
-
diff --git a/org.eclipse.jdt.ui.vcm/.project b/org.eclipse.jdt.ui.vcm/.project
deleted file mode 100644
index c59eeba..0000000
--- a/org.eclipse.jdt.ui.vcm/.project
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jdt.ui.vcm</name>
-	<comment></comment>
-	<projects>
-		<project>org.eclipse.jdt.ui</project>
-		<project>org.eclipse.ui</project>
-		<project>org.eclipse.jdt.core</project>
-		<project>org.eclipse.core.boot</project>
-		<project>org.eclipse.core.runtime</project>
-		<project>org.eclipse.core.resources</project>
-		<project>org.eclipse.swt</project>
-		<project>org.eclipse.vcm.core</project>
-		<project>org.eclipse.vcm.ui</project>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.team.cvs.core.cvsnature</nature>
-	</natures>
-</projectDescription>
diff --git a/org.eclipse.jdt.ui.vcm/.vcm_meta b/org.eclipse.jdt.ui.vcm/.vcm_meta
deleted file mode 100644
index 351bab6..0000000
--- a/org.eclipse.jdt.ui.vcm/.vcm_meta
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project-description>
-	<nature id="org.eclipse.jdt.core.javanature"/>
-	<reference project-name="org.eclipse.jdt.ui"/>
-	<reference project-name="org.eclipse.ui"/>
-	<reference project-name="org.eclipse.jdt.core"/>
-	<reference project-name="org.eclipse.core.boot"/>
-	<reference project-name="org.eclipse.core.runtime"/>
-	<reference project-name="org.eclipse.core.resources"/>
-	<reference project-name="org.eclipse.swt"/>
-	<reference project-name="org.eclipse.vcm.core"/>
-	<reference project-name="org.eclipse.vcm.ui"/>
-	<builder name="org.eclipse.jdt.core.javabuilder">
-	</builder>
-</project-description>
diff --git a/org.eclipse.jdt.ui.vcm/about.html b/org.eclipse.jdt.ui.vcm/about.html
deleted file mode 100644
index 768324e..0000000
--- a/org.eclipse.jdt.ui.vcm/about.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<html>
-<head>
-<title>About</title>
-<style type="text/css">
-p, table, td, th { font-family: arial, helvetica, geneva; font-size: 10pt}
-pre { font-family: "Courier New", Courier, mono; font-size: 10pt}
-h2 { font-family: arial, helvetica, geneva; font-size: 18pt; font-weight: bold ; line-height: 14px}
-code { font-family: "Courier New", Courier, mono; font-size: 10pt}
-sup { font-family: arial,helvetica,geneva; font-size: 10px}
-h3 { font-family: arial, helvetica, geneva; font-size: 14pt; font-weight: bold}
-li { font-family: arial, helvetica, geneva; font-size: 10pt}
-h1 { font-family: arial, helvetica, geneva; font-size: 28px; font-weight: bold}
-body { font-family: arial, helvetica, geneva; font-size: 10pt; clip: rect(   ); margin-top: 5mm; margin-left: 3mm}
-</style>
-</head>
-<body lang="EN-US" link="blue" vlink="purple">
-<table border="0" cellspacing="5" cellpadding="2" width="100%" >
-  <tr> 
-    <td align="LEFT" valign="TOP" colspan="2" bgcolor="#0080C0"><b><font color="#FFFFFF">About This Content</font></b></td>
-  </tr>
-  <tr> 
-    <td> 
-<p>11th December, 2001</p>	
-<h3>License</h3>
-<p>Eclipse.org makes available all content in this plug-in &quot;Content&quot;.  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
-<a href="http://www.eclipse.org/legal/cpl-v05.html">Common Public License Version 0.5</a> &quot;CPL&quot;.  For purposes of the CPL, &quot;Program&quot; will mean the Content.</p>
-
-<h3>Contributions</h3>
-
-<p>If this Content is licensed to you under the terms and conditions of the CPL, any Contributions, as defined in the CPL, uploaded, submitted, or otherwise
-made available to Eclipse.org, members of Eclipse.org and/or the host of Eclipse.org web site, by you that relate to such
-Content are provided under the terms and conditions of the CPL and can be made available to others under the terms of the CPL.</p>
-
-<p>If this Content is licensed to you under license terms and conditions other than the CPL &quot;Other License&quot;, any modifications, enhancements and/or
-other code and/or documentation &quot;Modifications&quot; uploaded, submitted, or otherwise made available to Eclipse.org, members of Eclipse.org and/or the
-host of Eclipse.org, by you that relate to such Content are provided under terms and conditions of the Other License and can be made available
-to others under the terms of the Other License.  In addition, with regard to Modifications for which you are the copyright holder, you are also
-providing the Modifications under the terms and conditions of the CPL and such Modifications can be made available to others under the terms of
-the CPL.</p>
-</td></tr></table>
-</body>
-</html>
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.vcm/build.properties b/org.eclipse.jdt.ui.vcm/build.properties
deleted file mode 100644
index 836c70a..0000000
--- a/org.eclipse.jdt.ui.vcm/build.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-bin.includes = plugin.xml,\
-               about.html,\
-               plugin.properties,\
-               *.jar
-source.jdtvcm.jar = vcm/
diff --git a/org.eclipse.jdt.ui.vcm/plugin.properties b/org.eclipse.jdt.ui.vcm/plugin.properties
deleted file mode 100644
index 6bab83a..0000000
--- a/org.eclipse.jdt.ui.vcm/plugin.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-#########################################
-# (c) Copyright IBM Corp. 2000, 2001.
-# All Rights Reserved.
-#########################################
-
-pluginName=Java Development Tools VCM UI
-
-TogglePackagesViewVersionLabels.label = Show &Version Info
-TogglePackagesViewVersionLabels.tooltip = Show Version Info in the Packages View
-Managing = Team
-ManageGroupMenu.label = &Team
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.vcm/plugin.xml.off b/org.eclipse.jdt.ui.vcm/plugin.xml.off
deleted file mode 100644
index 09d244e..0000000
--- a/org.eclipse.jdt.ui.vcm/plugin.xml.off
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- ======================================================================= -->
-<!-- This plugin provides basic VCM functionality to the Eclipse Java UI     -->
-<!-- ======================================================================= -->
-<plugin
-	name="%pluginName"
-	id = "org.eclipse.jdt.ui.vcm"
-	version = "1.0"
-	provider-name = "Object Technology International, Inc.">
-
-	<requires>
-		<import plugin="org.eclipse.core.resources"/>
-		<import plugin="org.eclipse.ui"/>
-		<import plugin="org.eclipse.vcm.core"/>
-		<import plugin="org.eclipse.vcm.ui"/>
-		<import plugin="org.eclipse.vcm.ui.cvs"/>
-		<import plugin="org.eclipse.jdt.ui"/>
-		<import plugin="org.eclipse.jdt.core"/>
-	</requires> 
-
-<runtime>
-  <library name="jdtvcm.jar">  
-     <export name = "*"/>
-  </library> 
-</runtime>
-
-<extension point="org.eclipse.vcm.core.ignore">
-	<ignore pattern = "*.class" selected = "true"/>
-</extension>
-
-<!-- **************** View Actions ******************* -->
-<extension point="org.eclipse.ui.viewActions"> 
-	<viewContribution 
-		id="org.eclipse.vcm.packageViewContribution" 
-		targetID="org.eclipse.jdt.ui.PackageExplorer"> 
-		<action id="org.eclipse.vcm.vcminfoinpkg" 
-			label="%TogglePackagesViewVersionLabels.label" 
-			menubarPath="additions" 
-			state="false"
-			tooltip="%TogglePackagesViewVersionLabels.tooltip" 
-			class="org.eclipse.jdt.ui.vcm.TogglePackageViewVersionLabels">
-		</action> 
-	</viewContribution> 
-</extension> 
-   
-</plugin>
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.vcm/scripts/exportplugin.xml b/org.eclipse.jdt.ui.vcm/scripts/exportplugin.xml
deleted file mode 100644
index 35d3ba3..0000000
--- a/org.eclipse.jdt.ui.vcm/scripts/exportplugin.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<!-- build script to create a plugin from org.eclipse.jdt.ui.vcm -->
-<project name="org.eclipse.jdt.ui.vcm" default="export" basedir="..">
-	<target name="init">
-		<tstamp/>
-		<property name="destdir" value="../../plugin-export" />
-		<property name="plugin"  value="org.eclipse.jdt.ui.vcm" />
-		<property name="dest"  value="${destdir}/${plugin}" />
-	</target>
-
-	<target name="build" depends="init">
-    	<eclipse.incrementalBuild project="${plugin}" kind="incr"/>
-	</target>
-
-	<target name="export" depends="build">
-		<mkdir dir="${destdir}" />
-		<delete dir="${dest}" />
-		<mkdir dir="${dest}" />
-		<jar 
-			jarfile="${dest}/jdtvcm.jar"
-			basedir="bin"
-		/>
-		<copy file="plugin.xml.off" todir="${dest}"/>
-		<copy file="plugin.properties" todir="${dest}"/>
-		<zip zipfile="${dest}/jdtvcmsrc.zip">
-		    <fileset dir="vcm" />
-  		</zip>				
-	</target>
-</project>
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/EditWorkingSetAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/EditWorkingSetAction.java
index 14c52b5..1496e7b 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/EditWorkingSetAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/EditWorkingSetAction.java
@@ -55,10 +55,6 @@
 			fShell= JavaPlugin.getActiveWorkbenchShell();
 		IWorkingSetManager manager= PlatformUI.getWorkbench().getWorkingSetManager();
 		IWorkingSet workingSet= fActionGroup.getWorkingSet();
-		if (workingSet == null) {
-			setEnabled(false);
-			return;
-		}
 		IWorkingSetEditWizard wizard= manager.createWorkingSetEditWizard(workingSet);
 		if (wizard == null) {
 			String title= WorkingSetMessages.getString("EditWorkingSetAction.error.nowizard.title"); //$NON-NLS-1$
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/JavaWorkingSetPage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/JavaWorkingSetPage.java
index fc4971c..48f6dff 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/JavaWorkingSetPage.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/JavaWorkingSetPage.java
@@ -292,7 +292,7 @@
 				boolean state= event.getChecked();		
 				fTree.setGrayed(element, false);
 				if (isExpandable(element))
-					setSubtreeChecked(element, state, state); // only check subtree if state is set to true
+					setSubtreeChecked(element, state, true);
 					
 				updateParentState(element, state);
 				validateInput();
@@ -317,7 +317,7 @@
 			else
 				fTree.setGrayChecked(element, false);
 			if (isExpandable(element))
-				setSubtreeChecked(element, state, checkExpandedState);
+				setSubtreeChecked(element, state, true);
 		}
 	}
 
diff --git a/org.junit/.classpath b/org.junit/.classpath
deleted file mode 100644
index 6a69101..0000000
--- a/org.junit/.classpath
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-    <classpathentry kind="var" path="JRE_LIB" rootpath="JRE_SRCROOT" sourcepath="JRE_SRC"/>
-    <classpathentry exported="true" kind="lib" path="junit.jar" sourcepath="/org.junit/src.jar"/>
-    <classpathentry kind="output" path=""/>
-</classpath>
diff --git a/org.junit/.project b/org.junit/.project
deleted file mode 100644
index 18f1f46..0000000
--- a/org.junit/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.junit</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/org.junit/about.html b/org.junit/about.html
deleted file mode 100644
index 7c04b64..0000000
--- a/org.junit/about.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
-
-<p>20th June, 2002</p>	
-<h3>License</h3>
-<p>Eclipse.org makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
-Common Public License Version 1.0 (&quot;CPL&quot;).  A copy of the CPL is available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>.
-For purposes of the CPL, &quot;Program&quot; will mean the Content.</p>
-
-<h3>Third Party Content</h3>
-
-<p>The Content includes items that have been sourced from third parties as follows:</p>
-
-<p><b>JUnit 3.7</b></p>
-
-<p>The plug-in is accompanied by software developed by JUnit.org.  The JUnit 3.7 code included with the plug-in includes no modifications.
-Your use of JUnit 3.7 in both source and binary code form contained in the plug-in is subject to the terms and conditions of the IBM Public License 1.0
-which is available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>.
-The binary code is located in junit.jar and the source code is located in src.jar.</p>
-
-<p>i) IBM effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;</p>
-
-<p>ii) IBM effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;</p>
-
-<p>iii) IBM states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party.</p>
-
-<h3>Contributions</h3>
-
-<p>If this Content is licensed to you under the terms and conditions of the CPL, any Contributions, as defined in the CPL, uploaded, submitted, or otherwise
-made available to Eclipse.org, members of Eclipse.org and/or the host of Eclipse.org web site, by you that relate to such
-Content are provided under the terms and conditions of the CPL and can be made available to others under the terms of the CPL.</p>
-
-<p>If this Content is licensed to you under license terms and conditions other than the CPL (&quot;Other License&quot;), any modifications, enhancements and/or
-other code and/or documentation (&quot;Modifications&quot;) uploaded, submitted, or otherwise made available to Eclipse.org, members of Eclipse.org and/or the
-host of Eclipse.org, by you that relate to such Content are provided under terms and conditions of the Other License and can be made available
-to others under the terms of the Other License.  In addition, with regard to Modifications for which you are the copyright holder, you are also
-providing the Modifications under the terms and conditions of the CPL and such Modifications can be made available to others under the terms of
-the CPL.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/org.junit/build.properties b/org.junit/build.properties
deleted file mode 100644
index 44f2984..0000000
--- a/org.junit/build.properties
+++ /dev/null
@@ -1,8 +0,0 @@
-bin.includes = plugin.xml,\
-               about.html,\
-               plugin.properties,\
-               junit.jar
-               
-src.includes = *.zip,about.html
-
-
diff --git a/org.junit/junit.jar b/org.junit/junit.jar
deleted file mode 100644
index 914a5cf..0000000
--- a/org.junit/junit.jar
+++ /dev/null
Binary files differ
diff --git a/org.junit/junitsrc.zip b/org.junit/junitsrc.zip
deleted file mode 100644
index 2a8c7ce..0000000
--- a/org.junit/junitsrc.zip
+++ /dev/null
Binary files differ
diff --git a/org.junit/plugin.properties b/org.junit/plugin.properties
deleted file mode 100644
index f134819..0000000
--- a/org.junit/plugin.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-#########################################
-# (c) Copyright IBM Corp. 2000, 2001.
-# All Rights Reserved.
-#########################################
-
-pluginName=JUnit Testing Framework
-providerName=Eclipse.org
\ No newline at end of file
diff --git a/org.junit/plugin.xml b/org.junit/plugin.xml
deleted file mode 100644
index 688831d..0000000
--- a/org.junit/plugin.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<plugin
-  name="%pluginName"
-  id="org.junit"
-  version="3.7"
-  provider-name="%providerName">
-
-  <runtime>
-    <library name="junit.jar">
-      <export name="*"/>
-    </library>
-  </runtime>
-</plugin>
diff --git a/org.junit/scripts/exportplugin.xml b/org.junit/scripts/exportplugin.xml
deleted file mode 100644
index 77bcc47..0000000
--- a/org.junit/scripts/exportplugin.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<!-- build script to create JUnit Plugin -->
-<project name="org.junit" default="export" basedir="..">
-	<target name="init">
-		<tstamp/>
-		<property name="destdir" value="../../plugin-export" />
-		<property name="plugin"  value="org.junit" />
-		<property name="version"  value="_3.8.1" />
-		<property name="dest"  value="${destdir}/${plugin}${version}" />
-	</target>
-
-	<target name="build" depends="init">
-    	<eclipse.incrementalBuild project="${plugin}" kind="incr"/>
-	</target>
-
-	<target name="export" depends="build">
-		<mkdir dir="${destdir}" />
-		<delete dir="${dest}" />
-		<mkdir dir="${dest}" />
-
-		<copy file="junit.jar" todir="${dest}"/>
-		<copy file="junitsrc.jar" todir="${dest}"/>
-		<copy file="plugin.xml" todir="${dest}"/>
-		<copy file="about.html" todir="${dest}"/>
-		<copy file="plugin.properties" todir="${dest}"/>
-				
-	</target>
-</project>
