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 b99369c..0000000
--- a/org.eclipse.jdt.junit.core/plugin.xml
+++ /dev/null
@@ -1,184 +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> 
-        <perspectiveExtension 
-			targetID="org.eclipse.jdt.ui.JavaPerspective">
-			<actionSet id="org.eclipse.jdt.junit.JUnitActionSet"/>
-		</perspectiveExtension>
-		<perspectiveExtension 
-			targetID="org.eclipse.jdt.ui.JavaBrowsingPerspective">
-			<actionSet id="org.eclipse.jdt.junit.JUnitActionSet"/>
-		</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 point="org.eclipse.ui.actionSets">
-		<actionSet
-            label="JUnit"
-            visible="false"
-            id="org.eclipse.jdt.junit.JUnitActionSet">
-			<action
-				label="Referring Tests..."
-				tooltip="Go to Test Referring to Selection"
-				class="org.eclipse.jdt.internal.junit.ui.GotoReferencedTestAction"
-				menubarPath="navigate/goTo/"
-				id="junit.actions.GotoTestAction">
-			</action>
-		</actionSet>
-   </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 b99369c..0000000
--- a/org.eclipse.jdt.junit/plugin.xml
+++ /dev/null
@@ -1,184 +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> 
-        <perspectiveExtension 
-			targetID="org.eclipse.jdt.ui.JavaPerspective">
-			<actionSet id="org.eclipse.jdt.junit.JUnitActionSet"/>
-		</perspectiveExtension>
-		<perspectiveExtension 
-			targetID="org.eclipse.jdt.ui.JavaBrowsingPerspective">
-			<actionSet id="org.eclipse.jdt.junit.JUnitActionSet"/>
-		</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 point="org.eclipse.ui.actionSets">
-		<actionSet
-            label="JUnit"
-            visible="false"
-            id="org.eclipse.jdt.junit.JUnitActionSet">
-			<action
-				label="Referring Tests..."
-				tooltip="Go to Test Referring to Selection"
-				class="org.eclipse.jdt.internal.junit.ui.GotoReferencedTestAction"
-				menubarPath="navigate/goTo/"
-				id="junit.actions.GotoTestAction">
-			</action>
-		</actionSet>
-   </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 ad71da3..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/launcher/JUnitLaunchConfiguration.java
+++ /dev/null
@@ -1,127 +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.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.ExecutionArguments;
-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);	
-		String progArgs= getProgramArguments(configuration);
-		VMRunnerConfiguration vmConfig= new VMRunnerConfiguration("org.eclipse.jdt.internal.junit.runner.RemoteTestRunner", classPath); //$NON-NLS-1$
-
-		// insert the program arguments
-		Vector argv= new Vector(10);
-		ExecutionArguments execArgs = new ExecutionArguments("", progArgs); //$NON-NLS-1$
-		String[] pa= execArgs.getProgramArgumentsArray();
-		for (int i= 0; i < pa.length; i++) {
-			argv.add(pa[i]);
-		}
-
-		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);
-		String[] classPath= null;
-		
-		try {
-			if (BootLoader.inDevelopmentMode()) {
-				// assumption is that the output folder is called bin!
-				classPath= new String[cp.length + 2];
-				System.arraycopy(cp, 0, classPath, 2, cp.length);
-				classPath[0]= Platform.asLocalURL(new URL(url, "bin")).getFile(); //$NON-NLS-1$
-				classPath[1]= Platform.asLocalURL(new URL(url, "junitsupport.jar")).getFile(); //$NON-NLS-1$
-			}
-			else {
-				classPath= new String[cp.length + 1];
-				System.arraycopy(cp, 0, classPath, 1, cp.length);
-				classPath[0]= Platform.asLocalURL(new URL(url, "junitsupport.jar")).getFile(); //$NON-NLS-1$
-			}
-		} catch (IOException e) {
-			JUnitPlugin.log(e); // TODO 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 0d7580a..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/runner/RemoteTestRunner.java
+++ /dev/null
@@ -1,595 +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) {
-		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();
-		}
-		if (fDebugMode) {
-			System.out.println("Tests:");
-			for (int i= 0; i < fTestClassNames.length; i++) {
-				System.out.println("    "+fTestClassNames[i]);
-			}
-		}
-	}
-
-	
-	/**
-	 * 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.print("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 - time(ms): "+(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 5c4eac2..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/FailureRunView.java
+++ /dev/null
@@ -1,268 +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) {
-			String className= getClassName();
-			String methodName= getMethodName();
-			if (className != null) {
-				manager.add(new OpenTestAction(fRunnerViewPart, className, methodName));
-				manager.add(new RerunAction(fRunnerViewPart, className, methodName));
-			}
-		}
-	}		
-	
-	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 8c37964..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/FailureTraceView.java
+++ /dev/null
@@ -1,235 +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 static final String FRAME_PREFIX= "at ";
-	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 { 
-			//TODO: works for JDK stack trace only
-			String testName= traceLine;
-			testName= testName.substring(testName.indexOf(FRAME_PREFIX)); //$NON-NLS-1$
-			testName= testName.substring(FRAME_PREFIX.length(), 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/GotoReferencedTestAction.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/GotoReferencedTestAction.java
deleted file mode 100644
index f2da9af..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/GotoReferencedTestAction.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 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 v0.5 
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v05.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- ******************************************************************************/
-package org.eclipse.jdt.internal.junit.ui;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.runtime.CoreException;
-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.core.JavaModelException;
-import org.eclipse.jdt.internal.ui.actions.SelectionConverter;
-import org.eclipse.jdt.internal.ui.javaeditor.JavaEditor;
-import org.eclipse.jdt.ui.JavaUI;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.dialogs.ErrorDialog;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.dialogs.ProgressMonitorDialog;
-import org.eclipse.jface.text.ITextSelection;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.IWorkbenchWindowActionDelegate;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.dialogs.SelectionDialog;
-import org.eclipse.ui.dialogs.SelectionStatusDialog;
-
-/**
- * Shows a dialog with test methods that refer to the selection.
- */
-public class GotoReferencedTestAction implements IWorkbenchWindowActionDelegate {
-	ISelection fSelection;
-	IWorkbenchWindow fWorkbench;
-	
-	private void run(IStructuredSelection selection) {
-		IJavaElement[] elements= getSelectedElements(selection);
-		if (elements == null || elements.length == 0) {
-			MessageDialog.openInformation(getShell(), "Go to Test", "Select a method, type, or compilation unit to open tests that refer to them.");
-			return;
-		}
-		try {
-			run(elements);
-		} catch (CoreException e) {
-			ErrorDialog.openError(getShell(), "Go to Test", "Error trying to find test", e.getStatus());
-		}
-	}
-			
-	private void run(ITextSelection ITextSelection) {
-		try {
-			JavaEditor editor= getActiveEditor();
-			if (editor == null)
-				return;
-			IJavaElement element= SelectionConverter.getElementAtOffset(editor);
-			int type= element != null ? element.getElementType() : -1;
-			if (type != IJavaElement.METHOD && type != IJavaElement.TYPE) {
-		 		element= SelectionConverter.getTypeAtOffset(editor);
-		 		if (element == null) {
-					MessageDialog.openInformation(getShell(), "Go to Test", "Selection is not inside of a type or method.");
-					return;
-		 		}
-			}
-			run(new IMember[] { (IMember)element });
-		} catch (CoreException e) {
-			ErrorDialog.openError(getShell(), "Go to Test", "Error trying to find test", e.getStatus());
-		}
-	}
-
-	private void run(IJavaElement[] elements) throws PartInitException, JavaModelException {
-		IJavaElement element= elements[0];
-		
-		SelectionStatusDialog dialog = new TestMethodSelectionDialog(getShell(), new ProgressMonitorDialog(getShell()), element); 
-		dialog.setTitle("Select Test"); 
-		dialog.setMessage("Select a test that refers to '"+element.getElementName()+"'."); 
-		
-		if (dialog.open() == SelectionDialog.CANCEL) 
-			return;
-	
-		Object result = dialog.getFirstResult();
-		if (result == null) 
-			return;
-				
-		openElement((IJavaElement)result);
-	}
-
-	private void openElement(IJavaElement result) throws JavaModelException, PartInitException {
-		IEditorPart part= JavaUI.openInEditor(result);
-		JavaUI.revealInEditor(part, result);
-	}
-		
-	private IJavaElement[] getSelectedElements(IStructuredSelection selection) {
-		List elements= selection.toList();
-		int size= elements.size();
-		if (size == 0)
-			return null;
-			
-		ArrayList result= new ArrayList(size);
-			
-		for (int i= 0; i < size; i++) {
-			Object e= elements.get(i);
-			if (e instanceof ICompilationUnit) {
-				ICompilationUnit unit= (ICompilationUnit) e;
-				IType[] types= new IType[0];
-				try {
-					types= unit.getTypes();
-				} catch (JavaModelException ex) {
-				}
-				for (int j= 0; j < types.length; j++) {
-					result.add(types[j]);
-				} 
-			}
-			else if (e instanceof IMethod || e instanceof IType || e instanceof IField) {
-				result.add(e);
-			} else {
-				return null;
-			}
-		}
-		return (IJavaElement[])result.toArray(new IJavaElement[result.size()]);
-	}
-		
-	public void run(IAction action) {
-		if (fSelection instanceof IStructuredSelection)
-			run((IStructuredSelection)fSelection);
-		else if (fSelection instanceof ITextSelection) 
-			run((ITextSelection)fSelection);
-	}
-	
-	public void selectionChanged(IAction action, ISelection selection) {
-		fSelection= selection;
-	}
-		
-	private Shell getShell() {
-		if (fWorkbench != null)
-			return fWorkbench.getShell();
-		return JUnitPlugin.getActiveWorkbenchShell();
-	}
-	
-	public void dispose() {
-	}
-	
-	public void init(IWorkbenchWindow window) {
-		fWorkbench= window;
-	}
-	
-	private JavaEditor getActiveEditor() {
-		IEditorPart editor= fWorkbench.getActivePage().getActiveEditor();
-		if (editor instanceof JavaEditor)
-			return (JavaEditor) editor;
-		return null;
-	}
-}
\ 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 816b455..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/IJUnitHelpContextIds.java
+++ /dev/null
@@ -1,33 +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$
-	
-	// Dialogs
-	public static final String TEST_SELECTION_DIALOG= PREFIX + "test_selection_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 c657f62..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TabFolderLayout.java
+++ /dev/null
@@ -1,50 +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
- * TODO: check whether this is still required
- */
-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/TestMethodSelectionDialog.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestMethodSelectionDialog.java
deleted file mode 100644
index 60cbb36..0000000
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestMethodSelectionDialog.java
+++ /dev/null
@@ -1,151 +0,0 @@
-package org.eclipse.jdt.internal.junit.ui;
-
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
- 
-import java.lang.reflect.InvocationTargetException;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jdt.core.IJavaElement;
-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.core.search.IJavaSearchConstants;
-import org.eclipse.jdt.core.search.IJavaSearchResultCollector;
-import org.eclipse.jdt.core.search.IJavaSearchScope;
-import org.eclipse.jdt.core.search.SearchEngine;
-import org.eclipse.jdt.ui.JavaElementLabelProvider;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.operation.IRunnableContext;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.dialogs.ElementListSelectionDialog;
-import org.eclipse.ui.help.WorkbenchHelp;
-
-/**
- * A dialog to select a test method.
- */
-public class TestMethodSelectionDialog extends ElementListSelectionDialog {
-
-	private IRunnableContext fRunnableContext;
-	private IJavaElement fElement;
-
-	public static class TestReferenceCollector implements IJavaSearchResultCollector {
-		IProgressMonitor fMonitor;
-		Set fResult= new HashSet(200);
-		
-		public TestReferenceCollector(IProgressMonitor pm) {
-			fMonitor= pm;
-		}
-		
-		public void aboutToStart() {
-		}
-	
-		public void accept(IResource resource, int start, int end, IJavaElement enclosingElement, int accuracy) throws CoreException {
-			if (enclosingElement.getElementName().startsWith("test"))
-				fResult.add(enclosingElement);
-		}
-	
-		public void done() {
-		}
-	
-		public IProgressMonitor getProgressMonitor() {
-			return fMonitor;
-		}
-		
-		public Object[] getResult() {
-			return fResult.toArray();
-		}
-	}
-
-	public TestMethodSelectionDialog(Shell shell, IRunnableContext context, IJavaElement element) {
-		super(shell, new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_PARAMETERS | JavaElementLabelProvider.SHOW_POST_QUALIFIED));
-		fRunnableContext= context;
-		fElement= element;
-	}
-	
-	/*
-	 * @see Windows#configureShell
-	 */
-	protected void configureShell(Shell newShell) {
-		super.configureShell(newShell);
-		WorkbenchHelp.setHelp(newShell, IJUnitHelpContextIds.TEST_SELECTION_DIALOG);
-	}
-
-	/*
-	 * @see Window#open()
-	 */
-	public int open() {
-		Object[] elements;
-		IType testType= findTestType();
-		
-		if (testType == null) {
-			MessageDialog.openError(getShell(), "Select Test", "Cannot find '"+JUnitPlugin.TEST_INTERFACE_NAME+"' - make sure that JUnit is on the project's classpath.");
-			return CANCEL;
-		}
-		
-		try {
-			elements= searchTestMethods(fElement, testType, fRunnableContext);
-		} catch (InterruptedException e) {
-			return CANCEL;
-		} catch (InvocationTargetException e) {
-			MessageDialog.openError(getShell(), "Select Test", e.getTargetException().getMessage());
-			return CANCEL;
-		}
-		
-		if (elements.length == 0) {
-			MessageDialog.openInformation(getShell(), "Go to Test", "No Tests Found that reference '"+fElement.getElementName()+"'.");
-			return CANCEL;
-		}
-		setElements(elements);
-		return super.open();
-	}
-	
-	private IType findTestType() {
-		String qualifiedName= JUnitPlugin.TEST_INTERFACE_NAME;
-		IJavaProject[] projects;
-		try {
-			projects= JavaCore.create(ResourcesPlugin.getWorkspace().getRoot()).getJavaProjects();
-			for (int i= 0; i < projects.length; i++) {
-				IJavaProject project= projects[i];
-				IType type= project.findType(qualifiedName);
-				if (type != null) {
-					return type;
-				}
-			}
-		} catch (JavaModelException e) {
-		}
-		return null;
-	}
-	
-	public Object[] searchTestMethods(final IJavaElement element, final IType testType, IRunnableContext context) throws InvocationTargetException, InterruptedException  {
-		final TestReferenceCollector[] col= new TestReferenceCollector[1];
-		
-		IRunnableWithProgress runnable= new IRunnableWithProgress() {
-			public void run(IProgressMonitor pm) throws InvocationTargetException {
-				try {
-					col[0]= doSearchTestMethods(element, testType, pm);
-				} catch (JavaModelException e) {
-					throw new InvocationTargetException(e);
-				}
-			}
-		};
-		context.run(true, true, runnable);
-		return col[0].getResult();
-	}
-
-	private TestReferenceCollector doSearchTestMethods(IJavaElement element, IType testType, IProgressMonitor pm) throws JavaModelException{
-		IJavaSearchScope scope= SearchEngine.createHierarchyScope(testType);
-		TestReferenceCollector collector= new TestReferenceCollector(pm);
-		new SearchEngine().search(ResourcesPlugin.getWorkspace(), element, IJavaSearchConstants.REFERENCES, scope, collector);
-		return collector;
-	}
-}
\ 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 12fd852..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 + ".suite());"); //$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_testAll40_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll40_in.java
deleted file mode 100644
index f4e0509..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll40_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_testAll40_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll40_out.java
deleted file mode 100644
index cd44c2f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll40_out.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-//to public
-class A{
-	public int m(boolean jj, int[] x, int i){
-		return m(false, null, m(jj, null, i));
-	}
-}
-class B extends A{
-	public int m(boolean j, int[] 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_testAll41_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll41_in.java
deleted file mode 100644
index 1b30b89..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll41_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void m(int i){
-		m(0);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll41_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll41_out.java
deleted file mode 100644
index a3476d9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll41_out.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/ChangeSignature/canModify/A_testAll42_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll42_in.java
deleted file mode 100644
index 1b30b89..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll42_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void m(int i){
-		m(0);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll42_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll42_out.java
deleted file mode 100644
index 1b30b89..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll42_out.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void m(int i){
-		m(0);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll43_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll43_in.java
deleted file mode 100644
index 9e42322..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll43_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void m(int i, int j){
-		m(0, 1);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll43_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll43_out.java
deleted file mode 100644
index 52fa429..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll43_out.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void m(int j){
-		m(1);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll44_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll44_in.java
deleted file mode 100644
index 9e42322..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll44_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void m(int i, int j){
-		m(0, 1);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll44_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll44_out.java
deleted file mode 100644
index cf2d976..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll44_out.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	boolean m(int j){
-		m(1);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll45_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll45_in.java
deleted file mode 100644
index 9e42322..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll45_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void m(int i, int j){
-		m(0, 1);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll45_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll45_out.java
deleted file mode 100644
index 21828dc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/canModify/A_testAll45_out.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void m(boolean j){
-		m(1);
-	}
-}
\ 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/ChangeSignature/cannotModify/A_testFailDoAll5.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/cannotModify/A_testFailDoAll5.java
deleted file mode 100644
index 359bd64..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeSignature/cannotModify/A_testFailDoAll5.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class A{
-	int m(int i){
-	}
-}
-class B extends A{
-	int m(int i){
-		int o= i;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test0_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test0_in.java
deleted file mode 100644
index f24aa7c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test0_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//private, static, final
-class A{
-	void f(){
-		new A(){};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test0_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test0_out.java
deleted file mode 100644
index c7f95e0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test0_out.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-//private, static, final
-class A{
-	private final class Inner extends A {
-	}
-	void f(){
-		new Inner();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test10_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test10_in.java
deleted file mode 100644
index 17e86da..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test10_in.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-//private, static, final
-class A{
-	A(int i){
-	}
-	void f(){
-		new A(1){
-			void f(){
-				x();
-			}
-		};
-	}
-	static void x(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test10_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test10_out.java
deleted file mode 100644
index 7bd4647..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test10_out.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package p;
-//private, static, final
-class A{
-	private final class Inner extends A {
-		private Inner(int i) {
-			super(i);
-		}
-		void f(){
-			x();
-		}
-	}
-	A(int i){
-	}
-	void f(){
-		new Inner(1);
-	}
-	static void x(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test11_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test11_in.java
deleted file mode 100644
index bcf9c61..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test11_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-	void f(){
-		final int u= 9;
-		new A(){
-			int k= u;
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test11_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test11_out.java
deleted file mode 100644
index 27d9e40..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test11_out.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package p;
-class A{
-	private final class Inner extends A {
-		private final int u;
-		int k;
-		private Inner(int u) {
-			super();
-			this.u= u;
-			k= u;
-		}
-	}
-	void f(){
-		final int u= 9;
-		new Inner(u);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test12_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test12_in.java
deleted file mode 100644
index b3e2851..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test12_in.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-class A{
-	A(int x){
-	}
-	void f(){
-		final int u= 9;
-		int s= 2;
-		new A(s){
-			int k= u;
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test12_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test12_out.java
deleted file mode 100644
index 6d9e8ed..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test12_out.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package p;
-class A{
-	private final class Inner extends A {
-		private final int u;
-		int k;
-		private Inner(int x, int u) {
-			super(x);
-			this.u= u;
-			k= u;
-		}
-	}
-	A(int x){
-	}
-	void f(){
-		final int u= 9;
-		int s= 2;
-		new Inner(s, u);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test13_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test13_in.java
deleted file mode 100644
index 3a0d387..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test13_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-	A(Object s){}
-	void f(){
-		class Local{}
-		new A(new Local()){
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test13_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test13_out.java
deleted file mode 100644
index be04509..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test13_out.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-class A{
-	private final class Inner extends A {
-		private Inner(Object s) {
-			super(s);
-		}
-	}
-	A(Object s){}
-	void f(){
-		class Local{}
-		new Inner(new Local());
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test14_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test14_in.java
deleted file mode 100644
index 44ac387..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test14_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//private, static, final
-class A{
-	void f(){
-		new Object(){};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test14_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test14_out.java
deleted file mode 100644
index 94d854e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test14_out.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-//private, static, final
-class A{
-	private final class Inner {
-	}
-	void f(){
-		new Inner();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test15_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test15_in.java
deleted file mode 100644
index 46e5354..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test15_in.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-
-import java.util.ArrayList;
-
-class A{
-    void g(){
-        new ArrayList(6){
-        };
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test15_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test15_out.java
deleted file mode 100644
index dde06da..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test15_out.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-
-import java.util.ArrayList;
-
-class A{
-	private final class Inner extends ArrayList {
-		private Inner(int arg0) {
-			super(arg0);
-		}
-	}
-    void g(){
-        new Inner(6);
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test16_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test16_in.java
deleted file mode 100644
index 53706b9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test16_in.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class A {
-	void f(){
-		new Comparable(){
-            public int compareTo(Object other) {
-				return 0;
-            }
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test16_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test16_out.java
deleted file mode 100644
index 5569583..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test16_out.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A {
-	private final class Inner implements Comparable {
-		public int compareTo(Object other) {
-			return 0;
-		}
-	}
-	void f(){
-		new Inner();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test17_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test17_in.java
deleted file mode 100644
index 3612339..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test17_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A {
-	A(Object x){
-	}
-	void f(){
-		new A(this){
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test17_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test17_out.java
deleted file mode 100644
index 42c8e2a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test17_out.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-class A {
-	private final class Inner extends A {
-		private Inner(Object x) {
-			super(x);
-		}
-	}
-	A(Object x){
-	}
-	void f(){
-		new Inner(this);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test18_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test18_in.java
deleted file mode 100644
index db38aa6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test18_in.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A{
-	void f(){
-		final int u= 9;
-		new A(){
-			void g(){
-				int uj= u;
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test18_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test18_out.java
deleted file mode 100644
index 1d3b515..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test18_out.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package p;
-class A{
-	private final class Inner extends A {
-		private final int u;
-		private Inner(int u) {
-			super();
-			this.u= u;
-		}
-		void g(){
-			int uj= u;
-		}
-	}
-	void f(){
-		final int u= 9;
-		new Inner(u);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test19_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test19_in.java
deleted file mode 100644
index 4ef68ac..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test19_in.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A{
-    void f(){
-        final int u= 8;
-        new A(){
-            int l= 9;
-            int p0= 2, k= u, k1= k;
-            int l1= l+1, p, q= p+u;
-        };
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test19_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test19_out.java
deleted file mode 100644
index 0a4abc5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test19_out.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package p;
-class A{
-	private final class Inner extends A {
-		private final int u;
-		int l= 9;
-		int p0= 2, k, k1= k;
-		int l1= l+1, p, q;
-		private Inner(int u) {
-			super();
-			this.u= u;
-			k= u;
-			q= p+u;
-		}
-	}
-    void f(){
-        final int u= 8;
-        new Inner(u);
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test1_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test1_in.java
deleted file mode 100644
index c567910..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test1_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//public, static, final
-class A{
-	void f(){
-		new A(){};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test1_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test1_out.java
deleted file mode 100644
index 278331c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test1_out.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-//public, static, final
-class A{
-	public final class Inner extends A {
-	}
-	void f(){
-		new Inner();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test2_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test2_in.java
deleted file mode 100644
index f37423a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test2_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//public, nonstatic, final
-class A{
-	void f(){
-		new A(){};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test2_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test2_out.java
deleted file mode 100644
index 4803cd9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test2_out.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-//public, nonstatic, final
-class A{
-	public final class Inner extends A {
-	}
-	void f(){
-		new Inner();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test3_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test3_in.java
deleted file mode 100644
index 9a318b5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test3_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//public, nonstatic, nonfinal
-class A{
-	void f(){
-		new A(){};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test3_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test3_out.java
deleted file mode 100644
index a6c37e5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test3_out.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-//public, nonstatic, nonfinal
-class A{
-	public class Inner extends A {
-	}
-	void f(){
-		new Inner();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test4_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test4_in.java
deleted file mode 100644
index 5a2d397..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test4_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-//private, static, final
-class A{
-	A(){
-	}
-	void f(){
-		new A(){};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test4_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test4_out.java
deleted file mode 100644
index 953159c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test4_out.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-//private, static, final
-class A{
-	private final class Inner extends A {
-	}
-	A(){
-	}
-	void f(){
-		new Inner();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test5_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test5_in.java
deleted file mode 100644
index d2e45d9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test5_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-//private, static, final
-class A{
-	A(int i){
-	}
-	void f(){
-		new A(1){};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test5_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test5_out.java
deleted file mode 100644
index ba6a492..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test5_out.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-//private, static, final
-class A{
-	private final class Inner extends A {
-		private Inner(int i) {
-			super(i);
-		}
-	}
-	A(int i){
-	}
-	void f(){
-		new Inner(1);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test6_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test6_in.java
deleted file mode 100644
index 18cbe20..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test6_in.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-//private, static, final
-class A{
-	A(int i){
-	}
-	void f(){
-		new A(1){
-			void f(){
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test6_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test6_out.java
deleted file mode 100644
index b7c7807..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test6_out.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package p;
-//private, static, final
-class A{
-	private final class Inner extends A {
-		private Inner(int i) {
-			super(i);
-		}
-		void f(){
-		}
-	}
-	A(int i){
-	}
-	void f(){
-		new Inner(1);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test7_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test7_in.java
deleted file mode 100644
index 81d8b7c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test7_in.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-//private, static, final
-class A{
-	A(int i){
-	}
-	void f(){
-		new A(1){
-			int X = 0;
-			void f(){
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test7_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test7_out.java
deleted file mode 100644
index e6c4841..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test7_out.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package p;
-//private, static, final
-class A{
-	private final class Inner extends A {
-		int X = 0;
-		private Inner(int i) {
-			super(i);
-		}
-		void f(){
-		}
-	}
-	A(int i){
-	}
-	void f(){
-		new Inner(1);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test8_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test8_in.java
deleted file mode 100644
index 76a1c72..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test8_in.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-//private, nonstatic, final
-class A{
-	A(int i){
-	}
-	void f(){
-		new A(1){
-			void f(){
-				x();
-			}
-		};
-	}
-	void x(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test8_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test8_out.java
deleted file mode 100644
index c07a000..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test8_out.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package p;
-//private, nonstatic, final
-class A{
-	private final class Inner extends A {
-		private Inner(int i) {
-			super(i);
-		}
-		void f(){
-			x();
-		}
-	}
-	A(int i){
-	}
-	void f(){
-		new Inner(1);
-	}
-	void x(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test9_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test9_in.java
deleted file mode 100644
index 5c55e59..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test9_in.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-//private, nonstatic, final
-class A{
-	int y;
-	A(int i){
-	}
-	void f(){
-		new A(1){
-			void f(){
-				y= 0;
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test9_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test9_out.java
deleted file mode 100644
index fdf593c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test9_out.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package p;
-//private, nonstatic, final
-class A{
-	private final class Inner extends A {
-		private Inner(int i) {
-			super(i);
-		}
-		void f(){
-			y= 0;
-		}
-	}
-	int y;
-	A(int i){
-	}
-	void f(){
-		new Inner(1);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/cannotConvert/A_testFail0.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/cannotConvert/A_testFail0.java
deleted file mode 100644
index c4f269c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/cannotConvert/A_testFail0.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-//references a local type
-class A{
-    void f(){
-        class Local{}
-        new A(){
-            Object x= new Local();
-        };
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/cannotConvert/A_testFail1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/cannotConvert/A_testFail1.java
deleted file mode 100644
index 841b262..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/cannotConvert/A_testFail1.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class A{
-    class Inner{}
-    void f(){
-        new A(){
-            Object x= new Object();
-        };
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/cannotConvert/A_testFail2.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/cannotConvert/A_testFail2.java
deleted file mode 100644
index 9fc6c63..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/cannotConvert/A_testFail2.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-class Inner{
-	class InnerInner{
-	    void f(){
-	        new Object(){
-	        };
-	    }
-	}    
-}
\ 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_test10_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test10_in.java
deleted file mode 100644
index bb77191..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test10_in.java
+++ /dev/null
@@ -1,10 +0,0 @@
-// 8, 17 -> 8, 22
-package p;
-
-class A {
-	void foob() {
-		int c= 2 + 2 * 4 + (28 + 2 + 2) + 1;
-
-		int e= (2 + 2) * 3 * 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test10_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test10_out.java
deleted file mode 100644
index f3c9fe3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test10_out.java
+++ /dev/null
@@ -1,11 +0,0 @@
-// 8, 17 -> 8, 22
-package p;
-
-class A {
-	private static final int CONSTANT= 2 + 2;
-	void foob() {
-		int c= 2 + 2 * 4 + (28 + CONSTANT) + 1;
-
-		int e= (CONSTANT) * 3 * 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test11_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test11_in.java
deleted file mode 100644
index 751b6aa..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test11_in.java
+++ /dev/null
@@ -1,12 +0,0 @@
-// 10, 37 -> 10, 43
-package p;
-
-class A {
-	void foob() {
-
-		int c= 3 * (2 + 1) + 2 + 2 * 4 + 28;
-
-
-		int e= (2 + 2) * (27 + 2 * (2+2* 4+1*2));
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test11_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test11_out.java
deleted file mode 100644
index 67b999d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test11_out.java
+++ /dev/null
@@ -1,13 +0,0 @@
-// 10, 37 -> 10, 43
-package p;
-
-class A {
-	private static final int CONSTANT= 2+2* 4;
-	void foob() {
-
-		int c= 3 * (2 + 1) + CONSTANT + 28;
-
-
-		int e= (2 + 2) * (27 + 2 * (CONSTANT+1*2));
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test12_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test12_in.java
deleted file mode 100644
index 7481e13..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test12_in.java
+++ /dev/null
@@ -1,11 +0,0 @@
-// 9, 19 -> 9, 24
-package p;
-
-class A {
-	void foob() {
-		
-		int e= (2 + 2) * 3 * 1;
-		
-		int f= 5 *3*  1 *(1 + 1);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test12_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test12_out.java
deleted file mode 100644
index c4f8054..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test12_out.java
+++ /dev/null
@@ -1,12 +0,0 @@
-// 9, 19 -> 9, 24
-package p;
-
-class A {
-	private static final int CONSTANT= 3*  1;
-	void foob() {
-		
-		int e= (2 + 2) * CONSTANT;
-		
-		int f= 5 *CONSTANT *(1 + 1);
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test13_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test13_in.java
deleted file mode 100644
index 08cf97c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test13_in.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;	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test13_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test13_out.java
deleted file mode 100644
index a057491..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test13_out.java
+++ /dev/null
@@ -1,13 +0,0 @@
-//9, 16 -> 9, 28   AllowLoadtime == true
-package p;
-
-class S {
-	public static S instance= new S();
-	private static final int CONSTANT= instance.f();
-	
-	int f(){
-
-		int v= CONSTANT;
-		return 0;	
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test14_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test14_in.java
deleted file mode 100644
index 5ac843b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test14_in.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/ExtractConstant/canExtract/A_test14_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test14_out.java
deleted file mode 100644
index a53a057..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test14_out.java
+++ /dev/null
@@ -1,14 +0,0 @@
-//10, 28 -> 10, 44   AllowLoadtime == true
-package p;
-
-class S {
-	public static S instance= new S();
-	private static final int CONSTANT= S.instance.s + 1;
-
-	int s;
-
-	int f() {
-		System.out.println(CONSTANT);
-		return 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test15_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test15_in.java
deleted file mode 100644
index 71a125d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test15_in.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//5, 16 -> 5, 25   AllowLoadtime == false
-package p;
-class A {
-	void f() {
-		int i= getFred();
-	}
-	static int getFred(){
-		return 5;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test15_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test15_out.java
deleted file mode 100644
index e42902f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test15_out.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//5, 16 -> 5, 25   AllowLoadtime == false
-package p;
-class A {
-	private static final int CONSTANT= getFred();
-	void f() {
-		int i= CONSTANT;
-	}
-	static int getFred(){
-		return 5;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test16_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test16_in.java
deleted file mode 100644
index 2df41b7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test16_in.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//5, 20 -> 5, 27   AllowLoadtime == false
-package p;
-class A {
-	void f() {
-		boolean i= isRed();
-	}
-	static boolean isRed(){
-		return 5==1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test16_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test16_out.java
deleted file mode 100644
index 1f2d557..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test16_out.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//5, 20 -> 5, 27   AllowLoadtime == false
-package p;
-class A {
-	private static final boolean CONSTANT= isRed();
-	void f() {
-		boolean i= CONSTANT;
-	}
-	static boolean isRed(){
-		return 5==1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test17_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test17_in.java
deleted file mode 100644
index 4c84790..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test17_in.java
+++ /dev/null
@@ -1,10 +0,0 @@
-//5, 16 -> 5, 35   AllowLoadtime == false
-package p;
-class A {
-	void f() {
-		int i= getYetAnotherFred();
-	}
-	static int getYetAnotherFred(){
-		return 5;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test17_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test17_out.java
deleted file mode 100644
index 5aa9959..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test17_out.java
+++ /dev/null
@@ -1,11 +0,0 @@
-//5, 16 -> 5, 35   AllowLoadtime == false
-package p;
-class A {
-	private static final int CONSTANT= getYetAnotherFred();
-	void f() {
-		int i= CONSTANT;
-	}
-	static int getYetAnotherFred(){
-		return 5;
-	}
-}
\ 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/canExtract/A_test9_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test9_in.java
deleted file mode 100644
index 87db857..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test9_in.java
+++ /dev/null
@@ -1,10 +0,0 @@
-// 6, 24 -> 6, 29
-package p;
-
-class A {
-	void foob() {
-		int a= 2 * 3 + 3 + 1;
-
-		int b= (3 + 1) + 1*1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test9_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test9_out.java
deleted file mode 100644
index de08992..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test9_out.java
+++ /dev/null
@@ -1,11 +0,0 @@
-// 6, 24 -> 6, 29
-package p;
-
-class A {
-	private static final int CONSTANT= 3 + 1;
-	void foob() {
-		int a= 2 * 3 + CONSTANT;
-
-		int b= (CONSTANT) + 1*1;
-	}
-}
\ 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 5ebd210..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;
-
-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/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 97b1726..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test72/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-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/test78/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test78/in/A.java
deleted file mode 100644
index 249d15e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test78/in/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A {
-    public A m(A foo) {
-        foo.m(foo);
-        return null;
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test78/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test78/out/A.java
deleted file mode 100644
index 8de951a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test78/out/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A implements I {
-    public I m(I foo) {
-        foo.m(foo);
-        return null;
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test78/out/I.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test78/out/I.java
deleted file mode 100644
index 02b547f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractInterface/test78/out/I.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-/** typecomment template*/
-interface I {
-	I m(I foo);
-}
\ 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 d70a00b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-public class A{
-	public void foo() {
-		int i= 0;
-		int y= 0;
-		
-		int system= 0;
-		
-		System.out.println(i + y);
-
-		System.out.println("Dirk");
-	}
-}
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/parameterName_in/A_test900.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/parameterName_in/A_test900.java
deleted file mode 100644
index 29b4951..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/parameterName_in/A_test900.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package parameterName_in;
-
-public class A_test900 {
-	public void foo() {
-		int i= 0;
-		int y= 0;
-		
-		/*]*/System.out.println(i + y);/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/parameterName_in/A_test901.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/parameterName_in/A_test901.java
deleted file mode 100644
index 64d1eca..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/parameterName_in/A_test901.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package parameterName_in;
-
-public class A_test901 {
-	public void foo() {
-		int i= 0;
-		int y= 0;
-		
-		/*]*/System.out.println(i + y);/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/parameterName_in/A_test902.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/parameterName_in/A_test902.java
deleted file mode 100644
index 11fb646..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/parameterName_in/A_test902.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package parameterName_in;
-
-public class A_test902 {
-	public void foo() {
-		int i= 0;
-		int y= 0;
-		
-		/*]*/System.out.println(i + y);/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/parameterName_in/A_test903.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/parameterName_in/A_test903.java
deleted file mode 100644
index b9c2fce..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/parameterName_in/A_test903.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package parameterName_in;
-
-public class A_test903 {
-	public void foo() {
-		int i= 0;
-		float y= 0;
-		
-		/*]*/System.out.println(i + y);/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/parameterName_in/A_test904.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/parameterName_in/A_test904.java
deleted file mode 100644
index 0c98712..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/parameterName_in/A_test904.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package parameterName_in;
-
-public class A_test904 {
-	public void foo() {
-		int i= 0;
-		float y= 0;
-		
-		/*]*/System.out.println(i + y);/*[*/
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/parameterName_out/A_test903.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/parameterName_out/A_test903.java
deleted file mode 100644
index d56266f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/parameterName_out/A_test903.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package parameterName_out;
-
-public class A_test903 {
-	public void foo() {
-		int i= 0;
-		float y= 0;
-		
-		/*]*/extracted(i, y);/*[*/
-	}
-	protected void extracted(int xxx, float yyyy) {
-		System.out.println(xxx + yyyy);
-	}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/parameterName_out/A_test904.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/parameterName_out/A_test904.java
deleted file mode 100644
index 39f624d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/parameterName_out/A_test904.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package parameterName_out;
-
-public class A_test904 {
-	public void foo() {
-		int i= 0;
-		float y= 0;
-		
-		/*]*/extracted(y, i);/*[*/
-	}
-	protected void extracted(float zz, int xx) {
-		System.out.println(xx + zz);
-	}
-}
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 e09402c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/B.java
+++ /dev/null
@@ -1,5 +0,0 @@
-public class B {
-	public void foo() {
-		System.out.println("Eclipse");
-	}
-}
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/E.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/E.java
deleted file mode 100644
index 4087d98..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/E.java
+++ /dev/null
@@ -1,6 +0,0 @@
-public class E {
-	public void main() {
-		B b= null;
-		b.foo();
-	}
-}
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/receiver_in/TestExpressionOneImplicitReceiver.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_in/TestExpressionOneImplicitReceiver.java
deleted file mode 100644
index 0097b0d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_in/TestExpressionOneImplicitReceiver.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package receiver_in;
-
-public class TestExpressionOneImplicitReceiver {
-	private class ImplicitReceiver {
-		public void foo() {
-			bar();
-		}
-		public void bar() {
-		}
-	}
-
-	public void main() {
-		/*]*/getObject().foo();/*[*/
-	}
-	
-	private ImplicitReceiver getObject() {
-		return new ImplicitReceiver();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_in/TestExpressionTwoImplicitReceiver.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_in/TestExpressionTwoImplicitReceiver.java
deleted file mode 100644
index 82362c0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_in/TestExpressionTwoImplicitReceiver.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package receiver_in;
-
-public class TestExpressionTwoImplicitReceiver {
-	private class ImplicitReceiver {
-		public void foo() {
-			bar();
-			bar();
-		}
-		public void bar() {
-		}
-	}
-
-	public void main() {
-		/*]*/getObject().foo();/*[*/
-	}
-	
-	private ImplicitReceiver getObject() {
-		return new ImplicitReceiver();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_in/TestExpressionZeroImplicitReceiver.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_in/TestExpressionZeroImplicitReceiver.java
deleted file mode 100644
index 92fbe6c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_in/TestExpressionZeroImplicitReceiver.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package receiver_in;
-
-public class TestExpressionZeroImplicitReceiver {
-	private class ImplicitReceiver {
-		public void foo() {
-			System.out.println("Eclipse");
-		}
-	}
-
-	public void main() {
-		/*]*/getObject().foo();/*[*/
-	}
-	
-	private ImplicitReceiver getObject() {
-		return new ImplicitReceiver();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_in/TestNameImplicitReceiver.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_in/TestNameImplicitReceiver.java
deleted file mode 100644
index 8c9a71e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_in/TestNameImplicitReceiver.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package receiver_in;
-
-public class TestNameImplicitReceiver {
-	private class ImplicitReceiver {
-		public void foo() {
-			bar();
-		}
-		public void bar() {
-		}
-	}
-	
-	public void main() {
-		ImplicitReceiver a= new ImplicitReceiver();
-		
-		/*]*/a.foo();/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_in/TestNameThisReceiver.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_in/TestNameThisReceiver.java
deleted file mode 100644
index c84f1c8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_in/TestNameThisReceiver.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package receiver_in;
-
-public class TestNameThisReceiver {
-	class ThisReceiver {
-		public void foo() {
-			this.bar();
-		}
-		public void bar() {
-		}
-	}
-
-	public void main() {
-		ThisReceiver a= new ThisReceiver();
-		
-		/*]*/a.foo();/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_in/TestNoImplicitReceiver.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_in/TestNoImplicitReceiver.java
deleted file mode 100644
index ee31fa1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_in/TestNoImplicitReceiver.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package receiver_in;
-
-public class TestNoImplicitReceiver {
-	class NoImplicitReceiver {
-		public void foo() {
-			System.out.println("Eclipse");
-		}
-	}
-
-	public void main() {
-		NoImplicitReceiver a= new NoImplicitReceiver();
-		
-		/*]*/a.foo();/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_in/TestReceiverWithStatic.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_in/TestReceiverWithStatic.java
deleted file mode 100644
index 9630755..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_in/TestReceiverWithStatic.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package receiver_in;
-
-public class TestReceiverWithStatic {
-	private static class ThisReceiver {
-		public void foo() {
-			bar();
-			baz();
-		}
-		public void bar() {
-		}
-		public static void baz() {
-		}
-	}
-
-	public void main() {
-		ThisReceiver a= new ThisReceiver();
-		
-		/*]*/a.foo();/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_in/TestStaticReceiver.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_in/TestStaticReceiver.java
deleted file mode 100644
index 6726f53..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_in/TestStaticReceiver.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package receiver_in;
-
-public class TestStaticReceiver {
-	private static class StaticReceiver {
-		public static void foo() {
-			bar();
-		}
-		public static void bar() {
-		}
-	}
-
-	public void main() {
-		/*]*/StaticReceiver.foo();/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_out/TestExpressionOneImplicitReceiver.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_out/TestExpressionOneImplicitReceiver.java
deleted file mode 100644
index f4ea1be..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_out/TestExpressionOneImplicitReceiver.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package receiver_out;
-
-public class TestExpressionOneImplicitReceiver {
-	private class ImplicitReceiver {
-		public void foo() {
-			bar();
-		}
-		public void bar() {
-		}
-	}
-
-	public void main() {
-		/*]*/getObject().bar();/*[*/
-	}
-	
-	private ImplicitReceiver getObject() {
-		return new ImplicitReceiver();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_out/TestExpressionTwoImplicitReceiver.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_out/TestExpressionTwoImplicitReceiver.java
deleted file mode 100644
index aab16a1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_out/TestExpressionTwoImplicitReceiver.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package receiver_out;
-
-public class TestExpressionTwoImplicitReceiver {
-	private class ImplicitReceiver {
-		public void foo() {
-			bar();
-			bar();
-		}
-		public void bar() {
-		}
-	}
-
-	public void main() {
-		ImplicitReceiver r = getObject();
-		/*]*/r.bar();
-		r.bar();/*[*/
-	}
-	
-	private ImplicitReceiver getObject() {
-		return new ImplicitReceiver();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_out/TestExpressionZeroImplicitReceiver.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_out/TestExpressionZeroImplicitReceiver.java
deleted file mode 100644
index 24652ea..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_out/TestExpressionZeroImplicitReceiver.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package receiver_out;
-
-public class TestExpressionZeroImplicitReceiver {
-	private class ImplicitReceiver {
-		public void foo() {
-			System.out.println("Eclipse");
-		}
-	}
-
-	public void main() {
-		ImplicitReceiver r = getObject();
-		/*]*/System.out.println("Eclipse");/*[*/
-	}
-	
-	private ImplicitReceiver getObject() {
-		return new ImplicitReceiver();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_out/TestNameImplicitReceiver.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_out/TestNameImplicitReceiver.java
deleted file mode 100644
index e05974f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_out/TestNameImplicitReceiver.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package receiver_out;
-
-public class TestNameImplicitReceiver {
-	private class ImplicitReceiver {
-		public void foo() {
-			bar();
-		}
-		public void bar() {
-		}
-	}
-	
-	public void main() {
-		ImplicitReceiver a= new ImplicitReceiver();
-		
-		/*]*/a.bar();/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_out/TestNameThisReceiver.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_out/TestNameThisReceiver.java
deleted file mode 100644
index f2c7a9a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_out/TestNameThisReceiver.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package receiver_out;
-
-public class TestNameThisReceiver {
-	class ThisReceiver {
-		public void foo() {
-			this.bar();
-		}
-		public void bar() {
-		}
-	}
-
-	public void main() {
-		ThisReceiver a= new ThisReceiver();
-		
-		/*]*/a.bar();/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_out/TestNoImplicitReceiver.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_out/TestNoImplicitReceiver.java
deleted file mode 100644
index 11db3ea..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_out/TestNoImplicitReceiver.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package receiver_out;
-
-public class TestNoImplicitReceiver {
-	class NoImplicitReceiver {
-		public void foo() {
-			System.out.println("Eclipse");
-		}
-	}
-
-	public void main() {
-		NoImplicitReceiver a= new NoImplicitReceiver();
-		
-		/*]*/System.out.println("Eclipse");/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_out/TestReceiverWithStatic.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_out/TestReceiverWithStatic.java
deleted file mode 100644
index 4c58c97..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_out/TestReceiverWithStatic.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package receiver_out;
-
-public class TestReceiverWithStatic {
-	private static class ThisReceiver {
-		public void foo() {
-			bar();
-			baz();
-		}
-		public void bar() {
-		}
-		public static void baz() {
-		}
-	}
-
-	public void main() {
-		ThisReceiver a= new ThisReceiver();
-		
-		/*]*/a.bar();
-		ThisReceiver.baz();/*[*/
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_out/TestStaticReceiver.java b/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_out/TestStaticReceiver.java
deleted file mode 100644
index 1faf0b9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/InlineMethodWorkspace/TestCases/receiver_out/TestStaticReceiver.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package receiver_out;
-
-public class TestStaticReceiver {
-	private static class StaticReceiver {
-		public static void foo() {
-			bar();
-		}
-		public static void bar() {
-		}
-	}
-
-	public void main() {
-		/*]*/StaticReceiver.bar();/*[*/
-	}
-}
\ No newline at end of file
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/test23/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test23/in/A.java
deleted file mode 100644
index d92e2fe..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test23/in/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-public class A {
-    Inner inner= new Inner();
-    static class Inner{
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test23/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test23/out/A.java
deleted file mode 100644
index 2477ba3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test23/out/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class A {
-    Inner inner= new Inner();
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test23/out/Inner.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test23/out/Inner.java
deleted file mode 100644
index 21ee4d8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInnerToTopLevel/test23/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/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/MultiMove/test3/in/p1/Outer.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test3/in/p1/Outer.java
deleted file mode 100644
index 3a14cd8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test3/in/p1/Outer.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p1;
-public class Outer {
-    public class Inner1{}
-    public class Inner2{}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test3/in/p1/empty.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test3/in/p1/empty.txt
deleted file mode 100644
index e69de29..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test3/in/p1/empty.txt
+++ /dev/null
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test3/in/p2/empty.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test3/in/p2/empty.txt
deleted file mode 100644
index e69de29..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test3/in/p2/empty.txt
+++ /dev/null
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test3/in/p3/Test.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test3/in/p3/Test.java
deleted file mode 100644
index e2d357d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test3/in/p3/Test.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p3;
-
-import p1.Outer;
-import p1.Outer.Inner1;
-import p1.Outer.Inner2;
-
-public class Test {
-    Inner1 s;
-    Inner2 i;
-    Outer v;
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test3/out/p1/empty.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test3/out/p1/empty.txt
deleted file mode 100644
index e69de29..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test3/out/p1/empty.txt
+++ /dev/null
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test3/out/p2/Outer.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test3/out/p2/Outer.java
deleted file mode 100644
index 9af3bf3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test3/out/p2/Outer.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p2;
-public class Outer {
-    public class Inner1{}
-    public class Inner2{}
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test3/out/p2/empty.txt b/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test3/out/p2/empty.txt
deleted file mode 100644
index e69de29..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test3/out/p2/empty.txt
+++ /dev/null
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test3/out/p3/Test.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test3/out/p3/Test.java
deleted file mode 100644
index 2038873..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/MultiMove/test3/out/p3/Test.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p3;
-
-import p2.Outer;
-import p2.Outer.Inner1;
-import p2.Outer.Inner2;
-
-public class Test {
-    Inner1 s;
-    Inner2 i;
-    Outer v;
-}
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/PromoteTempToField/canPromote/A_test0_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test0_in.java
deleted file mode 100644
index d24ca4b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test0_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//initialize in method
-class A{
-	void f(){
-		int i= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test0_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test0_out.java
deleted file mode 100644
index 51681b6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test0_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-//initialize in method
-class A{
-	private int i;
-	void f(){
-		i= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test10_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test10_in.java
deleted file mode 100644
index 11d4b3d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test10_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-//final
-class A{
-	A(){
-	}
-	void f(){
-		int i= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test10_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test10_out.java
deleted file mode 100644
index e6d864f..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test10_out.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-//final
-class A{
-	private final int i;
-	A(){
-		i= 0;
-	}
-	void f(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test11_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test11_in.java
deleted file mode 100644
index 898e5c3..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test11_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-//public
-class A{
-	A(){
-	}
-	void f(){
-		int i= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test11_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test11_out.java
deleted file mode 100644
index fdd2d2c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test11_out.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-//public
-class A{
-	public int i;
-	A(){
-	}
-	void f(){
-		i= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test12_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test12_in.java
deleted file mode 100644
index 0e48d3b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test12_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//initialize in method
-class A{
-	static void f(){
-		int i= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test12_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test12_out.java
deleted file mode 100644
index cca464e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test12_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-//initialize in method
-class A{
-	private static int i;
-	static void f(){
-		i= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test13_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test13_in.java
deleted file mode 100644
index 1e2d00e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test13_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//initialize in method
-class A{
-	static void f(){
-		int i= 0, j= i;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test13_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test13_out.java
deleted file mode 100644
index 689fea9..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test13_out.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-//initialize in method
-class A{
-	private static int i;
-	static void f(){
-		i= 0;
-		int j= i;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test14_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test14_in.java
deleted file mode 100644
index b71c0d8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test14_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//initialize in method
-class A{
-	static void f(){
-		int j= 0, i= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test14_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test14_out.java
deleted file mode 100644
index 728d120..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test14_out.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-//initialize in method
-class A{
-	private static int i;
-	static void f(){
-		int j= 0;
-		i= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test15_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test15_in.java
deleted file mode 100644
index 5eefe8e..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test15_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//initialize in method
-class A{
-	static void f(){
-		int j= 0, i= 0, k;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test15_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test15_out.java
deleted file mode 100644
index d7491f5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test15_out.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-//initialize in method
-class A{
-	private static int i;
-	static void f(){
-		int j= 0;
-		i= 0;
-		int k;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test16_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test16_in.java
deleted file mode 100644
index edcbba6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test16_in.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-class A{
-	A(){
-		this(5);
-	}
-	A(int u){
-		super();
-	}
-	void f(){
-		int i= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test16_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test16_out.java
deleted file mode 100644
index 3362abc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test16_out.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package p;
-class A{
-	private int i;
-	A(){
-		this(5);
-	}
-	A(int u){
-		super();
-		i= 0;
-	}
-	void f(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test17_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test17_in.java
deleted file mode 100644
index 3cce837..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test17_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-    void f(){
-        int i;
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test17_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test17_out.java
deleted file mode 100644
index 97c1cd6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test17_out.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	private int i;
-    void f(){
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test1_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test1_in.java
deleted file mode 100644
index 5e7ae68..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test1_in.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//initialize in declaration
-class A{
-	void f(){
-		int i= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test1_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test1_out.java
deleted file mode 100644
index b867725..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test1_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//initialize in declaration
-class A{
-	private int i= 0;
-	void f(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test2_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test2_in.java
deleted file mode 100644
index 25302ce..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test2_in.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-//initialize in constructor
-class A{
-	A(){
-	}
-	void f(){
-		int i= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test2_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test2_out.java
deleted file mode 100644
index 7aeefce..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test2_out.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-//initialize in constructor
-class A{
-	private int i;
-	A(){
-		i= 0;
-	}
-	void f(){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test3_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test3_in.java
deleted file mode 100644
index b6bed8b..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test3_in.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-//initialize in constructors
-class A{
-	A(){
-	}
-	A(int e){
-	}
-	void f(){
-		int i= 0;
-		i++;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test3_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test3_out.java
deleted file mode 100644
index f610888..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test3_out.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package p;
-//initialize in constructors
-class A{
-	private int i;
-	A(){
-		i= 0;
-	}
-	A(int e){
-		i= 0;
-	}
-	void f(){
-		i++;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test4_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test4_in.java
deleted file mode 100644
index 13826ee..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test4_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-//initialize in constructors
-class A{
-	void f(){
-		int i= 0;
-		i++;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test4_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test4_out.java
deleted file mode 100644
index 77853fa..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test4_out.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-//initialize in constructors
-class A{
-	private int i;
-	A() {
-		i= 0;
-	}
-	void f(){
-		i++;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test5_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test5_in.java
deleted file mode 100644
index c75b1d4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test5_in.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package p;
-class A{
-	void f(){
-		new Object(){
-			void fx(){
-				int i= 0;
-			}	
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test5_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test5_out.java
deleted file mode 100644
index bb46030..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test5_out.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A{
-	void f(){
-		new Object(){
-			private int i;
-			void fx(){
-				i= 0;
-			}	
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test6_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test6_in.java
deleted file mode 100644
index 8a2eb40..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test6_in.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A{
-	void f(){
-		new Object(){
-			void fx(){
-				int i= s();
-			}
-			int s(){return 3;}
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test6_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test6_out.java
deleted file mode 100644
index 1a269a4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test6_out.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-class A{
-	void f(){
-		new Object(){
-			private int i= s();
-			void fx(){
-			}
-			int s(){return 3;}
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test7_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test7_in.java
deleted file mode 100644
index 95bd5da..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test7_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void f(){
-		int i= 0, j= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test7_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test7_out.java
deleted file mode 100644
index f5985e2..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test7_out.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	private int i= 0;
-	void f(){
-		int j= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test8_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test8_in.java
deleted file mode 100644
index 95bd5da..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test8_in.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void f(){
-		int i= 0, j= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test8_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test8_out.java
deleted file mode 100644
index 6313f17..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test8_out.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	private int i;
-	void f(){
-		i= 0;
-		int j= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test9_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test9_in.java
deleted file mode 100644
index 871629c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test9_in.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-//renaming
-class A{
-	void f(){
-		int i= 0;
-		i++;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test9_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test9_out.java
deleted file mode 100644
index 3615690..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/canPromote/A_test9_out.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-//renaming
-class A{
-	private int field;
-	void f(){
-		field= 0;
-		field++;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/cannotPromote/A_testFail0.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/cannotPromote/A_testFail0.java
deleted file mode 100644
index 5017152..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/cannotPromote/A_testFail0.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package p;
-class A{
-	void f(int i){
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/cannotPromote/A_testFail1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/cannotPromote/A_testFail1.java
deleted file mode 100644
index 1e2327d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/cannotPromote/A_testFail1.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-class A{
-	void f(){
-		try{
-		} catch (Throwable e){
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/cannotPromote/A_testFail2.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/cannotPromote/A_testFail2.java
deleted file mode 100644
index 8e18a37..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/cannotPromote/A_testFail2.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	void f(){
-		class Local{}
-		Local l;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/cannotPromote/A_testFail3.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/cannotPromote/A_testFail3.java
deleted file mode 100644
index cb12cb8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/cannotPromote/A_testFail3.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-class A{
-	void f(){
-		class Local{}
-		Object l= new Local();
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/cannotPromote/A_testFail4.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/cannotPromote/A_testFail4.java
deleted file mode 100644
index 6beaca7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/cannotPromote/A_testFail4.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-//can't init in constructor - name clash
-class A{
-	A(int i){
-	}
-	void f(){
-		int i= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/cannotPromote/A_testFail5.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/cannotPromote/A_testFail5.java
deleted file mode 100644
index 9e9244c..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/cannotPromote/A_testFail5.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-//name clash
-class A{
-	Object i;
-	void f(){
-		int i= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/cannotPromote/A_testFail6.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/cannotPromote/A_testFail6.java
deleted file mode 100644
index 2830bdf..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/cannotPromote/A_testFail6.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package p;
-class A{
-	void f(){
-		int j=0, i= j;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/testEnablement/A_testEnablement0.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/testEnablement/A_testEnablement0.java
deleted file mode 100644
index 3c97977..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/testEnablement/A_testEnablement0.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//disabled: none
-class A{
-	void f(){
-		int i= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/testEnablement/A_testEnablement1.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/testEnablement/A_testEnablement1.java
deleted file mode 100644
index b55c0fb..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/testEnablement/A_testEnablement1.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//disabled: final, method, field, construcotr
-class A{
-	void f(){
-		int i;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/testEnablement/A_testEnablement2.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/testEnablement/A_testEnablement2.java
deleted file mode 100644
index 19b4cf7..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/testEnablement/A_testEnablement2.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//disabled: method, field, constructor, final
-class A{
-	void f(){
-		int i;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/testEnablement/A_testEnablement3.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/testEnablement/A_testEnablement3.java
deleted file mode 100644
index 24ebd6d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/testEnablement/A_testEnablement3.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package p;
-//disabled: final
-class A{
-	void f(){
-		int i= 0;
-		i= 1;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/testEnablement/A_testEnablement4.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/testEnablement/A_testEnablement4.java
deleted file mode 100644
index 2ff4177..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/testEnablement/A_testEnablement4.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//disabled: constructor
-class A{
-	A(){
-		int i= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/testEnablement/A_testEnablement5.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/testEnablement/A_testEnablement5.java
deleted file mode 100644
index 02c6bc1..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/testEnablement/A_testEnablement5.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-//disabled: constructor
-class A{
-	void f(){
-		new Object(){
-			void g(){
-				int i= 0;
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/testEnablement/A_testEnablement6.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/testEnablement/A_testEnablement6.java
deleted file mode 100644
index b0eaeb0..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/testEnablement/A_testEnablement6.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-//disabled: constructor, field, method, final
-class A{
-	void f(){
-		new Object(){
-			void g(){
-				int i;
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/testEnablement/A_testEnablement7.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/testEnablement/A_testEnablement7.java
deleted file mode 100644
index 153f4dc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/testEnablement/A_testEnablement7.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package p;
-//disabled: construcotor
-class A{
-	static void f(){
-		int i= 0;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/testEnablement/A_testEnablement8.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/testEnablement/A_testEnablement8.java
deleted file mode 100644
index f90c359..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PromoteTempToField/testEnablement/A_testEnablement8.java
+++ /dev/null
@@ -1,6 +0,0 @@
-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/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/test60/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test60/in/A.java
deleted file mode 100644
index 05032ad..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test60/in/A.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-/**
- * p.A 
- * AA A
- */
-public class A{
-	A a;//A
-	String aa= "C:\\A.java";
-};
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test60/out/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test60/out/B.java
deleted file mode 100644
index 965f4b4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/RenameType/test60/out/B.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package p;
-/**
- * p.B 
- * AA B
- */
-public class B{
-	B a;//B
-	String aa= "C:\\B.java";
-};
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/testNew31/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew31/in/A.java
deleted file mode 100644
index a7589b4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew31/in/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-//change to B
-class B {
-} 
-class A extends B{
-    void f(){
-        A[] as= new A[0];
-        as[0].f();
-    }
-    void fz(){}
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew31/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew31/out/A.java
deleted file mode 100644
index a7589b4..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/UseSupertypeWherePossible/testNew31/out/A.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package p;
-//change to B
-class B {
-} 
-class A extends B{
-    void f(){
-        A[] as= new A[0];
-        as[0].f();
-    }
-    void fz(){}
-}
\ 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 b589407..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/AbstractSelectionTestCase.java
+++ /dev/null
@@ -1,127 +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.jface.text.ITextSelection;
-import org.eclipse.jface.text.TextSelection;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.NullProgressMonitor;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.JavaModelException;
-
-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;
-
-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;
-
-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= checkPreconditions(refactoring, 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;		
-		}
-	}
-	
-	protected RefactoringStatus checkPreconditions(Refactoring refactoring, IProgressMonitor pm) throws JavaModelException {
-		return refactoring.checkPreconditions(pm);
-	}
-}
\ 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 ceb3438..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/AllRefactoringTests.java
+++ /dev/null
@@ -1,62 +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());
-		suite.addTest(PromoteTempToFieldTests.suite());
-		suite.addTest(ConvertAnonymousToNestedTests.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 c57716d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ChangeSignatureTests.java
+++ /dev/null
@@ -1,825 +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.core.dom.Modifier;
-
-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.util.JdtFlags;
-
-import org.eclipse.jdt.ui.tests.refactoring.infra.SourceCompareUtil;
-
-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 = true;
-
-	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].setNewTypeName(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());
-		SourceCompareUtil.compare(newcu.getSource(), expectedFileContents);
-	}
-
-	private void helperDoAll(String methodName, 
-								String[] signature, 
-							  	ParameterInfo[] newParamInfos, 
-							  	int[] newIndices, 
-							  	String[] oldParamNames, 
-							  	String[] newParamNames, 
-							  	String[] newParameterTypeNames, 
-							  	int[] permutation, 
-							  	int newVisibility,
-							  	int[] deleted,
-							  	String returnTypeName)  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);
-		if (returnTypeName != null)
-			ref.setNewReturnTypeName(returnTypeName);
-		markAsDeleted(ref.getParameterInfos(), deleted);	
-		modifyInfos(ref.getParameterInfos(), newParamInfos, newIndices, oldParamNames, newParamNames, newParameterTypeNames, 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));
-		SourceCompareUtil.compare(newcu.getSource(), expectedFileContents);
-	}
-	
-	private void markAsDeleted(List list, int[] deleted) {
-		if (deleted == null)
-			return;
-		for (int i= 0; i < deleted.length; i++) {
-			((ParameterInfo)list.get(i)).markAsDeleted();
-		}
-	}
-
-	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());
-		SourceCompareUtil.compare(newcu.getSource(), expectedFileContents);
-	}
-
-	private void modifyInfos(List infos, ParameterInfo[] newParamInfos, int[] newIndices, String[] oldParamNames, String[] newParamNames, String[] newParamTypeNames, 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())));
-				if (newParamTypeNames != null)
-					infoI.setNewTypeName(newParamTypeNames[oldNameList.indexOf(infoI.getOldName())]);
-
-				ParameterInfo infoI1= (ParameterInfo)infos.get(permutation[i]);
-				infoI1.setNewName((String)newNameList.get(oldNameList.indexOf(infoI1.getOldName())));
-				if (newParamTypeNames != null)
-					infoI1.setNewTypeName(newParamTypeNames[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){
-			ParameterInfo[] newInfos= new  ParameterInfo[infos.size()];
-			for (int i= 0; i < permutation.length; i++) {
-				newInfos[i]= (ParameterInfo)infos.get(permutation[i]);
-			}
-			infos.clear();
-			for (int i= 0; i < newInfos.length; i++) {
-				infos.add(newInfos[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());
-	}
-	
-	private void helperDoAllFail(String methodName, 
-								String[] signature, 
-							  	ParameterInfo[] newParamInfos, 
-							  	int[] newIndices, 
-							  	String[] oldParamNames, 
-							  	String[] newParamNames, 
-							  	int[] permutation, 
-							  	int newVisibility,
-							  	int[] deleted,
-							  	int expectedSeverity)  throws Exception{
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), false, false);
-		IType classA= getType(cu, "A");
-		IMethod method = classA.getMethod(methodName, signature);
-		assertTrue("method does not exist", method.exists());
-		ChangeSignatureRefactoring ref= new ChangeSignatureRefactoring(method);
-		markAsDeleted(ref.getParameterInfos(), deleted);	
-		modifyInfos(ref.getParameterInfos(), newParamInfos, newIndices, oldParamNames, newParamNames, null, permutation);
-		if (newVisibility != JdtFlags.VISIBILITY_CODE_INVALID)
-			ref.setVisibility(newVisibility);
-		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 testFailDoAll5()throws Exception{
-		String[] signature= {"I"};
-		String[] newNames= null;
-		String[] newTypes= null;
-		String[] newDefaultValues= null;
-		ParameterInfo[] newParamInfo= createNewParamInfos(newTypes, newNames, newDefaultValues);
-		int[] newIndices= null;
-		
-		String[] oldParamNames= {"i", "j"};
-		String[] newParamNames= {"i", "j"};
-		int[] permutation= {0};
-		int[] deletedIndices= {0};
-		int newVisibility= Modifier.NONE;
-		int expectedSeverity= RefactoringStatus.ERROR;
-		helperDoAllFail("m", signature, newParamInfo, newIndices, oldParamNames, newParamNames, permutation, newVisibility, deletedIndices, expectedSeverity);
-	}	
-	
-	
-	//---------
-	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
-		int[] deleted= null;
-		String newReturnTypeName= null;
-		helperDoAll("A", signature, newParamInfo, newIndices, oldParamNames, newParamNames, null, permutation, newVisibility, deleted, newReturnTypeName);
-	}
-	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
-		int[] deleted= null;
-		String newReturnTypeName= null;
-		helperDoAll("A", signature, newParamInfo, newIndices, oldParamNames, newParamNames, null, permutation, newVisibility, deleted, newReturnTypeName);
-	}
-	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
-		int[] deleted= null;
-		String newReturnTypeName= null;
-		helperDoAll("A", signature, newParamInfo, newIndices, oldParamNames, newParamNames, null, permutation, newVisibility, deleted, newReturnTypeName);
-	}
-	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
-		int[] deleted= null;
-		String newReturnTypeName= null;
-		helperDoAll("A", signature, newParamInfo, newIndices, oldParamNames, newParamNames, null, permutation, newVisibility, deleted, newReturnTypeName);
-	}
-	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
-		int[] deleted= null;
-		String newReturnTypeName= null;
-		helperDoAll("A", signature, newParamInfo, newIndices, oldParamNames, newParamNames, null, permutation, newVisibility, deleted, newReturnTypeName);
-	}
-	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
-		int[] deleted= null;
-		String newReturnTypeName= null;
-		helperDoAll("A", signature, newParamInfo, newIndices, oldParamNames, newParamNames, null, permutation, newVisibility, deleted, newReturnTypeName);
-	}
-
-	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[] deletedIndices= null;
-		int newVisibility= JdtFlags.VISIBILITY_CODE_INVALID;//retain
-		String newReturnTypeName= null;
-		helperDoAll("m", signature, newParamInfo, newIndices, oldParamNames, newParamNames, null, permutation, newVisibility, deletedIndices, newReturnTypeName);
-	}	
-
-	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[] deletedIndices= null;
-		int newVisibility= Modifier.PUBLIC;
-		String newReturnTypeName= null;
-		helperDoAll("m", signature, newParamInfo, newIndices, oldParamNames, newParamNames, null, permutation, newVisibility, deletedIndices, newReturnTypeName);
-	}	
-
-	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[] deletedIndices= null;
-		int newVisibility= Modifier.PRIVATE;
-		String newReturnTypeName= null;
-		helperDoAll("m", signature, newParamInfo, newIndices, oldParamNames, newParamNames, null, permutation, newVisibility, deletedIndices, newReturnTypeName);
-	}	
-
-	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[] deletedIndices= null;
-		int newVisibility= Modifier.PROTECTED;
-		String newReturnTypeName= null;
-		helperDoAll("m", signature, newParamInfo, newIndices, oldParamNames, newParamNames, null, permutation, newVisibility, deletedIndices, newReturnTypeName);
-	}	
-
-	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[] deletedIndices= null;
-		int newVisibility= Modifier.PROTECTED;
-		String newReturnTypeName= null;
-		helperDoAll("m", signature, newParamInfo, newIndices, oldParamNames, newParamNames, null, permutation, newVisibility, deletedIndices, newReturnTypeName);
-	}	
-
-	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[] deletedIndices= null;
-		int newVisibility= Modifier.PUBLIC;
-		String newReturnTypeName= null;
-		helperDoAll("m", signature, newParamInfo, newIndices, oldParamNames, newParamNames, null, permutation, newVisibility, deletedIndices, newReturnTypeName);
-	}	
-
-	public void testAll40()throws Exception{
-		String[] signature= {"I", "Z"};
-		String[] newNames= {"x"};
-		String[] newTypes= {"int[]"};
-		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[] deletedIndices= null;
-		int newVisibility= Modifier.PUBLIC;
-		String newReturnTypeName= null;
-		helperDoAll("m", signature, newParamInfo, newIndices, oldParamNames, newParamNames, null, permutation, newVisibility, deletedIndices, newReturnTypeName);
-	}	
-
-	public void testAll41()throws Exception{
-		String[] signature= {"I"};
-		String[] newNames= null;
-		String[] newTypes= null;
-		String[] newDefaultValues= null;
-		ParameterInfo[] newParamInfo= createNewParamInfos(newTypes, newNames, newDefaultValues);
-		int[] newIndices= null;
-		
-		String[] oldParamNames= {"i"};
-		String[] newParamNames= {"i"};
-		int[] permutation= {0};
-		int[] deletedIndices= {0};
-		int newVisibility= Modifier.NONE;
-		String newReturnTypeName= null;
-		helperDoAll("m", signature, newParamInfo, newIndices, oldParamNames, newParamNames, null, permutation, newVisibility, deletedIndices, newReturnTypeName);
-	}	
-
-	public void testAll42()throws Exception{
-		String[] signature= {"I"};
-		String[] newNames= {"i"};
-		String[] newTypes= {"int"};
-		String[] newDefaultValues= {"0"};
-		ParameterInfo[] newParamInfo= createNewParamInfos(newTypes, newNames, newDefaultValues);
-		int[] newIndices= {1};
-		
-		String[] oldParamNames= {"i"};
-		String[] newParamNames= {"i"};
-		int[] permutation= {0, -1};
-		int[] deletedIndices= {0};
-		int newVisibility= Modifier.NONE;
-		String newReturnTypeName= null;
-		helperDoAll("m", signature, newParamInfo, newIndices, oldParamNames, newParamNames, null, permutation, newVisibility, deletedIndices, newReturnTypeName);
-	}	
-
-	public void testAll43()throws Exception{
-		String[] signature= {"I", "I"};
-		String[] newNames= null;
-		String[] newTypes= null;
-		String[] newDefaultValues= null;
-		ParameterInfo[] newParamInfo= createNewParamInfos(newTypes, newNames, newDefaultValues);
-		int[] newIndices= null;
-		
-		String[] oldParamNames= {"i", "j"};
-		String[] newParamNames= {"i", "j"};
-		int[] permutation= {1, 0};
-		int[] deletedIndices= {0};
-		int newVisibility= Modifier.NONE;
-		String newReturnTypeName= null;
-		helperDoAll("m", signature, newParamInfo, newIndices, oldParamNames, newParamNames, null, permutation, newVisibility, deletedIndices, newReturnTypeName);
-	}	
-
-	public void testAll44()throws Exception{
-		if (true){
-			printTestDisabledMessage("need to decide how to treat compile errors");
-			return;
-		}
-		String[] signature= {"I", "I"};
-		String[] newNames= null;
-		String[] newTypes= null;
-		String[] newDefaultValues= null;
-		ParameterInfo[] newParamInfo= createNewParamInfos(newTypes, newNames, newDefaultValues);
-		int[] newIndices= null;
-		
-		String[] oldParamNames= {"i", "j"};
-		String[] newParamNames= {"i", "j"};
-		int[] permutation= {0, 1};
-		int[] deletedIndices= {0};
-		int newVisibility= Modifier.NONE;
-		String newReturnTypeName= "boolean";
-		helperDoAll("m", signature, newParamInfo, newIndices, oldParamNames, newParamNames, null, permutation, newVisibility, deletedIndices, newReturnTypeName);
-	}	
-
-	public void testAll45()throws Exception{
-		if (true){
-			printTestDisabledMessage("need to decide how to treat compile errors");
-			return;
-		}
-		
-		String[] signature= {"I", "I"};
-		String[] newNames= null;
-		String[] newTypes= null;
-		String[] newDefaultValues= null;
-		ParameterInfo[] newParamInfo= createNewParamInfos(newTypes, newNames, newDefaultValues);
-		int[] newIndices= null;
-		
-		String[] oldParamNames= {"i", "j"};
-		String[] newParamNames= {"i", "j"};
-		String[] newParamTypeNames= {"int", "boolean"};
-		int[] permutation= {0, 1};
-		int[] deletedIndices= {0};
-		int newVisibility= Modifier.NONE;
-		String newReturnTypeName= null;
-		helperDoAll("m", signature, newParamInfo, newIndices, oldParamNames, newParamNames, newParamTypeNames, permutation, newVisibility, deletedIndices, newReturnTypeName);
-	}	
-}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ConvertAnonymousToNestedTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ConvertAnonymousToNestedTests.java
deleted file mode 100644
index 7ccc064..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ConvertAnonymousToNestedTests.java
+++ /dev/null
@@ -1,231 +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.ISourceRange;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.dom.Modifier;
-
-import org.eclipse.jdt.ui.tests.refactoring.infra.SourceCompareUtil;
-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.ConvertAnonymousToNestedRefactoring;
-
-public class ConvertAnonymousToNestedTests extends RefactoringTest {
-
-	private static final Class clazz= ConvertAnonymousToNestedTests.class;
-	private static final String REFACTORING_PATH= "ConvertAnonymousToNested/";
-
-	private Object fCompactPref; 
-		
-	public ConvertAnonymousToNestedTests(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 canConvert, boolean input){
-		String fileName= TEST_PATH_PREFIX + getRefactoringPath();
-		fileName += (canConvert ? "canConvert/": "cannotConvert/");
-		return fileName + getSimpleTestFileName(canConvert, input);
-	}
-	
-	private String getFailingTestFileName(){
-		return getTestFileName(false, false);
-	}
-	private String getPassingTestFileName(boolean input){
-		return getTestFileName(true, input);
-	}
-
-	protected ICompilationUnit createCUfromTestFile(IPackageFragment pack, boolean canConvert, boolean input) throws Exception {
-		return createCU(pack, getSimpleTestFileName(canConvert, input), getFileContents(getTestFileName(canConvert, 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 makeFinal, String className, int visibility) throws Exception{
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), true, true);
-		ISourceRange selection= TextRangeUtil.getSelection(cu, startLine, startColumn, endLine, endColumn);
-		ConvertAnonymousToNestedRefactoring ref= new ConvertAnonymousToNestedRefactoring(cu, selection.getOffset(), selection.getLength());
-
-		RefactoringStatus preconditionResult= ref.checkActivation(new NullProgressMonitor());	
-		if (preconditionResult.isOK())
-			preconditionResult= null;
-		assertEquals("activation was supposed to be successful", null, preconditionResult);
-
-		ref.setClassName(className);
-		ref.setDeclareFinal(makeFinal);
-		ref.setVisibility(visibility);
-		
-		if (preconditionResult == null)
-			preconditionResult= ref.checkInput(new NullProgressMonitor());
-		else	
-			preconditionResult.merge(ref.checkInput(new NullProgressMonitor()));
-		if (preconditionResult.isOK())
-			preconditionResult= null;
-		assertEquals("precondition was supposed to pass", null, preconditionResult);
-		
-		performChange(ref.createChange(new NullProgressMonitor()));
-		
-		IPackageFragment pack= (IPackageFragment)cu.getParent();
-		String newCuName= getSimpleTestFileName(true, true);
-		ICompilationUnit newcu= pack.getCompilationUnit(newCuName);
-		assertTrue(newCuName + " does not exist", newcu.exists());
-		SourceCompareUtil.compare(newcu.getSource(), getFileContents(getTestFileName(true, false)));
-	}
-	
-	private void failHelper1(int startLine, int startColumn, int endLine, int endColumn, boolean makeFinal, String className, int visibility, int expectedSeverity) throws Exception{
-		ICompilationUnit cu= createCUfromTestFile(getPackageP(), false, true);
-		ISourceRange selection= TextRangeUtil.getSelection(cu, startLine, startColumn, endLine, endColumn);
-		ConvertAnonymousToNestedRefactoring ref= new ConvertAnonymousToNestedRefactoring(cu, selection.getOffset(), selection.getLength());
-
-		RefactoringStatus preconditionResult= ref.checkActivation(new NullProgressMonitor());	
-		if (preconditionResult.isOK())
-			preconditionResult= null;
-		assertEquals("activation was supposed to be successful", null, preconditionResult);
-
-		ref.setClassName(className);
-		ref.setDeclareFinal(makeFinal);
-		ref.setVisibility(visibility);
-		
-		if (preconditionResult == null)
-			preconditionResult= ref.checkInput(new NullProgressMonitor());
-		else	
-			preconditionResult.merge(ref.checkInput(new NullProgressMonitor()));
-		if (preconditionResult.isOK())
-			preconditionResult= null;
-		assertNotNull("precondition was supposed to fail",preconditionResult);
-
-		assertEquals("incorrect severity:", expectedSeverity, preconditionResult.getSeverity());
-	}	
-
-	//--- TESTS
-
-	public void testFail0() throws Exception{
-		printTestDisabledMessage("corner case - local types");
-//		failHelper1(6, 14, 6, 16, true, "Inner", Modifier.PRIVATE, RefactoringStatus.FATAL);
-	}
-
-	public void testFail1() throws Exception{
-		failHelper1(5, 17, 5, 17, true, "Inner", Modifier.PRIVATE, RefactoringStatus.FATAL);
-	}
-
-	public void testFail2() throws Exception{
-		failHelper1(5, 17, 5, 18, true, "Inner", Modifier.PRIVATE, RefactoringStatus.FATAL);
-	}
-	
-	public void test0() throws Exception{
-		helper1(5, 17, 5, 17, true, "Inner", Modifier.PRIVATE);
-	}
-
-	public void test1() throws Exception{
-		helper1(5, 17, 5, 17, true, "Inner", Modifier.PUBLIC);
-	}
-
-	public void test2() throws Exception{
-		helper1(5, 17, 5, 17, true, "Inner", Modifier.PUBLIC);
-	}
-
-	public void test3() throws Exception{
-		helper1(5, 17, 5, 17, false, "Inner", Modifier.PUBLIC);
-	}
-
-	public void test4() throws Exception{
-		helper1(7, 17, 7, 17, true, "Inner", Modifier.PRIVATE);
-	}
-
-	public void test5() throws Exception{
-		helper1(7, 17, 7, 19, true, "Inner", Modifier.PRIVATE);
-	}
-
-	public void test6() throws Exception{
-		helper1(8, 13, 9, 14, true, "Inner", Modifier.PRIVATE);
-	}
-
-	public void test7() throws Exception{
-		helper1(7, 18, 7, 18, true, "Inner", Modifier.PRIVATE);
-	}
-
-	public void test8() throws Exception{
-		helper1(8, 14, 8, 15, true, "Inner", Modifier.PRIVATE);
-	}
-
-	public void test9() throws Exception{
-		helper1(8, 13, 8, 14, true, "Inner", Modifier.PRIVATE);
-	}
-
-	public void test10() throws Exception{
-		helper1(7, 15, 7, 16, true, "Inner", Modifier.PRIVATE);
-	}
-
-	public void test11() throws Exception{
-		helper1(5, 15, 5, 17, true, "Inner", Modifier.PRIVATE);
-	}
-
-	public void test12() throws Exception{
-		helper1(8, 9, 10, 10, true, "Inner", Modifier.PRIVATE);
-	}
-
-	public void test13() throws Exception{
-		helper1(6, 28, 6, 28, true, "Inner", Modifier.PRIVATE);
-	}
-
-	public void test14() throws Exception{
-		helper1(5, 13, 5, 23, true, "Inner", Modifier.PRIVATE);
-	}
-
-	public void test15() throws Exception{
-		helper1(7, 26, 7, 26, true, "Inner", Modifier.PRIVATE);
-	}
-
-	public void test16() throws Exception{
-		helper1(4, 10, 4, 26, true, "Inner", Modifier.PRIVATE);
-	}
-	
-	public void test17() throws Exception{
-		helper1(6, 16, 6, 19, true, "Inner", Modifier.PRIVATE);
-	}
-
-	public void test18() throws Exception{
-		helper1(5, 15, 5, 17, true, "Inner", Modifier.PRIVATE);
-	}
-
-	public void test19() throws Exception{
-		helper1(5, 12, 6, 21, true, "Inner", Modifier.PRIVATE);
-	}
-
-}
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 301f0da..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/CopyPackageChangeTest.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package org.eclipse.jdt.ui.tests.refactoring;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-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{
-		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 fbf5b96..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractConstantTests.java
+++ /dev/null
@@ -1,258 +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.SourceCompareUtil;
-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("constant 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());
-		SourceCompareUtil.compare(newcu.getSource(), getFileContents(getTestFileName(true, false)));
-	}
-	
-	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");	
-	}
-	
-	public void test9() throws Exception {
-		helper1(6, 24, 6, 29, true, true, "CONSTANT");	
-	}
-
-	public void test10() throws Exception {
-		helper1(8, 17, 8, 22, true, true, "CONSTANT");	
-	}			
-	
-	public void test11() throws Exception {
-		helper1(10, 37, 10, 43, true, true, "CONSTANT");	
-	}
-	
-	public void test12() throws Exception {
-		helper1(9, 19, 9, 24, true, true, "CONSTANT");	
-	}
-	
-	public void test13() throws Exception{
-		helper1(9, 16, 9, 28, true, true, "CONSTANT");		
-	}
-		
-	public void test14() throws Exception{
-		helper1(10, 28, 10, 44, true, true, "CONSTANT");
-	}	
-
-	public void test15() throws Exception{
-		helper1(5, 16, 5, 25, true, false, "CONSTANT", "FRED");
-	}	
-
-	public void test16() throws Exception{
-		helper1(5, 20, 5, 27, true, false, "CONSTANT", "RED");
-	}	
-
-	public void test17() throws Exception{
-		helper1(5, 16, 5, 35, true, false, "CONSTANT", "YET_ANOTHER_FRED");
-	}	
-	
-	// -- 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 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");	
-	}
-	
-	public void testFail15() throws Exception {
-		failHelper1(5, 10, 5, 13, true, true, "CONSTANT");	
-	}
-}
-
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 9d909bd..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractInterfaceTests.java
+++ /dev/null
@@ -1,500 +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.ui.tests.refactoring.infra.SourceCompareUtil;
-
-
-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());
-		SourceCompareUtil.compare(interfaceCu.getSource(), getFileContents(getOutputTestFileName(newInterfaceName)));
-	}
-	
-	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 test78() throws Exception{
-//		printTestDisabledMessage("bug 23705");		
-		String[] names= new String[]{"m"};
-		String[][] signatures= new String[][]{new String[]{"QA;"}};
-		validatePassingTest("A", new String[]{"A"}, "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 0de00f5..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractMethodTestSetup.java
+++ /dev/null
@@ -1,153 +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;
-	private IPackageFragment fParameterNamePackage;
-	
-	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);
-		fParameterNamePackage= getRoot().createPackageFragment("parameterName_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;
-	}	
-
-	public IPackageFragment getParameterNamePackage() {
-		return fParameterNamePackage;
-	}	}
-
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 f52c687..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractMethodTests.java
+++ /dev/null
@@ -1,1511 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-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.runtime.IProgressMonitor;
-
-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.internal.corext.refactoring.ParameterInfo;
-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.code.ExtractMethodRefactoring;
-import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
-
-import org.eclipse.jdt.ui.tests.refactoring.infra.TextRangeUtil;
-
-public class ExtractMethodTests extends AbstractSelectionTestCase {
-
-	private String[] fNewNames;
-	private int[] fNewOrder;
-
-	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 RefactoringStatus checkPreconditions(Refactoring refactoring, IProgressMonitor pm) throws JavaModelException {
-		RefactoringStatus result= refactoring.checkActivation(pm);
-		if (result.hasFatalError())
-			return result;
-		ExtractMethodRefactoring extract= (ExtractMethodRefactoring)refactoring;
-		List parameters= extract.getParameterInfos();
-		if (fNewNames != null && fNewNames.length > 0) {
-			for (int i= 0; i < fNewNames.length; i++) {
-				if (fNewNames[i] != null)
-					((ParameterInfo)parameters.get(i)).setNewName(fNewNames[i]);
-			}
-		}
-		if (fNewOrder != null && fNewOrder.length > 0) {
-			assertTrue(fNewOrder.length == parameters.size());
-			List current= new ArrayList(parameters);
-			for (int i= 0; i < fNewOrder.length; i++) {
-				parameters.set(fNewOrder[i], current.get(i));
-			}
-		}
-		result.merge(refactoring.checkInput(pm));
-		return result;
-	}
-	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 parameter name changes
-	
-	private void invalidParameterNameTest(String[] newNames) throws Exception {
-		fNewNames= newNames;
-		fNewOrder= null;
-		performTest(fgTestSetup.getParameterNamePackage(), "A", INVALID_SELECTION, null);
-	}
-	
-	private void parameterNameTest(String[] newNames, int[] newOrder) throws Exception {
-		fNewNames= newNames;
-		fNewOrder= newOrder;
-		performTest(fgTestSetup.getParameterNamePackage(), "A", COMPARE_WITH_OUTPUT, "parameterName_out");
-	}
-	
-	public void test900() throws Exception {
-		invalidParameterNameTest(new String[] {"y"});
-	}
-	
-	public void test901() throws Exception {
-		invalidParameterNameTest(new String[] {null, "i"});
-	}
-	
-	public void test902() throws Exception {
-		invalidParameterNameTest(new String[] {"System"});
-	}
-	
-	public void test903() throws Exception {
-		parameterNameTest(new String[] {"xxx", "yyyy"}, null);
-	}
-	
-	public void test904() throws Exception {
-		parameterNameTest(new String[] {"xx", "zz"}, new int[] {1, 0});
-	}
-	
-	//---- 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 6393fa6..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/InlineMethodTestSetup.java
+++ /dev/null
@@ -1,111 +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;
-	private IPackageFragment fReceiver;
-
-	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);
-		fReceiver= fRoot.createPackageFragment("receiver_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;
-	}
-	
-	public IPackageFragment getReceiverPackage() {
-		return fReceiver;
-	}
-}
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 62fbb2a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/InlineMethodTests.java
+++ /dev/null
@@ -1,335 +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.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);
-		InlineMethodRefactoring refactoring= InlineMethodRefactoring.create(
-			unit, selection[0], selection[1],
-			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();
-	}
-
-	/************************ Receiver Tests ********************************/
-		
-	private void performReceiverTest() throws Exception {
-		performTest(fgTestSetup.getReceiverPackage(), getName(), COMPARE_WITH_OUTPUT, "receiver_out");
-	}
-	
-	public void testNoImplicitReceiver() throws Exception {
-		performReceiverTest();
-	}
-
-	public void testNameThisReceiver() throws Exception {
-		performReceiverTest();
-	}
-
-	public void testNameImplicitReceiver() throws Exception {
-		performReceiverTest();
-	}
-
-	public void testExpressionZeroImplicitReceiver() throws Exception {
-		performReceiverTest();
-	}
-
-	public void testExpressionOneImplicitReceiver() throws Exception {
-		performReceiverTest();
-	}
-
-	public void testExpressionTwoImplicitReceiver() throws Exception {
-		performReceiverTest();
-	}
-
-	public void testStaticReceiver() throws Exception {
-		performReceiverTest();
-	}
-
-	public void testReceiverWithStatic() throws Exception {
-		performReceiverTest();
-	}
-}
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 afcac24..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MoveInnerToTopLevelTests.java
+++ /dev/null
@@ -1,332 +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 test23() throws Exception{
-//		printTestDisabledMessage("bug 24576 ");
-		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 24987fc..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MultiMoveTests.java
+++ /dev/null
@@ -1,218 +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");
-		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);
-	}
-
-	public void test3() 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 + "/Outer.java", "Outer.java");
-		createCu(packP3, getName() + inDir + p3Name + "/Test.java", "Test.java");
-		
-		String p2Name= "p2";
-		IPackageFragment packP2= createPackage(p2Name);
-		
-		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", 0, packP1.getChildren().length);
-		assertEquals("p2 files", 1, packP2.getChildren().length);
-		assertEquals("p1 files", 1, packP3.getChildren().length);
-				
-		String expectedSource= getFileContents(getRefactoringPath() + getName() + outDir + p2Name + "/Outer.java");
-		assertEquals("incorrect update of Outer", expectedSource, packP2.getCompilationUnit("Outer.java").getSource());
-		
-		expectedSource= getFileContents(getRefactoringPath() + getName() + outDir + p3Name + "/Test.java");
-		assertEquals("incorrect update of Test", expectedSource, packP3.getCompilationUnit("Test.java").getSource());
-		
-		delete(packP1);
-		delete(packP2);
-		delete(packP3);
-	}
-}
-
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/PromoteTempToFieldTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/PromoteTempToFieldTests.java
deleted file mode 100644
index 772134a..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/PromoteTempToFieldTests.java
+++ /dev/null
Binary files differ
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 20b60e6..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 a7ebb6b..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() == null);
-		assertEquals("setter rename enabled", expectedSetterRenameEnabled, ref.canEnableSetterRenaming() == null);
-		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 58b8082..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameTypeTests.java
+++ /dev/null
@@ -1,964 +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.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);
-		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");
-		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);
-		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 { 
-		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 {
-		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);
-		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);
-		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 test60() throws Exception {
-//		printTestDisabledMessage("test for bug 24740");
-		helper2_0("A", "A", "B", "B", true, true, true, true);
-	}
-		
-	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 bf7c4c8..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/UseSupertypeWherePossibleTests.java
+++ /dev/null
@@ -1,428 +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");
-	}
-
-	public void testNew31() 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/SourceCompareUtil.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/infra/SourceCompareUtil.java
deleted file mode 100644
index 1864f8d..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/infra/SourceCompareUtil.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package org.eclipse.jdt.ui.tests.refactoring.infra;
-
-import junit.framework.Assert;
-
-import org.eclipse.jdt.internal.corext.util.Strings;
-
-public class SourceCompareUtil extends Assert{
-
-    private SourceCompareUtil() {}
-
-	public static void compare(String actual, String expected) {
-		String[] actualCode= Strings.convertIntoLines(actual);
-		String[] expectedCode= Strings.convertIntoLines(expected);
-		if(expectedCode.length != actualCode.length){
-			assertEquals("Different number of lines (" + actualCode.length + " not " + expectedCode.length+")" , expected, actual);
-			return;
-		}
-		for (int i= 0; i < expectedCode.length; i++) {
-			assertEquals("Difference in line " + (i+1) , expectedCode[i], actualCode[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/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/ui/org/eclipse/jdt/ui/tests/quickfix/UnresolvedTypesQuickFixTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnresolvedTypesQuickFixTest.java
index 27e904d..a3b19bb 100644
--- 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
@@ -118,6 +118,7 @@
 		buf.append("\n");
 		buf.append("}\n");
 		assertEqualStringIgnoreDelim(newCU.getSource(), buf.toString());
+		JavaProjectHelper.performDummySearch();
 		newCU.delete(true, null);
 
 		newCUWizard= (NewCUCompletionUsingWizardProposal) proposals.get(2);
@@ -186,6 +187,7 @@
 		buf.append("\n");
 		buf.append("}\n");
 		assertEqualStringIgnoreDelim(newCU.getSource(), buf.toString());
+		JavaProjectHelper.performDummySearch();
 		newCU.delete(true, null);
 
 		newCUWizard= (NewCUCompletionUsingWizardProposal) proposals.get(2);
@@ -258,6 +260,7 @@
 		buf.append("\n");
 		buf.append("}\n");
 		assertEqualStringIgnoreDelim(newCU.getSource(), buf.toString());
+		JavaProjectHelper.performDummySearch();
 		newCU.delete(true, null);
 	}	
 		
@@ -329,6 +332,7 @@
 		buf.append("\n");
 		buf.append("}\n");
 		assertEqualStringIgnoreDelim(newCU.getSource(), buf.toString());
+		JavaProjectHelper.performDummySearch();
 		newCU.delete(true, null);
 
 		newCUWizard= (NewCUCompletionUsingWizardProposal) proposals.get(3);
@@ -386,6 +390,7 @@
 		buf.append("\n");		
 		buf.append("}\n");
 		assertEqualStringIgnoreDelim(newCU.getSource(), buf.toString());
+		JavaProjectHelper.performDummySearch();
 		newCU.delete(true, null);
 
 		newCUWizard= (NewCUCompletionUsingWizardProposal) proposals.get(1);
@@ -636,6 +641,7 @@
 		buf.append("\n");
 		buf.append("}\n");
 		assertEqualStringIgnoreDelim(newCU.getSource(), buf.toString());
+		JavaProjectHelper.performDummySearch();
 		newCU.delete(true, null);
 
 		newCUWizard= (NewCUCompletionUsingWizardProposal) proposals.get(4);
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/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/UseSupertypeWherePossibleUtil.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/UseSupertypeWherePossibleUtil.java
index d4f4c52..83a257d 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/UseSupertypeWherePossibleUtil.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/UseSupertypeWherePossibleUtil.java
@@ -104,13 +104,13 @@
 		fManager= manager;
 		fExtractedMemberSet= new HashSet(Arrays.asList(extractedMembers));
 		fSuperTypeName= superTypeName;
-		fInputClass= inputClass;
+		fInputClass= (IType)JavaModelUtil.toWorkingCopy(inputClass);
 		fCodeGenerationSettings= codeGenerationSettings;
 		fASTMappingManager= astManager;
 		fBadVarSet= new HashSet(0);
 		fReferenceNodeCache= new HashMap();
 		fRippleMethodCache= new HashMap();
-		fSuperTypeToUse= supertypeToUse;
+		fSuperTypeToUse= (IType)JavaModelUtil.toWorkingCopy(supertypeToUse);
 		fSuperTypeSet= createSuperTypeSet(fSuperTypeToUse, fInputClass.getJavaProject());
 		fUpdateInstanceOf= updateInstanceOf;
 	}
@@ -140,7 +140,15 @@
 			result.add(project.findType("java.lang.Object"));
 			return result;
 		}	
-		return new HashSet(Arrays.asList(JavaModelUtil.getAllSuperTypes(type, new NullProgressMonitor())));
+		return toWorkingCopyMembersSet(new HashSet(Arrays.asList(JavaModelUtil.getAllSuperTypes(type, new NullProgressMonitor()))));
+	}
+	
+	private static Set toWorkingCopyMembersSet(Set members){
+		Set result= new HashSet(members.size());
+		for (Iterator iter= members.iterator(); iter.hasNext();) {
+            result.add(JavaModelUtil.toWorkingCopy((IMember) iter.next()));
+        }
+        return result;
 	}
 	
 	private static SearchResultGroup[] getMemberReferences(IMember member, IProgressMonitor pm) throws JavaModelException{
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/EditorUtility.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/EditorUtility.java
index 605fdaf..608c8d7 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/EditorUtility.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/EditorUtility.java
@@ -174,7 +174,7 @@
 				
 			if (element instanceof ICompilationUnit) {
 				ICompilationUnit unit= (ICompilationUnit) element;
-					IResource resource= unit.getResource();
+					IResource resource= unit.getUnderlyingResource();
 					if (resource instanceof IFile)
 						return new FileEditorInput((IFile) resource);
 			}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CompilerConfigurationBlock.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CompilerConfigurationBlock.java
index 93e5d5d..a1f77e2 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CompilerConfigurationBlock.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CompilerConfigurationBlock.java
@@ -243,7 +243,7 @@
 		fContext= context;
 		fProject= project;
 		
-		fWorkingValues= getOptions();
+		fWorkingValues= getOptions(true);
 		fWorkingValues.put(INTR_DEFAULT_COMPLIANCE, getCurrentCompliance());
 		
 		fCheckBoxes= new ArrayList();
@@ -304,9 +304,9 @@
 		fTaskTagsStatus= new StatusInfo();		
 	}
 	
-	private Map getOptions() {
+	private Map getOptions(boolean inheritJavaCoreOptions) {
 		if (fProject != null) {
-			return fProject.getOptions(true);
+			return fProject.getOptions(inheritJavaCoreOptions);
 		} else {
 			return JavaCore.getOptions();
 		}	
@@ -894,7 +894,7 @@
 		packTodoTasks();
 
 		String[] allKeys= getAllKeys();
-		Map actualOptions= getOptions();
+		Map actualOptions= getOptions(false);
 		
 		// preserve other options
 		boolean hasChanges= false;
@@ -904,11 +904,16 @@
 			String val= null;
 			if (enabled) {
 				val= (String) fWorkingValues.get(key);
-				hasChanges= hasChanges | !val.equals(oldVal);
+				if (!val.equals(oldVal)) {
+					hasChanges= true;
+					actualOptions.put(key, val);
+				}
 			} else {
-				hasChanges= hasChanges | (oldVal != null);
-			}			
-			actualOptions.put(key, val);
+				if (oldVal != null) {
+					actualOptions.remove(key);
+					hasChanges= true;
+				}
+			}
 		}
 		
 		
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaCompletionProposal.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaCompletionProposal.java
index 78a9009..77892cd 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaCompletionProposal.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaCompletionProposal.java
@@ -459,12 +459,14 @@
 	}
 	
 	private void repairPresentation(ITextViewer viewer) {
-		if (fRememberedStyleRange != null && viewer instanceof ITextViewerExtension2) {
-			// attempts to reduce the redraw area
-			ITextViewerExtension2 viewer2= (ITextViewerExtension2) viewer;
-			viewer2.invalidateTextPresentation(fRememberedStyleRange.start, fRememberedStyleRange.length);
-		} else
-			viewer.invalidateTextPresentation();
+		if (fRememberedStyleRange != null) {
+			if (viewer instanceof ITextViewerExtension2) {
+				// attempts to reduce the redraw area
+				ITextViewerExtension2 viewer2= (ITextViewerExtension2) viewer;
+				viewer2.invalidateTextPresentation(fRememberedStyleRange.start, fRememberedStyleRange.length);
+			} else
+				viewer.invalidateTextPresentation();
+		}
 	}
 
 	private void updateStyle(ITextViewer viewer) {
@@ -473,7 +475,6 @@
 		if (text == null || text.isDisposed())
 			return;
 
-		fRememberedStyleRange= null;
 		IRegion visibleRegion= viewer.getVisibleRegion();			
 		int caretOffset= text.getCaretOffset() + visibleRegion.getOffset();
 
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>
